/* ══════════════════════════════════════════════════════════════
   SCROLLCAMPER — TOKEN DI BRAND
   ──────────────────────────────────────────────────────────────
   Palette e tipografia dal brand book v3 (agosto 2026).

   MIGRAZIONE COMPLETATA — colori di brand:
       #1e8a8f  #289d8e  #2AACB8      ->  --sc-teal
       #166c70                        ->  --sc-teal-scuro
       #f5a623  #f0a037  #f39c12      ->  --sc-senape
       #e09515  #d88c2e  #c47a00      ->  --sc-senape-scuro
       #ffd280                        ->  --sc-senape-chiaro
       #fff8ee  #fff5e6               ->  --sc-senape-velo
       #f9f4e8  #f5f5f5  #f2f2f2      ->  --sc-sabbia
       #e8f7f7                        ->  --sc-teal-tenue
       #333  #222  #162a30            ->  --sc-notte
       'Roboto Slab'                  ->  --sc-display  (Geist)
       'Roboto'                       ->  --sc-testo    (Poppins)

   MIGRAZIONE COMPLETATA — grigi di interfaccia (revisione v3):
       #6d7779  #4a5254  #555  #666   ->  --sc-testo-tenue
       #888  #999                     ->  --sc-testo-debole
       #9aa3a5  #ccc                  ->  --sc-testo-sottile
       #c7cccd  #ececea  #ebebeb
       #e0e0e0  #ddd  #eee  #d9d9d9   ->  --sc-filo
       #fff  #fafafa  #f9f9f9         ->  --sc-bianco

   Perche' e' cambiato: i grigi neutri su un fondo caldo come la
   Sabbia virano al freddo. I quattro token nuovi sono il Blu notte
   diluito sulla Sabbia — stessa temperatura del fondo, contrasti
   verificati (tenue 5,59:1 · debole 3,12:1 · sottile 2,01:1 ·
   filo 1,36:1, quest'ultimo solo bordi, mai testo).

   AGGIUNTO: --sc-teal-chiaro, che mancava. Era usato in 11 punti
   ma non dichiarato: senza, il browser ripiegava su currentColor e
   l'outline di focus cambiava colore da un elemento all'altro.

   NON coperto da questo file: public/css/archivio.css.
   Va migrato con la stessa mappa.
   ══════════════════════════════════════════════════════════════ */
:root {
    --sc-teal: #249089;
    --sc-teal-scuro: #1B6F6A;
    --sc-senape: #ECA134;
    --sc-senape-scuro: #C9861F;
    --sc-notte: #162A30;
    --sc-sabbia: #F2EFE6;
    --sc-bianco: #FEFEFD;

    /* Derivati, per stati e sfondi tenui. Non sono nel brand book:
       servono a sostituire i tanti mezzi-toni del mockup senza
       reintrodurre colori fuori palette. */
    --sc-senape-chiaro: #F6D3A0;
    --sc-teal-tenue: #E4F0EE;

    /* Teal schiarito per i dettagli sottili sul fondo Notte: outline di
       focus e sottolineature. Il Teal pieno sul Notte sta a 3,85:1, qui
       siamo a 7,31:1. Era usato in 11 punti ma non era mai dichiarato:
       senza, il browser ripiegava su currentColor e l'outline di focus
       cambiava colore da un elemento all'altro. */
    --sc-teal-chiaro: #5AC7B7;

    /* Veli per gli hover: un'ombra di colore del brand, non la Sabbia.
       La Sabbia e' una superficie di lettura, sui pulsanti risultava
       sporca e spenta. Questi sono i due colori diluiti quasi a bianco. */
    --sc-senape-velo: #FDF5E8;
    --sc-teal-velo: #EDF6F3;

    /* Scala di grigi: il Blu notte diluito sulla Sabbia, non grigi neutri.
       Su un fondo caldo come la Sabbia i grigi neutri virano al freddo.
       Sostituiscono le otto tonalita' scritte a mano del mockup.
         tenue    5,59:1 su Sabbia — testo secondario
         debole   3,12:1           — solo label e caption
         sottile  2,01:1           — solo icone decorative
         filo     1,36:1           — bordi, mai testo            */
    --sc-testo-tenue:   #546163;
    --sc-testo-debole:  #808987;
    --sc-testo-sottile: #A7ACA8;
    --sc-filo:          #CFCFC9;

    /* Geist 600/700 nei titoli, Poppins 400/500/600 nei testi.
       Per passare all'altra proposta (Montserrat + Brown Std) bastano
       queste due righe, piu' il <link> in layouts/default.php. */
    --sc-display: 'Geist', system-ui, sans-serif;
    --sc-testo: 'Poppins', system-ui, sans-serif;

    /* Pagina articolo: larghezza del testo, della colonna laterale e
       dello spazio fra le due. IN PIXEL e non in "ch" perche' ch e' la
       larghezza del carattere DELL'ELEMENTO su cui e' scritto: il corpo
       dell'articolo e' a 17,5px, griglia e copertina ereditano i 16px
       del body, e 72ch scritto su tre elementi dava tre larghezze
       diverse che non combaciavano.
       740px a 17,5px sono circa 81 caratteri per riga. Sopra i 90 la
       lettura diventa faticosa — l'occhio fatica a ritrovare l'inizio
       della riga dopo — quindi la pagina non arriva ai 1400px pieni
       come le altre: 1240 e' il massimo con cui il testo resta
       leggibile. Il resto e' margine, non spazio sprecato. */
    --art-testo: 740px;
    --art-lato:  420px;
    --art-gap:   80px;

    /* Larghezza massima del contenuto, uguale su tutte le pagine.
       Prima erano tre: 1200 (.container), 1400 (dettaglio camper) e
       1600 (archivio), e passando da una pagina all'altra il sito
       sembrava assemblato a pezzi.
       La leggibilita' dei testi lunghi NON dipende da qui: paragrafi e
       blocchi editoriali hanno un max-width proprio espresso in "ch". */
    --sc-max: 1400px;

    /* Altezza dell'header, header sticky.
       Serve fuori da questo file: la barra filtri dell'archivio e la
       sidebar sticky devono fermarsi sotto l'header, non sparirci
       dietro. Se cambi il padding di "body > header nav" o l'altezza
       dei controlli, aggiorna questo valore.
       Calcolo: 14px+14px di padding + 44px del cerchio logo + 3px di filo. */
    --sc-header-h: 75px;
}

/* Ancoraggi e scrollIntoView: senza questo il bersaglio finisce sotto
   l'header sticky. */
html {
    scroll-padding-top: calc(var(--sc-header-h) + 12px);
}

@media (max-width: 992px) {
    :root { --sc-header-h: 69px; }   /* padding 12+12, controlli 42, filo 3 */
}

/* L'attributo hidden vale display:none nel foglio del browser, cioe'
   specificita' ZERO: qualunque regola nostra con un display esplicito lo
   sovrascrive. E' quello che succedeva nella galleria a tutto schermo,
   dove .pd-lightbox-singola{display:flex} teneva visibile un pannello
   dichiarato hidden, e il pulsante "Tutte le foto" restava a video anche
   quando non serviva.
   Questa riga e' il reset standard: hidden torna a voler dire nascosto. */
[hidden] {
    display: none !important;
}

/* Etichetta visibile solo agli screen reader (label della ricerca) */
.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
}

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    font-family: var(--sc-testo);
    background: var(--sc-bianco);
    color: var(--sc-notte);
    line-height: 1.6;
}

/* Header e Navigation: le regole stanno piu' sotto, ancorate a
   "body > header". Qui c'erano "header" e "nav" nudi, che colpivano
   anche il <header> della pagina chi-siamo e i breadcrumb in <nav>. */

.select-wrapper {
    width: 250px;
    position: relative;
}

/* line-height esplicito: il body e' a 1.6, quindi una riga da 14px ne
   chiedeva 22,4 mentre l'altezza fissa di 35px meno bordi e padding ne
   lasciava 15. Il testo veniva tagliato sotto, sulle pance di g, p e q.
   Con 1.2 la riga sta in 16,8px e il controllo respira. */
.select-wrapper select {
    width: 100%;
    height: 38px;
    padding: 0 16px;
    line-height: 1.2;
    border-radius: 30px;
    border: 2px solid var(--sc-filo);
    background-color: var(--sc-sabbia);
    color: var(--sc-testo-debole);
    font-size: 14px;
    appearance: none;
    -webkit-appearance: none;
    -moz-appearance: none;
    outline: none;
    cursor: pointer;
}

/* stesso motivo della select qui sopra */
.select-wrapper input {
    width: 100%;
    height: 38px;
    padding: 0 16px;
    line-height: 1.2;
    border-radius: 30px;
    border: 2px solid var(--sc-filo);
    background-color: var(--sc-sabbia);
    color: var(--sc-testo-tenue);
    font-size: 16px;
    appearance: none;
    -webkit-appearance: none;
    -moz-appearance: none;
    outline: none;
    cursor: pointer;
}

/* FIX: era ".select-wrapper::after select", selettore impossibile
   (un discendente di uno pseudo-elemento): la freccia non e' mai
   comparsa. :has(select) evita di metterla anche sui wrapper che
   contengono input di testo.

   La seconda condizione e' arrivata con js/select-custom.js: quello
   costruisce un .cs-wrap con la SUA freccia e lascia il <select>
   nativo nascosto nel DOM. Senza :not(:has(.cs-wrap)) le frecce
   diventavano due, una sopra l'altra. */
.select-wrapper:has(select):not(:has(.cs-wrap))::after {
    content: "▾";
    position: absolute;
    right: 15px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--sc-testo-debole);
    pointer-events: none;
    font-size: 14px;
}

.select-wrapper select:focus {
    border-color: var(--sc-testo-sottile);
    background-color: var(--sc-filo);
}

/* ══════════════════════════════════════════════════════════════
   HEADER
   ──────────────────────────────────────────────────────────────
   Fondo Notte, accenti Teal, filo inferiore Senape.

   La fascia scura tiene tranquilla la parte alta della pagina e
   lascia che sia la griglia delle foto a prendersi l'attenzione:
   su un aggregatore i camper sono il prodotto, l'header e' chrome.

   Sottolineature e il ".it" del logotipo usano --sc-teal-chiaro e
   non il Teal pieno: sul Notte il var(--sc-teal) e' troppo vicino allo
   sfondo perche' dettagli cosi' sottili restino leggibili.

   PER TORNARE ALLA FASCIA SENAPE bastano queste due righe ->
       --header-bg: var(--sc-senape);
       --header-testo: var(--sc-notte);
   In quel caso vanno riviste anche tre cose che qui sono tarate
   sul fondo scuro: il campo di ricerca (velatura Teal, su chiaro
   diventa invisibile), il filo Senape (sparirebbe sul suo stesso
   colore) e le velature chiare degli stati hover.
   ══════════════════════════════════════════════════════════════ */

/* ATTENZIONE al selettore: "header" e "nav" nudi colpivano OGNI
   <header> e <nav> del documento, non solo quelli del sito. Il
   <header class="pagina-intro"> di chi-siamo si ritrovava lo sfondo
   dell'header, e i breadcrumb dentro <nav> prendevano max-width,
   flex e padding della barra di navigazione.
   "body > header" ancora la regola al solo header di layout. */
body > header {
    --header-bg: var(--sc-notte);
    --header-testo: var(--sc-sabbia);

    /* Sticky: su un aggregatore ricerca e menu servono anche a meta'
       di una lista lunga. z-index sotto il drawer (10001) e il velo
       (10000), sopra le barre sticky di pagina (900). */
    position: sticky;
    top: 0;
    z-index: 1000;
    background-color: var(--header-bg);
    box-shadow: 0 1px 0 rgba(22, 42, 48, 0.08);
}

/* Filo Senape: chiude la fascia ed e' l'unico tocco caldo dell'header.
   Senza, la barra diventa monocromatica teal-scuro e la Senape
   sembrerebbe un colore capitato per caso invece che uno dei cinque. */
body > header::after {
    content: "";
    position: absolute;
    right: 0;
    bottom: 0;
    left: 0;
    height: 3px;
    background: var(--sc-senape);
}

body > header nav {
    max-width: var(--sc-max);
    margin: 0 auto;
    display: flex;
    align-items: center;
    gap: 22px;
    padding: 14px 20px;
}

/* ── Marchio ─────────────────────────────────────────────── */
.logo {
    flex: 0 0 auto;
    width: auto;
}

.logo-marchio {
    display: flex;
    align-items: center;
    gap: 11px;
    text-decoration: none;
}

.logo-circle {
    width: 44px;
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    /* Il cerchio e' dentro l'SVG: niente background, niente border-radius,
       niente overflow. Il vecchio PNG non aveva trasparenza e il suo
       riquadro pieno si vedeva come quadrato dentro il cerchio CSS:
       quella toppa non serve piu'.
       Su header Notte si usa scrollcamper-header-notte.svg.
       Se l'header tornasse Teal, va sostituito con
       scrollcamper-fondo-chiaro.svg: una pastiglia teal su fondo teal
       sparisce. */
}

.logo-circle img {
    width: 44px;
    height: 44px;
    object-fit: contain;
    display: block;
}

/* Logotipo testuale accanto al simbolo: da solo il cerchio non dice
   il nome del sito, e su un marketplace il nome e' meta' della fiducia. */
.logo-testo {
    font-family: var(--sc-display);
    font-size: 20px;
    font-weight: 700;
    letter-spacing: -0.015em;
    line-height: 1;
    color: var(--header-testo);
    white-space: nowrap;
    /* Il nome del brand si scrive Scrollcamper; il logotipo del sito e'
       scrollcamper.com, sempre tutto minuscolo. Il lowercase forzato
       evita che un text-transform ereditato o un refuso nel template
       lo capitalizzino. */
    text-transform: lowercase;
}

/* Logotipo in SVG: altezza fissa, larghezza dal rapporto del file.
   Il ".com" e' colorato dentro l'SVG, non da qui. */
.logo-testo-img {
    height: 20px;
    width: auto;
    display: block;
    flex-shrink: 0;
}

.logo-testo .logo-tld {
    color: var(--sc-senape);
}

/* ── Voci di navigazione ─────────────────────────────────── */
/* Con l'aggiunta del Blog le voci andavano a capo: "Camper usati" si
   spezzava su due righe e l'header cresceva in altezza.
   Tre correzioni insieme, nessuna sufficiente da sola: nowrap sulle voci
   (impedisce la spezzatura), padding e gap ridotti (recuperano spazio),
   flex-shrink sulla lista messo a zero (in caso di strettoia a cedere e'
   la ricerca, non il menu). */
.nav-links {
    display: flex;
    gap: 2px;
    list-style: none;
    flex: 0 0 auto;
    width: auto;
    margin-left: 4px;
}

.nav-links a {
    position: relative;
    display: inline-block;
    padding: 9px 13px;
    border-radius: 8px;
    font-family: var(--sc-testo);
    font-size: 14.5px;
    white-space: nowrap;
    font-weight: 500;
    color: var(--header-testo);
    text-decoration: none;
    text-shadow: none;
    transition: background 0.18s, color 0.18s;
}

/* Il sottolineato Senape cresce dal centro: c'e' gia' a larghezza
   zero, cosi' al passaggio non si sposta nulla nel layout. */
.nav-links a::after {
    content: "";
    position: absolute;
    bottom: 3px;
    left: 50%;
    width: 0;
    height: 2px;
    border-radius: 2px;
    background: var(--sc-senape);
    transform: translateX(-50%);
    transition: width 0.22s cubic-bezier(0.32, 0.72, 0, 1);
}

.nav-links a:hover {
    transform: none;
    background: rgba(242, 239, 230, 0.07);
    color: var(--sc-bianco);
}

.nav-links a:hover::after,
.nav-links a[aria-current="page"]::after {
    width: calc(100% - 26px);   /* padding 13px per lato */
}

.nav-links a[aria-current="page"] {
    color: var(--sc-bianco);
    font-weight: 600;
}

.nav-links a:focus-visible {
    outline: 2px solid var(--sc-teal-chiaro);
    outline-offset: 2px;
}

/* ── Ricerca ─────────────────────────────────────────────── */
/* Era un <input> muto dentro un div, con una lente emoji accanto:
   non cercava niente. Ora e' una form GET verso /archivio. */
.search-box {
    display: flex;
    align-items: center;
    gap: 8px;
    /* Larghezza massima 340px: senza tetto si prendeva quasi 500px e
       schiacciava le voci di menu. 340 bastano per "Cerca marca o
       modello" senza troncare il segnaposto, e restituiscono al menu
       lo spazio per respirare.
       Resta elastica verso il basso: quando l'header e' stretto e'
       ancora lei a cedere per prima. */
    flex: 0 1 340px;
    min-width: 150px;
    height: 42px;
    padding: 0 6px 0 16px;
    border: 1px solid rgba(36, 144, 137, 0.5);
    border-radius: 24px;
    background: rgba(36, 144, 137, 0.16);
    box-shadow: none;
    transition: background 0.2s, border-color 0.2s, box-shadow 0.2s;
}

.search-box:focus-within {
    background: rgba(36, 144, 137, 0.26);
    border-color: var(--sc-teal-chiaro);
    box-shadow: 0 0 0 3px rgba(93, 202, 165, 0.22);
}

.search-box input {
    flex: 1 1 auto;
    width: 100%;
    min-width: 0;
    border: none;
    outline: none;
    background: transparent;
    font-family: var(--sc-testo);
    font-size: 14.5px;
    color: var(--sc-sabbia);
}

.search-box input::placeholder {
    color: rgba(242, 239, 230, 0.62);
}

/* Chrome disegna scura la X di reset del type="search": su fondo
   Notte sarebbe invisibile. */
.search-box input::-webkit-search-cancel-button {
    filter: invert(1) opacity(0.6);
}

.search-submit {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    flex-shrink: 0;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: var(--sc-teal);
    cursor: pointer;
    transition: background 0.2s;
}

.search-submit:hover {
    background: var(--sc-teal-scuro);
}

.search-submit svg {
    width: 16px;
    height: 16px;
    stroke: var(--sc-bianco);
    stroke-width: 2.4;
    fill: none;
}

.search-submit:focus-visible {
    outline: 2px solid var(--sc-teal-chiaro);
    outline-offset: 2px;
}

/* ── Preferiti: accesso alla pagina personale ────────────── */
.header-preferiti {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: rgba(242, 239, 230, 0.1);
    transition: background 0.2s;
}

.header-preferiti svg {
    width: 20px;
    height: 20px;
    fill: none;
    stroke: var(--header-testo);
    stroke-width: 1.8;
}

.header-preferiti:hover {
    background: rgba(242, 239, 230, 0.2);
}

.header-preferiti:focus-visible {
    outline: 2px solid var(--sc-teal-chiaro);
    outline-offset: 2px;
}

/* Il contatore compare solo se c'e' qualcosa salvato: uno zero
   perenne sarebbe rumore. */
.header-preferiti-n {
    position: absolute;
    top: -3px;
    right: -3px;
    min-width: 18px;
    height: 18px;
    padding: 0 5px;
    border-radius: 9px;
    background: var(--sc-senape);
    color: var(--sc-notte);
    font-family: var(--sc-testo);
    font-size: 11px;
    font-weight: 700;
    line-height: 18px;
    text-align: center;
}

/* ── Contatto: unica azione dell'header ──────────────────── */
.header-cta {
    display: inline-flex;
    gap: 8px;
    align-items: center;
    flex: 0 0 auto;
    height: 42px;
    padding: 0 18px;
    border-radius: 24px;
    /* Teal pieno: la superficie e' ampia, quindi il var(--sc-teal) stacca
       dal Notte senza bisogno del gradino chiaro. */
    background: var(--sc-teal);
    color: var(--sc-bianco);
    font-family: var(--sc-testo);
    font-size: 14.5px;
    font-weight: 600;
    text-decoration: none;
    white-space: nowrap;
    transition: background 0.2s, transform 0.15s;
}

.header-cta:hover {
    background: var(--sc-teal-scuro);
    transform: translateY(-1px);
}

.header-cta:focus-visible {
    outline: 2px solid var(--sc-teal-chiaro);
    outline-offset: 2px;
}

.header-cta .icona-whatsapp {
    width: 19px;
    height: 19px;
}

/* Sotto i 1200px la nav e' troppo affollata: cade il testo del CTA,
   resta l'icona. Sotto i 992 subentra il drawer. */
@media (max-width: 1200px) {
    nav { gap: 18px; }

    .header-cta {
        padding: 0 12px;
    }

    .header-cta span {
        display: none;
    }
}

/* ══════════════════════════════════════════════════════════════
   MENU MOBILE — hamburger + drawer laterale
   ──────────────────────────────────────────────────────────────
   Sta qui e non in css/mobile.css di proposito: l'header e' su
   ogni pagina, e se il foglio secondario non carica ci si ritrova
   con la nav desktop che sfora e i controlli orfani a video.
   Markup in app/Views/partials/header.php:
     <button class="nav-toggle"> + <li class="nav-close-item">
   La <ul class="nav-links"> NON viene spostata nel DOM: cambia
   solo il layout, quindi sopra i 992px resta tutto identico.
   Comportamento in public/js/mobile.js.
   ══════════════════════════════════════════════════════════════ */

.nav-toggle,
.nav-close-item {
    display: none;
}

@media (max-width: 992px) {

    nav {
        gap: 10px;
        padding: 12px 16px;
        flex-wrap: nowrap;
    }

    .logo-circle {
        width: 40px;
        height: 40px;
    }

    /* Il logotipo esce: a questa larghezza toglie spazio alla ricerca,
       che e' l'azione primaria. Il simbolo resta e basta a riconoscere.
       Il contatto esce del tutto: su mobile c'e' la barra in fondo.

       Selettori con l'elemento davanti (0,2,0): la rete di sicurezza su
       :has() vale 0,1,1 e sta piu' in basso nel file, quindi a parita'
       di peso rimetteva l'icona in riga invece di lasciarla nascosta. */
    /* Il logotipo RESTA fino a 600px: in SVG a 16px e' leggibile e il
       nome del sito accanto al simbolo vale i 130px che occupa.
       Sotto i 600 esce (vedi blocco piu' in basso): misurato a 390px,
       il campo di ricerca si riduceva a una pastiglia da 60px, cioe'
       inutilizzabile. Fra il nome e la ricerca, su un telefono vince
       la ricerca.
       Il CTA di contatto esce comunque: su mobile ha la barra in fondo. */
    body > header .logo-testo-img {
        height: 16px;
    }

    body > header .logo-testo,
    body > header .header-cta {
        display: none;
    }

    /* Ricerca piu' compatta: su 390px di schermo restano ~120px per il
       testo. Oltre al segnaposto accorciato (vedi header.php), qui si
       recupera spazio su padding, gap e dimensione del pulsante. */
    .search-box input {
        font-size: 13px;
    }

    .search-box {
        padding-left: 12px;
        gap: 4px;
    }

    body > header nav {
        gap: 12px;
    }

    .search-submit {
        width: 30px;
        height: 30px;
    }

    /* Il cuore resta: e' l'unico accesso alla pagina dei salvati, e
       nel drawer sarebbe nascosto dietro un tocco in piu'. */
    .header-preferiti {
        width: 38px;
        height: 38px;
    }

    .search-box {
        flex: 1 1 auto;
        min-width: 0;
        height: 42px;
        padding: 0 5px 0 14px;
    }

    .search-box input {
        height: 42px;
        font-size: 16px;      /* sotto i 16px iOS zooma da solo al focus */
    }

    .nav-toggle {
        display: flex;
        flex: 0 0 44px;
        align-items: center;
        justify-content: center;
        width: 44px;
        height: 44px;
        padding: 0;
        border: none;
        border-radius: 10px;
        /* Header in Notte: la velatura chiara e' quella che stacca. */
        background: rgba(242, 239, 230, 0.1);
        cursor: pointer;
        transition: background 0.2s;
    }

    .nav-toggle:hover,
    .nav-toggle[aria-expanded="true"] {
        background: rgba(242, 239, 230, 0.2);
    }

    .nav-toggle span {
        position: relative;
        display: block;
        width: 20px;
        height: 2px;
        border-radius: 2px;
        background: var(--header-testo);
        transition: background 0.2s;
    }

    .nav-toggle span::before,
    .nav-toggle span::after {
        content: "";
        position: absolute;
        left: 0;
        width: 20px;
        height: 2px;
        border-radius: 2px;
        background: var(--header-testo);
        transition: transform 0.25s cubic-bezier(0.32, 0.72, 0, 1);
    }

    .nav-toggle span::before { top: -6px; }
    .nav-toggle span::after  { top:  6px; }

    .nav-toggle[aria-expanded="true"] span         { background: transparent; }
    .nav-toggle[aria-expanded="true"] span::before { transform: translateY(6px) rotate(45deg); }
    .nav-toggle[aria-expanded="true"] span::after  { transform: translateY(-6px) rotate(-45deg); }

    .nav-toggle:focus-visible,
    .nav-close:focus-visible {
        outline: 3px solid var(--sc-teal-chiaro);
        outline-offset: 2px;
    }

    .nav-links {
        position: fixed;
        top: 0;
        right: 0;
        bottom: 0;
        z-index: 10001;
        display: block;
        width: min(82vw, 320px);
        margin: 0;
        flex: none;
        padding: 76px 8px 32px;
        gap: 0;
        overflow-y: auto;
        /* Notte, come la fascia dell'header: il drawer si legge come
           sua continuazione invece che come un pannello di un altro
           colore che scivola dentro. */
        background: var(--sc-notte);
        box-shadow: -8px 0 24px rgba(22, 42, 48, 0.35);
        transform: translateX(100%);
        visibility: hidden;   /* senza questo iOS conta il drawer nell'area scrollabile */
        transition: transform 0.3s cubic-bezier(0.32, 0.72, 0, 1), visibility 0.3s;
    }

    .nav-links.is-open {
        transform: translateX(0);
        visibility: visible;
    }

    /* Filetti in Sabbia molto diluita: sul Notte restano caldi,
       il bianco puro qui vira al grigio. */
    .nav-links li {
        border-bottom: 1px solid rgba(242, 239, 230, 0.12);
    }

    .nav-links li:last-child {
        border-bottom: none;
    }

    .nav-links a::after {
        display: none;        /* nel drawer l'accento e' la barretta a sinistra */
    }

    .nav-links a {
        display: block;
        padding: 16px 20px 16px 22px;
        border-radius: 0;
        font-family: var(--sc-testo);
        font-size: 17px;
        font-weight: 500;
        color: var(--sc-sabbia);
        text-shadow: none;
        /* La barretta Teal e' gia' qui ma trasparente: cosi' al tocco
           non c'e' scatto di larghezza, cambia solo il colore. */
        box-shadow: inset 3px 0 0 transparent;
        transition: background 0.18s, box-shadow 0.18s, color 0.18s;
    }

    .nav-links a:hover,
    .nav-links a:focus-visible {
        transform: none;
        background: rgba(242, 239, 230, 0.08);
        box-shadow: inset 3px 0 0 var(--sc-senape);
        color: var(--sc-bianco);
        outline: none;
    }

    .nav-close-item {
        display: block;
        position: absolute;
        top: 16px;
        right: 16px;
        border-bottom: none;
    }

    .nav-close {
        display: flex;
        align-items: center;
        justify-content: center;
        width: 44px;
        height: 44px;
        border: none;
        border-radius: 50%;
        background: rgba(242, 239, 230, 0.12);
        color: var(--sc-sabbia);
        font-size: 26px;
        line-height: 1;
        cursor: pointer;
        transition: background 0.2s;
    }

    .nav-close:hover {
        background: rgba(242, 239, 230, 0.22);
    }
}

/* Velo scuro dietro drawer e pannello filtri, e blocco dello scroll di
   fondo mentre sono aperti. Il div .mb-backdrop lo crea public/js/mobile.js. */

.mb-backdrop {

    position: fixed;

    inset: 0;

    z-index: 10000;

    background: rgba(22, 42, 48, 0.55);   /* Notte */

    opacity: 0;

    visibility: hidden;

    transition: opacity 0.28s cubic-bezier(0.32, 0.72, 0, 1), visibility 0.28s;

}



.mb-backdrop.is-visible {

    opacity: 1;

    visibility: visible;

}



body.mb-locked {

    overflow: hidden;

}



/* I link del drawer non erano cliccabili: il velo ci finiva sopra.

   Motivo: da quando l'header e' sticky con z-index 1000 crea un

   CONTESTO DI IMPILAMENTO. Il drawer sta dentro l'header, quindi il suo

   z-index 10001 vale solo li' dentro: verso la pagina l'intero header

   pesa 1000, meno del velo che sta a 10000 come figlio del body.

   Il velo copriva il drawer e prendeva i clic, che percio' chiudevano il

   menu invece di seguire il link.

   Qui l'header sale sopra il velo, ma solo mentre il menu e' aperto. */

body.mb-locked > header {

    z-index: 10002;

}



/* Rete contro lo scroll orizzontale. clip e NON hidden: hidden creerebbe

   un contenitore di scroll e romperebbe le position:sticky. */

body {

    overflow-x: clip;

}



@media (prefers-reduced-motion: reduce) {

    .nav-links { transition: none; }

}


/* Hero.
   La velatura e' un elemento sopra la foto, non un gradiente: serve
   mix-blend-mode: multiply, la stessa delle fasce vetrina, che mantiene
   il contrasto della fotografia invece di lavarla.

   PER CAMBIARE LA FOTO si sostituisce la sola riga --hero-foto.
   Le alternative sono gia' caricate in public/images/, ricompresse in
   WebP con ripiego JPG. Basta incollare al posto della riga attuale:

     image-set(url('/images/hero-piazzale-retro.webp') type('image/webp'),
               url('/images/hero-piazzale-retro.jpg')  type('image/jpeg'));

   sostituendo il nome. Disponibili:
     hero-piazzale-retro     camper in fila visti da dietro    43 KB
     hero-piazzale-frontali  camper in fila visti davanti      64 KB
     hero-specchietti        specchietti in fila, sfocato      39 KB
     hero-frontale-scuro     frontale scuro in primo piano     83 KB
     hero-tramonto           sosta al tramonto, con persone   153 KB

   image-set serve a servire il WebP a chi lo supporta e il JPG agli
   altri: la differenza e' fra 43 KB e 105, sulla prima immagine che il
   browser scarica.
*/
.hero {
    --hero-foto: image-set(url('/images/hero-tramonto.webp') type('image/webp'),
                           url('/images/hero-tramonto.jpg')  type('image/jpeg'));

    position: relative;
    background-image: var(--hero-foto);
    background-size: cover;
    background-position: center;
    color: var(--sc-bianco);
    padding: 100px 20px;
    text-align: center;
    min-height: 800px;
}

/* Velatura dell'hero: Notte al 55%, NON il multiply Teal delle vetrine.
   Il motivo e' nella foto. Il multiply Teal funziona sui camper bianchi
   in piazzale, che sono neutri: moltiplicato su un cielo arancione da
   invece un verde acido, e il tramonto — cioe' il motivo per cui questa
   foto e' stata scelta — sparisce.
   Notte al 55% scurisce quanto basta per il testo bianco e lascia i
   colori del cielo.
   Se un domani l'hero torna a una foto neutra, si puo' riallineare alle
   vetrine con: background-color: var(--sc-teal-scuro); mix-blend-mode:
   multiply; opacity: 1. */
.hero-velo {
    position: absolute;
    inset: 0;
    z-index: 0;
    background-color: var(--sc-notte);
    opacity: 0.55;
}

/* Il contenuto va sopra la velatura, altrimenti la prenderebbe anche lui
   e il testo bianco si scurirebbe. */
.hero-testo,
.hero .filtro-ricerca-wrapper {
    position: relative;
    z-index: 1;
}

/* Stessa ombra e stesso trattamento dei titoli delle vetrine
   (.section-camper-title): sono lo stesso tipo di titolo, su fotografia
   velata, e prima avevano ombre diverse. */
.hero h1 {
    font-family: var(--sc-display);
    font-size: 48px;
    font-weight: 700;
    margin-bottom: 10px;
    color: var(--sc-bianco);
    text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
}

/* "Scrollcamper" rimanda a Chi siamo: e' un link dentro il claim,
   quindi non deve sembrare un link di testo ma restare parte della
   frase. La sottolineatura Senape compare al passaggio. */
.hero h1 a,
.hero p a {
    color: inherit;
    text-decoration: none;
    border-bottom: 3px solid transparent;
    transition: border-color 0.2s;
}

.hero h1 a:hover,
.hero p a:hover {
    border-bottom-color: var(--sc-senape);
}

.hero h1 a:focus-visible,
.hero p a:focus-visible {
    outline: 3px solid var(--sc-senape);
    outline-offset: 4px;
    border-radius: 4px;
}


h3 {
    font-family: var(--sc-display);
}

/* Sottotitolo: da 20 a 26px. E' la seconda meta' del claim — "Cerchi un
   camper in Italia? / Trovalo con Scrollcamper" — non una didascalia,
   e a 20px si leggeva come una nota di servizio sotto il titolo.
   Peso 500 e non 400: a questa dimensione il regular su fotografia
   perde corpo. */
.hero p {
    font-family: var(--sc-display);
    font-size: 26px;
    font-weight: 500;
    line-height: 1.35;
    margin-bottom: 40px;
    color: var(--sc-bianco);
    /* stessa ombra del titolo e delle vetrine */
    text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
}

/* Search Form */
.search-tabs {
    display: flex;
    justify-content: center;
    gap: 0;
    margin-bottom: 30px;
}

.search-tab {
    background: rgba(255,255,255,0.9);
    color: var(--sc-notte);
    padding: 12px 30px;
    border: none;
    cursor: pointer;
    font-size: 16px;
    font-weight: 500;
    transition: background 0.3s;
}

.search-tab.active {
    background: white;
    border-bottom: 3px solid var(--sc-senape);
}

/* Il pannello di ricerca sta dentro l'hero, che e' centrato: qui il
   testo torna a sinistra. Etichette centrate sopra campi allineati a
   sinistra e' la ragione per cui il form sembrava sbilanciato.
   Larghezza portata a 1200: i filtri ora sono dieci, non tre. */
.search-form-container {
    max-width: 1200px;
    margin: 0 auto;
    background: var(--sc-bianco);
    padding: 28px 30px 24px;
    border-radius: 14px;
    text-align: left;
    box-shadow: 0 10px 30px rgba(22, 42, 48, 0.22);
}

/* Coppia "da / a" dentro un gruppo, come .filter-coppia nella sidebar.
   Duplicata qui perche' archivio.css non e' caricato sulla home. */
.campo-coppia {
    display: flex;
    gap: 8px;
}

.campo-coppia .select-wrapper {
    flex: 1;
    min-width: 0;
}

/* La larghezza fissa di 250px va bene per un campo isolato, non dentro
   una griglia: qui il controllo segue la colonna. */
.search-form-container .select-wrapper,
.search-form-container .cs-wrap,
.search-form-container input[type="text"] {
    width: 100%;
    max-width: 100%;
}

.search-form-container .form-group label {
    color: var(--sc-testo-tenue, #546163);
    font-size: 13.5px;
    font-weight: 600;
}

/* Griglia invece di flex: le etichette erano disallineate perche' con
   flex ogni gruppo si dimensionava per conto suo e chi non aveva
   etichetta faceva salire il proprio controllo. Con la griglia le
   colonne sono uguali e i controlli si allineano in basso.
   auto-fit con minmax: le colonne si riducono da sole da quattro a due
   a una, senza bisogno di breakpoint dedicati. */
.form-row {
    display: grid;
    /* Quattro colonne a piena larghezza. Con otto filtri fanno due
       righe piene da quattro; a cinque colonne restavano 5 + 3, con la
       seconda riga mozza.
       Il numero di filtri cambia con la copertura dei dati (un filtro
       compare solo se il dato esiste), quindi quattro e' anche il
       compromesso che regge meglio quando ne comparira' un altro. */
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    gap: 16px 18px;
    margin-bottom: 22px;
    align-items: end;
}

.form-group {
    min-width: 0;
}

.form-group label {
    display: block;
    min-height: 20px;   /* riserva la riga anche ai gruppi senza etichetta */
    margin-bottom: 6px;
    font-size: 14px;
    font-weight: 500;
    color: var(--sc-notte);
    font-size: 14px;
}

/* Le tre spunte finali sono un blocco a se': il filetto sopra le stacca
   dai campi, e vale su ENTRAMBE le schede di ricerca — due pannelli con
   lo stesso ruolo devono leggersi uguali. */
.checkbox-group {
    display: flex;
    gap: 24px;
    flex-wrap: wrap;
    justify-content: center;
    margin-bottom: 18px;
    padding-top: 18px;
    border-top: 1px solid var(--sc-filo);
}

/* Caselle, non piu' pallini: i tre filtri si combinano fra loro.
   Quadrato con spunta invece del cerchio pieno, perche' la forma e'
   l'unico segnale che distingue "posso sceglierne piu' di uno". */
.checkbox-option {
    display: inline-flex;
    align-items: center;
    gap: 9px;
    font-family: var(--sc-testo);
    font-size: 15px;
    color: var(--sc-notte);
    cursor: pointer;
    user-select: none;
}

.checkbox-option input {
    position: absolute;
    opacity: 0;
    width: 0;
    height: 0;
}

.custom-check {
    position: relative;
    width: 20px;
    height: 20px;
    border: 2px solid var(--sc-filo, #CFCFC9);
    border-radius: 5px;
    background: var(--sc-bianco);
    transition: background 0.15s, border-color 0.15s;
    flex-shrink: 0;
}

.custom-check::after {
    content: "";
    position: absolute;
    top: 2px;
    left: 6px;
    width: 5px;
    height: 10px;
    border: solid var(--sc-bianco);
    border-width: 0 2.5px 2.5px 0;
    transform: rotate(45deg) scale(0);
    transition: transform 0.15s;
}

/* Regole non piu' legate a .checkbox-option: le stesse caselle servono
   anche al filtro optional (.casella-filtro). Prima lo stato "spuntato"
   valeva solo per il primo gruppo, quindi gli optional si selezionavano
   davvero ma non lo si vedeva. */
input:checked + .custom-check {
    background: var(--sc-senape);
    border-color: var(--sc-senape);
}

input:checked + .custom-check::after {
    transform: rotate(45deg) scale(1);
}

input:focus-visible + .custom-check {
    outline: 2px solid var(--sc-teal);
    outline-offset: 2px;
}

.checkbox-option:hover .custom-check {
    border-color: var(--sc-senape);
}

.checkbox-item {
    display: flex;
    align-items: center;
    gap: 5px;
}

.checkbox-item label {
    color: var(--sc-testo-tenue);
}

.checkbox-item input[type="checkbox"] {
    width: auto;
}

.small-text {
    font-size: 12px;
    color: var(--sc-testo-tenue);
    margin-bottom: 15px;
}

.results-badge {
    background: var(--sc-senape);
    color: white;
    padding: 12px 30px;
    border-radius: 25px;
    font-weight: 700;
    display: inline-block;
    font-size: 16px;
    box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3),
    -1px -1px 3px rgba(255, 255, 255, 0.2);
}

/* Container */
.container {
    max-width: var(--sc-max);
    margin: 0 auto;
    padding: 60px 20px;
}

/* Section Titles */
.section-title {
    font-family: var(--sc-display);
    font-size: 36px;
    margin-bottom: 30px;
    color: var(--sc-notte);
}

/* Parola evidenziata nei titoli delle vetrine. Nella view era un <a>
   senza href usato solo per colorare: link vuoto per crawler e screen
   reader, ora e' uno <span>. */
.section-camper-title .accent,
.section-title .accent {
    color: var(--sc-senape);
}

.section-camper-title {
    font-family: var(--sc-display);
    font-size: 36px;
    margin-bottom: 30px;
    color: white;
    text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
}

/* Product Grid */
.product-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: 25px;
    margin-bottom: 40px;
    position: relative;
}

.product-card {
    background: white;
    border-radius: 8px;
    overflow: hidden;
    box-shadow: 0 2px 10px rgba(0,0,0,0.1);
    transition: transform 0.3s, box-shadow 0.3s;
}

.product-card:hover {
    transform: translateY(-5px);
    box-shadow: 0 5px 20px rgba(0,0,0,0.15);
}

.product-image {
    width: 100%;
    height: 180px;
    background: var(--sc-filo);
    position: relative;
    overflow: hidden;
}

.product-image img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.product-info {
    padding: 15px;
}

.product-title {
    font-family: var(--sc-display);
    font-weight: 600;
    font-size: 15.5px;
    line-height: 1.35;
    margin-bottom: 4px;
}

/* Titolo su una riga sola SOLO nel binario della home: i titoli
   scrapati sono lunghissimi e su due righe il prezzo finirebbe ad
   altezze diverse da una scheda all'altra.
   ATTENZIONE: la stessa classe .product-title e' usata anche dalle
   schede dell'archivio, che sono in griglia. Li' il nowrap gonfiava
   la colonna centrale (min-width:auto sugli elementi di griglia) e
   spingeva fuori dalla scheda la colonna del prezzo con il pulsante
   "Vedi dettagli". Per questo la regola e' agganciata a
   .product-track e non alla classe nuda. */
.product-track .product-title {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.product-subtitle {
    color: var(--sc-testo-tenue);
    font-size: 13px;
    margin-bottom: 8px;
    text-transform: capitalize;
}

.product-price {
    font-family: var(--sc-display);
    color: var(--sc-teal);
    font-size: 22px;
    font-weight: 700;
    line-height: 1.1;
}

/* Senza cifra non e' un prezzo, e' uno stato: stesso trattamento di
   archivio e ultimi arrivi. */
.product-price.is-richiesta {
    font-family: var(--sc-testo);
    font-size: 15px;
    font-weight: 600;
    color: var(--sc-testo-tenue);
}

/* Riga di specifiche: stessa impostazione delle card "ultimi arrivi",
   valori separati da barra, senza etichette. */
.product-specs {
    margin-top: 8px;
    font-size: 12.5px;
    line-height: 1.5;
    color: var(--sc-testo-tenue);
}

.product-specs span {
    color: var(--sc-filo);
    margin: 0 2px;
}

/* Rivenditore ancorato in fondo: le schede del carosello hanno altezza
   uniforme, quindi il blocco resta allineato tra una card e l'altra. */
.product-dealer {
    margin-top: 10px;
    padding-top: 9px;
    border-top: 1px solid var(--sc-filo);
    font-size: 12.5px;
    line-height: 1.45;
}

.product-dealer-et {
    display: block;
    color: var(--sc-testo-sottile);
    font-size: 11px;
}

.product-dealer-nome {
    display: block;
    color: var(--sc-notte);
    font-weight: 500;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.product-dealer-zona {
    display: block;
    color: var(--sc-testo-tenue);
}

/* Navigation Arrows */
.nav-arrow {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    width: 40px;
    height: 40px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    z-index: 10;
    color: white;
    font-size: 20px;
    font-weight: bold;
}

.nav-arrow.new  { background: var(--sc-senape); }
.nav-arrow.used { background: var(--sc-senape); }
.nav-arrow.left  { left: 4px; }
.nav-arrow.right { right: 4px; }

/* CTA Section */
.cta-section {
    background: linear-gradient(135deg, var(--sc-teal) 0%, var(--sc-teal-scuro) 100%);
    color: white;
    padding: 50px;
    border-radius: 12px;
    display: flex;
    align-items: center;
    gap: 40px;
    margin: 60px 0;
}

/* Niente cerchio dietro il marchio: era bianco al 20% sul Teal, cioe'
   un verde slavato che non appartiene alla palette e che stonava con il
   fondo. Serviva a contenere la vecchia illustrazione; il marchio ha
   gia' la sua forma e non ha bisogno di un contenitore. */
.cta-icon {
    width: 150px;
    height: 150px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

/* Senza cerchio il marchio puo' occupare tutto lo spazio disponibile. */
.cta-icon img {
    width: 100%;
    height: auto;
    object-fit: contain;
}

.cta-icon svg {
    width: 80px;
    height: 80px;
    fill: white;
}

.cta-content h2 {
    font-family: var(--sc-display);
    font-size: 32px;
    margin-bottom: 15px;
}

.cta-content p {
    font-size: 16px;
    margin-bottom: 25px;
    line-height: 1.6;
}

.cta-buttons {
    display: flex;
    gap: 15px;
    flex-wrap: wrap;
}

/* Specificita' doppia classe di proposito: .btn e' dichiarata piu' sotto
   con display:inline-block, quindi a parita' di peso vincerebbe lei e
   l'icona finirebbe a capo sopra il testo. */
.btn.btn-wa-inline {
    display: inline-flex;
    gap: 9px;
    align-items: center;
    line-height: 1;
}

.btn-wa-inline .icona-whatsapp {
    width: 19px;
    height: 19px;
}

.btn {
    padding: 12px 30px;
    border-radius: 25px;
    font-weight: 700;
    text-decoration: none;
    display: inline-block;
    transition: all 0.3s;
    border: none;
    cursor: pointer;
    font-size: 16px;
}

.btn-primary {
    background: var(--sc-senape);
    color: white;
}

.btn-primary:hover {
    background: var(--sc-senape-scuro);
}

.btn-secondary {
    background: white;
    color: var(--sc-teal);
}

.btn-secondary:hover {
    background: var(--sc-sabbia);
}

/* Brands Section */
/* FIX ombre: c'era "box-shadow: 0 2px 10px var(--sc-senape-scuro)", cioe' un colore
   pieno senza canale alfa. Non e' un'ombra — un'ombra e' il fondo
   scurito — quindi non si fondeva con niente e leggeva come un alone
   al neon. Erano anche le uniche due sezioni del sito a farlo: tutte
   le altre card usano rgba(0,0,0,.08).
   Sostituito con un filetto in alto nel colore della sezione: tiene il
   richiamo cromatico, che era l'intenzione, senza l'effetto luminoso.
   Il bordo e' su un lato solo, quindi border-radius va azzerato in
   alto: angoli tondi e bordo singolo non stanno insieme. */
/* Pagina bianca: il riquadro si distingue con il filetto in cima e
   l'ombra, non con il colore di fondo. */
.brands-section {
    background: transparent;
    text-align: center;
    /* era "40px 0" e azzerava il padding laterale ereditato da .container,
       incollando i loghi al bordo del riquadro. */
    padding: 40px 20px;
    margin-top: 5%;
    border-top: 3px solid var(--sc-senape);
    border-radius: 0 0 12px 12px;
    box-shadow: 0 2px 10px rgba(22, 42, 48, 0.07);
}

/* Nastro dei marchi.
   ──────────────────────────────────────────────────────────────
   Il movimento NON e' un'animazione CSS ma lo scorrimento del
   contenitore, mosso da js/nastro.js. Motivo: un elemento
   traslato con transform non si puo' scorrere, quindi con
   l'animazione non erano possibili ne' il trascinamento col
   mouse, ne' la rotellina, ne' il dito.

   Qui il contenitore e' scorrevole e basta: dito e trackpad
   funzionano senza codice, il trascinamento col mouse lo
   aggiunge il JS.

   L'elenco e' stampato due volte nella view: superata una copia
   il JS torna indietro di altrettanto e il giro non si vede.
   Senza JS resta una striscia scorrevole a mano — nessuna
   funzione persa, solo il movimento automatico. */
.marchi-fascia {
    overflow-x: auto;
    scrollbar-width: none;
    cursor: grab;
    /* sfumature ai bordi: i loghi entrano ed escono invece di
       comparire di colpo a meta' */
    mask-image: linear-gradient(to right, transparent, #000 6%, #000 94%, transparent);
    -webkit-mask-image: linear-gradient(to right, transparent, #000 6%, #000 94%, transparent);
}

.marchi-fascia::-webkit-scrollbar {
    display: none;
}

.marchi-fascia.sta-trascinando {
    cursor: grabbing;
    /* durante il trascinamento niente selezione del testo, altrimenti
       si evidenziano i loghi invece di scorrere */
    user-select: none;
}

.marchi-nastro {
    display: flex;
    width: max-content;
}

/* Spaziatura come margine sugli elementi e non gap sul contenitore:
   con il gap le due meta' non sarebbero larghe uguali e il giro
   mostrerebbe un salto. */
.marchi-nastro .brand-item {
    margin-right: 16px;
}

/* Barra sotto la fascia: costruita da js/nastro.js.
   Non e' la barra del browser (nascosta): con l'elenco che gira
   all'infinito quella tornerebbe indietro di scatto a meta' corsa.
   Questa mostra la posizione dentro UNA copia, quindi scorre continua.
   Si trascina, ed e' il segnale che dice che c'e' altro da vedere. */
.marchi-barra {
    position: relative;
    height: 6px;
    max-width: 320px;
    margin: 18px auto 0;
    border-radius: 3px;
    background: var(--sc-filo, #CFCFC9);
    cursor: pointer;
    touch-action: none;   /* il trascinamento non deve scorrere la pagina */
}

.marchi-cursore {
    position: absolute;
    top: 0;
    bottom: 0;
    min-width: 28px;
    border-radius: 3px;
    background: var(--sc-teal);
    transition: background 0.2s;
}

.marchi-barra:hover .marchi-cursore {
    background: var(--sc-teal-scuro);
}

/* Su touch il movimento automatico resta — serve a far capire che i
   loghi sono piu' di quelli visibili — ma si ferma sotto il dito.
   La seconda copia dell'elenco quindi serve anche qui e non va
   nascosta, altrimenti il giro non si chiuderebbe. */
@media (hover: none) {
    .marchi-fascia {
        -webkit-overflow-scrolling: touch;
        cursor: auto;
    }

    .marchi-barra {
        max-width: 200px;
        height: 5px;
    }
}

/* Con "riduci animazioni" niente movimento automatico: resta una
   striscia da scorrere a mano, e la seconda copia diventa un elenco
   ripetuto inutile. */
@media (prefers-reduced-motion: reduce) {
    .marchi-fascia {
        mask-image: none;
        -webkit-mask-image: none;
    }

    .marchi-nastro .brand-item[aria-hidden="true"] {
        display: none;
    }
}


/* Ogni logo e' un link al catalogo filtrato per quella marca.
   I file caricati sono jpg e gif, quindi con lo sfondo bianco cotto
   dentro: il riquadro bianco lo rende invisibile su fondo bianco.
   Se un domani arrivano PNG o SVG con trasparenza, questa regola non
   da' fastidio. */
.brand-item {
    display: flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    /* Riquadro tarato sui file reali, che sono TUTTI 120x40 px.
       Prima il logo veniva mostrato a 200x56: gia' 1,7 volte piu'
       grande della sorgente su schermo normale, e 3,3 volte su uno
       schermo ad alta densita'. Da li' l'aspetto sgranato, non dalla
       compressione.
       A 120x40 il rapporto e' 1:1 su schermo normale e 2:1 su retina —
       il minimo ottenibile con questi file. */
    width: 150px;
    height: 72px;
    padding: 8px;
    border-radius: 8px;
    background: var(--sc-bianco);
    scroll-snap-align: start;
    transition: transform 0.2s;
}

.brand-item:hover {
    transform: translateY(-2px);
}

/* Al passaggio si ingrandisce leggermente invece di schiarirsi: un
   effetto che non altera i colori del marchio. */
.brand-item:hover .brand-logo {
    transform: scale(1.06);
}

.brand-logo {
    /* Tarata sui file reali, che sono tutti 120x40 px.
       max-height/max-width invece di dimensioni fisse: un logo non viene
       MAI ingrandito oltre la sua misura, al massimo rimpicciolito. Con
       una height fissa un file piu' piccolo veniva stirato, ed e' da li'
       che veniva l'aspetto sgranato — non dalla compressione. */
    height: auto;
    width: auto;
    max-height: 40px;
    max-width: 120px;
    min-width: 0;
    object-fit: contain;
    /* Niente opacity ridotta: al 70% i marchi risultavano slavati, e
       quelli gia' grigi (Weinsberg, Rapido, Tabbert) illeggibili.
       Sono marchi altrui: vanno mostrati come sono. */
    transition: transform 0.2s;
}

/* Dealer Section 
.dealer-section {
    background: linear-gradient(rgba(36, 144, 137, 0.9), rgba(36, 144, 137, 0.9)), url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 300"><rect fill="%23ccc" width="1200" height="300"/></svg>');
    background-size: cover;
    background-position: center;
    color: white;
    padding: 60px;
    border-radius: 12px;
    margin: 60px 0;
}

.dealer-section h2 {
    font-family: var(--sc-display);
    font-size: 36px;
    margin-bottom: 15px;
}

.dealer-section p {
    font-size: 16px;
    margin-bottom: 25px;
    max-width: 600px;
} */

/* Blog Section */
.blog-section {
    background: transparent;
    margin-top: 5%;
    margin-bottom: 5%;
    border-top: 3px solid var(--sc-teal);
    border-radius: 0 0 12px 12px;
    box-shadow: 0 2px 10px rgba(22, 42, 48, 0.07);
    padding-top: 40px;
}

.blog-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.btnnews {
    color: var(--sc-teal);
    text-decoration: none;
    font-weight: 600;
    font-size: 20px;
}

.btnnews:hover {
    text-decoration: underline;
}

.blog-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap: 25px;
    position: relative;
}

/* Su fondo Sabbia le card devono restare bianche per staccare */
/* Segnaposto del blog: finche' gli articoli non esistono, "Leggi di piu'"
   e "Vedi tutte" sono <span>, non link. Restano leggibili ma non
   invitano al clic ne' vengono annunciati come navigabili. */
.btn-link.is-inattivo,
.btnnews.is-inattivo {
    color: var(--sc-testo-debole, #808987);
    cursor: default;
    text-decoration: none;
}

.blog-card {
    background: white;
    border-radius: 8px;
    overflow: hidden;
    box-shadow: 0 2px 10px rgba(0,0,0,0.1);
    display: flex;
    flex-direction: column;
}

.blog-image {
    width: 100%;
    height: 180px;
    background: var(--sc-filo);
}

.blog-image img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.blog-content {
    padding: 20px;
    display: flex;
    flex-direction: column;
    flex: 1;
}

.blog-title {
    font-weight: 700;
    font-size: 18px;
    margin-bottom: 10px;
}

.blog-excerpt {
    color: var(--sc-testo-tenue);
    font-size: 14px;
    margin-bottom: 15px;
}

.btn-link {
    color: var(--sc-senape);
    text-decoration: none;
    font-weight: 600;
    font-size: 14px;
    margin-top: auto;
}

.btn-link:hover {
    text-decoration: underline;
}

/* ══════════════════════════════════════════════════════════════
   FOOTER — allineato all'header
   ──────────────────────────────────────────────────────────────
   Stesse due variabili dell'header, stessi accenti. La pagina si
   apre e si chiude sullo stesso registro: fascia scura, filo
   Senape a separarla dal contenuto, Teal sulle azioni.
   Il filo qui sta SOPRA, speculare a quello dell'header.

   Ancorato al body: un giorno potrebbe servire un <footer> dentro
   una card o un articolo, e non deve prendersi la fascia.

   Per tornare al footer Senape, come per l'header, bastano le due
   variabili (vedi css/header-senape.css, che li flippa entrambi). */
body > footer {
    --footer-bg: var(--sc-notte);
    --footer-testo: var(--sc-sabbia);

    position: relative;
    background: var(--footer-bg);
    color: var(--footer-testo);
    border-top: 3px solid var(--sc-senape);
}

/* Tre colonne: marchio, navigazione, contatti. Prima erano marchio e
   social affiancati con space-between, e i contatti non c'erano. */
.footer-content {
    max-width: var(--sc-max);
    margin: 0 auto 40px;
    display: grid;
    grid-template-columns: 1.6fr 1fr 1.1fr;
    gap: 40px;
    align-items: start;
    padding: 56px 20px 30px;
}

.footer-brand {
    display: flex;
    align-items: flex-start;
    gap: 20px;
}

.footer-titolo {
    font-family: var(--sc-display);
    font-size: 15px;
    font-weight: 600;
    margin-bottom: 14px;
    color: var(--sc-bianco);
}

.footer-nav ul,
.footer-contatti ul {
    list-style: none;
    padding: 0;
    margin: 0;
}

.footer-nav li,
.footer-contatti li {
    margin-bottom: 9px;
}

/* Sottolineatura Teal chiaro al passaggio, come le voci dell'header:
   sul Notte il Teal pieno e' troppo vicino allo sfondo. */
.footer-nav a,
.footer-contatti a {
    font-size: 14.5px;
    color: var(--footer-testo);
    text-decoration: none;
    border-bottom: 1px solid transparent;
    transition: border-color 0.18s, color 0.18s;
}

.footer-nav a:hover,
.footer-contatti a:hover {
    color: var(--sc-bianco);
    border-bottom-color: var(--sc-teal-chiaro);
}

.footer-nav a:focus-visible,
.footer-contatti a:focus-visible {
    outline: 2px solid var(--sc-teal-chiaro);
    outline-offset: 2px;
}

.footer-contatti .social-links {
    margin-top: 18px;
}

.footer-logo {
    width: 80px;
    height: 80px;
    overflow: hidden;               /* stesso motivo del logo in header */
    background: var(--sc-teal);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.footer-logo img {
    width: 100%;
    height: 100%;
    object-fit: contain;
    display: block;
}

.footer-text {
    max-width: 300px;
    font-size: 14px;
    line-height: 1.8;
    color: rgba(242, 239, 230, 0.78);
}

.social-links {
    display: flex;
    gap: 15px;
}

/* Su fondo scuro il riquadro bianco pieno era troppo forte: tre
   macchie chiare che tiravano l'occhio piu' dei contatti. */
.social-icon {
    width: 40px;
    height: 40px;
    background: rgba(242, 239, 230, 0.1);
    border-radius: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: transform 0.3s, background 0.2s;
}

.social-icon:hover {
    transform: translateY(-3px);
    background: var(--sc-teal);
}

.social-icon:focus-visible {
    outline: 2px solid var(--sc-teal-chiaro);
    outline-offset: 2px;
}

.social-icon svg {
    width: 22px;
    height: 22px;
    fill: var(--footer-testo);
    transition: fill 0.2s;
}

.social-icon:hover svg {
    fill: var(--sc-bianco);
}

/* Riga finale: stesso fondo, separata da un filetto invece che da un
   cambio di colore. Una seconda fascia Teal qui sotto avrebbe aggiunto
   un terzo blocco cromatico a fine pagina senza motivo. */
.footer-bottom {
    max-width: var(--sc-max);
    margin: 0 auto;
    padding: 18px 20px 26px;
    border-top: 1px solid rgba(242, 239, 230, 0.14);
    text-align: center;
    color: rgba(242, 239, 230, 0.7);
    font-size: 13.5px;
}

.footer-bottom a {
    color: var(--footer-testo);
    text-decoration: none;
    border-bottom: 1px solid rgba(242, 239, 230, 0.35);
}

.footer-bottom a:hover {
    color: var(--sc-bianco);
    border-bottom-color: var(--sc-teal-chiaro);
}

/* Cards sezione servizi */
.services {
    padding: 80px 20px;
}

.card {
    background: var(--sc-bianco);
    border-radius: 20px;
    padding: 40px 30px;
    width: 30%;
    text-align: center;
    box-shadow: 0 15px 35px rgba(0,0,0,0.08);
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.card:hover {
    transform: translateY(-8px);
    box-shadow: 0 20px 45px rgba(0,0,0,0.12);
}

.card h3 {
    font-size: 20px;
    font-weight: 700;
    margin-bottom: 20px;
    color: var(--sc-notte);
    line-height: 25px;
}

.card p {
    font-size: 16px;
    color: var(--sc-testo-tenue);
    line-height: 1.6;
    margin-bottom: 30px;
    /* La view aveva height:100px inline per pareggiare le tre card: su
       mobile tagliava il testo. min-height allinea su desktop e lascia
       crescere il blocco quando serve. */
    min-height: 100px;
}

/* Etichetta "In arrivo". Nata per le card servizi della home (rimosse
   insieme ai loghi dei partner), resta in uso nella pagina Chi siamo. */
.badge-soon {
    display: inline-block;
    padding: 12px 26px;
    border: 1px dashed var(--sc-filo);
    border-radius: 25px;
    background: var(--sc-sabbia);
    color: var(--sc-senape-scuro);
    font-family: var(--sc-testo);
    font-size: 13px;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
}

.bottonecard {
    display: inline-block;
    background-color: var(--sc-senape);
    color: var(--sc-bianco);
    padding: 14px 28px;
    border-radius: 25px;
    text-decoration: none;
    font-weight: bold;
    transition: background 0.3s ease, transform 0.2s ease;
    box-shadow: 2px 2px 4px rgba(0,0,0,0.3);
}

.bottonecard:hover {
    background-color: var(--sc-senape-scuro);
    transform: scale(1.05);
}

.logocards {
    width: 100%;
    height: 80px;
    object-fit: contain;
    margin-bottom: 25px;
}

.logo-younited { transform: scale(1.05); }
.logo-karrycar { transform: scale(0.95); }
.logo-pratiche { transform: scale(1); }

.containercards {
    max-width: var(--sc-max);
    margin: 0 auto;
    display: flex;
    gap: 40px;
    justify-content: center;
    flex-wrap: wrap;
}

/* Filtro ricerca */
.filtro-ricerca-wrapper {
    width: 100%;
}

/* Schede della ricerca in home.
   Prima: fondo --sc-filo (che e' il colore dei bordi, non una
   superficie), filetto "orange" fuori palette, angoli via style inline
   nella view e nessuno stato di focus dichiarato — da cui il rettangolo
   nero del browser attorno alla scheda appena cliccata. */
.filtro-ricerca-tabs {
    display: flex;
    justify-content: center;
    gap: 2px;
}

.filtro-ricerca-tab {
    padding: 11px 22px;
    border: none;
    border-radius: 10px 10px 0 0;
    background: rgba(242, 239, 230, 0.82);
    color: var(--sc-testo-tenue, #546163);
    font-family: var(--sc-testo);
    font-size: 15px;
    font-weight: 500;
    line-height: 1.2;
    cursor: pointer;
    transition: background 0.2s, color 0.2s;
}

.filtro-ricerca-tab:hover {
    background: var(--sc-bianco);
}

/* Il filetto sotto e' Senape come il resto degli accenti, e sta sopra
   il pannello bianco: la scheda attiva e il pannello sono un pezzo solo. */
.filtro-ricerca-tab-attivo {
    background: var(--sc-bianco);
    color: var(--sc-notte);
    font-weight: 600;
    box-shadow: inset 0 -3px 0 var(--sc-senape);
}

/* Il contorno di messa a fuoco solo da tastiera. Su alcuni browser il
   clic del mouse lascia comunque il focus sul <button> e faceva
   comparire l'anello attorno alla scheda appena scelta. */
.filtro-ricerca-tab:focus {
    outline: none;
}

.filtro-ricerca-tab:focus-visible {
    outline: 3px solid var(--sc-senape);
    outline-offset: -3px;
}

/* Nessuno stacco fra schede e pannello: la scheda attiva e il pannello
   devono leggersi come un pezzo solo, altrimenti la linguetta sembra
   staccata da quello che comanda. */
.filtro-ricerca-contenuto-wrapper {
    position: relative;
    margin-top: 0;
}

.filtro-ricerca-contenuto {
    position: absolute;
    width: 100%;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.3s ease;
}

.filtro-ricerca-attivo {
    opacity: 1;
    pointer-events: auto;
    position: relative;
}

.filtro-ricerca-fade-out {
    opacity: 0;
}

/* .radio-option e .custom-radio rimossi: i selettori della ricerca in
   home sono diventati checkbox (.checkbox-option / .custom-check),
   perche' i filtri si combinano. Nessuna view li usava piu'. */

/* Ricerca categoria */
/* Il pulsante era centrato per via del text-align ereditato dall'hero.
   Da quando .search-form-container allinea a sinistra — che e' giusto
   per le etichette — questo va centrato per conto suo. */
.pulsanti-ricerca-categoria-cta {
    display: block;
    margin: 20px auto 0;
}

.pulsanti-ricerca-categoria-container {
    max-width: 900px;
    margin: 0 auto;
}

/* Stesso margine sotto della .form-row dell'altra scheda (22px): il
   filetto delle tre spunte deve staccarsi dalle categorie come si
   stacca dai campi, altrimenti le due schede respirano in modo
   diverso. */
.pulsanti-ricerca-categoria-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 15px;
    margin-bottom: 22px;
}

.pulsanti-ricerca-categoria-item {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 12px 18px;
    border-radius: 999px;
    background-color: var(--sc-sabbia);
    font-size: 16px;
    color: var(--sc-notte);
    transition: all 0.2s ease;
}

.pulsanti-ricerca-categoria-item:hover {
    cursor: pointer;
}

.pulsanti-ricerca-categoria-item .badge {
    background-color: var(--sc-senape);
    color: var(--sc-bianco);
    padding: 4px 10px;
    border-radius: 999px;
    font-size: 14px;
    transition: all 0.2s ease;
}

.pulsanti-ricerca-categoria-item.active {
    background-color: var(--sc-senape);
    color: var(--sc-bianco);
}

.pulsanti-ricerca-categoria-item.active .badge {
    background-color: var(--sc-bianco);
    color: var(--sc-senape);
}

.pulsanti-ricerca-categoria-cta {
    margin-top: 20px;
    padding: 12px 30px;
    border: none;
    border-radius: 26px;
    background-color: var(--sc-testo-sottile);
    color: var(--sc-bianco);
    cursor: not-allowed;
}

.pulsanti-ricerca-categoria-cta.active {
    background-color: var(--sc-senape);
    cursor: pointer;
}

/* Custom select */
.cs-wrap {
    position: relative;
    width: 100%;
    max-width: 360px;
    font-family: inherit;
}

/* Allineata alle select native: 38px e line-height corto. Era anche
   sotto il minimo di 44px per il tocco, ma qui la larghezza del
   bersaglio compensa. */
.cs-box {
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: 38px;
    padding: 0 16px;
    line-height: 1.2;
    border: 2px solid var(--sc-filo);
    border-radius: 50px;
    background: var(--sc-sabbia);
    cursor: pointer;
    user-select: none;
}

.cs-box:hover { border-color: var(--sc-testo-sottile); }

.cs-box.open {
    border-color: var(--sc-teal);
    box-shadow: 0 0 0 3px rgba(36, 144, 137, 0.18);
}

.cs-placeholder {
    font-size: 14px;
    color: var(--sc-testo-debole);
    flex: 1;
    flex-wrap: wrap;
    display: flex;
    gap: 4px;
}

.cs-arrow {
    font-size: 10px;
    color: var(--sc-testo-debole);
    margin-left: 8px;
    transition: transform .2s;
}

.cs-box.open .cs-arrow { transform: rotate(180deg); }

.cs-tag {
    background: var(--sc-senape);
    color: var(--sc-bianco);
    border-radius: 4px;
    padding: 2px 6px 2px 8px;
    font-size: 12px;
    display: flex;
    align-items: center;
    gap: 4px;
    text-shadow: 1px 1px 2px rgba(0,0,0,0.2);
}

.cs-tag-x {
    cursor: pointer;
    font-size: 14px;
    line-height: 1;
    opacity: .8;
}

.cs-tag-x:hover { opacity: 1; }

.cs-dropdown {
    display: none;
    position: absolute;
    top: calc(100% + 4px);
    left: 0;
    right: 0;
    background: var(--sc-bianco);
    border: 1px solid var(--sc-filo);
    border-radius: 8px;
    box-shadow: 2px 2px 8px rgba(0,0,0,0.12);
    z-index: 999;
    overflow: hidden;
}

.cs-dropdown.open { display: block; }

.cs-search {
    width: 100%;
    padding: 9px 12px;
    border: none;
    border-bottom: 1px solid var(--sc-filo);
    outline: none;
    font-size: 13px;
    box-sizing: border-box;
}

.cs-list {
    max-height: 220px;
    overflow-y: auto;
    color: black;
}

.cs-option {
    padding: 9px 14px;
    font-size: 13px;
    cursor: pointer;
    display: flex;
    align-items: center;
    gap: 8px;
}

.cs-option:hover    { background: var(--sc-senape-velo); }
.cs-option.selected { background: var(--sc-senape-velo); color: var(--sc-senape-scuro); }

.cs-check {
    width: 16px;
    height: 16px;
    border-radius: 3px;
    border: 1.5px solid var(--sc-testo-sottile);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    font-size: 10px;
    font-weight: 700;
}

.cs-option.selected .cs-check {
    background: var(--sc-senape);
    border-color: var(--sc-senape);
    color: var(--sc-bianco);
}

.cs-empty {
    padding: 10px 14px;
    font-size: 13px;
    color: var(--sc-testo-debole);
    text-align: center;
}

/* Slider */
.slider-wrap {
    display: flex;
    flex-direction: column;
    gap: 8px;
    width: 100%;
}

.slider-label {
    font-size: 13px;
    font-weight: 600;
    color: var(--sc-notte);
}

.slider-track-wrap {
    position: relative;
    height: 22px;
    display: flex;
    align-items: center;
}

.slider-track-wrap::before {
    content: '';
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    transform: translateY(-50%);
    height: 6px;
    border-radius: 50px;
    background: var(--sc-filo);
}

.slider {
    -webkit-appearance: none;
    appearance: none;
    width: 100%;
    height: 22px;
    outline: none;
    cursor: pointer;
    position: relative;
    z-index: 2;
    background: transparent;
}

.slider::-webkit-slider-runnable-track {
    height: 22px;
    border-radius: 50px;
    background: transparent;
}

.slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: var(--sc-senape);
    cursor: pointer;
    box-shadow: 1px 1px 4px rgba(0,0,0,0.2);
    border: 3px solid var(--sc-bianco);
    margin-top: 0;
    transition: transform .15s;
}

.slider::-webkit-slider-thumb:hover { transform: scale(1.15); }

.slider::-moz-range-thumb {
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: var(--sc-senape);
    cursor: pointer;
    box-shadow: 1px 1px 4px rgba(0,0,0,0.2);
    border: 3px solid var(--sc-bianco);
}

.slider::-moz-range-track {
    height: 6px;
    border-radius: 50px;
    background: var(--sc-filo);
}

.slider::-moz-range-progress {
    height: 6px;
    border-radius: 50px;
    background: var(--sc-senape);
}

.slider-fill {
    position: absolute;
    top: 50%;
    left: 0;
    transform: translateY(-50%);
    height: 6px;
    border-radius: 50px;
    background: var(--sc-senape);
    pointer-events: none;
    z-index: 1;
}

.slider-value {
    font-size: 14px;
    font-weight: 600;
    color: var(--sc-senape);
}


/* ============================================================
   PRODUCT DETAIL PAGE  (prefisso pd-)
   ============================================================ */

/* ── Container & Layout ─────────────────────────────────── */
.pd-container {
    max-width: var(--sc-max);
    margin: 0 auto;
    padding: 40px 20px;
}

.pd-product-layout {
    display: grid;
    grid-template-columns: 1fr 450px;
    gap: 40px;
    margin-bottom: 60px;
}

.pd-product-gallery {
    min-width: 0;
}

/* ── Galleria ───────────────────────────────────────────── */
/* ── Galleria ────────────────────────────────────────────────
   Il binario delle anteprime mostra al massimo 8 miniature.
   Prima .pd-thumb era flex:1, quindi con 24 foto le anteprime
   scendevano a ~45px di larghezza per 80px di altezza: schiacciate
   e illeggibili. Ora hanno larghezza fissa e il binario scorre.
   Frecce e contatore sono gestiti da public/js/galleria.js. */
.pd-gallery {
    position: relative;
    margin-bottom: 20px;
}

/* Foto grande: cliccabile, con le frecce ai lati */
.pd-gallery-main {
    position: relative;
    width: 100%;
    height: 420px;
    border-radius: 10px;
    overflow: hidden;
    background: var(--sc-filo);
    margin-bottom: 12px;
}

.pd-gallery-main img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    opacity: 1;
    transition: opacity 0.25s ease;
}

.pd-gallery-main img.pd-fading {
    opacity: 0;
}

/* Contatore "3 / 24" sulla foto grande */
.pd-gallery-count {
    position: absolute;
    right: 14px;
    bottom: 14px;
    z-index: 2;
    padding: 5px 12px;
    border-radius: 20px;
    background: rgba(22, 42, 48, 0.72);
    color: var(--sc-bianco);
    font-family: var(--sc-testo);
    font-size: 13px;
    font-weight: 500;
    letter-spacing: 0.02em;
    pointer-events: none;
}

/* Binario delle anteprime */
.pd-thumbs-wrap {
    position: relative;
}

.pd-gallery-thumbs {
    display: flex;
    gap: 10px;
    overflow-x: auto;
    scroll-behavior: smooth;
    scroll-snap-type: x proximity;
    scrollbar-width: none;
    -ms-overflow-style: none;
    -webkit-overflow-scrolling: touch;
}

.pd-gallery-thumbs::-webkit-scrollbar {
    display: none;
}

/* NON PIU' USATE: le frecce sono passate sulla foto grande
   (.pd-freccia). Regole tenute finche' non si verifica che nessun'altra
   pagina le usi. */
.pd-thumbs-arrow {
    position: absolute;
    top: 50%;
    z-index: 3;
    display: none;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    margin-top: -17px;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: var(--sc-notte);
    color: var(--sc-bianco);
    font-size: 18px;
    line-height: 1;
    cursor: pointer;
    opacity: 0.9;
    transition: opacity 0.2s, background 0.2s;
}

.pd-thumbs-wrap.pd-scrollable .pd-thumbs-arrow {
    display: flex;
}

.pd-thumbs-arrow:hover {
    background: var(--sc-teal);
    opacity: 1;
}

/* Disabilitata quando si e' gia' a fondo corsa */
.pd-thumbs-arrow[disabled] {
    opacity: 0.25;
    cursor: default;
}

.pd-thumbs-arrow.pd-prev { left: -6px; }
.pd-thumbs-arrow.pd-next { right: -6px; }

.pd-thumbs-arrow:focus-visible {
    outline: 3px solid var(--sc-senape);
    outline-offset: 2px;
}

.pd-thumb {
    /* 8 anteprime in vista: 100% meno i 7 spazi da 10px, diviso 8 */
    flex: 0 0 calc((100% - 70px) / 8);
    scroll-snap-align: start;
    height: 80px;
    border-radius: 6px;
    overflow: hidden;
    cursor: pointer;
    border: 3px solid transparent;
    transition: border-color 0.2s ease, opacity 0.2s ease;
    background: var(--sc-filo);
}

.pd-thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.pd-thumb:not(.active) {
    opacity: 0.6;
}

.pd-thumb:not(.active):hover {
    opacity: 0.85;
    border-color: var(--sc-senape);
}

.pd-thumb.active {
    border-color: var(--sc-senape);
    opacity: 1;
}

/* ── Header prodotto ────────────────────────────────────── */
.pd-product-header {
    background: white;
    border-radius: 12px;
    padding: 24px;
    margin-bottom: 0;
    box-shadow: 0 2px 10px rgba(0,0,0,0.08);
}

.pd-product-title-main {
    font-family: var(--sc-display);
    font-size: 28px;
    margin-bottom: 8px;
    color: var(--sc-notte);
}

.pd-product-price-main {
    font-size: 34px;
    color: var(--sc-teal);
    font-weight: 700;
    margin-bottom: 8px;
}

.pd-product-location {
    color: var(--sc-testo-debole);
    font-size: 15px;
    margin-bottom: 14px;
}

.pd-product-specs {
    display: flex;
    flex-wrap: wrap;
    gap: 16px;
    align-items: center;
    padding-top: 14px;
    border-top: 1px solid var(--sc-sabbia);
}

.pd-spec-item {
    display: flex;
    align-items: center;
    gap: 6px;
    color: var(--sc-testo-tenue);
    font-size: 14px;
    font-weight: 500;
}

.pd-spec-icon {
    width: 18px;
    height: 18px;
    flex-shrink: 0;
}

/* ── Blocco comune sezioni ──────────────────────────────── */
.pd-detail-block {
    background: white;
    border-radius: 12px;
    padding: 28px;
    margin-top: 24px;
    box-shadow: 0 2px 10px rgba(0,0,0,0.08);
}

.pd-detail-block-header {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 22px;
    padding-bottom: 14px;
    border-bottom: 2px solid var(--sc-sabbia);
}

.pd-detail-block-header svg {
    width: 22px;
    height: 22px;
    min-width: 22px;
    stroke: var(--sc-teal);
    fill: none;
    flex-shrink: 0;
}

.pd-detail-block-header h2 {
    font-family: var(--sc-display);
    font-size: 20px;
    color: var(--sc-notte);
    font-weight: 700;
    margin: 0;
}

/* ── Dati tecnici ───────────────────────────────────────── */
.pd-specs-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    border-radius: 8px;
    overflow: hidden;
    border: 1px solid var(--sc-filo);
}

.pd-spec-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 11px 16px;
    border-bottom: 1px solid var(--sc-filo);
    transition: background 0.15s;
}

.pd-spec-row:nth-child(odd)  { background: var(--sc-bianco); }
.pd-spec-row:nth-child(even) { background: var(--sc-bianco); }
.pd-spec-row:hover           { background: var(--sc-senape-velo); }

/* Spunta delle dotazioni: era un colore verde inline fuori palette */
.pd-spec-si {
    color: var(--sc-teal);
    font-weight: 700;
}
.pd-spec-row:nth-last-child(-n+2) { border-bottom: none; }

.pd-spec-label {
    font-size: 13px;
    color: var(--sc-testo-debole);
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: 0.03em;
}

.pd-spec-value {
    font-size: 14px;
    color: var(--sc-notte);
    font-weight: 600;
    text-align: right;
}

/* ── Optional ───────────────────────────────────────────── */
.pd-optional-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 10px;
}

.pd-optional-item {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 14px;
    color: var(--sc-notte);
    padding: 9px 12px;
    border-radius: 8px;
    background: var(--sc-bianco);
    border: 1px solid var(--sc-filo);
    transition: background 0.15s, border-color 0.15s;
}

.pd-optional-item:hover {
    background: var(--sc-senape-velo);
    border-color: var(--sc-senape);
}

.pd-optional-item svg {
    width: 15px;
    height: 15px;
    min-width: 15px;
    stroke: var(--sc-teal);
    stroke-width: 3;
    fill: none;
    flex-shrink: 0;
}

/* ── Accordion ──────────────────────────────────────────── */
.pd-accordion-extra {
    display: none;
}

.pd-specs-grid.pd-open    .pd-accordion-extra,
.pd-optional-grid.pd-open .pd-accordion-extra {
    display: flex;
}

.pd-accordion-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    width: 100%;
    margin-top: 16px;
    padding: 12px 20px;
    border: 2px solid var(--sc-teal);
    border-radius: 30px;
    background: transparent;
    color: var(--sc-teal);
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    transition: background 0.2s, color 0.2s;
    font-family: var(--sc-testo);
}

.pd-accordion-btn:hover {
    background: var(--sc-teal);
    color: white;
}

.pd-accordion-btn:hover .pd-accordion-chevron {
    stroke: white;
}

.pd-accordion-btn-count {
    color: var(--sc-senape);
    font-weight: 700;
}

.pd-accordion-btn:hover .pd-accordion-btn-count {
    color: var(--sc-senape-chiaro);
}

.pd-accordion-chevron {
    width: 18px;
    height: 18px;
    min-width: 18px;
    stroke: var(--sc-teal);
    fill: none;
    transition: transform 0.3s ease;
    flex-shrink: 0;
}

.pd-accordion-btn.pd-open .pd-accordion-chevron {
    transform: rotate(180deg);
}

/* ── Recensioni ─────────────────────────────────────────── */
.pd-review-summary {
    display: flex;
    align-items: center;
    gap: 20px;
    margin-bottom: 22px;
}

.pd-review-score {
    font-size: 52px;
    font-weight: 700;
    color: var(--sc-teal);
    line-height: 1;
    font-family: var(--sc-display);
}

.pd-stars {
    display: flex;
    gap: 3px;
    margin-bottom: 4px;
}

.pd-star        { font-size: 22px; color: var(--sc-filo); }
.pd-star.filled { color: var(--sc-senape); }

.pd-review-count {
    font-size: 13px;
    color: var(--sc-testo-debole);
}

.pd-review-bars {
    display: flex;
    flex-direction: column;
    gap: 10px;
    margin-bottom: 24px;
}

.pd-bar-row {
    display: flex;
    align-items: center;
    gap: 12px;
}

.pd-bar-label {
    font-size: 13px;
    color: var(--sc-testo-tenue);
    width: 130px;
    flex-shrink: 0;
}

.pd-bar-track {
    flex: 1;
    height: 7px;
    background: var(--sc-filo);
    border-radius: 50px;
    overflow: hidden;
}

.pd-bar-fill {
    height: 100%;
    background: linear-gradient(90deg, var(--sc-teal-scuro), var(--sc-teal));
    border-radius: 50px;
}

.pd-bar-val {
    font-size: 13px;
    font-weight: 700;
    color: var(--sc-teal);
    width: 28px;
    text-align: right;
}

.pd-reviews-list {
    display: flex;
    flex-direction: column;
    gap: 14px;
}

.pd-review-card {
    border: 1px solid var(--sc-filo);
    border-radius: 10px;
    padding: 16px 18px;
    transition: box-shadow 0.2s;
}

.pd-review-card:hover {
    box-shadow: 0 4px 14px rgba(0,0,0,0.08);
}

.pd-review-card-top {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 10px;
}

.pd-review-avatar {
    width: 38px;
    height: 38px;
    border-radius: 50%;
    background: var(--sc-teal);
    color: white;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 13px;
    font-weight: 700;
    flex-shrink: 0;
}

.pd-review-author {
    font-size: 14px;
    font-weight: 700;
    color: var(--sc-notte);
}

.pd-review-date {
    font-size: 12px;
    color: var(--sc-testo-sottile);
}

.pd-review-stars-inline {
    margin-left: auto;
    color: var(--sc-senape);
    font-size: 16px;
    letter-spacing: 1px;
}

.pd-review-text {
    font-size: 14px;
    color: var(--sc-testo-tenue);
    line-height: 1.65;
    margin: 0;
}

/* ── Rivenditore ────────────────────────────────────────── */
.pd-dealer-profile {
    display: flex;
    gap: 20px;
    margin-bottom: 20px;
    align-items: flex-start;
}

.pd-dealer-logo-wrap {
    width: 90px;
    height: 90px;
    border-radius: 10px;
    border: 1px solid var(--sc-filo);
    overflow: hidden;
    flex-shrink: 0;
    background: var(--sc-sabbia);
}

.pd-dealer-logo-wrap img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}

.pd-dealer-logo-fallback {
    width: 100%;
    height: 100%;
    display: none;
    align-items: center;
    justify-content: center;
}

.pd-dealer-logo-fallback svg {
    width: 40px;
    height: 40px;
    stroke: var(--sc-testo-sottile);
    fill: none;
}

.pd-dealer-name {
    font-size: 17px;
    font-weight: 700;
    color: var(--sc-notte);
    margin-bottom: 10px;
}

.pd-dealer-info-row {
    display: flex;
    align-items: center;
    gap: 7px;
    font-size: 13px;
    color: var(--sc-testo-tenue);
    margin-bottom: 6px;
}

.pd-dealer-info-row svg {
    width: 15px;
    height: 15px;
    min-width: 15px;
    stroke: var(--sc-teal);
    fill: none;
    flex-shrink: 0;
}

.pd-dealer-badge-row {
    display: flex;
    gap: 8px;
    margin-top: 10px;
    flex-wrap: wrap;
}

.pd-dealer-badge {
    background: var(--sc-teal-tenue);
    color: var(--sc-teal);
    font-size: 12px;
    font-weight: 600;
    padding: 4px 10px;
    border-radius: 20px;
}

.pd-dealer-desc {
    font-size: 14px;
    color: var(--sc-testo-tenue);
    line-height: 1.7;
    padding: 16px;
    background: var(--sc-bianco);
    border-radius: 8px;
    border-left: 3px solid var(--sc-teal);
    margin-bottom: 20px;
}

.pd-dealer-desc p {
    margin: 0;
}

.pd-delivery-info {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 14px;
    margin-bottom: 20px;
}

.pd-delivery-card {
    display: flex;
    gap: 12px;
    padding: 16px;
    border-radius: 10px;
    border: 1px solid var(--sc-filo);
    background: var(--sc-bianco);
    transition: border-color 0.2s;
}

.pd-delivery-card:hover {
    border-color: var(--sc-senape);
}

.pd-delivery-card > svg {
    width: 28px;
    height: 28px;
    min-width: 28px;
    stroke: var(--sc-senape);
    fill: none;
    flex-shrink: 0;
    margin-top: 2px;
}

.pd-delivery-title {
    font-size: 14px;
    font-weight: 700;
    color: var(--sc-notte);
    margin-bottom: 4px;
}

.pd-delivery-text {
    font-size: 13px;
    color: var(--sc-testo-tenue);
    line-height: 1.5;
}

.pd-map-wrap {
    border-radius: 10px;
    overflow: hidden;
}

.pd-map-wrap iframe {
    width: 100%;
    height: 240px;
    border: none;
    display: block;
}

.pd-map-cta {
    display: block;
    text-align: center;
    padding: 11px;
    background: var(--sc-senape);
    color: white;
    font-size: 14px;
    font-weight: 600;
    text-decoration: none;
    transition: background 0.2s;
}

.pd-map-cta:hover {
    background: var(--sc-senape-scuro);
}

/* ── Pannello acquisto ──────────────────────────────────── */
.pd-purchase-panel {
    position: sticky;
    top: 20px;
    align-self: start;
}

/* ── Scheda contatto (in cima al pannello acquisto) ──────── */
.pd-contact-card {
    background: var(--sc-teal);
    border-radius: 12px;
    padding: 22px;
    margin-bottom: 20px;
    color: var(--sc-bianco);
    box-shadow: 0 2px 14px rgba(22, 42, 48, 0.16);
}

.pd-contact-price {
    font-family: var(--sc-display);
    font-size: 30px;
    font-weight: 700;
    line-height: 1.1;
}

.pd-contact-note {
    margin: 8px 0 16px;
    font-size: 13.5px;
    line-height: 1.55;
    color: rgba(254, 254, 253, 0.88);
}

/* Doppia classe: .pd-btn e' dichiarata piu' sotto con
   display:inline-block e a parita' di peso vincerebbe lei,
   mandando l'icona a capo sopra il testo. */
.pd-btn.pd-btn-whatsapp {
    display: flex;
    gap: 9px;
    align-items: center;
    justify-content: center;
    width: 100%;
    padding: 13px 18px;
    border: none;
    border-radius: 26px;
    background: var(--sc-bianco);
    color: var(--sc-teal-scuro);
    font-family: var(--sc-testo);
    font-size: 15.5px;
    font-weight: 600;
    text-decoration: none;
    cursor: pointer;
    transition: background 0.2s, transform 0.15s;
}

/* RETE DI SICUREZZA — vale per ogni pulsante che contenga l'icona.
   Il problema si e' ripresentato tre volte in punti diversi: ogni
   volta perche' la classe del contenitore era dichiarata prima di
   una regola generica (.btn, .pd-btn) con display:inline-block, che
   a parita' di specificita' vinceva e mandava l'icona a capo.
   Questa regola vale 0,1,1 grazie a :has(), quindi batte le classi
   generiche a prescindere dall'ordine, e copre anche i pulsanti che
   aggiungeremo in futuro senza doversene ricordare. */
a:has(> .icona-whatsapp),
button:has(> .icona-whatsapp) {
    display: inline-flex;
    gap: 9px;
    align-items: center;
    justify-content: center;
    line-height: 1;
}

/* L'icona porta i colori del marchio nei suoi due tracciati:
   qui si imposta solo la dimensione. */
.icona-whatsapp {
    width: 21px;
    height: 21px;
    flex-shrink: 0;
    display: block;
}

.pd-btn.pd-btn-whatsapp:hover {
    background: var(--sc-teal-velo);
    transform: translateY(-1px);
}

/* ── Servizi non ancora attivi ───────────────────────────── */
.pd-badge-soon {
    display: inline-block;
    padding: 3px 10px;
    border-radius: 12px;
    background: var(--sc-sabbia);
    color: var(--sc-senape-scuro);
    font-family: var(--sc-testo);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    white-space: nowrap;
}

.pd-servizi-intro {
    margin-bottom: 14px;
    padding: 16px 18px;
    border-left: 3px solid var(--sc-senape);
    border-radius: 8px;
    background: var(--sc-sabbia);
}

.pd-servizi-intro p {
    margin: 8px 0 0;
    font-size: 13.5px;
    line-height: 1.55;
    color: var(--sc-testo-tenue);
}

.pd-servizi-intro .pd-badge-soon {
    background: var(--sc-senape);
    color: var(--sc-bianco);
}

/* Le schede dei servizi non attivi restano leggibili ma arretrano:
   raccontano cosa arrivera', senza fingere di essere azionabili. */
.pd-service-soon {
    box-shadow: none;
    border: 1px solid var(--sc-filo);
    background: var(--sc-bianco);
}

.pd-service-soon .pd-service-icon  { color: var(--sc-testo-sottile); }
.pd-service-soon .pd-service-title { color: var(--sc-testo-tenue); }

/* Il badge "In arrivo" va a fine riga d'intestazione */
.pd-service-header .pd-badge-soon {
    margin-left: auto;
}

.pd-service-card {
    background: white;
    border-radius: 12px;
    padding: 22px;
    margin-bottom: 16px;
    box-shadow: 0 2px 10px rgba(0,0,0,0.08);
}

.pd-service-header {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px;
    margin-bottom: 12px;
}

.pd-service-icon {
    width: 28px;
    height: 28px;
    min-width: 28px;
    flex-shrink: 0;
}

.pd-service-title {
    font-size: 16px;
    font-weight: 700;
    color: var(--sc-notte);
    margin: 0;
}

.pd-service-price {
    font-size: 20px;
    font-weight: 700;
    color: var(--sc-teal);
    margin-bottom: 8px;
}

.pd-service-description {
    font-size: 13px;
    color: var(--sc-testo-tenue);
    line-height: 1.6;
    margin-bottom: 14px;
}

.pd-btn {
    width: 100%;
    padding: 12px 24px;
    border-radius: 25px;
    font-weight: 700;
    text-decoration: none;
    display: inline-block;
    text-align: center;
    transition: all 0.2s;
    border: 2px solid transparent;
    cursor: pointer;
    font-size: 15px;
    font-family: var(--sc-testo);
    box-sizing: border-box;
    box-shadow: 2px 2px 4px rgba(0,0,0,0.3)
}

.pd-btn-primary {
    background: var(--sc-senape);
    color: white;
    border-color: var(--sc-senape);
}

.pd-btn-primary:hover {
    background: var(--sc-senape-scuro);
    border-color: var(--sc-senape-scuro);
}

.pd-btn-secondary {
    background: white;
    color: var(--sc-senape);
    border-color: var(--sc-senape);
}

.pd-btn-secondary:hover {
    background: var(--sc-senape-velo);
}

.pd-total-section {
    background: var(--sc-senape);
    border-radius: 12px;
    padding: 22px;
    color: white;
    box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}

.pd-total-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 16px;
}

.pd-total-label  { font-size: 20px; font-weight: 700; }
.pd-total-amount { font-size: 28px; font-weight: 700; }

/* ── Prodotti correlati ─────────────────────────────────── */
.pd-related-section {
    margin-top: 60px;
}

.pd-section-title {
    font-family: var(--sc-display);
    font-size: 28px;
    margin-bottom: 24px;
    color: var(--sc-notte);
}

.pd-related-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 20px;
    position: relative;
}

.pd-product-card {
    background: white;
    border-radius: 8px;
    overflow: hidden;
    box-shadow: 0 2px 10px rgba(0,0,0,0.08);
    transition: transform 0.3s, box-shadow 0.3s;
}

.pd-product-card:hover {
    transform: translateY(-4px);
    box-shadow: 0 6px 20px rgba(0,0,0,0.13);
}

.pd-product-image {
    width: 100%;
    height: 160px;
    background: var(--sc-filo);
    overflow: hidden;
}

.pd-product-image img,
.pd-product-image svg {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.pd-product-info     { padding: 14px; }
.pd-product-title    { font-weight: 700; font-size: 15px; margin-bottom: 4px; color: var(--sc-notte); }
.pd-product-subtitle { color: var(--sc-testo-debole); font-size: 13px; margin-bottom: 8px; }
.pd-product-price    { color: var(--sc-teal); font-size: 20px; font-weight: 700; }

.pd-nav-arrow { display: none; }

/* ── Responsive ─────────────────────────────────────────── */
@media (max-width: 1100px) {
    .pd-product-layout {
        grid-template-columns: 1fr;
    }
    .pd-purchase-panel {
        position: static;
    }
}

@media (max-width: 768px) {
    .pd-specs-grid     { grid-template-columns: 1fr; }
    .pd-optional-grid  { grid-template-columns: 1fr 1fr; }
    .pd-delivery-info  { grid-template-columns: 1fr; }
    .pd-dealer-profile { flex-direction: column; }
    .pd-related-grid   { grid-template-columns: repeat(2, 1fr); }
    .pd-gallery-main   { height: 280px; }
    /* 4 anteprime in vista */
    .pd-thumb          { flex-basis: calc((100% - 30px) / 4); height: 60px; }
    .pd-thumbs-arrow   { display: none !important; }  /* su touch si scorre col dito */
}

@media (max-width: 480px) {
    .pd-optional-grid { grid-template-columns: 1fr; }
    .pd-related-grid  { grid-template-columns: 1fr 1fr; }
    /* 3 anteprime in vista */
    .pd-thumb         { flex-basis: calc((100% - 20px) / 3); }
}


/* ══════════════════════════════════════════════════════════════
   SEO / ACCESSIBILITÀ — aggiunte (blocco appeso)
   Card e loghi ora sono <a> (link interni per il crawl): qui azzero
   gli stili di default degli anchor e aggiungo il focus da tastiera.
   ══════════════════════════════════════════════════════════════ */

/* La card camper ora è un link (era un <div>): resta un grid item,
   ma va tolta la sottolineatura e ereditato il colore del testo. */
.product-card {
    display: block;
    text-decoration: none;
    color: inherit;
}

/* Logo header/footer avvolto in <a> verso la home:
   l'anchor riempie il cerchio e centra l'immagine. */
.logo-circle a,
.footer-logo a {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    line-height: 0;
    text-decoration: none;
}

/* Focus visibile per la navigazione da tastiera (WCAG). */
.product-card:focus-visible,
.nav-links a:focus-visible,
.social-icon:focus-visible,
.logo-circle a:focus-visible,
.footer-logo a:focus-visible {
    outline: 3px solid var(--sc-senape);
    outline-offset: 2px;
    border-radius: 8px;
}


/* ══════════════════════════════════════════════════════════════
   SLIDER VETRINA (binario orizzontale scorrevole)
   La view usa: .product-slider > (.nav-arrow + .product-track > .product-card)
   ══════════════════════════════════════════════════════════════ */
/* Fascia vetrina (sfondo fotografico + carosello).
   Sostituisce lo style inline "padding: 60px 0" che la view aveva sulla
   .container: azzerando il padding laterale, titolo e card finivano
   incollati al bordo dello schermo. */
.container-vetrina {
    position: relative;
    z-index: 1;
}

/* Le frecce stanno nei margini laterali, non sopra le schede: il
   binario si restringe di quanto serve a farle stare fuori. Prima
   erano a -20px e coprivano il bordo della prima e dell'ultima card. */
.product-slider {
    position: relative;
    margin-bottom: 40px;
    padding: 0 56px;
}

/* Il binario ha padding 5px per non tagliare le ombre delle card:
   il margine negativo riallinea la prima card al titolo sopra. */
.product-track {
    margin-left: -5px;
    margin-right: -5px;
}
.product-track {
    display: flex;
    gap: 25px;
    overflow-x: auto;
    scroll-behavior: smooth;
    scroll-snap-type: x mandatory;
    padding: 5px 5px 20px;          /* respiro per ombre card e scrollbar */
    -ms-overflow-style: none;       /* IE/Edge */
    scrollbar-width: none;          /* Firefox */
}
.product-track::-webkit-scrollbar { /* Chrome/Safari */
    display: none;
}
.product-track .product-card {
    /* Larghezza calcolata perche' si vedano esattamente 3 schede intere
       piu' meta' della quarta: quel mezzo taglio e' il segnale che il
       binario continua. Con una larghezza fissa il numero di schede in
       vista cambiava col monitor, e a 1400px la quarta entrava quasi
       tutta.
       Formula: (larghezza utile - spazi) / schede visibili. */
    flex: 0 0 calc((100% - 2.5 * 16px) / 3.5);
    scroll-snap-align: start;
}



/* ══════════════════════════════════════════════════════════════
   RESPONSIVE — HOME E LAYOUT GENERALE
   ──────────────────────────────────────────────────────────────
   Fino a qui il file aveva media query solo per il dettaglio
   prodotto (.pd-*) e per le card del carosello. Home, footer e
   form di ricerca non ne avevano nessuna: .card era width:30%,
   quindi a 390px diventava una colonna da 117px.

   Breakpoint allineati al resto del progetto:
     992px  tablet / dove entra in gioco il menu hamburger
     768px  telefono
     480px  telefono stretto (gia' usato dal carosello)

   NB il binario .product-track NON si tocca: ha gia' overflow-x,
   scroll-snap e card a larghezza fissa nel blocco SLIDER VETRINA.
   ══════════════════════════════════════════════════════════════ */

@media (max-width: 992px) {

    .container {
        padding: 48px 20px;
    }

    .container-vetrina {
        padding: 48px 20px;
    }

    .product-slider {
        padding: 0 44px;
    }

    /* 2 schede e mezzo */
    .product-track .product-card {
        flex-basis: calc((100% - 1.5 * 16px) / 2.5);
    }

    /* .brands-section e .blog-section sono riquadri con ombra e angoli
       tondi, ma sono anche .container: senza margine laterale toccano il
       bordo dello schermo appena il viewport scende sotto i 1200px. */
    .brands-section,
    .blog-section {
        margin-left: 20px;
        margin-right: 20px;
    }

    /* ---- Hero ---- */
    .hero {
        min-height: auto;            /* erano 800px fissi */
        padding: 64px 20px 48px;
    }

    .hero h1 {
        font-size: 34px;
        line-height: 1.2;
    }

    /* Sul telefono resta piu' contenuto del desktop, ma cresce con il
       titolo: 34/20 tiene la stessa proporzione di 48/26. */
    .hero p {
        font-size: 20px;
        margin-bottom: 28px;
    }

    /* ---- Form di ricerca ---- */
    .search-form-container {
        padding: 20px 16px;
        /* Angoli superiori dritti: su schermo stretto le schede
           occupano tutta la larghezza e un pannello arrotondato sopra
           sembrava staccato da quello che comanda. */
        border-radius: 0 0 14px 14px;
    }

    /* Le schede si dividono lo spazio invece di stare al centro */
    .filtro-ricerca-tabs {
        gap: 0;
    }

    .filtro-ricerca-tab {
        flex: 1;
        padding: 11px 8px;
        font-size: 14px;
    }

    .filtro-ricerca-tab:first-child { border-radius: 12px 0 0 0; }
    .filtro-ricerca-tab:last-child  { border-radius: 0 12px 0 0; }

    /* Griglia a una colonna: flex-direction non ha piu' effetto da
       quando .form-row e' grid. */
    .hero .form-row {
        grid-template-columns: 1fr;
        gap: 14px;
    }

    /* .select-wrapper e' 250px fissi: qui deve seguire la colonna */
    .hero .form-group,
    .hero .select-wrapper,
    .hero .cs-wrap {
        width: 100%;
        max-width: 100%;
    }

    /* sotto i 16px iOS Safari zooma da solo al focus del campo */
    .hero .form-group input,
    .hero .form-group select,
    .hero .cs-search {
        font-size: 16px;
    }

    .filtro-ricerca-tab {
        flex: 1 1 0;
        padding: 10px 8px;
        font-size: 13px;
        line-height: 1.3;
    }

    .pulsanti-ricerca-categoria-grid {
        grid-template-columns: repeat(2, 1fr);
    }

    /* ---- Titoli di sezione ---- */
    .section-title,
    .section-camper-title {
        font-size: 28px;
        line-height: 1.25;
        margin-bottom: 24px;
    }

    /* ---- Card servizi ---- */
    .services {
        padding: 56px 20px;
    }

    .containercards {
        gap: 24px;
    }

    .card {
        width: calc(50% - 12px);
    }

    /* ---- CTA compra/vendi ----
       padding 50px + icona 150px + gap 40px non ci stanno:
       e' la fonte principale di scroll orizzontale della home. */
    .cta-section {
        flex-direction: column;
        gap: 24px;
        margin: 48px 0;
        padding: 32px 24px;
        text-align: center;
    }

    .cta-content h2 {
        font-size: 26px;
        line-height: 1.25;
    }

    .cta-buttons {
        justify-content: center;
        flex-wrap: wrap;
    }


    /* ---- Blog ---- */
    .blog-header {
        flex-direction: column;
        align-items: flex-start;
        gap: 12px;
    }

    /* ---- Footer ---- */
    .footer-content {
        grid-template-columns: 1fr 1fr;
        gap: 32px;
        padding: 48px 20px 24px;
        margin-bottom: 24px;
    }

    .footer-brand {
        grid-column: 1 / -1;
        flex-direction: column;
        gap: 16px;
    }
}

@media (max-width: 768px) {

    .container {
        padding: 40px 16px;
    }

    .container-vetrina {
        padding: 40px 16px;
    }

    .brands-section,
    .blog-section {
        margin-left: 16px;
        margin-right: 16px;
    }

    .brands-section {
        padding: 32px 16px;
    }

    .blog-section {
        padding-left: 16px;
        padding-right: 16px;
        padding-bottom: 32px;
    }

    .hero {
        padding: 56px 16px 40px;
    }

    .hero h1 {
        font-size: 30px;
    }

    .services {
        padding: 48px 16px;
    }

    /* Una card per riga: a 390px il 30% originale dava colonne da 117px */
    .card {
        width: 100%;
        padding: 28px 20px;
    }

    .card p {
        min-height: 0;               /* niente allineamento: sono in colonna */
    }

    .pulsanti-ricerca-categoria-grid {
        grid-template-columns: 1fr;
    }

    /* Il binario si scorre col dito e ha lo scroll-snap: le frecce
       coprirebbero le foto. Togli queste due regole per riaverle. */
    .nav-arrow {
        display: none;
    }

    /* Senza frecce il margine che le ospitava e' spazio sprecato */
    .product-slider {
        padding: 0;
    }

    /* 1 scheda e mezzo: il taglio dice che il binario continua */
    .product-track .product-card {
        flex-basis: calc((100% - 0.5 * 16px) / 1.5);
    }

    .cta-section {
        padding: 28px 20px;
    }

    .cta-icon {
        width: 140px;
        height: 140px;
    }

    /* La regola base e' gia' al 100%: qui non serve piu' nulla da quando
       il marchio ha sostituito l'illustrazione che debordava. */

    .cta-content h2 {
        font-size: 24px;
    }

    .cta-buttons {
        flex-direction: column;
        gap: 12px;
    }

    .cta-buttons .btn {
        display: block;
        text-align: center;
    }

    /* Il display:block qui sopra sovrascriveva l'inline-flex del pulsante
       WhatsApp e mandava l'icona a capo. Flex centrato: stessa larghezza
       piena, ma icona e testo restano in riga. */
    .cta-buttons .btn.btn-wa-inline {
        display: flex;
        justify-content: center;
    }

    .brand-logo {
        max-height: 36px;
        max-width: 108px;
    }

    .footer-content {
        grid-template-columns: 1fr;
        gap: 28px;
        padding: 40px 16px 24px;
        text-align: center;
    }

    /* Il blocco marchio era in colonna ma allineato a sinistra: il testo
       veniva centrato e il logo no. */
    .footer-brand {
        align-items: center;
    }

    .footer-contatti .social-links {
        justify-content: center;
    }
}

@media (max-width: 480px) {

    /* Deve stare dopo i blocchi 992 e 768: hanno la stessa specificita'
       e su un telefono corrispondono tutti e tre, quindi decide l'ordine
       nel file. 1 scheda e un quarto. */
    .product-track .product-card {
        flex-basis: calc((100% - 0.25 * 16px) / 1.25);
    }

    .hero h1 {
        font-size: 26px;
    }

    .section-title,
    .section-camper-title {
        font-size: 24px;
    }

    .filtro-ricerca-tab {
        font-size: 12px;
        padding: 10px 4px;
    }
}


/* ══════════════════════════════════════════════════════════════
   PAGINE EDITORIALI  (chi-siamo, e le prossime statiche)
   ──────────────────────────────────────────────────────────────
   La pagina usa --sc-max come tutte le altre, non una colonna
   stretta: cambiare misura tra una pagina e l'altra fa sembrare il
   sito assemblato a pezzi.

   La leggibilita' si risolve dentro: i paragrafi hanno un max-width
   in ch (78ch nei blocchi, 60ch nell'occhiello), mentre fasce, numeri
   e CTA occupano tutta la larghezza. E' quel limite a tenere corta la
   riga di lettura, non la larghezza della pagina.
   ══════════════════════════════════════════════════════════════ */

.pagina-editoriale {
    max-width: var(--sc-max);
    margin: 0 auto;
    padding: 24px 20px 70px;
}

/* Breadcrumb condiviso (chi-siamo, dettaglio camper). L'archivio ha
   il suo in css/archivio.css. */
.pd-container .breadcrumb {
    margin: 10px 0 20px;
    font-size: 14px;
    color: var(--sc-testo-debole);
}

.pd-container .breadcrumb a {
    color: var(--sc-teal);
    text-decoration: none;
}

.pd-container .breadcrumb a:hover { text-decoration: underline; }
.pd-container .breadcrumb-separator { margin: 0 6px; }

.pagina-editoriale .breadcrumb {
    margin-bottom: 20px;
    color: var(--sc-testo-debole);
    font-size: 14px;
}

.pagina-editoriale .breadcrumb a {
    color: var(--sc-teal);
    text-decoration: none;
}

.pagina-editoriale .breadcrumb a:hover { text-decoration: underline; }
.pagina-editoriale .breadcrumb-separator { margin: 0 6px; }

/* --- Fascia di apertura --- */
.pagina-intro {
    position: relative;
    padding: 44px 44px 46px;
    border-radius: 14px;
    background: var(--sc-notte);
    color: var(--sc-bianco);
    overflow: hidden;
}

/* Alone Teal in alto a destra: da' profondita' alla fascia senza
   immagini da caricare. */
.pagina-intro::before {
    content: "";
    position: absolute;
    top: -140px;
    right: -110px;
    width: 380px;
    height: 380px;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(36, 144, 137, 0.55) 0%, rgba(36, 144, 137, 0) 70%);
    pointer-events: none;
}

.pagina-intro > * { position: relative; }

.pagina-intro h1 {
    max-width: 20ch;
    font-family: var(--sc-display);
    font-size: 44px;
    font-weight: 700;
    line-height: 1.1;
    letter-spacing: -0.02em;
}

.pagina-occhiello {
    max-width: 60ch;
    margin-top: 18px;
    font-size: 18px;
    line-height: 1.6;
    color: rgba(254, 254, 253, 0.82);
}

/* --- Blocchi di testo --- */
.pagina-blocco {
    margin-top: 48px;
}

.pagina-blocco h2 {
    position: relative;
    padding-left: 18px;
    margin-bottom: 16px;
    font-family: var(--sc-display);
    font-size: 27px;
    font-weight: 700;
    color: var(--sc-notte);
}

/* Barretta Senape a lato del titolo: segna l'inizio di una sezione
   senza aggiungere un filo orizzontale in piu' per ogni blocco. */
.pagina-blocco h2::before {
    content: "";
    position: absolute;
    top: 4px;
    bottom: 4px;
    left: 0;
    width: 4px;
    border-radius: 2px;
    background: var(--sc-senape);
}

.pagina-blocco p {
    max-width: 78ch;
    margin-bottom: 14px;
    font-size: 16.5px;
    line-height: 1.7;
    color: var(--sc-testo-tenue);
}

.pagina-blocco strong { color: var(--sc-notte); }

/* --- Numeri: cifre reali dal database, non stime --- */
.numeri-griglia {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 18px;
    margin: 24px 0 16px;
}

.numero-box {
    position: relative;
    padding: 28px 24px;
    border-radius: 12px;
    background: var(--sc-sabbia);
    overflow: hidden;
}

.numero-box::after {
    content: "";
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    width: 4px;
    background: var(--sc-teal);
}

.numero-valore {
    display: block;
    font-family: var(--sc-display);
    font-size: 40px;
    font-weight: 700;
    line-height: 1;
    letter-spacing: -0.02em;
    color: var(--sc-teal-scuro);
}

.numero-etichetta {
    display: block;
    margin-top: 8px;
    font-size: 14px;
    color: var(--sc-testo-tenue);
}

.numeri-nota {
    font-size: 14.5px !important;
    color: var(--sc-testo-tenue) !important;
}

/* --- Passi: qui la numerazione porta informazione (e' una sequenza
       reale), quindi conta davvero e non e' decorazione. --- */
.passi-lista {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 26px;
    margin: 24px 0 0;
    padding: 0;
    list-style: none;
    counter-reset: passo;
}

.passi-lista li {
    padding: 26px 24px;
    border: 1px solid var(--sc-filo);
    border-radius: 12px;
    counter-increment: passo;
}

.passi-lista li::before {
    content: counter(passo);
    display: flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    margin-bottom: 14px;
    border-radius: 50%;
    background: var(--sc-teal-tenue);
    color: var(--sc-teal-scuro);
    font-family: var(--sc-display);
    font-size: 17px;
    font-weight: 700;
}

.passi-lista h3 {
    margin-bottom: 8px;
    font-family: var(--sc-display);
    font-size: 18px;
    font-weight: 600;
    color: var(--sc-notte);
}

.passi-lista p {
    max-width: none;
    margin: 0;
    font-size: 15.5px;
    line-height: 1.65;
    color: var(--sc-testo-tenue);
}

.pagina-nota {
    display: flex;
    gap: 14px;
    align-items: flex-start;
    max-width: 78ch;
    padding: 18px 20px;
    border-left: 3px solid var(--sc-senape);
    border-radius: 8px;
    background: var(--sc-sabbia);
    font-size: 15px !important;
}

.pagina-nota .badge-soon {
    flex-shrink: 0;
    padding: 4px 12px;
    font-size: 11px;
}

/* --- Chiusura: l'unica azione della pagina --- */
.pagina-cta {
    position: relative;
    margin-top: 56px;
    padding: 44px 40px;
    border-radius: 14px;
    background: var(--sc-teal);
    color: var(--sc-bianco);
    text-align: center;
    overflow: hidden;
}

.pagina-cta::before {
    content: "";
    position: absolute;
    right: -80px;
    bottom: -120px;
    width: 320px;
    height: 320px;
    border-radius: 50%;
    background: rgba(22, 42, 48, 0.14);
    pointer-events: none;
}

.pagina-cta > * { position: relative; }

.pagina-cta h2 {
    font-family: var(--sc-display);
    font-size: 28px;
    font-weight: 700;
    margin-bottom: 10px;
}

.pagina-cta p {
    max-width: 46ch;
    margin: 0 auto 24px;
    font-size: 16.5px;
    line-height: 1.6;
    color: rgba(254, 254, 253, 0.9);
}

.pagina-cta-azioni {
    display: flex;
    gap: 14px;
    justify-content: center;
    flex-wrap: wrap;
}

.pagina-cta-mail {
    margin: 20px auto 0 !important;
    font-size: 15px !important;
    color: rgba(254, 254, 253, 0.8) !important;
}

.pagina-cta-mail a {
    color: var(--sc-bianco);
    font-weight: 600;
}

.btn.btn-whatsapp-lg {
    display: inline-flex;
    gap: 10px;
    align-items: center;
    line-height: 1;
    background: var(--sc-bianco);
    color: var(--sc-teal-scuro);
    font-family: var(--sc-testo);
}

.btn.btn-whatsapp-lg:hover { background: var(--sc-teal-velo); }

@media (max-width: 992px) {
    .pagina-intro   { padding: 34px 28px 36px; }
    .pagina-intro h1 { font-size: 34px; }

    .numeri-griglia,
    .passi-lista {
        grid-template-columns: 1fr 1fr;
    }
}

@media (max-width: 768px) {
    .pagina-editoriale { padding: 18px 16px 56px; }

    .pagina-intro    { padding: 28px 20px 30px; border-radius: 12px; }
    .pagina-intro h1 { font-size: 28px; max-width: none; }
    .pagina-occhiello { font-size: 16.5px; }

    .pagina-blocco    { margin-top: 36px; }
    .pagina-blocco h2 { font-size: 23px; }

    .numeri-griglia,
    .passi-lista {
        grid-template-columns: 1fr;
        gap: 12px;
    }

    .numero-box {
        display: flex;
        gap: 16px;
        align-items: baseline;
        padding: 18px 20px;
    }

    .numero-valore    { font-size: 30px; }
    .numero-etichetta { margin-top: 0; }

    .passi-lista li { padding: 20px 18px; }

    .pagina-cta { padding: 30px 20px; }

    .pagina-cta-azioni .btn {
        display: block;
        width: 100%;
        text-align: center;
    }

    /* Il display:block qui sopra sovrascriveva l'inline-flex e mandava
       l'icona a capo. Terza volta che succede, sempre allo stesso modo:
       una regola ".contenitore .btn" vale 0,2,0 e batte sia .btn.btn-x
       sia la rete di sicurezza su :has(). */
    .pagina-cta-azioni .btn.btn-whatsapp-lg {
        display: flex;
        justify-content: center;
    }


}

/* ══════════════════════════════════════════════════════════════
   LANDING DI CATEGORIA  (/camper-usati, /camper-nuovi)
   Partial: landing_intro.php (sopra i risultati)
            landing_testo.php (sotto la lista)
   ══════════════════════════════════════════════════════════════ */

/* --- Introduzione: corta, non deve spingere giu' i risultati --- */
.landing-intro {
    display: grid;
    grid-template-columns: 1.4fr 1fr;
    gap: 32px;
    align-items: start;
    margin: 4px 0 26px;
    padding: 26px 28px;
    border-radius: 12px;
    background: var(--sc-sabbia);
}

.landing-intro h2 {
    font-family: var(--sc-display);
    font-size: 22px;
    font-weight: 700;
    line-height: 1.25;
    color: var(--sc-notte);
    margin-bottom: 10px;
}

.landing-intro-testo p {
    font-size: 15.5px;
    line-height: 1.65;
    color: var(--sc-testo-tenue);
}

.landing-intro-cta {
    display: inline-flex;
    gap: 9px;
    align-items: center;
    margin-top: 16px;
    padding: 10px 18px;
    border-radius: 24px;
    background: var(--sc-bianco);
    color: var(--sc-teal-scuro);
    font-family: var(--sc-testo);
    font-size: 14.5px;
    font-weight: 600;
    text-decoration: none;
    box-shadow: 0 1px 4px rgba(22, 42, 48, 0.1);
    transition: transform 0.15s, box-shadow 0.2s;
}

.landing-intro-cta:hover {
    transform: translateY(-1px);
    box-shadow: 0 3px 10px rgba(22, 42, 48, 0.14);
}

.landing-punti {
    margin: 0;
    padding: 0;
    list-style: none;
}

.landing-punti li {
    position: relative;
    margin-bottom: 14px;
    padding-left: 26px;
}

.landing-punti li:last-child { margin-bottom: 0; }

/* Spunta disegnata in CSS: un carattere unicode qui verrebbe letto
   ad alta voce dagli screen reader senza portare informazione. */
.landing-punti li::before {
    content: "";
    position: absolute;
    top: 6px;
    left: 0;
    width: 7px;
    height: 12px;
    border: solid var(--sc-teal);
    border-width: 0 2.5px 2.5px 0;
    transform: rotate(45deg);
}

.landing-punti strong {
    display: block;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--sc-notte);
}

.landing-punti span {
    font-size: 14px;
    line-height: 1.55;
    color: var(--sc-testo-tenue);
}

/* --- Approfondimento sotto la lista --- */
.landing-testo {
    margin-top: 44px;
    padding: 34px 30px;
    border-radius: 12px;
    background: var(--sc-bianco);
    box-shadow: 0 2px 10px rgba(22, 42, 48, 0.07);
}

.landing-testo h2 {
    font-family: var(--sc-display);
    font-size: 25px;
    font-weight: 700;
    color: var(--sc-notte);
    margin-bottom: 12px;
}

.landing-testo-intro {
    max-width: 72ch;
    font-size: 16px;
    line-height: 1.7;
    color: var(--sc-testo-tenue);
}

.landing-testo-griglia {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 22px 34px;
    margin-top: 26px;
}

.landing-voce h3 {
    font-family: var(--sc-display);
    font-size: 17px;
    font-weight: 600;
    color: var(--sc-teal-scuro);
    margin-bottom: 6px;
    padding-bottom: 8px;
    border-bottom: 2px solid var(--sc-sabbia);
}

.landing-voce p {
    font-size: 15px;
    line-height: 1.65;
    color: var(--sc-testo-tenue);
}

.landing-testo-nota {
    margin-top: 28px;
    padding-top: 18px;
    border-top: 1px solid var(--sc-filo);
    font-size: 14px;
    line-height: 1.6;
    color: var(--sc-testo-tenue);
}

.landing-testo-nota a {
    color: var(--sc-teal);
    font-weight: 600;
}

@media (max-width: 992px) {
    .landing-intro {
        grid-template-columns: 1fr;
        gap: 20px;
        padding: 22px 20px;
    }

    .landing-testo-griglia {
        grid-template-columns: 1fr;
        gap: 20px;
    }
}

@media (max-width: 768px) {
    .landing-intro h2  { font-size: 20px; }
    .landing-testo     { padding: 26px 20px; }
    .landing-testo h2  { font-size: 22px; }

    .landing-intro-cta {
        display: flex;
        justify-content: center;
    }
}


/* ══════════════════════════════════════════════════════════════
   ULTIMI ARRIVI (home)
   ──────────────────────────────────────────────────────────────
   Impianto della scheda ripreso dalle vetrine e dagli aggregatori
   del settore: foto a filo, titolo, prezzo, una riga di specifiche
   separate da barra, filetto, rivenditore in fondo.

   Tutta la card e' un <a>: bersaglio grande e nessun pulsante da
   inseguire. Per questo non c'e' piu' .bottonecard.
   ══════════════════════════════════════════════════════════════ */

.nuovi-arrivi {
    padding: 70px 20px;
}

.nuovi-arrivi-interno {
    max-width: var(--sc-max);
    margin: 0 auto;
}

.nuovi-arrivi-titolo {
    margin-bottom: 26px;
    text-align: left;
    color: var(--sc-notte);
    text-shadow: none;      /* nelle vetrine sta su foto, qui su Sabbia */
}

.arrivi-griglia {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 28px;   /* a 1400px c'e' spazio per far respirare le schede */
}

.arrivo-card {
    display: flex;
    flex-direction: column;
    background: var(--sc-bianco);
    border-radius: 10px;
    overflow: hidden;
    text-decoration: none;
    color: inherit;
    box-shadow: 0 2px 10px rgba(22, 42, 48, 0.08);
    transition: transform 0.25s, box-shadow 0.25s;
}

.arrivo-card:hover {
    transform: translateY(-4px);
    box-shadow: 0 10px 24px rgba(22, 42, 48, 0.14);
}

.arrivo-card:focus-visible {
    outline: 3px solid var(--sc-teal);
    outline-offset: 3px;
}

/* ---- Foto ---- */
.arrivo-foto {
    position: relative;
    height: 210px;
    overflow: hidden;
    background: var(--sc-filo);
}

.arrivo-foto img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 0.4s;
}

.arrivo-card:hover .arrivo-foto img {
    transform: scale(1.04);
}

/* Nuovo / Usato: la prima cosa che distingue due schede accostate */
.arrivo-tag {
    position: absolute;
    top: 12px;
    left: 12px;
    padding: 4px 11px;
    border-radius: 4px;
    background: var(--sc-notte);
    color: var(--sc-sabbia);
    font-family: var(--sc-testo);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
}

.arrivo-tag.is-nuovo {
    background: var(--sc-teal);
    color: var(--sc-bianco);
}

/* Il tempo trascorso e' il motivo per cui la sezione esiste */
.arrivo-tempo {
    position: absolute;
    top: 12px;
    right: 12px;
    padding: 4px 11px;
    border-radius: 4px;
    background: var(--sc-senape);
    color: var(--sc-notte);
    font-family: var(--sc-testo);
    font-size: 11.5px;
    font-weight: 600;
}

/* ---- Corpo ---- */
.arrivo-corpo {
    display: flex;
    flex-direction: column;
    flex: 1;
    padding: 16px 18px 18px;
}

/* Una riga sola: i titoli scrapati sono lunghissimi e su tre schede
   affiancate manderebbero il prezzo ad altezze diverse. */
.arrivo-titolo {
    font-family: var(--sc-display);
    font-size: 16.5px;
    font-weight: 600;
    line-height: 1.35;
    color: var(--sc-notte);
    margin-bottom: 6px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.arrivo-prezzo {
    font-family: var(--sc-display);
    font-size: 23px;
    font-weight: 700;
    line-height: 1.1;
    color: var(--sc-teal);
    margin-bottom: 10px;
}

/* Come nell'archivio: senza cifra non e' un prezzo, e' uno stato */
.arrivo-prezzo.is-richiesta {
    font-family: var(--sc-testo);
    font-size: 16px;
    font-weight: 600;
    color: var(--sc-testo-tenue);
}

/* Specifiche su una riga, separate da barra. Le barre sono <span>
   cosi' si possono schiarire senza toccare i valori. */
.arrivo-specs {
    font-size: 13.5px;
    line-height: 1.55;
    color: var(--sc-testo-tenue);
    margin-bottom: 14px;
}

.arrivo-specs span {
    color: var(--sc-filo);
    margin: 0 3px;
}

/* ---- Rivenditore, ancorato in fondo ---- */
.arrivo-rivenditore {
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid var(--sc-filo);
    font-size: 13px;
    line-height: 1.5;
}

.arrivo-rivenditore-et {
    display: block;
    color: var(--sc-testo-sottile);
    font-size: 11.5px;
    letter-spacing: 0.02em;
}

.arrivo-rivenditore-nome {
    display: block;
    color: var(--sc-notte);
    font-weight: 500;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.arrivo-rivenditore-zona {
    display: block;
    color: var(--sc-testo-tenue);
}

@media (max-width: 992px) {
    .nuovi-arrivi { padding: 56px 20px; }

    .arrivi-griglia {
        grid-template-columns: repeat(2, 1fr);
        gap: 20px;
    }

    /* Con due colonne la terza scheda resterebbe sola in fondo */
    .arrivi-griglia > :nth-child(3) {
        display: none;
    }
}

@media (max-width: 700px) {
    .nuovi-arrivi { padding: 48px 16px; }

    .arrivi-griglia {
        grid-template-columns: 1fr;
        gap: 16px;
    }

    /* Su una colonna ci stanno tutte e tre */
    .arrivi-griglia > :nth-child(3) {
        display: flex;
    }

    .arrivo-foto { height: 200px; }
}


/* ══════════════════════════════════════════════════════════════
   BARRA CONTATTO (solo mobile)
   ──────────────────────────────────────────────────────────────
   Stessa impostazione della barra azioni del dettaglio camper:
   fissa in fondo, a tutta larghezza. Un pulsante rotondo
   flottante copriva il contenuto e a 56px pesava troppo per
   un'azione secondaria.
   Markup in layouts/default.php.
   ══════════════════════════════════════════════════════════════ */

/* Selettore con l'elemento davanti (0,2,0): la .wa-barra e' un <a> che
   contiene l'icona WhatsApp, quindi la rete di sicurezza
   a:has(> .icona-whatsapp) — che vale 0,1,1 e sta piu' in basso nel
   file — la rimetteva a display:inline-flex anche su desktop. Compariva
   sotto il footer come un link scomposto. */
body > .wa-barra {
    display: none;
}

@media (max-width: 992px) {

    body {
        /* spazio per la barra, altrimenti copre la fine del footer */
        padding-bottom: calc(62px + env(safe-area-inset-bottom));
    }

    body > .wa-barra {
        position: fixed;
        right: 0;
        bottom: 0;
        left: 0;
        z-index: 950;
        display: flex;
        gap: 10px;
        align-items: center;
        justify-content: center;
        padding: 13px 16px calc(13px + env(safe-area-inset-bottom));
        background: var(--sc-teal);
        color: var(--sc-bianco);
        font-family: var(--sc-testo);
        font-size: 15.5px;
        font-weight: 600;
        text-decoration: none;
        box-shadow: 0 -4px 20px rgba(22, 42, 48, 0.16);
    }

    .wa-barra:active {
        background: var(--sc-teal-scuro);
    }

    .wa-barra .icona-whatsapp {
        width: 21px;
        height: 21px;
    }

    .wa-barra:focus-visible {
        outline: 3px solid var(--sc-senape);
        outline-offset: -4px;
    }

    /* Nella scheda camper c'e' gia' la barra azioni: due barre in fondo
       sarebbero una sopra l'altra. Li' lo spazio lo riserva
       body.has-actionbar (css/mobile.css). */
    body:has(.pd-actionbar) .wa-barra {
        display: none;
    }

    body:has(.pd-actionbar) {
        padding-bottom: 0;
    }

    /* Mentre drawer o pannello filtri sono aperti la barra resterebbe
       a galleggiare sopra il velo. */
    body.mb-locked .wa-barra {
        display: none;
    }
}


/* ══════════════════════════════════════════════════════════════
   GALLERIA SCHEDA CAMPER — frecce e vista a tutto schermo
   ──────────────────────────────────────────────────────────────
   Markup in camper_dettaglio.php, comportamento in js/galleria.js
   ══════════════════════════════════════════════════════════════ */

/* Il <button> attorno alla foto non deve sembrare un pulsante */
.pd-gallery-apri {
    display: block;
    width: 100%;
    height: 100%;
    padding: 0;
    border: none;
    background: none;
    cursor: zoom-in;
}

.pd-gallery-apri img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.pd-gallery-apri:focus-visible {
    outline: 3px solid var(--sc-teal);
    outline-offset: -3px;
}

/* Frecce: sulla foto, non sul binario. Semitrasparenti perche' stanno
   sopra l'immagine e non devono coprirla piu' del necessario. */
.pd-freccia {
    position: absolute;
    top: 50%;
    z-index: 2;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    margin-top: -22px;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: rgba(22, 42, 48, 0.55);
    cursor: pointer;
    transition: background 0.2s;
}

.pd-freccia svg {
    width: 22px;
    height: 22px;
    fill: none;
    stroke: var(--sc-bianco);
    stroke-width: 2.2;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.pd-freccia:hover {
    background: rgba(22, 42, 48, 0.8);
}

.pd-freccia:focus-visible {
    outline: 3px solid var(--sc-senape);
    outline-offset: 2px;
}

.pd-freccia-prev { left: 12px; }
.pd-freccia-next { right: 12px; }

/* Salva: sulla foto in alto a destra, come nelle schede archivio.
   z-index 3 per stare sopra il pulsante che apre la galleria, che
   copre tutta l'immagine. */
.pd-salva {
    position: absolute;
    top: 14px;
    right: 14px;
    z-index: 3;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: rgba(254, 254, 253, 0.92);
    cursor: pointer;
    transition: background 0.2s, transform 0.18s;
}

.pd-salva svg {
    width: 21px;
    height: 21px;
    fill: none;
    stroke: var(--sc-notte);
    stroke-width: 1.8;
    transition: fill 0.2s, stroke 0.2s;
}

.pd-salva:hover {
    background: var(--sc-bianco);
    transform: scale(1.08);
}

.pd-salva.is-preferito svg {
    fill: var(--sc-senape);
    stroke: var(--sc-senape);
}

.pd-salva:focus-visible {
    outline: 3px solid var(--sc-teal);
    outline-offset: 2px;
}

/* ── Vista a tutto schermo ─────────────────────────────────── */
.pd-lightbox {
    width: 100vw;
    max-width: 100vw;
    height: 100vh;
    max-height: 100vh;
    margin: 0;
    padding: 0;
    border: none;
    background: var(--sc-notte);
    color: var(--sc-sabbia);
    overflow: hidden;
}

.pd-lightbox::backdrop {
    background: rgba(10, 18, 21, 0.92);
}

.pd-lightbox-barra {
    display: flex;
    align-items: center;
    gap: 18px;
    min-height: 68px;
    padding: 10px 18px;
    border-bottom: 1px solid rgba(242, 239, 230, 0.12);
}

.pd-lightbox-prezzo {
    flex-shrink: 0;
    font-family: var(--sc-display);
    font-size: 21px;
    font-weight: 700;
    color: var(--sc-bianco);
    white-space: nowrap;
}

.pd-lightbox-azioni {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-shrink: 0;
}

/* Cuore: qui ha anche l'etichetta, perche' nella barra c'e' spazio e
   un'icona sola lascerebbe dubbi su cosa fa. */
.pd-lightbox-cuore {
    display: inline-flex;
    gap: 7px;
    align-items: center;
    padding: 9px 15px;
    border: 1px solid rgba(242, 239, 230, 0.22);
    border-radius: 22px;
    background: none;
    color: var(--sc-sabbia);
    font-family: var(--sc-testo);
    font-size: 13.5px;
    font-weight: 500;
    cursor: pointer;
    transition: background 0.2s, border-color 0.2s, color 0.2s;
}

.pd-lightbox-cuore svg {
    width: 17px;
    height: 17px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
    transition: fill 0.2s;
}

.pd-lightbox-cuore:hover {
    background: rgba(242, 239, 230, 0.08);
}

.pd-lightbox-cuore.is-preferito {
    border-color: var(--sc-senape);
    color: var(--sc-senape);
}

.pd-lightbox-cuore.is-preferito svg {
    fill: var(--sc-senape);
    stroke: var(--sc-senape);
}

.pd-lightbox-wa {
    display: inline-flex;
    gap: 8px;
    align-items: center;
    padding: 9px 16px;
    border-radius: 22px;
    background: var(--sc-teal);
    color: var(--sc-bianco);
    font-family: var(--sc-testo);
    font-size: 13.5px;
    font-weight: 600;
    text-decoration: none;
    white-space: nowrap;
}

.pd-lightbox-wa:hover {
    background: var(--sc-teal-scuro);
}

.pd-lightbox-wa .icona-whatsapp {
    width: 18px;
    height: 18px;
}

.pd-lightbox-cuore:focus-visible,
.pd-lightbox-wa:focus-visible {
    outline: 2px solid var(--sc-senape);
    outline-offset: 2px;
}

.pd-lightbox-titolo {
    flex: 1;
    min-width: 0;
    font-family: var(--sc-testo);
    font-size: 14.5px;
    line-height: 1.3;
}

.pd-lightbox-titolo strong {
    display: block;
    color: var(--sc-bianco);
    font-weight: 600;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.pd-lightbox-titolo span {
    color: rgba(242, 239, 230, 0.6);
    font-size: 13px;
}

.pd-lightbox-indietro {
    display: inline-flex;
    gap: 6px;
    align-items: center;
    padding: 8px 14px;
    border: 1px solid rgba(242, 239, 230, 0.22);
    border-radius: 20px;
    background: none;
    color: var(--sc-sabbia);
    font-family: var(--sc-testo);
    font-size: 13.5px;
    cursor: pointer;
}

.pd-lightbox-indietro svg {
    width: 16px;
    height: 16px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2.2;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.pd-lightbox-indietro:hover {
    background: rgba(242, 239, 230, 0.08);
}

.pd-lightbox-chiudi {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: rgba(242, 239, 230, 0.1);
    cursor: pointer;
}

.pd-lightbox-chiudi svg {
    width: 20px;
    height: 20px;
    fill: none;
    stroke: var(--sc-sabbia);
    stroke-width: 2.2;
    stroke-linecap: round;
}

.pd-lightbox-chiudi:hover {
    background: rgba(242, 239, 230, 0.2);
}

.pd-lightbox-indietro:focus-visible,
.pd-lightbox-chiudi:focus-visible {
    outline: 2px solid var(--sc-senape);
    outline-offset: 2px;
}

/* Griglia di tutte le foto, come su mobile.de */
.pd-lightbox-griglia {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 10px;
    height: calc(100vh - 68px);
    padding: 16px;
    overflow-y: auto;
    overscroll-behavior: contain;
    align-content: start;
}

/* Altezza fissa invece di aspect-ratio: su un <button> con contenuto
   l'aspect-ratio non vincola in modo affidabile, e le celle finivano
   una sull'altra.
   object-fit: cover: le celle si riempiono e la griglia resta compatta.
   Il ritaglio non toglie niente all'utente, perche' basta un clic per
   aprire la foto intera a pieno schermo. */
.pd-lightbox-cella {
    height: 220px;
    padding: 0;
    border: none;
    border-radius: 8px;
    overflow: hidden;
    background: rgba(242, 239, 230, 0.06);
    cursor: zoom-in;
}

.pd-lightbox-cella img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transition: transform 0.3s;
}

.pd-lightbox-cella:hover img {
    transform: scale(1.04);
}

/* Stato salvato del cuore nelle schede archivio (css/archivio.css ha
   la forma, qui c'e' solo lo stato acceso, condiviso col resto). */
.favorite-btn.is-preferito svg {
    fill: var(--sc-senape);
}

.favorite-btn.is-preferito {
    border-color: var(--sc-senape);
}

.pd-lightbox-cella:focus-visible {
    outline: 3px solid var(--sc-senape);
    outline-offset: 2px;
}

/* Singola foto a pieno schermo */
.pd-lightbox-singola {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    height: calc(100vh - 68px);
    padding: 20px 76px;
}

.pd-lightbox-singola img {
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
}

.pd-lightbox-singola .pd-freccia {
    background: rgba(242, 239, 230, 0.14);
}

.pd-lightbox-singola .pd-freccia:hover {
    background: rgba(242, 239, 230, 0.26);
}

.pd-lightbox-singola .pd-freccia-prev { left: 18px; }
.pd-lightbox-singola .pd-freccia-next { right: 18px; }

@media (max-width: 768px) {
    .pd-lightbox-griglia {
        grid-template-columns: repeat(2, 1fr);
        gap: 8px;
        padding: 12px;
    }

    .pd-lightbox-cella {
        height: 150px;
    }

    .pd-lightbox-singola {
        padding: 12px;
    }

    /* Su telefono si scorre con il dito: le frecce coprirebbero la foto */
    .pd-lightbox-singola .pd-freccia {
        top: auto;
        bottom: 16px;
        margin-top: 0;
    }

    .pd-lightbox-singola .pd-freccia-prev { left: 24%; }
    .pd-lightbox-singola .pd-freccia-next { right: 24%; }

    .pd-gallery-main .pd-freccia {
        width: 38px;
        height: 38px;
        margin-top: -19px;
    }
}

@media (max-width: 900px) {
    /* Nella barra della galleria non ci stanno prezzo, salva e contatto:
       resta l'essenziale, il resto e' un tocco piu' in la' chiudendo. */
    .pd-lightbox-prezzo,
    .pd-lightbox-cuore-testo {
        display: none;
    }

    .pd-lightbox-wa span {
        display: none;
    }

    .pd-lightbox-indietro span {
        display: none;
    }

    .pd-lightbox-cuore,
    .pd-lightbox-wa,
    .pd-lightbox-indietro {
        padding: 9px 11px;
    }

    .pd-lightbox-barra {
        gap: 10px;
        padding: 10px 12px;
    }
}


/* ══════════════════════════════════════════════════════════════
   PAGINA "I MIEI PREFERITI"
   ──────────────────────────────────────────────────────────────
   Le schede sono quelle dell'archivio: qui c'e' solo il contorno.
   ══════════════════════════════════════════════════════════════ */

.preferiti-nota {
    margin-bottom: 18px;
    font-size: 14px;
    color: var(--sc-testo-tenue);
}

.preferiti-nota span {
    font-weight: 600;
    color: var(--sc-notte);
}

.preferiti-caricamento {
    padding: 40px 0;
    color: var(--sc-testo-tenue);
    font-size: 15px;
}

.preferiti-vuoto {
    max-width: 460px;
    margin: 30px auto 60px;
    padding: 44px 30px;
    border: 1px solid var(--sc-filo);
    border-radius: 14px;
    text-align: center;
}

.preferiti-vuoto svg {
    width: 52px;
    height: 52px;
    margin-bottom: 16px;
    fill: none;
    stroke: var(--sc-filo);
    stroke-width: 1.4;
}

.preferiti-vuoto h2 {
    font-family: var(--sc-display);
    font-size: 21px;
    font-weight: 700;
    color: var(--sc-notte);
    margin-bottom: 10px;
}

.preferiti-vuoto p {
    margin-bottom: 22px;
    font-size: 15px;
    line-height: 1.6;
    color: var(--sc-testo-tenue);
}


/* ══════════════════════════════════════════════════════════════
   CORRELATI (scheda camper)
   ──────────────────────────────────────────────────────────────
   Stessa fascia delle vetrine in home: foto di sfondo con velatura
   Teal in sovrapposizione. Un blocco monocolore alto quanto questo
   pesa, e qui chiude la pagina.
   ══════════════════════════════════════════════════════════════ */

.pd-correlati-fascia {
    position: relative;
    margin-top: 40px;
    background-image: url('/images/camper-7-bn.jpg');
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
}

/* multiply e non un colore trasparente: mantiene il contrasto della
   foto invece di lavarla in un grigio-verde piatto. */
.pd-correlati-velo {
    position: absolute;
    inset: 0;
    z-index: 0;
    background-color: var(--sc-teal-scuro);
    mix-blend-mode: multiply;
}

.pd-correlati-fascia .container-vetrina {
    padding: 48px 20px 40px;
}

.pd-correlati-fascia .section-camper-title {
    color: var(--sc-bianco);
    text-shadow: 2px 2px 9px rgba(0, 0, 0, 0.6);
}

/* Freccia a fondo corsa: resta ma non invita piu' al clic */
.nav-arrow.is-spenta {
    opacity: 0.3;
    cursor: default;
}

@media (max-width: 768px) {
    .pd-correlati-fascia .container-vetrina {
        padding: 36px 16px 30px;
    }
}


/* Sotto i 600px il logotipo esce dall'header: misurato a 390px, con il
   logotipo dentro il campo di ricerca scendeva a una sessantina di
   pixel. Resta il simbolo, che basta a riconoscere il sito. */
@media (max-width: 600px) {
    body > header .logo-testo-img {
        display: none;
    }
}


/* ══════════════════════════════════════════════════════════════
   BLOG — elenco e articolo
   ──────────────────────────────────────────────────────────────
   Le card riusano .blog-card della home: qui c'e' solo cio' che
   serve alle pagine dedicate.
   ══════════════════════════════════════════════════════════════ */

.blog-grid-elenco {
    margin-top: 34px;
}

.blog-card .blog-image {
    display: block;
}

.blog-data {
    display: block;
    margin-bottom: 6px;
    font-size: 12.5px;
    color: var(--sc-testo-debole, #808987);
}

.blog-title a {
    color: inherit;
    text-decoration: none;
}

.blog-title a:hover {
    color: var(--sc-teal);
}

.blog-vuoto {
    max-width: 460px;
    margin: 40px auto 60px;
    padding: 44px 30px;
    border: 1px solid var(--sc-filo, #CFCFC9);
    border-radius: 14px;
    text-align: center;
}

.blog-vuoto h2 {
    font-family: var(--sc-display);
    font-size: 21px;
    font-weight: 700;
    color: var(--sc-notte);
    margin-bottom: 10px;
}

.blog-vuoto p {
    margin-bottom: 22px;
    font-size: 15px;
    line-height: 1.6;
    color: var(--sc-testo-tenue, #546163);
}

/* ── Articolo ─────────────────────────────────────────────── */
/* Larghezze della pagina articolo, in un posto solo.
   ──────────────────────────────────────────────────────────────
   IN PIXEL e non in "ch": ch e' la larghezza del carattere
   DELL'ELEMENTO su cui e' scritto, e il corpo dell'articolo e' a
   17,5px mentre griglia e copertina ereditano i 16px del body. Con
   72ch scritto su tre elementi diversi si ottenevano tre larghezze
   diverse — 655px, 599px, 599px — ed erano tre allineamenti che non
   combaciavano.
   660px a 17,5px corrispondono a circa 72 caratteri, che e' la misura
   di lettura che vogliamo. */
/* Breadcrumb, titolo e copertina larghi quanto testo + colonna:
   tutto sulla stessa griglia verticale. */
.articolo .breadcrumb,
.articolo-testata,
.articolo-copertina {
    max-width: calc(var(--art-testo) + var(--art-lato) + var(--art-gap));
    margin-left: auto;
    margin-right: auto;
}

.articolo-testata h1 {
    max-width: 22ch;
    font-family: var(--sc-display);
    font-size: 40px;
    font-weight: 700;
    line-height: 1.15;
    letter-spacing: -0.02em;
    color: var(--sc-notte);
}

.articolo-meta {
    margin-top: 12px;
    font-size: 14px;
    color: var(--sc-testo-debole, #808987);
}

/* margin auto ai lati: la scorciatoia "28px 0 34px" azzerava i margini
   automatici impostati poco sopra, e la copertina finiva a sinistra
   mentre titolo e testo restavano centrati. */
.articolo-copertina {
    margin: 28px auto 34px;
}

/* Altezza limitata: le foto verticali o molto alte superavano lo
   schermo di un portatile, e per arrivare al primo paragrafo bisognava
   scorrere. 52vh e' circa metà schermo: l'immagine si vede intera e il
   testo comincia sopra la piega. */
.articolo-copertina img {
    width: 100%;
    max-height: 52vh;
    object-fit: cover;
    border-radius: 12px;
    display: block;
}

/* Due colonne: testo a sinistra sulla sua misura, contatto e altri
   articoli a destra. Prima quelle due sezioni stavano sotto e a destra
   del testo restava una fascia bianca alta quanto l'articolo.
   minmax(0, 72ch) e non 72ch secco: senza il minimo a zero una tabella
   o un blocco di codice largo sfonderebbe la colonna. */
.articolo-griglia {
    display: grid;
    grid-template-columns: minmax(0, var(--art-testo)) var(--art-lato);
    gap: var(--art-gap);
    align-items: start;
    /* Centrata: testo e colonna insieme fanno circa 990px su 1400 di
       pagina. Allineandola a sinistra resterebbe un vuoto di 400px solo
       a destra — che e' il difetto di partenza, spostato. Centrata i
       margini sono uguali e la pagina si legge equilibrata. */
    justify-content: center;
}

/* La colonna resta accanto al testo mentre si scorre: un articolo e'
   lungo, e il rimando a WhatsApp deve restare a portata. */
.articolo-lato {
    position: sticky;
    top: calc(var(--sc-header-h) + 20px);
}

/* La misura la decide la colonna della griglia: qui nessun max-width,
   altrimenti si tornerebbe a due larghezze che non coincidono. */
.articolo-corpo {
    font-size: 17.5px;
    line-height: 1.75;
    color: #2f3a3c;
}

.articolo-corpo h2 {
    margin: 36px 0 12px;
    font-family: var(--sc-display);
    font-size: 25px;
    font-weight: 700;
    line-height: 1.25;
    color: var(--sc-notte);
}

.articolo-corpo h3 {
    margin: 28px 0 10px;
    font-family: var(--sc-display);
    font-size: 19px;
    font-weight: 600;
    color: var(--sc-notte);
}

.articolo-corpo p {
    margin-bottom: 18px;
}

.articolo-corpo ul,
.articolo-corpo ol {
    margin: 0 0 18px 22px;
}

.articolo-corpo li {
    margin-bottom: 8px;
}

.articolo-corpo a {
    color: var(--sc-teal-scuro);
    text-decoration: underline;
}

.articolo-corpo img {
    max-width: 100%;
    height: auto;
    border-radius: 10px;
    margin: 8px 0 20px;
}

.articolo-corpo blockquote {
    margin: 24px 0;
    padding: 16px 22px;
    border-left: 3px solid var(--sc-senape);
    border-radius: 8px;
    background: var(--sc-sabbia);
    font-size: 16.5px;
}

/* Nella colonna laterale la CTA e' piu' compatta: e' larga 300px, non
   la pagina intera. */
.articolo-cta {
    margin: 0;
    padding: 26px 22px;
    border-radius: 14px;
    background: var(--sc-teal);
    color: var(--sc-bianco);
    text-align: center;
}

.articolo-cta h2 {
    font-family: var(--sc-display);
    font-size: 20px;
    font-weight: 700;
    margin-bottom: 8px;
}

.articolo-cta p {
    max-width: 48ch;
    margin: 0 auto 22px;
    font-size: 16px;
    line-height: 1.6;
    color: rgba(254, 254, 253, 0.9);
}

.articolo-correlati {
    margin-top: 34px;
}

/* Gli articoli correlati restano uno sotto l'altro anche a 420px: due
   affiancati darebbero schede da 200px, troppo strette per un titolo
   di due righe e un estratto. */
.articolo-lato .blog-grid {
    grid-template-columns: 1fr;
    gap: 16px;
}

/* L'altezza va sul CONTENITORE, non sull'immagine: riducendo solo
   l'img restavano 50px di contenitore scoperto, che si vedevano come
   una fascia grigia sotto la foto (.blog-image ha uno sfondo per
   coprire il caricamento). */
.articolo-lato .blog-card .blog-image {
    height: 150px;   /* colonna piu' larga, foto un po' piu' alta */
}

.articolo-correlati h2 {
    font-family: var(--sc-display);
    font-size: 20px;
    font-weight: 700;
    color: var(--sc-notte);
    margin-bottom: 6px;
}

/* Sotto i 1100px la colonna laterale non ci sta piu' accanto al testo:
   passa sotto, a piena larghezza. */
@media (max-width: 1100px) {
    .articolo-griglia {
        grid-template-columns: minmax(0, var(--art-testo));
        justify-content: center;
        gap: 40px;
    }

    .articolo-lato {
        position: static;
    }

    .articolo-lato .blog-grid {
        grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    }
}

@media (max-width: 768px) {
    .articolo-testata h1 { font-size: 29px; max-width: none; }
    .articolo-copertina img { max-height: 40vh; }
    .articolo-corpo      { font-size: 16.5px; }
    .articolo-corpo h2   { font-size: 22px; }
    .articolo-cta        { padding: 28px 20px; }
}


/* Errore di caricamento dei risultati (js/archivio.js): prima l'AJAX
   falliva in silenzio e l'utente vedeva solo la pagina scorrere in alto. */
.archivio-errore {
    margin-bottom: 16px;
    padding: 14px 18px;
    border-left: 3px solid var(--sc-senape);
    border-radius: 8px;
    background: var(--sc-sabbia);
    font-size: 15px;
    color: var(--sc-notte);
}


/* Cursore del prezzo nel form di ricerca.
   Il gruppo deve restare alto quanto quelli con la select: etichetta
   (20px) + controllo (38px). Il valore corrente sta in linea con
   l'etichetta, non sotto, altrimenti il gruppo cresce e sfalsa la riga
   della griglia — era il difetto della prima versione. */
.etichetta-cursore {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 10px;
}

.etichetta-cursore .slider-value {
    color: var(--sc-senape-scuro);
    font-size: 13.5px;
    font-weight: 700;
}

.cursore-box {
    display: flex;
    align-items: center;
    height: 38px;
}

.cursore-box .slider-track-wrap {
    position: relative;
    width: 100%;
}


/* ══════════════════════════════════════════════════════════════
   SELECT DISEGNATE DA NOI (js/select-custom.js)
   ──────────────────────────────────────────────────────────────
   Variante a scelta singola del selettore province di home.js:
   stesse classi .cs-*, quindi stesso aspetto. Qui c'e' solo cio'
   che cambia rispetto alla multipla.
   ══════════════════════════════════════════════════════════════ */

/* Il <select> nativo resta nel DOM — e' lui che viaggia con la form —
   ma non si vede. Non display:none: cosi' resta raggiungibile agli
   strumenti che leggono la pagina e valido per la validazione. */
.cs-nativo {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
}

.cs-singolo .cs-box {
    width: 100%;
}

/* Placeholder: grigio quando non e' stato scelto nulla, colore pieno
   quando c'e' una scelta. Nel selettore province lo stesso effetto era
   ottenuto con uno <span style="color:#999"> scritto in JS. */
.cs-singolo .cs-placeholder {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: var(--sc-notte);
}

.cs-singolo .cs-placeholder.cs-vuoto {
    color: var(--sc-testo-debole, #808987);
}

/* Niente casella di spunta: la scelta e' una sola, la riga evidenziata
   basta. La spunta serve dove se ne possono scegliere piu' di una. */
.cs-singolo .cs-option {
    padding-left: 14px;
}

.cs-singolo .cs-option.selected::after {
    content: "✓";
    float: right;
    color: var(--sc-senape-scuro);
    font-weight: 700;
}

/* Elenco verso l'alto quando il campo e' vicino al fondo della finestra:
   nella sidebar dell'archivio gli ultimi filtri stanno in basso, e
   l'elenco sarebbe finito fuori schermo. */
.cs-verso-alto .cs-dropdown {
    top: auto;
    bottom: calc(100% + 6px);
}

.cs-box:focus-visible {
    outline: 2px solid var(--sc-teal);
    outline-offset: 2px;
}


/* Avviso del cursore distanza: prende il posto del valore in km quando
   la posizione viene negata (js/raggio.js).
   Sta nell'etichetta e non in un <p> a parte: dentro l'hero un paragrafo
   eredita .hero p — grande, con ombra — e usciva dal pannello. */
.slider-value--avviso {
    color: var(--sc-testo-tenue, #546163);
    font-weight: 500;
}

/* Nella sidebar l'etichetta del cursore ha meno spazio: il valore va a
   capo invece di schiacciare la parola "Distanza". */
.filters-sidebar .etichetta-cursore {
    flex-wrap: wrap;
    row-gap: 2px;
}


@media (max-width: 768px) {
    .brand-item {
        width: 132px;
        height: 64px;
    }
}

/* ══════════════════════════════════════════════════════════════
   PAGINAZIONE
   ──────────────────────────────────────────────────────────────
   Era in css/archivio.css, che pero' e' caricato solo sull'archivio:
   sul blog la paginazione usciva come elenco puntato senza stile.
   Qui vale ovunque.
   ══════════════════════════════════════════════════════════════ */

.pagination-wrap {
    display: flex;
    justify-content: center;
    margin-top: 30px;
    padding: 10px 0 4px;
}
.pagination-wrap ul {
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    padding: 0;
    margin: 0;
}
.pagination-wrap li { margin: 0; }
.pagination-wrap a,
.pagination-wrap li > span {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 40px;
    height: 40px;
    padding: 0 12px;
    border: 1px solid var(--sc-filo);
    border-radius: 8px;
    color: var(--sc-teal);
    background: var(--sc-bianco);
    text-decoration: none;
    font-weight: 600;
    font-size: 14px;
    transition: all 0.2s;
}
.pagination-wrap a:hover {
    background: var(--sc-teal-tenue);
    border-color: var(--sc-teal);
}
.pagination-wrap li.active a,
.pagination-wrap li.active > span {
    background: var(--sc-teal);
    border-color: var(--sc-teal);
    color: var(--sc-bianco);
}
.pagination-wrap li.disabled a,
.pagination-wrap li.disabled > span {
    color: var(--sc-testo-sottile);
    background: var(--sc-bianco);
    cursor: default;
}

/* ══════════════════════════════════════════════════════════════
   DATI TECNICI CLICCABILI (scheda camper)
   ──────────────────────────────────────────────────────────────
   Ogni valore che corrisponde a un filtro porta alla ricerca
   relativa: da "Diesel" a tutti i diesel del catalogo.
   Sta qui e non in css/archivio.css perche' quel foglio non e'
   caricato sulla scheda camper.
   Non sembrano link finche' non ci si passa sopra: in un elenco di
   venti righe, venti link colorati sarebbero rumore.
   ══════════════════════════════════════════════════════════════ */

.pd-spec-link {
    color: inherit;
    text-decoration: none;
    border-bottom: 1px solid transparent;
    transition: color 0.15s, border-color 0.15s;
}

.pd-spec-link:hover {
    color: var(--sc-teal-scuro);
    border-bottom-color: var(--sc-teal);
}

.pd-spec-link:focus-visible {
    outline: 2px solid var(--sc-teal);
    outline-offset: 2px;
}

/* Le righe degli optional sono link interi: tutta la riga e' il
   bersaglio, non solo il testo. */
.pd-spec-row-link {
    text-decoration: none;
    color: inherit;
}

.pd-spec-row-link:hover {
    background: var(--sc-senape-velo);
}

.pd-spec-row-link:hover .pd-spec-label {
    color: var(--sc-teal-scuro);
}

.pd-spec-row-link:focus-visible {
    outline: 2px solid var(--sc-teal);
    outline-offset: -2px;
}


/* Filtro optional a caselle: usato sia nella sidebar dell'archivio sia
   nel form della home, quindi le regole di base stanno qui.

   I selettori sono lunghi di proposito: ".casella-filtro" da solo vale
   0,1,0 e perdeva contro ".search-form-container .form-group label"
   (0,3,0), che imponeva display:block. Risultato: la casella si
   schiacciava in una lineetta verticale. */
.filtro-caselle {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.casella-filtro,
.search-form-container .form-group .casella-filtro,
.filters-sidebar .filter-group .casella-filtro {
    display: flex;
    align-items: center;
    gap: 8px;
    min-height: 0;
    margin-bottom: 0;
    padding: 5px 2px;
    font-size: 13.5px;
    font-weight: 400;
    line-height: 1.35;
    color: var(--sc-notte);
    cursor: pointer;
}

.casella-filtro input {
    position: absolute;
    opacity: 0;
    width: 0;
    height: 0;
}

.casella-filtro .custom-check {
    width: 17px;
    height: 17px;
    border-width: 2px;
}

.casella-testo {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.casella-filtro:hover .custom-check {
    border-color: var(--sc-senape);
}

/* In home gli optional non stanno nella griglia dei campi: sono sei
   caselle su due colonne, e in mezzo agli altri gruppi sfondavano la
   riga lasciando buchi sopra e sotto — quello che si vedeva nella
   prima versione.
   Stanno invece su una fascia propria sotto la griglia, separata da un
   filetto: e' un filtro di natura diversa dagli altri, e mostrarlo
   come tale aiuta a leggerlo. */
.optional-fascia {
    grid-column: 1 / -1;
    margin-top: 4px;
    padding-top: 16px;
    border-top: 1px solid var(--sc-filo);
}


.optional-fascia > span {
    display: block;
    margin-bottom: 10px;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--sc-testo-tenue, #546163);
}

.filtro-caselle-home {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 4px 24px;
}

@media (max-width: 900px) {
    .filtro-caselle-home { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 560px) {
    .filtro-caselle-home { grid-template-columns: 1fr; }
}


/* ══════════════════════════════════════════════════════════════
   PAGINA CONCESSIONARI
   ──────────────────────────────────────────────────────────────
   Ordine delle sezioni: numeri, specchio, spiegazione, modulo.
   Il modulo sta in mezzo e non in fondo di proposito — chi e'
   convinto dopo lo specchio non deve scorrere altre due schermate
   per trovarlo.
   ══════════════════════════════════════════════════════════════ */

.concessionari {
    max-width: 900px;
    margin: 0 auto;
}

.conc-testata h1 {
    font-family: var(--sc-display);
    font-size: 40px;
    font-weight: 700;
    line-height: 1.15;
    letter-spacing: -0.02em;
    color: var(--sc-notte);
}

.conc-occhiello {
    max-width: 62ch;
    margin-top: 14px;
    font-size: 17.5px;
    line-height: 1.7;
    color: var(--sc-testo-tenue, #546163);
}

/* I numeri sono l'argomento piu' forte che abbiamo: stanno in alto e
   sono grandi. */
.conc-numeri {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 16px;
    margin: 32px 0 8px;
    padding: 24px;
    border-radius: 14px;
    background: var(--sc-teal);
    color: var(--sc-bianco);
    text-align: center;
}

.conc-numeri strong {
    display: block;
    font-family: var(--sc-display);
    font-size: 34px;
    font-weight: 700;
    line-height: 1.1;
}

.conc-numeri span {
    font-size: 14px;
    color: rgba(254, 254, 253, 0.88);
}

/* ── Lo specchio ──────────────────────────────────────────── */
.conc-specchio,
.conc-come,
.conc-modulo,
.conc-arrivo {
    margin-top: 52px;
}

.concessionari h2 {
    font-family: var(--sc-display);
    font-size: 27px;
    font-weight: 700;
    color: var(--sc-notte);
    margin-bottom: 8px;
}

.concessionari h2 + p {
    font-size: 16px;
    line-height: 1.65;
    color: var(--sc-testo-tenue, #546163);
}

.conc-cerca {
    margin-top: 18px;
}

.conc-cerca input {
    width: 100%;
    height: 52px;
    padding: 0 20px;
    border: 1px solid var(--sc-filo);
    border-radius: 26px;
    background: var(--sc-bianco);
    font-family: var(--sc-testo);
    font-size: 16px;
    color: var(--sc-notte);
}

.conc-cerca input:focus {
    outline: none;
    border-color: var(--sc-teal);
    box-shadow: 0 0 0 3px var(--sc-teal-velo);
}

.conc-schede {
    list-style: none;
    margin: 18px 0 0;
    padding: 0;
    display: grid;
    gap: 10px;
}

.conc-scheda {
    padding: 16px 18px;
    border: 1px solid var(--sc-filo);
    border-radius: 12px;
    background: var(--sc-bianco);
    cursor: pointer;
    transition: border-color 0.18s, box-shadow 0.18s;
}

.conc-scheda:hover,
.conc-scheda:focus-visible {
    border-color: var(--sc-teal);
    box-shadow: 0 4px 14px rgba(22, 42, 48, 0.08);
    outline: none;
}

.conc-scheda.scelta {
    border-color: var(--sc-teal);
    background: var(--sc-teal-velo);
}

.conc-scheda-testa {
    display: flex;
    align-items: baseline;
    gap: 10px;
    font-size: 17px;
    color: var(--sc-notte);
}

.conc-prov {
    font-size: 13px;
    color: var(--sc-testo-debole, #808987);
}

.conc-scheda-dati {
    display: flex;
    flex-wrap: wrap;
    gap: 6px 18px;
    margin-top: 6px;
    font-size: 14px;
    color: var(--sc-testo-tenue, #546163);
}

/* I due numeri della scheda: letti dal sito e online.
   Online in Teal perche' e' la parte che funziona; l'assenza in Senape
   perche' e' un avviso, non un errore — e in questa pagina e' anche
   l'aggancio migliore per la conversazione. */
.conc-online {
    color: var(--sc-teal-scuro);
}

.conc-fuori {
    color: var(--sc-senape-scuro);
    font-weight: 500;
}

/* Riga sopra le schede quando una parte dei veicoli non e' pubblicata */
.conc-nota-mancanti {
    margin: 12px 0 18px;
    padding: 14px 18px;
    border-left: 3px solid var(--sc-senape);
    border-radius: 8px;
    background: var(--sc-senape-velo);
    font-size: 14.5px;
    line-height: 1.6;
    color: var(--sc-notte);
}

.conc-nota-mancanti a {
    color: var(--sc-teal-scuro);
    text-decoration: underline;
}

.conc-scheda-azione {
    display: inline-block;
    margin-top: 10px;
    font-size: 14px;
    font-weight: 600;
    color: var(--sc-teal);
}

/* Non trovarsi non e' un errore: e' il caso in cui vogliamo ancora di
   piu' che ci scrivano. */
.conc-vuoto {
    margin-top: 18px;
    padding: 22px;
    border: 1px dashed var(--sc-filo);
    border-radius: 12px;
    text-align: center;
}

.conc-vuoto p {
    max-width: 46ch;
    margin: 0 auto 14px;
    font-size: 15px;
    line-height: 1.6;
    color: var(--sc-testo-tenue, #546163);
}

/* ── Come funziona ────────────────────────────────────────── */
.conc-passi {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 22px;
    margin-top: 22px;
}

.conc-passo-n {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    margin-bottom: 10px;
    border-radius: 50%;
    background: var(--sc-senape);
    color: var(--sc-bianco);
    font-family: var(--sc-display);
    font-weight: 700;
    font-size: 15px;
}

.conc-passi h3 {
    font-family: var(--sc-display);
    font-size: 17px;
    font-weight: 600;
    color: var(--sc-notte);
    margin-bottom: 6px;
}

.conc-passi p {
    font-size: 14.5px;
    line-height: 1.6;
    color: var(--sc-testo-tenue, #546163);
}

/* ── Modulo ───────────────────────────────────────────────── */
.conc-modulo {
    padding: 34px 32px;
    border-radius: 14px;
    background: var(--sc-sabbia);
}

.conc-sottotitolo {
    max-width: 58ch;
    margin-bottom: 22px;
}

.conc-campi {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px 18px;
}

.conc-campo-largo {
    grid-column: 1 / -1;
}

.conc-campo label {
    display: block;
    margin-bottom: 6px;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--sc-testo-tenue, #546163);
}

.conc-obbl {
    color: var(--sc-senape-scuro);
}

.conc-campo input,
.conc-campo textarea {
    width: 100%;
    padding: 11px 14px;
    border: 1px solid var(--sc-filo);
    border-radius: 10px;
    background: var(--sc-bianco);
    font-family: var(--sc-testo);
    font-size: 15px;
    color: var(--sc-notte);
}

.conc-campo textarea {
    resize: vertical;
    min-height: 96px;
}

.conc-campo input:focus,
.conc-campo textarea:focus {
    outline: none;
    border-color: var(--sc-teal);
    box-shadow: 0 0 0 3px var(--sc-teal-velo);
}

.conc-nota {
    margin-top: 12px;
    font-size: 13px;
    color: var(--sc-testo-debole, #808987);
}

.conc-consenso {
    align-items: flex-start;
    margin-top: 16px;
    padding: 0;
    font-size: 13.5px;
    line-height: 1.5;
}

.conc-consenso .custom-check {
    margin-top: 2px;
}

.conc-consenso .casella-testo {
    white-space: normal;
    overflow: visible;
    color: var(--sc-testo-tenue, #546163);
}

.conc-consenso a {
    color: var(--sc-teal-scuro);
    text-decoration: underline;
}

.conc-invia {
    margin-top: 20px;
}

.conc-errore {
    margin-bottom: 18px;
    padding: 12px 16px;
    border-left: 3px solid var(--sc-senape);
    border-radius: 8px;
    background: var(--sc-senape-velo);
    font-size: 15px;
    color: var(--sc-notte);
}

.conc-esito {
    text-align: center;
    padding: 20px 0;
}

.conc-esito p {
    margin: 8px 0 20px;
    color: var(--sc-testo-tenue, #546163);
}

/* Campo esca: fuori dallo schermo, non display:none — alcuni robot
   ignorano i campi nascosti in modo evidente. */
.conc-esca {
    position: absolute;
    left: -9999px;
    width: 1px;
    height: 1px;
    overflow: hidden;
}

.conc-arrivo {
    padding-top: 28px;
    border-top: 1px solid var(--sc-filo);
}

.conc-arrivo p {
    max-width: 62ch;
    font-size: 15.5px;
    line-height: 1.7;
    color: var(--sc-testo-tenue, #546163);
}

@media (max-width: 768px) {
    .conc-testata h1  { font-size: 29px; }
    .conc-numeri      { grid-template-columns: 1fr; gap: 18px; }
    .conc-numeri strong { font-size: 30px; }
    .conc-passi       { grid-template-columns: 1fr; gap: 26px; }
    .conc-campi       { grid-template-columns: 1fr; }
    .conc-modulo      { padding: 26px 20px; }
}


/* ── Annunci del concessionario ───────────────────────────────
   Le schede sono quelle dell'archivio: stesso partial, stesso
   aspetto. Servono pero' le regole di archivio.css, che su questa
   pagina non e' caricato — da qui il richiamo qui sotto solo per
   cio' che serve a mostrarle in colonna singola. */
.conc-annunci {
    margin-top: 44px;
    padding-top: 32px;
    border-top: 1px solid var(--sc-filo);
}

.conc-caricamento {
    padding: 20px 0;
    color: var(--sc-testo-tenue, #546163);
}

.conc-lista {
    display: grid;
    gap: 16px;
    margin: 22px 0;
}

/* Su questa pagina le schede stanno in colonna singola: la larghezza
   utile e' 900px, e a due colonne le foto diventerebbero francobolli. */
.conc-lista .product-card-horizontal {
    display: grid;
    grid-template-columns: 280px 1fr;
    background: var(--sc-bianco);
    border-radius: 10px;
    overflow: hidden;
    box-shadow: 0 2px 8px rgba(22, 42, 48, 0.08);
}

.conc-lista .product-price-wrapper {
    display: none;   /* prezzo e CTA non servono al rivenditore */
}

.conc-lista .product-thumbs {
    display: none;   /* le miniature appesantiscono senza aggiungere */
}

.conc-tutti {
    display: inline-block;
    margin-bottom: 8px;
}

.conc-dopo-annunci {
    margin-top: 26px;
    padding: 22px;
    border-radius: 12px;
    background: var(--sc-teal-velo);
    text-align: center;
}

.conc-dopo-annunci p {
    margin-bottom: 14px;
    color: var(--sc-notte);
}

@media (max-width: 700px) {
    .conc-lista .product-card-horizontal {
        grid-template-columns: 1fr;
    }
}


/* ── Portale ancora chiuso ────────────────────────────────────
   Quando solo /concessionari e' accessibile, tutto cio' che porta
   altrove va nascosto: menu, ricerca, preferiti, footer. Un link
   che apre una richiesta di password e' un vicolo cieco, e su una
   pagina che deve convincere un rivenditore e' il peggior modo di
   presentarsi.
   Si riapre da .env con SC_PORTALE_APERTO=true: nessuna di queste
   regole si attiva se la classe non c'e'. */
body:has(.portale-chiuso) .nav-links,
body:has(.portale-chiuso) .search-box,
body:has(.portale-chiuso) .header-preferiti,
body:has(.portale-chiuso) .header-hamburger,
body:has(.portale-chiuso) footer .footer-links,
body:has(.portale-chiuso) .wa-barra {
    display: none;
}

/* Il logo resta ma non e' cliccabile: porterebbe alla home protetta */
body:has(.portale-chiuso) .logo {
    pointer-events: none;
}

/* Il CTA "Chiedi aiuto" apre WhatsApp, che non e' dietro la
   password: quello resta ed e' anzi l'unica via di contatto
   immediata. */

/* Schede dei camper non cliccabili: si vedono, non si aprono.
   Il cursore lo dice, cosi' non si clicca a vuoto. */
.product-title-link.is-inerte {
    cursor: default;
    text-decoration: none;
}

.product-title-link.is-inerte:hover {
    color: inherit;
}

/* Il link steso su tutta la scheda (::after) va disattivato, altrimenti
   la scheda resta cliccabile per intero anche senza href utile. */
.product-title-link.is-inerte::after {
    content: none;
}

/* ══════════════════════════════════════════════════════════════
   PULSANTE CONDIVIDI (scheda camper)
   Aggiunto il 1 settembre 2026.

   Gemello di .pd-salva: stessa forma, stessa dimensione, stesso
   comportamento al passaggio del mouse. Sta alla sua sinistra
   perche' salvare e' l'azione piu' frequente e resta all'angolo,
   dove la gente la cerca gia'.

   z-index 3 come .pd-salva: sotto ci sta .pd-gallery-apri, che
   copre tutta la foto. Senza, il clic aprirebbe la galleria.
   ══════════════════════════════════════════════════════════════ */

.pd-condividi {
    position: absolute;
    top: 14px;
    right: 66px;          /* 14 del cuore + 44 di larghezza + 8 di respiro */
    z-index: 3;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: rgba(254, 254, 253, 0.92);
    cursor: pointer;
    transition: background 0.2s, transform 0.18s;
}

/* Il pulsante nasce con l'attributo hidden e lo toglie js/condividi.js.
   display:flex qui sopra vincerebbe su hidden, che vale display:none:
   serve dirlo esplicitamente. */
.pd-condividi[hidden] {
    display: none;
}

.pd-condividi svg {
    width: 20px;
    height: 20px;
    fill: none;
    stroke: var(--sc-notte);
    stroke-width: 1.8;
    stroke-linecap: round;
}

.pd-condividi:hover {
    background: var(--sc-bianco);
    transform: scale(1.08);
}

.pd-condividi:focus-visible {
    outline: 3px solid var(--sc-teal);
    outline-offset: 2px;
}

/* Avviso "Link copiato": lo crea js/condividi.js dentro
   .pd-gallery-main e si toglie da solo dopo poco. */
.pd-condividi-avviso {
    position: absolute;
    top: 66px;
    right: 14px;
    z-index: 4;
    max-width: calc(100% - 28px);
    padding: 8px 14px;
    border-radius: 8px;
    background: var(--sc-notte);
    color: var(--sc-sabbia);
    font-size: 13px;
    font-weight: 500;
    line-height: 1.3;
    box-shadow: 0 6px 18px rgba(22, 42, 48, 0.28);
    animation: pd-condividi-entra 0.18s ease-out;
}

@keyframes pd-condividi-entra {
    from { opacity: 0; transform: translateY(-4px); }
    to   { opacity: 1; transform: translateY(0); }
}

/* Chi ha chiesto meno animazioni non le vede: la comparsa non porta
   informazione, il testo si'. */
@media (prefers-reduced-motion: reduce) {
    .pd-condividi { transition: none; }
    .pd-condividi:hover { transform: none; }
    .pd-condividi-avviso { animation: none; }
}

/* ══════════════════════════════════════════════════════════════
   PAGINE LEGALI (privacy, cookie policy)
   Aggiunto il 1 settembre 2026.

   Il contenuto lo inietta acconsento.click dentro un div vuoto:
   arriva come HTML generico, senza classi nostre. Per questo qui
   si stila per elemento e non per classe — e' l'unico modo per
   raggiungerlo.

   Il selettore e' agganciato a .pagina-legale, quindi vale solo
   dentro queste due pagine e non tocca il resto del sito.
   ══════════════════════════════════════════════════════════════ */

.pagina-legale {
    /* Testo lungo: misura di riga piu' stretta del blocco editoriale
       normale, altrimenti l'occhio perde la riga. */
    max-width: 46rem;
}

.pagina-legale h2,
.pagina-legale h3,
.pagina-legale h4 {
    margin: 30px 0 10px;
    color: var(--sc-notte);
    font-family: var(--sc-display);
    line-height: 1.3;
}

.pagina-legale h2 { font-size: 22px; }
.pagina-legale h3 { font-size: 18px; }
.pagina-legale h4 { font-size: 16px; }

.pagina-legale p,
.pagina-legale li {
    color: var(--sc-testo-tenue);
    font-size: 15.5px;
    line-height: 1.75;
}

.pagina-legale p { margin: 0 0 14px; }

.pagina-legale ul,
.pagina-legale ol {
    margin: 0 0 16px;
    padding-left: 22px;
}

.pagina-legale li { margin-bottom: 6px; }

.pagina-legale a {
    color: var(--sc-teal);
    text-decoration: underline;
    text-underline-offset: 2px;
}

.pagina-legale a:hover { color: var(--sc-teal-scuro); }

.pagina-legale strong { color: var(--sc-notte); }

/* Tabelle dei cookie: arrivano dal servizio, spesso larghe.
   overflow-x sul contenitore evita che sfondino su telefono. */
.pagina-legale table {
    display: block;
    width: 100%;
    overflow-x: auto;
    margin: 0 0 20px;
    border-collapse: collapse;
    font-size: 14px;
}

.pagina-legale th,
.pagina-legale td {
    padding: 9px 12px;
    border: 1px solid var(--sc-filo);
    text-align: left;
    vertical-align: top;
}

.pagina-legale th {
    background: var(--sc-teal-velo);
    color: var(--sc-notte);
    font-weight: 600;
}

/* Riga di attesa: si vede finche' lo script non ha risposto, e
   sparisce da sola perche' il servizio sostituisce il contenuto
   del div. */
.pagina-legale-attesa {
    color: var(--sc-testo-debole);
    font-style: italic;
}

/* ── Dati societari e collegamenti legali nel footer ──────────── */
.footer-societa {
    margin: 0 0 4px;
    line-height: 1.6;
}

.footer-societa:last-child { margin-bottom: 0; }

/* Ragione sociale, sede e partita IVA non devono spezzarsi a meta'
   quando la riga va a capo su telefono. */
.footer-societa strong,
.footer-societa a { white-space: nowrap; }

.footer-societa strong {
    color: var(--footer-testo);
    font-weight: 600;
    white-space: normal;   /* la ragione sociale e' lunga: puo' andare a capo */
}

@media (max-width: 560px) {
    .footer-societa { font-size: 12.5px; }
}

/* ══════════════════════════════════════════════════════════════
   POP-UP RICHIESTA INFORMAZIONI (scheda camper)
   Aggiunto il 1 settembre 2026.

   <dialog> nativo: il fondale e' ::backdrop, non un div nostro.
   Il pop-up e' l'unico passaggio fra la scheda e il contatto, quindi
   deve leggersi in un'occhiata e non sembrare un modulo: due campi,
   una casella, un pulsante.
   ══════════════════════════════════════════════════════════════ */

.pd-richiesta {
    width: min(440px, calc(100vw - 32px));
    max-height: calc(100vh - 32px);
    padding: 0;
    border: none;
    border-radius: 16px;
    background: var(--sc-bianco);
    box-shadow: 0 18px 50px rgba(22, 42, 48, 0.30);
    overflow: visible;
}

.pd-richiesta::backdrop {
    background: rgba(22, 42, 48, 0.55);
}

.pd-richiesta-corpo {
    position: relative;
    padding: 28px 26px 22px;
}

.pd-richiesta-chiudi {
    position: absolute;
    top: 10px;
    right: 12px;
    width: 34px;
    height: 34px;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: transparent;
    color: var(--sc-testo-debole);
    font-size: 26px;
    line-height: 1;
    cursor: pointer;
}

.pd-richiesta-chiudi:hover {
    background: var(--sc-sabbia);
    color: var(--sc-notte);
}

.pd-richiesta-chiudi:focus-visible {
    outline: 3px solid var(--sc-teal);
    outline-offset: 2px;
}

.pd-richiesta-titolo {
    margin: 0 0 8px;
    color: var(--sc-notte);
    font-family: var(--sc-display);
    font-size: 21px;
    line-height: 1.25;
}

.pd-richiesta-intro {
    margin: 0 0 14px;
    color: var(--sc-testo-tenue);
    font-size: 14.5px;
    line-height: 1.6;
}

/* Il veicolo di cui si sta chiedendo: conferma alla persona che sta
   scrivendo per quello giusto, e non per un camper visto prima. */
.pd-richiesta-veicolo {
    margin: 0 0 18px;
    padding: 9px 12px;
    border-left: 3px solid var(--sc-teal);
    border-radius: 0 6px 6px 0;
    background: var(--sc-teal-velo);
    color: var(--sc-notte);
    font-size: 14px;
    font-weight: 600;
    line-height: 1.4;
}

.pd-richiesta-campo {
    display: block;
    margin-bottom: 14px;
}

.pd-richiesta-campo > span {
    display: block;
    margin-bottom: 5px;
    color: var(--sc-notte);
    font-size: 13.5px;
    font-weight: 600;
}

.pd-richiesta-campo input {
    width: 100%;
    height: 44px;
    padding: 0 13px;
    border: 1px solid var(--sc-filo);
    border-radius: 9px;
    background: var(--sc-bianco);
    color: var(--sc-notte);
    font-family: var(--sc-testo);
    /* 16px esatti: sotto questa misura Safari su iPhone ingrandisce la
       pagina all'apertura della tastiera e non la rimpicciolisce piu'. */
    font-size: 16px;
}

.pd-richiesta-campo input:focus {
    border-color: var(--sc-teal);
    outline: 3px solid var(--sc-teal-tenue);
    outline-offset: 0;
}

/* Campo esca: fuori dallo schermo, non display:none — alcuni robot
   saltano i campi nascosti in quel modo, ma compilano questo. */
.pd-richiesta-esca {
    position: absolute;
    left: -9999px;
    width: 1px;
    height: 1px;
    overflow: hidden;
}

.pd-richiesta-errore {
    margin: 0 0 12px;
    padding: 9px 12px;
    border-radius: 8px;
    background: var(--sc-senape-velo);
    color: var(--sc-notte);
    font-size: 13.5px;
    line-height: 1.5;
}

.pd-richiesta-consenso {
    display: flex;
    gap: 9px;
    align-items: flex-start;
    margin-bottom: 18px;
    color: var(--sc-testo-tenue);
    font-size: 13px;
    line-height: 1.5;
    cursor: pointer;
}

.pd-richiesta-consenso input {
    flex: 0 0 auto;
    width: 17px;
    height: 17px;
    margin-top: 1px;
    accent-color: var(--sc-teal);
}

.pd-richiesta-invia {
    display: flex;
    gap: 9px;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 48px;
    border-radius: 26px;
    background: var(--sc-teal);
    color: var(--sc-bianco);
    font-family: var(--sc-testo);
    font-size: 15.5px;
    font-weight: 600;
    text-decoration: none;
    transition: background 0.2s;
}

.pd-richiesta-invia:hover { background: var(--sc-teal-scuro); }

.pd-richiesta-invia:focus-visible {
    outline: 3px solid var(--sc-senape);
    outline-offset: 2px;
}

.pd-richiesta-invia .icona-whatsapp {
    width: 20px;
    height: 20px;
}

.pd-richiesta-nota {
    margin: 12px 0 0;
    color: var(--sc-testo-debole);
    font-size: 12px;
    line-height: 1.5;
    text-align: center;
}

.pd-richiesta-nota a {
    color: var(--sc-teal);
    text-decoration: underline;
    text-underline-offset: 2px;
}

@media (max-width: 420px) {
    .pd-richiesta-corpo { padding: 24px 18px 18px; }
    .pd-richiesta-titolo { font-size: 19px; }
}

@media (prefers-reduced-motion: reduce) {
    .pd-richiesta-invia { transition: none; }
}

/* ══════════════════════════════════════════════════════════════
   LUCCHETTO PREFERENZE COOKIE (acconsento.click)
   Aggiunto il 2 settembre 2026.

   Su telefono il lucchetto flottante finiva sopra la CTA WhatsApp
   della scheda camper, cioe' sopra l'unico pulsante che deve
   restare premibile. Qui esce di scena e il suo posto lo prende il
   collegamento "Preferenze cookie" nel footer.

   NON display:none, e NON si tocca il DOM: l'elemento resta al suo
   posto e cliccabile via JavaScript. E' cosi' che il collegamento
   nel footer riapre il pannello, senza dipendere da funzioni interne
   di acconsento.click che non sono documentate e possono cambiare.
   Vedi js/preferenze-cookie.js.

   !important e' voluto: le regole di posizionamento arrivano dal
   loro foglio di stile, che non controlliamo e che potrebbe a sua
   volta usarlo. E' uno dei pochi casi in cui serve davvero.
   ══════════════════════════════════════════════════════════════ */

#acconsento-lock {
    position: fixed !important;
    left: -9999px !important;
    right: auto !important;
    bottom: 0 !important;
    /* niente visibility:hidden ne' display:none: alcuni componenti
       ignorano i clic su elementi non renderizzati, e qui il clic
       programmatico e' l'unico modo di riaprire il pannello. */
    opacity: 0 !important;
    pointer-events: none !important;
}

/* Il pannello vero e proprio non va toccato: quello deve comparire
   normalmente quando il collegamento lo apre. */
#acconsento-click .acconsento-click-overlay {
    pointer-events: auto;
}
