/* ============================================================================
   EVO OUTDOOR — tema "Luce naturale"
   themes/hummingbird/assets/css/custom.css · caricato dal core con priorità 1000

   Perché chiaro. Il catalogo non è fatto solo di ottiche nere: ci sono collari
   cinofili multicolore, corpetti arancioni, fascette gialle e rosse. Su fondo
   nero quei prodotti litigano e la griglia diventa una scacchiera di riquadri
   bianchi. Una base chiara e calda li ospita tutti senza combatterne nessuno,
   ed è il registro dei rivenditori outdoor di fascia alta.

   Metodo. Si riscrivono i TOKEN di Bootstrap 5.3, non le sue utility: le regole
   del tema leggono quelle variabili, quindi ogni componente si adegua da solo.
   Combattere .bg-body-tertiary a colpi di specificità è una gara che si perde.

   Contrasti verificati con lo script WCAG prima di scrivere (non dopo):
     testo #1C2320 su #F8F6F2 ......... 14,84:1  AAA
     testo bianco su pulsante #B0540E .. 5,10:1  AA
     link #B0540E su fondo chiaro ...... 4,72:1  AA
     prezzo #2F4A38 su bianco .......... 9,73:1  AAA
     secondario #5C6660 su fondo ....... 5,52:1  AA
   ========================================================================= */

:root {
  /* Base calda: non bianco clinico, sabbia chiarissima */
  /* Il fondo era #F8F6F2, un beige caldo: su schermo grande dava l'impressione
     di una pagina ingiallita, e i riquadri chiari appoggiati sopra quasi non
     si distinguevano. Ora la pagina e' praticamente bianca e i blocchi
     colorati risaltano per differenza, che e' il motivo per cui esistono. */
  --evo-bg:        #FDFCFB;
  --evo-surface:   #FFFFFF;
  --evo-raised:    #F5F2EC;
  --evo-line:      #E2DDD4;
  --evo-line-soft: #EFEBE4;

  --evo-text:      #1C2320;   /* grafite calda, non nero */
  --evo-muted:     #5C6660;

  --evo-action:    #B0540E;   /* ambra bruciata: unico colore dell'azione */
  --evo-action-in: #8F400B;
  --evo-glow:      #E8751A;   /* arancio vivo, SOLO decorativo: mai su testo */
  --evo-forest:    #2F4A38;   /* verde profondo: prezzi e categoria */
  --evo-forest-lo: #E8EEE9;

  --evo-dark:      #1C2320;   /* fasce scure: header, footer, hero */
  --evo-dark-2:    #263029;

  --evo-r:     14px;
  --evo-r-sm:   9px;
  --evo-ease:  cubic-bezier(.22, 1, .36, 1);
  --evo-shadow:    0 1px 2px rgba(28,35,32,.05), 0 8px 24px -12px rgba(28,35,32,.18);
  --evo-shadow-up: 0 2px 6px rgba(28,35,32,.07), 0 22px 48px -18px rgba(28,35,32,.30);

  /* ── Token Bootstrap 5.3 ── */
  --bs-body-bg: var(--evo-bg);
  --bs-body-bg-rgb: 248, 246, 242;
  --bs-body-color: var(--evo-text);
  --bs-body-color-rgb: 28, 35, 32;

  --bs-secondary-bg: var(--evo-raised);
  --bs-secondary-bg-rgb: 241, 237, 230;
  --bs-tertiary-bg: var(--evo-raised);
  --bs-tertiary-bg-rgb: 241, 237, 230;

  --bs-secondary-color: var(--evo-muted);
  --bs-secondary-color-rgb: 92, 102, 96;
  --bs-tertiary-color: var(--evo-muted);
  --bs-emphasis-color: var(--evo-text);
  --bs-emphasis-color-rgb: 28, 35, 32;
  --bs-heading-color: var(--evo-text);

  --bs-primary: var(--evo-action);
  --bs-primary-rgb: 176, 84, 14;
  --bs-link-color: var(--evo-action);
  --bs-link-color-rgb: 176, 84, 14;
  --bs-link-hover-color: var(--evo-action-in);

  --bs-border-color: var(--evo-line);
  --bs-border-color-translucent: rgba(28, 35, 32, .10);
  --bs-border-radius: var(--evo-r);
}

/* Il tema ridichiara i token dentro i color-mode: vanno coperti anche lì */
[data-bs-theme="light"], [data-bs-theme="dark"] {
  --bs-body-bg: var(--evo-bg);
  --bs-body-color: var(--evo-text);
  --bs-secondary-bg: var(--evo-raised);
  --bs-tertiary-bg: var(--evo-raised);
  --bs-tertiary-bg-rgb: 241, 237, 230;
  --bs-secondary-bg-rgb: 241, 237, 230;
  --bs-emphasis-color: var(--evo-text);
  --bs-link-color: var(--evo-action);
  --bs-link-color-rgb: 176, 84, 14;
  --bs-link-hover-color: var(--evo-action-in);
  --bs-border-color: var(--evo-line);
  --bs-secondary-color: var(--evo-muted);
}

/* ─────────────────────────── base ─────────────────────────── */

body {
  background-color: var(--evo-bg);
  color: var(--evo-text);
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4, h5, .h1, .h2, .h3, .h4 {
  color: var(--evo-text);
  font-weight: 750;
  letter-spacing: -.02em;
}
h1, .h1 { font-size: clamp(1.9rem, 3.6vw, 2.7rem); line-height: 1.1; }
h2, .h2 { font-size: clamp(1.4rem, 2.3vw, 1.9rem); line-height: 1.2; }

a { text-decoration: none; }
a:not(.btn):not([class*="nav"]):not([class*="menu"]) { color: var(--evo-action); }
a:not(.btn):hover { color: var(--evo-action-in); }
hr { border-color: var(--evo-line); opacity: 1; }
::selection { background: var(--evo-glow); color: #fff; }
::placeholder { color: #7A857E !important; }   /* 4,6:1 su fondo chiaro */

*:focus-visible {
  outline: 3px solid var(--evo-glow);
  outline-offset: 2px;
  border-radius: 4px;
}

/* ─────────────────────────── header ─────────────────────────── */

/* Fascia scura in cima: dà il tono "strumento di precisione" senza incupire
   tutta la pagina, e stacca la navigazione dal contenuto. */
#header, .header {
  position: sticky;
  top: 0;
  z-index: 1030;
  background: var(--evo-dark);
  border-bottom: none;
  box-shadow: 0 1px 0 rgba(28,35,32,.10), 0 10px 30px -22px rgba(28,35,32,.5);
}
#header::after, .header::after {
  content: "";
  position: absolute; left: 0; right: 0; bottom: 0;
  height: 3px;
  background: linear-gradient(90deg, var(--evo-action), var(--evo-glow) 45%, var(--evo-forest));
}
/* La tendina vive dentro l'header ma si apre su fondo bianco: va esclusa,
   altrimenti eredita il bianco della fascia scura e sparisce. */
#header a:not(.submenu a):not(.js-sub-menu a):not(.ps-mainmenu--mobile a):not(.dropdown-menu a),
.header a:not(.submenu a):not(.js-sub-menu a):not(.ps-mainmenu--mobile a):not(.dropdown-menu a),
.header-top a, .header-top { color: #F3F1ED !important; }
#header a:not(.submenu a):not(.ps-mainmenu--mobile a):not(.dropdown-menu a):hover, .header a:not(.submenu a):not(.ps-mainmenu--mobile a):not(.dropdown-menu a):hover { color: var(--evo-glow) !important; }
#header .logo, .header__logo img { max-height: 52px; width: auto; }

.header-top, .header__nav, .header-nav, .header-bottom { background: transparent !important; }

/* Menu principale — SOLO le voci di primo livello, quelle sulla fascia scura.
   Prima la regola valeva per ogni `a` dentro .ps-mainmenu e coloriva di bianco
   anche le voci della tendina, che si apre su fondo bianco: invisibili. */
.ps-mainmenu:not(.ps-mainmenu--mobile) .ps-mainmenu__tree-item > a,
.ps-mainmenu:not(.ps-mainmenu--mobile) .ps-mainmenu__tree-item > .ps-mainmenu__tree-item-wrapper > a,
#_desktop_top_menu .top-menu > li > a, .main-menu > li > a {
  color: #F3F1ED !important;
  font-weight: 600;
  font-size: .94rem;
  position: relative;
  padding-bottom: 3px;
}
.ps-mainmenu__tree-item > a::after, .main-menu > li > a::after {
  content: "";
  position: absolute; left: 0; bottom: 0;
  width: 0; height: 2px;
  background: var(--evo-glow);
  transition: width .3s var(--evo-ease);
}
.ps-mainmenu__tree-item > a:hover::after, .main-menu > li > a:hover::after { width: 100%; }

/* ── Tendina: pannello chiaro, voci scure, su piu colonne ── */

.submenu, .js-sub-menu, .ps-mainmenu__tree-item-wrapper .submenu {
  background: var(--evo-surface) !important;
  border: 1px solid var(--evo-line);
  border-top: 3px solid var(--evo-action);
  border-radius: 0 0 var(--evo-r) var(--evo-r);
  box-shadow: var(--evo-shadow-up);
  padding: 1.3rem 0 1.5rem;
}

/* Il tema infila tutte le voci in .submenu__left (col-sm-3) e lascia vuota
   .submenu__right (col-sm-9): pannello largo 1440px, colonna stretta alta 753px.
   Si prende tutta la larghezza e si distribuisce su piu colonne. */
.submenu .submenu__left, .js-sub-menu .submenu__left {
  width: 100% !important;
  max-width: 100% !important;
  flex: 0 0 100% !important;
  /* display:block obbligatorio: il layout multicolonna viene IGNORATO su un
     contenitore flex, ed è il motivo per cui le 17 voci restavano incolonnate. */
  display: block !important;
  columns: 4 250px;
  column-gap: 2rem;
  padding: 0 1.2rem;
}
.submenu .submenu__left > *, .js-sub-menu .submenu__left > * {
  display: block !important;
  width: 100% !important;
}
.submenu .submenu__right, .js-sub-menu .submenu__right { display: none !important; }

.submenu ul, .js-sub-menu ul { list-style: none; margin: 0; padding: 0; }
.submenu li, .js-sub-menu li { break-inside: avoid; margin: 0; }

.submenu a, .js-sub-menu a,
.ps-mainmenu .submenu a, .ps-mainmenu .js-sub-menu a {
  color: var(--evo-text) !important;
  display: block;
  padding: .5rem .9rem;
  border-radius: 8px;
  font-weight: 500;
  font-size: .93rem;
  line-height: 1.3;
  transition: background-color .15s var(--evo-ease), color .15s var(--evo-ease);
}
.submenu a:hover, .js-sub-menu a:hover,
.ps-mainmenu .submenu a:hover, .ps-mainmenu .js-sub-menu a:hover {
  color: var(--evo-action) !important;
  background: #FBF2EA;
}
.submenu a::after, .js-sub-menu a::after { display: none !important; }

/* Ricerca nella fascia scura */
.ps-searchbar, .ps-searchbar__form { position: relative; }
.ps-searchbar__form input[type="text"],
.ps-searchbar__form input[type="search"],
.ps-searchbar input:not([type="hidden"]) {
  padding-left: 2.9rem !important;
  padding-right: 2.6rem !important;
  background: rgba(255,255,255,.10) !important;
  border: 1px solid rgba(255,255,255,.20) !important;
  color: #F3F1ED !important;
  border-radius: 999px;
}
.ps-searchbar input::placeholder { color: #B9C0BA !important; }
.ps-searchbar__magnifier {
  position: absolute; left: .95rem; top: 50%;
  transform: translateY(-50%);
  color: #B9C0BA; font-size: 1.2rem; line-height: 1;
  z-index: 3; pointer-events: none;
}
.ps-searchbar__clear { right: .5rem; }
.ps-searchbar__results {
  background: var(--evo-surface);
  border: 1px solid var(--evo-line);
  border-radius: var(--evo-r-sm);
  color: var(--evo-text);
  box-shadow: var(--evo-shadow-up);
}

/* ─────────────────────────── bottoni ─────────────────────────── */

.btn {
  border-radius: 999px;
  font-weight: 700;
  padding: .7rem 1.6rem;
  transition: transform .2s var(--evo-ease), box-shadow .2s var(--evo-ease),
              background-color .2s var(--evo-ease), color .2s var(--evo-ease);
}
.btn:active { transform: translateY(1px); }

.btn-primary {
  background: var(--evo-action);
  border: 1px solid var(--evo-action);
  color: #FFFFFF;
  box-shadow: 0 6px 18px -8px rgba(176, 84, 14, .55);
}
.btn-primary:hover, .btn-primary:focus {
  background: var(--evo-action-in);
  border-color: var(--evo-action-in);
  color: #FFFFFF;
  transform: translateY(-2px);
  box-shadow: 0 12px 26px -10px rgba(176, 84, 14, .65);
}

.btn-outline-primary, .btn-secondary, .btn-outline-secondary {
  background: var(--evo-surface);
  border: 1px solid var(--evo-line);
  color: var(--evo-text);
}
.btn-outline-primary:hover, .btn-secondary:hover, .btn-outline-secondary:hover {
  border-color: var(--evo-action);
  color: var(--evo-action);
  background: #FBF2EA;
  transform: translateY(-2px);
}
.btn-square-icon { border-radius: 12px; padding: .6rem; }

/* ─────────────────────────── card prodotto ─────────────────────────── */

.product-miniature {
  background: var(--evo-surface);
  border: 1px solid var(--evo-line);
  border-radius: var(--evo-r);
  overflow: hidden;
  height: 100%;
  box-shadow: var(--evo-shadow);
  transition: transform .32s var(--evo-ease), box-shadow .32s var(--evo-ease),
              border-color .32s var(--evo-ease);
}
.product-miniature:hover {
  transform: translateY(-5px);
  border-color: #D8D0C4;
  box-shadow: var(--evo-shadow-up);
}

/* Niente lastra: su fondo chiaro le foto su bianco si integrano da sole.
   È il vantaggio principale di questa direzione. */
.product-miniature__top, .product-miniature .thumbnail-container {
  position: relative;
  background: var(--evo-surface);
  border-radius: var(--evo-r-sm);
  margin: 6px 6px 0;
  overflow: hidden;
  aspect-ratio: 1 / 1;
  display: flex; align-items: center; justify-content: center;
}
.product-miniature__top img, .product-miniature .thumbnail img {
  width: 100%; height: 100%;
  object-fit: contain;
  padding: 7%;
  transition: transform .5s var(--evo-ease);
}
.product-miniature:hover .product-miniature__top img { transform: scale(1.05); }

.product-miniature__inner, .product-miniature__infos { padding: 12px 15px 15px; }

.product-miniature__title, .product-miniature__title a {
  color: var(--evo-text) !important;
  font-weight: 650;
  font-size: .95rem;
  line-height: 1.35;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.product-miniature:hover .product-miniature__title a { color: var(--evo-action) !important; }

/* Prezzo in verde profondo: 9,73:1, e libera l'arancio per la sola azione */
.product-miniature__price, .product-price, .product-miniature__prices .price {
  color: var(--evo-forest) !important;
  font-weight: 800;
  font-size: 1.15rem;
  font-variant-numeric: tabular-nums;
  letter-spacing: -.02em;
}
.product-miniature__regular-price, .regular-price {
  color: var(--evo-muted) !important;
  text-decoration: line-through;
  font-size: .86rem;
}

.product-flags .product-flag, .product-flag {
  background: var(--evo-forest);
  color: #FFFFFF;
  font-weight: 700;
  font-size: .68rem;
  text-transform: uppercase;
  letter-spacing: .08em;
  border-radius: 999px;
  padding: .3rem .7rem;
}
.product-flag.discount, .product-flag.on-sale { background: #C0392B; }

/* ─────────────────────────── scheda prodotto ─────────────────────────── */

#product .product-cover, .product-cover,
.product__images, .js-images-container,
.product-images-modal__carousel {
  background: var(--evo-surface);
  border: 1px solid var(--evo-line-soft);
  border-radius: var(--evo-r);
  overflow: hidden;
}
#product .product-cover img, .product-cover img,
.js-qv-product-cover, .product__images img {
  width: 100%; height: auto;
  object-fit: contain;
  background: var(--evo-surface);
}
.product__images .thumb, .js-thumb, .product__images li img {
  border-radius: var(--evo-r-sm);
  border: 1px solid var(--evo-line);
  background: var(--evo-surface);
  transition: border-color .2s var(--evo-ease), transform .2s var(--evo-ease);
}
.product__images .thumb:hover, .js-thumb:hover, .product__images li img:hover {
  border-color: var(--evo-action);
  transform: translateY(-2px);
}

#product .current-price, .product-prices .current-price, .product-price .current-price {
  color: var(--evo-forest);
  font-size: clamp(1.8rem, 3.2vw, 2.4rem);
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  letter-spacing: -.03em;
}

.product-variants .form-check-label, .product-variants label, .product-variants .radio-label {
  background: var(--evo-surface);
  border: 1px solid var(--evo-line);
  border-radius: 999px;
  padding: .45rem 1rem;
  font-weight: 600;
  color: var(--evo-text);
  cursor: pointer;
  transition: all .2s var(--evo-ease);
}
.product-variants .form-check-input:checked + .form-check-label,
.product-variants label:hover, .product-variants .radio-label:hover {
  border-color: var(--evo-action);
  color: var(--evo-action);
  background: #FBF2EA;
}

.product-availability, .product-quantities span {
  border-radius: 999px;
  padding: .3rem .85rem;
  font-weight: 700;
  font-size: .82rem;
  background: var(--evo-forest-lo);
  color: var(--evo-forest);
  display: inline-block;
}
.product-unavailable, .product-out-of-stock { background: #FBEAE8; color: #A03227; }

.product-description, #description, .product-information {
  color: #333C37;
  line-height: 1.72;
  max-width: 68ch;          /* righe leggibili: sopra i 75 caratteri si perde la riga */
}
.product-description img { border-radius: var(--evo-r-sm); max-width: 100%; height: auto; }
.product-description iframe {
  width: 100%; aspect-ratio: 16/9; height: auto;
  border-radius: var(--evo-r); border: 1px solid var(--evo-line);
}
.product-description table { width: 100%; border-collapse: collapse; }
.product-description td, .product-description th {
  border: 1px solid var(--evo-line); padding: .6rem .8rem;
}
.product-description th { background: var(--evo-raised); }

.data-sheet dt, .data-sheet dd {
  padding: .7rem 1rem; border-bottom: 1px solid var(--evo-line); margin: 0;
}
.data-sheet dt { color: var(--evo-muted); font-weight: 600; }
.data-sheet dd { color: var(--evo-text); font-weight: 700; }

/* ─────────────────────────── form, filtri, liste ─────────────────────────── */

.form-control, .form-select, input[type="text"], input[type="email"],
input[type="password"], textarea, select {
  background-color: var(--evo-surface) !important;
  border: 1px solid var(--evo-line) !important;
  color: var(--evo-text) !important;
  border-radius: 10px;
  padding: .65rem .9rem;
}
.form-control:focus, .form-select:focus, textarea:focus {
  border-color: var(--evo-action) !important;
  box-shadow: 0 0 0 3px rgba(176, 84, 14, .15) !important;
}

#search_filters, .block-categories, #left-column .block, .card {
  background: var(--evo-surface);
  border: 1px solid var(--evo-line);
  border-radius: var(--evo-r);
  box-shadow: var(--evo-shadow);
}
#search_filters .facet__title, .block-categories .h6, #left-column .block h4 {
  text-transform: uppercase;
  font-size: .74rem;
  letter-spacing: .1em;
  color: var(--evo-muted);
  font-weight: 800;
}

.pagination .page-link, .page-list .page-link {
  background: var(--evo-surface);
  border: 1px solid var(--evo-line);
  color: var(--evo-text);
  border-radius: 10px;
  margin: 0 3px;
}
.pagination .active .page-link, .page-link:hover {
  background: var(--evo-action); border-color: var(--evo-action); color: #fff;
}

.breadcrumb { background: transparent; padding-left: 0; font-size: .86rem; }
.breadcrumb a { color: var(--evo-muted); }
.breadcrumb a:hover { color: var(--evo-action); }

/* ─────────────────────────── slider ─────────────────────────── */

/* CORREZIONE. Prima c'era un velo scuro su tutto .carousel per far leggere il
   testo dell'hero: agganciava ANCHE la galleria del prodotto, e scuriva metà
   foto. Niente più veli a tutta larghezza — solo un pannello dietro il testo. */
.carousel, .slider-container { position: relative; border-radius: var(--evo-r); overflow: hidden; }
/* Il pannello finiva sotto la freccia di scorrimento e il testo si leggeva a
   metà: lo si stringe e lo si stacca dal bordo, lasciando corsia alle frecce. */
.carousel .carousel-item figcaption, .carousel-caption, .caption {
  position: absolute;
  left: clamp(3.5rem, 6vw, 5rem);
  top: 50%;
  transform: translateY(-50%);
  max-width: min(38ch, 42%);
  text-align: left !important;
  background: rgba(255, 255, 255, .93);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  border-radius: var(--evo-r);
  padding: 1.5rem 1.8rem;
  box-shadow: var(--evo-shadow-up);
  color: var(--evo-text);
}
.carousel-caption h2, .carousel h2, .carousel .display-1 {
  color: var(--evo-text);
  font-size: clamp(1.6rem, 3.4vw, 2.6rem);
  margin-bottom: .4rem;
}
.carousel .caption-description, .carousel-caption p { color: #3C453F; line-height: 1.55; }
.carousel .caption-legend, .carousel-caption .legend {
  display: inline-block;
  color: var(--evo-action);
  text-transform: uppercase;
  font-size: .72rem; font-weight: 800; letter-spacing: .14em;
  margin-bottom: .55rem;
}

/* ─────────────────────────── fasce scure ─────────────────────────── */

/* ── FASCIA NEWSLETTER ───────────────────────────────────────────────────
   PERCHÉ LE CORREZIONI PRECEDENTI NON POTEVANO FUNZIONARE.
   La sezione porta la utility `.bg-body-tertiary`, e quella utility vive
   dentro `@layer utilities` (verificato leggendo il CSSOM della pagina:
   .bg-body-tertiary sta in ROOT > CSSLayerBlockRule[utilities], mentre
   custom.css è fuori da ogni layer). Nella cascata a livelli le dichiarazioni
   `!important` di un layer BATTONO quelle non-layered, sempre, qualunque sia
   la specificità. Provato in browser, una per una:

     .ps-emailsubscription{background:#1C2320!important}              → rgb(241,237,230)
     section.ps-emailsubscription.bg-body-tertiary{...!important}     → rgb(241,237,230)
     #footer .ps-emailsubscription{...!important}                     → rgb(241,237,230)
     .ps-emailsubscription{--bs-tertiary-bg-rgb:28,35,32}             → rgb(28,35,32)  ✓

   L'unica mossa che vince è riscrivere il TOKEN che la utility LEGGE:
   `.bg-body-tertiary` calcola rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)).
   Stessa storia per la nota, che porta `.text-body-secondary`: si riscrive
   --bs-secondary-color-rgb, non si combatte il suo !important.
   Regola generale per questo tema: TOKEN, mai !important contro le utility. */
.ps-emailsubscription {
  --bs-tertiary-bg-rgb: 28, 35, 32;          /* fondo della fascia: scuro davvero */
  --bs-bg-opacity: 1;
  /* La nota porta .text-body-secondary, che in questo build legge
     `color: var(--bs-secondary-color)` — non la variante -rgb. Letto nel
     foglio compilato prima di scrivere, invece di indovinare. */
  --bs-secondary-color: #B9C0BA;             /* nota → 8,63:1 su #1C2320 */
  --bs-secondary-color-rgb: 185, 192, 186;
  --bs-body-color: #F3F1ED;
  position: relative;
  overflow: hidden;
  border: none;
  color: #F3F1ED;
}
/* Alone caldo dietro la fascia: la stacca dal footer e dà profondità.
   Va su uno pseudo-elemento perché background-image sull'elemento verrebbe
   comunque azzerato da qualunque shorthand `background` che riscrivessimo. */
.ps-emailsubscription::before {
  content: "";
  position: absolute; inset: 0;
  pointer-events: none;
  background:
    radial-gradient(760px 320px at 10% -40%, rgba(232,117,26,.30), transparent 68%),
    radial-gradient(620px 300px at 94% 140%, rgba(47,74,56,.60), transparent 70%);
}
/* Le utility py-3 py-lg-4 sono anch'esse nel layer: il respiro verticale si
   prende sul contenitore interno, dove nessuna utility compete. */
.ps-emailsubscription > .container {
  position: relative;
  z-index: 1;
  padding-block: clamp(2.2rem, 4.2vw, 3.6rem);
}
.ps-emailsubscription p, .ps-emailsubscription small { color: #B9C0BA; }
.ps-emailsubscription .h3, .ps-emailsubscription h3, .ps-emailsubscription label {
  color: #F3F1ED !important;
  font-weight: 800;
  font-size: clamp(1.25rem, 2.2vw, 1.7rem);
  line-height: 1.18;
  letter-spacing: -.02em;
  align-self: center;
  margin-bottom: 0;
}
.ps-emailsubscription .h3::before {
  content: "Newsletter";
  display: block;
  color: #F0965A;                 /* 7,03:1 su #1C2320 */
  font-size: .7rem; font-weight: 800;
  letter-spacing: .16em; text-transform: uppercase;
  margin-bottom: .5rem;
}
.ps-emailsubscription input[type="email"] {
  background: rgba(255,255,255,.07) !important;
  border: 1px solid rgba(255,255,255,.30) !important;
  color: #F3F1ED !important;
  border-radius: 999px;
  padding: .8rem 1.25rem;
}
.ps-emailsubscription input[type="email"]::placeholder { color: #9AA39C !important; }
.ps-emailsubscription input[type="email"]:focus {
  border-color: var(--evo-glow) !important;
  box-shadow: 0 0 0 3px rgba(232,117,26,.25) !important;
}
/* Il pulsante era vittima della vecchia regola `.ps-emailsubscription input`,
   che colpiva ANCHE l'input[type=submit]: bianco al 10% su fondo chiaro con
   testo quasi bianco sopra. Su fondo scuro l'arancio vivo è leggibile e squilla. */
.ps-emailsubscription input[type="submit"],
.ps-emailsubscription .btn-primary {
  --bs-btn-bg: #E8751A; --bs-btn-border-color: #E8751A; --bs-btn-color: #1C2320;
  --bs-btn-hover-bg: #FF8A2E; --bs-btn-hover-border-color: #FF8A2E; --bs-btn-hover-color: #1C2320;
  background: #E8751A !important;
  border-color: #E8751A !important;
  color: #1C2320 !important;      /* 5,33:1 */
  font-weight: 800;
  letter-spacing: .01em;
  padding: .8rem 1.9rem;
  box-shadow: 0 10px 26px -12px rgba(232,117,26,.9);
}
.ps-emailsubscription input[type="submit"]:hover,
.ps-emailsubscription .btn-primary:hover {
  background: #FF8A2E !important;
  border-color: #FF8A2E !important;
  color: #1C2320 !important;
  transform: translateY(-2px);
}

.page-footer, #footer, .footer-container {
  background: var(--evo-dark) !important;
  border-top: none;
  color: #B9C0BA;
  margin-top: 3.5rem;
}
#footer h3, .footer-container h3, .block-contact .h3 {
  color: #F3F1ED;
  text-transform: uppercase;
  font-size: .78rem; letter-spacing: .11em; font-weight: 800;
}
#footer a, .footer-container a { color: #C9CFC9 !important; }
#footer a:hover, .footer-container a:hover { color: var(--evo-glow) !important; }

/* Titoli di sezione */
.featured-products .h2, .products-section-title, section .h2 {
  position: relative; display: inline-block;
  padding-bottom: .5rem; margin-bottom: 1.5rem;
}
.featured-products .h2::after, .products-section-title::after, section .h2::after {
  content: ""; position: absolute; left: 0; bottom: 0;
  width: 58px; height: 3px; border-radius: 2px;
  background: var(--evo-glow);
}

.alert-success { background: var(--evo-forest-lo); border-color: #BFD4C6; color: #1F5133; }
.alert-danger  { background: #FBEAE8; border-color: #EFC6C1; color: #96271C; }
.alert-warning { background: #FDF1E4; border-color: #F0D4B2; color: #8A4E08; }

/* ─────────────────────────── rifiniture ─────────────────────────── */

@keyframes evoFadeUp { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: none; } }
.product-miniature { animation: evoFadeUp .45s var(--evo-ease) both; }
.products .product-miniature:nth-child(1) { animation-delay: .02s }
.products .product-miniature:nth-child(2) { animation-delay: .05s }
.products .product-miniature:nth-child(3) { animation-delay: .08s }
.products .product-miniature:nth-child(4) { animation-delay: .11s }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
  .product-miniature:hover { transform: none; }
}

@media (max-width: 767.98px) {
  .btn { padding: .62rem 1.2rem; }
  .carousel .carousel-item figcaption, .carousel-caption, .caption {
    position: static; transform: none; max-width: 100%;
    padding: 1.1rem 1.2rem; border-radius: 0;
    box-shadow: none; backdrop-filter: none;
  }
}


/* ═══════════ MEGA-MENU VISIVO ═══════════
   I template di hummingbird non stampano l'immagine di categoria. Invece di
   sovrascrivere i .tpl — che si perdono al primo aggiornamento del tema — la
   miniatura si aggancia via CSS usando lo slug presente nell'URL del link.
   Le immagini sono le 17 generate per le categorie, stesso stile fra loro. */

.submenu .submenu__left, .js-sub-menu .submenu__left { columns: 3 300px; }

.submenu a[href*="-"], .js-sub-menu a[href*="-"] {
  display: flex !important;
  align-items: center;
  gap: .8rem;
  padding: .5rem .7rem;
  min-height: 56px;
}
/* Riquadro della miniatura: sempre presente, così le voci restano allineate
   anche dove l'immagine manca */
.submenu a::before, .js-sub-menu a::before {
  content: "";
  flex: 0 0 44px;
  width: 44px; height: 44px;
  border-radius: 8px;
  background: var(--evo-raised) center/cover no-repeat;
  border: 1px solid var(--evo-line);
}
.submenu a[href*="ottiche-da-puntamento"]::before, .js-sub-menu a[href*="ottiche-da-puntamento"]::before { background-image: url("/img/c/422-small_default.jpg"); }
.submenu a[href*="visione-termica-e-notturna"]::before, .js-sub-menu a[href*="visione-termica-e-notturna"]::before { background-image: url("/img/c/423-small_default.jpg"); }
.submenu a[href*="cinofilia-e-tracciamento-gps"]::before, .js-sub-menu a[href*="cinofilia-e-tracciamento-gps"]::before { background-image: url("/img/c/424-small_default.jpg"); }
.submenu a[href*="calciature-e-chassis"]::before, .js-sub-menu a[href*="calciature-e-chassis"]::before { background-image: url("/img/c/425-small_default.jpg"); }
.submenu a[href*="ottica-da-osservazione"]::before, .js-sub-menu a[href*="ottica-da-osservazione"]::before { background-image: url("/img/c/426-small_default.jpg"); }
.submenu a[href*="supporti-e-stabilita"]::before, .js-sub-menu a[href*="supporti-e-stabilita"]::before { background-image: url("/img/c/427-small_default.jpg"); }
.submenu a[href*="pulizia-e-manutenzione"]::before, .js-sub-menu a[href*="pulizia-e-manutenzione"]::before { background-image: url("/img/c/428-small_default.jpg"); }
.submenu a[href*="illuminazione"]::before, .js-sub-menu a[href*="illuminazione"]::before { background-image: url("/img/c/429-small_default.jpg"); }
.submenu a[href*="attacchi-e-adattatori"]::before, .js-sub-menu a[href*="attacchi-e-adattatori"]::before { background-image: url("/img/c/430-small_default.jpg"); }
.submenu a[href*="protezioni-per-cani"]::before, .js-sub-menu a[href*="protezioni-per-cani"]::before { background-image: url("/img/c/431-small_default.jpg"); }
.submenu a[href*="fototrappole"]::before, .js-sub-menu a[href*="fototrappole"]::before { background-image: url("/img/c/432-small_default.jpg"); }
.submenu a[href*="richiami-e-attrattivi"]::before, .js-sub-menu a[href*="richiami-e-attrattivi"]::before { background-image: url("/img/c/433-small_default.jpg"); }
.submenu a[href*="trasporto-e-custodia"]::before, .js-sub-menu a[href*="trasporto-e-custodia"]::before { background-image: url("/img/c/434-small_default.jpg"); }
.submenu a[href*="accessori-e-componenti-arma"]::before, .js-sub-menu a[href*="accessori-e-componenti-arma"]::before { background-image: url("/img/c/437-small_default.jpg"); }
.submenu a[href*="batterie-e-alimentazione"]::before, .js-sub-menu a[href*="batterie-e-alimentazione"]::before { background-image: url("/img/c/438-small_default.jpg"); }
.submenu a[href*="telemetri-e-balistica"]::before, .js-sub-menu a[href*="telemetri-e-balistica"]::before { background-image: url("/img/c/439-small_default.jpg"); }
.submenu a[href*="esoscheletri"]::before, .js-sub-menu a[href*="esoscheletri"]::before { background-image: url("/img/c/440-small_default.jpg"); }


/* ═══════════ TESTATA DELLA PAGINA CATEGORIA ═══════════
   Il blocco che stava qui prima agganciava `.page-header`. Su queste pagine
   .page-header NON ESISTE: verificato in browser,
   document.querySelector('.page-header') === null. Ecco perché la banda non
   si era mai vista, per quanto il CSS fosse nel file.

   L'elemento vero è `.category__cover`, e nel DOM di hummingbird arriva DOPO
   la descrizione (ordine: h1 · descrizione · cover): una strisciolina 950x190
   in fondo a un muro di testo. Va portata in cima, allargata, e il titolo va
   sopra di lei. Il riposizionamento si fa in griglia, non in flex: cover e h1
   finiscono nella STESSA cella (riga 1) e si sovrappongono senza position
   absolute, così l'altezza della riga resta guidata dalla banda.

   L'immagine dell'`<img>` è 1000x200 e col soggetto già incorniciato di bianco:
   portata a 1400px di larghezza sgranerebbe. Al suo posto si usa il taglio
   1600x600 di /img/cat/<slug>-largo.jpg come background del contenitore
   (verificati 200 OK e 1600x600 reali), e l'<img> resta nel DOM a opacità 0
   per non perdere il testo alternativo.

   Tutto quanto sovrappone il titolo sta sotto :has(.category__cover): se una
   categoria non ha la copertina, la testata torna al flusso normale e il
   titolo resta scuro su fondo chiaro invece che bianco su bianco. */

#category .category__header:has(.category__cover) {
  display: grid;
  grid-template-columns: 1fr;
  row-gap: 1.8rem;
}
#category .category__header:has(.category__cover) > .category__cover      { grid-area: 1 / 1; margin: 0; }
#category .category__header:has(.category__cover) > .page-title-section   { grid-area: 1 / 1; }
#category .category__header:has(.category__cover) > .category__description { grid-area: 2 / 1; }

/* ATTENZIONE alle abbreviazioni. Qui prima c'era `background: var(--evo-dark)
   center/cover no-repeat`: la shorthand azzera background-image, e con il
   prefisso #category pesa (1,1,0), cioè più delle regole per-categoria qui
   sotto che valgono (0,2,0). Risultato misurato: background-image "none",
   banda grigia. Si usano le longhand, così l'immagine non viene mai resettata. */
#category .category__cover {
  position: relative;
  height: clamp(260px, 27vw, 400px);
  border-radius: 20px;
  overflow: hidden;
  background-color: var(--evo-dark);
  background-position: center;
  background-size: cover;
  background-repeat: no-repeat;
  box-shadow: 0 2px 8px rgba(28,35,32,.08), 0 28px 56px -24px rgba(28,35,32,.50);
}
#category .category__cover picture { position: absolute; inset: 0; display: block; }
#category .category__cover-image {
  width: 100%; height: 100%;
  object-fit: cover;
  border-radius: 0;
  opacity: 0;              /* la banda larga arriva dal background del padre */
}
/* Velo: scurisce solo il fondo, dove va il titolo. In basso è al 94%, quindi
   il bianco del titolo non dipende da quanto è chiara la foto sotto. */
#category .category__cover::after {
  content: "";
  position: absolute; inset: 0;
  background:
    linear-gradient(to top, rgba(12,16,14,.94) 0%, rgba(12,16,14,.86) 26%,
                            rgba(12,16,14,.38) 58%, rgba(12,16,14,.06) 100%),
    linear-gradient(to right, rgba(12,16,14,.50), transparent 62%);
}
#category .category__header:has(.category__cover) > .page-title-section {
  position: relative;
  z-index: 2;
  align-self: end;
  justify-self: start;
  max-width: min(26ch, 92%);
  margin: 0;
  padding: 0 clamp(1.3rem, 3vw, 2.6rem) clamp(1.4rem, 2.8vw, 2.2rem);
  color: #FFFFFF;
  font-size: clamp(1.75rem, 3.7vw, 3rem);
  line-height: 1.04;
  letter-spacing: -.03em;
  text-shadow: 0 2px 20px rgba(10,14,12,.75);
}
#category .category__header:has(.category__cover) > .page-title-section::after {
  content: "";
  display: block;
  width: 68px; height: 4px;
  margin-top: .85rem;
  border-radius: 2px;
  background: var(--evo-glow);
  box-shadow: 0 0 22px rgba(232,117,26,.75);
}
#category .category__description { max-width: 76ch; line-height: 1.72; color: #333C37; }
#category .category__description h2 {
  font-size: clamp(1.05rem, 1.6vw, 1.25rem);
  margin: 1.6rem 0 .5rem;
}

body.category-ottiche-da-puntamento .category__cover { background-image: url("/img/cat/ottiche-da-puntamento-largo.jpg"); }
body.category-visione-termica-e-notturna .category__cover { background-image: url("/img/cat/visione-termica-e-notturna-largo.jpg"); }
body.category-cinofilia-e-tracciamento-gps .category__cover { background-image: url("/img/cat/cinofilia-e-tracciamento-gps-largo.jpg"); }
body.category-calciature-e-chassis .category__cover { background-image: url("/img/cat/calciature-e-chassis-largo.jpg"); }
body.category-ottica-da-osservazione .category__cover { background-image: url("/img/cat/ottica-da-osservazione-largo.jpg"); }
body.category-supporti-e-stabilita .category__cover { background-image: url("/img/cat/supporti-e-stabilita-largo.jpg"); }
body.category-pulizia-e-manutenzione .category__cover { background-image: url("/img/cat/pulizia-e-manutenzione-largo.jpg"); }
body.category-illuminazione .category__cover { background-image: url("/img/cat/illuminazione-largo.jpg"); }
body.category-attacchi-e-adattatori .category__cover { background-image: url("/img/cat/attacchi-e-adattatori-largo.jpg"); }
body.category-protezioni-per-cani .category__cover { background-image: url("/img/cat/protezioni-per-cani-largo.jpg"); }
body.category-fototrappole .category__cover { background-image: url("/img/cat/fototrappole-largo.jpg"); }
body.category-richiami-e-attrattivi .category__cover { background-image: url("/img/cat/richiami-e-attrattivi-largo.jpg"); }
body.category-trasporto-e-custodia .category__cover { background-image: url("/img/cat/trasporto-e-custodia-largo.jpg"); }
body.category-accessori-e-componenti-arma .category__cover { background-image: url("/img/cat/accessori-e-componenti-arma-largo.jpg"); }
body.category-batterie-e-alimentazione .category__cover { background-image: url("/img/cat/batterie-e-alimentazione-largo.jpg"); }
body.category-telemetri-e-balistica .category__cover { background-image: url("/img/cat/telemetri-e-balistica-largo.jpg"); }
body.category-esoscheletri .category__cover { background-image: url("/img/cat/esoscheletri-largo.jpg"); }


/* ═══════════ IL MENU DICE DOVE SEI ═══════════
   Serviva capire a colpo d'occhio in che sezione ci si trova, e che quella
   tendina e' un selettore. PrestaShop marca la voce attiva con .current. */

.ps-mainmenu__tree-item.current > a,
.ps-mainmenu__tree-item > a.current,
.ps-mainmenu__tree-item:hover > a {
  color: #FFFFFF !important;
}
.ps-mainmenu__tree-item.current > a::after,
.ps-mainmenu__tree-item > a.current::after { width: 100% !important; }

/* La freccia dice "qui si apre qualcosa" e ruota quando e' aperto */
.ps-mainmenu__tree-item:has(.submenu) > a::before,
.ps-mainmenu__tree-item:has(.js-sub-menu) > a::before {
  content: "";
  display: inline-block;
  width: 7px; height: 7px;
  margin-right: .45rem;
  border-right: 2px solid var(--evo-glow);
  border-bottom: 2px solid var(--evo-glow);
  transform: translateY(-2px) rotate(45deg);
  transition: transform .25s var(--evo-ease);
}
.ps-mainmenu__tree-item:hover > a::before { transform: translateY(1px) rotate(-135deg); }

/* La voce della categoria in cui ti trovi, dentro la tendina */
.submenu a.current, .js-sub-menu a.current,
body[class*="category-"] .submenu a[href*="-"]:hover {
  background: #FBF2EA;
  color: var(--evo-action) !important;
  font-weight: 700;
}

/* Colonne: tornate a 4, con le miniature restavano voci tagliate in altezza */
.submenu .submenu__left, .js-sub-menu .submenu__left { columns: 4 250px; }
.submenu, .js-sub-menu { max-height: min(72vh, 620px); overflow-y: auto; }



/* ═══════════ MENU DI SINISTRA DELLE CATEGORIE ═══════════
   Com'era: 3 voci in croce (home · Prodotti · Marchi), le altre 17 chiuse
   dentro un accordion Bootstrap con aria-expanded="false". Misurato prima
   di toccare niente: 19 link nell'albero, 2 con altezza > 0. Testo nudo,
   nessuno stato attivo, nessuna immagine.

   Come si apre. `.collapse:not(.show){display:none}` di Bootstrap sta in un
   layer e NON è !important: basterebbe una dichiarazione normale non-layered
   per batterla. Il display:block!important serve contro l'ALTRO avversario,
   il JS del collapse, che scrive style="height:0" inline appena qualcuno
   tocca il pulsante. Per la stessa ragione il pulsante viene tolto: se non
   si può chiudere, non si richiude da solo.

   Le miniature si agganciano all'ID che sta nell'URL (`[href*="/424-"]`),
   non allo slug: se domani cambia il nome della categoria il quadratino
   resta al suo posto. Sono le stesse 98x98 già sul server. */

.category-tree .accordion-collapse,
.category-tree .accordion-collapse.collapse,
.ps-categorytree .accordion-collapse {
  display: block !important;
  height: auto !important;
  visibility: visible !important;
  overflow: visible !important;
}
.category-tree .accordion-button,
.category-tree .category-tree__item-header > button,
.ps-categorytree .accordion-button { display: none !important; }

/* Il contenitore: una scheda, alta quanto il suo contenuto.

   Com'era: position:sticky + max-height:calc(100vh - 116px) + overflow-y:auto.
   Tre difetti in una regola sola.
   1. L'albero e' alto 1201px contro una finestra utile di 650-960: il blocco
      si tagliava e apriva un SECONDO scorrimento dentro la pagina. Misurato:
      scrollHeight 1201 / clientHeight 650 su 1366x768, 1201/962 su 1920x1080,
      su tutti e tre i motori.
   2. Sticky rende il blocco un elemento posizionato: si dipinge SOPRA i
      fratelli statici della stessa colonna (i pannelli dei filtri), che
      quindi gli passavano sotto invece di stargli sotto in colonna.
   3. Restando incollato, la sua barra di scorrimento galleggiava in mezzo
      alla pagina.
   Ora: altezza naturale, nessun ritaglio, nessun contesto di scorrimento.
   La colonna scorre con la pagina, categorie e filtri impilati in ordine. */
.ps-categorytree.left-block, .category-tree.left-block {
  background: var(--evo-surface);
  border: 1px solid var(--evo-line);
  border-radius: var(--evo-r);
  box-shadow: var(--evo-shadow);
  padding: 1rem .85rem 1.1rem;
  position: static;
  max-height: none;
  overflow: visible;
}

/* I fratelli nella stessa colonna (filtri, banner, blocchi moduli) restano
   impilati sotto, ciascuno con la propria altezza: nessuno scorre dentro. */
#left-column > * + * { margin-top: 1.4rem; }
#left-column, #left-column > * { max-height: none; overflow: visible; }

/* "home" era un titolo grande e arancione senza motivo: è solo la via di
   ritorno. Il titolo vero della colonna lo mette la riga sotto. */
.category-tree .left-block__title { margin: 0 0 .55rem; }
.category-tree .left-block__title-link {
  color: var(--evo-muted) !important;
  font-size: .74rem;
  font-weight: 700;
  letter-spacing: .1em;
  text-transform: uppercase;
  display: inline-flex; align-items: center; gap: .35rem;
  padding: .25rem .55rem;
  border-radius: 7px;
}
.category-tree .left-block__title-link::before { content: "\2190"; font-size: .95em; }
.category-tree .left-block__title-link:hover { color: var(--evo-action) !important; background: #FBF2EA; }

.category-tree .accordion--category::before {
  content: "Categorie";
  display: block;
  font-size: .72rem;
  font-weight: 800;
  letter-spacing: .13em;
  text-transform: uppercase;
  color: var(--evo-text);
  padding: 0 .55rem .6rem;
  border-bottom: 1px solid var(--evo-line-soft);
  margin-bottom: .5rem;
}

.category-tree__list { list-style: none; margin: 0; padding: 0; }
.category-tree__item-header { padding: 0; border: 0; background: none; }
.category-tree .accordion-body { padding: 0; }
.category-tree .accordion-item, .category-tree .accordion { background: none; border: 0; }

/* Radici (Prodotti, Marchi): etichette di gruppo, non voci come le altre */
.category-tree__list[data-depth="0"] > .category-tree__item > .category-tree__item-header > .category-tree__item-link {
  display: block;
  color: var(--evo-muted) !important;
  font-size: .7rem;
  font-weight: 800;
  letter-spacing: .12em;
  text-transform: uppercase;
  padding: .75rem .55rem .3rem;
}
.category-tree__list[data-depth="0"] > .category-tree__item + .category-tree__item {
  border-top: 1px solid var(--evo-line-soft);
  margin-top: .5rem;
}

/* Le 17 voci vere */
.category-tree__list[data-depth="1"] .category-tree__item-link {
  display: flex;
  align-items: center;
  gap: .7rem;
  min-height: 50px;
  padding: .35rem .5rem;
  margin-bottom: 2px;
  border-radius: 11px;
  border-left: 3px solid transparent;
  color: var(--evo-text) !important;
  font-weight: 600;
  font-size: .875rem;
  line-height: 1.25;
  transition: background-color .18s var(--evo-ease), color .18s var(--evo-ease),
              border-color .18s var(--evo-ease), transform .18s var(--evo-ease);
}
/* Longhand, non shorthand: `background: ... center/cover` qui pesa (0,3,0) e
   azzererebbe il background-image delle regole per-categoria, che pesano
   (0,2,0). È lo stesso errore che teneva grigia la banda della categoria. */
.category-tree__list[data-depth="1"] .category-tree__item-link::before {
  content: "";
  flex: 0 0 38px;
  width: 38px; height: 38px;
  border-radius: 9px;
  border: 1px solid var(--evo-line);
  background-color: var(--evo-raised);
  background-position: center;
  background-size: cover;
  background-repeat: no-repeat;
  box-shadow: 0 1px 3px rgba(28,35,32,.10);
  transition: transform .22s var(--evo-ease), border-color .22s var(--evo-ease);
}
.category-tree__list[data-depth="1"] .category-tree__item-link:hover {
  background: #FBF2EA;
  color: var(--evo-action) !important;
  border-left-color: #EBC6A4;
  transform: translateX(2px);
}
.category-tree__list[data-depth="1"] .category-tree__item-link:hover::before {
  transform: scale(1.06);
  border-color: #E3BE9C;
}

/* Dove sei. Il body porta category-id-<id>, il link porta lo stesso id
   nell'href: si incrociano i due e la voce si accende da sola. */
body.category-id-422 .category-tree__item-link[href*="/422-"],
body.category-id-423 .category-tree__item-link[href*="/423-"],
body.category-id-424 .category-tree__item-link[href*="/424-"],
body.category-id-425 .category-tree__item-link[href*="/425-"],
body.category-id-426 .category-tree__item-link[href*="/426-"],
body.category-id-427 .category-tree__item-link[href*="/427-"],
body.category-id-428 .category-tree__item-link[href*="/428-"],
body.category-id-429 .category-tree__item-link[href*="/429-"],
body.category-id-430 .category-tree__item-link[href*="/430-"],
body.category-id-431 .category-tree__item-link[href*="/431-"],
body.category-id-432 .category-tree__item-link[href*="/432-"],
body.category-id-433 .category-tree__item-link[href*="/433-"],
body.category-id-434 .category-tree__item-link[href*="/434-"],
body.category-id-437 .category-tree__item-link[href*="/437-"],
body.category-id-438 .category-tree__item-link[href*="/438-"],
body.category-id-439 .category-tree__item-link[href*="/439-"],
body.category-id-440 .category-tree__item-link[href*="/440-"] {
  background: linear-gradient(90deg, #FBEFE4, #FFFFFF 78%);
  color: var(--evo-action) !important;   /* 4,61:1 su #FBF2EA */
  font-weight: 800;
  border-left-color: var(--evo-action);
  box-shadow: inset 0 0 0 1px #F1DCC6;
}
body.category-id-422 .category-tree__item-link[href*="/422-"]::after,
body.category-id-423 .category-tree__item-link[href*="/423-"]::after,
body.category-id-424 .category-tree__item-link[href*="/424-"]::after,
body.category-id-425 .category-tree__item-link[href*="/425-"]::after,
body.category-id-426 .category-tree__item-link[href*="/426-"]::after,
body.category-id-427 .category-tree__item-link[href*="/427-"]::after,
body.category-id-428 .category-tree__item-link[href*="/428-"]::after,
body.category-id-429 .category-tree__item-link[href*="/429-"]::after,
body.category-id-430 .category-tree__item-link[href*="/430-"]::after,
body.category-id-431 .category-tree__item-link[href*="/431-"]::after,
body.category-id-432 .category-tree__item-link[href*="/432-"]::after,
body.category-id-433 .category-tree__item-link[href*="/433-"]::after,
body.category-id-434 .category-tree__item-link[href*="/434-"]::after,
body.category-id-437 .category-tree__item-link[href*="/437-"]::after,
body.category-id-438 .category-tree__item-link[href*="/438-"]::after,
body.category-id-439 .category-tree__item-link[href*="/439-"]::after,
body.category-id-440 .category-tree__item-link[href*="/440-"]::after {
  content: "";
  margin-left: auto;
  flex: 0 0 7px;
  width: 7px; height: 7px;
  border-radius: 50%;
  background: var(--evo-action);
  box-shadow: 0 0 0 3px rgba(176,84,14,.16);
}

/* Miniature: le stesse immagini delle 17 categorie, agganciate all'ID */
.category-tree__item-link[href*="/422-"]::before { background-image: url("/img/c/422-small_default.jpg"); }
.category-tree__item-link[href*="/423-"]::before { background-image: url("/img/c/423-small_default.jpg"); }
.category-tree__item-link[href*="/424-"]::before { background-image: url("/img/c/424-small_default.jpg"); }
.category-tree__item-link[href*="/425-"]::before { background-image: url("/img/c/425-small_default.jpg"); }
.category-tree__item-link[href*="/426-"]::before { background-image: url("/img/c/426-small_default.jpg"); }
.category-tree__item-link[href*="/427-"]::before { background-image: url("/img/c/427-small_default.jpg"); }
.category-tree__item-link[href*="/428-"]::before { background-image: url("/img/c/428-small_default.jpg"); }
.category-tree__item-link[href*="/429-"]::before { background-image: url("/img/c/429-small_default.jpg"); }
.category-tree__item-link[href*="/430-"]::before { background-image: url("/img/c/430-small_default.jpg"); }
.category-tree__item-link[href*="/431-"]::before { background-image: url("/img/c/431-small_default.jpg"); }
.category-tree__item-link[href*="/432-"]::before { background-image: url("/img/c/432-small_default.jpg"); }
.category-tree__item-link[href*="/433-"]::before { background-image: url("/img/c/433-small_default.jpg"); }
.category-tree__item-link[href*="/434-"]::before { background-image: url("/img/c/434-small_default.jpg"); }
.category-tree__item-link[href*="/437-"]::before { background-image: url("/img/c/437-small_default.jpg"); }
.category-tree__item-link[href*="/438-"]::before { background-image: url("/img/c/438-small_default.jpg"); }
.category-tree__item-link[href*="/439-"]::before { background-image: url("/img/c/439-small_default.jpg"); }
.category-tree__item-link[href*="/440-"]::before { background-image: url("/img/c/440-small_default.jpg"); }

/* (Qui c'era una deroga per <992px che rimetteva static/none/visible: ora e'
   il comportamento normale a ogni larghezza, la deroga non serve piu'.) */


/* ═══════════ RIFINITURE DELLA PAGINA CATEGORIA ═══════════ */

/* Barra ordinamento/conteggio: era testo sparso sopra la griglia */
#js-product-list-top .products__selection {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: .8rem;
  background: var(--evo-surface);
  border: 1px solid var(--evo-line);
  border-radius: var(--evo-r);
  padding: .7rem 1rem;
  margin-bottom: 1.4rem;
  box-shadow: var(--evo-shadow);
}
#js-product-list-top .products__count span {
  font-weight: 700;
  color: var(--evo-text);
  font-size: .9rem;
}
#js-product-list-top .products__sort-label { color: var(--evo-muted); font-size: .85rem; }
.products__sort-dropdown-button {
  background: var(--evo-surface) !important;
  border: 1px solid var(--evo-line) !important;
  color: var(--evo-text) !important;
  border-radius: 999px;
  font-weight: 700;
  font-size: .88rem;
  padding: .45rem 1rem;
}
.products__sort-dropdown-button:hover { border-color: var(--evo-action) !important; color: var(--evo-action) !important; }
.dropdown-menu {
  background: var(--evo-surface);
  border: 1px solid var(--evo-line);
  border-radius: var(--evo-r-sm);
  box-shadow: var(--evo-shadow-up);
  padding: .35rem;
}
.dropdown-item { border-radius: 8px; font-size: .9rem; padding: .5rem .7rem; color: var(--evo-text); }
.dropdown-item:hover { background: #FBF2EA; color: var(--evo-action); }
.dropdown-item.current { background: #FBEFE4; color: var(--evo-action); font-weight: 700; }

/* Filtri: stessa grammatica della colonna sinistra */
#search_filters { padding: 1rem .9rem 1.1rem; }
#search_filters .facet { border-bottom: 1px solid var(--evo-line-soft); padding-bottom: .8rem; margin-bottom: .8rem; }
#search_filters .facet:last-child { border-bottom: 0; margin-bottom: 0; padding-bottom: 0; }

/* Griglia prodotti: un po' d'aria, e la card non balla in altezza */
#products .products, .products.row { row-gap: 1.4rem; }

/* Breadcrumb: separatore leggero fra fascia scura e contenuto */
.breadcrumb { padding-top: .9rem; padding-bottom: .2rem; }
.breadcrumb-item + .breadcrumb-item::before { color: #B7BDB8; }


/* ═══════════ FRECCE DELLO SLIDER ═══════════
   Misurato in home: .carousel-control-prev è un bottone 216x540, cioè una
   colonna invisibile larga il 15% dello schermo. Si sovrapponeva al pannello
   del testo per 136px: la freccia cadeva SOPRA le parole ("Cannocchiali",
   "campo"), e peggio, cliccare sulla prima parte del testo faceva scorrere
   lo slider indietro. Le si riduce a due pastiglie di 52px agganciate ai
   bordi, e il pannello parte comunque oltre. */
.carousel-control-prev, .carousel-control-next {
  top: 50%;
  bottom: auto;
  width: 52px;
  height: 52px;
  transform: translateY(-50%);
  border-radius: 50%;
  background: rgba(20, 25, 22, .70);   /* bianco delle icone: 6,66:1 anche su foto bianca */
  border: 1px solid rgba(255,255,255,.38);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
  opacity: 1;
  z-index: 3;
  transition: background-color .2s var(--evo-ease), transform .2s var(--evo-ease);
}
.carousel-control-prev { left: 18px; }
.carousel-control-next { right: 18px; }
.carousel-control-prev:hover, .carousel-control-next:hover,
.carousel-control-prev:focus, .carousel-control-next:focus {
  background: var(--evo-action);
  border-color: var(--evo-action);
  opacity: 1;
  transform: translateY(-50%) scale(1.06);
}
.carousel-control-prev-icon, .carousel-control-next-icon { width: 1.1rem; height: 1.1rem; }

/* Il pannello del testo parte dopo la pastiglia a qualsiasi larghezza:
   il minimo del clamp è 88px, la pastiglia finisce a 70px. */
.carousel .carousel-item figcaption, .carousel-caption, .caption {
  left: clamp(5.5rem, 7vw, 6rem);
}

.carousel-indicators [data-bs-target] {
  width: 26px; height: 4px;
  border-radius: 99px;
  background-color: rgba(255,255,255,.55);
  border: 0;
  opacity: 1;
}
.carousel-indicators .active { background-color: var(--evo-glow); width: 34px; }


/* ═══════════ MOBILE: PRIMA I PRODOTTI, POI LE CATEGORIE ═══════════
   Con l'albero finalmente aperto, su telefono la colonna sinistra mette 17
   voci fra l'utente e i prodotti: misurato, il primo prodotto finiva oltre
   1000px di scorrimento. Su schermo stretto le colonne si riordinano. */
@media (max-width: 767.98px) {
  .columns-container > .row { display: flex; flex-wrap: wrap; }
  .columns-container > .row > #left-column  { order: 2; }
  .columns-container > .row > #center-column { order: 1; }
  .columns-container > .row > #right-column { order: 3; }

  .ps-categorytree.left-block, .category-tree.left-block { margin-top: 1.5rem; }
  .category-tree__list[data-depth="1"] .category-tree__item-link { min-height: 46px; }

  #category .category__cover { border-radius: 14px; }
  #category .category__header:has(.category__cover) > .page-title-section {
    padding: 0 1.1rem 1.1rem;
    max-width: 100%;
  }
}


/* ═══════════ ULTIME RIFINITURE ═══════════ */

/* Il titolo della sezione in vetrina aveva il filo arancio sotto: si estende
   a tutti i titoli di blocco della home per dare ritmo alla pagina */
.featured-products, .ps-customtext, .ps-imageslider + section { scroll-margin-top: 90px; }

/* Le card prodotto avevano tutte la stessa ombra piatta: un filo di colore
   sul bordo superiore quando ci passi sopra le rende vive senza urlare */
.product-miniature { position: relative; }
.product-miniature::after {
  content: "";
  position: absolute; left: 0; right: 0; top: 0;
  height: 3px;
  background: linear-gradient(90deg, var(--evo-action), var(--evo-glow));
  opacity: 0;
  transition: opacity .28s var(--evo-ease);
  pointer-events: none;
  border-radius: var(--evo-r) var(--evo-r) 0 0;
}
.product-miniature:hover::after { opacity: 1; }

/* Paginazione: era una fila di riquadri tutti uguali */
.pagination { gap: 2px; margin-top: 2rem; }
.pagination .page-link { min-width: 42px; text-align: center; font-weight: 700; }

/* Il footer attaccava al bordo: un filo di colore lo lega all'header */
.page-footer, #footer, .footer-container { position: relative; }

@media (prefers-reduced-motion: reduce) {
  .carousel-control-prev:hover, .carousel-control-next:hover { transform: translateY(-50%); }
  .category-tree__list[data-depth="1"] .category-tree__item-link:hover { transform: none; }
}


/* ═══════════ RIPARAZIONI EVOX ═══════════ */

/* [2] MOBILE: il pulsante hamburger era invisibile — l'icona aveva lo stesso
   colore dello sfondo scuro dell'header (1C2320 su 1C2320 = 1.00:1).
   Colore chiaro: F3F1ED su 1C2320 = 14.20:1 */
header .menu-toggle,
header .menu-toggle .material-icons,
.header-top .menu-toggle,
.header-top .menu-toggle .material-icons,
button.menu-toggle,
button.menu-toggle .material-icons {
  color: #F3F1ED !important;
}

/* [5] DESKTOP: il contatore del carrello spariva dentro una pastiglia bianca.
   Il tema, da 768px in su, forzava background:var(--bs-tertiary-bg) e
   color:inherit -> F3F1ED su F1EDE6 = 1.03:1.
   Pastiglia arancio con testo scuro: 1C2320 su E8751A = 5.33:1 */
@media (min-width: 768px) {
  .header-block__badge,
  .header-block .header-block__badge,
  span.header-block__badge {
    background: #E8751A !important;
    background-color: #E8751A !important;
    color: #1C2320 !important;
    font-weight: 700;
  }
}

/* evox-galleria-mobile */


/* [7] MOBILE — la galleria occupava 534px e teneva il blocco d'acquisto
   fuori dalla prima schermata anche dopo lo spostamento della descrizione.
   Foto piu' compatta + provini piu' piccoli: il pulsante entra nel primo
   schermo (misurato). */
@media (max-width: 767.98px) {
  #product .product__carousel .carousel-item img,
  #product .product__images img.js-cover,
  #product .product__carousel img {
    max-height: 205px;
    width: auto;
    max-width: 100%;
    object-fit: contain;
    margin-left: auto;
    margin-right: auto;
  }
  #product .product__thumbnail {
    width: 54px !important;
    height: 54px !important;
    min-width: 54px;
  }
  #product .product__images { gap: .5rem; }
}


/* evox-qty-inline */
/* [7] MOBILE — quantita' e "Aggiungi al carrello" erano incolonnati (109px).
   Affiancati stanno in 47px e il pulsante entra nella prima schermata. */
@media (max-width: 767.98px) {
  #product .product__actions-qty-add {
    display: flex;
    flex-direction: row;
    align-items: stretch;
    gap: .5rem;
  }
  #product .product__actions-qty-add > .product__quantity { flex: 0 0 104px; }
  #product .product__actions-qty-add > .product__add-to-cart { flex: 1 1 auto; margin: 0; }
  #product .product__add-to-cart-button { width: 100%; height: 100%; }
}


/* evox-qty-nowrap */
/* [7] MOBILE — il gruppo quantita' (due pulsanti da 64px + campo) andava a capo
   dentro i 104px della colonna e faceva alto 93px tutto il blocco d'acquisto.
   Pulsanti compatti e niente a capo: la riga sta in 47px. */
@media (max-width: 767.98px) {
  #product .product__actions-qty-add > .product__quantity { flex: 0 0 128px; }
  #product .product__quantity .quantity-button__group { flex-wrap: nowrap !important; }
  #product .product__quantity .btn-square-icon {
    flex: 0 0 42px;
    width: 42px;
    min-width: 42px;
    padding-left: 0;
    padding-right: 0;
  }
  #product .product__quantity .js-quantity-wanted {
    flex: 1 1 auto;
    min-width: 40px;
    width: 40px;
    text-align: center;
    padding-left: 2px;
    padding-right: 2px;
  }
}


/* evox-qty-row-nowrap */
/* [7] MOBILE — la riga d'acquisto aveva flex-wrap:wrap e il contenitore del
   pulsante width:100%: il pulsante andava comunque a capo sotto la quantita'. */
@media (max-width: 767.98px) {
  #product .product__actions-qty-add { flex-wrap: nowrap !important; }
  #product .product__actions-qty-add > .product__add-to-cart {
    width: auto !important;
    max-width: none;
    flex: 1 1 auto;
  }
}


/* ════════════════════════════════════════════════════════════════════════
   RIPARAZIONI-OCCHIO-INIZIO — area "occhio" (secondo passaggio)
   Ogni regola qui sotto è stata scritta DOPO aver misurato il difetto in
   browser e riverificata sullo stile calcolato. Niente è dato per buono.
   ════════════════════════════════════════════════════════════════════════ */

/* ── 1. MENU MOBILE: era testo crema su fondo crema, 1,05:1 ──────────────
   Il pannello #mobileMenu ha fondo rgb(248,246,242) (misurato su tutte e 22
   le voci, a 390 e a 820px). Le regole dell'header lo pescavano insieme alla
   fascia scura e gli davano #F3F1ED. Sopra sono state escluse alla fonte;
   qui si assegna il colore giusto. #1C2320 su #F8F6F2 = 14,84:1. */
.ps-mainmenu--mobile.offcanvas,
.ps-mainmenu--mobile .ps-mainmenu__mobile,
.ps-mainmenu--mobile .offcanvas-body { color: var(--evo-text) !important; }

#header .ps-mainmenu.ps-mainmenu--mobile.offcanvas a,
#header .ps-mainmenu.ps-mainmenu--mobile.offcanvas button,
#header .ps-mainmenu.ps-mainmenu--mobile.offcanvas .js-menu-back-title,
.header .ps-mainmenu.ps-mainmenu--mobile.offcanvas a,
.header .ps-mainmenu.ps-mainmenu--mobile.offcanvas button,
.ps-mainmenu--mobile.offcanvas a,
.ps-mainmenu--mobile.offcanvas button,
.ps-mainmenu--mobile .ps-mainmenu__tree-item > a,
.ps-mainmenu--mobile .ps-mainmenu__tree-item > .ps-mainmenu__tree-item-wrapper > a {
  color: var(--evo-text) !important;
  opacity: 1;
}
/* Le icone di servizio dentro il pannello (freccia avanti, freccia indietro,
   X di chiusura) vivono sullo stesso fondo chiaro: arancio d'azione. */
#header .ps-mainmenu.ps-mainmenu--mobile.offcanvas .material-icons,
.header .ps-mainmenu.ps-mainmenu--mobile.offcanvas .material-icons,
.ps-mainmenu--mobile.offcanvas .material-icons { color: var(--evo-action) !important; }
.ps-mainmenu--mobile.offcanvas .btn-close { filter: none; opacity: .85; }

/* Righe leggibili e toccabili: 46px di bersaglio, filo di separazione */
.ps-mainmenu--mobile .ps-mainmenu__tree-item > a,
.ps-mainmenu--mobile .ps-mainmenu__tree-item > .ps-mainmenu__tree-item-wrapper > a {
  min-height: 46px;
  display: flex;
  align-items: center;
  font-weight: 600;
  font-size: 1rem;
  padding: .55rem .95rem;
}
.ps-mainmenu--mobile .ps-mainmenu__tree-item + .ps-mainmenu__tree-item {
  border-top: 1px solid var(--evo-line-soft);
}
#header .ps-mainmenu.ps-mainmenu--mobile.offcanvas a:hover,
#header .ps-mainmenu.ps-mainmenu--mobile.offcanvas a:focus-visible {
  color: var(--evo-action) !important;
  background: var(--evo-raised);
}
/* Il filo arancio in hover è pensato per la fascia scura: nel pannello no */
.ps-mainmenu--mobile .ps-mainmenu__tree-item > a::after { content: none; }


/* ── 2. HAMBURGER: glifo #1C2320 su header #1C2320, 1,00:1 ───────────────
   Il colore è già stato schiarito poco sopra (blocco RIPARAZIONI EVOX): qui
   si aggiunge solo l'affordance, cioè il fatto che si veda che è un pulsante,
   e si copre anche il selettore senza `header` antenato. */
.menu-toggle,
.menu-toggle .material-icons,
.ps-mainmenu__mobile-toggle .menu-toggle,
.ps-mainmenu__mobile-toggle .menu-toggle .material-icons {
  color: #F3F1ED !important;
}
.menu-toggle .material-icons { font-size: 30px; line-height: 1; }
.menu-toggle:hover .material-icons,
.menu-toggle:focus-visible .material-icons { color: var(--evo-glow) !important; }
.ps-mainmenu__mobile-toggle .menu-toggle {
  border: 1px solid rgba(243,241,237,.28);
  border-radius: var(--evo-r-sm);
  padding: .3rem .55rem;
}


/* ── 4. SLIDER: la caption era display:none sotto i 992px ────────────────
   La classe è `d-none d-lg-block`: Bootstrap la spegne fino a lg. Il blocco
   mobile che c'era la ristilava (position, padding, raggio) senza mai
   riaccenderla — codice morto, misurato display:none a 390 e a 820px.
   Sotto lg il pannello smette di galleggiare sopra la foto e le si mette
   sotto, a piena larghezza: su schermo stretto un overlay mangia l'immagine. */
@media (max-width: 991.98px) {
  .ps-imageslider__figcaption.carousel-caption,
  .carousel .carousel-item figcaption.carousel-caption,
  .carousel-caption.d-none {
    display: block !important;
    position: static !important;
    transform: none !important;
    left: auto !important; right: auto !important; top: auto !important; bottom: auto !important;
    max-width: 100% !important;
    width: 100%;
    text-align: left !important;
    background: var(--evo-surface);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    border-radius: 0 0 var(--evo-r) var(--evo-r);
    box-shadow: none;
    padding: 1.15rem 1.25rem 1.35rem;
    color: var(--evo-text);
  }
  .ps-imageslider__figcaption.carousel-caption h1,
  .ps-imageslider__figcaption.carousel-caption h2,
  .ps-imageslider__figcaption.carousel-caption .display-1 {
    font-size: clamp(1.35rem, 5.2vw, 1.9rem);
    margin-bottom: .5rem;
    color: var(--evo-text);
  }
  .ps-imageslider__figcaption.carousel-caption p {
    font-size: .98rem; line-height: 1.6; color: #333C37; margin-bottom: .9rem;
  }
  .ps-imageslider__figcaption.carousel-caption .btn { width: auto; }
  /* Le frecce stavano al centro verticale della figura: ora la figura è più
     alta della foto, si riportano sopra la sola immagine. */
  .carousel-control-prev, .carousel-control-next { align-items: flex-start; padding-top: 20%; }
  /* Gli indicatori finivano sul testo: si spostano in cima, sulla foto */
  .carousel-indicators { bottom: auto; top: 0; margin-bottom: 0; padding-top: .6rem; }
}
@media (max-width: 575.98px) {
  .ps-imageslider__figcaption.carousel-caption { padding: 1rem 1.05rem 1.2rem; }
}


/* ── 9. TABLET: "Chiamaci: +39 366 202 5885" andava a capo ───────────────
   Misurato 44px d'altezza (2 righe da 24px) fra 768 e 991px, header a 129px,
   con "5885" orfano sulla riga sotto. Il numero non si spezza mai; fra 768 e
   991 sparisce la sola parola "Chiamaci:" e resta il numero, che è
   l'informazione utile. */
.ps-contactinfo__phone { white-space: nowrap; }
.ps-contactinfo__phone-number { white-space: nowrap; }
@media (max-width: 991.98px) {
  .ps-contactinfo__phone { font-size: .88rem; }
  .ps-contactinfo__phone-label { display: none; }
}


/* ── 10. SCHEDA CATEGORIE: la scheda NON scorre piu' ─────────────────────
   Qui c'erano gli arredi di un blocco che scorreva: barra colorata
   (scrollbar-width/color + ::-webkit-scrollbar) e una mask-image che sfumava
   gli ultimi 38px per far capire "sotto c'e' altro".
   Tolto il ritaglio, tolti anche loro: senza scorrimento la sfumatura
   cancellerebbe per sempre l'ultima voce dell'elenco, e la barra non esiste.
   Resta solo il fondo della scheda. */
.ps-categorytree.left-block, .category-tree.left-block {
  background: var(--evo-surface);
  -webkit-mask-image: none;
          mask-image: none;
}


/* ── 5-bis. La descrizione di categoria è stata spostata sotto la griglia
   (category-footer.tpl). Va staccata dai prodotti, altrimenti sembra la
   scheda dell'ultimo articolo invece del testo della categoria. */
#category .category__footer {
  margin-top: 2.4rem;
  padding-top: 1.8rem;
  border-top: 1px solid var(--evo-line);
}


/* evox-frecce-tonde */
/* Le frecce del carosello prodotto erano 52x72 con border-radius 50%: due
   ellissi schiacciate. Quadrate = cerchi veri. */
#product .product__carousel .carousel-control-prev,
#product .product__carousel .carousel-control-next {
  width: 48px;
  height: 48px;
}


/* evox-qta-card */
/* Nelle card prodotto su telefono il gruppo quantita' (due pulsanti da 64px)
   non ci stava nei 116px della card e andava a capo: 93px di altezza per un
   selettore da 47. Pulsanti compatti, niente a capo. */
@media (max-width: 767.98px) {
  .product-miniature .quantity-button__group { flex-wrap: nowrap !important; }
  /* Solo i due pulsanti +/- del selettore quantita'. Il pulsante "Aggiungi al
     carrello" porta la stessa classe btn-square-icon del tema: prendendolo
     dentro questa regola veniva schiacciato a 40px con dentro la scritta su
     tre righe, sopra l'icona del carrello. Vedi blocco evox-card-add. */
  .product-miniature .quantity-button__group .btn-square-icon {
    flex: 0 0 40px;
    width: 40px;
    min-width: 40px;
    padding-left: 0;
    padding-right: 0;
  }
  /* La casella della quantita'. Il selettore precedente era .js-quantity-wanted,
     classe che in questo tema non esiste: qty-input.tpl mette solo .form-control,
     quindi la regola non toccava nulla. Misurato a 360px: casella larga 31px con
     14,4px di padding per lato, spazio utile 0 e la cifra "1" spinta fuori vista
     (scrollWidth 36 contro clientWidth 29). */
  .product-miniature .quantity-button__group > .form-control,
  .product-miniature .quantity-button__group > input {
    flex: 1 1 auto;
    min-width: 28px;
    text-align: center;
    padding-left: 2px;
    padding-right: 2px;
  }
}


/* ════════════════════════════════════════════════════════════════════════
   RIPARAZIONI-OCCHIO-2 — correzione del blocco precedente
   Riaccendere la caption non bastava: era accesa ma invisibile.
   Misurato a 820px: .ps-imageslider__figure ha height:320px dal tema e
   .carousel-inner ha overflow:hidden, quindi la caption cadeva a y=441
   dentro una scatola alta 320 e veniva tagliata via. Qui si toglie
   l'altezza fissa sotto i 992px e si dà l'altezza alla sola fotografia.
   ════════════════════════════════════════════════════════════════════════ */

@media (max-width: 991.98px) {
  /* La figura torna a misurarsi sul contenuto: foto + pannello di testo */
  .ps-imageslider__figure { height: auto !important; }
  .ps-imageslider .carousel-item,
  .ps-imageslider .carousel-inner { height: auto !important; }

  /* L'altezza la porta la foto, non il contenitore */
  .ps-imageslider__figure img {
    height: 300px !important;
    width: 100%;
    object-fit: cover;
    display: block;
  }

  /* Le frecce devono stare sulla foto, non sul testo: con la figura più
     alta un top:50% le avrebbe portate a cavallo del pannello bianco. */
  .carousel-control-prev, .carousel-control-next {
    top: 150px;
    bottom: auto;
    align-items: center;
    padding-top: 0;
    transform: translateY(-50%);
  }
  .carousel-control-prev { left: 12px; }
  .carousel-control-next { right: 12px; }

  /* Gli indicatori restano in cima, sopra la foto */
  .carousel-indicators { top: .5rem; bottom: auto; margin-bottom: 0; padding-top: 0; }
}

@media (max-width: 575.98px) {
  .ps-imageslider__figure img { height: 230px !important; }
  .carousel-control-prev, .carousel-control-next { top: 115px; }
}


/* evox-card-add */
/* Sotto i 768px il tema mostra la scritta "Aggiungi al carrello" nella card
   (sopra i 768 resta la sola icona). Misurato a 390px: il gruppo quantita'
   occupava tutti i 123px della riga, il pulsante andava a capo e la regola
   evox-qta-card lo stringeva a 40px: scritta su tre righe, alta 82px, con
   l'icona del carrello che sbordava a sinistra. Qui il pulsante prende la
   riga intera, come gia' fa da 768px in su. */
@media (max-width: 767.98px) {
  .product-miniature__form {
    flex-wrap: wrap;
    row-gap: .5rem;
  }
  .product-miniature__add.btn-square-icon {
    flex: 1 1 100%;
    width: 100%;
    min-width: 0;
    height: auto;
    min-height: 44px;
    padding: .5rem .375rem;
    gap: .25rem;
    font-size: .8125rem;
    line-height: 1.2;
    text-align: center;
    white-space: normal;
  }
  .product-miniature__add.btn-square-icon .material-icons {
    font-size: 18px;
    flex: 0 0 auto;
  }
}

/* ════════════════════════════════════════════════════════════════════════
   SCHEDA PRODOTTO — parte bassa a piena larghezza, contenuti in tab
   (evox-scheda-tab)

   Prima: due colonne per tutta la pagina. La descrizione lunga restava
   compressa nel 55% di sinistra mentre a destra, sotto le rassicurazioni,
   c'erano centinaia di pixel vuoti. Misurato su 1366px: le rassicurazioni
   finivano a y=1049, cioe' fuori dalla prima schermata, lontanissime dal
   pulsante d'acquisto.

   Adesso: le rassicurazioni salgono accanto al carrello (dove uno decide se
   fidarsi) e il testo lungo prende tutta la larghezza, organizzato in tab.

   Larghezza di lettura: a piena pagina una riga da 1300px e' illeggibile.
   I blocchi di testo sono limitati a 68ch (~72 caratteri per riga misurati
   sul font del tema); tabelle ed elenchi di dettaglio restano larghi.
   ═══════════════════════════════════════════════════════════════════════ */

/* La parte bassa non e' piu' una griglia 55% / 1fr */
.product__bottom--full {
  display: block;
  grid-template-columns: none;
}

/* ── Rassicurazioni nella colonna d'acquisto ───────────────────────────── */
.product__reassurance {
  margin-block: 1.25rem 0;
  padding-block-start: 1.15rem;
  border-block-start: 1px solid var(--evo-line);
}
.product__reassurance .blockreassurance {
  display: grid;
  gap: .85rem;
}
.product__reassurance .reassurance {
  flex-basis: auto;
  gap: .75rem;
  align-items: flex-start;
}
.product__reassurance .reassurance__image {
  height: 2rem;
  width: 2rem;
}
.product__reassurance .reassurance__title {
  font-weight: 600;
  font-size: .9375rem;
}
.product__reassurance .reassurance__desc {
  font-size: .8125rem;
  line-height: 1.35;
  color: var(--evo-muted);
}
.product__reassurance .reassurance--link:hover .reassurance__title {
  color: var(--evo-action);
}


/* ════════════════════════════════════════════════════════════════════════
   evox-ptabs — IL COMPONENTE A SCHEDE DELLA PARTE BASSA
   Rifatto il 9 ago 2026 dopo aver misurato la resa vera, non il codice.

   COSA NON ANDAVA, MISURATO.
   Il pannello era gia' largo quanto il corpo della pagina (1296px a 1440,
   stessa x=72 del contenitore), ma il TESTO stava in una colonna di 540px
   incollata al bordo sinistro, cioe' esattamente sotto la galleria delle
   foto, con ~750px di bianco a destra. Per chi guarda la pagina il risultato
   e' indistinguibile dal difetto segnalato ("la descrizione e' ancora
   delimitata dalla colonna di sinistra"): il numero diceva "piena
   larghezza", l'occhio diceva "colonna di sinistra". Qui la colonna di
   lettura viene CENTRATA nella fascia, cosi' la piena larghezza si vede.

   POI IL PROPRIETARIO HA SEGNALATO IL DIFETTO CHE RESTAVA: colonna centrata
   sì, ma stretta, con due fasce bianche ai lati. Vero e misurato: 568px di
   testo dentro una scheda da 1296. Il secondo giro (9 ago 2026, sera) toglie
   del tutto il limite di larghezza sul paragrafo e riempie la fascia con
   PIU' COLONNE invece che con righe piu' lunghe. La spiegazione lunga, con
   i numeri di ogni gradino, e' nel commento "L'IMPAGINAZIONE DEL TESTO"
   piu' sotto.

   L'IMPAGINAZIONE DELLA FASCIA, ora:
     testo corrente   due colonne sopra i 992px, una sotto  -> 100% fascia
     immagini         larghe quanto la colonna che le ospita
     specifiche       coppie etichetta/valore su 2-3 colonne -> 100% fascia
     dettagli         targhette affiancate (auto-fit)        -> 100% fascia

   IL COMPONENTE. Non piu' tre pulsanti su una riga vuota: una scheda bianca
   con la barra delle linguette incassata in alto. La linguetta attiva e'
   bianca come il corpo della scheda, ha il bordo che la circonda e un filo
   d'accento sopra; il suo bordo inferiore bianco COPRE la riga della barra,
   quindi linguetta e pannello sono un pezzo solo. Non serve leggere il
   colore per capire quale scheda e' aperta: si vede che e' la stessa
   superficie del contenuto.
   ═══════════════════════════════════════════════════════════════════════ */

.ptabs {
  margin-block-start: 2.25rem;
  background-color: var(--evo-surface);
  border: 1px solid var(--evo-line);
  border-radius: var(--evo-r);
  box-shadow: var(--evo-shadow);
}

/* ── La barra delle linguette ──────────────────────────────────────────── */
.ptabs__tablist {
  position: relative;
  display: flex;
  flex-wrap: wrap;          /* mai una barra che scorre di lato */
  gap: .25rem;
  padding: .5rem .75rem 0;
  background-color: var(--evo-bg);
  border-block-end: 1px solid var(--evo-line);
  border-start-start-radius: calc(var(--evo-r) - 1px);
  border-start-end-radius: calc(var(--evo-r) - 1px);
}

.ptabs__tab {
  position: relative;
  bottom: -1px;             /* scende di 1px per coprire la riga della barra */
  appearance: none;
  background-color: transparent;
  border: 1px solid transparent;
  padding: .8rem 1.5rem;
  font-family: inherit;
  font-size: 1rem;
  font-weight: 600;
  line-height: 1.2;
  letter-spacing: .01em;
  color: var(--evo-muted);
  cursor: pointer;
  border-start-start-radius: 11px;
  border-start-end-radius: 11px;
  transition:
    color            .2s var(--evo-ease),
    background-color .2s var(--evo-ease),
    border-color     .2s var(--evo-ease);
}

/* Il filo d'accento sopra la linguetta attiva. Sta su tutte le linguette,
   trasparente e schiacciato: cosi' la comparsa e' un'animazione e non un
   salto, e nessuna linguetta cambia altezza quando la si sceglie. */
.ptabs__tab::before {
  content: "";
  position: absolute;
  inset-block-start: -1px;
  inset-inline: -1px;
  height: 3px;
  background-color: var(--evo-glow);
  border-start-start-radius: 11px;
  border-start-end-radius: 11px;
  transform: scaleX(0);
  transition: transform .28s var(--evo-ease);
}

.ptabs--tabs .ptabs__tab:hover {
  color: var(--evo-text);
  background-color: var(--evo-raised);
}

.ptabs--tabs .ptabs__tab[aria-selected="true"] {
  color: var(--evo-action);
  background-color: var(--evo-surface);
  border-color: var(--evo-line);
  /* il bordo basso bianco copre la riga della barra: linguetta e pannello
     diventano la stessa superficie */
  border-block-end-color: var(--evo-surface);
}
.ptabs--tabs .ptabs__tab[aria-selected="true"]::before {
  transform: scaleX(1);
}

.ptabs__tab:focus-visible {
  outline: 3px solid var(--evo-glow);
  outline-offset: -3px;
  border-start-start-radius: 11px;
  border-start-end-radius: 11px;
}

/* ── Il corpo della scheda ─────────────────────────────────────────────── */
/* Il margine interno e' l'unico bianco che resta ai lati: misurato, tiene il
   contenuto al 94-96% della scheda bianca a ogni larghezza (1236 su 1296 a
   1920, 1068 su 1116 a 1366, 659 su 696 a 768). Prima arrivava a 3rem per
   lato e da solo mangiava il 7,5% della scheda. */
.ptabs__panels {
  padding-inline: clamp(1.15rem, .6rem + 1.05vw, 2.15rem);
  padding-block: clamp(1.5rem, 1rem + 1.4vw, 2.5rem);
}
.ptabs__panel {
  display: none;
  scroll-margin-block-start: 6rem;
}
.ptabs__panel.is-open {
  display: block;
}
.ptabs__panel:focus-visible {
  outline: 3px solid var(--evo-glow);
  outline-offset: 6px;
  border-radius: var(--evo-r-sm);
}

/* Senza JavaScript la barra non potrebbe funzionare, quindi non si mostra e
   restano aperti tutti i pannelli, separati da una riga. Il contenuto e'
   tutto nell'HTML servito dal server: nessuno perde niente, ne' un utente
   ne' un crawler. */
.ptabs:not(.is-ready) .ptabs__tablist { display: none; }
.ptabs:not(.is-ready) .ptabs__panel   { display: block; }
.ptabs:not(.is-ready) .ptabs__panel + .ptabs__panel {
  margin-block-start: 2rem;
  padding-block-start: 2rem;
  border-block-start: 1px solid var(--evo-line);
}

/* ════════════════════════════════════════════════════════════════════════
   L'IMPAGINAZIONE DEL TESTO — DUE COLONNE, NON UNA COLONNINA
   Rifatto il 9 ago 2026 dopo la segnalazione del proprietario ("il testo sta
   in mezzo, con due fasce bianche ai lati").

   COSA NON ANDAVA, MISURATO.
   Il giro precedente teneva la riga a ~70 caratteri con un max-width di
   35.5rem sul paragrafo, e centrava quella colonna nella scheda. Numeri veri
   del pannello "Descrizione": scheda bianca 1296px a 1920, testo 568px,
   cioe' il 43,8% della scheda; a 1366, 568 su 1116, il 50,9%. Piu' di meta'
   della superficie era vuota.

   PERCHE' NON BASTA TOGLIERE IL max-width.
   Senza limite la riga diventerebbe larga quanto la fascia: 1236px, cioe'
   148 caratteri (misurato: 8,35px per carattere con Inter a 16px). A fine
   riga l'occhio perde il capo e deve ricercare l'inizio della successiva.
   Si scambierebbe un difetto con un altro.

   LA SCELTA: SI RIEMPIE LA LARGHEZZA CON PIU' COLONNE, NON CON RIGHE PIU'
   LUNGHE. Il testo occupa il 100% della fascia; a essere diviso e' il flusso.
   Fra le tre strade proposte questa e' l'unica che regge su TUTTE le schede:
   la colonna laterale con immagine, sommario e dati chiave avrebbe funzionato
   solo dove quel materiale c'e' davvero (su 24 schede controllate, 4 hanno
   una <figure> e 6 non hanno nemmeno un <h2>: sulle altre la fascia laterale
   sarebbe rimasta bianca, cioe' lo stesso difetto spostato a destra).
   Le due colonne invece si riempiono da sole con qualunque contenuto.

   LA GRIGLIA DEL CONTENITORE E' A GRADINI, NON CONTINUA: misurata, la scheda
   bianca vale 696px sotto 992, 936 fino a 1199, 1116 fino a 1439, 1296 sopra.
   Quindi bastano due regimi, e ognuno cade in un intervallo di lettura sano:

     larghezza scheda   fascia utile   colonne   colonna   caratteri per riga
     696  (768-991)         659           1        659            79
     936  (992-1199)        896           2        430            51
     1116 (1200-1439)      1068           2        514            61
     1296 (>=1440)         1236           2        594            71

   Nessun valore sopra 85 e nessuno sotto 45: non c'e' larghezza di finestra
   in cui il testo diventi un nastro o un francobollo.

   PERCHE' GIUSTIFICATO E CON SILLABAZIONE.
   In colonna stretta la bandiera a destra lascia buchi vistosi e abbassa il
   numero di caratteri delle righe reali. La pagina dichiara lang="it-IT",
   quindi `hyphens: auto` sillaba in italiano e la giustificazione non apre
   fiumi di spazio. E' il motivo per cui i giornali compongono cosi'.
   ═══════════════════════════════════════════════════════════════════════ */

.ptabs__prose p,
.ptabs__prose ul,
.ptabs__prose ol {
  line-height: 1.65;
}
.ptabs__prose img {
  max-width: 100%;
  height: auto;
  border-radius: var(--evo-r-sm);
}
.ptabs__prose h2 {
  margin-block: 2.25rem .75rem;
  font-size: clamp(1.25rem, 1.05rem + .7vw, 1.5rem);
  color: var(--evo-text);
}
.ptabs__prose > h2:first-child,
.ptabs__prose > *:first-child > h2:first-child,
.ptabs__prose > *:first-child {
  margin-block-start: 0;
}

/* ── Le due colonne di lettura ─────────────────────────────────────────── */
/* Da 992px in su: sotto, la fascia utile e' 659px e una colonna sola e' gia'
   la misura giusta. La regola NON e' legata a .ptabs--tabs: senza JavaScript
   i pannelli restano tutti aperti e devono impaginarsi comunque bene. */
@media (min-width: 992px) {
  .ptabs__panel--testo .ptabs__prose {
    column-count: 2;
    column-gap: clamp(2.25rem, 1rem + 1.4vw, 3rem);
    column-rule: 1px solid var(--evo-line);
    text-align: justify;
    text-justify: inter-word;
    hyphens: auto;
    orphans: 3;
    widows: 3;
  }
  /* Un titolo non si spezza mai a meta' e non resta appeso in fondo alla
     colonna senza il testo che introduce. */
  .ptabs__panel--testo .ptabs__prose h2,
  .ptabs__panel--testo .ptabs__prose h3,
  .ptabs__panel--testo .ptabs__prose h4,
  .ptabs__panel--testo .ptabs__prose h5 {
    break-inside: avoid;
    break-after: avoid-column;
    text-align: start;
    hyphens: manual;
  }
  /* Un titolo in testa a una colonna non deve portarsi dietro il margine
     superiore: sarebbe un buco bianco proprio dove la colonna comincia. */
  .ptabs__panel--testo .ptabs__prose h2 {
    margin-block-start: 2.25rem;
  }
  .ptabs__panel--testo .ptabs__prose figure,
  .ptabs__panel--testo .ptabs__prose blockquote,
  .ptabs__panel--testo .ptabs__prose p.prod-img,
  .ptabs__panel--testo .ptabs__prose p.ev-figura {
    break-inside: avoid;
  }
  /* Una tabella dentro il testo redazionale non si divide in colonne: prende
     tutta la fascia e il testo riprende sotto. */
  .ptabs__panel--testo .ptabs__prose table,
  .ptabs__panel--testo .ptabs__prose .table-responsive {
    column-span: all;
    margin-block: 1.5rem;
  }
}

/* ── L'immagine incorporata ────────────────────────────────────────────── */
/* PRIMA: la <figure> stava da sola al centro della fascia, con il vuoto
   intorno, perche' il generatore delle schede le scrive addosso
   `style="max-width:420px"` e un attributo style vince su qualunque foglio.
   ORA riempie esattamente la colonna in cui cade, quindi ha del testo
   accanto (l'altra colonna) e nessun bianco ai suoi lati.
   Il !important e' l'unico modo per battere l'attributo style senza
   riscrivere le descrizioni nel database (vietato) e senza spostare la foto
   con JavaScript a pagina gia' disegnata.
   Nessun ingrandimento: il file servito da PrestaShop (large_default) e'
   800x800, la colonna piu' larga e' 594px. */
.ptabs__prose figure {
  display: block;
  width: 100%;
  max-width: 100% !important;
  margin-inline: 0 !important;
}
.ptabs__prose figure img,
.ptabs__prose p.prod-img img,
.ptabs__prose p.ev-figura img {
  width: 100%;
  max-width: 100%;
  height: auto;
}
.ptabs__prose figure figcaption {
  margin-block-start: .5rem;
  font-size: .875rem;
  line-height: 1.5;
  color: var(--evo-muted);
  text-align: start;
}
.ptabs__prose p.prod-img,
.ptabs__prose p.ev-figura {
  max-width: 100%;
  margin-inline: 0;
}

/* ── Tabelle ───────────────────────────────────────────────────────────── */
.ptabs__prose table,
.ptabs__prose .table-responsive {
  max-width: none;
  width: 100%;
  margin-inline: 0;
}
.ptabs__prose table td,
.ptabs__prose table th {
  word-break: break-word;
}
.ptabs__prose table th[scope="row"] {
  font-weight: 600;
  color: var(--evo-text);
}

/* ════════════════════════════════════════════════════════════════════════
   LA TABELLA DELLE SPECIFICHE — COPPIE ETICHETTA/VALORE SU PIU' COLONNE

   Il problema misurato: la scheda della Pard Pantera ha 55 righe di
   specifiche. In una sola colonna di coppie diventa un nastro alto oltre due
   metri, e accanto — qualunque cosa ci si metta — resta una fascia bianca
   lunga uguale. Le coppie sono corte: "Peso | 950 g". Impaginarle su piu'
   colonne e' l'uso naturale della larghezza.

   PERCHE' `columns` E NON UNA GRIGLIA.
   Con column-width il browser impagina in verticale: si legge una colonna
   dall'alto in basso e poi si passa alla successiva, l'ordine del catalogo
   resta leggibile. Con una griglia l'ordine diventa a zig-zag orizzontale.
     fascia 1236 -> 3 colonne da 389    fascia 1068 -> 2 da 514
     fascia  896 -> 2 colonne da 434    fascia  659 -> 1 da 659

   PERCHE' NON SI PERDE L'ACCESSIBILITA'.
   Cambiare `display` a una tabella cancella la semantica di tabella in tutti
   i browser: lo screen reader smette di annunciare "riga 12 di 55, Peso:
   950 g". Per questo il template rimette i ruoli ARIA espliciti
   (table / rowgroup / row / rowheader / cell) prima di stampare l'HTML, e
   solo alle tabelle che sono davvero elenchi di coppie: niente <thead> e
   nessuna riga con due <td>. Le tabelle di confronto restano tabelle vere.
   ═══════════════════════════════════════════════════════════════════════ */
.ptabs__prose table[data-evox-coppie] {
  display: block;
  width: 100%;
  border: 0;
  border-collapse: separate;
  border-spacing: 0;
  margin-block: 0 1rem;
}
.ptabs__prose table[data-evox-coppie] > tbody {
  display: block;
  column-width: 24rem;
  column-gap: clamp(1.75rem, .75rem + 1.2vw, 2.75rem);
  column-rule: 1px solid var(--evo-line);
}
.ptabs__prose table[data-evox-coppie] > tbody > tr {
  display: flex;
  gap: 1rem;
  align-items: baseline;
  break-inside: avoid;
  padding-block: .6rem;
  border-block-end: 1px solid var(--evo-line);
}
.ptabs__prose table[data-evox-coppie] > tbody > tr > th,
.ptabs__prose table[data-evox-coppie] > tbody > tr > td {
  display: block;
  border: 0;
  padding: 0;
  background: none;
  box-shadow: none;      /* le righe zebrate di Bootstrap dipingono con una
                            ombra interna: qui spezzerebbe la riga in due */
  text-align: start;
  hyphens: none;
}
.ptabs__prose table[data-evox-coppie] > tbody > tr > th {
  flex: 0 0 46%;
  width: auto;
  font-weight: 600;
  color: var(--evo-muted);
  font-size: .9375rem;
  line-height: 1.4;
}
.ptabs__prose table[data-evox-coppie] > tbody > tr > td {
  flex: 1 1 0;
  min-width: 0;
  color: var(--evo-text);
  line-height: 1.4;
}
/* ── Le note sotto la tabella ──────────────────────────────────────────── */
/* Sono le uniche righe del pannello "Scheda tecnica" che non stanno dentro
   una cella. Lasciate libere prendevano tutta la fascia: misurate 155
   caratteri su una riga sola a 1920 (nota fonte dati della Athlon Midas) e
   128 sulla nota di confronto della Hypershell X Ultra. Una nota non si
   impagina su due colonne — sono due righe — quindi qui il limite di lettura
   e' quello giusto: il testo lungo resta sotto gli 85 caratteri e la tabella
   sopra continua a occupare tutta la fascia.
   Le celle della tabella non c'entrano: hanno gia' la loro colonna. */
.ptabs__panel--scheda .ptabs__prose p {
  max-width: 42rem;
}
.ptabs__panel--scheda .ptabs__prose table p {
  max-width: none;
}
.ptabs__prose p.specs-source,
.ptabs__prose p.table-note {
  max-width: 36rem;      /* corpo .875rem: piu' piccolo, quindi piu'
                            caratteri a parita' di larghezza */
  margin-block-start: 1rem;
  font-size: .875rem;
  line-height: 1.55;
  color: var(--evo-muted);
}

/* ── Dettagli del prodotto dentro il pannello "Scheda tecnica" ─────────── */
/* Erano un elenco incolonnato largo al massimo 46rem: su una fascia da 1236
   ne restavano vuoti 500. Ora sono targhette affiancate che si dispongono da
   sole (auto-fit) e riempiono la riga. */
.product-details {
  margin-block-start: 2.25rem;
  max-width: none;
}
.product-details__title {
  font-size: clamp(1.25rem, 1.05rem + .7vw, 1.5rem);
  margin-block-end: .9rem;
}
.ptabs__panel .details__list {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr));
  gap: .75rem;
  margin-block-end: 0;
  padding: 0;
  background: none;
  border: 0;
  border-radius: 0;
  overflow: visible;
  list-style: none;
}
.ptabs__panel .details__item {
  display: block;
  background-color: var(--evo-bg);
  border: 1px solid var(--evo-line);
  border-radius: var(--evo-r-sm);
  padding: .85rem 1rem;
}
.ptabs__panel .details__left,
.ptabs__panel .details__right {
  width: auto;
  max-width: none;
}
.ptabs__panel .details__title {
  display: block;
  font-size: .75rem;
  font-weight: 600;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--evo-muted);
  margin-block-end: .3rem;
}
.ptabs__panel .details__right {
  font-weight: 600;
  color: var(--evo-text);
  line-height: 1.4;
}
.ptabs__panel .details__manufacturer-logo {
  max-height: 2.5rem;
  width: auto;
}

/* ── Allegati ──────────────────────────────────────────────────────────── */
.ptabs__panel .product__attachments {
  display: grid;
  gap: .75rem;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 21rem), 1fr));
}
.ptabs__panel .attachment {
  position: relative;
  background-color: var(--evo-bg);
  border: 1px solid var(--evo-line);
  border-radius: var(--evo-r-sm);
  padding: 1rem 1.15rem;
  transition: border-color .2s var(--evo-ease);
}
.ptabs__panel .attachment:hover {
  border-color: var(--evo-action);
}
.ptabs__panel .attachment__name {
  font-weight: 600;
  margin-block-end: .25rem;
}
.ptabs__panel .attachment__description {
  color: var(--evo-muted);
  font-size: .875rem;
  margin-block-end: .5rem;
}
.ptabs__panel .attachment__link {
  display: inline-flex;
  align-items: center;
  gap: .35rem;
  font-weight: 600;
  color: var(--evo-action);
}
.ptabs__panel .attachment__link .material-icons {
  font-size: 20px;
}

/* ── Recensioni ────────────────────────────────────────────────────────── */
/* Con zero commenti il pannello conteneva una riga di testo larga 156px in
   mezzo a 1236 di bianco. Il contenuto e' poco per davvero, ma non c'e'
   motivo perche' sia anche stretto: intestazione con filo di chiusura e
   avviso in un riquadro, entrambi a tutta fascia. */
.ptabs__panel .product-comments-wrapper {
  width: 100%;
}
.ptabs__panel #product-comments-list-header {
  display: block;
  width: 100%;
  border-block-end: 1px solid var(--evo-line);
  padding-block-end: .75rem;
  margin-block-end: 1.25rem;
}
.ptabs__panel #product-comments-list-header .section-title {
  font-size: clamp(1.25rem, 1.05rem + .7vw, 1.5rem);
  margin: 0;
}
.ptabs__panel #empty-product-comment {
  display: block;
  width: 100%;
  background-color: var(--evo-bg);
  border: 1px solid var(--evo-line);
  border-radius: var(--evo-r-sm);
  padding: 1.15rem 1.25rem;
  color: var(--evo-muted);
}
.ptabs__panel #product-comments-list,
.ptabs__panel .product-comment-list-item,
.ptabs__panel #product-comments-list-footer {
  width: 100%;
}
.ptabs__panel #product-comments-list-footer {
  margin-block-start: 1.25rem;
}

/* ════════════════════════════════════════════════════════════════════════
   Sotto i 768px le linguette affiancate non ci stanno: diventano una
   fisarmonica. Il JavaScript sposta ogni etichetta davanti al proprio
   pannello e le cambia ruolo (da role="tab" a pulsante con aria-expanded);
   qui si fa solo la grafica. La prima sezione, Descrizione, resta aperta.
   ═══════════════════════════════════════════════════════════════════════ */
.ptabs--acc .ptabs__tablist {
  display: none;
}
.ptabs--acc .ptabs__panels {
  padding-inline: 1rem;
  padding-block: 0 .5rem;
}
/* L'intestazione di sezione creata dal JS: e' un <h2> vero (lo screen reader
   ci salta sopra con la navigazione per intestazioni) ma non deve portarsi
   dietro i margini e il corpo tipografico di un titolo. */
.ptabs__acc-head {
  margin: 0;
  padding: 0;
  font: inherit;
  line-height: inherit;
  letter-spacing: normal;
}
.ptabs--acc .ptabs__acc-head + .ptabs__acc-head .ptabs__tab,
.ptabs--acc .ptabs__panel + .ptabs__acc-head .ptabs__tab {
  border-block-start: 1px solid var(--evo-line);
}
.ptabs--acc .ptabs__tab {
  position: static;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  width: 100%;
  margin: 0;
  padding: 1.15rem .25rem;
  text-align: start;
  font-size: 1.0625rem;
  color: var(--evo-text);
  background-color: transparent;
  border: 0;
  border-radius: 0;
}
.ptabs--acc .ptabs__tab::before {
  display: none;
}
.ptabs--acc .ptabs__tab:hover {
  background-color: transparent;
  color: var(--evo-action);
}
.ptabs--acc .ptabs__tab[aria-expanded="true"] {
  color: var(--evo-action);
}
.ptabs--acc .ptabs__tab:focus-visible {
  outline-offset: -2px;
}
/* Freccia: chiusa punta in basso, aperta punta in alto. */
.ptabs--acc .ptabs__tab::after {
  content: "";
  flex: 0 0 auto;
  width: .55rem;
  height: .55rem;
  border-inline-end: 2px solid currentColor;
  border-block-end: 2px solid currentColor;
  transform: rotate(45deg) translate(-2px, -2px);
  transition: transform .24s var(--evo-ease);
}
.ptabs--acc .ptabs__tab[aria-expanded="true"]::after {
  transform: rotate(-135deg) translate(-2px, -2px);
}
.ptabs--acc .ptabs__panel {
  padding-block: .25rem 1.5rem;
}
/* In fisarmonica il testo e' gia' a filo dei due bordi: le colonne restano
   una sola (la regola che le crea parte da 992px) e non c'e' niente da
   riallineare. Qui si toglie solo la giustificazione, che su una colonna da
   332px aprirebbe buchi fra le parole. */
.ptabs--acc .ptabs__prose {
  columns: auto;
  text-align: start;
}

@media (max-width: 767.98px) {
  .ptabs {
    margin-block-start: 1.5rem;
  }
  /* Telefono: una colonna sola di coppie, niente scorrimento laterale della
     pagina. Etichetta sopra il valore, cosi' i valori lunghi non spingono. */
  .ptabs__prose table[data-evox-coppie] > tbody { column-width: auto; column-count: 1; }
  .ptabs__prose table[data-evox-coppie] > tbody > tr { display: block; }
  .ptabs__prose table[data-evox-coppie] > tbody > tr > th { margin-block-end: .15rem; }
  /* Tabelle di confronto (non a coppie): restano tabelle, le colonne si
     stringono invece di far scorrere la pagina. */
  .ptabs__prose table:not([data-evox-coppie]) th[scope="row"] { width: 45%; }
  .ptabs__prose table:not([data-evox-coppie]) td,
  .ptabs__prose table:not([data-evox-coppie]) th { padding: .5rem .4rem; font-size: .9375rem; }
  .ptabs__panel .details__item { padding: .75rem; }
}

/* Chi ha chiesto meno animazioni non ne vede nessuna. */
@media (prefers-reduced-motion: reduce) {
  .ptabs__tab,
  .ptabs__tab::before,
  .ptabs__tab::after {
    transition: none;
  }
}

/* ═══ LOGO DELLA MARCA nel riquadro "Dettagli del prodotto" ═══════════════
   Il logo era sorgente 98x98 rimpicciolita a 40px: dentro quel quadrato il
   marchio occupava una decina di pixel. Ora la sorgente e' 452px e il box e'
   rettangolare con object-fit, cosi' il segno grafico riempie la larghezza
   invece di stare letterboxato dentro un quadrato.
   Il nome scritto accanto serve a chi il logo non lo riconosce, e ai motori. */
.ptabs__panel .details__brand-link,
.details__brand-link {
  display: inline-flex;
  align-items: center;
  gap: .85rem;
  text-decoration: none;
  padding: .4rem .75rem .4rem .4rem;
  border: 1px solid var(--evo-line, #E4DFD6);
  border-radius: .6rem;
  background: #FFF;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.details__brand-link:hover,
.details__brand-link:focus-visible {
  border-color: var(--evo-accent, #B0540E);
  box-shadow: 0 2px 10px rgb(0 0 0 / .07);
}
.ptabs__panel .details__manufacturer-logo,
.details__manufacturer-logo {
  height: 3rem;
  width: 7.5rem;
  max-height: none;
  object-fit: contain;
  object-position: center;
  flex: 0 0 auto;
}
.details__brand-name {
  font-weight: 700;
  font-size: .98rem;
  letter-spacing: .01em;
  color: var(--evo-text, #1C2320);
}
@media (max-width: 480px) {
  .details__manufacturer-logo { height: 2.4rem; width: 6rem; }
}

/* ═══ I NUMERI, SPIEGATI · LE VERSIONI · LE DOMANDE ══════════════════════
   Marcatura prodotta da deploy/numeri-spiegati.php. Ogni parametro della
   scheda tecnica ha significato, conseguenza, vantaggio e svantaggio: senza
   una griglia il blocco diventa un muro di paragrafi lungo due schermate. */

.cec-parametri {
  display: grid;
  gap: 1rem;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 22rem), 1fr));
  margin-block: 1.25rem 2rem;
}
.cec-parametro {
  border: 1px solid var(--evo-line, #E4DFD6);
  border-radius: .75rem;
  background: #FFF;
  padding: 1.1rem 1.25rem;
}
.cec-parametro h3 {
  font-size: 1.02rem;
  font-weight: 700;
  margin: 0 0 .5rem;
  color: var(--evo-text, #1C2320);
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: .5rem;
}
.cec-parametro__valore {
  font-weight: 600;
  font-size: .9rem;
  color: var(--evo-accent, #B0540E);
  background: #FBF3EC;
  border-radius: .35rem;
  padding: .1rem .45rem;
}
.cec-parametro p { margin: 0 0 .55rem; line-height: 1.55; }

/* Il compromesso reso visibile: vantaggio e svantaggio affiancati, mai uno
   solo dei due. Un parametro senza svantaggio e' un parametro non spiegato. */
.cec-bilancia {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: .3rem .7rem;
  margin: .8rem 0 0;
  padding-top: .8rem;
  border-top: 1px dashed var(--evo-line, #E4DFD6);
  font-size: .92rem;
}
.cec-bilancia dt {
  font-weight: 700;
  font-size: .72rem;
  letter-spacing: .06em;
  text-transform: uppercase;
  white-space: nowrap;
  padding-top: .15rem;
}
.cec-bilancia dt:first-of-type { color: #2F6B42; }
.cec-bilancia dt:last-of-type  { color: #9A4A17; }
.cec-bilancia dd { margin: 0; line-height: 1.5; }

/* ── Le versioni a confronto ── */
.cec-versioni {
  display: grid;
  gap: 1rem;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr));
  margin-block: 1rem 2rem;
}
.cec-versione {
  border: 1px solid var(--evo-line, #E4DFD6);
  border-left: 3px solid var(--evo-accent, #B0540E);
  border-radius: .6rem;
  background: var(--evo-raised, #F8F6F2);
  padding: 1.1rem 1.25rem;
}
.cec-versione h3 { font-size: 1.05rem; font-weight: 700; margin: 0 0 .55rem; }
.cec-versione p  { margin: 0 0 .5rem; line-height: 1.55; }

/* ── Domande frequenti ──
   Niente accordion: le risposte devono essere nel testo reso, leggibili dai
   motori generativi senza che nessuno clicchi nulla. */
.cec-faq { margin-block: 1rem 2rem; }
.cec-faq__voce {
  border-block-end: 1px solid var(--evo-line, #E4DFD6);
  padding-block: 1rem;
}
.cec-faq__voce:last-child { border-block-end: 0; }
.cec-faq__voce h3 {
  font-size: 1.05rem;
  font-weight: 700;
  margin: 0 0 .45rem;
  color: var(--evo-text, #1C2320);
}
.cec-faq__voce p { margin: 0; line-height: 1.6; }

@media (max-width: 560px) {
  .cec-parametro, .cec-versione { padding: .95rem 1rem; }
  .cec-bilancia { grid-template-columns: 1fr; gap: .1rem .5rem; }
  .cec-bilancia dt { padding-top: .5rem; }
}

/* Il pannello scheda impone p{max-width:42rem}: le risposte si fermavano a
   672px dentro un contenitore da 1245px, lasciando mezzo schermo bianco.
   Non si alza il limite fino a righe da 130 caratteri — si usa lo spazio
   mettendo le domande su due colonne, come fa il pannello della descrizione. */
.ptabs__panel .cec-faq__voce p,
.ptabs__panel .cec-parametro p,
.ptabs__panel .cec-versione p { max-width: none; }

@media (min-width: 992px) {
  .cec-faq {
    column-count: 2;
    column-gap: clamp(2.25rem, 1rem + 1.4vw, 3rem);
    column-rule: 1px solid var(--evo-line, #E4DFD6);
  }
  .cec-faq__voce { break-inside: avoid; }
}

/* ═══ PAGINA MARCHIO ══════════════════════════════════════════════════════
   Marcatura prodotta da deploy/marchi.php. Il logo qui non e' decorazione:
   chi cerca il nome del marchio si aspetta di riconoscerlo prima di leggere. */
.marchio__testata {
  display: flex;
  align-items: flex-start;
  gap: 1.5rem;
  padding: 1.4rem 1.5rem;
  margin-block-end: 1.75rem;
  border: 1px solid var(--evo-line, #E4DFD6);
  border-radius: .8rem;
  background: #FFF;
}
.marchio__logo {
  width: 8.5rem;
  height: 5.5rem;
  object-fit: contain;
  flex: 0 0 auto;
}
.marchio__sommario p {
  margin: 0;
  font-size: 1.06rem;
  line-height: 1.6;
  max-width: 46rem;
}

/* Punti forti e limiti affiancati: un marchio senza difetti e' pubblicita'. */
.marchio__bilancia {
  display: grid;
  gap: 1rem;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr));
  margin-block: 1rem 2rem;
}
.marchio__pro, .marchio__contro {
  border: 1px solid var(--evo-line, #E4DFD6);
  border-radius: .7rem;
  padding: 1.1rem 1.25rem;
  background: var(--evo-raised, #F8F6F2);
}
.marchio__pro   { border-inline-start: 3px solid #2F6B42; }
.marchio__contro{ border-inline-start: 3px solid #9A4A17; }
.marchio__pro h3, .marchio__contro h3 {
  font-size: .78rem;
  letter-spacing: .06em;
  text-transform: uppercase;
  margin: 0 0 .7rem;
}
.marchio__pro h3    { color: #2F6B42; }
.marchio__contro h3 { color: #9A4A17; }
.marchio__pro ul, .marchio__contro ul { margin: 0; padding-inline-start: 1.1rem; }
.marchio__pro li, .marchio__contro li { margin-block-end: .5rem; line-height: 1.55; }

/* Quale prodotto fa per te: profilo a sinistra, indicazione a destra. */
.marchio__scelta {
  display: grid;
  grid-template-columns: minmax(9rem, 14rem) 1fr;
  gap: .6rem 1.5rem;
  margin-block: 1rem 2rem;
}
.marchio__scelta dt { font-weight: 700; line-height: 1.45; }
.marchio__scelta dd { margin: 0; line-height: 1.6; }

.marchio__fonti {
  margin-block: .75rem 1.5rem;
  padding-inline-start: 1.1rem;
  font-size: .93rem;
}
.marchio__fonti li { margin-block-end: .35rem; }
.marchio__nota {
  font-size: .93rem;
  color: var(--evo-muted, #5C6660);
  border-inline-start: 3px solid var(--evo-line, #E4DFD6);
  padding-inline-start: .9rem;
}

@media (max-width: 620px) {
  .marchio__testata { flex-direction: column; align-items: center; text-align: center; }
  .marchio__scelta  { grid-template-columns: 1fr; gap: .15rem .5rem; }
  .marchio__scelta dt { margin-block-start: .8rem; }
}

/* Intestazione della pagina marchio: il nome grande, il ruolo della pagina
   sotto in piccolo. */
.marchio__intestazione { margin-block-end: 1.25rem; }
.marchio__intestazione h1 { margin-block-end: .3rem; }
.marchio__occhiello {
  margin: 0;
  color: var(--evo-muted, #5C6660);
  font-size: 1rem;
}

/* ═══ INTESTAZIONE: logo e voci di menu sulla stessa linea ═════════════════
   Il logo rendeva a 35 px d'altezza pur avendo max-height 52: a limitarlo era
   la LARGHEZZA del contenitore, non l'altezza. Si impone l'altezza e si lascia
   libera la larghezza. La cornice dell'SVG e' stata stretta sul contenuto
   (versione 3), cosi' centrare l'immagine centra davvero la parola. */
.header__logo img,
#header .logo,
.header-bottom__h1 .navbar-brand img {
  height: 52px !important;
  max-height: none !important;
  width: auto !important;
  max-width: none !important;
  display: block;
}
.header-bottom__h1,
.header-bottom__h1 .navbar-brand {
  display: flex;
  align-items: center;
  margin-block: 0;
}
/* la riga che contiene logo, menu e ricerca allinea al centro verticale */
.header-bottom__h1 { align-self: center; }

@media (max-width: 991.98px) {
  .header__logo img, #header .logo, .header-bottom__h1 .navbar-brand img { height: 42px !important; }
}

/* ═══ CHIUSURA DI PAGINA ═══════════════════════════════════════════════════
   In fondo c'era solo una riga di partita IVA. Il marchio deve chiudere la
   pagina come la apre. */
.copyright {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .55rem;
  padding-block: 1.6rem;
  text-align: center;
}
.copyright__logo img { height: 40px; width: auto; opacity: .95; }
.copyright__logo:hover img { opacity: 1; }
.copyright__riga, .copyright__sede { margin: 0; font-size: .875rem; }
.copyright__sede { opacity: .8; }

/* ── Pagine istituzionali ── */
.cms-occhiello {
  font-size: 1.1rem;
  line-height: 1.6;
  padding-inline-start: .9rem;
  border-inline-start: 3px solid var(--evo-accent, #B0540E);
  margin-block-end: 1.75rem;
}
.cms-anagrafica { list-style: none; padding: 0; margin-block: .5rem 1.25rem; }
.cms-anagrafica li { margin-block-end: .35rem; }

/* Allineamento fra la parola del logo e le voci di menu.
   Prima avevo abbassato il logo di otto pixel: sbagliato due volte, perche'
   nascondeva la causa e faceva toccare al logo la barra arancione sotto.
   La causa e' il link del menu, che ha padding 20px sopra e 3px sotto: il
   testo cade diciassette pixel piu' in basso di dove starebbe se il riquadro
   fosse simmetrico. Si pareggia il padding, mantenendo la stessa altezza
   complessiva della voce (23px in tutto), e le due scritte tornano sulla
   stessa linea senza spostare niente altro. */
.ps-mainmenu__tree-link {
  padding-block: 11.5px !important;
}

/* Il contrassegno di provenienza nella tabella tecnica: un pallino discreto,
   non una frase. La legenda sta nella nota sotto la tabella. */
.cec-fonte-foto {
  color: var(--evo-accent, #B0540E);
  font-size: .55em;
  vertical-align: super;
  line-height: 1;
  cursor: help;
}

/* ═══ SPUNTA DI CONSENSO (psgdpr) ══════════════════════════════════════════
   Attivandola nel piede ha ereditato la tipografia del titolo newsletter e
   usciva grande quanto un'intestazione. Un consenso deve essere leggibile e
   sobrio: se grida, sembra che si stia chiedendo molto piu' di quello che si
   chiede. */
/* Il modulo non usa un id proprio: il consenso e' un <span class="form-check">
   che contiene l'input psgdpr_consent_checkbox. Si aggancia da li'. */
.form-check:has(input[name="psgdpr_consent_checkbox"]),
.form-check:has(input[name="psgdpr_consent_checkbox"]) ~ p,
#gdpr_consent,
[id^="psgdpr_consent_message"] {
  font-size: .82rem !important;
  font-weight: 400 !important;
  line-height: 1.5;
  letter-spacing: 0;
  text-transform: none;
  opacity: .9;
  margin: 0;
}
.form-check:has(input[name="psgdpr_consent_checkbox"]),
#gdpr_consent .form-check,
[id^="psgdpr_consent_message"] .form-check {
  display: flex;
  align-items: flex-start;
  gap: .55rem;
  margin-block: .7rem 0;
}
input[name="psgdpr_consent_checkbox"],
#gdpr_consent input[type="checkbox"],
[id^="psgdpr_consent_message"] input[type="checkbox"] {
  flex: 0 0 auto;
  margin-block-start: .18rem;
  width: 1rem;
  height: 1rem;
  accent-color: var(--evo-accent, #B0540E);
}
label[for^="psgdpr_consent_checkbox"],
#gdpr_consent label,
[id^="psgdpr_consent_message"] label { font-size: .82rem; font-weight: 400; line-height: 1.5; }
#gdpr_consent a, [id^="psgdpr_consent_message"] a { text-decoration: underline; }

/* nel piede, su fondo scuro, il testo deve restare leggibile senza urlare */
.footer label[for^="psgdpr_consent_checkbox"],
.footer #gdpr_consent, .footer [id^="psgdpr_consent_message"] { color: rgb(255 255 255 / .72); }

/* ═══ CAROSELLO DELLA HOME ═════════════════════════════════════════════════
   La didascalia era un rettangolo bianco appoggiato sopra la fotografia: due
   elementi che non si parlano, e il testo che sembra un adesivo. Qui il testo
   entra NELLA foto, su una sfumatura che nasce dal bordo inferiore e sale:
   si legge sempre, qualunque sia l'immagine sotto, e non taglia il soggetto.
   Il marchio compare in alto a destra, discreto: firma la fotografia senza
   contendere l'attenzione al titolo. */
.ps-imageslider__figure {
  position: relative;
  margin: 0;
  overflow: hidden;
  border-radius: var(--evo-r-md, .9rem);
}
.ps-imageslider__figure img {
  display: block;
  width: 100%;
  height: auto;
  object-fit: cover;
}

/* la firma: il logo del negozio sulla fotografia */
.ps-imageslider__figure::after {
  content: "";
  position: absolute;
  inset-block-start: clamp(1rem, 2.4vw, 2rem);
  inset-inline-end: clamp(1rem, 2.4vw, 2.25rem);
  width: clamp(120px, 14vw, 210px);
  aspect-ratio: 292 / 56;
  background: url("/img/evo-outdoor-v3.svg") no-repeat center / contain;
  opacity: .92;
  filter: drop-shadow(0 2px 10px rgb(0 0 0 / .55));
  pointer-events: none;
}

.ps-imageslider__figcaption.carousel-caption {
  position: absolute;
  inset-inline: 0;
  inset-block-end: 0;
  top: auto;
  width: 100%;
  max-width: none;
  text-align: start;
  color: #FFF;
  background: linear-gradient(to top,
              rgb(12 16 14 / .88) 0%,
              rgb(12 16 14 / .70) 38%,
              rgb(12 16 14 / .28) 68%,
              rgb(12 16 14 / 0) 100%);
  padding: clamp(3rem, 9vw, 6rem) clamp(1.25rem, 4vw, 3.25rem) clamp(1.5rem, 3.5vw, 2.75rem);
  border-radius: 0;
}
.ps-imageslider__figcaption h2 {
  color: #FFF;
  margin: 0 0 .55rem;
  font-size: clamp(1.6rem, 1rem + 2.6vw, 3.1rem);
  line-height: 1.05;
  letter-spacing: -.01em;
  text-shadow: 0 2px 18px rgb(0 0 0 / .45);
  max-width: 22ch;
}
.ps-imageslider__figcaption p {
  color: rgb(255 255 255 / .92);
  margin: 0;
  font-size: clamp(.95rem, .85rem + .35vw, 1.15rem);
  line-height: 1.5;
  max-width: 46ch;
  text-shadow: 0 1px 12px rgb(0 0 0 / .5);
}
/* l'invito a proseguire: il carosello e' cliccabile ma non lo diceva */
.ps-imageslider__figcaption > div::after {
  content: "Vedi la selezione →";
  display: inline-block;
  margin-block-start: 1rem;
  padding: .5rem 1.1rem;
  border: 1px solid rgb(255 255 255 / .55);
  border-radius: 999px;
  font-size: .9rem;
  font-weight: 600;
  color: #FFF;
  transition: background-color .18s ease, border-color .18s ease;
}
.ps-imageslider__link:hover .ps-imageslider__figcaption > div::after,
.ps-imageslider__link:focus-visible .ps-imageslider__figcaption > div::after {
  background: var(--evo-accent, #B0540E);
  border-color: var(--evo-accent, #B0540E);
}

@media (max-width: 575.98px) {
  .ps-imageslider__figure::after { width: 104px; inset-block-start: .75rem; inset-inline-end: .75rem; }
  .ps-imageslider__figcaption p { display: none; }
  .ps-imageslider__figcaption > div::after { margin-block-start: .6rem; padding: .4rem .85rem; font-size: .82rem; }
}

/* La regola sopra perdeva contro quella del tema, che tiene lo sfondo bianco
   al 93%: risultato peggiore del punto di partenza, testo chiaro su fondo
   chiaro. Qui si alza la specificita' e si dichiara vincente cio' che deve
   esserlo. Non e' eleganza, e' necessita': il tema definisce lo stesso
   selettore piu' avanti nel foglio. */
.ps-imageslider .carousel-item .ps-imageslider__figcaption.carousel-caption {
  background-color: transparent !important;
  background-image: linear-gradient(to top,
              rgb(12 16 14 / .90) 0%,
              rgb(12 16 14 / .72) 38%,
              rgb(12 16 14 / .30) 68%,
              rgb(12 16 14 / 0) 100%) !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  color: #FFF !important;
  inset-inline: 0 !important;
  inset-block-end: 0 !important;
  top: auto !important;
  width: 100% !important;
  max-width: none !important;
  text-align: start !important;
}
.ps-imageslider .carousel-item .ps-imageslider__figcaption h2,
.ps-imageslider .carousel-item .ps-imageslider__figcaption p,
.ps-imageslider .carousel-item .ps-imageslider__figcaption div { color: #FFF !important; }
.ps-imageslider .carousel-item .ps-imageslider__figcaption p { color: rgb(255 255 255 / .92) !important; }

/* Il carosello e' a tutta larghezza, il resto della pagina no: il titolo
   partiva dal bordo dello schermo mentre "Ottica, visione termica..." qui
   sotto comincia dove comincia il contenitore. Due allineamenti diversi a
   distanza di pochi pixel si notano. Qui la didascalia rientra sulla stessa
   colonna del contenuto, restando a tutta larghezza come sfondo. */
.ps-imageslider .carousel-item .ps-imageslider__figcaption.carousel-caption {
  padding-inline: max(1.25rem, calc((100% - 1320px) / 2)) !important;
}

/* Le frecce stavano a meta' altezza sui due lati e quella di sinistra cadeva
   esattamente sulla prima lettera del titolo. Si spostano in basso a destra,
   in coppia, dove non c'e' testo: restano raggiungibili e smettono di
   coprire la parola piu' importante della slide. */
.ps-imageslider .carousel-control-prev,
.ps-imageslider .carousel-control-next {
  top: auto !important;
  bottom: clamp(1rem, 2.5vw, 1.75rem) !important;
  width: auto !important;
  opacity: 1;
}
.ps-imageslider .carousel-control-prev { left: auto !important; right: clamp(4.5rem, 7vw, 6rem) !important; }
.ps-imageslider .carousel-control-next { right: clamp(1rem, 2.5vw, 1.75rem) !important; }

@media (max-width: 575.98px) {
  .ps-imageslider .carousel-control-prev { right: 3.75rem !important; }
  .ps-imageslider .carousel-control-next { right: .75rem !important; }
}

/* La sfumatura si tagliava con una riga netta a meta' fotografia: il riquadro
   della didascalia non arrivava al bordo inferiore, cosi' il punto piu' scuro
   del gradiente finiva in mezzo all'immagine e creava una fascia. Si ancora
   il riquadro al fondo con la proprieta' fisica (bottom) oltre a quella
   logica, e si allunga la sfumatura perche' salga piu' dolcemente. */
.ps-imageslider .carousel-item .ps-imageslider__figcaption.carousel-caption {
  bottom: 0 !important;
  left: 0 !important;
  right: 0 !important;
  padding-block-start: clamp(4rem, 12vw, 9rem) !important;
  background-image: linear-gradient(to top,
              rgb(12 16 14 / .92) 0%,
              rgb(12 16 14 / .86) 22%,
              rgb(12 16 14 / .62) 48%,
              rgb(12 16 14 / .28) 74%,
              rgb(12 16 14 / .08) 90%,
              rgb(12 16 14 / 0) 100%) !important;
}

/* La fascia restava a meta' foto: il riquadro era alto giusto ma spostato in
   alto da una trasformazione del tema (translateY), che sposta l'elemento
   DOPO che il posizionamento e' stato calcolato — per questo bottom:0 non
   bastava. Si annulla la trasformazione. */
.ps-imageslider .carousel-item .ps-imageslider__figcaption.carousel-caption {
  transform: none !important;
  top: auto !important;
  height: auto !important;
  margin: 0 !important;
}

/* ═══ INDICE DELLE GUIDE ═══════════════════════════════════════════════════
   Era un elenco puntato di sessanta righe: nessuna immagine, nessun modo di
   capire se una guida risponde alla domanda che uno ha in testa senza aprirla.
   Qui ogni voce e' una scheda con la stessa foto che trovera' dentro. */
.guide-famiglia__intro {
  max-width: 62ch;
  margin: -.35rem 0 1.1rem;
  color: var(--evo-muted, #5C6660);
  line-height: 1.55;
}
.guide-griglia {
  display: grid;
  gap: .9rem;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 20rem), 1fr));
  margin-block-end: 2.5rem;
}
.guida-scheda {
  display: flex;
  align-items: center;
  gap: .9rem;
  padding: .7rem .9rem .7rem .7rem;
  border: 1px solid var(--evo-line, #E4DFD6);
  border-radius: .7rem;
  background: #FFF;
  text-decoration: none !important;
  color: inherit;
  transition: border-color .15s ease, box-shadow .15s ease, transform .15s ease;
}
.guida-scheda:hover, .guida-scheda:focus-visible {
  border-color: var(--evo-accent, #B0540E);
  box-shadow: 0 3px 14px rgb(0 0 0 / .08);
  transform: translateY(-1px);
}
.guida-scheda__foto {
  flex: 0 0 auto;
  width: 4.5rem;
  height: 4.5rem;
  border-radius: .5rem;
  background: var(--evo-raised, #F8F6F2);
  display: grid;
  place-items: center;
  overflow: hidden;
}
.guida-scheda__foto img { width: 100%; height: 100%; object-fit: contain; mix-blend-mode: multiply; }
.guida-scheda__foto--vuota { background: repeating-linear-gradient(45deg, #F3EFE8 0 6px, #EDE8DF 6px 12px); }
.guida-scheda__testo { display: flex; flex-direction: column; gap: .2rem; min-width: 0; }
.guida-scheda__titolo {
  font-weight: 700;
  font-size: .97rem;
  line-height: 1.3;
  color: var(--evo-text, #1C2320);
}
.guida-scheda__occhiello {
  font-size: .84rem;
  line-height: 1.45;
  color: var(--evo-muted, #5C6660);
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* ═══ PAGINE GUIDA ═════════════════════════════════════════════════════════
   La foto stava al centro, larga quanto il testo, con mezzo schermo vuoto
   sopra e sotto: il lettore doveva scavalcarla per continuare a leggere.
   Ora affianca il testo — la prima a destra della definizione, la seconda a
   sinistra della lettura dei valori — e il testo le scorre accanto. */
.guida__foto {
  margin: .3rem 0 1.25rem;
  max-width: 19rem;
  background: var(--evo-raised, #F8F6F2);
  border: 1px solid var(--evo-line, #E4DFD6);
  border-radius: .7rem;
  padding: .8rem;
}
.guida__foto img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 1 / 1;
  object-fit: contain;
  mix-blend-mode: multiply;
}
.guida__foto figcaption {
  font-size: .8rem;
  line-height: 1.4;
  color: var(--evo-muted, #5C6660);
  margin-block-start: .55rem;
}

@media (min-width: 768px) {
  .guida__foto--destra   { float: inline-end;   margin-inline-start: 1.75rem; }
  .guida__foto--sinistra { float: inline-start; margin-inline-end: 1.75rem; margin-block-start: 1.25rem; }
  /* i titoli non devono infilarsi accanto a una foto a meta' altezza */
  .cms-page h2 { clear: none; }
  .guida__foto + h2 { clear: none; }
}
@media (max-width: 767.98px) {
  .guida__foto { float: none; max-width: 100%; margin-inline: auto; }
}
/* la definizione in apertura: piu' grande, e' la risposta che leggono i motori */
.guida__definizione {
  font-size: 1.08rem;
  line-height: 1.6;
  max-width: 62ch;
}
.guida__valori { display: grid; grid-template-columns: minmax(6rem, 11rem) 1fr; gap: .45rem 1.25rem; margin-block: 1rem 2rem; }
.guida__valori dt { font-weight: 700; }
.guida__valori dd { margin: 0; line-height: 1.55; }
.guida__legami li, .guida__errori li { margin-block-end: .6rem; line-height: 1.55; }

/* ═══ RITMO DELLE PAGINE DI TESTO ══════════════════════════════════════════
   Guide e pagine istituzionali erano un muro bianco dall'inizio alla fine:
   dieci sezioni tutte uguali, e l'occhio non trova un appiglio per capire
   dove finisce un discorso e ne comincia un altro. Ogni blocco che ha una
   funzione diversa prende un fondo diverso — non per decorazione, per far
   capire a colpo d'occhio che si sta cambiando tipo di informazione. */

/* la definizione in apertura: e' la risposta, si stacca dal resto */
.guida__definizione {
  background: linear-gradient(180deg, #FBF6F0 0%, #F8F6F2 100%);
  border-inline-start: 3px solid var(--evo-accent, #B0540E);
  border-radius: 0 .6rem .6rem 0;
  padding: 1.1rem 1.4rem;
  margin-block-end: 1.75rem;
}

/* come leggere i valori: una tabella di riferimento, fondo neutro */
.guida__valori {
  background: var(--evo-raised, #F8F6F2);
  border: 1px solid var(--evo-line, #E4DFD6);
  border-radius: .7rem;
  padding: 1.2rem 1.4rem;
}
.guida__valori dt { color: var(--evo-accent, #B0540E); }
.guida__valori dt + dd { padding-block-end: .35rem; }

/* i legami con gli altri parametri: e' la parte che porta altrove */
.guida__legami {
  list-style: none;
  padding: 1.1rem 1.4rem;
  margin-block: 1rem 2rem;
  background: #FFF;
  border: 1px solid var(--evo-line, #E4DFD6);
  border-radius: .7rem;
}
.guida__legami li { position: relative; padding-inline-start: 1.2rem; }
.guida__legami li::before {
  content: "→";
  position: absolute;
  inset-inline-start: 0;
  color: var(--evo-accent, #B0540E);
  font-weight: 700;
}

/* le convinzioni sbagliate: e' un avvertimento, si vede che lo e' */
.guida__errori {
  list-style: none;
  padding: 1.1rem 1.4rem;
  margin-block: 1rem 2rem;
  background: #FBF3EC;
  border: 1px solid #E8D5C2;
  border-inline-start: 3px solid #9A4A17;
  border-radius: 0 .7rem .7rem 0;
}
.guida__errori li { position: relative; padding-inline-start: 1.4rem; }
.guida__errori li::before {
  content: "✕";
  position: absolute;
  inset-inline-start: 0;
  color: #9A4A17;
  font-weight: 700;
}

/* i prodotti citati: un elenco di collegamenti, non un paragrafo */
.guida__prodotti {
  list-style: none;
  padding: 0;
  margin-block: 1rem 2rem;
  display: grid;
  gap: .5rem;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 22rem), 1fr));
}
.guida__prodotti li a {
  display: block;
  padding: .6rem .9rem;
  background: var(--evo-raised, #F8F6F2);
  border: 1px solid var(--evo-line, #E4DFD6);
  border-radius: .5rem;
  text-decoration: none !important;
  font-size: .93rem;
}
.guida__prodotti li a:hover { border-color: var(--evo-accent, #B0540E); background: #FFF; }

/* le domande frequenti chiudono la pagina su fondo pieno */
.cms-page .cec-faq,
#content .cec-faq {
  background: var(--evo-raised, #F8F6F2);
  border-radius: .8rem;
  padding: 1.25rem 1.5rem;
  margin-block: 1rem 2rem;
}
.cms-page .cec-faq__voce:last-child,
#content .cec-faq__voce:last-child { border-block-end: 0; padding-block-end: 0; }

/* i titoli di sezione respirano e si distinguono dal corpo */
.cms-page h2, #content .rich-text h2 {
  margin-block: 2.4rem .9rem;
  padding-block-end: .45rem;
  border-block-end: 1px solid var(--evo-line, #E4DFD6);
}

/* ═══ SOTTOCATEGORIE IN CIMA ALLE PAGINE DI ELENCO ═════════════════════════
   Erano pastiglie di solo testo mentre la colonna di sinistra mostrava le
   stesse categorie con la foto: due elenchi della stessa cosa, uno con le
   immagini e uno senza. Ora sono schede con miniatura, ordinate su griglia. */
.subcategory__list--with-images {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 15rem), 1fr));
  gap: .7rem;
  margin-block-end: 1.75rem;
}
.subcategory__link--with-image {
  display: flex;
  align-items: center;
  gap: .8rem;
  padding: .5rem .9rem .5rem .5rem;
  border: 1px solid var(--evo-line, #E4DFD6);
  border-radius: 999px;
  background: #FFF;
  text-decoration: none !important;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.subcategory__link--with-image:hover,
.subcategory__link--with-image:focus-visible {
  border-color: var(--evo-accent, #B0540E);
  box-shadow: 0 2px 10px rgb(0 0 0 / .07);
}
.subcategory__link--with-image picture { flex: 0 0 auto; line-height: 0; }
.subcategory__thumbnail {
  width: 2.6rem;
  height: 2.6rem;
  border-radius: 999px;
  object-fit: cover;
  background: var(--evo-raised, #F5F2EC);
}
.subcategory__link--with-image .subcategory__name {
  font-size: .94rem;
  font-weight: 600;
  line-height: 1.25;
  color: var(--evo-accent, #B0540E);
}

/* ═══ HOME COMMERCIALE ═════════════════════════════════════════════════════ */
.evo-home__apertura { max-width: 62ch; margin-block: 2rem 2.25rem; }
.evo-home__titolo { font-size: clamp(1.6rem, 1.1rem + 1.8vw, 2.4rem); line-height: 1.15; margin: 0 0 .7rem; }
.evo-home__sommario { font-size: 1.08rem; line-height: 1.6; color: var(--evo-text, #1C2320); margin: 0; }
.evo-home__h2 { font-size: clamp(1.3rem, 1rem + 1vw, 1.7rem); margin-block: 2.5rem 1.1rem; }

/* le ragioni per fidarsi: numero grande, fatto sotto */
.evo-ragioni {
  display: grid;
  gap: .9rem;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr));
  margin-block-end: 2.5rem;
}
.evo-ragione {
  background: #FFF;
  border: 1px solid var(--evo-line, #E4DFD6);
  border-radius: .8rem;
  padding: 1.1rem 1.2rem;
}
.evo-ragione__n {
  display: block;
  font-size: 2rem;
  font-weight: 800;
  line-height: 1;
  color: var(--evo-accent, #B0540E);
}
.evo-ragione__et {
  display: block;
  font-size: .78rem;
  font-weight: 700;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--evo-muted, #5C6660);
  margin-block: .35rem .6rem;
}
.evo-ragione p { margin: 0; font-size: .9rem; line-height: 1.5; }

/* le famiglie con la foto */
.evo-famiglie {
  display: grid;
  gap: .8rem;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 14rem), 1fr));
  margin-block-end: 2.5rem;
}
.evo-famiglia {
  display: flex;
  align-items: center;
  gap: .85rem;
  padding: .6rem .9rem .6rem .6rem;
  background: #FFF;
  border: 1px solid var(--evo-line, #E4DFD6);
  border-radius: .7rem;
  text-decoration: none !important;
  transition: border-color .15s ease, box-shadow .15s ease, transform .15s ease;
}
.evo-famiglia:hover { border-color: var(--evo-accent, #B0540E); box-shadow: 0 3px 14px rgb(0 0 0 / .08); transform: translateY(-1px); }
.evo-famiglia img { width: 3.2rem; height: 3.2rem; border-radius: .5rem; object-fit: cover; flex: 0 0 auto; }
.evo-famiglia__testo { display: flex; flex-direction: column; min-width: 0; }
.evo-famiglia__nome { font-weight: 700; font-size: .95rem; line-height: 1.25; color: var(--evo-text, #1C2320); }
.evo-famiglia__n { font-size: .82rem; color: var(--evo-muted, #5C6660); }

/* l'invito alla consulenza */
.evo-consulenza {
  display: grid;
  gap: 1.5rem;
  grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr);
  align-items: center;
  padding: 1.75rem 2rem;
  margin-block: 1rem 2.5rem;
  background: linear-gradient(135deg, #1F2724 0%, #2A342F 100%);
  border-radius: 1rem;
  color: #FFF;
}
.evo-consulenza h2 { color: #FFF; margin: 0 0 .6rem; font-size: clamp(1.3rem, 1rem + 1vw, 1.75rem); border: 0; padding: 0; }
.evo-consulenza p { margin: 0; color: rgb(255 255 255 / .86); line-height: 1.6; }
.evo-consulenza__azioni { display: flex; flex-direction: column; gap: .6rem; }
/* LO SFONDO VA SEMPRE DICHIARATO.
   Questa classe sta sia su <a> sia su <button>. Sull'ancora lo sfondo assente
   vuol dire trasparente e il testo bianco si legge sulla barra scura; sul
   bottone il browser ci mette il suo grigio chiaro di sistema, e il risultato
   e' testo bianco su grigio chiaro: il pulsante sparisce. Da qui "Salvalo come
   preventivo" e "Cambia richiesta" invisibili nella barra del preventivo.
   appearance:none toglie anche il rilievo di sistema su Safari/iOS. */
.evo-btn {
  display: inline-block;
  text-align: center;
  padding: .7rem 1.2rem;
  border-radius: 999px;
  border: 1px solid rgb(255 255 255 / .45);
  -webkit-appearance: none;
  appearance: none;
  background: rgb(255 255 255 / .10);
  color: #FFF !important;
  text-decoration: none !important;
  font-weight: 600;
  font-size: .95rem;
  transition: background-color .15s ease, border-color .15s ease;
}
.evo-btn:hover { background: rgb(255 255 255 / .22); }
.evo-btn:focus-visible { outline: 2px solid #FFF; outline-offset: 2px; }
.evo-btn--pieno { background: var(--evo-accent, #B0540E); border-color: var(--evo-accent, #B0540E); }
.evo-btn--pieno:hover { background: #C25E12; }
/* "nudo" = solo testo sottolineato: niente pastiglia, quindi niente sfondo.
   Va riportato a trasparente perche' ora la base uno sfondo ce l'ha. */
.evo-btn--nudo { background: transparent; border-color: transparent; text-decoration: underline !important; }
.evo-btn--nudo:hover { background: rgb(255 255 255 / .12); }
@media (max-width: 767.98px) { .evo-consulenza { grid-template-columns: 1fr; padding: 1.3rem 1.2rem; } }

/* i prodotti citati nelle guide: schede con foto, non pastiglie di testo */
.guida__prodotti {
  display: grid;
  gap: .7rem;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 16rem), 1fr));
  margin-block: 1rem 2rem;
}
.guida-prodotto {
  display: flex;
  align-items: center;
  gap: .8rem;
  padding: .5rem .9rem .5rem .5rem;
  background: #FFF;
  border: 1px solid var(--evo-line, #E4DFD6);
  border-radius: .6rem;
  text-decoration: none !important;
}
.guida-prodotto:hover { border-color: var(--evo-accent, #B0540E); }
.guida-prodotto__foto { flex: 0 0 auto; width: 3.4rem; height: 3.4rem; display: grid; place-items: center; background: var(--evo-raised, #F5F2EC); border-radius: .45rem; overflow: hidden; }
.guida-prodotto__foto img { width: 100%; height: 100%; object-fit: contain; mix-blend-mode: multiply; }
.guida-prodotto__testo { display: flex; flex-direction: column; min-width: 0; }
.guida-prodotto__nome { font-size: .88rem; line-height: 1.3; font-weight: 600; }
.guida-prodotto__prezzo { font-size: .85rem; font-weight: 700; color: #2F4A38; }

/* il campo di richiesta nel blocco consulenza della home */
.evo-consulenza__form { display: flex; gap: .5rem; flex-wrap: wrap; }
.evo-consulenza__form input {
  flex: 1 1 16rem; min-width: 0; padding: .75rem 1rem; font: inherit;
  border: 1px solid rgb(255 255 255 / .3); border-radius: 999px;
  background: rgb(255 255 255 / .1); color: #FFF;
}
.evo-consulenza__form input::placeholder { color: rgb(255 255 255 / .5); }
.evo-consulenza__form input:focus { outline: 2px solid var(--evo-accent, #B0540E); background: rgb(255 255 255 / .16); }
.evo-consulenza__form button { border: 0; cursor: pointer; font: inherit; font-weight: 700; white-space: nowrap; }
.evo-consulenza__sotto { margin: .8rem 0 0; font-size: .88rem; color: rgb(255 255 255 / .7); }
.evo-consulenza__sotto a { color: #FFF; }
.visually-hidden { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

/* Il pulsante sta accanto alla ricerca: chi sa cosa cerca usa la ricerca,
   chi non lo sa usa questo. Due risposte alla stessa domanda, affiancate. */
.evo-ha-aiuto { display: flex; align-items: center; gap: .6rem; flex-wrap: nowrap; }
.evo-ha-aiuto > *:first-child { flex: 1 1 auto; min-width: 0; }
.evo-aiuto-col { flex: 0 0 auto; }
.evo-aiuto {
  display: inline-flex;
  align-items: center;
  gap: .45rem;
  padding: .58rem 1.05rem;
  border-radius: 999px;
  background: var(--evo-accent, #B0540E);
  color: #FFF !important;
  text-decoration: none !important;
  font-size: .9rem;
  font-weight: 700;
  white-space: nowrap;
  transition: background-color .15s ease, transform .15s ease;
}
.evo-aiuto:hover { background: #C25E12; transform: translateY(-1px); }
.evo-aiuto svg { flex: 0 0 auto; }
@media (max-width: 1199.98px) { .evo-aiuto span { display: none; } .evo-aiuto { padding: .58rem .7rem; } }
.evox-a__vaipagina { font-weight: 700; }

/* La riga dell'intestazione deve stare su una riga sola.
   Con logo + sei voci + ricerca + pulsante non ci si stava: a cedere era
   "Contatti", che finiva sotto. Si stringe la RICERCA, che era larga quasi
   quattrocento pixel per un campo in cui si scrivono due parole, invece di
   accorciare le voci di menu o togliere il pulsante. */
@media (min-width: 992px) {
  .evo-ha-aiuto > *:first-child { max-width: 17rem; }
  .evo-ha-aiuto .ps-searchbar__input,
  .evo-ha-aiuto input[type="text"],
  .evo-ha-aiuto input[type="search"] { width: 100%; }
  /* senza nowrap "Chi siamo" si spezzava su due righe dentro la sua voce */
  .ps-mainmenu__desktop .ps-mainmenu__tree-link { padding-inline: .6rem; white-space: nowrap; }
  .ps-mainmenu__desktop .ps-mainmenu__tree { flex-wrap: nowrap; }
}
@media (min-width: 992px) and (max-width: 1300px) {
  .evo-ha-aiuto > *:first-child { max-width: 12rem; }
}

/* La riga logo + menu + ricerca + pulsante non deve andare a capo: su schermi
   larghi la ricerca finiva sotto il menu. Si impedisce l'andata a capo e si
   lascia che sia la ricerca a stringersi. */
@media (min-width: 992px) {
  .header-bottom .row { flex-wrap: nowrap; align-items: center; }
  .header-bottom .row > * { min-width: 0; }
}

/* L'avvertenza normativa sta in cima alla scheda, non in fondo: chi la legge
   dopo aver deciso non è stato avvertito. Colore d'allerta ma non allarmistico:
   deve farsi leggere, non spaventare chi ha tutto il diritto di comprare. */
.cec-avvertenza {
  background: #FBF3EC;
  border: 1px solid #E8D5C2;
  border-inline-start: 4px solid #9A4A17;
  border-radius: 0 .7rem .7rem 0;
  padding: 1.1rem 1.4rem;
  margin-block: 0 1.75rem;
}
.cec-avvertenza h2 {
  font-size: 1.05rem !important;
  margin: 0 0 .7rem !important;
  padding: 0 !important;
  border: 0 !important;
  color: #9A4A17;
}
.cec-avvertenza p { margin: 0 0 .6rem; font-size: .92rem; line-height: 1.55; max-width: 70ch; }
.cec-avvertenza p:last-child { margin-bottom: 0; }
.cec-avvertenza__nota {
  font-size: .86rem !important;
  padding-block-start: .7rem;
  border-block-start: 1px solid #E8D5C2;
  color: var(--evo-muted, #5C6660);
}

/* ═══ ACCOUNT DA LOGGATO ═══════════════════════════════════════════════════
   Da sloggato si vede "Accedi". Da loggato il pulsante che apre il menu
   dell'account diventava invisibile — testo chiaro su barra scura — e il menu
   a tendina usciva sbiadito. Chi era dentro doveva scendere nel footer per
   trovare il proprio account. */
.header-top .account,
.header-top [class*="account"] > a,
.header-top .user-info a,
.header-top .ps-useraccount,
.header-top .ps-useraccount a,
.header-top .ps-useraccount button {
  color: #FFF !important;
  opacity: 1 !important;
  visibility: visible !important;
}
.header-top .ps-useraccount svg,
.header-top .ps-useraccount .material-icons { color: #FFF !important; fill: currentColor; }

/* il menu a tendina: fondo pieno e testo leggibile, non fantasma */
.header-top .dropdown-menu,
.header .dropdown-menu {
  background: #FFF !important;
  opacity: 1 !important;
  box-shadow: 0 8px 28px rgb(0 0 0 / .18);
  border: 1px solid var(--evo-line, #E4DFD6);
}
.header-top .dropdown-menu a,
.header .dropdown-menu a,
.header-top .dropdown-item,
.header .dropdown-item {
  color: var(--evo-text, #1C2320) !important;
  opacity: 1 !important;
}
.header-top .dropdown-item:hover,
.header .dropdown-item:hover {
  background: var(--evo-raised, #F5F2EC) !important;
  color: var(--evo-accent, #B0540E) !important;
}
.header .dropdown-menu .material-icons,
.header .dropdown-menu svg { color: var(--evo-muted, #5C6660) !important; opacity: 1 !important; }

/* ═══ ACCOUNT E CARRELLO IN TESTATA ════════════════════════════════════════
   Due difetti distinti, con la stessa conseguenza: il cliente non trova quello
   che cerca.

   1. Da loggato il pulsante che apre il menu account e' un
      .dropdown-toggle.header-block__action-btn con sfondo trasparente e testo
      che eredita il colore del corpo pagina — scuro su barra scura, quindi
      invisibile. E il .dropdown-menu usciva sbiadito per lo stesso motivo.
   2. Il carrello prende la classe "inactive" quando e' vuoto, e con essa
      sparisce la scritta: chi non ha ancora messo niente non vede il carrello
      e non sa dove andare a cercarlo. */

/* il pulsante dell'account, sempre visibile */
.header .ps-customersignin .dropdown-toggle,
.header .ps-customersignin .header-block__action-btn,
.header .header-block__action-btn {
  color: #FFF !important;
  opacity: 1 !important;
}
.header .ps-customersignin .header-block__icon,
.header .ps-customersignin .material-icons,
.header .header-block__icon { color: #FFF !important; opacity: 1 !important; }
.header .ps-customersignin .header-block__title { color: #FFF !important; opacity: 1 !important; }

/* la tendina: fondo pieno, testo scuro leggibile */
.header .dropdown-menu {
  background-color: #FFF !important;
  opacity: 1 !important;
  border: 1px solid var(--evo-line, #E4DFD6);
  box-shadow: 0 10px 30px rgb(0 0 0 / .18);
  padding-block: .35rem;
}
.header .dropdown-menu .dropdown-item {
  color: var(--evo-text, #1C2320) !important;
  opacity: 1 !important;
  padding: .55rem 1rem;
}
.header .dropdown-menu .dropdown-item .material-icons {
  color: var(--evo-accent, #B0540E) !important;
  opacity: 1 !important;
}
.header .dropdown-menu .dropdown-item:hover,
.header .dropdown-menu .dropdown-item:focus {
  background-color: var(--evo-raised, #F5F2EC) !important;
  color: var(--evo-accent, #B0540E) !important;
}
.header .dropdown-divider { border-color: var(--evo-line, #E4DFD6); opacity: 1; }

/* il carrello vuoto resta visibile: e' un punto di riferimento, non un avviso */
.header .blockcart.inactive,
.header .blockcart.inactive .header-block__title,
.header .blockcart.inactive .header-block__action-btn,
.header .blockcart.inactive a {
  opacity: 1 !important;
  visibility: visible !important;
  color: #FFF !important;
}
.header .blockcart.inactive .header-block__title { display: inline-block !important; }

/* accesso all'area riservata, sempre visibile accanto al carrello */
.evo-account {
  display: inline-flex; align-items: center; gap: .4rem;
  margin-inline-end: 1rem; padding: .25rem .6rem; border-radius: 999px;
  color: #FFF !important; text-decoration: none !important;
  font-size: .9rem; font-weight: 600; white-space: nowrap;
}
.evo-account:hover { background: rgb(255 255 255 / .12); }
.evo-voce-consulenze { display: block; padding: .5rem 0; font-weight: 600; }



/* ═══ L'APERTURA DELLE GUIDE ═══════════════════════════════════════════════
   Foto a destra, testo che le scorre accanto e continua sotto senza buchi.
   Niente griglia: la griglia allineava le due colonne ma lasciava vuota tutta
   l'altezza sotto la definizione, che e' corta. */
@media (min-width: 900px) {
  .guida__apertura .guida__foto {
    float: inline-end;
    max-width: 15rem;
    margin: .2rem 0 1.25rem 2rem;
  }
  /* flow-root: il pannello ha uno sfondo e senza questo finirebbe SOTTO la
     foto, con il colore dietro l'immagine. Cosi' invece si affianca. */
  .guida__apertura .guida__definizione { display: flow-root; max-width: none; }
  /* il primo titolo puo' salire accanto alla foto: e' spazio utile */
  .guida__apertura + h2 { clear: none; margin-block-start: 1.5rem; }
}

@media (max-width: 899.98px) {
  .guida__apertura .guida__foto { float: none; max-width: 20rem; margin-inline: auto; }
  .guida__apertura .guida__definizione { max-width: none; }
}
/* ═══ IL BLOG ══════════════════════════════════════════════════════════════
   Stesso impianto delle guide: apertura con foto a destra che il testo
   avvolge, schede prodotto con miniatura, indice a riquadri. */
.blog__apertura .blog__foto { margin-block-start: .2rem; }
.blog__sommario {
  font-size: 1.08rem; line-height: 1.6; display: flow-root;
  background: linear-gradient(180deg, #FBF6F0 0%, #F8F6F2 100%);
  border-inline-start: 3px solid var(--evo-accent, #B0540E);
  border-radius: 0 .6rem .6rem 0; padding: 1.1rem 1.4rem; margin-block-end: 1.75rem;
}
.blog__foto {
  max-width: 15rem; background: var(--evo-raised, #F8F6F2);
  border: 1px solid var(--evo-line, #E4DFD6); border-radius: .7rem; padding: .8rem;
  margin: .2rem 0 1.25rem;
}
.blog__foto img { display: block; width: 100%; height: auto; aspect-ratio: 1/1; object-fit: contain; mix-blend-mode: multiply; }
.blog__foto figcaption { font-size: .8rem; line-height: 1.4; color: var(--evo-muted, #5C6660); margin-block-start: .55rem; }
@media (min-width: 900px) {
  .blog__foto { float: inline-end; margin-inline-start: 2rem; }
  .blog__foto--sinistra { float: inline-start; margin-inline: 0 2rem; }
}
@media (max-width: 899.98px) { .blog__foto { float: none; max-width: 20rem; margin-inline: auto; } }

/* le schede prodotto: la miniatura fa la differenza fra un elenco e un invito */
.blog-prod__griglia {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));
  gap: 1rem; margin-block: 1rem 2.5rem; clear: both;
}
.blog-prod {
  display: flex; gap: .85rem; align-items: center; text-decoration: none;
  background: var(--evo-raised, #F8F6F2); border: 1px solid var(--evo-line, #E4DFD6);
  border-radius: .7rem; padding: .7rem; transition: border-color .15s, transform .15s;
}
.blog-prod:hover { border-color: var(--evo-accent, #B0540E); transform: translateY(-2px); }
.blog-prod__foto { flex: 0 0 4.5rem; }
.blog-prod__foto img { width: 100%; height: auto; aspect-ratio: 1/1; object-fit: contain; mix-blend-mode: multiply; display: block; }
.blog-prod__testo { display: flex; flex-direction: column; gap: .2rem; min-width: 0; }
.blog-prod__nome { font-weight: 600; line-height: 1.3; color: var(--evo-ink, #1F1D1A); font-size: .92rem; }
.blog-prod__prezzo { font-weight: 700; color: var(--evo-accent, #B0540E); }

/* l'indice: riquadri con foto, non un elenco puntato */
.blog-indice__intro { font-size: 1.1rem; line-height: 1.6; max-width: 60ch; margin-block-end: 2rem; }
.blog-indice {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(17rem, 1fr));
  gap: 1.35rem; margin-block-end: 3rem;
}
.blog-card {
  display: flex; flex-direction: column; text-decoration: none; overflow: hidden;
  background: #fff; border: 1px solid var(--evo-line, #E4DFD6); border-radius: .8rem;
  transition: border-color .15s, transform .15s, box-shadow .15s;
}
.blog-card:hover { border-color: var(--evo-accent, #B0540E); transform: translateY(-3px); box-shadow: 0 .6rem 1.4rem rgba(0,0,0,.09); }
.blog-card__foto { display: block; background: var(--evo-raised, #F8F6F2); padding: 1.1rem; }
.blog-card__foto img { width: 100%; height: 8.5rem; object-fit: contain; mix-blend-mode: multiply; display: block; }
.blog-card__testo { display: flex; flex-direction: column; gap: .45rem; padding: 1rem 1.1rem 1.2rem; flex: 1; }
.blog-card__titolo { font-weight: 700; line-height: 1.32; color: var(--evo-ink, #1F1D1A); font-size: 1.02rem; }
.blog-card__occhiello { font-size: .87rem; line-height: 1.5; color: var(--evo-muted, #5C6660); flex: 1; }
.blog-card__vai { font-weight: 600; color: var(--evo-accent, #B0540E); font-size: .9rem; }
.blog-card__vai::after { content: " \2192"; }

/* ═══ LA RICERCA IN ALTO ═══════════════════════════════════════════════════
   Una sola riga: telefono, ricerca, account. La colonna di destra diventa una
   fila e la ricerca si prende lo spazio libero al centro. */
@media (min-width: 768px) {
  .header-top__right {
    display: flex;
    align-items: center;
    gap: 1.25rem;
    justify-content: flex-end;
  }
  .evo-ricerca-alto { flex: 1 1 auto; max-width: 28rem; margin-inline-end: auto; }
  .evo-ricerca-alto .ps-searchbar { width: 100%; }
  .evo-ricerca-alto .ps-searchbar__input {
    background: rgba(255, 255, 255, .08);
    border: 1px solid rgba(255, 255, 255, .18);
    color: #F3F1ED;
    height: 2.3rem;
  }
  .evo-ricerca-alto .ps-searchbar__input::placeholder { color: rgba(243, 241, 237, .55); }
  .evo-ricerca-alto .ps-searchbar__input:focus {
    background: rgba(255, 255, 255, .13);
    border-color: var(--evo-accent, #E8751A);
    box-shadow: none;
  }
  .evo-ricerca-alto .ps-searchbar__magnifier { color: rgba(243, 241, 237, .7); }
  .evo-ricerca-alto .ps-searchbar__dropdown { color: var(--evo-ink, #1F1D1A); }
}
/* ═══ LE COPERTINE DEL BLOG ════════════════════════════════════════════════
   Immagine larga in apertura, 16:9. Nelle schede dell'indice riempie il
   riquadro invece di stare al centro come facevano le foto di prodotto. */
.blog__copertina { margin: 0 0 2rem; border-radius: .8rem; overflow: hidden; }
.blog__copertina img { display: block; width: 100%; height: auto; aspect-ratio: 16/9; object-fit: cover; }
.blog-card__foto--copertina { padding: 0; background: var(--evo-raised, #F8F6F2); }
.blog-card__foto--copertina img {
  width: 100%; height: 9.5rem; object-fit: cover; mix-blend-mode: normal; display: block;
}
/* ═══ I RIQUADRI NON SCAVALLANO ════════════════════════════════════════════
   Un blocco con sfondo accanto a un float ci finisce sotto: lo sfondo passa
   dietro l'immagine e il testo si accavalla. Questi riquadri ricominciano
   sotto la foto, che e' l'unica lettura sensata. */
.guida__errori, .blog__pratica, .cec-faq, .blog-prod__griglia, .guida__valori { clear: both; }
/* ═══ IL MENU NON SI TAGLIA ════════════════════════════════════════════════
   Con il layout multicolonna un'altezza vincolata non allunga il riquadro:
   il contenuto trabocca e viene tagliato. Il vincolo lo mette il tema sul
   pannello; qui si toglie e il pannello diventa alto quanto le voci. */
.submenu, .js-sub-menu,
.ps-mainmenu__tree-item-wrapper .submenu {
  height: auto !important;
  max-height: none !important;
  min-height: 0 !important;
  overflow: visible !important;
}
.submenu .submenu__left, .js-sub-menu .submenu__left {
  height: auto !important;
  max-height: none !important;
  overflow: visible !important;
  /* le colonne si riempiono in modo bilanciato, non fino a saturare la prima */
  column-fill: balance;
  padding-block-end: .4rem;
}
/* una voce non si spezza mai fra due colonne */
.submenu li, .js-sub-menu li,
.submenu .submenu__left > *, .js-sub-menu .submenu__left > * {
  break-inside: avoid;
  page-break-inside: avoid;
  overflow: visible !important;
}
/* ═══ IL BLOG IN HOME ══════════════════════════════════════════════════════
   Sotto la piega: le immagini si caricano in differita e non pesano sul primo
   caricamento. Larghezza e altezza sono dichiarate nel tag, cosi' lo spazio
   e' riservato prima che l'immagine arrivi e la pagina non salta. */
.evo-blog-home { margin-block: 3.5rem 1rem; }
.evo-blog-home__intro { color: var(--evo-muted, #5C6660); margin-block-end: 1.75rem; }
.evo-blog-home .blog-indice { grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)); }
.evo-blog-home__tutti { margin-block-start: 1.5rem; }
.evo-famiglie__griglia {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(13.5rem, 1fr)); gap: 1rem;
}
.evo-fam {
  display: flex; align-items: center; gap: .85rem; text-decoration: none;
  background: #fff; border: 1px solid var(--evo-line, #E4DFD6); border-radius: .7rem;
  padding: .8rem; transition: border-color .15s, transform .15s;
}
.evo-fam:hover { border-color: var(--evo-accent, #B0540E); transform: translateY(-2px); }
.evo-fam__foto { flex: 0 0 3.4rem; }
.evo-fam__foto img { width: 100%; height: auto; aspect-ratio: 1/1; object-fit: cover; border-radius: .45rem; display: block; }
.evo-fam__testo { display: flex; flex-direction: column; gap: .15rem; min-width: 0; }
.evo-fam__nome { font-weight: 600; line-height: 1.3; color: var(--evo-ink, #1F1D1A); }
.evo-fam__n { font-size: .82rem; color: var(--evo-muted, #5C6660); }

/* ═══ LO SLIDER SENZA VELO ══════════════════════════════════════════════
   Nessuna velatura sulla fotografia: solo ombra portata sul testo.
   Il selettore e lungo apposta, per battere le regole precedenti. */
.ps-imageslider .carousel-item .ps-imageslider__figcaption.carousel-caption,
.ps-imageslider__figcaption.carousel-caption {
  background: none !important;
  background-image: none !important;
  background-color: transparent !important;
  padding-block-start: clamp(1.5rem, 4vw, 3rem) !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  box-shadow: none !important;
}
.ps-imageslider .carousel-item .ps-imageslider__figcaption h1,
.ps-imageslider .carousel-item .ps-imageslider__figcaption h2,
.ps-imageslider .carousel-item .ps-imageslider__figcaption p,
.ps-imageslider__figcaption.carousel-caption .display-1 {
  text-shadow: 0 1px 2px rgb(0 0 0 / .55), 0 2px 14px rgb(0 0 0 / .45);
}

/* ═══ TUTTE LE CATEGORIE ═══════════════════════════════════════════════════
   Classe propria: .evo-famiglie ha gia' regole sue e le due si pestavano i
   piedi, ed e' per questo che le voci uscivano incolonnate strette. */
.evo-tutte { margin-block: 3rem 1rem; }
.evo-tutte__griglia {
  display: grid !important;
  grid-template-columns: repeat(auto-fill, minmax(13.5rem, 1fr));
  gap: 1rem;
}
.evo-tutte__voce {
  display: flex; align-items: center; gap: .8rem; text-decoration: none; background: #fff;
  border: 1px solid var(--evo-line, #E4DFD6); border-radius: .7rem; padding: .75rem;
  transition: border-color .15s, transform .15s;
}
.evo-tutte__voce:hover { border-color: var(--evo-accent, #B0540E); transform: translateY(-2px); }
.evo-tutte__foto { flex: 0 0 3.2rem; }
.evo-tutte__foto img { width: 100%; height: auto; aspect-ratio: 1/1; object-fit: cover; border-radius: .45rem; display: block; }
.evo-tutte__testo { display: flex; flex-direction: column; gap: .1rem; min-width: 0; }
.evo-tutte__nome { font-weight: 600; line-height: 1.3; color: var(--evo-ink, #1F1D1A); }
.evo-tutte__n { font-size: .82rem; color: var(--evo-muted, #5C6660); }

/* ═══ L'APERTURA DELLA HOME ════════════════════════════════════════════════
   Titolo e paragrafo avevano un limite di larghezza — giusto, righe lunghe si
   leggono male — ma impilati lasciavano vuota meta' pagina. Affiancati: il
   limite resta e lo spazio si riempie. */
@media (min-width: 980px) {
  .evo-home__apertura {
    /* il tetto di 62ch vale per la colonna singola: a due colonne va alzato,
       se no il blocco resta largo 626px dentro un contenitore da 1296 */
    max-width: min(1180px, 100%);
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr);
    align-items: end;
    column-gap: 3rem;
  }
  .evo-home__apertura > .evo-home__titolo { margin-block-end: 0; }
  .evo-home__apertura > .evo-home__sommario { margin-block-end: .35rem; max-width: 58ch; }
}
/* ═══ LA VOCE DELLE CONSULENZE ═════════════════════════════════════════════
   Il collegamento non porta piu' le classi del tema, quindi l'aspetto va
   rifatto qui: si copia quello delle altre voci, sia nella colonna laterale
   sia nei riquadri grandi. */
.evo-voce-consulenze {
  display: flex;
  align-items: center;
  gap: .65rem;
  text-decoration: none;
  color: var(--evo-ink, #1F1D1A);
  padding: .55rem 0;
  font-weight: 500;
}
.evo-voce-consulenze:hover { color: var(--evo-accent, #B0540E); }
.evo-voce-consulenze .account-menu__icon,
.evo-voce-consulenze .material-icons { font-size: 1.35rem; opacity: .85; }

/* dentro i riquadri grandi della pagina account prende la forma della scheda */
.account-menu--main .evo-voce-consulenze {
  flex-direction: column;
  align-items: flex-start;
  gap: .8rem;
  background: var(--evo-raised, #F8F6F2);
  border: 1px solid transparent;
  border-radius: .7rem;
  padding: 1.35rem 1.5rem;
  min-height: 7rem;
  justify-content: center;
  transition: border-color .15s, transform .15s;
}
.account-menu--main .evo-voce-consulenze:hover {
  border-color: var(--evo-accent, #B0540E);
  transform: translateY(-2px);
}
/* ═══ LE MIE CONSULENZE ════════════════════════════════════════════════════
   Schede invece di un elenco puntato. La domanda e' l'elemento in evidenza:
   e' quella che fa riconoscere al volo quale proposta si sta cercando, molto
   piu' della data o del totale. */
.evo-cons__intro { color: var(--evo-muted, #5C6660); margin-block-end: 1.75rem; }
.evo-cons__griglia {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(17rem, 1fr)); gap: 1.1rem;
}
.evo-cons__scheda {
  display: flex; flex-direction: column; gap: .9rem; text-decoration: none;
  background: #fff; border: 1px solid var(--evo-line, #E4DFD6); border-radius: .8rem;
  padding: 1.25rem 1.35rem 1.1rem;
  transition: border-color .15s, transform .15s, box-shadow .15s;
}
.evo-cons__scheda:hover {
  border-color: var(--evo-accent, #B0540E); transform: translateY(-3px);
  box-shadow: 0 .6rem 1.4rem rgb(0 0 0 / .09);
}
.evo-cons__scheda-domanda {
  font-weight: 600; line-height: 1.4; color: var(--evo-ink, #1F1D1A); flex: 1;
}
.evo-cons__scheda-domanda::before { content: "\201C"; }
.evo-cons__scheda-domanda::after  { content: "\201D"; }
.evo-cons__scheda-piede {
  display: flex; align-items: baseline; justify-content: space-between; gap: .75rem;
  border-block-start: 1px solid var(--evo-line, #E4DFD6); padding-block-start: .8rem;
}
.evo-cons__scheda-data { font-size: .83rem; color: var(--evo-muted, #5C6660); }
.evo-cons__scheda-tot  { font-weight: 700; font-size: 1.1rem; color: var(--evo-ink, #1F1D1A); }
.evo-cons__scheda-vai  { font-size: .88rem; font-weight: 600; color: var(--evo-accent, #B0540E); }
.evo-cons__nuova { margin-block-start: 2rem; }

.evo-cons__vuoto {
  text-align: center; padding: 3rem 1rem;
  background: var(--evo-raised, #F8F6F2); border-radius: .8rem;
}

/* la singola proposta */
.evo-cons__torna { margin-block-end: 1.25rem; }
.evo-cons__domanda {
  margin: 0 0 2rem; padding: 1.1rem 1.4rem; font-size: 1.1rem; line-height: 1.5;
  background: linear-gradient(180deg, #FBF6F0 0%, #F8F6F2 100%);
  border-inline-start: 3px solid var(--evo-accent, #B0540E);
  border-radius: 0 .6rem .6rem 0;
}
.evo-cons__domanda footer {
  margin-block-start: .6rem; font-size: .84rem; line-height: 1.45;
  color: var(--evo-muted, #5C6660);
}
.evo-cons__titoletto { margin-block: 2rem .9rem; }
.evo-cons__scelto {
  display: grid; grid-template-columns: 11rem minmax(0, 1fr); gap: 1.5rem;
  background: #fff; border: 1px solid var(--evo-line, #E4DFD6);
  border-radius: .8rem; padding: 1.35rem;
}
.evo-cons__scelto-foto img { width: 100%; height: auto; aspect-ratio: 1/1; object-fit: contain; mix-blend-mode: multiply; }
.evo-cons__marca { font-size: .8rem; text-transform: uppercase; letter-spacing: .06em; color: var(--evo-muted, #5C6660); }
.evo-cons__scelto-testo h4 { margin: .2rem 0 .6rem; line-height: 1.3; }
.evo-cons__scelto-testo h4 a { color: var(--evo-ink, #1F1D1A); text-decoration: none; }
.evo-cons__riga { display: flex; align-items: baseline; gap: 1.25rem; margin-block-start: 1rem; flex-wrap: wrap; }
.evo-cons__prezzo { font-size: 1.35rem; }
.evo-cons__vai { font-weight: 600; color: var(--evo-accent, #B0540E); text-decoration: none; }

.evo-cons__acc { display: grid; grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)); gap: .9rem; }
.evo-cons__acc-voce {
  display: flex; align-items: center; gap: .8rem; text-decoration: none;
  background: var(--evo-raised, #F8F6F2); border: 1px solid var(--evo-line, #E4DFD6);
  border-radius: .7rem; padding: .7rem;
}
.evo-cons__acc-voce:hover { border-color: var(--evo-accent, #B0540E); }
.evo-cons__acc-foto { flex: 0 0 3.4rem; }
.evo-cons__acc-foto img { width: 100%; height: auto; aspect-ratio: 1/1; object-fit: contain; mix-blend-mode: multiply; display: block; }
.evo-cons__acc-testo { display: flex; flex-direction: column; gap: .15rem; min-width: 0; }
.evo-cons__acc-nome { font-weight: 600; font-size: .9rem; line-height: 1.3; color: var(--evo-ink, #1F1D1A); }
.evo-cons__acc-prezzo { font-weight: 700; color: var(--evo-accent, #B0540E); }

.evo-cons__chiusura {
  display: flex; align-items: center; justify-content: space-between; gap: 1.5rem;
  flex-wrap: wrap; margin-block-start: 2.5rem; padding-block-start: 1.5rem;
  border-block-start: 1px solid var(--evo-line, #E4DFD6);
}
.evo-cons__totale { display: flex; flex-direction: column; }
.evo-cons__totale span { font-size: .84rem; color: var(--evo-muted, #5C6660); }
.evo-cons__totale strong { font-size: 1.6rem; }

/* il contatore accanto alla voce nel menu dell'account */
.evo-conta {
  display: inline-block; margin-inline-start: .45rem; padding: .05rem .45rem;
  background: var(--evo-accent, #B0540E); color: #fff;
  border-radius: 1rem; font-size: .76rem; font-weight: 700; line-height: 1.5;
}

@media (max-width: 600px) {
  .evo-cons__scelto { grid-template-columns: 1fr; }
  .evo-cons__scelto-foto { max-width: 12rem; margin-inline: auto; }
}
/* ═══ ACCESSIBILITA' — contrasto e link riconoscibili ═════════════════════
   Aggiunto il 18 ago 2026 dopo il collaudo Lighthouse. Tre cose separate,
   con il perche' di ciascuna: sono correzioni di leggibilita', non gusti.
   ══════════════════════════════════════════════════════════════════════ */

/* 1. "Tutti gli articoli" era bianco su fondo chiaro — rapporto 1,02:1,
      cioe' praticamente invisibile. .evo-btn nasce per le fasce scure e qui
      finisce su una sezione chiara: gli si da' il fondo pieno dell'accento.
      Bianco su #B0540E = 5,09:1, oltre il 4,5:1 richiesto. */
.evo-blog-home__tutti .evo-btn {
  background: var(--evo-accent, #B0540E);
  border-color: var(--evo-accent, #B0540E);
}
.evo-blog-home__tutti .evo-btn:hover { background: #C25E12; border-color: #C25E12; }
/* l'anello di messa a fuoco del tema e' bianco: su fondo chiaro non si vede */
.evo-blog-home__tutti .evo-btn:focus-visible { outline: 2px solid #1C2320; outline-offset: 2px; }

/* 2. Il link all'informativa privacy nel modulo consensi: #b86526 su bianco
      da' 4,15:1, sotto la soglia. Scurito a #8F4309 = 6,9:1. Vale SOLO nelle
      pagine (fondo chiaro): nel pie' di pagina lo stesso link e' chiaro su
      fondo scuro e li' il contrasto e' gia' ampio. */
main .gdpr-consent .form-check-label a,
#wrapper .gdpr-consent .form-check-label a { color: #8F4309; }

/* 3. Link dentro un blocco di testo: distinguerli col solo colore non basta
      (chi non distingue i colori non li vede). Sottolineati: telefono e
      email nel pie' di pagina, e il link dell'informativa ovunque. */
.copyright__sede a,
.gdpr-consent .form-check-label a { text-decoration: underline; }

/* 4. Le didascalie delle foto nelle schede prodotto arrivano dal testo del
      prodotto con "opacity:.75" scritto nell'attributo style: sbiadito da'
      3,44:1. Serve !important perche' uno stile in linea batte qualunque
      regola normale di un foglio. Il colore pieno #5C6660 da' 5,94:1. */
figure.cec-foto figcaption {
  opacity: 1 !important;
  color: #5C6660 !important;
}

/* 5. Le miniature della scheda prodotto sono <button> dentro un <ul>: ora
      ognuno sta nel suo <li>, come vuole la specifica. display:contents fa
      sparire la scatola del <li> dal calcolo del layout, cosi' la griglia
      continua a disporre i pulsanti esattamente come prima. */
.product__thumbnails-list > .product__thumbnail-item { display: contents; }



/* ═══ CAROSELLO: LEGGIBILITÀ E BERSAGLI DA TOCCARE ════════════════════════
   Aggiunto il 19 ago 2026. PageSpeed dava 93 in accessibilità per due cose,
   entrambe qui sopra la piega della home.
   ══════════════════════════════════════════════════════════════════════ */

/* 6. IL TITOLO DELLA DIAPOSITIVA ERA BIANCO SU NIENTE.
      Storia breve: a riga ~2849 c'era una velatura sulla foto, messa apposta
      per il contrasto. Il blocco "LO SLIDER SENZA VELO" (riga ~3690) l'ha poi
      tolta lasciando solo l'ombra del testo. L'ombra però non è un colore di
      sfondo: chi misura il contrasto risale l'albero, non trova nulla di
      opaco, arriva al fondo della pagina — bianco — e legge bianco su bianco,
      1,02:1. E non è solo una misura: sul cielo chiaro della prima foto quel
      titolo si legge male davvero.

      La via di mezzo: nessun velo sulla fotografia, ma un pannello che sta
      dietro al SOLO testo, largo quanto serve. Bianco su rgb(12 16 14 / .68)
      dà 6,7:1. La fotografia resta pulita. */
.ps-imageslider .carousel-item .ps-imageslider__figcaption.carousel-caption,
.ps-imageslider__figcaption.carousel-caption {
  background-color: rgb(12 16 14 / .68) !important;
  -webkit-backdrop-filter: blur(3px);
  backdrop-filter: blur(3px);
  width: -moz-fit-content !important;
  width: fit-content !important;
  max-width: min(46rem, calc(100% - 2.5rem)) !important;
  border-radius: .7rem !important;
  padding: clamp(.9rem, 2vw, 1.35rem) clamp(1rem, 2.2vw, 1.6rem) !important;
  inset-inline-end: auto !important;
  margin-inline-start: max(1.25rem, calc((100% - 1320px) / 2)) !important;
  margin-block-end: clamp(.9rem, 2.5vw, 2rem);
}
/* sotto lg la didascalia sta sotto la foto, a piena larghezza: lì il pannello
   non serve e il margine laterale lo stringerebbe fuori posto */
@media (max-width: 991.98px) {
  .ps-imageslider .carousel-item .ps-imageslider__figcaption.carousel-caption,
  .ps-imageslider__figcaption.carousel-caption {
    margin-inline: 1rem !important;
    max-width: calc(100% - 2rem) !important;
  }
}

/* 7. I PALLINI DI SCORRIMENTO ERANO 26×4 PIXEL.
      Il tema li disegnava alti 3px ma con due bordi trasparenti da .875rem
      sopra e sotto: la parte da toccare era 30×31. Una regola successiva ha
      azzerato i bordi per arrotondare la pastiglia, e con essi è sparita
      l'area sensibile: restavano 4 pixel di altezza da centrare col dito.
      Qui la pastiglia resta identica e i bordi trasparenti tornano: si vede
      26×4, si tocca 26×28. */
.carousel-indicators [data-bs-target] {
  box-sizing: content-box;
  border-top: 12px solid transparent;
  border-bottom: 12px solid transparent;
  background-clip: padding-box;
  margin-inline: 6px;
}

/* 8. LE FRECCE ERANO LARGHE 20 PIXEL.
      Stessa misura: 20 in larghezza è sotto il minimo di 24. Portate a 28,
      restano pastiglie strette come le voleva il disegno ma si prendono. */
.ps-imageslider .carousel-control-prev,
.ps-imageslider .carousel-control-next,
.carousel-control-prev,
.carousel-control-next {
  min-width: 28px;
  min-height: 44px;
}


/* ═══ VELOCITÀ: LAVORO DI IMPAGINAZIONE CHE NON SERVE ═════════════════════
   Aggiunto il 19 ago 2026. Nel profilo Lighthouse la voce più grossa non è
   la rete ma "Style & Layout": 291 ms su 843 elementi. Buona parte di quegli
   elementi è il menu di navigazione mobile — la sottostruttura con più figli
   di tutta la pagina, il catalogo intero — che sta in un pannello chiuso.
   Chiuso ma calcolato: visibility:hidden nasconde, non esenta dal calcolo.

   content-visibility:hidden lo esenta davvero. È sicuro proprio qui perché
   questi pannelli sono position:fixed e fuori dal flusso: saltarne il calcolo
   non può spostare nulla nella pagina, quindi non introduce scarti (CLS).
   Quando Bootstrap apre il pannello aggiunge .show e il contenuto torna
   normale — la regola vale solo sul pannello chiuso.
   ══════════════════════════════════════════════════════════════════════ */
.offcanvas:not(.show):not(.showing) {
  content-visibility: hidden;
}

/* La velatura sfocata dietro alla didascalia costringe il browser a comporre
   un livello sopra la fotografia proprio mentre sta disegnando l'elemento LCP.
   Il pannello resta (serve al contrasto), lo sfocato no: costa e si nota
   appena. */
.ps-imageslider .carousel-item .ps-imageslider__figcaption.carousel-caption,
.ps-imageslider__figcaption.carousel-caption {
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
}

/* --- GPSR: sicurezza del prodotto (Reg. UE 2023/988) --- */
.product-gpsr{margin:1.25rem 0 0;padding:.9rem 1rem;border:1px solid #e3e3e3;border-radius:4px;background:#fafafa;font-size:.86rem;line-height:1.5}
.product-gpsr p{margin:0 0 .5rem}
.product-gpsr p:last-child{margin-bottom:0}
.product-gpsr__title{font-weight:600;font-size:.8rem;letter-spacing:.06em;text-transform:uppercase;color:#666}
.product-gpsr__label{display:block;font-size:.72rem;letter-spacing:.05em;text-transform:uppercase;color:#888}
.product-gpsr__note{color:#666;font-size:.8rem}
/* 24 set 2026 — EvoCompliance: il pulsante "Recedi dal contratto" nel footer ereditava il colore
   dei link del footer (#C9CFC9) sul suo fondo arancione: contrasto insufficiente (Lighthouse). */
#footer a.evo-withdrawal-btn,
#footer a.evo-withdrawal-btn:hover,
#footer a.evo-withdrawal-btn:focus { color: #FFFFFF !important; }
#footer a.evo-withdrawal-btn:hover { background: #8F400B !important; }

/* ═══ LOGO: spazio riservato prima che l'immagine arrivi (25 set 2026) ═════
   Il logo e' un SVG con width="" e height="" vuoti e qui sopra ha
   height fissa + width:auto. Finche' il file non e' scaricato il browser non
   ne conosce le proporzioni e lo disegna largo ZERO: su telefono le tre icone
   (ricerca, account, carrello) stavano sulla prima riga; all'arrivo del logo
   il carrello andava a capo, l'intestazione cresceva di 32px e spingeva giu'
   tutta la pagina. Lighthouse lo vedeva come CLS 0,412 su main#wrapper, una
   misura su tre: dipendeva solo da quando arrivava l'immagine.
   Le proporzioni sono quelle del viewBox di evo-outdoor-v3.svg (292 x 56). */
.header__logo img,
#header .logo,
.header-bottom__h1 .navbar-brand img {
  aspect-ratio: 292 / 56;
}

/* Su telefono logo + menu + tre icone non ci stavano in una riga sotto i
   ~430px: il carrello finiva sotto il logo. Il logo si adatta alla larghezza
   (da 42px d'altezza fino a 28 sui telefoni piu' stretti) e la riga non va
   piu' a capo. 216px = hamburger, tre icone da 40px e spaziature. */
@media (max-width: 767.98px) {
  .header-bottom .header-bottom__row { flex-wrap: nowrap; }
  .header-bottom .header-bottom__logo { min-width: 0; flex-shrink: 1; }
  .header__logo img, #header .logo, .header-bottom__h1 .navbar-brand img {
    height: clamp(28px, calc((100vw - 216px) * 56 / 292), 42px) !important;
  }
}
