/* ==========================================================================
   SUNYA - Header & Navigazione
   ========================================================================== */

.sunya-header {
    position: relative;
    z-index: 1000;
    background-color: var(--sunya-header-bg, var(--sunya-color-bg));
    border-bottom: 1px solid var(--sunya-color-border);
    transition: background-color var(--sunya-transition-base),
                box-shadow var(--sunya-transition-base);
}

.sunya-header__inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    min-height: 70px;
    gap: var(--sunya-spacing-lg);
}


/* --------------------------------------------------------------------------
   Logo / Branding
   -------------------------------------------------------------------------- */

.sunya-header__branding {
    flex-shrink: 0;
}

.sunya-logo {
    display: inline-flex;
    align-items: center;
    text-decoration: none;
}

.sunya-logo__img {
    max-height: 50px;
    width: auto;
}

/* Logo light/dark: di default mostra il dark, nasconde il light */
.sunya-logo__img--light {
    display: none;
}

.sunya-logo__img--dark {
    display: block;
}

/* Con header trasparente: mostra light, nasconde dark */
.sunya-header--transparent .sunya-logo__img--light {
    display: block;
}

.sunya-header--transparent .sunya-logo__img--dark {
    display: none;
}


.sunya-logo--text {
    flex-direction: column;
    gap: 2px;
}

.sunya-site-title {
    font-family: var(--sunya-font-heading);
    font-size: var(--sunya-font-size-xl);
    font-weight: var(--sunya-font-weight-bold);
    color: var(--sunya-header-color, var(--sunya-color-primary));
    line-height: 1;
}

.sunya-site-description {
    font-size: var(--sunya-font-size-sm);
    color: var(--sunya-color-text-light);
    line-height: 1;
}


/* --------------------------------------------------------------------------
   Header trasparente (base)
   Posizione absolute sopra il contenuto, sfondo trasparente.
   Se anche sticky è attivo, diventa fixed allo scroll.
   Se sticky è OFF, scorre via con la pagina.
   -------------------------------------------------------------------------- */

.sunya-header--transparent {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    background-color: transparent;
    border-bottom: none;
}

/* Trasparente + TopBar: posiziona l'header sotto la topbar (stato iniziale) */
.sunya-has-topbar .sunya-header--transparent:not(.sunya-header--scrolled) {
    top: var(--sunya-topbar-height, 0px);
}

/* INCHIOSTRO DELL'HEADER TRASPARENTE (v1.8.3)

   Era la radice di tutta la rincorsa di specificita' della nav. Il
   #ffffff stava qui come VALORE su tre consumatori (site-title, voci
   nav, actions) piu' l'hamburger poco sotto: siccome pesava (0,2,2) e
   la conversione a solido non lo poteva ereditare, ogni stato che
   rendeva l'header solido doveva RIDICHIARARE il colore giusto a
   specificita' maggiore — (0,4,2) allo scroll, (0,3,3) in no-hero e in
   transparent-dark. Quelle regole a loro volta spegnevano l'hover, che
   e' dovuto risalire a (0,5,2) e (0,4,3). Quattro terne per un colore.

   Ora il bianco e' un VALORE DEL TOKEN, dichiarato dalla superficie:
   quando l'header e' davvero trasparente sopra una hero scura, la carta
   e' la foto e l'inchiostro e' bianco. Le tre gemelle di conversione
   (v1.7.7 no-hero/force-solid, v1.8.2 scrolled) dichiarano il proprio,
   e i consumatori non sanno piu' in che stato si trovano: leggono
   --sunya-header-color e basta.

   Le guardie replicano esattamente cio' che prima facevano le regole a
   specificita' maggiore, ma per COSTRUZIONE invece che per cascata: i
   quattro rami sono mutuamente esclusivi, quindi l'ordine nel file non
   conta piu'. Stanno in :where() a peso zero — il selettore pesa
   (0,2,1), quanto basta a battere l'inline del Customizer (0,1,0), che
   emette --sunya-header-color sulla .sunya-header quando lo stile
   header e' esplicito: sopra una hero l'inchiostro lo decide la foto,
   non il select.

   :not(.sunya-header--scrolled) e' necessario e non ridondante con le
   guardie: --scrolled arriva da handleScroll() a 50px anche su pagine
   che nessuna body class converte. */
body:where(:not(.sunya-no-hero):not(.sunya-header-force-solid):not(.sunya-header-transparent-dark)) .sunya-header--transparent:not(.sunya-header--scrolled) {
    --sunya-header-color: #ffffff;
    /* v1.8.4: la stessa superficie decide anche l'inchiostro di stato
       della nav. Qui la carta e' la foto, quindi accent-ink-on-dark —
       non accent-ink, che segue la modalita' del sito e su un header
       chiaro varrebbe #111111: nero su una hero scura. E' la stessa
       trappola in cui la v1.7.5 era caduta con i pulsanti e che la
       v1.7.6 ha corretto. */
    --sunya-nav-ink: var(--sunya-color-accent-ink-on-dark, var(--sunya-color-accent));
}

/* --------------------------------------------------------------------------
   CTA header: inversione con lo stato (v1.6.7, corretta in v1.6.8)

   .sunya-header__actions porta gia' l'inchiostro giusto per lo stato
   (bianco quando trasparente, --sunya-header-color allo scroll), ma il
   CTA e' un bottone PIENO con colori espliciti: quell'eredita' non lo
   raggiunge. Prima di questa regola era l'UNICO elemento dell'header a
   non partecipare all'alternanza — un rettangolo surface-dark su una
   hero cover scura, dove si perdeva nello sfondo.

   v1.6.8 — CORREZIONE IMPORTANTE. La prima stesura agganciava
   .sunya-header__cta senza distinguere lo stile scelto nel Customizer
   (sunya_header_cta_style: primary | outline | secondary). Misurato:
   nello stato trasparente tutti e tre davano lo stesso bottone bianco,
   cioe' la regola ANNULLAVA l'impostazione dell'utente. Ora ogni
   variante mantiene la propria identita':

     primary   -> resta accent pieno. Chi sceglie "pieno" vuole l'accent,
                  e sull'hero scura l'accent e' gia' il colore che stacca.
     outline   -> contorno e testo passano a text-on-dark: l'accent-contrast
                  su una foto scura non regge, ma la semantica "contorno"
                  va conservata.
     secondary -> inverte la coppia: fondo text-on-dark, inchiostro
                  surface-dark. Allo scroll torna alla base (l'inverso).

   Regge in entrambe le modalita': surface-dark resta scura e text-on-dark
   resta chiaro anche in Scuro, quindi il contrasto INTERNO al bottone non
   dipende dalla modalita'.

   Specificita' 0,4,0 (0,5,0 sugli stati): batte le varianti di
   buttons.css (0,1,0, hover 0,2,0). Un child ribrandizza da >=0,4,0.

   v1.7.4 — DUE CORREZIONI DI STATO.

   (1) GUARDIA. `:not(--scrolled)` non significa "trasparente sopra una
   hero". Su una pagina senza hero, con force-solid o con
   transparent-dark, l'header e' GIA' solido ma la classe --scrolled
   non c'e' finche' non si scrolla: il CTA restava vestito per stare
   sopra una foto. In Chiara l'outline diventava chiaro-su-chiaro
   (invisibile) e il secondary perdeva il proprio contorno nel bianco.
   Le tre guardie stanno in :where() a peso zero — la specificita'
   resta (0,4,0) e il contratto per i child non cambia.

   (2) HEADER SOLIDO SCURO. `secondary` e' un pieno su surface-dark:
   su un header scuro il pulsante ha lo stesso colore del fondo e
   sparisce, restando solo il testo. Difetto preesistente, gia' visibile
   oggi nello stato scrolled in modalita' Scuro. Ora la stessa
   inversione dello stato hero vale ovunque l'header sia scuro, via
   body.sunya-header-style-dark (v1.7.3). Selettore a (0,2,0) / (0,3,0):
   basta a battere buttons.css, non serve di piu'.
   `outline` NON e' incluso: bordo e testo accent su un header scuro
   staccano gia' — e su un brand come roxzone (giallo su nero) sono
   anche piu' fedeli di un contorno neutro.
   Escluso transparent-dark: li' l'header e' trasparente su hero CHIARA,
   e l'inversione lo renderebbe illeggibile. Residuo accettato:
   transparent-dark + stile header scuro + scrolled ricade sulle
   varianti base.
   -------------------------------------------------------------------------- */

:where(body:not(.sunya-no-hero):not(.sunya-header-force-solid):not(.sunya-header-transparent-dark)) .sunya-header--transparent:not(.sunya-header--scrolled) .sunya-header__cta.sunya-btn--secondary,
:where(body.sunya-header-style-dark:not(.sunya-header-transparent-dark)) .sunya-header__cta.sunya-btn--secondary {
    background-color: var(--sunya-color-text-on-dark, #ffffff);
    border-color: var(--sunya-color-text-on-dark, #ffffff);
    color: var(--sunya-color-surface-dark, var(--sunya-color-primary));
}

/* Hover: si svuota lasciando il contorno chiaro. Uno scurimento del
   fondo sparirebbe dentro l'immagine. */
:where(body:not(.sunya-no-hero):not(.sunya-header-force-solid):not(.sunya-header-transparent-dark)) .sunya-header--transparent:not(.sunya-header--scrolled) .sunya-header__cta.sunya-btn--secondary:hover,
:where(body:not(.sunya-no-hero):not(.sunya-header-force-solid):not(.sunya-header-transparent-dark)) .sunya-header--transparent:not(.sunya-header--scrolled) .sunya-header__cta.sunya-btn--secondary:focus-visible,
:where(body.sunya-header-style-dark:not(.sunya-header-transparent-dark)) .sunya-header__cta.sunya-btn--secondary:hover,
:where(body.sunya-header-style-dark:not(.sunya-header-transparent-dark)) .sunya-header__cta.sunya-btn--secondary:focus-visible {
    background-color: transparent;
    border-color: var(--sunya-color-text-on-dark, #ffffff);
    color: var(--sunya-color-text-on-dark, #ffffff);
}

:where(body:not(.sunya-no-hero):not(.sunya-header-force-solid):not(.sunya-header-transparent-dark)) .sunya-header--transparent:not(.sunya-header--scrolled) .sunya-header__cta.sunya-btn--outline {
    border-color: var(--sunya-color-text-on-dark, #ffffff);
    color: var(--sunya-color-text-on-dark, #ffffff);
}

:where(body:not(.sunya-no-hero):not(.sunya-header-force-solid):not(.sunya-header-transparent-dark)) .sunya-header--transparent:not(.sunya-header--scrolled) .sunya-header__cta.sunya-btn--outline:hover,
:where(body:not(.sunya-no-hero):not(.sunya-header-force-solid):not(.sunya-header-transparent-dark)) .sunya-header--transparent:not(.sunya-header--scrolled) .sunya-header__cta.sunya-btn--outline:focus-visible {
    background-color: var(--sunya-color-text-on-dark, #ffffff);
    border-color: var(--sunya-color-text-on-dark, #ffffff);
    color: var(--sunya-color-surface-dark, var(--sunya-color-primary));
}

/* Scrim gradient: sfumatura scura sottile dietro il testo.
   Migliora la leggibilità reale su hero chiari e fornisce a
   WAVE/Lighthouse un background-color calcolabile.
   Pratica standard nei temi professionali (Astra, OceanWP, Flavor). */
.sunya-header--transparent::before {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(to bottom, rgba(0, 0, 0, 0.45) 0%, rgba(0, 0, 0, 0) 100%);
    pointer-events: none;
    z-index: -1;
}


/* --------------------------------------------------------------------------
   Header trasparente + sticky (scroll)
   Solo con sticky attivo: absolute → fixed allo scroll.
   Il selettore richiede ENTRAMBE le classi.
   -------------------------------------------------------------------------- */

.sunya-header--transparent.sunya-header--sticky-enabled.sunya-header--scrolled {
    position: fixed;
    top: 0;
    background-color: var(--sunya-header-bg, var(--sunya-color-bg));
    border-bottom: 1px solid var(--sunya-color-border);
    box-shadow: var(--sunya-shadow-md);
}

/* Rimuovi scrim quando header è solido (scrolled, no-hero, force-solid) */
.sunya-header--transparent.sunya-header--scrolled::before {
    display: none;
}

/* v1.8.3 — RIMOSSE le regole di riposo di questo stato (site-title,
   voci nav, actions). Dichiaravano `color: var(--sunya-header-color,
   ...)`, cioe' esattamente quello che i tre consumatori leggono gia'
   nella loro regola base: esistevano solo per battere il #ffffff
   dell'header trasparente, che dalla v1.8.3 non e' piu' un valore ma
   un token dichiarato dalla superficie. Il token per questo stato lo
   emette la gemella `scrolled` della v1.8.2, in fondo al file.
   Il fallback --sunya-color-heading spariva comunque inutilizzato: le
   due gemelle definiscono --sunya-header-color in ogni caso, e un
   fallback dentro var() non entra mai se il token esiste a monte.

   v1.8.4 — RIMOSSA anche la terna hover a (0,5,2), che dichiarava
   `accent-ink`. Non serve piu' nominarlo qui: la terna base della nav
   lo prende come secondo anello della sua catena di fallback, ed e'
   corretto proprio in questo stato — allo scroll l'header e' solido,
   la carta e' --sunya-header-bg. Con essa sparisce il commento che
   spiegava perche' (0,5,2) doveva "rimettere in gioco" l'hover. */

/* Logo swap: trasparente mostra light, scrolled torna a dark */
.sunya-header--transparent.sunya-header--sticky-enabled.sunya-header--scrolled .sunya-logo__img--light {
    display: none;
}

.sunya-header--transparent.sunya-header--sticky-enabled.sunya-header--scrolled .sunya-logo__img--dark {
    display: block;
}


/* --------------------------------------------------------------------------
   Compensazione spazio per header trasparente
   -------------------------------------------------------------------------- */

.sunya-has-transparent-header .sunya-main {
    padding-top: 0;
}

.sunya-has-topbar.sunya-has-transparent-header .sunya-main {
    padding-top: 0;
}

/* Singolo post: ripristina spaziatura superiore.
   Stessa specificità (0,2,0) della regola sopra ma posizione successiva → vince. */
.sunya-has-transparent-header .sunya-main--single {
    padding-top: var(--sunya-spacing-2xl);
}


/* --------------------------------------------------------------------------
   Header sticky non-trasparente
   Position sticky puro: la topbar è in flow sopra, scorre via,
   poi l'header si aggancia a top:0.
   -------------------------------------------------------------------------- */

.sunya-header--sticky-enabled:not(.sunya-header--transparent) {
    position: sticky;
    top: 0;
    z-index: 1000;
}

/* Shadow allo scroll (solo estetico) */
.sunya-header--sticky-enabled.sunya-header--scrolled:not(.sunya-header--transparent) {
    box-shadow: var(--sunya-shadow-md);
}


/* --------------------------------------------------------------------------
   Navigazione desktop
   -------------------------------------------------------------------------- */

.sunya-nav {
    display: flex;
    align-items: center;
}

/* --- Allineamento navigazione: Destra (default) --- */
.sunya-nav--right {
    margin-left: auto;
}

/* --- Allineamento navigazione: Sinistra --- */
.sunya-nav--left {
    margin-left: var(--sunya-spacing-xl, 2rem);
    margin-right: auto;
}

.sunya-nav--left ~ .sunya-header__actions {
    margin-left: auto;
}

/* --- Allineamento navigazione: Centrato --- */
.sunya-nav--center {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
}

/* Header inner deve essere position:relative per il centro assoluto */
.sunya-header__inner:has(.sunya-nav--center) {
    position: relative;
}

.sunya-nav--center ~ .sunya-header__actions {
    margin-left: auto;
}

.sunya-nav__menu {
    display: flex;
    list-style: none;
    margin: 0;
    padding: 0;
    gap: 0;
}

.sunya-nav__menu > li {
    position: relative;
}

.sunya-nav__menu > li > a {
    display: flex;
    align-items: center;
    padding: var(--sunya-spacing-md) var(--sunya-spacing-lg);
    color: var(--sunya-header-color, var(--sunya-color-primary));
    font-size: var(--sunya-font-size-base);
    font-weight: var(--sunya-font-weight-medium);
    text-decoration: none;
    transition: color var(--sunya-transition-fast);
    white-space: nowrap;
}

/* L'UNICA dichiarazione di colore di stato della nav (v1.8.4).

   Fino alla v1.8.3 erano quattro terne, a (0,2,2), (0,3,3), (0,4,3) e
   (0,5,2), e la scala non descriveva un design: descriveva una
   rincorsa. Ogni stato ridichiarava il colore a specificita' maggiore
   del precedente, e la v1.7.3 aveva gia' mostrato dove porta — una
   regola di stato che ridichiara `color` senza portarsi dietro :hover
   spegne l'hover in silenzio.

   Ora l'elemento non sceglie piu' il colore in base allo stato: consuma
   un token, e sono gli stati a ridefinire il token sul contenitore. Le
   custom property si risolvono sull'elemento risalendo l'ereditarieta'
   e NON competono nella cascata come i valori, quindi la scala di
   specificita' semplicemente non serve piu'.

   La catena di fallback e' l'ordine delle carte, dalla piu' locale alla
   piu' generale:
     --sunya-nav-ink   dichiarato solo dai due rami trasparenti (la
                       carta e' la hero) e dal pannello mobile
     accent-ink        la carta e' l'header solido; il PHP lo ricalcola
                       sulla .sunya-header quando la superficie diverge
                       dalla modalita' (v1.7.5)
     accent            ultima spiaggia, se un child non emette i token

   Il fallback annidato non e' ridondanza difensiva: --sunya-nav-ink
   NON esiste nella maggior parte degli stati, ed e' proprio quel non
   esistere a far scendere il valore di un gradino. Diverso dal caso
   della v1.2.9, dove il fallback dentro var() non entrava mai perche'
   il token era definito a monte. */
.sunya-nav__menu > li > a:hover,
.sunya-nav__menu > li > a:focus-visible,
.sunya-nav__menu > li.current-menu-item > a {
    color: var(--sunya-nav-ink, var(--sunya-color-accent-ink, var(--sunya-color-accent)));
}

/* Sottolineatura di stato (v1.8.0) — segnale NON cromatico.

   Il colore da solo non basta: dove l'inchiostro leggibile della carta
   coincide con il colore del testo a riposo (roxzone su header chiaro:
   accent-ink #111111 = header-color) hover e riposo misurano 1.00, e la
   voce corrente smette di distinguersi. Questa regola e' il canale che
   sopravvive in quel caso, e copre WCAG 1.4.1.

   `currentColor` di proposito: la sottolineatura eredita il colore del
   testo, gia' verificato leggibile sulla carta. Usare l'accent qui
   reintrodurrebbe il difetto — su header chiaro misura 1.23, sotto il
   3:1 che 1.4.11 chiede a un elemento non testuale.

   I tre token li emette il PHP da `sunya_nav_underline`; con "Nessuna"
   la linea e' `none` e resta il solo colore. I fallback coprono il caso
   di CSS servito senza l'inline (child in sviluppo, cache parziale). */
.sunya-nav__menu > li > a:hover,
.sunya-nav__menu > li > a:focus-visible,
.sunya-nav__menu > li.current-menu-item > a {
    text-decoration-line: var(--sunya-nav-underline-line, underline);
    text-decoration-color: currentColor;
    text-decoration-style: var(--sunya-nav-underline-style, solid);
    text-decoration-thickness: var(--sunya-nav-underline-width, 1px);
    text-underline-offset: 0.32em;
}


/* --------------------------------------------------------------------------
   Header actions (social + CTA)
   -------------------------------------------------------------------------- */

.sunya-header__actions {
    display: flex;
    align-items: center;
    gap: var(--sunya-spacing-md);
    flex-shrink: 0;
    /* v1.8.3: consumatore del token, come site-title e hamburger. Prima
       il colore arrivava solo dalle regole per stato (bianco da
       trasparente, --sunya-header-color dalle tre conversioni): senza
       una dichiarazione base, rimuovere quelle regole avrebbe lasciato
       le icone social al colore ereditato dal body. */
    color: var(--sunya-header-color, var(--sunya-color-primary));
}

.sunya-header__cta {
    white-space: nowrap;
}


/* --------------------------------------------------------------------------
   Sottomenu (dropdown)
   -------------------------------------------------------------------------- */

.sunya-nav__menu .sub-menu {
    position: absolute;
    top: 100%;
    left: 0;
    min-width: 220px;
    background-color: var(--sunya-color-bg);
    border: 1px solid var(--sunya-color-border);
    border-radius: var(--sunya-radius-md);
    box-shadow: var(--sunya-shadow-lg);
    list-style: none;
    margin: 0;
    padding: var(--sunya-spacing-xs) 0;
    opacity: 0;
    visibility: hidden;
    transform: translateY(8px);
    transition: opacity var(--sunya-transition-base),
                transform var(--sunya-transition-base),
                visibility var(--sunya-transition-base);
    z-index: 100;
}

.sunya-nav__menu .sub-menu > li {
    position: relative;
}

.sunya-nav__menu .sub-menu a {
    display: block;
    padding: var(--sunya-spacing-sm) var(--sunya-spacing-lg);
    color: var(--sunya-color-text);
    font-size: var(--sunya-font-size-sm);
    text-decoration: none;
    transition: background-color var(--sunya-transition-fast),
                color var(--sunya-transition-fast);
}

.sunya-nav__menu .sub-menu a:hover,
.sunya-nav__menu .sub-menu a:focus-visible {
    background-color: var(--sunya-color-bg-alt);
    color: var(--sunya-color-accent);
}

/* Apertura al hover (desktop) */
@media screen and (min-width: 1025px) {
    .menu-item-has-children:hover > .sub-menu,
    .menu-item-has-children:focus-within > .sub-menu {
        opacity: 1;
        visibility: visible;
        transform: translateY(0);
    }

    /* --- Sottomenu secondo livello: Destra (default) --- */
    .sunya-submenu--right .sub-menu .sub-menu {
        top: 0;
        left: 100%;
        right: auto;
        transform: translateX(8px);
    }

    .sunya-submenu--right .menu-item-has-children:hover > .sub-menu .sub-menu,
    .sunya-submenu--right .menu-item-has-children:focus-within > .sub-menu .sub-menu {
        transform: translateX(0);
    }

    /* --- Sottomenu secondo livello: Sinistra --- */
    .sunya-submenu--left .sub-menu {
        left: auto;
        right: 0;
    }

    .sunya-submenu--left .sub-menu .sub-menu {
        top: 0;
        left: auto;
        right: 100%;
        transform: translateX(-8px);
    }

    .sunya-submenu--left .menu-item-has-children:hover > .sub-menu .sub-menu,
    .sunya-submenu--left .menu-item-has-children:focus-within > .sub-menu .sub-menu {
        transform: translateX(0);
    }

    /* Nascondi il toggle freccia JS su desktop (usato solo su mobile) */
    #sunya-nav .sunya-nav__sub-toggle {
        display: none !important;
    }

    /* Icona dropdown: freccia CSS su voci con sottomenu (desktop) */
    .sunya-nav__menu .menu-item-has-children > a::after {
        content: '';
        display: inline-block;
        box-sizing: content-box;
        width: 6px;
        height: 6px;
        max-width: 6px;
        max-height: 6px;
        min-width: 6px;
        min-height: 6px;
        padding: 0;
        border: 0 solid currentColor;
        border-right-width: 1.5px;
        border-bottom-width: 1.5px;
        transform: rotate(45deg);
        margin-left: 6px;
        vertical-align: middle;
        opacity: 0.6;
        flex-shrink: 0;
        flex-grow: 0;
        transition: transform var(--sunya-transition-fast),
                    opacity var(--sunya-transition-fast);
    }

    .sunya-nav__menu .menu-item-has-children:hover > a::after {
        opacity: 1;
    }

    /* Sub-livelli: link flex per allineare freccia al lato */
    .sunya-nav__menu .sub-menu .menu-item-has-children > a {
        display: flex;
        align-items: center;
        justify-content: space-between;
    }

    /* Sub-livelli: freccia più piccola */
    .sunya-nav__menu .sub-menu .menu-item-has-children > a::after {
        width: 5px;
        height: 5px;
        max-width: 5px;
        max-height: 5px;
        min-width: 5px;
        min-height: 5px;
    }

    /* Sub-livelli destra: freccia allineata a destra */
    .sunya-submenu--right .sunya-nav__menu .sub-menu .menu-item-has-children > a::after {
        transform: rotate(-45deg);
        margin-left: 12px;
    }

    /* Sub-livelli sinistra: freccia allineata a sinistra */
    .sunya-submenu--left .sunya-nav__menu .sub-menu .menu-item-has-children > a::after {
        transform: rotate(135deg);
        margin-left: 0;
        margin-right: 12px;
        order: -1;
    }
}


/* --------------------------------------------------------------------------
   Toggle sottomenu (freccia)
   -------------------------------------------------------------------------- */

.sunya-nav__sub-toggle {
    background: none;
    border: none;
    cursor: pointer;
    padding: var(--sunya-spacing-sm);
    line-height: 1;
}

.sunya-nav__arrow {
    display: inline-block;
    width: 8px;
    height: 8px;
    border-right: 2px solid currentColor;
    border-bottom: 2px solid currentColor;
    transform: rotate(45deg);
    transition: transform var(--sunya-transition-fast);
}

.sunya-sub--open > .sunya-nav__sub-toggle .sunya-nav__arrow {
    transform: rotate(-135deg);
}


/* --------------------------------------------------------------------------
   Hamburger (mobile toggle)
   -------------------------------------------------------------------------- */

.sunya-nav__toggle {
    display: none;
    background: none;
    border: none;
    cursor: pointer;
    padding: var(--sunya-spacing-sm);
    z-index: 1001;
}

.sunya-nav__toggle-icon {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    width: 24px;
    height: 18px;
}

.sunya-nav__toggle-icon span {
    display: block;
    width: 100%;
    height: 2px;
    background-color: var(--sunya-header-color, var(--sunya-color-primary));
    border-radius: 2px;
    transition: transform var(--sunya-transition-base),
                opacity var(--sunya-transition-fast);
    transform-origin: center;
}

/* Animazione hamburger → X */
.sunya-nav__toggle[aria-expanded="true"] .sunya-nav__toggle-icon span:nth-child(1) {
    transform: translateY(8px) rotate(45deg);
}

.sunya-nav__toggle[aria-expanded="true"] .sunya-nav__toggle-icon span:nth-child(2) {
    opacity: 0;
}

.sunya-nav__toggle[aria-expanded="true"] .sunya-nav__toggle-icon span:nth-child(3) {
    transform: translateY(-8px) rotate(-45deg);
}

/* v1.8.3 — RIMOSSE le due regole dell'hamburger per stato (#ffffff da
   trasparente, --sunya-header-color da scrolled). La regola base qui
   sopra consuma gia' il token, e il token ora lo dichiara la
   superficie. Era, in piccolo, la stessa struttura che la v1.8.2 aveva
   dovuto riparare: un consumatore che sceglie il colore in base allo
   stato invece di leggere l'inchiostro dell'header. */


/* Social mobile: nascosto su desktop */
.sunya-nav__mobile-social {
    display: none;
}


/* --------------------------------------------------------------------------
   Mobile Navigation
   -------------------------------------------------------------------------- */

@media screen and (max-width: 1024px) {

    /* Rimuovi frecce CSS desktop su mobile */
    .sunya-nav__menu .menu-item-has-children > a::after {
        display: none;
    }

    /* Reset allineamento nav su mobile:
       L'hamburger deve restare a destra, il menu è slide-out panel */
    .sunya-nav--center,
    .sunya-nav--left,
    .sunya-nav--right {
        position: static;
        transform: none;
        margin-left: auto;
        margin-right: 0;
    }

    .sunya-nav__toggle {
        display: flex;
        align-items: center;
    }

    /* ----------------------------------------------------------------
       L'HEADER NON ESCE DALLO SCHERMO (v1.8.5)

       Misurato su demo-roxzonemedia: branding 198 + hamburger 40 + CTA
       155 + due gap da 24 + padding 32 = 473px MINIMI. Su un telefono
       da 360 sforava di ~113px, e `overflow-x: clip` sul body lo
       tagliava invece di mostrarlo — quindi il difetto era silenzioso,
       senza nemmeno una barra di scorrimento a segnalarlo.

       La causa non era il CTA in se': era che NIENTE poteva cedere.
       .sunya-header__branding e .sunya-header__actions avevano
       entrambi flex-shrink: 0, e il CTA white-space: nowrap. Tre
       elementi incomprimibili in una riga di larghezza fissa.

       Qui non si nasconde niente: si stabilisce un ORDINE DI SACRIFICIO,
       cosi' la regola vale sia col titolo testuale sia col logo, che e'
       il caso abituale e occupa meno spazio.

         1. cede il branding — il titolo tronca con ellissi, il logo si
            rimpicciolisce mantenendo le proporzioni
         2. l'hamburger non cede MAI: e' l'unico accesso al menu
         3. cede il CTA, per ultimo e solo se serve

       flex-shrink senza min-width: 0 non basta: il minimo automatico di
       un flex item e' la sua larghezza di contenuto, e con `nowrap` quel
       contenuto non si accorcia mai. E' la ragione per cui il difetto
       resisteva a una riga di CSS.
       ---------------------------------------------------------------- */

    .sunya-header__inner {
        gap: var(--sunya-spacing-sm, 0.5rem);
    }

    /* 1. Il branding cede per primo — e cede TRE VOLTE PIU' IN FRETTA.

       flex-shrink distribuisce la riduzione in proporzione alla
       larghezza di base: con 1 e 1, branding e CTA si stringono
       insieme. Misurato a 360px con un titolo di 41 caratteri: il CTA
       finiva a 69px e mostrava "ULSANTE CT", tagliato ai due lati
       perche' il testo e' centrato. Dentro lo schermo, ma inutile.
       Con 3 il titolo — che ha gia' l'ellissi e resta comunque
       cliccabile verso la home — assorbe quasi tutta la riduzione. */
    .sunya-header__branding {
        flex-shrink: 3;
        min-width: 0;
    }

    .sunya-logo {
        max-width: 100%;
        min-width: 0;
        overflow: hidden;
    }

    .sunya-site-title,
    .sunya-site-description {
        max-width: 100%;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }

    /* Il logo resta proporzionato: max-height continua a limitare
       l'altezza, max-width entra in gioco solo quando lo spazio
       orizzontale non basta.

       v1.8.6: il selettore prende QUALSIASI immagine dentro .sunya-logo,
       non solo .sunya-logo__img. Verificato su roxzonemedia.it: il logo
       li' e' `img.custom-logo`, il markup del logo nativo di WordPress,
       che la classe BEM del tema non tocca. Con la sola .sunya-logo__img
       il contenitore lo avrebbe TAGLIATO (overflow: hidden) invece di
       rimpicciolirlo — cioe' il difetto di partenza, spostato di un
       elemento. */
    .sunya-logo img {
        max-width: 100%;
        height: auto;
    }

    /* 2. L'hamburger non cede mai */
    .sunya-nav,
    .sunya-nav__toggle {
        flex-shrink: 0;
    }

    /* 3. Il CTA cede per ultimo, e non sotto la soglia di leggibilita'.

       min-width in em, non in pixel: segue il corpo del testo che il
       brand imposta. Sotto quella larghezza il pulsante mostrerebbe
       mezza parola e non farebbe piu' il suo mestiere. Non riporta lo
       sforamento, perche' il branding ha min-width: 0 e puo' cedere
       fino quasi a sparire: lo spazio per rispettare questo minimo si
       trova sempre prima che il CTA debba violarlo. */
    .sunya-header__actions {
        flex-shrink: 1;
        min-width: 0;
    }

    .sunya-header__cta {
        flex-shrink: 1;
        min-width: 7em;
        overflow: hidden;
    }

    .sunya-nav__menu-wrapper {
        position: fixed;
        top: 0;
        right: -100%;
        width: 300px;
        max-width: 85vw;
        height: 100vh;
        background-color: var(--sunya-color-bg);
        box-shadow: var(--sunya-shadow-xl);
        padding: calc(70px + var(--sunya-spacing-lg)) var(--sunya-spacing-lg) var(--sunya-spacing-lg);
        overflow-y: auto;
        transition: right var(--sunya-transition-smooth),
                    visibility var(--sunya-transition-smooth);
        z-index: 1000;
        visibility: hidden;
    }

    .sunya-nav__menu-wrapper.sunya-nav--open {
        right: 0;
        visibility: visible;
    }

    .sunya-nav__menu {
        flex-direction: column;
        gap: 0;
    }

    /* v1.8.4: le due varianti qualificate sono cadute. Esistevano per
       scavalcare il #ffffff dell'header trasparente, che dalla v1.8.3
       non e' piu' un valore ma un token — e nel pannello il token non
       arriva comunque, perche' e' il wrapper a dichiarare la propria
       superficie qui sotto. Restano padding e bordo. */
    .sunya-nav__menu > li > a {
        padding: var(--sunya-spacing-md) 0;
        border-bottom: 1px solid var(--sunya-color-border);
    }

    /* IL PANNELLO E' UNA SUPERFICIE A SE' (v1.8.4).

       Lo slide-out ha carta --sunya-color-bg, che non c'entra nulla con
       la carta dell'header: sopra una hero scura l'header e' bianco su
       foto, mentre il pannello resta il foglio del sito. Prima la
       differenza la diceva il colore, ripetuto in tre regole; ora la
       dice una volta sola, con il token che i link leggono gia'.

       accent-ink e non -on-light/-on-dark: la carta del pannello E'
       quella della modalita', e accent-ink e' per definizione
       l'inchiostro calibrato su quella. Un child che desse al pannello
       una carta propria ridefinirebbe --sunya-nav-ink su questo stesso
       selettore.

       La dichiarazione sta DENTRO il media query di proposito: il
       wrapper e' nel DOM anche su desktop, ed essendo piu' vicino ai
       link della .sunya-header vincerebbe sui rami trasparenti,
       spegnendo l'inchiostro bianco sopra la hero. */
    .sunya-nav__menu-wrapper {
        --sunya-nav-ink: var(--sunya-color-accent-ink, var(--sunya-color-accent));
    }

    /* Contrasto a11y: il pannello mobile ha sfondo chiaro (--sunya-color-bg),
       quindi i link DEVONO essere scuri indipendentemente dall'header trasparente.
       Specificità (0,3,1) batte child theme rules come
       .sunya-header--transparent .sunya-nav__menu > li > a (0,2,1)
       senza dipendere dall'ordine di caricamento. */
    .sunya-nav__menu-wrapper .sunya-nav__menu > li > a {
        color: var(--sunya-color-text);
    }

    /* v1.8.4: aggiunta la voce corrente, e il colore passa al token.
       Fino alla v1.8.3 la voce corrente nello slide-out era accentata
       per effetto collaterale — la terna no-hero, pesando (0,4,3),
       arrivava fin qui. Caduta quella, senza questa riga la voce
       corrente nel pannello smetteva di distinguersi. Ora ci arriva di
       proposito, e con l'inchiostro giusto per la carta del pannello:
       su un brand con accent luminoso (roxzone: #f5e000) l'hover era
       1.23 sul foglio chiaro, ora e' accent-ink.
       Stessa specificita' della regola di riposo qui sopra (0,3,2):
       vince per ordine sorgente, stando dopo. */
    .sunya-nav__menu-wrapper .sunya-nav__menu > li > a:hover,
    .sunya-nav__menu-wrapper .sunya-nav__menu > li > a:focus-visible,
    .sunya-nav__menu-wrapper .sunya-nav__menu > li.current-menu-item > a {
        color: var(--sunya-nav-ink, var(--sunya-color-accent));
    }

    /* Sottomenu mobile */
    .sunya-nav__menu .sub-menu {
        position: static;
        opacity: 1;
        visibility: visible;
        transform: none;
        box-shadow: none;
        border: none;
        border-radius: 0;
        padding: 0;
        display: none;
        background: transparent;
    }

    .sunya-sub--open > .sub-menu {
        display: block;
    }

    .sunya-nav__menu .sub-menu a {
        padding-left: var(--sunya-spacing-lg);
    }

    .sunya-nav__menu .sub-menu .sub-menu a {
        padding-left: var(--sunya-spacing-2xl);
    }

    /* Toggle sottomenu su mobile */
    .menu-item-has-children {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
    }

    .menu-item-has-children > a {
        flex: 1;
    }

    .menu-item-has-children > .sub-menu {
        width: 100%;
    }

    .sunya-nav__sub-toggle {
        display: flex;
        align-items: center;
        justify-content: center;
        width: 44px;
        height: 44px;
        color: var(--sunya-color-text-light);
    }

    /* Sottomenu: colore fisso indipendente da header trasparente */
    .sunya-nav__menu .sub-menu a,
    .sunya-header--transparent .sunya-nav__menu .sub-menu a,
    .sunya-header--transparent.sunya-header--scrolled .sunya-nav__menu .sub-menu a {
        color: var(--sunya-color-text);
    }

    /* Toggle freccia sottomenu: colore fisso */
    .sunya-nav__sub-toggle,
    .sunya-header--transparent .sunya-nav__sub-toggle,
    .sunya-header--transparent.sunya-header--scrolled .sunya-nav__sub-toggle {
        color: var(--sunya-color-text-light, #6b7280);
    }

    /* Nasconde social dall'header actions su mobile */
    .sunya-header__actions .sunya-social {
        display: none;
    }

    /* Social icons dentro il menu mobile slide-out: colore fisso */
    .sunya-nav__mobile-social,
    .sunya-header--transparent .sunya-nav__mobile-social,
    .sunya-header--transparent.sunya-header--scrolled .sunya-nav__mobile-social {
        display: block;
        margin-top: var(--sunya-spacing-xl, 2rem);
        padding-top: var(--sunya-spacing-lg, 1.5rem);
        color: var(--sunya-color-text);
    }

    .sunya-nav__mobile-social .sunya-social__list {
        display: flex;
        flex-wrap: wrap;
        gap: var(--sunya-spacing-sm, 0.5rem);
        justify-content: center;
        list-style: none;
        margin: 0;
        padding: 0;
    }

    /* Overlay scuro dietro il menu mobile */
    .sunya-nav__menu-wrapper.sunya-nav--open::before {
        content: '';
        position: fixed;
        top: 0;
        left: 0;
        width: 100vw;
        height: 100vh;
        background-color: rgba(0, 0, 0, 0.5);
        z-index: -1;
    }
}


/* --------------------------------------------------------------------------
   Telefoni stretti: il CTA si comprime davvero (v1.8.5)

   Sopra i 600px l'ordine di sacrificio basta da solo. Sotto, con un
   titolo testuale lungo, il solo flex-shrink porterebbe a un CTA
   schiacciato e a un titolo ridotto a due lettere: meglio restituire
   spazio riducendo il CTA, che e' fatto di padding generoso piu' che
   di testo. Con un logo — il caso abituale — questa soglia spesso non
   si attiva nemmeno.

   Specificita' (0,2,0) di proposito: i child ribrandizzano i pulsanti
   da (0,1,0) — roxzone impone `padding: 0.9em 2.2em` su .sunya-btn — e
   una regola pari perderebbe per ordine sorgente, stando il parent
   prima del child. Si tocca solo il padding in linea e il corpo del
   testo: colore, forma e font restano del brand.
   -------------------------------------------------------------------------- */

@media screen and (max-width: 600px) {

    .sunya-header .sunya-header__cta {
        padding-inline: var(--sunya-spacing-md, 1rem);
        font-size: var(--sunya-font-size-sm);
    }
}


/* --------------------------------------------------------------------------
   Body no-scroll (quando menu mobile è aperto)
   -------------------------------------------------------------------------- */

.sunya-no-scroll {
    overflow: hidden;
}


/* ==========================================================================
   HEADER TRASPARENTE: STATI NO-HERO / FORCE-SOLID / TRANSPARENT-DARK

   Attivati da body class (PHP):
     sunya-no-hero           — rilevamento automatico (nessun thumbnail / cover block)
     sunya-header-force-solid  — override manuale da meta box
     sunya-header-transparent-dark — trasparente + testo scuro (hero chiaro)
   ========================================================================== */


/* --------------------------------------------------------------------------
   NO-HERO + FORCE-SOLID: converte trasparente in header solido
   -------------------------------------------------------------------------- */

/* Base: sfondo solido e bordo visibile.
   --sunya-header-color ridefinita sull'elemento per sovrascrivere l'eventuale
   valore bianco impostato dal Customizer per l'header trasparente.

   v1.5.0: il colore testo passa da --sunya-color-primary (token legacy,
   sempre scuro) a --sunya-color-heading, che segue la modalita' base:
   chiaro -> testo scuro, scuro -> testo chiaro. Era l'assunzione
   light-first che rendeva il menu illeggibile sui brand dark (roxzone
   la combatte replicando questo selettore nel child).

   v1.7.7: il COLORE esce da questa regola e passa alle due gemelle qui
   sotto. Sfondo e bordo servono in ogni caso — la conversione a solido
   avviene comunque — mentre l'inchiostro dipende dalla superficie, e la
   superficie non e' piu' quella della modalita' da quando esiste lo
   stile header esplicito. */
body.sunya-no-hero .sunya-header--transparent,
body.sunya-header-force-solid .sunya-header--transparent {
    background-color: var(--sunya-header-bg, var(--sunya-color-bg));
    border-bottom: 1px solid var(--sunya-color-border);
}

/* INCHIOSTRO DELL'HEADER CONVERTITO (v1.7.7)

   Difetto misurato sul lab il 15/08: Modalita' Chiara + Stile header
   Scuro, pagina senza cover -> header #0a0a0a con testo #111111, cioe'
   1.05. Con la cover era corretto, perche' li' l'header resta davvero
   trasparente e non passa da qui.

   La regola v1.5.0 legava l'inchiostro a --sunya-color-heading, cioe'
   alla MODALITA'. Corretto finche' l'header convertito era per forza il
   foglio della pagina; dalla v1.7.3 lo stile header puo' dichiarare una
   superficie diversa, e allora l'inchiostro va preso da li'.
   Il PHP emette gia' --sunya-header-color sull'elemento, ma a (0,1,0)
   perdeva contro questo blocco: la gemella lo rimette in riga senza
   dipendere dall'inline.

   Le due gemelle sono mutuamente esclusive e restano entrambe alla
   specificita' della regola originale, grazie a :where() a peso zero:
   i child che replicano questo selettore (roxzone) continuano a
   pareggiare e a vincere per ordine sorgente. */
body.sunya-no-hero:where(:not(.sunya-header-style-dark)) .sunya-header--transparent,
body.sunya-header-force-solid:where(:not(.sunya-header-style-dark)) .sunya-header--transparent {
    /* v1.8.4 — CORREZIONE. Era `--sunya-color-heading`, che segue la
       MODALITA'. Misurato sul lab il 20/08: modalita' Scura + stile
       header Chiaro, pagina senza cover -> inchiostro #f4f4f4 su carta
       #f4f4f4, cioe' 1.00: voci, titolo, social e hamburger invisibili
       insieme. Il PHP calcolava il valore giusto (#111111) e lo emetteva
       sulla .sunya-header a (0,1,0); questa regola, a (0,2,1), lo
       scavalcava.

       La v1.7.7 aveva corretto un verso solo. La gemella
       .sunya-header-style-dark qui sotto e' sempre stata giusta perche'
       nomina la superficie; questa nominava il suo complemento e poi
       leggeva la modalita'. Ma `sunya-header-style-*` e' gia' la
       SUPERFICIE RISOLTA lato server (sunya_body_classes: picker legacy
       per luminanza, poi select, poi modalita'; 'auto' non arriva mai
       nel markup). Quindi qui la carta e' chiara per definizione, e
       l'inchiostro giusto e' text-on-light.

       In modalita' Chiara heading E' gia' text-on-light — il PHP emette
       --sunya-color-heading dallo stesso $on_light — quindi il caso che
       funzionava non cambia di un valore. Resta come fallback. */
    --sunya-header-color: var(--sunya-color-text-on-light, var(--sunya-color-heading, var(--sunya-color-primary)));
}

body.sunya-no-hero:where(.sunya-header-style-dark) .sunya-header--transparent,
body.sunya-header-force-solid:where(.sunya-header-style-dark) .sunya-header--transparent {
    --sunya-header-color: var(--sunya-color-text-on-dark, #ffffff);
}

/* Stessa coppia per lo stato SCROLLED (v1.8.2).

   Le due gemelle qui sopra coprono solo le conversioni da body class:
   una pagina con hero cover non ha ne' no-hero ne' force-solid, e allo
   scroll l'header diventa solido senza che nessuno ridefinisca
   --sunya-header-color. Il token resta indefinito e si cade sul
   fallback --sunya-color-primary, che segue il brand e non la
   superficie: su roxzone vale #1a1a2e, quasi nero, e l'hamburger
   spariva sull'header scuro appena comparso.

   Misurato: pre-scroll #ffffff (regola --transparent), post-scroll
   rgb(26,26,46) su fondo scuro. In modalita' Chiara il difetto non si
   vedeva perche' il fallback scuro cadeva su un header chiaro — la
   stessa asimmetria della v1.7.7.

   Il testo della nav consuma lo stesso token, quindi la correzione vale
   anche per le voci desktop nello stato scrolled. */
body:where(:not(.sunya-header-style-dark)) .sunya-header--transparent.sunya-header--scrolled {
    /* v1.8.4: stessa correzione della coppia no-hero qui sopra — la
       coppia scrolled aveva la struttura identica, quindi lo stesso
       difetto: allo scroll, in Scuro con header Chiaro, l'inchiostro
       seguiva la modalita' e finiva chiaro su carta chiara. */
    --sunya-header-color: var(--sunya-color-text-on-light, var(--sunya-color-heading, var(--sunya-color-primary)));
}

body:where(.sunya-header-style-dark) .sunya-header--transparent.sunya-header--scrolled {
    --sunya-header-color: var(--sunya-color-text-on-dark, #ffffff);
}

/* Scrim non necessario su sfondo solido */
body.sunya-no-hero .sunya-header--transparent::before,
body.sunya-header-force-solid .sunya-header--transparent::before,
body.sunya-header-transparent-dark .sunya-header--transparent::before {
    display: none;
}

/* Non-sticky: posizionamento in flusso normale */
body.sunya-no-hero .sunya-header--transparent:not(.sunya-header--sticky-enabled),
body.sunya-header-force-solid .sunya-header--transparent:not(.sunya-header--sticky-enabled) {
    position: relative;
}

/* Sticky: position sticky invece di absolute */
body.sunya-no-hero .sunya-header--transparent.sunya-header--sticky-enabled,
body.sunya-header-force-solid .sunya-header--transparent.sunya-header--sticky-enabled {
    position: sticky;
    top: 0;
}

/* Stato scrolled: mantieni sticky + non alterare l'aspetto già solido */
body.sunya-no-hero .sunya-header--transparent.sunya-header--sticky-enabled.sunya-header--scrolled,
body.sunya-header-force-solid .sunya-header--transparent.sunya-header--sticky-enabled.sunya-header--scrolled {
    position: sticky;
    top: 0;
    background-color: var(--sunya-header-bg, var(--sunya-color-bg));
    border-bottom: 1px solid var(--sunya-color-border);
    box-shadow: var(--sunya-shadow-md);
}

/* v1.8.3 — RIMOSSE le regole di riposo di questa conversione
   (site-title + voci nav, actions, hamburger). Erano tre regole a
   (0,3,2)/(0,3,3) che dichiaravano `color: var(--sunya-header-color,
   ...)` — lo stesso identico valore delle regole base dei tre
   consumatori. Servivano solo a scavalcare il #ffffff dell'header
   trasparente, che ora e' un token e non un valore. Le due gemelle
   qui sopra (v1.7.7) restano: sono loro a DICHIARARE la superficie.
   Il logo resta escluso: `display` non si eredita da un token.

   v1.8.4 — RIMOSSA anche la terna hover a (0,4,3), ultima delle
   quattro. Dichiarava `accent-ink`, che la terna base ora prende da
   sola come secondo anello della catena: qui l'header e' convertito a
   solido, quindi la carta e' --sunya-header-bg ed e' esattamente il
   token giusto. Con questa cade anche l'effetto collaterale annotato
   nella v1.7.3 — la terna, pesando (0,4,3), batteva le regole del
   pannello mobile (0,2,2) e accentava la voce corrente anche nello
   slide-out. Ora il pannello dichiara la propria superficie da se',
   nel media query. */

/* Logo: mostra dark, nascondi light */
body.sunya-no-hero .sunya-header--transparent .sunya-logo__img--light,
body.sunya-header-force-solid .sunya-header--transparent .sunya-logo__img--light {
    display: none;
}

body.sunya-no-hero .sunya-header--transparent .sunya-logo__img--dark,
body.sunya-header-force-solid .sunya-header--transparent .sunya-logo__img--dark {
    display: block;
}

/* ...ma su header SCURO si torna al logo chiaro (v1.7.7).
   Stessa causa dell'inchiostro qui sopra: la conversione a solido
   assumeva che il solido fosse chiaro. Specificita' alzata di una
   classe (0,3,1) perche' qui non si puo' usare :where() — servono due
   regole che si contraddicono su `display`, non un token da ereditare. */
body.sunya-no-hero.sunya-header-style-dark .sunya-header--transparent .sunya-logo__img--light,
body.sunya-header-force-solid.sunya-header-style-dark .sunya-header--transparent .sunya-logo__img--light {
    display: block;
}

body.sunya-no-hero.sunya-header-style-dark .sunya-header--transparent .sunya-logo__img--dark,
body.sunya-header-force-solid.sunya-header-style-dark .sunya-header--transparent .sunya-logo__img--dark {
    display: none;
}

/* TopBar: annulla l'offset top (non più necessario, header in flusso) */
body.sunya-has-topbar.sunya-no-hero .sunya-header--transparent:not(.sunya-header--sticky-enabled),
body.sunya-has-topbar.sunya-header-force-solid .sunya-header--transparent:not(.sunya-header--sticky-enabled) {
    top: auto;
}


/* --------------------------------------------------------------------------
   TRANSPARENT-DARK: mantiene il trasparente ma usa testo scuro
   Utile per pagine con hero a sfondo chiaro.
   -------------------------------------------------------------------------- */

/* v1.8.3 — RIMOSSE le quattro regole di colore di questo stato
   (site-title + voci nav, terna hover, actions, hamburger).

   Le tre di riposo dichiaravano `var(--sunya-header-color,
   var(--sunya-color-primary))`, valore per valore identico a quello
   delle regole base dei consumatori: erano li' solo per scavalcare il
   #ffffff dell'header trasparente, che ora e' un token con guardia
   `:not(.sunya-header-transparent-dark)` e qui non arriva piu'.
   Caduta quella, e' caduta anche la terna hover a (0,3,3): dichiarava
   `--sunya-color-accent`, cioe' esattamente cio' che dichiara la terna
   base della nav. Nessuna delle quattro cambiava un solo pixel.

   Nessuna regola di superficie sostitutiva, di proposito: questo stato
   NON dichiara --sunya-header-color, quindi resta quello del Customizer
   o, in sua assenza, il fallback dei consumatori. Comportamento
   identico a prima della v1.8.3, difetto noto compreso — in modalita'
   Scuro con stile header Scuro l'inchiostro resta chiaro su una hero
   che l'autore ha dichiarato CHIARA. E' il caso che la v1.8.4
   sistemera' dichiarando la superficie invece del colore: qui serviva
   un no-op misurabile, non due variabili in movimento insieme.

   Il logo resta: `display` non si eredita da un token. */

/* v1.8.4 — la superficie, finalmente dichiarata.

   La v1.8.3 aveva lasciato questo ramo scoperto di proposito, per non
   muovere due variabili insieme nella release che doveva essere un
   no-op. Ora si chiude: `transparent-dark` e' la dichiarazione
   dell'autore che l'hero sotto e' CHIARA. Nata come scelta del colore
   del testo, diventa quello che in realta' e' — una dichiarazione di
   superficie. Stessa promozione subita dal pre-footer nella v1.7.8.

   Due token, una regola: inchiostro di riposo su carta chiara, e
   inchiostro di stato della nav su carta chiara. Il secondo e' il vero
   motivo per cui serviva --sunya-color-accent-ink-on-light: qui la
   terna hover era rimasta su `accent` nudo, che su una hero chiara
   misura 1.23 sui brand con accent luminoso.

   Cosa cambia rispetto alla 1.8.3, elencato perche' NON e' un no-op:
   con stile header Scuro l'inchiostro era chiaro su hero chiara
   (difetto), ora e' scuro; con 'auto' cadeva sul fallback
   --sunya-color-primary (#1a1a2e, legacy sempre scuro) e ora prende
   text-on-light, che il brand puo' ridefinire.

   :not(--scrolled) perche' allo scroll l'header e' solido e la carta
   torna a essere la sua: se ne occupa la coppia scrolled della v1.8.2. */
body.sunya-header-transparent-dark .sunya-header--transparent:not(.sunya-header--scrolled) {
    --sunya-header-color: var(--sunya-color-text-on-light, var(--sunya-color-heading, var(--sunya-color-primary)));
    --sunya-nav-ink: var(--sunya-color-accent-ink-on-light, var(--sunya-color-accent-contrast, var(--sunya-color-accent)));
}

/* Logo dark */
body.sunya-header-transparent-dark .sunya-header--transparent .sunya-logo__img--light {
    display: none;
}

body.sunya-header-transparent-dark .sunya-header--transparent .sunya-logo__img--dark {
    display: block;
}

/* Stato scrolled: già gestito dalle regole esistenti, nessuna modifica */
