/* ============================================
   SANIMARCHE S.r.l. — Stylesheet tema
   Portato 1:1 da mockup-sanimarche/assets/css/{base.css,pages.css}
   ============================================ */

:root {
  /* ── Mapping ai nomi standard letti da assets/css/base.css (condiviso,
     mai modificato) — body/html/link di base dipendono da questi. ───────── */
  --color-primary:          #0099c6;   /* --teal del mockup */
  --color-primary-hover:    #00b8e6;   /* --teal2 */
  --color-secondary:        #0d2b45;   /* --navy */
  --color-secondary-hover:  #1a3f60;   /* --navy2 */
  --color-text:             #1e293b;   /* --text */
  --color-text-muted:       #64748b;   /* --muted */
  --color-text-light:       #64748b;
  --color-text-on-primary:  #ffffff;
  --color-bg:               #ffffff;
  --color-bg-alt:           #f8fafc;   /* --light */
  --color-bg-dark:          #0d2b45;   /* --navy */
  --color-border:           #e2e8f0;   /* --border */
  --font-heading:           'Inter', -apple-system, sans-serif;
  --font-body:              'Inter', -apple-system, sans-serif;

  /* ── Alias identici ai nomi del mockup — tutte le regole sotto sono
     riprese 1:1 da base.css/pages.css senza reinterpretare i valori. ─────── */
  --navy:#0d2b45;--navy2:#1a3f60;--teal:#0099c6;--teal2:#00b8e6;
  --accent:#e8f7fd;--text:#1e293b;--muted:#64748b;--white:#fff;
  --light:#f8fafc;--border:#e2e8f0;
  --sh:0 4px 24px rgba(13,43,69,.10);--sh2:0 16px 48px rgba(13,43,69,.16);
  --r:14px;--r2:22px;
  --nav-h:98px;
  --topbar-h:32px;
}

ul{list-style:none}

/* UTILITY */
.container{max-width:1220px;margin:0 auto;padding:0 24px}
/* Bug reale trovato: la nav è position:sticky alta var(--nav-h) (98px) e nel
   sito non esisteva alcun scroll-margin-top — qualunque link ad ancora
   (es. #esame-del-passo, usato dalla card "Esame del passo" in Home verso
   la sezione omonima in Ortopedia, vedi widget-service-detail-grid.php)
   sarebbe atterrato con l'intestazione della sezione nascosta dietro la
   barra di navigazione fissa. Applicato qui (non solo sull'ancora specifica)
   perché è innocuo ovunque — scroll-margin-top non ha alcun effetto finché
   l'elemento non è davvero il target di un salto/scrollIntoView. */
.section-pad{padding:88px 0;scroll-margin-top:var(--nav-h)}
.section-sm{padding:56px 0;scroll-margin-top:var(--nav-h)}
/* Bug reale corretto: ogni sezione del tema (.section-pad) gestisce già da
   sola lo spazio verso la sezione successiva tramite il proprio padding
   (top/bottom) più i controlli widget no_top_padding/no_bottom_padding/
   border_top (vedi widget-scard-grid.php, widget-feat-teaser.php,
   widget-lab-intro.php, widget-prodotti-catalogo.php) — l'intero design è
   costruito sul presupposto che due container Elementor di primo livello
   siano perfettamente adiacenti, senza spazio proprio. Elementor però
   applica di default un "row gap" tra i container flex di primo livello
   (impostazione del Kit, non presente nel nostro _elementor_data), che
   crea una fascia bianca vuota tra ogni coppia di sezioni sovrapposte —
   particolarmente visibile quando entrambe condividono lo stesso sfondo
   grigio chiaro (es. Sanitaria e ausili: "Catalogo completo" + filtri).
   Ogni container generato da questo tema avvolge sempre UN solo widget
   (vedi el_container() in inc/setup-wizard.php): un gap tra colonne/righe
   interne non serve mai, quindi annullarlo ovunque è sicuro. */
.elementor-element{--gap:0px 0px}
.tag{display:inline-block;background:var(--accent);color:var(--teal);font-size:12px;font-weight:700;padding:5px 14px;border-radius:100px;letter-spacing:.6px;text-transform:uppercase;margin-bottom:14px}
.tag-w{background:rgba(255,255,255,.14);color:rgba(255,255,255,.9)}
.h2{font-size:clamp(24px,4vw,38px);font-weight:800;color:var(--navy);line-height:1.2}
.h2-w{color:#fff}
.lead{font-size:16.5px;color:var(--muted);line-height:1.8;margin-top:14px}
.lead-w{color:rgba(255,255,255,.76)}
.sec-head{text-align:center;max-width:620px;margin:0 auto 50px}

/* BUTTONS */
.btn{display:inline-flex;align-items:center;gap:8px;padding:13px 26px;border-radius:50px;font-weight:600;font-size:15px;cursor:pointer;transition:all .25s;border:none;font-family:inherit}
.btn-p{background:var(--teal);color:#fff}
.btn-p:hover{background:var(--teal2);transform:translateY(-2px);box-shadow:0 8px 24px rgba(0,153,198,.35)}
.btn-n{background:var(--navy);color:#fff}
.btn-n:hover{background:var(--navy2);transform:translateY(-2px)}
.btn-ow{background:transparent;color:#fff;border:2px solid rgba(255,255,255,.5)}
.btn-ow:hover{background:rgba(255,255,255,.1);border-color:#fff}
.btn-o{background:transparent;color:var(--teal);border:2px solid var(--teal)}
.btn-o:hover{background:var(--accent)}
.btn-sm{padding:9px 20px;font-size:13.5px}
.flex-gap{display:flex;gap:14px;flex-wrap:wrap}

/* TOPBAR */
.topbar{background:var(--navy);color:rgba(255,255,255,.72);font-size:13px;padding:8px 0}
.topbar .container{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.tb-g{display:flex;gap:18px;align-items:center}
.topbar a{color:rgba(255,255,255,.78);transition:color .2s}
.topbar a:hover{color:var(--teal2)}
.topbar i{color:var(--teal2);margin-right:4px}

/* NAV */
nav{position:sticky;top:0;z-index:1000;background:#fff;box-shadow:0 2px 16px rgba(0,0,0,.08)}
.nav-inner{display:flex;align-items:center;justify-content:space-between;padding:0 24px;max-width:1220px;margin:0 auto;height:var(--nav-h)}
.logo{display:flex;align-items:center;gap:12px;flex-shrink:0}
.nav-links{display:flex;align-items:center;gap:2px}
.nav-links a{font-size:13.5px;font-weight:550;color:var(--text);padding:7px 11px;border-radius:8px;transition:all .2s;white-space:nowrap}
.nav-links a:hover,.nav-links a.active{color:var(--teal);background:var(--accent)}
.nav-cta{margin-left:8px;padding:10px 20px!important;font-size:13.5px!important;background:var(--teal)!important;color:#fff!important;border-radius:50px!important}
.nav-cta:hover{background:var(--teal2)!important}
.hamburger{display:none;background:none;border:none;cursor:pointer;padding:8px}
.hamburger span{display:block;width:24px;height:2px;background:var(--navy);margin:5px 0;border-radius:2px;transition:all .3s}

/* PAGE HERO */
.page-hero{background:linear-gradient(135deg,var(--navy) 0%,#0a3d62 55%,#0d5a82 100%);color:#fff;padding:64px 0 56px;position:relative;overflow:hidden}
.page-hero::before{content:'';position:absolute;inset:0;background-image:radial-gradient(circle at 20% 20%,rgba(255,255,255,.04) 1px,transparent 1px),radial-gradient(circle at 80% 80%,rgba(255,255,255,.03) 1px,transparent 1px);background-size:48px 48px}
.page-hero .container{position:relative;z-index:1}
.page-hero h1{font-size:clamp(26px,5vw,46px);font-weight:900;line-height:1.15;letter-spacing:-.8px}
.page-hero .sub{font-size:17px;color:rgba(255,255,255,.74);line-height:1.75;max-width:620px;margin-top:14px}
.breadcrumb{display:flex;gap:8px;align-items:center;font-size:13px;color:rgba(255,255,255,.5);margin-bottom:18px;flex-wrap:wrap}
.breadcrumb a{color:rgba(255,255,255,.65);transition:color .2s}
.breadcrumb a:hover{color:#fff}
.breadcrumb span{color:rgba(255,255,255,.3)}

/* GRIDS */
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center}
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:26px}
.auto-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:22px}

/* SERVICE CARD */
.scard{background:#fff;border:1px solid var(--border);border-radius:var(--r);padding:30px 26px;transition:all .3s;position:relative;overflow:hidden}
.scard::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:var(--teal);transform:scaleX(0);transform-origin:left;transition:transform .3s}
.scard:hover{box-shadow:var(--sh2);transform:translateY(-5px);border-color:transparent}
.scard:hover::before{transform:scaleX(1)}
.s-icon{width:54px;height:54px;border-radius:13px;background:var(--accent);color:var(--teal);font-size:22px;display:flex;align-items:center;justify-content:center;margin-bottom:18px;transition:all .3s}
.scard:hover .s-icon{background:var(--teal);color:#fff}
.scard h2,.scard h3{font-size:16px;font-weight:700;color:var(--navy);margin-bottom:8px}
.scard p{font-size:14px;color:var(--muted);line-height:1.65}
.card-lnk{display:inline-flex;align-items:center;gap:6px;color:var(--teal);font-size:13px;font-weight:600;margin-top:14px}
.card-lnk i{transition:transform .2s}
.scard:hover .card-lnk i{transform:translateX(4px)}

/* FEAT LIST */
.feat-list{display:flex;flex-direction:column;gap:16px;margin-top:24px}
.feat{display:flex;gap:14px;align-items:flex-start}
.feat-ic{width:44px;height:44px;background:var(--accent);color:var(--teal);border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}
.feat h3,.feat h4{font-size:15px;font-weight:700;color:var(--navy);margin-bottom:4px}
.feat p{font-size:13.5px;color:var(--muted);line-height:1.6}

/* DARK SECTION */
.dark-sec{background:linear-gradient(135deg,var(--navy),#0a3d62);color:#fff}
.dark-sec .h2{color:#fff}
.dark-sec .lead{color:rgba(255,255,255,.74)}

/* ORTHO FEATS GRID */
.ortho-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:26px}
.o-feat{background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.12);border-radius:12px;padding:18px;display:flex;gap:12px;align-items:flex-start;transition:background .2s}
.o-feat:hover{background:rgba(255,255,255,.11)}
.o-feat i{color:var(--teal2);font-size:18px;margin-top:2px;flex-shrink:0}
.o-feat h3,.o-feat h4{font-size:14px;font-weight:700;color:#fff;margin-bottom:3px}
.o-feat p{font-size:12.5px;color:rgba(255,255,255,.65);line-height:1.5}

/* STATS */
.stats-bar{background:var(--teal);padding:60px 0}
.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:24px;text-align:center}
.stat-n{font-size:clamp(34px,5vw,50px);font-weight:900;color:#fff;line-height:1}
.stat-n sup{font-size:50%;vertical-align:super}
.stat-l{font-size:13px;color:rgba(255,255,255,.8);margin-top:7px;font-weight:500}

/* PRODUCTS */
.prod-cats{display:flex;gap:9px;flex-wrap:wrap;margin-bottom:30px}
.cpill{padding:7px 17px;border-radius:100px;font-size:13px;font-weight:600;cursor:pointer;transition:all .2s;border:2px solid var(--border);color:var(--muted);background:#fff}
.cpill:hover,.cpill.active{background:var(--teal);color:#fff;border-color:var(--teal)}
.prod-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(246px,1fr));gap:22px}
.prod-grid-3col{grid-template-columns:repeat(3,1fr)}
/* .pcard era un <a> (l'intera card cliccabile verso il prodotto) — diventato
   <div> per poter ospitare un secondo link VERO indipendente (badge noleggio,
   vedi .p-rent-badge sotto): un <a> dentro un altro <a> è HTML non valido e
   spezzava il click sulla card (bug reale trovato e corretto). position:relative
   +cursor:pointer sostituiscono qui il comportamento che prima veniva "gratis"
   dall'essere un <a>. */
.pcard{background:#fff;border-radius:var(--r);overflow:hidden;border:1px solid var(--border);transition:all .3s;position:relative;cursor:pointer}
.pcard:hover{box-shadow:var(--sh2);transform:translateY(-4px)}
/* "Stretched link": copre l'intera card, sotto (z-index) al badge noleggio così
   quest'ultimo riceve i click sulla propria area invece di essere intercettato. */
.pcard-stretched-link{position:absolute;inset:0;z-index:1}
.p-img{height:176px;overflow:hidden}
.p-img img{width:100%;height:100%!important;object-fit:cover;transition:transform .4s}
.pcard:hover .p-img img{transform:scale(1.07)}
.p-body{padding:18px 20px}
.p-cat{font-size:11px;font-weight:700;color:var(--teal);text-transform:uppercase;letter-spacing:.5px;margin-bottom:5px}
.p-body h3,.p-body h4{font-size:15px;font-weight:700;color:var(--navy);margin-bottom:6px}
.p-body p{font-size:13px;color:var(--muted);line-height:1.55}
.p-cta{display:inline-flex;align-items:center;gap:6px;color:var(--teal);font-size:13px;font-weight:600;margin-top:11px}
/* Badge "Disponibile anche a noleggio" (§0.3 richiesta cliente) — link reale
   verso /noleggio/, position:relative+z-index sopra .pcard-stretched-link
   (stessa area) per restare cliccabile verso Noleggio invece di essere
   "rubato" dallo stretched link del prodotto. */
.p-rent-badge{position:relative;z-index:2;display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:700;color:var(--teal);background:rgba(0,153,198,.08);border:1px solid rgba(0,153,198,.25);border-radius:100px;padding:4px 11px;margin-top:8px;text-decoration:none}
.p-rent-badge:hover{background:var(--teal);color:#fff;border-color:var(--teal)}

/* STRUTTURE */
.strut-card{background:#fff;border-radius:var(--r);padding:26px;border:1px solid var(--border);transition:all .3s}
.strut-card:hover{border-color:var(--teal);box-shadow:var(--sh)}
.s-emoji{width:50px;height:50px;border-radius:12px;background:var(--accent);color:var(--teal);font-size:20px;display:flex;align-items:center;justify-content:center;margin-bottom:14px;transition:all .3s}
.strut-card:hover .s-emoji{background:var(--teal);color:#fff}
.strut-card h3,.strut-card h4{font-size:15.5px;font-weight:700;color:var(--navy);margin-bottom:7px}
.strut-card p{font-size:13.5px;color:var(--muted);line-height:1.65}

/* BLOG */
.blog-card{background:#fff;border-radius:var(--r);overflow:hidden;border:1px solid var(--border);transition:all .3s}
.blog-card:hover{box-shadow:var(--sh2);transform:translateY(-4px)}
.b-img{height:196px;overflow:hidden;background:var(--accent)}
.b-img img{width:100%;height:100%!important;object-fit:cover;transition:transform .4s}
.blog-card:hover .b-img img{transform:scale(1.06)}
.b-body{padding:22px}
.b-meta{display:flex;gap:10px;align-items:center;margin-bottom:10px}
.b-tag{font-size:11px;font-weight:700;background:var(--accent);color:var(--teal);padding:3px 10px;border-radius:100px}
.b-date{font-size:12px;color:var(--muted)}
.b-body h3,.b-body h4{font-size:16px;font-weight:700;color:var(--navy);margin-bottom:7px;line-height:1.4}
.b-body p{font-size:13.5px;color:var(--muted);line-height:1.65}
.b-read{display:inline-flex;align-items:center;gap:6px;color:var(--teal);font-size:13px;font-weight:600;margin-top:12px}

/* CONTACT FORM */
.cform{background:var(--light);border-radius:var(--r2);padding:36px;border:1px solid var(--border)}
.contact-card{background:var(--light);border-radius:18px;padding:36px;border:1px solid var(--border)}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.fg{margin-bottom:17px}
.fg label{display:block;font-size:13px;font-weight:600;color:var(--navy);margin-bottom:6px}
.fg input,.fg select,.fg textarea{width:100%;padding:11px 15px;border:1.5px solid var(--border);border-radius:10px;font-family:inherit;font-size:14.5px;color:var(--text);background:#fff;transition:border-color .2s;outline:none}
.fg input:focus,.fg select:focus,.fg textarea:focus{border-color:var(--teal);box-shadow:0 0 0 3px rgba(0,153,198,.1)}
.fg textarea{resize:vertical;min-height:110px}
.fcheck{display:flex;gap:10px;align-items:flex-start;margin-bottom:20px}
.fcheck input[type=checkbox]{margin-top:3px;accent-color:var(--teal);width:16px;height:16px;flex-shrink:0;cursor:pointer}
.fcheck label{font-size:13px;color:var(--muted);line-height:1.5;cursor:pointer}
.fcheck a{color:var(--teal)}
.success-msg{display:none;background:#d4edda;border:1px solid #c3e6cb;color:#155724;border-radius:10px;padding:16px 20px;margin-top:16px;font-weight:600}

/* CF7 acceptance — riusa lo stile .fcheck, adattato al markup <label> che CF7 genera */
.fcheck .wpcf7-acceptance{display:block}
.fcheck .wpcf7-acceptance .wpcf7-list-item{margin:0}
.fcheck .wpcf7-acceptance label{display:flex;gap:10px;align-items:flex-start;font-size:13px;color:var(--muted);line-height:1.5;cursor:pointer}
.fcheck .wpcf7-acceptance input[type=checkbox]{margin-top:3px;accent-color:var(--teal);width:16px;height:16px;flex-shrink:0;cursor:pointer}
.form-privacy-note{font-size:12.5px;color:var(--muted);margin:-10px 0 20px}
.form-privacy-note a{color:var(--teal);font-weight:600}
.wpcf7-response-output{margin:16px 0 0!important;border-radius:var(--r)!important;font-size:13.5px!important}
.wpcf7 br{display:none}

.ortho-teaser-img{border-radius:22px;width:100%;height:500px!important;object-fit:cover}

/* TESTI */
.tcard{background:#fff;border-radius:var(--r);padding:26px;border:1px solid var(--border)}
.t-stars{color:#f59e0b;font-size:14px;margin-bottom:12px}
.tcard p{font-size:14.5px;color:var(--text);line-height:1.7;font-style:italic}
.t-auth{display:flex;align-items:center;gap:12px;margin-top:17px}
.t-av{width:40px;height:40px;border-radius:50%;background:var(--teal);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:15px;flex-shrink:0}
.t-name{font-size:14px;font-weight:600;color:var(--navy)}
.t-city{font-size:12px;color:var(--muted)}

/* INFO BOX */
.info-box{background:var(--navy);color:#fff;border-radius:var(--r2);padding:34px 38px;display:flex;align-items:center;gap:30px;flex-wrap:wrap;justify-content:space-between;margin-top:38px}
.info-box h3{font-size:20px;font-weight:700}
.info-box p{font-size:14.5px;color:rgba(255,255,255,.7);margin-top:6px;max-width:480px}

/* CTA STRIP */
.cta-strip{background:linear-gradient(90deg,var(--navy),#0a3d62);padding:54px 0;text-align:center}
.cta-strip h2{font-size:clamp(20px,4vw,34px);font-weight:800;color:#fff;margin-bottom:11px}
.cta-strip p{font-size:16px;color:rgba(255,255,255,.74);max-width:530px;margin:0 auto 26px;line-height:1.7}
.cta-strip .btns{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}

/* FOOTER */
footer{background:var(--navy);color:rgba(255,255,255,.7)}
.f-main{padding:62px 0 42px}
.f-grid{display:grid;grid-template-columns:2fr 1fr 1fr 1.2fr;gap:42px}
.f-brand > p{font-size:13.5px;color:rgba(255,255,255,.55);line-height:1.78;margin-top:14px;max-width:268px}
.f-soc{display:flex;gap:9px;margin-top:20px}
.f-soc a{width:36px;height:36px;background:rgba(255,255,255,.1);border-radius:8px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:14px;transition:all .2s}
.f-soc a:hover{background:var(--teal);transform:translateY(-2px)}
/* titoli colonne footer: <p>, non <h5> (un H5 dopo un H2/H3 salta livelli di titolo) */
.f-col h5,.f-col .f-title{font-size:12px;font-weight:700;color:#fff;text-transform:uppercase;letter-spacing:.9px;margin-bottom:15px;line-height:1.4}
.f-col ul li{margin-bottom:9px}
.f-col ul li a{font-size:13.5px;color:rgba(255,255,255,.55);transition:color .2s}
.f-col ul li a:hover{color:var(--teal2)}
.f-row{display:flex;gap:10px;margin-bottom:10px;font-size:13.5px;color:rgba(255,255,255,.55)}
.f-row i{color:var(--teal2);margin-top:2px;flex-shrink:0}
.f-row a{color:rgba(255,255,255,.55);transition:color .2s}
.f-row a:hover{color:#fff}
.f-bot{border-top:1px solid rgba(255,255,255,.1);padding:19px 0}
.f-bot .container{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px;font-size:12.5px;color:rgba(255,255,255,.37)}
.f-bot a{color:rgba(255,255,255,.44);transition:color .2s}
.f-bot a:hover{color:var(--teal2)}

/* Credits link — icona caricata dal dominio Clion, stesso pattern di comet-srl/ecogest-srl */
.credits_link { color: #38B5E6 !important; font-weight: 700; }
.credits_link:hover { color: #fff !important; }
.credits_link::before {
  content: "";
  vertical-align: middle;
  width: 16px;
  height: 16px;
  display: inline-block;
  margin: 0 4px;
  background-image: url(https://www.clion.it/favicon-96x96.png);
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center;
  transition: transform 450ms ease;
}
.credits_link:hover::before { transform: rotateZ(360deg); }

/* ANIMATIONS */
.fade-up{opacity:0;transform:translateY(28px);transition:opacity .6s ease,transform .6s ease}
.fade-up.visible{opacity:1;transform:none}
.d1{transition-delay:.1s}.d2{transition-delay:.2s}.d3{transition-delay:.3s}.d4{transition-delay:.4s}.d5{transition-delay:.5s}.d6{transition-delay:.6s}

/* RESPONSIVE */
@media(max-width:1024px){
  .grid-2{grid-template-columns:1fr;gap:36px}
  .f-grid{grid-template-columns:1fr 1fr;gap:30px}
  .stats-grid{grid-template-columns:repeat(2,1fr)}
  .ortho-grid{grid-template-columns:1fr}
}
@media(max-width:768px){
  .tb-g:first-child{display:none}
  .section-pad{padding:60px 0}
  .grid-3{grid-template-columns:1fr}
  .form-row{grid-template-columns:1fr}
  .f-grid{grid-template-columns:1fr;gap:26px}
  .info-box{flex-direction:column}
  .cta-strip{padding:46px 0}
}
@media(max-width:480px){
  .stats-grid{grid-template-columns:1fr 1fr}
}

/* HAMBURGER ANIMATION */
.hamburger.active span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.hamburger.active span:nth-child(2){opacity:0;transform:scaleX(0)}
.hamburger.active span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}

/* NAV OVERLAY on mobile — bug reale corretto: il menu era ancorato con
   position:fixed;top:var(--nav-h), un valore FISSO che misura solo l'altezza
   della barra nav (98px) ignorando la topbar sopra di essa (altezza
   variabile: 27px normalmente, ma va su due righe — quindi più alta — sotto
   i 420px). A pagina appena caricata (scroll a 0, il caso più comune per chi
   apre subito l'hamburger) <nav> è ancora nel flusso normale SOTTO la
   topbar, non ancora "agganciata" in cima — il menu a tendina, misurando
   sempre e solo dalla cima della viewport, finiva quindi per iniziare
   PRIMA della fine reale della nav, tagliando la parte bassa dell'header
   (logo compreso). Fix: invece di un offset calcolato a mano (fragile,
   andrebbe ricalcolato ad ogni breakpoint della topbar), si ancora il menu
   direttamente alla nav stessa (position:absolute dentro <nav>, che è già
   position:sticky e quindi fa da riferimento) con top:100% — cioè "subito
   dopo la fine della nav", corretto automaticamente sia a scroll 0 (nav nel
   flusso, sotto la topbar di qualunque altezza) sia dopo lo scroll (nav
   agganciata in cima), senza bisogno di conoscere l'altezza della topbar.
   Soglia 1150px (non 768): logo + 9 voci + CTA richiedono ~1140px — sotto,
   la nav orizzontale schiacciava il logo (32px a 1024, 0 a 800) e usciva
   dallo schermo con scroll orizzontale (analisi pre-go-live, voce 8). */
@media(max-width:1150px){
  .hamburger{display:block}
  .nav-links{
    display:none;
    position:absolute;
    top:100%;left:0;right:0;height:100vh;height:100dvh;
    background:#fff;
    flex-direction:column;
    padding:24px 20px;
    gap:6px;
    overflow-y:auto;
    z-index:999;
    border-top:1px solid var(--border);
  }
  .nav-links.open{display:flex}
  .nav-links li{width:100%}
  .nav-links a{display:block;padding:12px 14px!important;font-size:15px!important;border-radius:10px;border-bottom:1px solid var(--border)}
  .nav-links a:last-child{border-bottom:none}
  .nav-links .nav-cta{
    margin-left:0!important;
    margin-top:8px;
    text-align:center;
    border-radius:50px!important;
    border-bottom:none!important;
  }
}

/* GRID RESPONSIVE */
@media(max-width:900px){
  .grid-2{grid-template-columns:1fr!important;gap:28px}
  .grid-3{grid-template-columns:1fr 1fr}
  .ortho-grid{grid-template-columns:1fr!important}
  .stats-grid{grid-template-columns:1fr 1fr}
  .f-grid{grid-template-columns:1fr 1fr;gap:30px}
}

@media(max-width:600px){
  .grid-3{grid-template-columns:1fr!important}
  .prod-grid{grid-template-columns:1fr!important}
  .f-grid{grid-template-columns:1fr!important}
  .hero-stats{gap:20px}
  .h-stat-n{font-size:22px}
  .btn{padding:11px 20px;font-size:14px}
  .page-hero{padding:48px 0 40px}
  .section-pad{padding:50px 0}
  .cta-strip{padding:40px 0}
  .form-row{grid-template-columns:1fr!important}
  .f-bot .container{flex-direction:column;align-items:flex-start;gap:8px}
  .stats-bar{padding:44px 0}
  .stats-grid{grid-template-columns:1fr 1fr;gap:20px}
  .stat-n{font-size:32px}
  .sec-head{margin:0 0 36px}
  .auto-grid{grid-template-columns:1fr}
}

@media(max-width:420px){
  .flex-gap{flex-direction:column;gap:10px}
  .flex-gap .btn{width:100%;justify-content:center}
  .hero-stats{grid-template-columns:1fr 1fr;display:grid;gap:16px}
  /* .topbar .container passa a flex-direction:column qui, ma sotto i 768px
     resta visibile un solo gruppo (.tb-g:first-child è già display:none) —
     "colonna" con un solo elemento non crea comunque una seconda riga,
     quindi l'altezza reale della topbar non cambia a questa soglia
     (verificato dal vivo): nessun --topbar-h dedicato necessario qui. */
  .topbar .container{flex-direction:column;gap:4px;text-align:center}
  .tb-g{justify-content:center;flex-wrap:wrap;gap:12px}
}

/* TOPBAR compact on mobile */
@media(max-width:768px){
  /* Bug reale corretto: era 27px ma l'altezza reale della topbar compatta
     (font-size:12px + padding:6px 0, misurata dal vivo) è ~31px — usata da
     .fan-hero in calc(100vh - nav-h - topbar-h): i 4px mancanti facevano
     terminare header+hero qualche pixel oltre i 100vh reali della viewport. */
  :root{--topbar-h:31px}
  .topbar{font-size:12px;padding:6px 0}
  .tb-g:first-child span{display:none}
}

/* HERO RESPONSIVE */
@media(max-width:900px){
  .hero-inner{grid-template-columns:1fr!important;padding:50px 24px!important;gap:36px!important}
  .hero h1{font-size:clamp(28px,6vw,44px)}
  .hero-img-wrap img{height:260px!important}
  .pill{display:none!important}
}

/* CARD GRIDS */
@media(max-width:640px){
  .scard{padding:22px 18px}
  .pcard .p-img{height:150px}
  .blog-card .b-img{height:170px}
  .sede-foot{gap:8px}
  .sede-foot .btn{flex:1;justify-content:center;text-align:center}
  .info-box{padding:24px 20px}
}

/* FOOTER RESPONSIVE IMPROVEMENTS */
@media(max-width:900px){
  .f-brand{grid-column:1/-1}
  .f-brand > p{max-width:100%}
}

/* PROCESS STEPS MOBILE */
@media(max-width:600px){
  .process-steps{grid-template-columns:1fr!important}
  .process-steps::before{display:none!important}
  .p-step{text-align:left;display:flex;gap:16px;align-items:flex-start;padding:0}
  .p-step-num{width:48px;height:48px;font-size:18px;flex-shrink:0;margin:0}
}

/* SEDI GRID */
@media(max-width:640px){
  .sedi-grid{grid-template-columns:1fr!important}
}

/* BLOG HERO CARD */
@media(max-width:768px){
  .blog-hero-card{grid-template-columns:1fr!important}
}

/* CERT GRID */
@media(max-width:500px){
  .cert-grid{grid-template-columns:1fr 1fr!important}
}

/* ORARI TABLE */
@media(max-width:480px){
  .orari-table td:first-child{width:110px}
  .orari-table td{padding:8px 10px;font-size:13px}
}

/* NEWSLETTER FORM */
@media(max-width:480px){
  .nl-row{flex-direction:column}
  .nl-row input{width:100%}
}

/* CONTACT FORM */
@media(max-width:600px){
  .contact-card{padding:22px 18px}
}

/* REAL LOGO */
.logo-img{height:82px;width:auto;display:block}
.logo-img-footer{height:48px;width:auto;display:block}
nav .logo{gap:0}

/* FLOATING CONTACT CTA (WhatsApp + Telefono) */
.float-cta{position:fixed;right:20px;bottom:20px;z-index:1200;display:flex;flex-direction:column;gap:12px}
.float-btn{width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:23px;box-shadow:0 8px 24px rgba(13,43,69,.28);transition:transform .2s,box-shadow .2s}
.float-btn:hover{transform:scale(1.08);box-shadow:0 10px 28px rgba(13,43,69,.35)}
.float-whatsapp{background:#25d366}
.float-phone{background:var(--teal)}
@media(max-width:600px){
  .float-cta{right:14px;bottom:14px;gap:10px}
  .float-btn{width:50px;height:50px;font-size:20px}
}

/* SHARED COMPONENTS (used by multiple pages) */
.steps{display:flex;gap:0;align-items:flex-start;margin-top:42px}
.step{flex:1;text-align:center;padding:0 20px;position:relative}
.step:not(:last-child)::after{content:'';position:absolute;top:28px;left:calc(50% + 30px);right:calc(-50% + 30px);height:2px;border-top:2px dashed var(--border)}
.step-num{width:56px;height:56px;border-radius:50%;background:var(--teal);color:#fff;font-size:22px;font-weight:800;display:flex;align-items:center;justify-content:center;margin:0 auto 18px}
.step h3,.step h4{font-size:15px;font-weight:700;color:var(--navy);margin-bottom:7px}
.step p{font-size:13.5px;color:var(--muted);line-height:1.6}
@media(max-width:768px){.steps{flex-direction:column;gap:30px}.step:not(:last-child)::after{display:none}}

/* Bug reale corretto: le card venivano stirate alla stessa altezza della più
   alta della riga (comportamento predefinito dei contenitori grid/flex che le
   ospitano — .grid-2/.auto-grid/.rent-cats — nessuno dei quali imposta un
   align-items esplicito adatto a card di contenuto variabile), lasciando un
   vuoto tra la checklist e il piè di card nelle card con meno voci (es.
   "Busti", 3 voci, accanto a "Esame del passo", 4). align-self:start qui
   forza ogni card alla propria altezza naturale, indipendentemente dal
   contenitore in cui viene usata — non tocca .grid-2/.auto-grid stesse,
   riusate altrove (es. immagine+testo) dove il centraggio verticale resta corretto. */
.service-detail{background:#fff;border-radius:22px;overflow:hidden;border:1px solid var(--border);transition:all .3s;display:flex;flex-direction:column;height:100%}
.service-detail:hover{box-shadow:0 16px 48px rgba(13,43,69,.13)}
.sd-head{padding:28px;background:linear-gradient(135deg,var(--navy),#0a3d62);color:#fff}
.sd-head i{font-size:28px;color:var(--teal2);margin-bottom:12px;display:block}
.sd-head h3{font-size:20px;font-weight:800}
/* Badge "Predisposto"/"Su misura" per categoria (§4.2 richiesta cliente) —
   sfondo semi-trasparente su .sd-head, che ha già sfondo scuro sfumato. */
.sd-tag{display:inline-block;font-size:11px;font-weight:700;letter-spacing:.3px;color:#fff;background:rgba(255,255,255,.18);border:1px solid rgba(255,255,255,.32);border-radius:100px;padding:3px 11px;margin-top:8px}
.sd-head p{font-size:14px;color:rgba(255,255,255,.72);margin-top:8px;line-height:1.65}
.sd-body{padding:24px;flex:1;display:flex;flex-direction:column;gap:10px}
.sd-item{display:flex;align-items:flex-start;gap:10px;font-size:14px;color:var(--text)}
.sd-item i{color:var(--teal);margin-top:2px;flex-shrink:0}
.sd-foot{padding:20px 24px;border-top:1px solid var(--border)}

.faq-item{border:1px solid var(--border);border-radius:12px;overflow:hidden;margin-bottom:10px}
.faq-q{padding:18px 22px;font-weight:700;color:var(--navy);cursor:pointer;display:flex;justify-content:space-between;align-items:center;font-size:15px;background:#fff;transition:background .2s;gap:12px}
.faq-q:hover{background:var(--accent)}
.faq-q i{color:var(--teal);transition:transform .3s;flex-shrink:0}
.faq-a{padding:0 22px;max-height:0;overflow:hidden;transition:all .35s;font-size:14.5px;color:var(--muted);line-height:1.75}
.faq-item.open .faq-a{max-height:300px;padding:0 22px 18px}
.faq-item.open .faq-q i{transform:rotate(180deg)}

/* PRODUCT DETAIL PAGES */
.prod-hero-img{width:100%;border-radius:var(--r2);object-fit:cover;height:420px;display:block}
.price-note{background:var(--accent);border:1px solid rgba(0,153,198,.2);border-radius:var(--r);padding:16px 20px;margin:22px 0;display:flex;align-items:center;gap:12px;font-size:14px;color:var(--navy);font-weight:600}
.price-note i{color:var(--teal);font-size:18px;flex-shrink:0}
@media(max-width:768px){.prod-hero-img{height:280px}}

/* ARTICLE CONTENT (blog articles) */
.article-content{width:100%}
.article-content .article-img{width:100%;height:420px;object-fit:cover;border-radius:var(--r2);margin-bottom:36px;display:block}
.article-content h2{font-size:26px;font-weight:800;color:var(--navy);margin:44px 0 16px;line-height:1.3}
.article-content h2:first-child{margin-top:0}
.article-content h3{font-size:19px;font-weight:700;color:var(--navy);margin:28px 0 10px}
.article-content p{font-size:16px;color:var(--text);line-height:1.85;margin-bottom:18px}
.article-content ul,.article-content ol{margin:0 0 20px;padding-left:22px;display:flex;flex-direction:column;gap:10px}
.article-content li{font-size:16px;color:var(--text);line-height:1.7}
.article-content strong{color:var(--navy);font-weight:700}
.article-content em{font-style:italic}
.article-callout{background:var(--light);border:1px solid var(--border);border-radius:var(--r2);padding:32px;text-align:center;margin:40px 0}
.article-callout>i{font-size:30px;color:var(--teal);margin-bottom:12px;display:block}
.article-callout h3{margin:0 0 10px;font-size:19px;font-weight:800;color:var(--navy);display:flex;align-items:center;justify-content:center;gap:8px}
.article-callout h3 i{font-size:18px;color:var(--teal)}
.article-callout p{max-width:520px;margin:0 auto 20px;color:var(--muted);font-size:14.5px;line-height:1.7}
.article-callout .btn{margin-top:4px}
@media(max-width:600px){.article-content .article-img{height:240px}.article-content h2{font-size:22px}}

/* ================== INDEX ================== */
/* Fan Hero — sostituisce l'hero classica + "Chi sei?" in home: le 8 voci
   (4 privati + 4 aziende) diventano pannelli fotografici a ventaglio che si
   espandono in puro CSS all'hover (nessun JS), stesso meccanismo del widget
   "momenti-fan" di vitzio-theme ma a piena larghezza (100% viewport, non
   dentro un container) e alta quanto la vecchia hero — 100vh al netto di
   nav+topbar sticky, calcolo identico a .hero qui sotto, così "100vh
   compreso l'header" è di fatto già soddisfatto: l'header sticky occupa la
   fascia in cima, il resto della viewport è tutto ventaglio. */
/* Bug reale corretto: su mobile "100vh" NON è l'altezza realmente visibile
   — è calcolata come se la barra indirizzi del browser fosse sempre nascosta,
   quindi quando è visibile (es. appena caricata la pagina, come nello
   screenshot del cliente) il contenuto dimensionato in vh sborda oltre il
   fondo schermo reale. "100dvh" (dynamic viewport height) si aggiorna
   invece in tempo reale in base allo spazio davvero visibile — supportato
   da tutti i browser mobili moderni (iOS Safari 15.4+, Chrome Android
   108+). Il fallback in vh resta per i browser più vecchi che non
   riconoscono affatto dvh (altrimenti l'intera regola verrebbe scartata). */
.fan-hero{height:calc(100vh - var(--nav-h) - var(--topbar-h));height:calc(100dvh - var(--nav-h) - var(--topbar-h));min-height:440px;display:flex;width:100%;overflow:hidden}
.fan-panel{
  position:relative;flex:1 1 0%;min-width:0;overflow:hidden;
  background-size:cover;background-position:center;
  text-decoration:none;color:inherit;display:block;
  transition:flex-grow .65s ease;
}
.fan-panel:hover,.fan-panel:focus-visible{flex-grow:4.2}
.fan-panel::before{
  content:'';position:absolute;inset:0;
  background:linear-gradient(to top, rgba(13,43,69,.34) 0%, rgba(13,43,69,.07) 38%, rgba(13,43,69,.01) 70%, transparent 100%);
  transition:background .5s;
}
.fan-panel::after{content:'';position:absolute;inset:0;background:rgba(13,43,69,.08);transition:background .5s}
.fan-panel:hover::after,.fan-panel:focus-visible::after{background:rgba(13,43,69,0)}
.fan-panel-name-v{
  position:absolute;left:0;right:0;bottom:26px;z-index:2;text-align:center;
  writing-mode:vertical-rl;transform:rotate(180deg);margin:0 auto;width:44px;
  /* clamp legato all'altezza (vh) invece di un valore fisso: i titoli più
     lunghi ("Consulenza e preventivi dedicati") scritti in verticale a un
     valore fisso troppo alto supererebbero l'altezza del pannello su
     schermi bassi (min-height:440px), venendo tagliati in cima per via
     dell'overflow:hidden — qui però il testo resta ancorato al basso
     (bottom:26px) come in origine, non centrato verticalmente. */
  font-size:clamp(24px,4.2vh,38px);font-weight:800;color:#fff;white-space:nowrap;
  transition:opacity .3s;
}
.fan-panel:hover .fan-panel-name-v,.fan-panel:focus-visible .fan-panel-name-v{opacity:0}
.fan-panel-expand{
  position:absolute;left:0;right:0;bottom:0;z-index:2;padding:26px;
  opacity:0;transform:translateY(14px);transition:opacity .35s,transform .35s;
}
.fan-panel:hover .fan-panel-expand,.fan-panel:focus-visible .fan-panel-expand{opacity:1;transform:translateY(0);transition-delay:.12s}
/* Overlay dedicato dietro titolo/testo/CTA del pannello aperto: il tint
   costante di .fan-panel::after sparisce in hover (per mostrare la foto
   "pulita" sul resto del pannello) e il gradiente di .fan-panel::before è
   volutamente leggero (richiesta cliente) — da soli non bastano più a
   garantire contrasto col testo su foto chiare. Pseudo-elemento esteso oltre
   il padding (top/left/right/bottom negativi) cosi' la sfumatura scende
   dolcemente invece di tagliare netta sul bordo del blocco testo. */
.fan-panel-expand::before{
  content:'';position:absolute;z-index:-1;pointer-events:none;
  left:-26px;right:-26px;bottom:-26px;top:-90px;
  background:linear-gradient(to top, rgba(9,32,52,.82) 0%, rgba(9,32,52,.5) 50%, rgba(9,32,52,0) 100%);
}
.fan-panel-expand h3{font-size:clamp(19px,1.9vw,24px);font-weight:800;color:#fff;margin-bottom:8px;line-height:1.15}
.fan-panel-expand p{font-size:clamp(14px,1.1vw,16px);color:rgba(255,255,255,.82);line-height:1.55;margin-bottom:12px}
.fan-panel-expand .fan-cta{font-size:11px;letter-spacing:1px;text-transform:uppercase;color:var(--teal2);font-weight:700;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
/* Separatore più marcato tra il 4° pannello (privati) e il 5° (aziende) —
   richiesta esplicita cliente. Bug reale corretto: un border-left aggiunge
   larghezza alla box del pannello (anche con box-sizing:border-box, il
   colore semi-trasparente lasciava comunque intravedere la foto sotto,
   risultando in una riga "sporca" invece di un separatore netto). Un
   box-shadow inset è puramente visivo (non altera il box model) e qui è
   un colore SOLIDO (non rgba), quindi nessun bleed-through dell'immagine. */
.fan-panel:nth-child(5){box-shadow:inset 4px 0 0 0 var(--teal2)}

/* Responsive — niente hover affidabile sotto i 900px (touch): il testo di
   ogni pannello resta sempre visibile, niente ventaglio. Bug reale trovato
   (non un normale conflitto CSS): impilando 8 pannelli con height:auto la
   sezione arriva a ~2145px di contenuto, ma il wrapper che Elementor genera
   per il widget resta bloccato a un'altezza minore — confermato con
   ispezione dal vivo (Chrome headless): perfino height/min-height inline
   con !important su tutta la catena di contenitori non lo sblocca, quindi
   NON è un problema di specificità/cascata risolvibile da qui. La sezione
   successiva della pagina finisce così a metà del contenuto ancora visibile
   della hero. Invece di rincorrere quella causa, si evita del tutto:
   l'altezza resta VINCOLATA come a desktop (mai height:auto) e gli 8
   pannelli diventano un carosello ORIZZONTALE a scorrimento con snap,
   invece di una griglia impilata verticalmente. */
@media(max-width:900px){
  .fan-hero{
    display:flex;flex-direction:row;overflow-x:auto;overflow-y:hidden;
    scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;
  }
  .fan-panel{flex:0 0 78%;scroll-snap-align:center}
  .fan-panel-name-v{display:none}
  .fan-panel-expand{opacity:1!important;transform:none!important;padding:20px}
  .fan-panel-expand::before{left:-20px;right:-20px;bottom:-20px;top:-70px}
  .fan-panel::after{background:rgba(13,43,69,.14)!important}
  /* Separatore "privati/aziende": in un carosello a riga unica basta di
     nuovo un bordo verticale sul 5° pannello (primo di "aziende"), come a
     desktop, non serve più la doppia gestione a righe della griglia. */
  .fan-panel:nth-child(5){box-shadow:inset 4px 0 0 0 var(--teal2)}
}
@media(max-width:600px){
  .fan-panel{flex-basis:86%}
  /* Titolo molto più grande di prima (clamp 26-36px) ma pannello stretto
     (86% di uno schermo telefono): niente più white-space:nowrap sul
     titolo (rimosso alla base) e qui il font si riduce leggermente per i
     nomi più lunghi ("Manutenzione e assistenza tecnica" ecc.), che
     comunque ora vanno su 2 righe invece di uscire dal pannello. */
  .fan-panel-expand h3{font-size:18px}
  .fan-panel-expand p{font-size:15px}
}

/* ---------- Duo Hero (home, ottobre 2026) — sostituisce la .fan-hero a 8
   pannelli: 2 card Privati/Strutture. Desktop con hover: altezza card FISSA
   (nessun reflow della pagina) — all'hover la card si allarga e le
   sottocategorie si aprono rubando spazio alla foto, non alla pagina sotto.
   Touch/mobile: sottocategorie sempre aperte, altezza naturale. */
.duo-hero{padding:36px 0 56px;background:linear-gradient(180deg,#fff 0%,var(--light) 100%)}
.duo-hero__head{text-align:center;max-width:1060px;margin:0 auto 28px}
.duo-hero__title{font-size:clamp(26px,3.4vw,42px);font-weight:800;color:var(--navy);line-height:1.15;letter-spacing:-.02em}
.duo-hero__text{font-size:clamp(15px,1.4vw,18px);color:var(--muted);line-height:1.6;margin-top:10px}
.duo-hero__grid{display:flex;gap:24px}
.duo-card{
  flex:1 1 0%;min-width:0;display:flex;flex-direction:column;
  height:clamp(470px,calc(100vh - var(--nav-h) - var(--topbar-h) - 190px),580px);
  height:clamp(470px,calc(100dvh - var(--nav-h) - var(--topbar-h) - 190px),580px);
  background:#fff;border-radius:var(--r2);overflow:hidden;box-shadow:var(--sh);
  transition:flex-grow .55s ease,box-shadow .3s;
}
.duo-card:hover,.duo-card:focus-within{flex-grow:1.45;box-shadow:var(--sh2)}
.duo-card__media{display:block;flex:1 1 auto;min-height:120px;position:relative;overflow:hidden}
/* .duo-card davanti: deve battere ".elementor img{height:auto;max-width:100%}"
   del frontend Elementor (0,1,1), che altrimenti lascia la foto alla sua
   altezza naturale invece di riempire il riquadro. */
.duo-card .duo-card__img{position:absolute;inset:0;width:100%;height:100%;max-width:none;object-fit:cover;object-position:center 25%;transition:transform .6s ease}
.duo-card:hover .duo-card__img{transform:scale(1.03)}
.duo-card__body{flex:0 0 auto;padding:26px 30px 28px;display:flex;flex-direction:column}
.duo-card__title{font-size:clamp(24px,2.4vw,34px);font-weight:800;line-height:1.1;letter-spacing:-.01em}
.duo-card--privati .duo-card__title{color:var(--teal)}
.duo-card--strutture .duo-card__title{color:var(--navy)}
.duo-card__text{font-size:15.5px;color:var(--muted);line-height:1.55;margin-top:8px}
.duo-card__subs{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows .45s ease,opacity .3s ease,margin-top .45s ease}
.duo-card:hover .duo-card__subs,.duo-card:focus-within .duo-card__subs{grid-template-rows:1fr;opacity:1;margin-top:14px;transition-delay:.1s}
.duo-card__list{overflow:hidden;min-height:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 18px}
.duo-card__list a{display:flex;align-items:center;gap:12px;padding:8px 0;color:var(--text);font-size:15px;font-weight:500;line-height:1.3;transition:color .2s}
.duo-card__ic{flex:none;width:24px;text-align:center;font-size:19px}
.duo-card--privati .duo-card__ic,.duo-card--privati .duo-card__list a:hover{color:var(--teal)}
.duo-card--strutture .duo-card__ic,.duo-card--strutture .duo-card__list a:hover{color:var(--navy2)}
.duo-card__cta{margin-top:20px;display:flex;align-items:center;justify-content:center;gap:10px;padding:14px 24px;border-radius:12px;font-size:15.5px;font-weight:600;color:#fff;transition:background .25s,transform .25s}
.duo-card__cta:hover{transform:translateY(-2px)}
.duo-card--privati .duo-card__cta{background:var(--teal)}
.duo-card--privati .duo-card__cta:hover{background:var(--teal2)}
.duo-card--strutture .duo-card__cta{background:var(--navy)}
.duo-card--strutture .duo-card__cta:hover{background:var(--navy2)}
@media(hover:none),(max-width:900px){
  .duo-card,.duo-card:hover,.duo-card:focus-within{height:auto;flex-grow:1}
  .duo-card__media{flex:none;aspect-ratio:16/9}
  .duo-card__subs{grid-template-rows:1fr;opacity:1;margin-top:14px}
}
@media(max-width:900px){
  .duo-hero{padding:32px 0 40px}
  .duo-hero__head{margin-bottom:24px}
  .duo-hero__grid{flex-direction:column;gap:20px}
}
@media(max-width:480px){
  .duo-card__body{padding:22px 20px 24px}
  .duo-card__list{grid-template-columns:1fr}
}

/* ---------- Review Banner — schermo pieno, foto di sfondo + invito a
   lasciare una recensione Google. 100dvh (non 100vh, stesso motivo già
   corretto sulla fan-hero: su mobile 100vh ignora la barra indirizzi del
   browser e il contenuto sborda oltre lo schermo realmente visibile). */
.review-banner{
  min-height:56vh;min-height:56dvh;width:100%;position:relative;overflow:hidden;
  display:flex;align-items:center;justify-content:center;text-align:center;
  background-size:cover;background-position:center;
}
@media(max-width:600px){
  .review-banner{min-height:64vh;min-height:64dvh}
}
.review-banner-overlay{position:absolute;inset:0;background:rgba(13,43,69,.62)}
.review-banner-content{position:relative;z-index:1;max-width:640px;padding:0 24px}
.review-banner-stars{display:flex;justify-content:center;gap:6px;margin-bottom:18px}
.review-banner-content .h2-w{margin-bottom:16px}
.review-banner-content .lead-w{margin-bottom:32px}
.review-banner-btn{display:inline-flex;align-items:center;gap:10px;background:#fff;color:var(--navy)!important}
.review-banner-btn:hover{background:var(--light)}

.hero{min-height:calc(100vh - var(--nav-h) - var(--topbar-h));min-height:calc(100dvh - var(--nav-h) - var(--topbar-h));background:linear-gradient(135deg,#0d2b45,#0a3d62,#0d5a82);position:relative;overflow:hidden;display:flex;align-items:center}
.blob1,.blob2{position:absolute;border-radius:50%;pointer-events:none;filter:blur(80px);opacity:.18}
.blob1{width:600px;height:600px;background:radial-gradient(circle,#0099c6,transparent);top:-140px;right:-100px}
.blob2{width:500px;height:500px;background:radial-gradient(circle,#00b8e6,transparent);bottom:-80px;left:-80px}
.hero-inner{max-width:1220px;margin:auto;display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:center;padding:80px 24px;position:relative;z-index:1}
.hero-badge{display:inline-flex;align-items:center;gap:8px;background:rgba(0,184,230,.18);border:1px solid rgba(0,184,230,.35);color:#7ee8ff;font-size:12.5px;font-weight:700;padding:7px 16px;border-radius:100px;letter-spacing:.5px;margin-bottom:22px}
.hero-badge span{width:8px;height:8px;background:#2ecc71;border-radius:50%;display:inline-block;box-shadow:0 0 0 3px rgba(46,204,113,.3)}
.hero h1{font-size:clamp(32px,4.5vw,58px);font-weight:900;color:#fff;line-height:1.1;letter-spacing:-1.5px;margin-bottom:22px}
.hero h1 em{font-style:normal;color:#00b8e6}
.hero .sub{color:rgba(255,255,255,.78);font-size:17px;line-height:1.75;margin:0 0 36px}
.hero-stats{display:flex;gap:36px;margin-top:48px;padding-top:32px;border-top:1px solid rgba(255,255,255,.15);flex-wrap:wrap}
.h-stat-n{font-size:26px;font-weight:900;color:#fff;line-height:1}
.h-stat-n sup{font-size:55%;color:var(--teal2)}
.h-stat-l{font-size:12px;color:rgba(255,255,255,.6);margin-top:4px;font-weight:500}
.hero-img-wrap{border:1px solid rgba(255,255,255,.15);border-radius:22px;overflow:hidden;background:rgba(255,255,255,.07);position:relative}
.hero-img-wrap img{width:100%;height:440px!important;object-fit:cover;display:block}
.pill{position:absolute;background:#fff;border-radius:100px;padding:10px 18px;font-size:13px;font-weight:700;color:var(--navy);box-shadow:0 8px 24px rgba(0,0,0,.15);display:flex;align-items:center;gap:8px}
.pill-teal{background:var(--teal);color:#fff}
@media(max-width:900px){.hero-inner{grid-template-columns:1fr;padding:60px 24px}.hero-img-wrap img{height:280px}}

.services-grid{grid-template-columns:repeat(3,1fr)}
@media(max-width:900px){.services-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.services-grid{grid-template-columns:1fr}}

/* AUDIENCE SPLIT (Privati / Aziende) */
.audience-split{display:grid;grid-template-columns:1fr 1fr;gap:28px}
.audience-card{border-radius:var(--r2);padding:40px 36px;position:relative;overflow:hidden;color:#fff;display:flex;flex-direction:column}
.audience-card.privati{background:linear-gradient(135deg,#0d2b45,#0a3d62,#0d5a82)}
.audience-card.aziende{background:linear-gradient(135deg,#0d5a82,#0072a3,#0099c6)}
.audience-ic{width:60px;height:60px;border-radius:16px;background:rgba(255,255,255,.15);display:flex;align-items:center;justify-content:center;font-size:26px;margin-bottom:22px}
.audience-card h3{font-size:24px;font-weight:800;margin-bottom:10px}
.audience-desc{font-size:14.5px;color:rgba(255,255,255,.8);line-height:1.7;margin-bottom:22px}
.audience-card p{font-size:14.5px;color:rgba(255,255,255,.8);line-height:1.7;margin-bottom:22px}
.audience-list{display:flex;flex-direction:column;gap:10px;margin-bottom:28px}
.audience-list a{display:flex;align-items:center;gap:10px;color:#fff;font-size:14px;font-weight:600;background:rgba(255,255,255,.09);padding:11px 16px;border-radius:10px;transition:background .2s}
.audience-list a:hover{background:rgba(255,255,255,.2)}
.audience-list a i:first-child{color:var(--teal2);font-size:8px}
.audience-list a i:last-child{margin-left:auto;font-size:12px;opacity:.7}
.audience-card .btn{align-self:flex-start;margin-top:auto}
@media(max-width:900px){.audience-split{grid-template-columns:1fr}}

/* ================== AZIENDA ================== */
.timeline{position:relative;padding-left:48px;max-width:720px;margin:0 auto}
.timeline::before{content:'';position:absolute;left:8px;top:0;bottom:0;width:3px;background:linear-gradient(to bottom,var(--teal),var(--teal2))}
.tl-item{position:relative;margin-bottom:44px}
.tl-dot{position:absolute;left:-43px;top:4px;width:18px;height:18px;background:var(--teal);border-radius:50%;border:3px solid #fff;box-shadow:0 0 0 3px var(--teal)}
.tl-year{font-size:13px;font-weight:700;color:var(--teal);text-transform:uppercase;letter-spacing:.5px;margin-bottom:4px}
.tl-item h3,.tl-item h4{font-size:17px;font-weight:800;color:var(--navy);margin-bottom:7px}
.tl-item p{font-size:14.5px;color:var(--muted);line-height:1.7}

/* ================== ORTOPEDIA ================== */
.process-steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:24px;position:relative;margin-top:56px}
.process-steps::before{content:'';position:absolute;top:36px;left:10%;right:10%;height:2px;background:linear-gradient(90deg,var(--teal),var(--teal2));z-index:0}
.p-step{text-align:center;position:relative;z-index:1;padding:0 12px}
.p-step-num{width:72px;height:72px;background:#fff;border:3px solid var(--teal);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:24px;font-weight:900;color:var(--teal);margin:0 auto 18px;box-shadow:0 0 0 8px #fff}
.p-step h3,.p-step h4{font-size:14px;font-weight:700;color:var(--navy);margin-bottom:6px}
.p-step p{font-size:12.5px;color:var(--muted);line-height:1.6}
/* Modificatore per liste con più di 5 step (es. "Ausili su misura" — 7 step,
   vedi widget-process-steps.php). Due problemi con l'impostazione originaria
   pensata per 4-5 step in singola riga:
   1) la linea di collegamento (.process-steps::before) è una singola barra
      orizzontale: con più righe lascerebbe l'ultima scollegata — va nascosta;
   2) la griglia auto-fit(160px) incastra tante colonne quante ne entrano
      nel container, dando spezzature "storte" (6+1, 5+2...) invece di una
      suddivisione prevedibile. Si fissano quindi 4 colonne (griglia
      4 + 3, centrata) e ogni step diventa una card autonoma (invece di
      numero+testo "fluttuanti" senza alcun contenitore) per una resa più
      solida e coerente con le altre card del tema (.cert-card). */
.process-steps--no-line::before{display:none}
.process-steps--no-line{display:grid;grid-template-columns:repeat(4,minmax(0,240px));justify-content:center;gap:28px;row-gap:32px}
.process-steps--no-line .p-step{background:#fff;border:1px solid var(--border);border-radius:16px;padding:30px 20px 26px;box-shadow:0 4px 16px rgba(13,43,69,.05);transition:all .3s}
.process-steps--no-line .p-step:hover{border-color:var(--teal);box-shadow:0 10px 28px rgba(13,43,69,.1)}
.process-steps--no-line .p-step-num{box-shadow:none}
@media(max-width:900px){.process-steps--no-line{grid-template-columns:repeat(2,minmax(0,240px))}}
.cert-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:20px;margin-top:30px}
.cert-card{background:var(--light);border:1px solid var(--border);border-radius:14px;padding:22px;text-align:center;transition:all .3s}
.cert-card:hover{border-color:var(--teal);background:var(--accent)}
.cert-card i{font-size:26px;color:var(--teal);margin-bottom:10px}
.cert-card h3,.cert-card h4{font-size:14px;font-weight:700;color:var(--navy);margin-bottom:4px}
.cert-card p{font-size:12.5px;color:var(--muted);line-height:1.5}
@media(max-width:900px){.process-steps::before{display:none}}
@media(max-width:600px){.grid-2{grid-template-columns:1fr}}

/* ================== NOLEGGIO ================== */
.link-sede{background:#fff;border:1px solid var(--border);border-radius:12px;padding:18px;display:flex;gap:14px;align-items:center;transition:all .2s}
.link-sede:hover{border-color:var(--teal);box-shadow:var(--sh)}
.ls-icon{width:44px;height:44px;background:var(--accent);color:var(--teal);border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}
.ls-name{font-size:14px;font-weight:700;color:var(--navy);margin-bottom:3px}
.ls-tel{font-size:13.5px;color:var(--teal);font-weight:600}

/* RENTAL CATEGORIES */
.rent-cats{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:22px;margin-top:10px}
.rent-cat-head{padding:24px 26px;background:linear-gradient(135deg,var(--navy),#0a3d62);color:#fff;display:flex;align-items:center;gap:12px;min-height:108px}
.rent-cat-head i{font-size:22px;color:var(--teal2)}
.rent-cat-head h3{font-size:17px;font-weight:800}

/* ================== PUNTI-VENDITA ================== */
.sedi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:24px;margin-top:40px}
.sede-card{border-radius:18px;overflow:hidden;border:1px solid var(--border);transition:all .3s;background:#fff;display:flex;flex-direction:column}
.sede-card:hover{box-shadow:0 16px 40px rgba(13,43,69,.12);transform:translateY(-4px)}
.sede-head{padding:22px 24px;color:#fff}
.sede-head.c1{background:linear-gradient(135deg,#0d2b45,#0a3d62)}
.sede-head.c2{background:linear-gradient(135deg,#0a3d62,#0d5a82)}
.sede-head.c3{background:linear-gradient(135deg,#0d5a82,#0099c6)}
.sede-head h3{font-size:18px;font-weight:800;margin-bottom:4px}
.sede-head .sede-badge{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:700;background:rgba(255,255,255,.18);padding:3px 11px;border-radius:100px;margin-top:2px}
.sede-body{padding:22px 24px;display:flex;flex-direction:column;gap:11px;flex:1}
.sede-row{display:flex;align-items:flex-start;gap:10px;font-size:14px;color:var(--text)}
.sede-row i{color:var(--teal);font-size:13px;margin-top:2px;width:15px;flex-shrink:0}
.sede-row a{color:var(--text);transition:color .2s}
.sede-row a:hover{color:var(--teal)}
.sede-foot{padding:16px 24px;border-top:1px solid var(--border);display:flex;gap:10px;flex-wrap:wrap}
.orari-table{width:100%;border-collapse:collapse;font-size:14px}
.orari-table td{padding:9px 14px;border-bottom:1px solid var(--border)}
.orari-table td:first-child{font-weight:600;color:var(--navy);width:160px}
.orari-table td:last-child{color:var(--muted)}
.orari-table tr:last-child td{border-bottom:none}
.orari-table tr.chiuso td{color:#e74c3c}
.orari-grid{align-items:stretch}
.orari-grid>div{display:flex;flex-direction:column}
.orari-grid .tag{align-self:flex-start}
.orari-box{flex:1}
.sedi-map{flex:1;min-height:260px;border-radius:16px;overflow:hidden;border:1px solid var(--border)}
.sedi-map .leaflet-popup-content{font-family:inherit;font-size:13.5px;line-height:1.6}
.sedi-map .leaflet-popup-content a{color:var(--teal);font-weight:600}
@media(max-width:600px){.sedi-map{height:320px}}
#sedi-map{width:100%;height:100%}
.leaflet-popup-content-wrapper{border-radius:10px}
.feat.contact-feat{align-items:center}

/* ================== BLOG ================== */
.blog-hero-card{display:grid;grid-template-columns:1fr 1fr;gap:0;border-radius:22px;overflow:hidden;border:1px solid var(--border);margin-bottom:50px;background:#fff;transition:all .3s}
.blog-hero-card:hover{box-shadow:0 20px 60px rgba(13,43,69,.14);transform:translateY(-3px)}
.blog-hero-card .bh-img{height:400px;overflow:hidden}
.blog-hero-card .bh-img img{width:100%;height:100%;object-fit:cover;transition:transform .4s}
.blog-hero-card:hover .bh-img img{transform:scale(1.05)}
.blog-hero-card .bh-body{padding:40px;display:flex;flex-direction:column;justify-content:center}
.blog-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:26px}
.filter-bar{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:34px}
.f-pill{padding:8px 18px;border-radius:100px;font-size:13px;font-weight:600;cursor:pointer;transition:all .2s;border:2px solid var(--border);color:var(--muted);background:#fff}
.f-pill:hover,.f-pill.active{background:var(--teal);color:#fff;border-color:var(--teal)}
.newsletter-box{background:linear-gradient(135deg,var(--navy),#0a3d62);border-radius:22px;padding:48px;text-align:center;color:#fff;margin-top:70px}
.newsletter-box h3{font-size:26px;font-weight:800;margin-bottom:10px}
.newsletter-box p{font-size:16px;color:rgba(255,255,255,.74);margin-bottom:28px}
/* .fcheck/.form-privacy-note (checkbox privacy CF7) sono pensati per un
   contesto a sfondo chiaro (colore testo var(--muted), grigio) — su questo
   box a sfondo navy scuro risulterebbero quasi illeggibili. Testo chiaro
   solo in questo contesto, stessa struttura/dimensioni invariate altrove. */
.newsletter-box .fcheck label,.newsletter-box .fcheck .wpcf7-acceptance label{color:rgba(255,255,255,.74)}
.newsletter-box .form-privacy-note{color:rgba(255,255,255,.6)}
.newsletter-box .fcheck a,.newsletter-box .form-privacy-note a{color:#fff;text-decoration:underline}
.nl-form{max-width:480px;margin:0 auto}
/* Riga email+bottone come nel mockup (form statico con soli 2 figli). Il
   checkbox privacy reale (aggiunto per conformità, assente nel mockup) sta
   FUORI da questa riga, in .fcheck/.form-privacy-note sotto — se finisse
   dentro lo stesso contenitore flex, farebbe andare il bottone a capo sotto
   l'email (bug reale, segnalato dal cliente con screenshot mockup/tema). */
/* flex-wrap:nowrap deliberato — con :wrap, il bottone (larghezza fissa) e
   l'email (min-width:200px) possono superare i 480px di .nl-form su schermi
   di larghezza intermedia e andare comunque a capo. La riga resta su una
   sola linea fino al breakpoint mobile dedicato qui sotto (480px), dove lo
   stack verticale è voluto — non un effetto collaterale del wrap automatico. */
.nl-row{display:flex;gap:12px;flex-wrap:nowrap}
.nl-row input{flex:1;min-width:0;padding:13px 18px;border:none;border-radius:50px;font-size:14.5px;font-family:inherit;outline:none}
/* Il mockup ha "Iscriviti <i class="fa fa-arrow-right"></i>" letterale dentro il
   <button>, ma il form reale è generato da Contact Form 7: [submit] produce un
   <input type="submit"> (elemento void), che non supporta contenuto HTML né
   pseudo-elementi ::after — impossibile riprodurre l'icona con lo stesso markup.
   Fedeltà visiva ottenuta con una freccia SVG (stessa forma di fa-arrow-right)
   come background-image posizionata a destra, invece dell'icona font reale. */
.nl-row input[type="submit"]{flex:none;padding:13px 46px 13px 26px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath fill='%23ffffff' d='M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 20px center;background-size:13px}
@media(max-width:768px){
  .blog-hero-card{grid-template-columns:1fr}
  .blog-hero-card .bh-img{height:220px}
  .blog-hero-card .bh-body{padding:24px}
}

/* ================== STRUTTURE ================== */
.offer-grid{grid-template-columns:repeat(3,1fr)}
@media(max-width:900px){.offer-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.offer-grid{grid-template-columns:1fr}}
/* Nel mockup queste card scure (dark-sec/.offer-grid) usano style="" inline
   identici su ognuna delle 6 card — qui centralizzati in una regola scoped
   invece di ripetere l'inline style per ogni item nel widget. */
.offer-grid .scard{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.15)}
.offer-grid .scard h2,.offer-grid .scard h3{color:#fff}
.offer-grid .scard p{color:rgba(255,255,255,.65)}
.offer-grid .s-icon{background:rgba(255,255,255,.1);color:var(--teal2)}

.testi-carousel{position:relative;max-width:900px;margin:0 auto;overflow:hidden;transition:height .3s ease}
.testi-track{display:flex;align-items:flex-start;transition:transform .45s ease}
.testi-slide{flex:0 0 100%;width:100%;box-sizing:border-box;padding:40px 44px}
.testi-nav{display:flex;align-items:center;justify-content:center;gap:18px;margin-top:24px}
.testi-btn{width:40px;height:40px;border-radius:50%;background:#fff;border:1px solid var(--border);color:var(--navy);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s;flex-shrink:0}
.testi-btn:hover{background:var(--teal);color:#fff;border-color:var(--teal)}
.testi-dots{display:flex;gap:8px}
.testi-dot{width:9px;height:9px;border-radius:50%;background:var(--border);border:none;padding:0;cursor:pointer;transition:all .2s}
.testi-dot.active{background:var(--teal);width:22px;border-radius:5px}
@media(max-width:600px){.testi-slide{padding:28px 24px}}

/* ================== PRODOTTI ================== */
@media(max-width:900px){.prod-grid-3col{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.prod-grid-3col{grid-template-columns:1fr}}

/* Lab intro senza foto (Ortopedia, ottobre 2026): un solo blocco di testo centrato */
.lab-intro-solo{max-width:780px;margin:0 auto;text-align:center}
