/* ============================================================
   pronto-intervento24.it — global.css
   HOMEPAGE ONLY.

   Scoped strictly to what index.php, includes/header.php and
   includes/footer.php actually use. Nothing here is kept "in case
   another page needs it".

   Service pages load their own stylesheet:
     /assets/css/elettricista.css, fabbro.css, idraulico.css,
     caldaie.css, condizionatore.css, spurgo.css
   built from service-starter.css.

   Service files must never redefine tokens, .btn or .container —
   they only add sections this file does not have.

   Sections kept:
     0 fonts · 1 tokens · 2 reset · 3 container · 4 typography
     5 buttons · 6 header + mobile nav · 7 hero (split variant)
     8 tile strip · 9 about · 10 feature cards · 11 service cards
     12 FAQ · 13 CTA band · 14 region tabs · 15 coverage map
     16 city link groups · 19 footer · 20 sticky call bar
============================================================ */

/* ============================================================
   0. FONTS — system stack, nothing to download
   Owner's call, 24 Sep 2026. This section used to declare seven
   self-hosted @font-face rules (Archivo 600/700/800/900, Inter
   400/600/700) pointing at /assets/fonts/. That directory has never
   existed: all seven 404'd on every page load, every face sat in
   "error" state, and document.fonts.check() returned false for both
   families — so every page has in fact always rendered in the
   fallback, "Helvetica Neue"/Arial. Verified at request level before
   removing, not assumed (this was _PHASE-6-LOG.md A53).

   Archivo and Inter were the rebuild's own typography choice; the old
   WordPress site never used them either — its pages set
   "font-family: Arial" inline throughout. Removing the rules
   therefore changes nothing on screen and drops seven failed requests
   per page load, which matters on a site that is 85–95% mobile.

   The family names are gone from --font-display/--font-body below
   too, so the tokens say what actually renders. To reinstate the
   intended typography later: drop the seven .woff2 files into
   /assets/fonts/, restore these @font-face rules, and put "Archivo"
   and "Inter" back at the front of those two tokens.

   NOTE: 'Barlow Condensed' was referenced in the old section 13 but
   never loaded either. Removed at the same time.
============================================================ */


/* ============================================================
   1. DESIGN TOKENS  — the only :root in this file
============================================================ */
:root {
  /* --- Brand blues --- */
  --green-950:#1A1B27;  --green-900:#0e395e;  --green-800:#184069;
  --green-700:#2275ac;  --green-500:#2991d6;  --green-100:#e9f5fc;
  --green-050:#f7f8f1;
 
  /* --- Accent oranges --- */
  --amber-600:#F35A00;  --amber-500:#ff5100;  --amber-400:#fb8b4a;
  --amber-050:#f8f7f1;
 
  --gold-500:#d6a243;   --live-500:#28a745;
 
  /* --- Neutrals --- */
  --ink-900:#444444;  --ink-700:#626262;  --ink-500:#a8a8a8;
  --paper-000:#FFFFFF; --paper-050:#FCFCFC;
  --line-200:#EBEBEB; --line-100:#F2F2F2;
 
  /* --- Aliases kept so section 13's markup keeps working.
         Remapped onto the real palette (they previously pointed at a
         separate, unrelated colour set). --- */
  --ink:var(--green-900);
  --ember:var(--amber-500);
  --ember-dark:var(--amber-600);
  --cream:var(--amber-050);
  --line:var(--line-200);
  --paper:var(--paper-000);
 
  /* --- Type ---
     "Archivo"/"Inter" removed from the front of these two stacks on
     24 Sep 2026 along with their @font-face rules (see §0): the files
     never existed, so these are the families that were already
     rendering. The two tokens stay separate even though they now
     resolve identically — every component picks one deliberately, and
     keeping them distinct is what makes reinstating real display/body
     faces later a two-line change. */
  --font-display:"Helvetica Neue",Arial,sans-serif;
  --font-body:"Helvetica Neue",Arial,sans-serif;
  --font-head:var(--font-display);   /* alias, was Barlow Condensed */
 
  /* --- Spacing scale --- */
  --space-3xs:4px;  --space-2xs:8px;  --space-xs:12px;  --space-s:16px;
  --space-m:24px;   --space-l:32px;   --space-xl:48px;  --space-2xl:64px;
 
  /* --- Radius / shadow --- */
  --radius-s:10px; --radius-m:16px; --radius-l:26px;
  --radius:var(--radius-s);          /* alias */
  --shadow-card:0 1px 2px rgba(14,57,94,.06), 0 8px 24px rgba(14,57,94,.08);
  --shadow-pop:0 12px 40px rgba(14,57,94,.16);
  --shadow:var(--shadow-card);       /* alias */
 
  /* --- Layout --- */
  --max-w:1240px;
  --gutter:clamp(20px,5vw,64px);
 
  /* --- Fluid grid defaults. Override per component. --- */
  --col-min:280px;   /* narrowest a column may get before wrapping */
  --gap:var(--space-m);
  --cols-max:99;     /* hard ceiling on columns; 99 = uncapped */
 
  --header-h:88px;
  --logo-h:clamp(48px,12vw,66px);   /* header logo height, also feeds --mega-gap */
  --callbar-h:56px;
}


/* ============================================================
   2. RESET & BASE
============================================================ */
*,*::before,*::after { box-sizing:border-box; margin:0; padding:0; }
 
html { scroll-behavior:smooth; -webkit-text-size-adjust:100%; }
@media (prefers-reduced-motion:reduce){
  html { scroll-behavior:auto; }
  *,*::before,*::after{
    animation-duration:.01ms !important; animation-iteration-count:1 !important;
    transition-duration:.01ms !important; scroll-behavior:auto !important;
  }
}
 
body{
  font-family:var(--font-body);
  color:var(--ink-700);
  background:var(--paper-050);
  line-height:1.55;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;           /* belt-and-braces against mobile side-scroll */
}
 
img,svg,video,canvas{ display:block; max-width:100%; }
img,video{ height:auto; }
button,input,select,textarea{ font:inherit; color:inherit; }
button{ cursor:pointer; background:none; border:none; }
a{ text-decoration:none; color:inherit; }
ul,ol{ list-style:none; }
 
/* Long unbroken strings (phone numbers, URLs) must never widen the page */
p,li,td,th{ overflow-wrap:break-word; }
h1,h2:where(:not(.h1-look)),h3,h4,h5,h6,
h2:where(.h1-look){ overflow-wrap:normal; }
 
:target{ scroll-margin-top:calc(var(--header-h) + var(--space-s)); }
 
a:focus-visible,button:focus-visible,[tabindex]:focus-visible,
input:focus-visible,select:focus-visible,textarea:focus-visible,
summary:focus-visible{
  outline:3px solid var(--amber-500);
  outline-offset:3px;
  border-radius:4px;
}


/* ============================================================
   3. LAYOUT PRIMITIVES
   These are the pieces that make item counts irrelevant.
   Use them before writing any new grid CSS.
============================================================ */
 
/* --- Container: never overflows, no media queries needed --- */
.container,.wrap{
  width:min(100% - (var(--gutter) * 2), var(--max-w));
  margin-inline:auto;
}
 

 

 


 

 

 









 


 
section{ padding-block:clamp(56px,8vw,108px); }


/* ============================================================
   4. TYPOGRAPHY
============================================================ */
h1,h2:where(:not(.h1-look)),h3,h4,h5,h6,
/* ============================================================ 4. TYPOGRAPHY ============================================================ */ h2:where(.h1-look){
  font-family:var(--font-display);
  color:var(--ink-900);
  line-height:1.08;
  letter-spacing:-.01em;
  text-wrap:balance;
}
h1,
h2:where(.h1-look){ font-size:clamp(2rem,1.45rem + 2.4vw,3.25rem); font-weight:900; }
h2:where(:not(.h1-look)){ font-size:clamp(1.9rem,1.5rem + 1.8vw,3rem);   font-weight:800; }
h3{ font-size:clamp(1.15rem,1.05rem + .5vw,1.45rem); font-weight:700; }
h4{ font-size:clamp(1.1rem,1.02rem + .4vw,1.3rem);   font-weight:700; }
h5{ font-size:1.1rem; font-weight:700; }
h6{ font-size:1rem;   font-weight:700; }
 
p{ color:var(--ink-700); }
 
.section-kicker{
  display:inline-flex; align-items:center; gap:var(--space-2xs);
  font-family:var(--font-body); font-weight:600; font-size:.95rem;
  color:var(--green-700); margin-bottom:14px;
}
.section-kicker::before{
  content:""; width:8px; height:8px; border-radius:50%;
  background:var(--live-500); flex-shrink:0;
  animation:kicker-pulse 2s ease-out infinite;
}
/* A ring that grows out of the dot and fades. box-shadow does not affect layout,
   so nothing around it moves. The prefers-reduced-motion rule near the top of this
   file already cuts every animation to a single instant for visitors who ask. */
@keyframes kicker-pulse{
  0%  { box-shadow:0 0 0 0 color-mix(in srgb, var(--live-500) 60%, transparent); }
  70% { box-shadow:0 0 0 8px transparent; }
  100%{ box-shadow:0 0 0 0 transparent; }
}
 
 
.visually-hidden{
  position:absolute; width:1px; height:1px; overflow:hidden;
  clip:rect(0 0 0 0); white-space:nowrap;
}

/* head.php emits .skip-link but nothing styled it, so it rendered as a
   plain visible link and pushed the whole page (header included) ~25px
   down. Off-screen until focused, which is what a skip link is for —
   the link, its text and its target are untouched. */
.skip-link{
  position:absolute; left:-9999px; top:0;
  z-index:200;
  background:var(--green-900); color:var(--paper-000);
  padding:10px 18px; border-radius:0 0 var(--radius-s) 0;
  font-weight:700; font-size:.92rem;
}
.skip-link:focus{ left:0; }


/* ============================================================
   5. BUTTONS  — single source of truth
============================================================ */
.btn{
  display:inline-flex; align-items:center; justify-content:center;
  gap:10px;
  font-family:var(--font-body); font-weight:700; font-size:1rem;
  padding:16px 28px;
  border-radius:999px;
  border:2px solid transparent;
  min-height:44px;                     /* tap target — do not remove */
  white-space:nowrap;
  text-align:center;
  transition:transform .15s ease, box-shadow .15s ease,
             background .15s ease, color .15s ease, border-color .15s ease;
}
.btn:active{ transform:scale(.98); }
 
.btn--primary{
  background:var(--amber-500); color:var(--paper-000);
  box-shadow:0 10px 26px rgba(255,81,0,.35);
}
.btn--primary:hover{ background:var(--amber-600); box-shadow:0 14px 30px rgba(255,81,0,.45); }
 


 


 
/* Outlined secondary — pairs with .btn--primary on light backgrounds.
   .btn already reserves a 2px transparent border, so this swaps the
   colour in without changing the button's size. */
.btn--outline{
  background:var(--paper-000);
  color:var(--green-900);
  border-color:var(--green-900);
}
.btn--outline:hover{ background:var(--green-100); }

/* Ghost — a plain text link for a secondary action that must not
   compete with .btn--primary (e.g. "Vedi i prezzi" beside "Chiama
   subito"). No fill, no border, tighter padding: just coloured text
   with its icon, so attention stays on the primary button beside it.
   min-height:44px still comes from .btn, so the tap target holds. */
.btn--ghost{
  padding:8px 4px;
  background:none;
  border-color:transparent;
  box-shadow:none;
  color:var(--ink-700);
  text-decoration:underline;
  text-decoration-color:transparent;
  text-underline-offset:4px;
}
.btn--ghost:hover{ color:var(--green-900); text-decoration-color:currentColor; }
.btn--ghost svg{ width:18px; height:18px; }

/* Was referenced by .about__content but never defined. */
.btn--white{ background:var(--green-900); color:var(--paper-000); }
.btn--white:hover{ background:var(--green-800); color:var(--paper-000); }
 


 
.btn--lg{ padding:20px 40px; font-size:1.15rem; }

 
.icon-phone{ width:20px; height:20px; flex-shrink:0; }
 
/* On phones a lone primary button should fill the width */
@media (max-width:600px){
  .btn--lg{ width:100%; padding:17px 24px; font-size:1.05rem; }
}

/* Very small phones (320px class): long labels such as "Chiama Subito
   Pronto Intervento Elettricista 24" no longer fit on one line, so
   buttons may wrap and long words in headings may break instead of
   pushing the page wider than the screen. */
@media (max-width:359px){
  .btn{ white-space:normal; max-width:100%; line-height:1.25; }
  h1,h2:where(:not(.h1-look)),h3,h4,
h2:where(.h1-look){ overflow-wrap:anywhere; }
}


/* ============================================================
   6. HEADER + MOBILE NAV
============================================================ */
.site-header{
  position:sticky; top:0; z-index:130;
  background:rgba(255,255,255,.92);
  backdrop-filter:blur(10px);
  border-bottom:1px solid var(--line-200);
}
.site-header__inner{
  display:flex; align-items:center; justify-content:space-between;
  flex-wrap:nowrap;
  gap:clamp(8px,2vw,var(--space-s));
  padding-block:10px;
  min-width:0;
}
.site-logo{ flex-shrink:0;
  font-family:var(--font-display); font-weight:800; font-size:1.15rem;
  color:var(--green-950); display:flex; align-items:center; gap:10px;
  min-width:0; flex:0 1 auto;
}
/* Logo size. Was 44px, then 52px with the header held at 72px; the owner
   still found it small, so the header is now allowed to grow with it:
   66px logo + 2 x 10px padding + 1px border = ~87px on desktop, ~69px
   on a phone (48px logo, still taller than the 44px hamburger). The file
   is 275x101, so it stays sharp well past this. */
.site-logo img{ height:var(--logo-h); width:auto; flex-shrink:0; max-width:none; }
 
.site-nav{ display:none; }
.site-nav__list{
  display:flex;
  list-style:none; margin:0; padding:0;
  gap:clamp(16px,2vw,28px);
  font-weight:600; font-size:.95rem; color:var(--ink-700);
}
.nav-item > a{ padding-block:4px; white-space:nowrap; }
.nav-item > a:hover,.nav-item > a[aria-current="page"]{ color:var(--green-900); }

/* --- Mega-menu trigger (caret) — shown on mobile only; desktop opens
   the panel on hover/focus, see the ≥900px block below --- */
.nav-item__toggle{
  display:none;
  border:0; background:none; padding:0; margin:0; color:inherit; cursor:pointer;
}
.nav-item__caret{
  display:block; width:8px; height:8px;
  border-right:2px solid currentColor; border-bottom:2px solid currentColor;
  transform:rotate(45deg);
  transition:transform .2s ease;
}
/* Scoped to the service's own toggle — a plain descendant selector here
   outranks the region-chevron rule below and flips all of those too. */
.nav-item.is-open > .nav-item__toggle .nav-item__caret{ transform:rotate(-135deg); }

/* --- Mega-menu — one panel, two panes: a single column of region
   names, and the active region's cities beside it. Only one region's
   cities are ever rendered visible, so the panel never shows more than
   ~15 links at once and never grows with the service's total size.
   Positioning differs per breakpoint — see the two blocks below. --- */
.mega-menu__regions{ list-style:none; margin:0; padding:0; }
.mega-region__toggle{
  display:flex; align-items:center; justify-content:space-between; gap:10px;
  width:100%; text-align:left;
  border:0; border-radius:8px; background:none; padding:5px 10px; margin:0;
  font-family:var(--font-display); font-weight:600; font-size:.82rem;
  line-height:1.35; color:var(--green-900); cursor:pointer;
  transition:background .14s ease, color .14s ease;
}
.mega-region__toggle:hover{ background:var(--green-050); }
.mega-region.is-active > .mega-region__toggle{
  background:var(--amber-050); color:var(--amber-600);
}
.mega-region__toggle .nav-item__caret{
  opacity:.45; transform:rotate(-45deg); transition:opacity .14s ease;
}
.mega-region.is-active > .mega-region__toggle .nav-item__caret{ opacity:1; }

/* --- A region that is a page of its own: link + caret, two targets.

   The row splits so one tap means one thing on a phone — the name
   navigates, the caret opens the sub-list. On desktop it makes no odds,
   because the panel opens on hover over the whole row.

   The pair has to look identical to the single-button rows above it, so
   the <li> takes over the flex layout the button used to do, and the
   link and caret inherit the same type, padding and rounding. The
   highlight (hover, active, you-are-here) moves to the <li> too, so it
   spans the whole row rather than lighting only the half the pointer
   happens to be over. --- */
.mega-region--linked{
  display:flex; align-items:center; gap:4px;
  border-radius:8px;
  transition:background .14s ease;
}
.mega-region--linked:hover{ background:var(--green-050); }
.mega-region--linked.is-active{ background:var(--amber-050); }

/* Written as ".mega-menu a.mega-region__link" — 0,2,1 — for the same
   reason .mega-menu__title--link is (see the note further down): the
   later ".mega-menu a" rule is 0,1,1 and would otherwise win on source
   order, dropping this row to 500 weight and --ink-700. The linked rows
   then rendered visibly lighter and thinner than the plain ones beside
   them, which is exactly what the row must NOT do — it has to look like
   every other region in the list. */
.mega-menu a.mega-region__link{
  display:block;
  flex:1 1 auto; min-width:0;
  padding:5px 4px 5px 10px;
  font-family:var(--font-display); font-weight:600; font-size:.82rem;
  line-height:1.35; color:var(--green-900); text-decoration:none;
}
.mega-region--linked.is-active > a.mega-region__link{ color:var(--amber-600); }
.mega-menu a.mega-region__link:hover{ color:var(--amber-600); }

/* The caret keeps a 44px-wide tap target even though the glyph is tiny —
   it is the only way into the sub-list on a phone. */
.mega-region__toggle--caret{
  flex:0 0 auto;
  width:auto; min-width:34px;
  justify-content:center;
  padding:5px 10px 5px 4px;
  background:none;
}
.mega-region--linked:hover > .mega-region__toggle--caret,
.mega-region--linked.is-active > .mega-region__toggle--caret{ background:none; }

.mega-region__panel{ display:none; }
.mega-region__panel.is-active{ display:block; }
.mega-menu__title{
  font-family:var(--font-display); font-weight:700; font-size:.72rem;
  color:var(--ink-700); text-transform:uppercase; letter-spacing:.06em;
  margin:0 0 10px;
}
@media (min-width: 900px) {
  .mega-region__panel:not(.mega-region__panel--solo) .mega-menu__title {
    display: none;
  }
}
/* Six regions are pages of their own, so their panel heading is an <a>
   instead of a <p>. It has to keep reading as the heading of the list
   below it while showing it can be clicked, so it carries the same type
   as the <p> version and adds only an underline that warms on hover.

   Written as ".mega-menu a.mega-menu__title--link" — 0,2,1 — on purpose.
   Two later rules would otherwise win on source order at 0,1,1:
   ".mega-menu a" (weight 500) and, inside the desktop block,
   ".mega-menu__pane--cities a" (font-size .95rem). At plain
   "a.mega-menu__title--link" this heading rendered at 15.2px/500 and read
   as another city row instead of the heading above them. */
.mega-menu a.mega-menu__title--link{
  display:inline-block;
  padding:0;
  font-family:var(--font-display); font-weight:700; font-size:.72rem;
  line-height:inherit;
  color:var(--ink-700); text-transform:uppercase; letter-spacing:.06em;
  text-decoration:underline;
  /* --line-200 was invisible here: it is a border tint, and against the
     panel's own background the underline simply did not read, so the
     heading looked identical to the six that are not links. --ink-500 is
     the faintest token that still shows at 11.5px. */
  text-decoration-color:var(--ink-500);
  text-underline-offset:3px;
  transition:color .14s ease, text-decoration-color .14s ease;
}
.mega-menu a.mega-menu__title--link:hover{
  color:var(--amber-600);
  text-decoration-color:var(--amber-500);
}
/* On the region's own page the heading is the "you are here" marker. */
.mega-menu a.mega-menu__title--link[aria-current="page"]{
  color:var(--amber-600);
  text-decoration-color:var(--amber-500);
}

/* A region with no cities under it — Valle d'Aosta, in three services.
   Its pane holds the heading and nothing else, and at heading size that
   read as a caption stranded above an empty list rather than as the one
   thing there to click. Here the heading takes the type of a city row
   instead, because functionally that is what it is: the single
   destination in this pane. No wording changes, only its size. */
.mega-region__panel--solo a.mega-menu__title--link{
  font-family:var(--font-body);
  font-size:.95rem;
  font-weight:500;
  text-transform:none;
  letter-spacing:normal;
  padding:7px 0;
}

.mega-region__panel ul{ list-style:none; margin:0; padding:0; }

/* Sub-heading inside a grouped panel — "Apertura Porte" is the only region
   that has any. Its seven groups were each a top-level row in the old menu;
   they are one row now, so their names sit over their own links here.

   Deliberately lighter than .mega-menu__title above it: that one names the
   whole panel, these divide it, and if both shouted the panel would read as
   eight competing headings rather than one heading with sections. Same
   uppercase display type at a smaller size and a softer colour, so the
   hierarchy is legible at a glance.

   No top margin on the first one — .mega-menu__title already leaves 10px
   under itself, and doubling that detached the first group from the heading
   it belongs to. */
.mega-menu__subtitle{
  font-family:var(--font-display); font-weight:700; font-size:.66rem;
  color:var(--ink-500); text-transform:uppercase; letter-spacing:.05em;
  margin:14px 0 4px;
}
.mega-region__panel > .mega-menu__subtitle:first-of-type{ margin-top:0; }
.mega-menu a{
  display:block; padding:4px 0; font-weight:500; font-size:.85rem;
  line-height:1.4; color:var(--ink-700); white-space:normal;
}
.mega-menu a:hover{ color:var(--amber-600); }

/* --- You-are-here.

   On a city page the menu marks the whole path down to it: the service
   in the top bar, that service's region in the left pane, and the city
   itself. header.php also opens the panel on the visitor's own region
   rather than always the first, so the list they need is the one
   showing when the panel appears.

   .is-current is deliberately a different class from .is-active, which
   hover drives: moving the pointer to another region must swap which
   cities show WITHOUT erasing the marker saying where you actually
   are. The two can sit on the same region at once, and the rules below
   are written so that reads correctly either way.

   These rules must stay AFTER the .nav-item and .mega-menu rules
   above. Several of them tie on specificity with the hover and
   [aria-current] rules, so source order is what decides. --- */
.nav-item.is-current > a{
  position:relative;
  color:var(--amber-600);
}
.nav-item.is-current > a::after{
  content:"";
  position:absolute; left:0; right:0; bottom:-3px;
  height:2px; border-radius:2px;
  background:var(--amber-500);
}

.mega-region.is-current > .mega-region__toggle,
.mega-menu .mega-region.is-current > a.mega-region__link{
  color:var(--amber-600);
  font-weight:700;
}
/* Current AND hovered-off: keep the orange text, drop the fill so the
   region the pointer is on is still the one that looks selected. */
.mega-region.is-current:not(.is-active) > .mega-region__toggle{
  background:none;
}
.mega-region--linked.is-current:not(.is-active){ background:none; }

.mega-menu a.is-current{
  color:var(--amber-600);
  font-weight:700;
}

/* Back bar — mobile-only "drill-down" navigation; desktop shows both
   panes at once, so there is nothing to go back from. */
.mega-menu__back{
  display:none;
  align-items:center; gap:10px;
  border:0; border-radius:8px; background:var(--green-050);
  padding:11px 12px; margin:0 0 12px;
  font-family:var(--font-display); font-weight:700; font-size:.88rem;
  color:var(--green-900); cursor:pointer; width:100%; text-align:left;
}
.mega-menu__back-caret{
  display:block; width:8px; height:8px; flex-shrink:0;
  border-left:2px solid currentColor; border-bottom:2px solid currentColor;
  transform:rotate(45deg);
}

/* z-index sits above the mobile drawer (120) on purpose: the drawer is
   fixed from the very top of the viewport, so without this it paints
   over the hamburger and there is no visible way to close the menu. */
.site-header__call{
  display:flex; align-items:center;
  gap:clamp(6px,1.6vw,10px);
  flex-shrink:0; min-width:0;
  position:relative; z-index:125;
}
/* Iscriviti / Login. Two text buttons where the phone block and the
   call CTA used to be, so they have to share the room one button and a
   number had. Tighter padding, and nowrap so neither label ever breaks
   across two lines and grows the header. */
.site-header__cta{
  padding:11px 18px; font-size:.9rem;
  white-space:nowrap;
}

/* Mobile-drawer copy of the two buttons above (see header.php). Hidden
   here; the ≤899px block below turns it on and hides .site-header__cta's
   pair in its place, so exactly one pair is ever visible at once. */
.site-nav__actions{ display:none; }

/* --- Hamburger --- */
.nav-toggle{
  display:inline-flex; align-items:center; justify-content:center;
  width:44px; height:44px; border-radius:12px;
  border:1px solid var(--line-200); background:#fff; color:var(--green-900);
  flex-shrink:0;
}
.nav-toggle__bars,
.nav-toggle__bars::before,
.nav-toggle__bars::after{
  content:""; display:block; width:20px; height:2px;
  background:currentColor; border-radius:2px;
  transition:transform .2s ease, opacity .2s ease, background .2s ease;
}
.nav-toggle__bars{ position:relative; }
.nav-toggle__bars::before{ position:absolute; top:-6px; }
.nav-toggle__bars::after { position:absolute; top:6px; }
.nav-toggle[aria-expanded="true"] .nav-toggle__bars{ background:transparent; }
.nav-toggle[aria-expanded="true"] .nav-toggle__bars::before{ transform:translateY(6px) rotate(45deg); }
.nav-toggle[aria-expanded="true"] .nav-toggle__bars::after { transform:translateY(-6px) rotate(-45deg); }
 
/* --- Backdrop --- */
.nav-backdrop{
  position:fixed; inset:0; z-index:110;
  background:rgba(26,27,39,.45);
  opacity:0; transition:opacity .25s ease;
}
.nav-backdrop.is-open{ opacity:1; }
.nav-backdrop[hidden]{ display:none; }
 
/* ============================================================
   MOBILE — below 900px
   backdrop-filter is removed here on purpose: an element with
   backdrop-filter becomes the containing block for its fixed-position
   descendants, which would trap the drawer inside the header.
============================================================ */
@media (max-width:899px){
  .site-header{
    backdrop-filter:none;
    background:var(--paper-000);
  }
 
  /* Starts below the header rather than at the top of the viewport, so
     the header stays a whole, un-clipped bar with its close button in
     its normal place instead of the drawer sliding over the top of it.
     --header-bottom is measured by site.js; the static --header-h
     fallback is short of the header's actual rendered height. */
  .site-nav{
    position:fixed; inset:var(--header-bottom,var(--header-h)) 0 0 auto;
    width:min(86vw,340px);
    display:block;
    background:var(--paper-000);
    padding:var(--space-s) var(--space-m) var(--space-xl);
    box-shadow:var(--shadow-pop);
    border-top:1px solid var(--line-200);
    transform:translateX(100%);
    transition:transform .25s ease;
    overflow-y:auto;
    overscroll-behavior:contain;
    z-index:120;
  }
  .site-nav.is-open{ transform:translateX(0); }

  .site-nav__list{ flex-direction:column; gap:0; }
  .nav-item{ position:relative; border-bottom:1px solid var(--line-100); }
  .nav-item.has-mega > a{ padding-right:52px; }

  .nav-item > a{
    display:flex; align-items:center; min-height:52px;
    padding:var(--space-xs) 0;
    font-size:1.02rem; font-weight:700; color:var(--green-900);
    white-space:normal;
  }
  /* An open service stays visibly marked while you're inside it. */
  .nav-item.is-open > a{ color:var(--amber-600); }

  /* Tap-to-expand accordion — hover doesn't exist on touch. Tapping the
     service reveals its region list; tapping a region swaps to its
     cities as a second screen with a back bar, instead of nesting
     everything inline into a wall of indented rows. */
  .nav-item__toggle{
    display:flex; align-items:center; justify-content:center;
    position:absolute; top:0; right:-4px;
    width:52px; height:52px;
    border-radius:10px;
    color:var(--green-900);
  }
  .nav-item.is-open .nav-item__toggle{
    background:var(--amber-050); color:var(--amber-600);
  }

  .mega-menu{
    display:grid; grid-template-rows:0fr;
    transition:grid-template-rows .25s ease;
  }
  .mega-menu__panel{ overflow:hidden; min-height:0; }
  .nav-item.is-open .mega-menu{ grid-template-rows:1fr; }

  /* Inset + tinted so an open sub-level reads as "inside" its service
     rather than as more top-level rows. */
  .mega-menu__pane{
    padding:var(--space-xs);
    margin-bottom:var(--space-xs);
    background:var(--green-050);
    border-radius:var(--radius-s);
  }
  .mega-region__toggle{
    min-height:44px; font-size:.95rem; padding:8px 10px;
  }
  .mega-region__toggle .nav-item__caret{ opacity:.6; }

  /* Split rows on a phone: both halves get their own 44px target, and a
     hairline between them so it reads as two things to tap rather than
     one wide one. Without it a thumb aiming for the caret lands on the
     link and navigates away instead of opening the sub-list. */
  .mega-menu a.mega-region__link{
    min-height:44px; display:flex; align-items:center;
    font-size:.95rem; padding:8px 4px 8px 10px;
  }
  .mega-region__toggle--caret{
    min-height:44px; min-width:44px;
    padding:8px 10px;
    border-left:1px solid var(--line-200);
    border-radius:0 var(--radius-s) var(--radius-s) 0;
  }

  .mega-menu__pane--cities{ display:none; }
  .mega-menu.is-drilled .mega-menu__pane--regions{ display:none; }
  .mega-menu.is-drilled .mega-menu__pane--cities{ display:block; }
  .mega-menu__back{ display:flex; background:var(--paper-000); }
  .mega-menu__title{ padding-inline:10px; }
  .mega-menu a{ padding:9px 10px; font-size:.95rem; }

  body.nav-open{ overflow:hidden; }

  /* Iscriviti/Login move into the drawer below 899px, so the header bar
     itself only ever has to fit the logo and the hamburger — this is what
     replaces the old shrink-the-buttons rules that used to live below 620
     and 430px (removed; the buttons they targeted no longer render on
     that path at all, so there was nothing left for them to do). */
  .site-header__cta{ display:none; }
  .site-nav__actions{
    display:flex; gap:10px;
    margin-top:var(--space-m);
    padding-top:var(--space-m);
    border-top:1px solid var(--line-200);
  }
  /* Tightened from the .btn base (16px 28px, 1rem): the drawer is
     min(86vw,340px) wide with 24px of side padding, so two equal-width
     pills split ~292px minus the 10px gap between them. At the base size
     "Iscriviti" — the longer label — was tight against wrapping. */
  .site-nav__actions .btn{
    flex:1 1 0; min-width:0;
    padding:12px 14px; font-size:.92rem;
    white-space:nowrap;
  }
}

@media (min-width:900px){
  .site-nav{ display:flex; }
  .nav-toggle{ display:none; }
  .nav-backdrop{ display:none; }

  /* Hover/focus flyout.

     Anchored to the nav LIST, not to the individual nav item, and made
     wider than that list — so there is always panel directly beneath
     whichever service you're pointing at, and the panel's left edge is
     identical for all six (it can't walk off the right of the screen).

     --mega-gap is the dead strip between the bottom of a nav link and
     the top of the panel: half the row's spare height around the 24px nav line,
     (max(logo, 44px) - 24px) / 2, plus .site-header__inner's 10px padding-block plus
     the header's 1px bottom border. ::before re-covers exactly that
     strip, so moving the cursor straight down from a nav link never
     leaves :hover and the panel can't flicker shut mid-travel. */
  .site-nav__list{ position:relative; }
  .nav-item{ position:static; }
  /* Padding on an inline <a> grows the hover target without changing
     the header's height, so there's more to aim at on the way down. */
  .nav-item > a{ padding-block:10px; }

  .mega-menu{
    --mega-gap:calc((max(var(--logo-h),44px) - 24px) / 2 + 11px);
    position:absolute; top:calc(100% + var(--mega-gap)); left:0;
    width:min(640px,calc(100vw - 2 * var(--gutter)));
    background:var(--paper-000);
    border:1px solid var(--line-200);
    border-radius:var(--radius-m);
    box-shadow:var(--shadow-pop);
    /* No pointer-events here on purpose. visibility:hidden already makes
       the closed panel unclickable, and unlike pointer-events it is a
       transitioned property — so it stays "visible" (and therefore
       interactive) for the whole grace period below. With
       pointer-events:none the panel went inert the instant :hover was
       lost: still on screen, but the mouse fell through it to the page
       behind, so moving back onto it could not reopen it and the delay
       bought nothing. */
    opacity:0; visibility:hidden;
    transform:translateY(-4px);
    /* --mega-close-delay is a grace period on the CLOSING direction
       only: this rule is what applies once :hover is lost, so the delay
       here keeps the panel up while the cursor cuts a corner or crosses
       a gap. The :hover rule below zeroes it, so opening stays instant. */
    --mega-close-delay:.3s;
    transition:
      opacity .15s ease var(--mega-close-delay),
      transform .15s ease var(--mega-close-delay),
      visibility .15s var(--mega-close-delay);
    z-index:150;
  }
  .mega-menu::before{
    content:"";
    position:absolute; left:0; right:0;
    top:calc(-1 * var(--mega-gap)); height:var(--mega-gap);
  }
  .nav-item.has-mega:hover .mega-menu,
  .nav-item.has-mega:focus-within .mega-menu{
    opacity:1; visibility:visible;
    transform:translateY(0);
    --mega-close-delay:0s;              /* opens with no lag */
  }

  .mega-menu__panel{ display:flex; align-items:stretch; }

  /* One plain column of regions. Width is set so the longest names
     ("Apertura Porte Emilia – Romagna") stay on one line — wrapped rows
     were what pushed Fabbro's 20 regions past the cap into a scrollbar. */
  .mega-menu__pane--regions{
    /* Width is set so the longest name stays on one line AT THE SIZE
       ABOVE — 268px was right at .82rem and wraps "Apertura Porte
       Emilia – Romagna" at .9rem. A wrapped row is not just untidy: it
       costs a row's height in a column already capped for scrolling. */
    flex:0 0 296px;
    padding:10px;
    /* Raised with the type below. Measured from the space actually left
       under the header rather than a flat vh share, so the panel can't
       run past the bottom of a short window. Fabbro is the worst case:
       21 regions at 27px a row is 567px, so they fit down to roughly a
       730px-tall window and scroll below that. */
    max-height:min(calc(100vh - 120px),660px);
    overflow-y:auto;
  }
  /* Desktop type: larger than the mobile drawer's, and with real space
     between rows — these are pointing targets, not a dense list.

     The vertical padding is 4px, not 5px, because restoring Fabbro
     Valle d'Aosta took the fabbro menu from 20 regions to 21 (see
     _PHASE-6-LOG.md A15) and a 21st row at the old height pushed the
     column past the cap above, bringing the scrollbar back at window
     heights where it used to fit. 2px off each row buys back 42px,
     more than the 29px the new row costs, so 21 regions now clear the
     cap in slightly LESS height than 20 used to.

     This affects the desktop column only. The mobile drawer sets its
     own min-height:44px in the <=900px block and is untouched.

     The linked rows (a link plus a caret button) take the same size and
     vertical padding, so a row that happens to be a page of its own is
     indistinguishable from the rest of the column. Only the horizontal
     padding differs, because the row's 10px is split between the two
     halves instead of sitting on one element. */
  .mega-region__toggle{
    padding:4px 10px;
    font-size:.9rem;
  }
  .mega-menu a.mega-region__link{
    padding:4px 4px 4px 10px;
    font-size:.9rem;
  }
  .mega-region__toggle--caret{
    padding:4px 10px 4px 4px;
  }

  /* The cities for whichever region is pointed at. 15 is the most any
     one region has, which is well inside the cap. */
  .mega-menu__pane--cities{
    flex:1 1 auto; min-width:0;
    padding:16px 20px;
    border-left:1px solid var(--line-100);
    background:var(--paper-050);
    border-radius:0 var(--radius-m) var(--radius-m) 0;
    max-height:min(calc(100vh - 120px),660px);
    overflow-y:auto;
  }
  .mega-menu__pane--cities a{
    font-size:.95rem;
    padding:7px 0;
  }

  .mega-menu__back{ display:none; }
}


/* ============================================================
   7b. HERO — .hero--split variant
   APPEND THIS AT THE END OF SECTION 7 IN global.css
   (immediately before the "8. SERVICE TILE STRIP" comment)

   Two-column hero: copy left, photo right with floating stat cards.
   Overrides the photo-background hero without touching it, so the
   homepage's existing .hero and .hero--compact keep working.

   Selectors use .hero.hero--split (0,3,0) rather than .hero--split
   (0,2,0) so they beat the base .hero .hero__grid rules regardless
   of where this block ends up in the file.
============================================================ */

.hero.hero--split{
  position:relative;
  overflow:hidden;
  background:var(--green-050);
  padding-block:clamp(28px,5vw,72px);
  color:var(--ink-700);
}

/* Was a decorative gradient wash (purely visual, aria-hidden in
   markup) — removed in favour of the hero's own flat --green-050
   background. The element stays in the markup, just unrendered, so
   nothing else needs to change. */
.hero--split .hero__shape{ display:none; }

/* Reset everything the photo-hero set on the grid */
.hero.hero--split .hero__grid{
  position:relative;
  z-index:1;
  width:min(100% - (var(--gutter) * 2), var(--max-w));
  margin-inline:auto;
  padding-inline:0;
  padding-block:0;
  min-height:0;
  background-image:none;
  background-color:transparent;
  border-radius:0;
  box-shadow:none;
  display:grid;
  gap:clamp(32px,5vw,64px);
  align-items:center;
  grid-template-columns:minmax(0,1fr);
}
@media (min-width:980px){
  .hero.hero--split .hero__grid{
    grid-template-columns:minmax(0,1.02fr) minmax(0,.98fr);
    gap:clamp(40px,5vw,80px);
  }
}

/* The copy is no longer a card sitting on a photo */
.hero.hero--split .hero__copy{
  background:transparent;
  box-shadow:none;
  border-radius:0;
  margin:0;
  padding:0;
  display:block;
}

.hero--split .hero__copy .section-kicker{ margin-bottom:16px; }

/* One hero title treatment for every page on this banner: same size,
   always capitals. text-transform rather than retyped copy, so a title
   written in sentence case in the source still reads as capitals and
   the source words stay untouched. Service stylesheets must not
   override the size — the longer titles simply wrap onto more lines. */
.hero.hero--split h1,
.hero.hero--split .hero__headline,
/* One hero title treatment for every page on this banner: same size, always capitals. text-transform rather than retyped copy, so a title written in sentence case in the source still reads as capitals and the source words stay untouched. Service stylesheets must not override the size — the longer titles simply wrap onto more lines. */ .hero.hero--split h2:where(.h1-look){ text-transform:uppercase; }
.hero.hero--split h1,
.hero.hero--split h2:where(.h1-look){
  font-size:clamp(2.1rem,1.4rem + 3vw,3.6rem);
  line-height:1.02;
  letter-spacing:-.02em;
}
/* Orange highlight inside the H1 */
.hero h1 .accent,
/* Orange highlight inside the H1 */ .hero h2:where(.h1-look) .accent{ color:var(--amber-500); }

.hero.hero--split .hero__sub{
  margin-top:16px;
  max-width:44ch;
}

.hero.hero--split .hero__actions{
  margin-top:26px;
  padding-top:0;
  border-top:0;
  max-width:none;
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:var(--space-xs);
}
/* One per row on phones, so neither button gets squeezed. */
@media (max-width:480px){
  .hero.hero--split .hero__actions{ flex-direction:column; align-items:stretch; }
}

/* --- Trust list: any number of items, 1 col on phones, 2 above --- */
.hero__trust{
  display:grid;
  gap:10px var(--space-m);
  grid-template-columns:repeat(auto-fit,minmax(min(200px,100%),1fr));
  margin-top:28px;
  padding-top:24px;
  border-top:1px solid var(--line-200);
  max-width:520px;
}
.hero__trust li{
  display:flex; align-items:center; gap:10px;
  font-size:.95rem; font-weight:600; color:var(--green-900);
  line-height:1.3;
}
.hero__trust svg{
  width:20px; height:20px; flex-shrink:0;
  color:var(--live-500);
}

/* ============================================================
   Visual column
   Mobile: image + stats flow as a grid, no absolute positioning.
   Desktop: stats float over the image corners.
============================================================ */
.hero.hero--split .hero__visual{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(min(150px,100%),1fr));
  gap:var(--space-2xs);
  position:relative;
  padding:0;
  align-items:stretch;
  justify-content:initial;
}

/* Landscape on purpose — wider than tall. object-fit:cover means a
   portrait source file gets cropped top and bottom to fit this box. */
.hero__img{
  grid-column:1 / -1;
  width:100%;
  height:auto;
  aspect-ratio:4/3;
  object-fit:cover;
  border-radius:var(--radius-l);
  box-shadow:var(--shadow-pop);
  margin-bottom:var(--space-2xs);
}

.hero__stat{
  display:flex; flex-direction:column; gap:2px;
  padding:14px 16px;
  background:var(--paper-000);
  border:1px solid var(--line-200);
  border-radius:var(--radius-m);
  box-shadow:var(--shadow-card);
}
.hero__stat-num{
  font-family:var(--font-display);
  font-weight:800;
  font-size:clamp(1.15rem,1.05rem + .5vw,1.5rem);
  line-height:1.1;
  color:var(--green-900);
  letter-spacing:-.01em;
}
.hero__stat-num sup{
  font-size:.55em; vertical-align:super;
  color:var(--amber-500); margin-left:1px;
}
.hero__stat-label{
  font-size:.78rem; font-weight:600;
  color:var(--ink-500); line-height:1.25;
}
.hero__stat--a .hero__stat-num{ color:var(--amber-600); }

@media (min-width:980px){
  .hero.hero--split .hero__visual{
    display:block;
    padding:0 clamp(12px,2vw,28px);
  }
  .hero__img{
    aspect-ratio:4/3;
    margin-bottom:0;
  }
  .hero__stat{
    position:absolute;
    z-index:2;
    min-width:150px;
    padding:15px 18px;
    backdrop-filter:blur(6px);
    background:rgba(255,255,255,.94);
  }
  /* Tucked slightly outside the photo: it's landscape, so it's much
     shorter than a portrait one and inset cards would crowd it. */
  .hero__stat--a{ top:-4%;    left:-2%;  }
  .hero__stat--d{ bottom:-6%; right:-2%; }
}

/* Tall-but-narrow desktops: pull the cards in so they don't collide */
@media (min-width:980px) and (max-width:1180px){
  .hero__stat{ min-width:132px; padding:12px 14px; }
  .hero__stat--a{ left:-2%; }
}

@media (max-width:420px){
  .hero.hero--split .hero__visual{ grid-template-columns:repeat(2,minmax(0,1fr)); }
  .hero__stat{ padding:12px 13px; }
  .hero__stat-label{ font-size:.73rem; }
}

/* ============================================================
   8. SERVICE TILE STRIP  — now any number of tiles
============================================================ */
.tile-strip{ background:var(--green-050); padding-block:clamp(36px,5vw,64px); }
 
.tile-strip__grid{
  --col-min:140px;
  --gap:clamp(12px,1.4vw,16px);
  --cols-max:6;                  /* raise or lower per page if needed */
  display:grid;
  gap:var(--gap);
  grid-template-columns:repeat(
    auto-fit,
    minmax(
      max(min(var(--col-min),100%),
          (100% - (var(--gap) * (var(--cols-max) - 1))) / var(--cols-max)),
      1fr
    )
  );
}
 
.tile{
  position:relative; isolation:isolate; overflow:hidden;
  display:flex; flex-direction:column; align-items:center;
  gap:14px; padding:26px 12px 22px;
  background:var(--paper-000);
  border:1px solid var(--line-200);
  border-radius:var(--radius-m);
  box-shadow:var(--shadow-card);
  text-align:center;
  height:100%;                   /* equal heights at any count */
  transition:transform .22s cubic-bezier(.2,.7,.3,1),
             box-shadow .22s cubic-bezier(.2,.7,.3,1),
             border-color .22s ease;
}
.tile::before{
  content:""; position:absolute; inset-inline:0; top:0; height:3px;
  background:linear-gradient(90deg,var(--amber-500),var(--amber-400));
  transform:scaleX(0); transform-origin:left;
  transition:transform .28s cubic-bezier(.2,.7,.3,1);
}
.tile:hover,.tile:focus-within{
  transform:translateY(-4px); border-color:transparent; box-shadow:var(--shadow-pop);
}
.tile:hover::before,.tile:focus-within::before{ transform:scaleX(1); }
 
.tile__media{
  display:grid; place-items:center;
  width:clamp(64px,9vw,84px); height:clamp(64px,9vw,84px);
  border-radius:50%; background:var(--green-100);
  transition:background .22s ease, transform .22s cubic-bezier(.2,.7,.3,1);
}
.tile:hover .tile__media,.tile:focus-within .tile__media{
  background:var(--amber-050); transform:scale(1.06);
}
.tile__media img{
  width:clamp(34px,5vw,48px); height:clamp(34px,5vw,48px);
  transition:transform .22s cubic-bezier(.2,.7,.3,1);
}
.tile:hover .tile__media img{ transform:scale(1.06); }
 
.tile__label{
  font-family:var(--font-display);
  font-size:clamp(13px,1.1vw,15px);
  font-weight:700; letter-spacing:-.01em;
  color:var(--green-900); line-height:1.25;
  display:inline-block; min-height:22px;
  margin-top:auto;               /* labels align even at uneven lengths */
  transition:color .18s ease;
}
.tile:hover .tile__label,.tile:focus-within .tile__label{ color:var(--amber-600); }
 
.tile a:focus-visible{ outline:3px solid var(--green-500); outline-offset:3px; border-radius:8px; }
 
@media (max-width:899px){
  .tile-strip__grid{ --cols-max:3; }
}
@media (max-width:480px){
  .tile{ padding:18px 8px 16px; gap:10px; }
}
@media (prefers-reduced-motion:reduce){
  .tile,.tile::before,.tile__media,.tile__media img{ transition:none; }
  .tile:hover{ transform:none; }
  .tile:hover .tile__media,.tile:focus-within .tile__media{ transform:none; }
}


/* ============================================================
   9. ABOUT  — collapses without a breakpoint
============================================================ */
.about__grid{
  display:grid;
  gap:clamp(32px,5vw,64px);
  grid-template-columns:repeat(auto-fit,minmax(min(340px,100%),1fr));
  align-items:center;
}
 
/* No panel behind the image: the gradient box, 4:5 ratio and contain
   padding were built for the small map PNG this slot used to hold. It
   holds a photo now, which fills the column at its own proportions. */
.about__media{
  position:relative; border-radius:var(--radius-l); overflow:hidden;
  max-width:400px; margin-inline:auto;   /* source is 724px wide — any
                                            larger and it renders soft */
}
.about__media img{ display:block; width:100%; height:auto; }
 
.about__content h2:where(:not(.h1-look)){ margin-bottom:8px; }
.about__subhead{
  color:var(--amber-500);
  font-size:clamp(1.15rem,1.05rem + .5vw,1.45rem);
  font-weight:700; margin-bottom:20px;
}
.about__content p{ margin-bottom:16px; max-width:70ch; }
.about__content p:last-child{ margin-bottom:0; }
.about__content a{ color:var(--green-500); font-weight:700; }
.about__content a:hover{ color:var(--green-700); }
.about__content a.btn--white,
.about__content a.btn--white:hover,
.about__content a.btn--white:focus-visible{ color:var(--paper-000); }
.about__content a.btn--white .icon-phone{ color:inherit; }
 
/* Justified text creates rivers on narrow screens */
.about__content p,.feature-card p,.faq-item__a-inner p{ text-align:left; }
@media (min-width:900px){
  .about__content p,.feature-card p,.faq-item__a-inner p{ text-align:justify; }
}


/* ============================================================
   10. FEATURE CARDS  — any number, accents cycle
============================================================ */
.features{ background:var(--green-050); }
.features__head{ max-width:620px; margin-bottom:var(--space-xl); }
.features__head--center{ margin-inline:auto; text-align:center; }
.features__head--center .section-kicker{ justify-content:center; }
 
.features__grid{
  --col-min:280px; --gap:var(--space-m); --cols-max:3;
  display:grid; gap:var(--gap);
  grid-template-columns:repeat(
    auto-fit,
    minmax(max(min(var(--col-min),100%),
               (100% - (var(--gap) * (var(--cols-max) - 1))) / var(--cols-max)),1fr)
  );
}
 
.feature-card{
  background:var(--paper-000);
  border-radius:var(--radius-m);
  padding:clamp(24px,3vw,34px) clamp(20px,2.5vw,28px);
  border-top:4px solid var(--amber-500);
  box-shadow:var(--shadow-card);
  height:100%;
}
/* Cycles every 3 — works with 3, 4, 7 or any other count */
.feature-card:nth-child(3n+2){ border-top-color:var(--green-700); }
.feature-card:nth-child(3n+3){ border-top-color:var(--green-950); }
 
.feature-card__icon{
  width:48px; height:48px; border-radius:12px;
  background:var(--green-100); color:var(--green-800);
  display:flex; align-items:center; justify-content:center;
  margin-bottom:20px;
}
.feature-card__icon svg{ width:24px; height:24px; }
.feature-card :is(h2:where(:not(.h1-look)),h3,h4,h5,h6){
  margin-bottom:12px;
  font-size:clamp(1.05rem,1rem + .3vw,1.2rem);
  font-weight:700; line-height:1.3; color:var(--green-900);
}
.feature-card :is(h2:where(:not(.h1-look)),h3,h4,h5,h6) a{ color:inherit; }
.feature-card :is(h2:where(:not(.h1-look)),h3,h4,h5,h6) a:hover{ color:var(--amber-600); }
.feature-card p{ font-size:.97rem; }


/* ============================================================
   11. SERVICE CARDS  — any number
============================================================ */
.services{ background:var(--paper-000); }
 
.services__grid{
  --col-min:280px; --gap:clamp(20px,2.2vw,24px); --cols-max:3;
  display:grid; gap:var(--gap);
  grid-template-columns:repeat(
    auto-fit,
    minmax(max(min(var(--col-min),100%),
               (100% - (var(--gap) * (var(--cols-max) - 1))) / var(--cols-max)),1fr)
  );
}
 
.service-card{
  background:var(--paper-000);
  border:1px solid var(--line-200);
  border-radius:var(--radius-m);
  overflow:hidden;
  display:flex; flex-direction:column;
  height:100%;
  transition:transform .22s ease, box-shadow .22s ease, border-color .22s ease;
}
.service-card:hover,.service-card:focus-within{
  transform:translateY(-6px); box-shadow:var(--shadow-pop); border-color:transparent;
}
.service-card__media{ position:relative; overflow:hidden; aspect-ratio:4/3; }
.service-card__media img{
  width:100%; height:100%; object-fit:cover; transition:transform .4s ease;
}
.service-card:hover .service-card__media img{ transform:scale(1.05); }
.service-card__body{
  padding:22px 24px 26px;
  display:flex; align-items:center; justify-content:space-between;
  gap:var(--space-s); flex:1;
}
.service-card h4{ color:var(--green-900); }
.service-card__arrow{
  width:34px; height:34px; border-radius:50%;
  background:var(--amber-600); color:var(--paper-000);
  display:flex; align-items:center; justify-content:center; flex-shrink:0;
  transition:background .22s ease, color .22s ease, transform .22s ease;
}
.service-card__arrow svg{ width:16px; height:16px; }
.service-card:hover .service-card__arrow{
  background:var(--green-100); color:var(--green-800); transform:translateX(4px);
}

@media (max-width:899px){
  .services__grid{ --cols-max:2; }
  .services{display: none;}
}


/* ============================================================
   12. ACCORDION / FAQ
============================================================ */
.faq{ background:var(--amber-050); }
.faq__wrap{ max-width:820px; margin-inline:auto; }
 
.faq-item{
  background:var(--paper-000);
  border:1px solid var(--line-200);
  border-radius:var(--radius-m);
  margin-bottom:var(--space-xs);
  overflow:hidden;
  transition:box-shadow .2s ease, border-color .2s ease;
}
.faq-item:hover{ border-color:var(--amber-400); }
.faq-item.is-open{ box-shadow:var(--shadow-card); border-color:transparent; }
 
.faq-item__q{
  width:100%; text-align:left;
  display:flex; align-items:center; justify-content:space-between;
  gap:var(--space-s);
  padding:clamp(16px,2.2vw,22px) clamp(16px,2.2vw,24px);
  min-height:44px;
  font-family:var(--font-display); font-weight:700;
  font-size:clamp(.97rem,.93rem + .25vw,1.06rem);
  line-height:1.35;
  color:var(--green-900);
  transition:color .18s ease;
}
.faq-item__q:hover{ color:var(--amber-600); }
 
.faq-item__plus{
  width:28px; height:28px; border-radius:50%;
  background:var(--green-100);
  flex-shrink:0; position:relative;
  transition:background .25s ease, transform .25s ease;
}
.faq-item__plus::before{
  content:"";
  position:absolute; top:47%; left:50%;
  width:8px; height:8px;
  border-right:2px solid var(--green-900);
  border-bottom:2px solid var(--green-900);
  transform:translate(-50%,-65%) rotate(45deg);
  transition:border-color .25s ease;
}
.faq-item__plus::after{ content:none; }
.faq-item__q:hover .faq-item__plus{ background:var(--amber-050); }
.faq-item.is-open .faq-item__plus{
  background:var(--amber-500); transform:rotate(180deg);
}
.faq-item.is-open .faq-item__plus::before{ border-color:#fff; }
 
/* Height-agnostic reveal. Padding lives on the inner element, which
   is fully clipped while collapsed. */
.faq-item__a{
  display:grid;
  grid-template-rows:0fr;
  transition:grid-template-rows .3s ease;
}
.faq-item.is-open .faq-item__a{ grid-template-rows:1fr; }
 
.faq-item__a > *{
  overflow:hidden;
  min-height:0;
}
 
.faq-item__a-inner{
  padding:0 clamp(16px,2.2vw,24px);
  max-width:68ch;
}
.faq-item__a-inner > *:first-child{ margin-top:0; }
.faq-item.is-open .faq-item__a-inner{
  padding-bottom:clamp(18px,2.4vw,24px);
}
.faq-item__a-inner p{ font-size:.96rem; text-align:left; line-height:1.6; }
.faq-item__a-inner p + p{ margin-top:var(--space-xs); }
.faq-item__a-inner a{ color:var(--green-500); font-weight:700; text-decoration:underline; }
.faq-item__a-inner a:hover{ color:var(--green-700); }
 
@supports not (grid-template-rows:0fr){
  .faq-item__a{ max-height:0; overflow:hidden; transition:max-height .3s ease; }
  .faq-item.is-open .faq-item__a{ max-height:2000px; }
}


/* ============================================================
   13. CTA BAND
============================================================ */
.cta-band{
  position:relative; overflow:hidden;
  background:linear-gradient(100deg,var(--green-900) 0%,var(--green-800) 100%);
  color:#fff; padding-block:clamp(32px,5vw,60px);
}
.cta-band::before{
  content:""; position:absolute; inset-inline:0; top:0; height:3px;
  background:linear-gradient(90deg,var(--amber-500),var(--amber-400));
}
.cta-band__inner{
  position:relative;
  display:flex; flex-wrap:wrap;
  align-items:center; justify-content:space-between;
  gap:var(--space-m);
  text-align:center;
}
.cta-band__lead{
  font-family:var(--font-display); font-weight:800;
  font-size:clamp(1.05rem,.95rem + .7vw,1.5rem);
  line-height:1.2; letter-spacing:-.01em; color:#fff;
  flex:1 1 min(100%,420px);
  text-wrap:balance;
}
.cta-band__phone{
  font-family:var(--font-body); font-size:1rem; font-weight:700;
  padding:14px 28px; flex-shrink:0; margin-inline:auto;
}
@media (min-width:760px){
  .cta-band__inner{ text-align:left; flex-wrap:nowrap; gap:var(--space-l); }
  .cta-band__phone{ margin-inline:0; }
}
@media (max-width:600px){
  .cta-band__phone{ width:100%; }
}


/* ============================================================
   14. TABS  — generic, scrollable on mobile
   .region-tabs / .region-tab kept as aliases.
============================================================ */
.region-tabs{
  display:flex; flex-wrap:wrap; gap:9px;
}
/* On phones, don't wrap into four rows — scroll instead */
@media (max-width:640px){
  .region-tabs{
    flex-wrap:nowrap;
    overflow-x:auto;
    scroll-snap-type:x proximity;
    -webkit-overflow-scrolling:touch;
    scrollbar-width:none;
    padding-bottom:4px;
    margin-inline:calc(var(--gutter) * -1);
    padding-inline:var(--gutter);
  }
  .region-tabs::-webkit-scrollbar{ display:none; }
  .region-tab{ scroll-snap-align:start; flex:0 0 auto; }
}
 
.region-tab{
  border:1.5px solid var(--line-200); background:#fff; color:var(--green-900);
  padding:9px 16px; border-radius:999px;
  font-family:inherit; font-size:14px; font-weight:600;
  min-height:40px;
  transition:background .15s ease, border-color .15s ease, color .15s ease;
}
.region-tab:hover{ border-color:var(--amber-500); }
.region-tab.active,.region-tab[aria-selected="true"]{
  background:var(--green-900); border-color:var(--green-900); color:#fff;
}
 
.region-panel{
  margin-top:22px;
  background:var(--amber-050);
  border:1px solid var(--line-200);
  border-radius:var(--radius-s);
  padding:clamp(20px,2.6vw,28px);
  min-height:150px;
}
.region-panel[hidden]{ display:none; }
.region-panel h3{
  font-family:var(--font-body); font-size:15px; color:var(--amber-500);
  text-transform:uppercase; letter-spacing:.5px; margin-bottom:10px;
}
.region-panel p{ margin:0; color:var(--ink-700); font-size:15px; }
.region-panel p + p{ margin-top:var(--space-xs); }


/* ============================================================
   15. COVERAGE / REGIONS
============================================================ */
.coverage{ padding-block:clamp(56px,8vw,96px); }
.coverage-top{ text-align:center; max-width:640px; margin:0 auto clamp(32px,4vw,46px); }
.coverage-top h2:where(:not(.h1-look)){ font-size:clamp(26px,3.4vw,34px); }
.coverage-top p{ color:var(--ink-700); margin-top:12px; }
.coverage-top .btn{ margin-top:22px; }
 
.coverage-grid{
  display:grid;
  gap:clamp(32px,4vw,46px);
  grid-template-columns:repeat(auto-fit,minmax(min(380px,100%),1fr));
  align-items:start;
}
@media (min-width:1040px){
  .coverage-grid{ grid-template-columns:.9fr 1.1fr; }
}
 
.map-wrap{ display:flex; align-items:center; justify-content:center; }
.map-wrap svg{ width:100%; max-width:340px; height:auto; }
.region-path{ transition:fill .15s ease, stroke .15s ease; }
.region-path.covered{ fill:var(--amber-050); stroke:var(--green-900); stroke-width:1; cursor:pointer; }
.region-path.covered:hover{ fill:#F2E7D2; stroke:var(--amber-500); }
.region-path.covered.active{ fill:var(--amber-500); stroke:var(--amber-600); }
.region-path.uncovered{ fill:#EAE5D8; stroke:#CFC8B3; stroke-width:.7; }
 
@media (max-width:920px){ .map-wrap{ margin-top:28px; } }
/* The map is decorative on phones — the tabs carry the same information */
/* @media (max-width:560px){ .map-wrap{ display:none; } } */


/* ============================================================
   16. CITY / PARTNER LINK GROUPS — any number of groups or links
============================================================ */
.local{ background:var(--green-050); }

 
.local__groups{
  --col-min:280px; --gap:clamp(20px,2.2vw,24px); --cols-max:3;
  display:grid; gap:var(--gap);
  grid-template-columns:repeat(
    auto-fit,
    minmax(max(min(var(--col-min),100%),
               (100% - (var(--gap) * (var(--cols-max) - 1))) / var(--cols-max)),1fr)
  );
}
 
.local-group{
  position:relative; isolation:isolate; overflow:hidden;
  background:var(--paper-000);
  border:1px solid var(--line-200);
  border-radius:var(--radius-m);
  box-shadow:var(--shadow-card);
  padding:clamp(24px,3vw,30px) clamp(20px,2.6vw,28px) 22px;
  height:100%;
}
.local-group::before{
  content:""; position:absolute; inset-inline:0; top:0; height:3px;
  background:linear-gradient(90deg,var(--gold-500),var(--amber-400));
}
.local-group__head{
  display:flex; align-items:center; gap:14px;
  padding-bottom:18px; margin-bottom:6px;
  border-bottom:1px solid var(--line-200);
}
.local-group__icon{
  width:44px; height:44px; border-radius:12px;
  background:var(--green-900); color:var(--gold-500);
  display:flex; align-items:center; justify-content:center; flex-shrink:0;
}
.local-group__icon svg{ width:22px; height:22px; }
.local-group h3{
  font-family:var(--font-display); color:var(--green-900);
  font-size:1.05rem; line-height:1.25; letter-spacing:-.01em;
}
 
.local-group__chips{ display:flex; flex-direction:column; gap:0; }
 

 
.local-chip{
  position:relative; display:flex; align-items:center;
  min-height:44px; padding:11px 0 11px 16px;
  border-bottom:1px solid var(--line-100);
  font-size:.875rem; font-weight:600; line-height:1.4; color:var(--ink-700);
  transition:color .18s ease, padding-left .18s cubic-bezier(.2,.7,.3,1);
}
.local-group__chips .local-chip:last-child{ border-bottom:0; }
.local-chip::before{
  content:""; position:absolute; left:0; top:50%;
  width:3px; height:0; border-radius:999px; background:var(--amber-500);
  transform:translateY(-50%);
  transition:height .2s cubic-bezier(.2,.7,.3,1);
}
.local-chip:hover,.local-chip:focus-visible{ color:var(--green-900); padding-left:22px; }
.local-chip:hover::before,.local-chip:focus-visible::before{ height:20px; }
.local-chip:focus-visible{ outline:3px solid var(--green-500); outline-offset:2px; border-radius:6px; }
 
@media (prefers-reduced-motion:reduce){
  .local-chip,.local-chip::before{ transition:none; }
  .local-chip:hover,.local-chip:focus-visible{ padding-left:16px; }
}


/* ============================================================
   19. FOOTER  — any number of columns
============================================================ */
.site-footer{
  background:var(--green-950); color:rgba(255,255,255,.7);
  padding-block:56px 28px;
  padding-bottom:calc(28px + var(--callbar-h));   /* clears the call bar */
}
@media (min-width:769px){ .site-footer{ padding-bottom:28px; } }
 






/* justify-content is CENTER, not space-between. This row has exactly one
   child (footer.php's single <p>), and space-between parks a lone flex item
   at flex-start — which left the legal line hard against the left edge with
   ~700px of empty footer beside it at 1440px. text-align could not correct
   it: the <p> shrinks to its content width, so centring text inside a box
   that is already at the left just centres it within itself.
   If a second child is ever added here, center still reads correctly. */
.site-footer__legal{
  padding-top:24px;
  display:flex; flex-wrap:wrap; justify-content:center;
  gap:12px; font-size:.9rem; color:rgba(255,255,255,.7); text-align:center;
}
.site-footer__legal a{ color:#fff; }
@media (max-width:600px){
  .site-footer__legal{ flex-direction:column; }
}


/* ============================================================
   20. STICKY CALL BAR (mobile)
============================================================ */
.call-bar{
  position:fixed; bottom:0; left:0; width:100%; z-index:9999;
  display:none; align-items:center; justify-content:center; gap:10px;
  min-height:var(--callbar-h);
  padding:15px 0 calc(15px + env(safe-area-inset-bottom));
  background-color:var(--live-500); color:var(--paper-000);
  font-size:20px; font-weight:700; text-align:center;
  box-shadow:0 -2px 6px rgba(0,0,0,.2);
  transition:transform .25s ease;
}
.call-bar:hover{ background-color:#218838; color:var(--paper-000); }
.call-bar:active{ background-color:#000; color:var(--paper-000); }
.call-bar svg{ width:22px; height:22px; flex-shrink:0; }
@media (max-width:768px){
  .call-bar{ display:flex; }
  body{ padding-bottom:calc(var(--callbar-h) + env(safe-area-inset-bottom)); }
}

/* Slid out of view (site.js §4) while another call button — the hero
   CHIAMA, a mid-page CTA, the CTA band — is already on screen, so two
   "call us" prompts are never visible at once. body keeps its
   call-bar padding regardless: the bar still occupies its reserved
   strip, it is just translated below it, so nothing reflows when it
   toggles. */
.call-bar--hidden{ transform:translateY(100%); }


/* ============================================================
   21. UTILITIES
============================================================ */
/* ============================================================
   assets/css/sanificazione.css
   Sections used by the /sanificazione/ pages only.

   Load order: global.css -> prezzi.css -> sanificazione.css
   so this file can still override a shared section locally.

   Tokens, .container, .btn and the header/footer/hero chrome stay
   in global.css and are never redefined here.

   This file was empty until /sanificazione/sanificazione-bologna/
   needed two things global.css and prezzi.css do not provide:

     1 .san-icon  a small round icon floated into a paragraph,
                  which is what the old page's "alignleft" image is
     2 .san-band  a full-bleed photo band carrying white text,
                  which is what the old page's last row is

   Everything else on that page reuses existing components
   (.hero--split, .features, .btn, .call-bar, .section-kicker).

   The /sanificazione/ hub also loads this file and uses none of
   these classes, so it renders exactly as before.
============================================================ */


/* ============================================================
   1. INTRO — the "SERVIZI DI SANIFICAZIONE" block
============================================================ */
.san-intro{
  background:var(--paper-000);
  padding:clamp(56px,7vw,88px) 5vw;
}

.san-intro-inner{ max-width:900px; margin:0 auto; }

.san-head{
  text-align:center;
  margin:0 0 clamp(26px,3.4vw,38px);
}

.san-head h2{
  margin:0 0 12px;
  color:var(--green-900);
  font-size:clamp(1.5rem,1.2rem + 1.4vw,2.2rem);
  line-height:1.15;
  letter-spacing:-.02em;
}

.san-head h3{
  margin:0;
  font-size:clamp(1.05rem,.95rem + .5vw,1.35rem);
  line-height:1.3;
  color:var(--green-900);
}

/* The call number inside that H3 is the page's loudest link. */
.san-head h3 a{
  color:var(--amber-600);
  text-decoration:none;
}
.san-head h3 a:hover{ text-decoration:underline; }

.san-intro p{
  margin:0 0 18px;
  font-size:16.5px;
  line-height:1.8;
  color:var(--ink-700);
}

.san-intro p strong,
.san-intro p b{ color:var(--green-900); }


/* ------------------------------------------------------------
   The round icon floated into the first paragraph. In the export
   this is an <img class="alignleft"> at 99x99; the file itself is
   64px, so it sits inside the circle with padding rather than
   being scaled up.
------------------------------------------------------------ */
.san-icon{
  float:left;
  shape-outside:circle(50%);
  box-sizing:border-box;
  width:99px; height:99px;
  margin:2px 22px 12px 0;
  padding:16px;
  border-radius:50%;
  background:var(--green-100);
}

/* On a phone the float leaves a two-word gutter — centre it. */
@media (max-width:560px){
  .san-icon{
    float:none;
    shape-outside:none;
    display:block;
    margin:0 auto 18px;
  }
}


/* ============================================================
   2. CTA ROW — the centred orange buttons between sections
============================================================ */
.san-cta{
  margin:clamp(26px,3.2vw,38px) 0 0;
  text-align:center;
}


/* ============================================================
   3. SERVICE CARDS — "SERVIZI CHE OFFRIAMO"

   Added for /sanificazione/sanificazione-milano/, which lays its
   eight pest-control services out as four columns of cards. The
   card itself is global.css's .feature-card; only the grid and
   the pinned button are defined here, so the cards match the
   feature cards used elsewhere on the site.
============================================================ */
.san-services{
  background:var(--green-050);
  padding:clamp(56px,7vw,88px) 5vw;
}

.san-services-inner{ max-width:1240px; margin:0 auto; }

.san-services-grid{
  --col-min:240px; --gap:var(--space-m); --cols-max:4;
  display:grid; gap:var(--gap);
  grid-template-columns:repeat(
    auto-fit,
    minmax(max(min(var(--col-min),100%),
               (100% - (var(--gap) * (var(--cols-max) - 1))) / var(--cols-max)),1fr)
  );
}

/* Cards share a row, so the button is pinned to the bottom and
   the grid stays tidy whatever the copy length. */
.san-services-grid .feature-card{
  display:flex;
  flex-direction:column;
}

.san-card-cta{
  margin:auto 0 0;
  padding-top:18px;
  text-align:center;
}


/* ============================================================
   4. REGION LIST — "Collaboriamo con tecnici allocati in ..."

   Added for /sanificazione/sanificazione-veneto/, which lists the
   province capitals it covers as two centred columns. The export
   prefixes each line with <i class="fa fa-check-circle">;
   FontAwesome is not loaded on this site, so the markup uses an
   inline SVG tick instead — the <i> held no text, so nothing the
   page says changes.
============================================================ */
.san-regions{ margin:clamp(28px,3.5vw,42px) 0 0; }

.san-regions-lead{
  margin:0 0 20px;
  text-align:center;
  color:var(--green-900);
  font-family:var(--font-display);
  font-size:clamp(1.25rem,1.05rem + .9vw,1.8rem);
  line-height:1.15;
}

.san-regions-grid{
  display:grid;
  gap:var(--space-s);
  grid-template-columns:repeat(auto-fit,minmax(min(220px,100%),1fr));
}

/* The .san-intro paragraph rules would left-align these. */
.san-intro .san-regions-grid p{
  margin:0;
  text-align:center;
  font-size:1.02rem;
  line-height:1.9;
}

/* global.css sets a blanket "svg{display:block}", which would put
   every tick on a line of its own and leave the city name centred
   underneath it. These have to stay inline with their label. */
.san-check{
  display:inline-block;
  width:16px; height:16px;
  vertical-align:-3px;
  margin-right:7px;
  color:var(--green-700);
}


/* ============================================================
   5. PHOTO BAND — "SANIFICAZIONE AMBIENTALE"

   The export puts sanificazione-rapida.jpg behind this row as a
   CSS background and writes the copy in white over it, so it is
   reproduced the same way rather than as an <img>: it carries no
   alt text and is purely decorative. The dark wash keeps the copy
   readable whatever part of the photo is showing.
   Upload path and query string are untouched (hard rule 6).
============================================================ */
.san-band{
  position:relative;
  padding:clamp(64px,8vw,108px) 5vw;
  background:
    linear-gradient(rgba(6,38,24,.78), rgba(6,38,24,.78)),
    url("/wp-content/uploads/2020/03/sanificazione-rapida.jpg?id=13849")
      center / cover no-repeat;
  color:var(--paper-000);
}

.san-band-inner{
  max-width:860px;
  margin:0 auto;
  text-align:center;
}

.san-band h2{
  margin:0 0 20px;
  color:var(--paper-000);
  font-size:clamp(1.5rem,1.2rem + 1.4vw,2.2rem);
  line-height:1.15;
  letter-spacing:-.02em;
}

/* The first two words link to the /sanificazione/ hub. */
.san-band h2 a{
  color:inherit;
  text-decoration:underline;
  text-underline-offset:4px;
}
.san-band h2 a:hover{ color:var(--amber-400); }

.san-band p{
  margin:0;
  font-size:16.5px;
  line-height:1.85;
  color:rgba(255,255,255,.88);
  text-align:left;
}

@media (min-width:720px){
  .san-band p{ text-align:center; }
}
/* ============================================================
   consent.css — cookie banner (assets/js/consent.js), every page.
   global.css supplies tokens and .btn; nothing here redefines them.

   The bar sits at the bottom of the viewport. On phones it sits
   ABOVE the green call bar (global.css §20) instead of covering it:
   the call button must stay tappable while the banner is open.
============================================================ */

.cc{ display:none; }
.cc.cc--open{ display:block; }

.cc-bar{
  position:fixed;
  left:50%; transform:translateX(-50%);
  bottom:16px;
  z-index:10001;
  width:min(100% - 32px, 980px);
  max-height:calc(100vh - 120px);
  overflow:auto;
  background:var(--paper-000);
  color:var(--ink-900);
  border:1px solid var(--line-200);
  border-radius:var(--radius-m);
  box-shadow:0 18px 50px rgba(14,57,94,.22);
  padding:22px 24px 20px;
  font-size:.92rem;
  line-height:1.5;
}

@media (max-width:768px){
  .cc-bar{
    bottom:calc(var(--callbar-h) + env(safe-area-inset-bottom) + 8px);
    width:calc(100% - 16px);
    max-height:calc(100vh - var(--callbar-h) - 90px);
    padding:18px 16px 16px;
  }
}

.cc-title{
  margin:0 32px 8px 0;
  font-family:var(--font-display);
  font-weight:800;
  font-size:1.05rem;
  color:var(--green-900);
}

.cc-desc p, .cc-intro, .cc-cat p{
  margin:0 0 8px;
  color:var(--ink-700);
  font-size:.88rem;
}
.cc-desc a, .cc-intro a{ color:var(--green-700); text-decoration:underline; }

.cc-x{
  position:absolute; top:10px; right:12px;
  width:36px; height:36px;
  border:0; border-radius:50%;
  background:transparent;
  color:var(--ink-700);
  font-size:26px; line-height:1;
  cursor:pointer;
}
.cc-x:hover{ background:var(--line-100); }

.cc-actions{
  display:flex; flex-wrap:wrap; justify-content:flex-end; align-items:center;
  gap:10px;
  margin-top:12px;
}
.cc-actions .btn{ padding:12px 22px; font-size:.92rem; }

.cc-links{ display:none; }

/* Phones: keep the bar short so the page's own CHIAMA button and the
   green call bar stay usable while the banner is open.
   Rifiuta and Accetta keep the same size side by side (Garante 2021:
   rejecting must be as easy as accepting); "Impostazioni cookie"
   drops to a text link underneath. */
@media (max-width:600px){
  .cc-bar{ padding:14px 14px 12px; }
  .cc-title{ font-size:.98rem; margin-bottom:6px; }
  .cc-desc .cc-more{ display:none; }
  .cc-desc p, .cc-links{ font-size:.82rem; line-height:1.4; margin-bottom:6px; }
  .cc-links{ display:block; }
  .cc-links a{ color:var(--green-700); text-decoration:underline; }
  .cc-bar .cc-actions{
    display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-top:8px;
  }
  .cc-bar .cc-actions .btn{
    width:100%; min-height:44px; padding:10px 8px;
    font-size:.82rem; white-space:normal; line-height:1.2;
  }
  .cc-bar .cc-actions [data-cc="reject"]{ grid-column:1; grid-row:1; }
  .cc-bar .cc-actions [data-cc="accept"]{ grid-column:2; grid-row:1; }
  .cc-bar .cc-actions [data-cc="settings"]{ grid-column:1 / -1; grid-row:2; min-height:36px; padding:4px; }
  .cc-panel .cc-actions{ flex-direction:column-reverse; align-items:stretch; }
  .cc-panel .cc-actions .btn{ width:100%; }
}

/* While the banner is open the green call bar never slides away
   (site.js §4 hides it when another CHIAMA is on screen — here that
   button may sit under the banner). */
.cc-visible .call-bar.call-bar--hidden{ transform:none; }

/* ---- settings modal ---- */
.cc-modal{
  position:fixed; inset:0;
  z-index:10002;
  background:rgba(26,27,39,.55);
  display:flex; align-items:center; justify-content:center;
  padding:16px;
}
.cc-modal[hidden]{ display:none; }

.cc-panel{
  position:relative;
  width:min(100%, 640px);
  max-height:calc(100vh - 32px);
  overflow:auto;
  background:var(--paper-000);
  border-radius:var(--radius-m);
  box-shadow:0 24px 60px rgba(0,0,0,.3);
  padding:24px;
}

.cc-cat{
  border-top:1px solid var(--line-200);
  padding:14px 0 6px;
}
.cc-cat-head{
  display:flex; align-items:center; justify-content:space-between; gap:12px;
  margin-bottom:4px;
  cursor:pointer;
}
.cc-cat-name{ font-weight:700; color:var(--ink-900); }
.cc-always{ font-size:.8rem; font-weight:700; color:var(--live-500); }

/* Toggle switch built on a real checkbox (keyboard + screen reader) */
.cc-switch{
  appearance:none; -webkit-appearance:none;
  position:relative; flex-shrink:0;
  width:44px; height:26px; margin:0;
  border-radius:999px;
  background:var(--ink-500);
  cursor:pointer;
  transition:background .15s ease;
}
.cc-switch::after{
  content:""; position:absolute; top:3px; left:3px;
  width:20px; height:20px; border-radius:50%;
  background:var(--paper-000);
  transition:transform .15s ease;
}
.cc-switch:checked{ background:var(--green-700); }
.cc-switch:checked::after{ transform:translateX(18px); }
.cc-switch:focus-visible{ outline:2px solid var(--amber-500); outline-offset:2px; }
