:root {
  --default: #f6faf1;
  --default-dark: #a6aaa1;
  --default-medium: #b6bab1;
  --default-medium: #e6eae1;
  --default-header-footer: #008cff;
  --default-header-footer-hover: #008cff;

  --default: #f5f7fa;
  --default-medium: #e5e7ea;
  --default-dark: #1a1a1a;
  
  --default-hilite: #e0e0e0;
  --default-hilite-hover: #d0d0d0;
  --default-dark-hover: #1d1c1c;
  --light: #c6cac1;
  --light-hover: #b6bab1;
  --highlight: #ccff34;/*#007f9a; 48476c;*/
  --highlight-hover: #3adb0e;/*#005f7a; 58577c;*/
  --custom-main: #faf9f6;
  --custom-main-exadecimal: '255 255 255';
  --text-h1: #f0f;
  --link: #B92A29;
  --link-hover: #B92A29;
  --link: var(--bs-gray-600);
  --link-hover: var(--bs-gray-700);
  --text-default-color: var(--bs-gray-900);
  --bg-default-color: #012345;
  /* dimensione del riquadro video "in evidenza" da chiuso (prima/dopo l'espansione a piena
     larghezza in scroll): letta da swup.js/expandableVideoBlock per calcolare il clip-path. */
  --container-width: 600px;
}

/* WOFF2 come formato primario: e' gia' compresso in Brotli al suo interno, pesa ~70% in meno
   del TTF equivalente e non dipende dalla compressione del server (IIS non comprime i .ttf,
   che escono come application/octet-stream, fuori dalla sua allowlist di MIME type).
   Il TTF resta come secondo src per i browser antecedenti al 2016: il browser scarica solo
   il primo formato che sa leggere, quindi per tutti gli altri non costa nulla.
   font-display:swap mostra subito il testo con il fallback di sistema e sostituisce il font
   quando arriva, invece di lasciare il testo invisibile finche' non e' scaricato (FOIT). */
@font-face {font-family: fontlight;         src: url('/css/Prompt/Prompt-Light.woff2') format('woff2'),          url('/css/Prompt/Prompt-Light.ttf') format('truetype');          font-display: swap;}
@font-face {font-family: fontdefault;       src: url('/css/Prompt/Prompt-Regular.woff2') format('woff2'),        url('/css/Prompt/Prompt-Regular.ttf') format('truetype');        font-display: swap;}
@font-face {font-family: fontdefaultitalic; src: url('/css/Prompt/Prompt-Italic.woff2') format('woff2'),         url('/css/Prompt/Prompt-Italic.ttf') format('truetype');         font-display: swap;}
@font-face {font-family: fontdefaultbold;   src: url('/css/Prompt/Prompt-SemiBold.woff2') format('woff2'),       url('/css/Prompt/Prompt-SemiBold.ttf') format('truetype');       font-display: swap;}
@font-face {font-family: fontbolditalic;    src: url('/css/Prompt/Prompt-SemiBoldItalic.woff2') format('woff2'), url('/css/Prompt/Prompt-SemiBoldItalic.ttf') format('truetype'); font-display: swap;}
@font-face {font-family: fonttitle;         src: url('/css/Prompt/Prompt-ExtraBold.woff2') format('woff2'),      url('/css/Prompt/Prompt-ExtraBold.ttf') format('truetype');      font-display: swap;}

.fontlight                              {font-family:fontlight,sans-serif!important;dletter-spacing: -.04em;}
.fontdefault                            {font-family:fontdefault,sans-serif!important;dletter-spacing: -.04em;}
.fontdefaultitalic, em, i               {font-family:fontdefaultitalic,sans-serif!important;}
.fontbolditalic, em, i                  {font-family:fontbolditalic,sans-serif!important;}
.fontdefaultbold, strong, b             {font-family:fontdefaultbold,sans-serif!important;}
.fonttitle                              {font-family:fonttitle,sans-serif!important;dletter-spacing: -.03em;}
.fontbasic                              {font-family:helvetica neue,sans-serif!important;font-weight: 400;}

.menuclose:hover                        {color: var(--bs-danger);}
.text-h1                                {color: var(--text-h1);}
.text-highlight                         {color: var(--highlight);}
.text-header-footer                     {color: var(--default-header-footer);}
.text-link-hover                        {color: var(--link);}
.text-link-hover,
.text-link:hover                        {color: var(--link-hover);}
.bg-default                             {background-color: var(--default);}
.bg-default-dark                        {background-color: var(--default-dark);}
.bg-default-medium                      {background-color: var(--default-medium);}
.bg-header-footer                       {background-color: var(--default-header-footer);}
button.bg-header-footer:hover,
button.bg-header-footer:active,
button.bg-header-footer:focus,
.btn.bg-header-footer:hover,
.btn.bg-header-footer:active,
.btn.bg-header-footer:focus           {background-color: var(--default-header-footer-hover)!important;}
/* .nav-pills .nav-link:hover {color: var(--default-header-footer);} */
/* .nav-pills .nav-link:hover {color: var(--default-header-footer);} */
/* pill di modulocercagara: contorno colore brand, piena quando attiva (stesso stile di gazzerimonferrato.it/modulocontatto) */
.cercagara-wrap .nav-pills .nav-link    {color: var(--default-header-footer); border: 1px solid var(--default-header-footer); background-color: var(--bs-light);}
.cercagara-wrap .nav-pills .nav-link:hover {color: var(--default-header-footer);}
.cercagara-wrap .nav-pills .nav-link.active {color: #fff; background-color: var(--default-header-footer); border-color: var(--default-header-footer);}
/* checkbox della ricerca avanzata resi come toggle (btn-check nativo di Bootstrap 5): stesso stile brand delle pill — contorno colore brand, pieno quando attivi (come su movimentodbn.com).
   Valgono anche per i filtri di categoria della ricerca nel sito (.form-cerca, functions.php/cercaForm()): stesso componente, stesso stile, un elenco di selettori solo perché i due form stanno in contenitori diversi. */
.cercagara-wrap .btn-check + .btn,
.form-cerca .btn-check + .btn             {color: var(--default-header-footer); border: 1px solid var(--default-header-footer); background-color: transparent;}
.cercagara-wrap .btn-check + .btn:hover,
.form-cerca .btn-check + .btn:hover       {color: var(--default-header-footer);}
.cercagara-wrap .btn-check:checked + .btn,
.form-cerca .btn-check:checked + .btn     {color: #fff; background-color: var(--default-header-footer); border-color: var(--default-header-footer);}
/* dettaglio gara (.cercagara-dettaglio, vedi functions.php/garamodal()): la prima colonna è quella
   delle etichette — con il layout automatico della tabella width:1% + white-space:nowrap è il modo
   canonico di dirle "shrink-to-fit", così l'etichetta non va mai a capo su due righe e tutto lo
   spazio restante resta al valore. Il padding a destra separa le due colonne. */
.cercagara-dettaglio td:first-child     {width: 1%; white-space: nowrap; padding-right: 1rem;}
/* elenco gare (#cercagara-risultati): la colonna del titolo è .flex-grow-1 ma di base un flex item
   non scende sotto la propria min-content width — con un titolo lungo spingerebbe la distanza in km
   fuori riga (prima si andava a capo con .flex-wrap). min-width:0 le consente di restringersi così
   il "~xx km" resta sempre in alto a destra sulla stessa riga del titolo */
#cercagara-risultati ul > li > div:first-child {min-width: 0;}
/* elenco gare (#cercagara-risultati): la prima riga senza spazio sopra, l'ultima senza spazio sotto né riga di separazione */
#cercagara-risultati ul > li:first-child {padding-top: 0 !important;}
#cercagara-risultati ul > li:last-child  {padding-bottom: 0 !important; border-bottom: 0 !important;}
/* sotto md i bottoni Cerca/Azzera dell'input-group ("Cerca vicino a" e "Cerca titolo/località") sono nascosti (d-none) ma restano nel DOM: bootstrap squadra comunque l'angolo destro del campo perché non è :last-child, va riarrotondato manualmente */
@media (max-width: 767.98px) {
    .cercagara-wrap .js-cercagara-cerca,
    .cercagara-wrap .js-cercagara-cerca-avanzata {border-top-right-radius: var(--bs-border-radius)!important; border-bottom-right-radius: var(--bs-border-radius)!important;}
}
/* avviso del calcolatore (creato da js/calcolatore.js, pagina /modulocalcolatore): il messaggio
   stava in fondo al form, ma il pulsante che lo fa comparire sta a metà pagina — su telefono il
   riquadro finiva sotto la piega e il feedback non lo vedeva nessuno. Qui è fisso in fondo allo
   schermo, quindi si legge senza scorrere da qualunque punto si sia premuto.
   Il JS lo appende a <body> e non lo lascia dentro il form perché position:fixed dentro un
   antenato con transform (GSAP ne anima parecchi) si aggancia a quello e non al viewport.
   z-index: sopra #footerfixed (12) e .whatsapp-wrapper (20), sotto l'overlay del menu (1021) e i
   modal di Bootstrap — quando quelli sono aperti nessuno sta calcolando.
   Il fondo tiene fuori il tasto whatsapp (60px + m-3), che sotto md gli finirebbe sotto; da md in
   su l'avviso è centrato e largo al massimo 32rem, quindi non ci arriva mai sopra e basta lasciare
   spazio a #footerfixed (--footerfixed-h, scritta da setVwVh() in swup.js). */
.calcolatore-avviso {
    position: fixed;
    left: 0;
    right: 0;
    bottom: calc(var(--footerfixed-h, 0px) + 5.5rem);
    z-index: 1020;
    padding: 0 1rem;
    /* il contenitore è trasparente e largo tutto lo schermo: senza questo intercetterebbe i tocchi
       destinati alla pagina sotto. I click tornano attivi sul solo riquadro colorato */
    pointer-events: none;
    opacity: 0;
    transform: translateY(0.75rem);
    transition: opacity 0.25s ease, transform 0.25s ease;
}
.calcolatore-avviso.is-visibile         {opacity: 1; transform: none;}
.calcolatore-avviso > .alert            {pointer-events: auto; max-width: 32rem; margin: 0 auto;}
/* la X è l'unico modo di chiudere l'avviso prima che si chiuda da solo: i 16px di .btn-close non
   sono un bersaglio da dito. Il padding la porta a 44px, il margin negativo se li riprende dal
   padding dell'alert così il riquadro non cresce.
   invert: in questo build di Bootstrap la X di .btn-close è disegnata bianca (fill='#fff'), pensata
   per i fondi scuri del sito — sul giallo dell'alert-warning sparirebbe */
.calcolatore-avviso .btn-close          {padding: 0.875rem; margin: -0.625rem -0.625rem -0.625rem 0;
                                         filter: invert(1); opacity: 0.65;}
@media (min-width: 768px) {
    .calcolatore-avviso {bottom: calc(var(--footerfixed-h, 0px) + 1rem);}
}
@media (prefers-reduced-motion: reduce) {
    .calcolatore-avviso {transition: none; transform: none;}
}
.bg-highlight                           {background-color: var(--highlight);}
.bg-link, .bg-link-nohover              {background-color: var(--link);}
.bg-link:hover,
.bg-link-hover                          {background-color: var(--link-hover);}
.bg-link:hover > .bg-link-hover           {background-color: var(--link-hover);}
.textshadow                             {text-shadow: 5px 5px 5px var(--bs-dark);}
.textshadowlight                        {text-shadow: 5px 5px 5px var(--bs-light);}
/* transition sul selettore stabile (.tagline), non su .textshadow: una transition CSS usa le
   proprietà dichiarate nello stato "dopo" il cambiamento, quindi se stesse sulla classe che
   viene rimossa sparirebbe insieme al text-shadow e l'ombra scomparirebbe di scatto invece che
   sfumare. Solo text-shadow (non "all") per non interferire col color/transform gestiti da GSAP
   sullo stesso elemento in riganolink(). */
.tagline                                {transition: text-shadow .4s ease;}

/* Modal anteprima notizia e dettaglio gara (#modalnotizia / #modalgara, vedi functions.php/menu()
   e swup.js / cercagara.js): .modal-dialog-scrollable di Bootstrap rende già .modal-dialog alto
   quanto il viewport, ma .modal-content ha solo max-height, quindi con un contenuto corto il
   riquadro visibile si restringe comunque (centrato dal flex di .modal-dialog-centered). Forzando
   height:100% il riquadro resta sempre alla dimensione massima passando da un contenuto all'altro
   (niente resize fra una gara/notizia e l'altra), con lo scroll solo nel body. */
#modalnotizia .modal-content,
#modalgara .modal-content                       {height: 100%;}
#modalnotizia .modal-body.bordermodal       {border: 2em solid #fff;}
/* swipe di navigazione (#modalgara / #modalnotizia, vedi cercagara.js / swup.js): durante
   l'animazione il corpo del modal scorre fino a ±100% — si clippa l'overflow orizzontale sul
   .modal-content così l'uscita fuori campo non genera una scrollbar orizzontale */
#modalgara .modal-content, #modalnotizia .modal-content {overflow: hidden;}
/* a modal aperto (Bootstrap mette .modal-open sul body e blocca già lo scroll, conservando lo
   scrollTop) i bottoni flottanti — che hanno z-index alto e resterebbero sopra il footer del
   modal — vanno nascosti. Vale per qualsiasi modal, senza JS, e si ripristinano da soli alla
   chiusura (quando .modal-open viene rimossa). */
body.modal-open .menu-wrapper,
body.modal-open .whatsapp-wrapper {display: none !important;}
/* quando il contenuto scrollabile del modal arriva a fine corsa, il gesto non deve "propagarsi"
   alla pagina sotto (scroll chaining, tipico su iOS): complementa il blocco touchmove in swup.js */
#modalgara, #modalnotizia,
#modalgara .modal-body, #modalnotizia .modal-body {overscroll-behavior: contain;}

.text-gradient-custom                   {
                                        background: linear-gradient(45deg, rgba(119, 175, 93,1) 23.44140625%,rgba(119, 175, 93,1) 23.44140625%,rgba(195, 206, 101,1) 79.84765625%);                                        
                                        }
.bg-main                               {background-color: dvar(--bs-white);}
.bg-custom-main                        {background-color: var(--custom-main);}
.bg-custom-dark                        {background-color: var(--bs-gray-900);}
.bg-custom {
    position: relative; 
    height: 100%;
    width: 100%;
}
.text-footer  {color: darkslategray;}
.bg-footer  {background-color: var(--bs-gray-900);}
.bg-blurred {
            background-color: rgba(255,255,255,.3);backdrop-filter: blur(5px);    
          -webkit-transition: background-color 1000ms linear;
              -ms-transition: background-color 1000ms linear;
                  transition: background-color 1000ms linear;}
/*.bg-blurred:hover {background-color: rgba(255,255,255,1);backdrop-filter: blur(20px);}*/

.pinchzoom-0 {touch-action: pan-x pan-y !important;}

h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {margin: 0;margin-bottom: 0}

a {
	  text-decoration: none!important;
  	color: var(--bs-gray-900);
	  outline: none;
}

a.underlined {
	  text-decoration: underline!important;
    text-decoration-thickness: .15em!important;
    text-underline-offset: .15em!important;    
    text-decoration-color: var(--default-header-footer)!important;
}

a:active,
a:hover,
a:focus{
    text-decoration-color: transparent!important;
    color: var(--link-hover);
}
.menuopen:hover {color: var(--highlight);}
.menuclose:hover {color: var(--bs-danger);}
a.text-decoration-none:hover {text-decoration: none!important;text-decoration-color: inherit;text-decoration-thickness: .1em;
    text-underline-offset: .1em;}

.dropdown-item:hover {
    color: var(--default-header-footer)!important;
    background-color: var(--bs-white);
    border-color: var(--bs-white);
}

dd  #content {margin-top:0!important;}

.shape {
    /*
  dbackground: linear-gradient(64.00916346799386deg, rgba(119, 175, 93,1) 23.44140625%,rgba(119, 175, 93,1) 23.44140625%,rgba(195, 206, 101,1) 79.84765625%);
background-color: #8ae9b3;
background-image: linear-gradient(85deg, #8ae9b3 0%, #c8d6e5 74%);
    
background-color: #348F50;
background-image: linear-gradient(85deg, #348F50 0%, #56B4D3 74%);
    */
  animation: wave 4.0s ease-in-out infinite;
  opacity: 1;
  }
.scaled50 {
    -webkit-transform: scale(.5, .5);
    -moz-transform: scale(.5, .5);
    -ms-transform: scale(.5, .5);
    -o-transform: scale(.5, .5);
    transform: scale(.5, .5);
}
.scaled50y {
    -webkit-transform: scaleY(.5);
    -moz-transform: scaleY(.5);
    -ms-transform: scaleY(.5);
    -o-transform: scaleY(.5);
    transform: scaleY(.5);
}
@keyframes wave {
  0%, 100% {
    border-radius: 77% 23% 54% 46% / 40% 38% 62% 60%;
  }
  50% {
    border-radius: 70% 30% 72% 28% / 27% 61% 39% 73%;
  }
}            

/*#riganolink .vh-100  {height:80vh!important;}*/

@media only screen and (orientation : landscape) {
    .landscape  {display: block;}
    .portrait   {display: none;}
    .shape-wrapper {top:-320px;}    
    .shape-wrapper img {width:10vw; max-width: 60px;}
    /*#riganolink .vh-100  {height:90vh!important;}*/
    /* altezza del riquadro = viewport meno le due barre fisse (in cima #menulandscape/.shape-wrapper,
       in basso #footerfixed): le tre variabili sono scritte da setVwVh() in swup.js.
       --vh vale UN centesimo dell'altezza reale del viewport (clientHeight/100, così su mobile non
       dipende dalla barra indirizzi), quindi va moltiplicato per 100; il fallback 1vh rende la
       formula corretta anche prima che il JS giri. L'aritmetica deve stare DENTRO un solo calc()
       (prima c'era "calc(...) - calc(...)", che rende invalida tutta la dichiarazione) e serve
       !important perché .vh-100 di Bootstrap è già height:100vh!important. */
    #rigahomesingolo .vh-100 {height: calc((var(--vh, 1vh) * 100) - var(--fixedbar-h, 0px) - var(--footerfixed-h, 0px))!important;}
    #riganolink .vh-100 {height: calc((var(--vh, 1vh) * 100) - var(--fixedbar-h, 0px) - var(--footerfixed-h, 0px))!important;}

    .rigalink   {min-height:70vh;}
    .reveal-text-wrapper   {min-height:10vh;}
    .object-position-right                  {object-position: center right;}
    .vh-100-fix   {height: 100vh;}
    .cover  {height:100vh;}
    .cover-wrapper .ratio {--bs-aspect-ratio: 75%;}    
    .cover-wrapper .display-1 {font-size: 8vw;}    
    .cover-spacer  {height:50vh;}
    .cover-spacer h1 {
                    transform: translate(-0%, 30%);
                    -webkit-transform: translate(-0%, 30%);
                    -ms-transform: translate(-0%, 30%);
                    -o-transform: translate(-0%, 30%);
                    -moz-transform: translate(-0%, 30%);        
                    }
    .list-wrapper   {height:30vh;width:auto!important;}
    .mask.w-25 {width: 15vh!important;} 
    .mask.h-25 {height: 15vh!important;} 
    .home .mask.w-25 {width: 20vh!important;} 
    .home .mask.h-25 {height: 20vh!important;}     
}

@media only screen and (orientation : portrait) {
    .landscape  {display: none;}
    .portrait   {display: block;}
    .ht-cursor  {display: none!important;}
    .vh-100-fix   {min-height: 100vh;max-height: -webkit-fill-available;}
    #rigahomesingolo .vh-100 {height: calc((var(--vh, 1vh) * 100) - var(--fixedbar-h, 0px))!important;}
    #riganolink .vh-100 {height: calc((var(--vh, 1vh) * 100) - var(--fixedbar-h, 0px))!important;}
    .shape-wrapper {top:-320px;}
    .shape-wrapper img {width:20vw; max-width: 60px;}
    .rigalink   {min-height:100vh;min-height: -webkit-fill-available;}    
    .reveal-text-wrapper   {min-height:10vh;/*min-height: -webkit-fill-available;*/}
    .object-position-right                  {object-position: center left;}
    .cover  {height:100vh;height: -webkit-fill-available;}
    .cover-wrapper .display-1 {font-size: 12vw;}    
    .cover-wrapper .ratio {--bs-aspect-ratio: 100%;}
    .cover-spacer  {height:50vh;}
    .cover-spacer h1 {
                    transform: translate(-0%, 30%);
                    -webkit-transform: translate(-0%, 30%);
                    -ms-transform: translate(-0%, 30%);
                    -o-transform: translate(-0%, 30%);
                    -moz-transform: translate(-0%, 30%);        
                    }
    .video-wrapper  {margin-top: 0vh; height:100vw;}    
    video           {ewidth: 100vw!important; margin: 0 auto;}
    .list-wrapper   {height:25vh;width:auto!important;}
    .bgimagewrapper {height: 70%; dmargin-top:5vh;}
    .mask.w-25 {width: 14vh!important;} 
    .mask.h-25 {height: 14vh!important;} 
    .home .mask.w-25 {width: 5vh!important;}
    .home .mask.h-25 {height: 5vh!important;}

}

/*
.bgimage > div,
.grow-tagline-wrapper {opacity:0;}    
*/

body {
    width: 100vw;
    min-height: 100vh;
    min-height: -webkit-fill-available;
    -webkit-font-smoothing: antialiased;
  	-moz-osx-font-smoothing: grayscale;
    color: var(--text-default-color);
    /*background-color: var(--bg-default-color);*/
}

.noscroll   {
            height:100vh!important;
            overflow-y:hidden!important;
            }

.gradient-wrapper {
width: 100vw;
height: 100%;
overflow: hidden;
}

#gradient {
width: 100%;
height: 100vh;
}

.sticky {position: -webkit-sticky;position: sticky;top: 0;}
.sticky_item {}
.sticky_item.is_stuck {z-index: 3;}

body.preventscroll {
  overflow: hidden;
  margin: 0;
  touch-action: none;
  -ms-touch-action: none;
  height: 100vh!important;
}

.centered                               {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);-webkit-transform: translate(-50%, -50%);-ms-transform: translate(-50%, -50%);-o-transform: translate(-50%, -50%);-moz-transform: translate(-50%, -50%);}
.animated04                             {-webkit-transition: all .4s ease;-moz-transition: all .4s ease;-o-transition: all .4s ease;transition: all .4s ease;}
.animated06                             {-webkit-transition: all .6s ease;-moz-transition: all .6s ease;-o-transition: all .6s ease;transition: all .6s ease;}
.animated10                             {-webkit-transition:all 1.0s ease;-moz-transition:all 1.0s ease;-o-transition:all 1.0s ease;transition:all 1.0s ease;}
.animated14                             {-webkit-transition:all 1.4s ease;-moz-transition:all 1.4s ease;-o-transition:all 1.4s ease;transition:all 1.4s ease;}

.hidden-up                              {top:-200%!important;}


.text-decoration-underline              {text-decoration-thickness: .1em;}
.mix-blend-mode-difference              {mix-blend-mode: difference;}
.mix-blend-mode-normal                  {mix-blend-mode: normal;}
.zindex-1020                            {z-index: 1020;}
.zindex-8888                            {z-index: 8888;}
.zindex-9999                            {z-index: 9999;}
.lazyload,.lazyloading                  {opacity: 0;}
.lazyloaded                             {opacity: 1;/*transition: all 1500ms;*/}
.masonryitem:hover .image               {
                                        -webkit-transform: scale(1.11, 1.11);
                                        -moz-transform: scale(1.11, 1.11);
                                        -ms-transform: scale(1.11, 1.11);
                                        -o-transform: scale(1.11, 1.11);
                                        transform: scale(1.11, 1.11); 
                                        }
.masonryitem:hover .title               {opacity:0;}
.masonryitem:hover .title2              {opacity:1!important;text-align: center;}
/* Ultima tessera visibile della gallery di otherimages(): le foto oltre $GLOBALS['maxfotomasonry']
   (include/basics.php) non sono stampate in pagina, esistono solo dentro Spotlight. Qui si vela
   l'ultima e ci si scrive quante ne restano, cosi' si capisce che cliccando si apre dell'altro.
   Il velo sta sull'ancora, che copre gia' tutta la tessera: nessun elemento in piu' da posizionare. */
a.mask-altrefoto                        {background-color: rgba(0,0,0,.55); transition: background-color 400ms ease;}
a.mask-altrefoto:hover                  {background-color: rgba(0,0,0,.72);}
a.mask-altrefoto .altrefoto             {font-size: clamp(1.4rem, 3.5vw, 2.6rem); line-height: 1.1; text-shadow: 0 2px 12px rgba(0,0,0,.6);}
.w-25                                   {width: 25%;}
.h-25                                   {height: 25%;}

.pdftable tr:last-child > * { border-bottom: 0; }

.btn-close {
    --bs-btn-close-color: var(--default-light)!important;
    --bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e")!important;
}

.bgimagewrapper video,
.bgimagewrapper img                     {max-width:100%; max-height:100%; margin: 0 auto;}
.bg-cover                               {background-size: cover; background-position: center center;}
.bg-contain                             {background-size: contain; background-position: center center;background-repeat: no-repeat;}
.bg-tile                                {
                                        /*
                                        background: url('/images/tile3.png'), linear-gradient(90deg, #5f7509 0%, #2b2708 20%, #2b2708 80%, #5f7509 100%); 
                                        background: url('/images/tile3.png'), linear-gradient(90deg, #5f7509 0%, #4b4728 20%, #2b2708 40%, #2b2708 60%, #4b4728 80%, #5f7509 100%); 
                                        background: url('/images/tile3.png'), linear-gradient(90deg, #2b2708 0%, #4b4728 20%, #5f7509 40%, #5f7509 60%, #4b4728 80%, #2b2708 100%); 
                                        sbackground-color: #2b2708;
                                        */
                                        background-image: url('/images/tile3.png');
                                        background-position: center center;
                                        dbackground-repeat: no-repeat;
                                        dbackground-size: cover;
                                        }

.bgtransitions                          {
                                        -webkit-transition: background-color 400ms linear;
                                        -ms-transition: background-color 400ms linear;
                                        transition: background-color 400ms linear;    
                                        }
.cursor-pointer                         {cursor:pointer}
.pointer-events-none                    {pointer-events:none;}

.scale-0                                {
                                        opacity:0;
                                        -webkit-transform: scale(0, 0);
                                        -moz-transform: scale(0, 0);
                                        -ms-transform: scale(0, 0);
                                        -o-transform: scale(0, 0);
                                        transform: scale(0, 0);        
                                        }

.italichover:hover                      {font-family:fontitalic,sans-serif!important;}
.letterspacinghover:hover               {letter-spacing:.025em;}
.approfondisci svg                      {margin-top: -4px;}

.hidden {
	position: absolute;
	overflow: hidden;
	width: 0;
	height: 0;
	pointer-events: none;
}

/* Page Loader */
.js .loading {
    height: 100vh;
    overflow-y: hidden;
    -webkit-transition: all .4s ease;-moz-transition: all .4s ease;-o-transition: all .4s ease;transition: all .4s ease;
}

.js .loaded {
    height: auto;
    -webkit-transition: all .4s ease;-moz-transition: all .4s ease;-o-transition: all .4s ease;transition: all .4s ease;
}

.js .loading::before {
	content: '';
	position: fixed;
	z-index: 999999;
	top: 0;
	left: 0;
	display: flex;
	width: 100%;
	height: 100%;
    line-height: 100%;
	text-align: center;
	background-color: var(--bs-white);
}

.js .loading::after {
	/*content: 'LOADING..';*/
	position: fixed;
	z-index: 9999999;
	top: 50%;
	left: 50%;
	animation: loaderAnim 0.8s ease-out infinite alternate forwards;
}

.js .loading::after {
	content: '';
	position: fixed;
	z-index: 9999999;
	top: 50%;
	left: 50%;
	width: 10px;
	height: 10px;
    border-radius: 50%;
	margin: -5px 0 0 -5px;
	pointer-events: none;
	background: var(--link);
	animation: loaderAnim 0.8s ease-out infinite alternate forwards;
}

@keyframes loaderAnim {
	to {
		transform: translate3d(0,-100px,0);
        /*opacity: 0;*/
	}
}

.masktop                                {
                                        pointer-events: none;
                                        background: -moz-linear-gradient(360deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        background: -webkit-linear-gradient(360deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        background: -o-linear-gradient(360deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        background: -ms-linear-gradient(360deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        background: linear-gradient(360deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        margin-top: -1px;
                                        }
.maskbottom                             {
                                        pointer-events: none;
                                        background: -moz-linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        background: -webkit-linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        background: -o-linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        background: -ms-linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        background: linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        margin-bottom: -1px;
                                        }

.maskend                                {
                                        pointer-events: none;
                                        background: -moz-linear-gradient(90deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        background: -webkit-linear-gradient(90deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        background: -o-linear-gradient(90deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        background: -ms-linear-gradient(90deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        background: linear-gradient(90deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        margin-right: -1px;
                                        }
.maskstart                              {
                                        pointer-events: none;
                                        background: -moz-linear-gradient(270deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        background: -webkit-linear-gradient(270deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        background: -o-linear-gradient(270deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        background: -ms-linear-gradient(270deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        background: linear-gradient(270deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.11) 20%, rgba(0,0,0,1) 100%);
                                        margin-left: -1px;
                                        }

.icon {
	display: block;
	width: 1.5em;
	height: 1.5em;
	margin: 0 auto;
	fill: var(--default-light);
}

.icon--inline {
	display: inline-block;
	width: 1em;
	height: 100%;
	margin: 0 0.25em 0 0;
}

.content.intro {
	height: 100vh;
}

.btn--menu {
	pointer-events: visible;
    z-index: 1019;
    transform: none;
}

.logo-container {
	top: 0;
	left: 0;
	pointer-events: visible;
    z-index: 1019;
    transform: none;
    overflow: hidden;
}

.logo-wrapper {
    opacity: 0;
    transform-origin: center;
    -webkit-transform: scale(12.5, 12.5);
   -moz-transform: scale(12.5, 12.5);
   -ms-transform: scale(12.5, 12.5);
   -o-transform: scale(12.5, 12.5);
   transform: scale(12.5, 12.5);        
}

.logo-wrapper.active {
    opacity: 1;
    -webkit-transform: scale(1, 1);
   -moz-transform: scale(1, 1);
   -ms-transform: scale(1, 1);
   -o-transform: scale(1, 1);
   transform: scale(1, 1);        
}

.text-end .w-75 {float:right;}

@media only screen and (min-width : 320px) {        

    .hidden {
        position: absolute;
        overflow: hidden;
        width: 0;
        height: 0;
        pointer-events: none;
    }    
    
    .form-floating textarea {height: 10.5rem!important;}
    .form-floating .form-control {font-size: 1.5rem;!important;}
    
    .footer,      
    .footer-inner {min-height: 100vh;}      
    .footer {      
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      color: var(--default-dark);
    } 
    .footer .logo {max-width: 240px;}      
        
} 

@media only screen and (min-width : 480px) {
}

@media only screen and (min-width : 768px) {
}

@media only screen and (min-width : 992px) {
}

@media only screen and (min-width : 1200px) {
}


/* reveal --------------------------------------------------------- */
/* hscroll --------------------------------------------------------- */
.hscroll {overflow-x: hidden;}
.panel,
.last-panel {
  width: 50%;
  flex: none;
  height: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  position: relative;
  box-sizing: border-box;
}

.panel:nth-child(odd) {
}

@media (max-width: 767px) {
  .hscroll {overflow-x: scroll;}
  .panel {
    width: 90%;
  }
  .last-panel {
    width: 100%;
  }
}
/* hscroll --------------------------------------------------------- */
/* cover --------------------------------------------------------- */
/*
                .bgimage {
                  line-height: 0;
                  position: relative;
                  display: flex;
                  justify-content: center;
                  align-items: center;
                }
                .tagline {
                  dposition: absolute;
                  dpadding-bottom: 16px;
                  dcolor: white;
                  dfont-size: 48px;
                  dopacity: 0;
                }
                .bgimage > div {
                  width: 100%;
                }
                .bgimage img {
                  object-fit: contain;
                }

                .grow-tagline {
                  dtransform: translateY(60px);
                }
                
                #shrink {
                  transform: scale(1);
                }

                #shrink-tagline {
                  transform: translateY(80px);
                }    
*/
@media only screen and (orientation : landscape) {
    /*
    .image-grow > div   {height: 100%;}
    .grow {max-height:100vh;margin-bottom:-5px;position:absolute;bottom:0;}
    */
}

/* cover --------------------------------------------------------- */
/* spotlight --------------------------------------------------------- */
#spotlight  {
        background-color: var(--custom-main);    
}
/* spotlight --------------------------------------------------------- */

body {
    /*background: linear-gradient(135deg, #0297fd, hsl(56, 100%, 49%), #c000f9);*/
    /*
    background: linear-gradient(135deg, #fff, #fff, #fff);
    background-size: 400% 400%;
    -webkit-animation: AnimationName 10s ease infinite;
    -moz-animation: AnimationName 10s ease infinite;
    animation: AnimationName 10s ease infinite;
    */
}

@-webkit-keyframes AnimationName {
    0%{background-position:0% 50%}
    50%{background-position:100% 50%}
    100%{background-position:0% 50%}
}
@-moz-keyframes AnimationName {
    0%{background-position:0% 50%}
    50%{background-position:100% 50%}
    100%{background-position:0% 50%}
}
@keyframes AnimationName {
    0%{background-position:0% 50%}
    50%{background-position:100% 50%}
    100%{background-position:0% 50%}
}

.background {
  width: 100%;
  height: 100%;
  position: fixed;
  filter: blur(30px);
  z-index: -1;
}

span.blob {
  aspect-ratio: 1;
  border-radius: 50%;
  display: block;
  position: absolute;
}

span.blob:nth-child(1) {
  width: 400px;
  height: 400px;
  /*background: linear-gradient(135deg, rgba(0, 0, 0, 1) 0%, rgba(204, 255, 52, .3) 100%);*/
  background: linear-gradient(135deg, rgba(255, 255, 255, 1) 0%, rgba(0, 255, 255, .4) 100%);
  background: linear-gradient(135deg, rgba(255, 255, 255, 1) 0%, rgba(255, 0, 0, .4) 100%);
}
span.blob:nth-child(2) {
  width: 500px;
  height: 500px;
  /*background: linear-gradient(135deg, rgba(0, 0, 0, 1) 0%, rgba(58, 219, 14, .4) 100%);*/
  background: linear-gradient(135deg, rgba(255, 255, 255, 1) 0%, rgba(255, 0, 255, .4) 100%);
  background: linear-gradient(135deg, rgba(255, 255, 255, 1) 0%, rgba(0, 255, 0, .4) 100%);
}
span.blob:nth-child(3) {
  width: 300px;
  height: 300px;
  /*background: linear-gradient(45deg, rgba(0, 0, 0, 1) 0%, rgba(58, 219, 14, .2) 100%);*/
  background: linear-gradient(45deg, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 0, .4) 100%);
  background: linear-gradient(45deg, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, .4) 100%);
}
/*
span.blob:nth-child(2) {
  width: 350px;
  height: 350px;
  background: linear-gradient(135deg, rgba(255, 255, 255, 1) 0%, rgba(161, 0, 255, 1) 100%);
}

span.blob:nth-child(3) {
  width: 510px;
  height: 500px;
  background: linear-gradient(135deg, rgba(255, 255, 255, 1) 0%, rgba(255, 195, 0, 1) 100%);
}
*/



.containermenu {
     /* relative (non absolute): così la sua altezza, che cresce col menu, genera
        overflow scrollabile in #navigationWrap quando le voci superano il viewport */
     position: relative;
     width: 100%;
     dmax-width: 1200px;
     margin: 0 auto;
     dpadding: 0 20px;
     box-sizing: border-box;
     min-height: 100%;
     dborder:4pt solid #f0f;
}
/* For devices larger than 400px */
@media (min-width: 400px) {
     .containermenu {
         dwidth: 85%;
         padding: 0;
    }
}
/* For devices larger than 550px */
@media (min-width: 550px) {
     .containermenu {
         dwidth: 80%;
    }
}
/* Clearing –––––––––––––––––––––––––––––––––––––––––––––––––– */
.containermenu:after {
     content: "";
     display: table;
     clear: both;
}
#navigationWrap {
     display: none;
     width: 100%;
     height: 100vh;
     /* come .video-block__container: 100vh su iOS non segue la barra indirizzi che si nasconde,
        lasciando il menu corto rispetto al fondo reale dello schermo. 100dvh si aggiorna da solo;
        se non supportata la riga è invalida e resta valido il 100vh sopra. */
     height: 100dvh;
     opacity: 0;
     position: fixed;
     top: 0;
     left: 0;
     /* sopra #footerfixed (z-index 12) così la barra contatti non copre le ultime
        voci, ma sotto il bottone di chiusura del menu (zindex-9999) */
     z-index: 1021;
     /* se il menu è più alto del viewport (< xl) scrolla l'overlay; contain evita
        che a fine corsa lo scroll si propaghi alla pagina sottostante */
     overflow-y: auto;
     overscroll-behavior: contain;
     -webkit-overflow-scrolling: touch;
}
nav {
    display: block;
}
nav ul {
     list-style-type: none;
     padding: 0;
}
nav ul li {
     color: white;
     overflow: hidden;
     font-weight: 700;
}
nav ul li:first-child {
     overflow: visible;
}
@media (max-width: 750px) {
     nav ul li {
    }
     nav ul li:first-child {
    }
}
nav a {
    /*color: white;*/
     -o-transition:.3s;
     -ms-transition:.3s;
     -moz-transition:.3s;
     -webkit-transition:.3s;
     transition:.3s;
     text-decoration: none;
}
nav a:hover {
    letter-spacing: .001em;
}
.menu-wrapper {
     position: fixed;
     bottom: 0;
     right: 0;
     z-index: 9999;
     cursor: pointer;
     /* promuove subito, a riposo, il proprio compositing layer: senza questo il primo transform
        che GSAP applica in scroll (showAnimMenu in swup.js) forza la creazione del layer DURANTE
        lo scroll a inerzia — su iOS Safari, farlo proprio nell'angolo dove sta il pollice che
        scrolla può bloccare il thread di scroll per una frazione di secondo. */
     will-change: transform;
}
.whatsapp-wrapper {
     position: fixed;
     bottom: 0;
     left: 0;
     z-index: 20;
     cursor: pointer;
}
.menuopen {
     dposition: fixed;
     dbottom: 0;
     dright: 0;
     z-index: 20;
     cursor: pointer;
}
.menuclose {
     display: none;
     opacity: 0;
     dposition: fixed;
     dbottom: 0;
     dright: 0;
     dwidth: 46px;
     dheight: 46px;
     z-index: 20;
     cursor: pointer;
}

/* pvideo — video parallax (ukiyo.js) in rigalink */
.pvideo {
    display: block;
    object-fit: cover;
    background: #000;
    visibility: hidden;
    aspect-ratio: var(--ratio);
    width: 100%;
    height: auto;
}
.pvideo.is-portrait,
.pvideo.is-landscape {
    visibility: visible;
}
.ukiyo-wrapper { overflow: hidden; }
/* mosaico jquery-mosaic (#myMosaic, vedi functions.php/content() e swup.js/mosaic()): il plugin
   fissa larghezza e altezza della tessera .item partendo dal data-aspect-ratio, ma dentro c'è un
   <a> inline con un'immagine .w-100 ad altezza automatica. Senza queste regole l'immagine non
   riempie la tessera — restano bande vuote (l'aspect ratio nel markup è arrotondato, e la
   larghezza dell'ultimo item di ogni riga viene aggiustata al pixel dal plugin) e le righe
   sembrano disallineate. Con l'anchor a blocco alto quanto la tessera anche Ukiyo, che misura
   l'immagine per costruire il parallax, prende la misura giusta. */
#myMosaic > .item                       {overflow: hidden;}
#myMosaic > .item > a                   {display: block; height: 100%;}
#myMosaic > .item > a > .ukiyo-wrapper  {height: 100%;}
#myMosaic > .item > a > img,
#myMosaic > .item > a > video           {height: 100%; object-fit: cover;}
/* eccezione: nei risultati foto di /cerca (functions.php/cercaRisultatiHtml()) la tessera contiene
   un secondo <a>, l'icona in alto a destra che porta alla pagina del contenuto. È figlio diretto
   di .item come quello dell'immagine, quindi la regola qui sopra gli darebbe height:100% e la sua
   area cliccabile arriverebbe fino in fondo alla foto, coprendola. Qui torna a dimensionarsi
   sul suo contenuto. */
#myMosaic > .item > a.mosaic-vaialcontenuto {height: auto;}
@media (max-width: 768px) {
    .pvideo.is-portrait { max-height: auto; width: 100%; margin: 0 auto; }
    /*.pvideo.is-portrait { max-height: 64vh; width: auto; margin: 0 auto; }*/
}
@media (prefers-reduced-motion: reduce) {
    html { scroll-behavior: auto; }
}






/* MASONRY GRID 
 * ------------------ */
/* Masonry.js: il contenitore è un blocco; larghezze colonne/gutter via sizer (percentPosition) */
.css-masonry {
    margin: 1.5em;
    padding: 0;
    font-size: .85em;
}
.css-masonry .grid-sizer,
.css-masonry .masonryitem { width: 23.5%; }
.css-masonry .gutter-sizer { width: 2%; }
/* niente transizione su larghezza/posizione: al resize le card non devono "scivolare"/accavallarsi */
.css-masonry .masonryitem { margin: 0 0 1.5em; -webkit-transition: none; transition: none; }

/* ITEM 
 * ------------------ */
.masonryitem {
    display: inline-block;
    width: 100%;

    background: #fff;
    margin: 0 0 1em;
    width: 100%;

    /* niente transizione su width/height: Mosaic scrive le misure e le rilegge subito
       (stretch di fine riga); con una transizione attiva rilegge i valori vecchi e
       accumula larghezze sbagliate a ogni fit (item fuori misura e buchi nel layout) */

    overflow: hidden; /* to affect the inner elements with the radius */
}

.masonryitem img{ max-width:100%; font-size: 0; height: auto; /* to be sure to don't have a spacing after the img due to the inline block function */ }


.masonryitem .masonrytitle {}

@media only screen and (max-width: 767px) {
    .css-masonry .grid-sizer,
    .css-masonry .masonryitem { width: 100%; }
    .css-masonry .gutter-sizer { width: 0; }
}

/*@media only screen and (min-width: 421px) and (max-width: 768px){*/
@media only screen and (min-width: 768px) and (max-width: 1200px){
    .css-masonry .grid-sizer,
    .css-masonry .masonryitem { width: 48%; }
    .css-masonry .gutter-sizer { width: 4%; }
}
/*
@media only screen and (min-width: 769px) and (max-width: 1200px){
    .css-masonry .grid-sizer,
    .css-masonry .masonryitem { width: 32%; }
    .css-masonry .gutter-sizer { width: 2%; }
}
*/
@media only screen and (min-width: 1201px) and (max-width: 1400px){
    .css-masonry .grid-sizer,
    .css-masonry .masonryitem { width: 32%; }
    .css-masonry .gutter-sizer { width: 2%; }
}
@media only screen and (min-width: 1401px) {
    .css-masonry .grid-sizer,
    .css-masonry .masonryitem { width: 23.5%; }
    .css-masonry .gutter-sizer { width: 2%; }
}

/* ===== SLIDER homepage (ex CodePen wahs) ===== */
.slider {
  width: 100vw;
  height: 100vh;
}

.slider input[type="radio"] {
  display: none;
}

.slider .slides {
  position: relative;
  width: 100%;
  height: 100%;
  display: flex;
  overflow: hidden;
}

/* Slide */
.slider .slides .slide {
  position: absolute;
  width: 100%;
  height: 100%;
  opacity: 0;
  display: flex;
  transition: all 0.5s ease-in;
}

.slider .slides .curr {
  opacity: 1;
}

/* Overlay */
.slider .slides .slide::after {
  position: absolute;
  content: "";
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: #000;
  opacity: 0.4;
  z-index: 1;
}

/* Images */
.slides .slide img {
  min-width: 100%;
  min-height: 100%;
  object-fit: cover;
  transform: scale(0.8);
  transition: all 0.5s ease-in;
}

.slides .curr img {
  transform: scale(1);
}

/* Description */
.slides .slide .desc {
  position: absolute;
  /*
  max-width: 700px;
  min-width: 550px;
  left: 150px;
  padding: 25px;
  */
  top: -50%;
  transform: translateY(50%);
  z-index: 2;
  transition: all 0.5s ease-in;
}

.slides .curr .desc {
  top: 50%;
  transform: translateY(-50%);
}

.slide .desc h2 {
  /*
  font-size: 5rem;
  color: #fff;
  line-height: 5rem;
  */
}

.slide .desc p {
  font-size: 1rem;
  margin: 25px 0px;
  color: #fff;
  line-height: 1.2rem;
}

.slide .desc a {
  display: inline-block;
  text-decoration: none;
  font-size: 1rem;
  color: #fff;
  background-color: #e7af15;
  padding: 20px 50px;
  transition: all 0.3s ease-in;
}

.slide .desc a:hover {
  background-color: #000;
  color: #fff;
  border-radius: 10px;
}

/* Navigation Arrows */
.slider .arrow {
  position: absolute;
  text-decoration: none;
  z-index: 20;
  color: #fff;
  top: 50%;
  transform: translateY(-50%);
  opacity: 0.5;
  transition: all 0.3s ease-in;
  font-size: 3rem;
  cursor: pointer;
}

.slider .arrow:hover {
  opacity: 1;
}

.slider .left {
  left: 70px;
}

.slider .right {
  right: 70px;
}

/* Radio Navigation */
.slider .rad-nav {
  width: 100%;
  position: fixed;
  bottom: 0;
  z-index: 10;
  display: flex;
  justify-content: center;
  align-items: center;
}

.slider .rad-nav .rad-btn {
  width: 25px;
  height: 25px;
  border: 2px solid #fff;
  border-radius: 50%;
  margin: 0px 5px;
  cursor: pointer;
  transition: all 0.3s ease-in;
}

.slider .rad-nav .rad-btn:hover {
  background-color: #fff;
  border-radius: 30%;
}

/* attivo: scopato dentro lo slider per non collidere con altri .active della pagina */
.slider .rad-nav .active {
  background-color: #fff;
}

/* Slider responsive */
@media (max-width: 1100px) {
  .slides .slide .desc {
    left: 50%;
    transform: translateX(-50%);
    /*
    text-align: center;
    */
  }

  .slides .curr .desc {
    left: 50%;
    transform: translate(-50%, -50%);
  }
}

@media (max-width: 800px) {
  .slides .slide .desc {
    /*
    width: 70%;
    min-width: 200px;
    */
  }

  .slide .desc h2 {
    /*
    font-size: 2.5rem;
    line-height: 2.8rem;
    */
  }

  .slide .desc p {
    /*font-size: 0.8rem;*/
    margin: 10px 0px;
  }

  .slide .desc a {
    /*font-size: 0.8rem;*/
    padding: 10px 30px;
  }

  .slider .arrow {
    font-size: 2rem;
  }

  .slider .left {
    left: 20px;
  }

  .slider .right {
    right: 20px;
  }

  .slider .rad-nav .rad-btn {
    width: 15px;
    height: 15px;
  }
}



/* marquee --------------------------------------------------------- */
.marquee {
position: relative;
display: flex;
overflow: hidden;
    height: 20vh;
}

.marquee + .marquee {
}

.marquee-item {
/*width: 150px;*/
display: flex;
align-items: center;
justify-content: center;
/*padding: 15px;*/
flex-shrink: 0;
}

@media (min-width: 700px) {
.marquee {
}

.marquee + .marquee {
    /*margin-top: 40px;*/
}

.marquee-item {
    /*width: 250px;*/
    /*padding: 30px;*/
}
}




.nice-parallax {
  height: 100%;
  width: 100%;
}

.nice-parallax .swiper-slide {
  overflow: hidden;
}

.nice-parallax .slide-inner {
  position: absolute;
  width: 100%;
  height: 100%;
  left: 0;
  top: 0;
  background-size: cover;
  background-position: center;
}

/* Transizione fra pagine (SwupOverlayTheme, configurato in js/swup/swup.js): il tema mette
   --swup-overlay-theme-delay: 0.2s su html e non lo espone fra le opzioni, quindi si riscrive
   qui. Vale insieme a duration: 450 passata al plugin — sono le due metà della stessa attesa,
   se si ritocca una conviene guardare anche l'altra. La regola sull'elemento vince su quella
   che il tema mette su html. */
.swup-transition-overlay {--swup-overlay-theme-delay: 0.12s;}

    .swiperscroll {}
    .swiperscroll .swiper-container {
        height: 100%;
    }
    .swiperscroll .swiper-slide{
        display: flex;
        align-items: center;
        justify-content: center;
    }
    .swiper-button-next, .swiper-button-prev{color: var(--link);}

.swiperscroll .swiper-slide {
    transition:all .4s ease;
    display: flex;
    justify-content: center;
    /* auto (non il 100% del CSS di Swiper): le slide sono flex item del wrapper,
       con l'align-items: stretch di default si allineano tutte alla più alta */
    height: auto;
}

.swiperscroll  .swiper-wrapper{
  width: 100%;
  height: 100%;
  margin: 0 auto;
  box-sizing: border-box;
}
.swiperscroll .swiper-slide {box-sizing: border-box;}
/* frecce di .swiperscroll (functions.php/calendariogare()): il CSS di Swiper 4 dà al bottone una
   box di 27x44px (con margin-top:-22px per centrarla), ma dentro il markup mette un SVG di 50x50.
   La parte di chevron che sborda è visibile ma NON cliccabile: lì il click passa attraverso e
   arriva all'<a> della card sotto, da cui il "come se cliccassi su un altro elemento" e i salti
   di scroll. Portando la box a 50x50 (e il margin negativo a metà altezza) l'area cliccabile
   coincide con quella visibile. Il pointer-events sull'SVG evita che il target del click sia il
   path invece del bottone. */
.swiperscroll .swiper-button-prev,
.swiperscroll .swiper-button-next   {width: 50px; height: 50px; margin-top: -25px;}
/* il margin-left:-10px più in basso (regola globale sulle frecce) serviva a ricentrare il chevron
   nella box da 27px: con la box da 50px, larga quanto l'SVG, va azzerato o il disegno torna a
   sporgere a sinistra dell'area cliccabile. */
.swiperscroll .swiper-button-prev svg,
.swiperscroll .swiper-button-next svg {display: block; margin-left: 0; pointer-events: none;}



.swiperscroll .card-body {
    border-radius: 0.25rem;
}




/* La cover parte da sopra, dietro alla barra fissa in cima, e non sotto di essa.
   #content riceve da contentMenuOffset() (swup.js) un margin-top inline pari all'altezza della
   barra visibile — #menulandscape da xl in su, .shape-wrapper sotto — e la cover, essendo il primo
   figlio, cominciava li'. Il margine negativo lo annulla: senza, la foto non puo' mai salire oltre
   quella quota e qualunque movimento verso il basso (lo scale/yPercent di ingressoCover, vedi
   startSwiperHero in swup.js) scopre il fondo pagina bianco sotto la barra.
   I 2px di sovrapposizione coprono lo scarto fra le due misure: sotto xl contentMenuOffset() usa
   logo.offsetHeight - 1, mentre --fixedbar-h e' la stessa altezza arrotondata, e un pixel di
   disallineamento e' esattamente la riga bianca che si vuole togliere. Finiscono dietro alla
   barra, che e' opaca, quindi non si vedono.
   L'altezza cresce di conseguenza: non si sottrae piu' --fixedbar-h (la cover ora ci passa sotto),
   solo #footerfixed in basso, cosi' il bordo inferiore resta dov'era. */
.hero-slider, .hero-style {margin-top: calc((var(--fixedbar-h, 0px) + 2px) * -1);}

@media only screen and (orientation : landscape) {
  /* altezza reale del viewport (--vh = clientHeight/100, scritta da setVwVh() in swup.js) meno la
     sola barra fissa in basso, #footerfixed (--footerfixed-h), piu' i 2px di sovrapposizione in
     cima. I fallback tengono la formula valida anche prima che il JS giri. Entrambe le classi
     stanno sullo stesso <section> (functions.php: "hero-slider hero-style"), quindi la
     dichiarazione va tenuta condivisa. */
  .hero-slider, .hero-style {height: calc((var(--vh, 1vh) * 100) - var(--footerfixed-h, 0px) + 2px);}
  d.hero-slider .swiper-container {border: 10vh solid var(--default);}
}

@media only screen and (orientation : portrait) {
  /* come in landscape ma senza sottrarre --footerfixed-h, esattamente come fa #riganolink .vh-100
     nei due orientamenti (vedi lì sopra). Prima qui c'era height:100vw, cioè un quadrato: su un
     telefono 9:16 lo slider veniva alto poco più di metà schermo, mentre la cover di riganolink e
     quella di rigahomesingolo riempiono il viewport. */
  .hero-slider, .hero-style {height: calc((var(--vh, 1vh) * 100) + 2px);}

  /* Lo slider e' sempre fatto di foto, quindi rientra nel caso "a tutto schermo" deciso per le
     cover: stessa unita' vh, stesso motivo (vedi il commento esteso nel blocco portrait piu' in
     alto). La riga sopra con --vh resta perche' su iOS --vh vale l'area momentaneamente visibile
     (665 contro 697 misurati), quindi da sola fermerebbe lo slider sopra la toolbar. */
  .hero-slider, .hero-style {height: calc(100vh + 2px);}
}

.hero-container {
  margin: 0 auto;
  position: relative;
  z-index: 2;
}

.hero-slider {
  display: flex;
  position: relative;
  z-index: 0;
}

.hero-slider .swiper-container {
  width: 100%;
  height: 100%;
  position: absolute;
  left: 0;
  top: 0;
}

.hero-slider .swiper-slide {
  overflow: hidden;
  color: #fff;
}

.slide-inner {
  width: 100%;
  height: 100%;
  position: absolute;
  background-size: cover;
  background-position: center;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: left;
}

.slide-overlay {
  position: absolute;
  width: 100%;
  height: 100%;
  background: linear-gradient(180deg, rgba(26, 26, 46, 0.6), rgba(26, 26, 46, 0.9));
  background: linear-gradient(180deg, rgba(26, 26, 26, 0.3), rgba(26, 26, 26, 0.6));
  z-index: 1;
}

.hero-style {
  transition: all 0.4s ease;
}

.hero-style .slide-title,
.hero-style .slide-text,
.hero-style .slide-btns {
  /*max-width: 690px;*/
}

.theme-btn,
.theme-btn-s2 {
  transition: all 0.3s ease;
}

.theme-btn-s2 {
  background-color: rgba(255, 255, 255, 0.85);
  color: #1a1a2e;
}

.theme-btn:hover,
.theme-btn-s2:hover {
  background-color: #d4574e;
  color: #ffffff;
}

.theme-btn-s3 {
  font-size: 16px;
  font-weight: 500;
  color: #ffffff;
  text-transform: uppercase;
}

.slide-btns a:first-child {
  margin-right: 10px;
}

.hero-slider .swiper-button-prev,
.hero-slider .swiper-button-next {
  width: 55px;
  height: 55px;
  background: transparent;
  text-align: center;
  line-height: 53px;
  opacity: 0;
  visibility: hidden;
  transition: all 0.3s ease;
}

.hero-slider:hover .swiper-button-prev,
.hero-slider:hover .swiper-button-next {
  opacity: 1;
  visibility: visible;
  transform: translateX(0);
}

.hero-slider .swiper-button-prev {
  /*left: 25px;*/
  transform: translateX(50px);
}

.hero-slider .swiper-button-next {
  /*right: 25px;*/
  transform: translateX(-50px);
}

.hero-slider .swiper-button-prev:before,
.hero-slider .swiper-button-next:before {
  display: inline-block;
}

.hero-slider .swiper-button-prev:before {
}

.hero-slider .swiper-button-next:before {
}

.hero-slider .swiper-pagination {
  text-align: left;
}

.hero-slider .swiper-container-horizontal > .swiper-pagination-bullets {
  bottom: 50px;
  left: 50%;
  transform: translateX(-50%);
  max-width: 1200px;
  padding: 0 15px;
  margin: 0 auto;
}

.swiper-pagination-bullet {
  width: 12px;
  height: 12px;
  background: #ffffff;
  opacity: 0.4;
  transition: opacity 0.2s ease;
}

.swiper-pagination-bullet-active {
  opacity: 1;
}

/* Le frecce sono <div> (vedi functions.php/calendariogare()), non <button>, e per scorrere ci si
   clicca sopra piu' volte di seguito: due click ravvicinati su un <div> sono un doppio click, e il
   browser fa quello che fa sempre in quel caso, cioe' seleziona il testo piu' vicino — tipicamente
   il titolo della sezione, che resta evidenziato in azzurro. Il CSS di Swiper 4 sulle frecce non
   include user-select, quindi va messo qui. Il prefisso -webkit- serve a Safari (macOS e iOS). */
.swiper-button-next,
.swiper-button-prev{
  background-image:none!important;
  -webkit-user-select: none;
  user-select: none;
}
.swiper-button-next svg,
.swiper-button-prev svg{
  margin-left: -10px;
}

/* Freccia arrivata a inizio/fine corsa: resta al suo posto, ingrigita, e assorbe il click.
   Qui c'era "[aria-disabled=true] { display:none }", che faceva sparire la freccia: il click
   finiva su quello che si trova sotto (la card, o l'<h5> del titolo) e lo apriva. L'attributo
   lo mette il modulo a11y di Swiper 4.4.6, che e' attivo di default, quindi la regola scattava
   davvero. Sparire non basta nemmeno come rimedio: un elemento display:none non riceve click,
   quindi non c'e' modo di fermarli da li'.
   Swiper aggiunge di suo ".swiper-button-disabled { opacity:.35; cursor:auto; pointer-events:none }":
   dell'opacity ci teniamo l'effetto "spenta", mentre pointer-events va rimesso ad auto o il click
   torna ad attraversare la freccia. Riprendendoselo, il bottone lo assorbe senza fare nulla:
   Swiper non naviga comunque, essendo gia' a fine corsa. */
.swiper-button-next.swiper-button-disabled,
.swiper-button-prev.swiper-button-disabled,
.swiper-button-next[aria-disabled="true"],
.swiper-button-prev[aria-disabled="true"]{
  pointer-events: auto;
  cursor: default;
}



/* La caption va nascosta (translateY 100%, tagliata da overflow:hidden su .video__caption)
   finché expandableVideoBlock() non la porta a 0% quando il video parte, a espansione
   completata. Lo spostamento è su .video__caption > .container (vedi swup.js), non sullo
   <span> interno: .container ha la stessa altezza di .video__caption (che ci si adatta
   attorno), quindi 100% della SUA altezza lo porta davvero fuori dal riquadro clippato —
   spostare solo lo span, molto più piccolo del contenuto reale (titolo + griglia), non
   sarebbe bastato a nascondere tutto.
   opacity:0 in aggiunta al translateY: su Safari (desktop e iOS) il clipping di overflow:hidden
   su un figlio transformato non è affidabile, e senza questa rete di sicurezza il testo restava
   visibile al primo caricamento anche se già "fuori" dal riquadro secondo la sola transform.
   L'opacity garantisce l'invisibilità su ogni browser a prescindere dal clipping; lo scorrimento
   resta come effetto visivo quando la caption viene mostrata (swup.js anima entrambe insieme). */
figure.video {
  margin: 0;
}
figure.video .video__caption {
  overflow: hidden;
  position: absolute;
  left: 24px;
  bottom: 100px;
  color: #fff;
  z-index: 1;
}
figure.video .video__caption > .container {
  transform: translateY(100%);
  opacity: 0;
}

.video-block__container {
  overflow: hidden;
  position: relative;
  width: 100%;
  box-sizing: border-box;
  height: 100%;
  height: calc(var(--vh) * 100 + 1px);
  /* Il video deve coprire SEMPRE tutto lo schermo, anche dietro la barra indirizzi di Safari.
     --vh (swup.js) e 100dvh valgono il viewport "piccolo" quando la barra è visibile, quindi il
     video si ferma sopra la barra lasciando la fascia scoperta. 100lvh è il viewport "grande"
     (schermo intero, come se la barra non ci fosse) ed è costante: copre tutto in ogni stato.
     Sui browser che non supportano lvh la riga è invalida e viene ignorata, restando valido il
     calc(var(--vh)...) sopra. */
  height: 100lvh;
  /* --fixedbar-h (swup.js) = altezza di #menulandscape/.shape-wrapper, la barra fissa in cima
     al viewport per il breakpoint corrente: con box-sizing:border-box il padding-top resta
     dentro l'altezza già calcolata sopra, quindi spinge giù figure/video (height:100% del
     content-box) senza sforare il fondo del viewport. */
  /*padding-top: var(--fixedbar-h, 0px);*/
}

.video-block figure.video {
  height: 100%;
  width: 100%;
  display: flex;
  align-items: center;
}

.video-block video {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.video-block_full-width {
  max-width: calc(var(--vw) * 100);
  margin-left: calc(50% - (var(--vw) * 50));
  margin-right: calc(50% - (var(--vw) * 50));
  width: auto;
  overflow: hidden;
}

/* Da schermata intera .video-block__container diventa position:fixed (il pin di ScrollTrigger):
   senza un z-index esplicito resta a "auto", che con un elemento fixed dello stesso stacking
   context finisce SEMPRE sotto qualunque z-index positivo (qui #menulandscape a 1020), a
   prescindere dall'ordine nel DOM — non è un problema di "quanto alto" il numero, ma del fatto
   che non ce n'era affatto uno su questo elemento. Applicato solo mentre il pin è attivo
   (classe aggiunta/rimossa da onEnter/onLeave in swup.js): fuori dal pin torna sotto al menu,
   come un elemento qualunque nel flusso normale. */
.video-block__container.is-above-menu {
  z-index: 1021;
}

.video__caption > .container {transform: translate(0px, 100%);opacity:0;}

/* ============================================================================
   Sezione "image-grow" (include/functions.php: <section class="bgimage image-grow
   overflow-hidden"> con <img class="grow"> e <span class="tagline grow-tagline">).
   Stile ripreso da puppolegno.it/css/style.css: l'immagine .grow parte rimpicciolita
   (scale .4) e la .tagline parte ingrandita e invisibile (scale 3, opacity 0); GSAP
   (growTl in functions.php, pin di scroll) le anima fino alla dimensione naturale.
   Nel tema queste regole erano presenti ma commentate/disabilitate (proprietà con
   prefisso "d"), quindi la sezione restava senza stile.
   ============================================================================ */
.image-grow {height: 100vh;}
.bgimage {
  line-height: 0;
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
}
.bgimage > div {
  width: 100%;
}
.bgimage img {
  width: 100%;
  object-fit: contain;
  max-height: 80vh;
}
/* stato iniziale della tagline della SOLA sezione "in evidenza" (functions.php: la <span
   class="tagline grow-tagline"> è figlia DIRETTA di <section class="image-grow">). Va usato il
   combinatore figlio ">": la classe .grow-tagline è riutilizzata anche da riganolink(), ma lì la
   tagline è annidata dentro .grow-tagline-wrapper (non figlia diretta di .image-grow) e il suo
   GSAP non anima l'opacity — un opacity:0 su .grow-tagline in generale lasciava invisibile quel
   titolo. Qui la scala/opacity iniziali le anima imagegrow() in swup.js. */
.image-grow > .grow-tagline {
  position: absolute;
  transform: scale(3);
  opacity: 0;
}
.grow {
  transform: scale(.4);
}

/* ============================================================================
   Countdown delle cover di home (include/functions.php: il
   <div class="grow-countdown-wrapper" data-countdown="..."> con quattro
   <span class="countdown-span">, emesso solo per i contenuti con countdown = 1).
   I numeri li scrive startCountdown() in js/swup/swup.js; qui c'e' solo la resa.
   Selettori di classe e non di id perche' in pagina ce ne puo' essere piu' d'uno:
   la cover singola (rigahomesingolo) ne ha uno, lo slider uno per slide, ognuno
   con la data del proprio contenuto.
   Le etichette sotto ai numeri arrivano da :nth-of-type: dipendono quindi dalla
   POSIZIONE della span fra i fratelli, non da una classe. Per questo il JS, quando
   mancano meno di 24 ore, nasconde la prima span con d-none invece di rimuoverla:
   togliendola dal DOM le altre scalerebbero di uno e le ore finirebbero
   etichettate "giorni".
   ============================================================================ */
.grow-countdown-wrapper span {
  min-width: 70px;
  color: #fff;
  display: inline-block;
  text-align: center;
  font-family: fontdefaultbold;
}
.grow-countdown-wrapper span:after {
  font-size: 10pt;
  font-family: fontdefault;
  display: block;
  margin-top: -.5em;
}
.grow-countdown-wrapper span:nth-of-type(1):after {
  content: "giorni";
}
.grow-countdown-wrapper span:nth-of-type(2):after {
  content: "ore";
}
.grow-countdown-wrapper span:nth-of-type(3):after {
  content: "minuti";
}
.grow-countdown-wrapper span:nth-of-type(4):after {
  content: "secondi";
}