/* ------------------------------------------------------------------
   Gruppo Castaldi – Global CSS  (rilavorato con @layer)
   Ordine layers: base → layout → components → utilities
------------------------------------------------------------------ */

/* Dichiarazione dell'ordine dei layers */
@layer base, layout, components, utilities;

/* ================================================================
   @layer base
================================================================ */
@layer base {

  /* ===  Ricordarsi di modificare , se serve, il Critical CSS! === */

  /* === BASE FONT SETUP === */
  @font-face {
    font-family: 'Crimson Pro';
    src: url('/wp-content/uploads/2025/04/CrimsonPro-Regular.woff2') format('woff2');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
  }
  @font-face {
    font-family: 'Crimson Pro';
    src: url('/wp-content/uploads/2025/04/CrimsonPro-SemiBold.woff2') format('woff2');
    font-weight: 600;
    font-style: normal;
    font-display: swap;
  }

  /* === INTER – metric-override anti reflow === */
  @font-face {
    font-family: 'Inter';
    src: local('Inter Regular');
    font-weight: 100 900;
    font-style: normal;
    font-display: swap;
    ascent-override: 90%;
    descent-override: 22%;
    line-gap-override: 0%;
  }

  /* === ROOT VARS === */
  :root {
    --font-primary: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
    --font-size-body: clamp(1rem, 1.2vw, 1.125rem);
    --font-size-small: clamp(0.875rem, 1vw, 1rem);
    --font-size-h1: clamp(2.2rem, 5vw, 3.8rem);
    --font-size-h2: clamp(1.8rem, 4vw, 3.2rem);
    --font-size-h3: clamp(1.4rem, 3vw, 2.4rem);
    --font-size-h4: clamp(1.2rem, 2.4vw, 1.8rem);
    --line-height-tight: 1.2;
    --line-height-snug: 1.35;
    --line-height-base: 1.6;
    --letter-spacing-tight: -0.02em;
    --letter-spacing-normal: -0.01em;
    --castaldi-gold: #ca9e39;
    --castaldi-footer: rgb(195,190,181);
    --castaldi-muted: rgba(0,0,0,0.55);
    --apple-white:#FAFAFA;
    /* === TYPOGRAPHY TOKENS (Apple baseline) === */
    --fs-body      : 1.0625rem;  /* 17 px mobile */
    --fs-body-lg   : 1.125rem;   /* 18 px desktop */
    --fs-subtitle  : 1.25rem;    /* 20 px */
    --fs-title-1   : 2.125rem;   /* 34 px mobile */
    --fs-title-1-lg: 2.625rem;   /* 42 px desktop */
    --lh-body      : 1.46;
    --space-1      : .5rem;      /* 8 px gap */
    --space-2      : 1rem;       /* 16 px gap */
    --space-3      : 1.25rem;    /* 20 px gap */
    --space-4      : 1.5rem;     /* 24 px gap */
    --space-5      : 2.25rem;    /* 36px gap mobile */
    --space-6      : 3.5rem;     /* 56px gap desktop */
    --gray-700     : #515154;    /* Apple body text gray */
  }

  /* === TYPO HEADINGS & PARAGRAPHS === */
  .castaldi-heading       { font-family:'Crimson Pro',serif;font-weight:400;font-size:var(--font-size-h2);color:#1a1a1a;letter-spacing:var(--letter-spacing-tight);line-height:var(--line-height-tight);margin-bottom:1rem; }
  @media(max-width:768px){ .castaldi-heading,.castaldi-paragraph + .castaldi-heading{margin-top:2.2rem;margin-bottom:0.6rem;} }

  .castaldi-subtitle      { font-family:var(--font-primary);font-weight:400;font-size:var(--font-size-h4); }
  .castaldi-paragraph     { font-family:var(--font-primary);font-size:var(--font-size-body);font-weight:400;line-height:var(--line-height-base);letter-spacing:var(--letter-spacing-normal);color:#1a1a1a;max-width:68ch;margin-bottom:1.5rem;text-wrap:pretty; }
  .castaldi-paragraph ol,.castaldi-paragraph ul,ol.fade-in-up,ul.fade-in-up{ text-align:left;padding-left:1.25rem;margin:0.75rem auto 1.5rem;max-width:68ch; }
  .castaldi-paragraph ol li,.castaldi-paragraph ul li,ol.fade-in-up li,ul.fade-in-up li{margin-bottom:0.45rem;line-height:1.65;}

  .castaldi-paragraph-small{font-family:var(--font-primary);font-size:var(--font-size-small);line-height:1.5;color:#1a1a1a;opacity:0.85;margin-bottom:1rem;}
  .castaldi-alert-text{font-family:var(--font-primary);font-weight:500;color:#d33;font-size:1rem;margin-bottom:1rem;}

  .heading-light{color:var(--apple-white);text-shadow:0 4px 8px rgba(0,0,0,0.25);}  .heading-dark{color:#1a1a1a;text-shadow:none;}
  @media(max-width:768px){.castaldi-heading{font-weight:400;}.hero-subtitle{font-weight:400;}.sottotitolo{font-weight:500;}.castaldi-grid .castaldi-heading{font-weight:500;}}

  /* HERO TITLE & SUBTITLE */
  /* 
   * FIX 2026-02-07 (Addy Osmani audit):
   * RIMOSSA transizione su .hero-title container.
   * L'animazione ora è gestita SOLO dalle parole .word in hero-premium-2026.css
   * per evitare doppia animazione sovrapposta (container + parole).
   * Il container diventa visibile istantaneamente, le parole fanno lo stagger.
   */
  .hero-title{font-family:var(--font-primary);font-size:clamp(2.8rem,7vw,4.8rem);font-weight:500;line-height:1.12;letter-spacing:-0.025em;color:var(--apple-white);text-shadow:0 2px 12px rgba(0,0,0,0.45);max-width:700px;margin:0 auto;border-radius:0.5rem;background:none;-webkit-font-smoothing:antialiased;}
  /* .hero-title.js-animated — NO LONGER NEEDED: words handle their own animation */
  .hero-subtitle{font-family:var(--font-primary);font-size:clamp(1.3rem,2.7vw,2.1rem);font-weight:400;line-height:1.38;letter-spacing:-0.015em;color:var(--apple-white);margin-top:1.7rem;text-shadow:0 1px 8px rgba(0,0,0,0.40);opacity:0;transform:translateY(40px);transition:opacity 0.9s cubic-bezier(0.19,1,0.22,1),transform 0.9s cubic-bezier(0.19,1,0.22,1);transition-delay:0.2s;max-width:650px;margin-left:auto;margin-right:auto;border-radius:0.5rem;background:none;-webkit-font-smoothing:antialiased;}
  .hero-subtitle.js-animated{opacity:1;transform:translateY(0);}

  /* SPLIT SUBTITLE */
  .subtitle-split{display:inline-block;opacity:0;transform:translateY(14px);transition:opacity 0.7s cubic-bezier(0.22,1,0.36,1),transform 0.7s cubic-bezier(0.22,1,0.36,1);} .subtitle-split.show{opacity:1;transform:translateY(0);}

  /* =================================================================
     LINK GLOBALI – sistema 2025
  ================================================================= */
  :where(a){
    --link-clr           : var(--castaldi-gold);
    --link-clr-hover     : color-mix(in srgb, var(--castaldi-gold) 75%, #000);
    --link-clr-visited   : color-mix(in srgb, var(--castaldi-gold) 55%, #6a4);
    color               : var(--link-clr);
    text-decoration     : none;
    text-underline-offset: .2em;
    text-decoration-thickness:2px;
    transition: color .3s ease, text-decoration-color .3s ease;
  }

  :where(a:hover, a:focus){
    color: var(--link-clr-hover);
    text-decoration-line: underline;
  }

  @media (hover:none){
    :where(a:focus-visible){
      outline: 3px solid var(--castaldi-gold);
      outline-offset:2px;
    }
  }

  :where(a:visited){
    color: var(--link-clr-visited);
  }

  :where(a:active){
    transform: translateY(1px);
  }

  /* disattiva underline sui link che contengono solo media */
  :where(a:has(img, svg, picture)){
    text-decoration:none!important;
  }

  /* LINK FOOTER CHIARI */
  .footer-light :where(a){
    --link-clr         : var(--castaldi-footer);
    --link-clr-hover   : color-mix(in srgb, var(--castaldi-footer) 80%, #000);
    --link-clr-visited : var(--castaldi-footer);
  }
  /* marker list — SOLO per contenuti sezioni, NON per menu/admin */
  ol li::marker{color:var(--castaldi-gold);font-weight:500;font-variant-numeric:tabular-nums;}
  /* Marker dorato SOLO per liste dentro sezioni di contenuto */
  section ul li::marker, 
  article ul li::marker, 
  .castaldi-paragraph ul li::marker,
  .venn-text ul li::marker,
  .card-copy ul li::marker,
  main ul li::marker {
    content: "• ";
    color: var(--castaldi-gold);
  }
  small,.text-small{font-size:var(--font-size-small);opacity:0.85;}
  
  /* Reset GLOBALE marker per TUTTI i menu, admin bar, dropdown */
  ul li::marker { content: none !important; list-style: none !important; }
  nav li::marker, nav ul li::marker, .menu li::marker, .sub-menu li::marker, 
  header li::marker, #sticky-header li::marker, .menu-item li::marker,
  #wpadminbar li::marker, .cs-control li::marker, [class*="cs-"] li::marker,
  .x-dropdown li::marker, .x-menu li::marker { 
    content: none !important; 
    color: transparent !important;
    list-style: none !important;
  }
  /* Reset marker per lightbox e componenti custom che usano ::before per checkmark */
  .info-lightbox-overlay li::marker, .bonus-list li::marker, .bn-card__works li::marker, .lightbox-index li::marker { content: none !important; list-style: none !important; }

  body{background:#ffffff!important;}
} /* -- fine @layer base -- */

/* ================================================================
   @layer layout
================================================================ */
@layer layout {

  /* HERO MOBILE WRAPPER */
  /* [spostato in Cornerstone ‑ 2025-05-09] */

  /* evito che l'overlay mobile compaia su desktop */
  @media(min-width:981px){
    #hero-mobile-carousel .bulgari-layout{display:none!important;}
  }

  /* HERO SPLIT LAYOUT */
  @media(min-width:981px){.castaldi-hero-split{display:flex;align-items:center;justify-content:flex-start;height:100vh;padding-left:8vw;padding-right:8vw;text-align:left;}}
  @media(max-width:980px){.castaldi-hero-split{text-align:center;justify-content:center;padding:0 2rem;}}
  .castaldi-hero-split .hero-content{max-width:800px;margin:0 auto;position:relative;z-index:3;}

  /* ═══════════════════════════════════════════════════════════════════════════
     CONTAINER SYSTEM — Apple 2025/2026 Pattern
     
     .container      → Full-width (edge-to-edge per media/gallery)
     .container-text → Max-width centrato (per copy/titoli, leggibilità ottimale)
     ═══════════════════════════════════════════════════════════════════════════ */
  .container{
    width:100%;
    padding:0;
    box-sizing:border-box;
  }
  .container-text{
    max-width:1280px;
    margin-inline:auto;
    padding-inline:clamp(1rem, 4vw, 2rem);
    box-sizing:border-box;
    width:100%;
  }
  /* Nested: testo dentro container full-width */
  .container .container-text{
    padding-inline:clamp(1rem, 4vw, 2rem);
  }
  
  /* ═══════════════════════════════════════════════════════════════════════════
     THEMCO PRO OVERRIDE — Rimuove bande bianche laterali
     Il tema Pro/Cornerstone aggiunge margin:30px a .x-container
     ═══════════════════════════════════════════════════════════════════════════ */
  .x-container.max.width.offset{
    margin-left:0 !important;
    margin-right:0 !important;
    max-width:100% !important;
    width:100% !important;
  }
  .x-main.full{
    width:100% !important;
    max-width:100% !important;
  }
  
  .grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:2rem;}
  @media(max-width:768px){.grid-2{grid-template-columns:1fr;}}

  .pt-section{padding-top:clamp(3rem,5vw,6rem);} .pb-section{padding-bottom:clamp(3rem,5vw,6rem);} @media(max-width:980px){.text-center-sm{text-align:center;}}

  /* HERO BANNER full-bleed */
  #hero-banner{position:relative;width:100%;height:100vh;overflow:hidden;display:flex;align-items:center;justify-content:center;isolation:isolate;z-index:0;}
  .hero-bg{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none;}
  .hero-img-mobile,.hero-video-desktop{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;display:none;}
  @media(max-width:980px){.hero-img-mobile{display:block;}}
  @media(min-width:981px){.hero-video-desktop{display:block;}}

  .hero-overlay{position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,0.04)0%,rgba(0,0,0,0.005)35%,rgba(0,0,0,0)100%);z-index:1;pointer-events:none;}
  .hero-content{position:relative;z-index:2;text-align:center;margin:0 auto;max-width:800px;padding:0 1.5rem;box-sizing:border-box;}
  @media(max-width:980px){.hero-content{padding:0 1rem;}}

  /* Builder full-width fix */
  #hero-banner.x-section,#hero-banner .x-row,#hero-banner .x-col,#hero-banner .x-row-inner{max-width:100vw!important;width:100vw!important;margin:0!important;padding:0!important;}
  #hero-banner .x-col>section{padding:0!important;}

  /* HERO SECONDARIO */
  .castaldi-hero-section{position:relative;width:100%;height:75vh;max-height:820px;overflow:hidden;display:flex;align-items:center;justify-content:center;background:#000;isolation:isolate;z-index:0;}
  @media(min-width:1025px){.castaldi-hero-section{height:calc(100vh - 120px);min-height:580px;}}
  .castaldi-hero-video{position:absolute;inset:0;object-fit:cover;z-index:0;pointer-events:none;display:block;}
  .castaldi-hero-fallback-bg{position:absolute;inset:0;background-size:cover;z-index:0;display:none;}
  @media(max-width:980px){.castaldi-hero-video{display:none!important;}.castaldi-hero-fallback-bg{display:block!important;}}

  .castaldi-hero-overlay{position:relative;z-index:2;text-align:center;color:var(--apple-white);max-width:920px;margin:0 auto;padding:0 1.5rem;box-sizing:border-box;}
  .castaldi-hero-overlay>div{margin-top:0;} /* evita shift */

  /* HERO DESKTOP - REMOVED: conflicted with hero-premium-2026.css flexbox centering
     The old position:absolute + top:42vh approach has been replaced by
     proper flexbox centering in hero-premium-2026.css (Jon Duckett + Addy Osmani) */

  /* === Dynamic viewport height via JS custom --vh (all mobile) === */
  @media(max-width:980px){
    .castaldi-hero-mobile{
      height:calc(var(--vh, 1vh) * 100)!important;
      max-height:calc(var(--vh, 1vh) * 100)!important;
    }
  }

  /* Prefer native small-viewport units when available to avoid "jumping" during URL-bar hide/show on mobile browsers */
  @media(max-width:980px){
    @supports (height: 100svh){
      .castaldi-hero-mobile{
        height:100svh!important;
        max-height:100svh!important;
      }
    }
  }

  /* (Rimosso override 100dvh: manteniamo 100svh per evitare zoom del video) */
} /* -- fine @layer layout -- */

/* ================================================================
   @layer components
================================================================ */
@layer components {

  /* BUTTON — Fix 2026-02-07: specific transitions (Adam Argyle) */
  .btn-gold{display:inline-block;padding:0.9rem 1.7rem;font-family:var(--font-primary);font-size:1.05rem;font-weight:500;color:var(--castaldi-gold);background:transparent;border:1.5px solid var(--castaldi-gold);border-radius:6px;text-decoration:none;transition:color .3s ease, background .3s ease, box-shadow .3s ease, transform .25s cubic-bezier(.33,1,.68,1);box-shadow:0 0 0 0 transparent;} .btn-gold:hover{background:var(--castaldi-gold);color:var(--apple-white);box-shadow:0 8px 16px rgba(202,158,57,0.25);transform:translateY(-2px);}
  /* FIX – testo invisibile su .btn-gold al passaggio del mouse */
  .btn-gold:hover,
  .btn-gold:focus {
    color: var(--apple-white) !important;
  }

  /* FOOTER LIGHT THEME */
  .footer-light,.footer-light *{color:var(--castaldi-footer)!important;font-family:var(--font-primary)!important;}
  .footer-light a::after{content:"";position:absolute;left:0;bottom:-3px;width:100%;height:2px;background:var(--castaldi-footer);transform:scaleX(0);transform-origin:left;transition:transform .3s ease;} .footer-light a:hover::after{transform:scaleX(1);}

  /* SUBMENU INDICATOR - DISATTIVATO: rimosso pallino dorato sotto voci menu con dropdown */
  /* .menu-item-has-children>a::after{content:"";display:inline-block;width:5px;height:5px;background:var(--castaldi-gold);margin-left:6px;vertical-align:middle;transform:rotate(45deg);} */
  .menu-item-has-children>a::after{display:none!important;}

  /* CARD & GRID */
  .card{transition:transform .3s ease,box-shadow .3s ease;} .card:hover{transform:scale(1.015);box-shadow:0 6px 16px rgba(0,0,0,.08);}

  .castaldi-grid{display:flex;flex-direction:column;gap:3rem;align-items:center;margin-top:2rem;} @media(min-width:768px){.castaldi-grid{flex-direction:row;justify-content:space-between;align-items:stretch;gap:2.5rem;}}

  /* ═══════════════════════════════════════════════════════════════════════════
     CASTALDI CARD — Layout base (26-feb-2026)
     
     Le animazioni sono gestite INLINE in ogni sezione HTML per permettere
     personalizzazione per contesto (seconda-sezione usa emergence multi-dimensionale).
     
     Qui definiamo solo layout e sizing di base.
  ═══════════════════════════════════════════════════════════════════════════ */
  .castaldi-card {
    flex: 1 1 0;
    max-width: 100%;
    text-align: left; /* Apple Typography 2026: paragrafi sempre a bandiera sinistra */
    /* CLS prevention: riserva spazio per evitare layout shift */
    contain-intrinsic-block-size: 180px;
    content-visibility: visible;
  }
  
  /* RIMOSSO: Hover effects (transform, box-shadow, underline shimmer) — 2026-02-12 */
  
  .castaldi-card-heading {
    font-family: var(--font-primary);
    font-size: clamp(1.2rem,2.5vw,1.6rem);
    font-weight: 500;
    margin-bottom: 0.5rem;
    /* Apple Typography 2026: allineamento coerente con paragrafi */
    text-align: left;
    text-wrap: balance; /* Chrome 114+, Safari 17.4+, Firefox 121+ */
    letter-spacing: var(--letter-spacing-tight);
    line-height: var(--line-height-snug);
    max-width: 28ch; /* Fallback per browser legacy */
    margin-left: 0;
    margin-right: 0;
  }
  
  .castaldi-card .castaldi-paragraph { margin-bottom: 0; text-align: left; } /* Apple Typography 2026 */

  /* SEPARATOR — Fix 2026-02-07: specific transitions (Adam Argyle) */
  .castaldi-separator{width:60px;height:2px;background:var(--castaldi-gold);margin:1.5rem auto;opacity:0;transform:scaleX(0);transform-origin:center;transition:opacity .6s ease-out, transform .6s ease-out;} .castaldi-separator.js-animated{opacity:1;transform:scaleX(1);} @media(min-width:768px){.castaldi-separator{width:1px;height:auto;margin:0 2rem;transform:scaleY(0);} .castaldi-separator.js-animated{transform:scaleY(1);} } @media(max-width:768px){.castaldi-separator{width:80px;opacity:0.4;}}

  /* BUTTON WRAP */
  .castaldi-button-wrap{margin-top:4rem;display:flex;justify-content:center;} @media(max-width:767px){.castaldi-button-wrap{margin-top:5rem;padding:0 1.5rem;}}

  /* LOCATION LABEL — Fix 2026-02-07: specific transitions (Adam Argyle) */
  .castaldi-location{font-family:var(--font-primary);font-size:var(--font-size-small);font-weight:500;color:var(--castaldi-muted);letter-spacing:.02em;text-transform:uppercase;margin-bottom:.5rem;opacity:0;transform:translateY(20px);transition:opacity .6s ease-out, transform .6s ease-out;} .castaldi-location.js-animated{opacity:1;transform:translateY(0);}

  /* PLACEHOLDER */
  input::placeholder,textarea::placeholder{color:var(--castaldi-muted);opacity:.7;transition:opacity .3s ease;} input:focus::placeholder,textarea:focus::placeholder{opacity:.3;}

  /* BLOG GRID override */
  #eg-blog-grid *{font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif!important;font-weight:400;letter-spacing:-0.01em;color:#1a1a1a;}

  /* SEO only img */
  .seo-only-img{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none;z-index:-1;}

  /* Reveal-line centering fix */
  .castaldi-heading.reveal-line{display:block;text-align:center;margin:0 auto;max-width:100%;} .reveal-line::after{left:50%;transform:translateX(-50%);}

  /* === PREMIUM CTA BUTTON 2025 === */
  .bottone-cta{
    /* Layout */
    display:inline-flex;
    align-items:center;
    justify-content:center;
    gap:0.55rem; /* spazio per eventuale icona */
    padding:1rem 2.2rem;

    /* Typography */
    font-family:var(--font-primary);
    font-size:1.1rem;
    font-weight:500;
    letter-spacing:-0.015em;
    line-height:1;

    /* Colors */
    color:var(--castaldi-gold) !important;
    background:transparent;
    border:1.5px solid var(--castaldi-gold);

    /* Visual */
    border-radius:8px;
    box-shadow:0 0 0 0 transparent;
    transition:background .35s cubic-bezier(.22,1,.38,1),
               color       .35s cubic-bezier(.22,1,.38,1),
               box-shadow  .35s ease,
               transform  .25s cubic-bezier(.33,1,.68,1);
    text-decoration:none;
    -webkit-font-smoothing:antialiased;
  }
  .bottone-cta:hover,
  .bottone-cta:focus{
    color:var(--apple-white) !important;
    background:var(--castaldi-gold);
    box-shadow:0 10px 24px rgba(202,158,57,0.30);
    transform:translateY(-3px);
  }
  .bottone-cta:active{
    transform:translateY(0) scale(.97);
    box-shadow:0 6px 16px rgba(202,158,57,0.25);
  }
  .bottone-cta:focus-visible{
    outline:none;
    box-shadow:0 0 0 3px rgba(202,158,57,0.45);
  }
  /* Disabled state */
  .bottone-cta[aria-disabled="true"],
  .bottone-cta:disabled{
    opacity:0.45;
    pointer-events:none;
    box-shadow:none;
  }

  /* Modificatore rigido (angoli netti) */
  .bottone-cta--rigido{
    border-radius:4px;
  }
  .bottone-cta--rigido:hover,
  .bottone-cta--rigido:focus{
    background:var(--castaldi-gold);
    color:var(--apple-white) !important;
  }
} /* -- fine @layer components -- */

/* ================================================================
   @layer utilities
================================================================ */
@layer utilities {

  /* TEXT COLORS */
  .text-gold{color:var(--castaldi-gold)!important;} .text-muted{color:var(--castaldi-muted)!important;}
  /* Variant for white text with reduced opacity suited for dark backgrounds */
  .text-muted-dark{color:rgba(255,255,255,0.72)!important;}

  /* ═══════════════════════════════════════════════════════════════════════════
     ENTRANCE ANIMATIONS — Adam Argyle / Tobias Ahlin optimized (2026-02-07)
     
     Performance fixes:
     - Removed permanent will-change (GPU memory waste)
     - Replaced transition:all with specific properties
     - Added hover micro-interactions
     
     Tobias Ahlin touches:
     - Smoother delay progression
     - Card hover lift effect
     - Reveal-line gradient on hover
  ═══════════════════════════════════════════════════════════════════════════ */
  
  /* Fade In Up — primary entrance */
  .fade-in-up {
    opacity: 0;
    transform: translateY(40px);
    transition: opacity .8s cubic-bezier(.25,1,.5,1), transform .8s cubic-bezier(.25,1,.5,1);
  }
  .fade-in-up.js-animated { opacity: 1; transform: translateY(0); }
  
  /* Fade In Left/Right */
  .fade-in-left {
    opacity: 0;
    transform: translateX(-60px);
    transition: opacity .8s cubic-bezier(.33,1,.68,1), transform .8s cubic-bezier(.33,1,.68,1);
  }
  .fade-in-left.js-animated { opacity: 1; transform: translateX(0); }
  
  .fade-in-right {
    opacity: 0;
    transform: translateX(60px);
    transition: opacity .8s cubic-bezier(.33,1,.68,1), transform .8s cubic-bezier(.33,1,.68,1);
  }
  .fade-in-right.js-animated { opacity: 1; transform: translateX(0); }
  
  /* Zoom In */
  .zoom-in {
    opacity: 0;
    transform: scale(0.95);
    transition: opacity .9s cubic-bezier(.16,1,.3,1), transform .9s cubic-bezier(.16,1,.3,1);
  }
  .zoom-in.js-animated { opacity: 1; transform: scale(1); }
  
  /* Blur Reveal */
  .blur-reveal {
    opacity: 0;
    filter: blur(8px);
    transition: opacity 1s ease-out, filter 1s ease-out;
  }
  .blur-reveal.js-animated { opacity: 1; filter: blur(0); }
  
  /* Reveal Line — Tobias Ahlin signature underline */
  .reveal-line {
    position: relative;
    display: inline-block;
    overflow: hidden;
  }
  .reveal-line::after {
    content: "";
    position: absolute;
    left: 0;
    bottom: -6px;
    width: 0;
    height: 2px;
    background: var(--castaldi-gold);
    transition: width .8s cubic-bezier(.25,1,.5,1), background .4s ease;
  }
  .reveal-line.js-animated::after { width: 100%; }
  
  /* Reveal Line inside animated card — Fix 25-feb-2026 */
  .castaldi-card.js-animated .reveal-line::after { width: 100%; }
  
  /* RIMOSSO: Reveal Line hover shimmer — 2026-02-12 */
  
  /* Stagger Up */
  .stagger-up {
    opacity: 0;
    transform: translateY(20px);
    transition: opacity .6s ease-out, transform .6s ease-out;
  }
  .stagger-up.js-animated { opacity: 1; transform: translateY(0); }
  
  /* Scale Fade In */
  .scale-fade-in {
    opacity: 0;
    transform: scale(1.05);
    transition: opacity 1s ease, transform 1s ease;
  }
  .scale-fade-in.js-animated { opacity: 1; transform: scale(1); }
  
  /* Video Reveal */
  .video-reveal {
    opacity: 0;
    filter: grayscale(100%) blur(4px);
    transition: opacity 1.2s ease-out, filter 1.2s ease-out;
  }
  .video-reveal.js-animated { opacity: 1; filter: none; }

  /* Instant override */
  .fade-in-up.js-animated,.fade-in-left.js-animated,.fade-in-right.js-animated,.zoom-in.js-animated,.scale-fade-in.js-animated,.stagger-up.js-animated{opacity:1!important;transform:none!important;}

  /* Mobile softer transitions — Fix 25-feb-2026: più percettibili (translateY 10→25px) */
  @media(max-width:768px){.fade-in-up,.fade-in-left,.fade-in-right,.zoom-in,.scale-fade-in,.stagger-up{transition-property:transform,opacity!important;transition-duration:.75s!important;transition-timing-function:cubic-bezier(.25,.76,.3,1)!important;opacity:0;} .fade-in-up{transform:translateY(25px);} .fade-in-left{transform:translateX(-25px);} .fade-in-right{transform:translateX(25px);} .zoom-in,.scale-fade-in{transform:scale(0.96);} .castaldi-button-wrap{transition-delay:.2s!important;}}

  /* ═══════════════════════════════════════════════════════════════════════════
     DELAY HELPERS — Tobias Ahlin rhythm optimization (2026-02-07)
     
     Smoother progression with "breathing room" between animations.
     Original: 0.2s increments (too mechanical)
     New: Organic curve that feels more natural
  ═══════════════════════════════════════════════════════════════════════════ */
  .delay-0  { transition-delay: 0s; }
  .delay-1  { transition-delay: .15s; }
  .delay-2  { transition-delay: .3s; }
  .delay-3  { transition-delay: .5s; }
  .delay-4  { transition-delay: .7s; }
  .delay-5  { transition-delay: .9s; }
  .delay-6  { transition-delay: 1.15s; }
  .delay-7  { transition-delay: 1.4s; }
  .delay-8  { transition-delay: 1.65s; }
  .delay-9  { transition-delay: 1.9s; }
  .delay-10 { transition-delay: 2.2s; }

  /* Mobile: stagger compresso — mantiene micro-animazioni visibili
     ma evita delay lunghi che causano flash bianco.
     Originali: 0.15–2.2s → Mobile: 0–0.35s (max ~1/6 del desktop) */
  @media (max-width: 768px) {
    .delay-0  { transition-delay: 0s !important; }
    .delay-1  { transition-delay: 0s !important; }
    .delay-2  { transition-delay: .05s !important; }
    .delay-3  { transition-delay: .1s !important; }
    .delay-4  { transition-delay: .15s !important; }
    .delay-5  { transition-delay: .2s !important; }
    .delay-6  { transition-delay: .25s !important; }
    .delay-7  { transition-delay: .3s !important; }
    .delay-8  { transition-delay: .3s !important; }
    .delay-9  { transition-delay: .35s !important; }
    .delay-10 { transition-delay: .35s !important; }
  }

  /* Reduced motion */
  @media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;}}

  /* HERO DESKTOP – riserva spazio */
  @media(min-width:1024px){#hero-desktop-subtitle{min-height:3.2rem;}}

  /* Center text mobile */
  @media(max-width:768px){.castaldi-heading,.castaldi-subtitle,.hero-title,.hero-subtitle,.titolo,.sottotitolo{text-align:center;margin-left:auto;margin-right:auto;} .castaldi-paragraph,.castaldi-paragraph-small{text-align:left;margin-left:auto;margin-right:auto;}}

  /* SUBTITLE SPLIT utility */
  .subtitle-split{font-family:var(--font-primary);font-size:inherit;font-weight:400;letter-spacing:-.012em;opacity:0;display:inline-block;transform:translateY(14px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1);background:rgba(0,0,0,.02);border-radius:.3em;padding:0 .12em;-webkit-font-smoothing:antialiased;} .subtitle-split.show{opacity:1;transform:translateY(0);}

  /* =============================================================
     @layer utilities – Visually hidden per breakpoint (sr-only)
     Gruppo Castaldi – 2025-05-09
     ============================================================ */
  /* Base sr-only (nascosto ma accessibile) */
  .sr-only-base{
    position:absolute!important;
    width:1px!important;
    height:1px!important;
    padding:0!important;
    margin:-1px!important;
    overflow:hidden!important;
    clip:rect(0 0 0 0)!important; /* legacy */
    clip-path:inset(50%)!important; /* modern */
    border:0!important;
    white-space:nowrap!important;
    pointer-events:none!important; /* evita hit-test */
    z-index:-1!important; /* ulteriore sicurezza */
  }

  /* Nasconde solo da tablet in su (≥768px) */
  @media(min-width:768px){
    .sr-only-desktop{
      position:absolute!important;
      width:1px!important;
      height:1px!important;
      padding:0!important;
      margin:-1px!important;
      overflow:hidden!important;
      clip:rect(0 0 0 0)!important;
      clip-path:inset(50%)!important;
      border:0!important;
      white-space:nowrap!important;
    }
  }
  @media(max-width:767px){
    .sr-only-mobile{
      position:absolute!important;
      width:1px!important;
      height:1px!important;
      padding:0!important;
      margin:-1px!important;
      overflow:hidden!important;
      clip:rect(0 0 0 0)!important;
      clip-path:inset(50%)!important;
      border:0!important;
      white-space:nowrap!important;
    }
  }

  /* Pure fade-only animation (no movement, no scale) */
  .fade-only{opacity:0;transition:opacity .9s cubic-bezier(.25,1,.3,1);} 
  .fade-only.js-animated{opacity:1;}

  /* Vista mobile: stabilizza lo stack durante il resize della barra URL (Chrome) */
  @media(max-width:980px){
    .vv-stable{
      position:fixed!important;
      left:0!important;
      right:0!important;
      bottom:calc(3.6rem + env(safe-area-inset-bottom,20px))!important;
      z-index:3!important;
      pointer-events:none!important;
    }
  }

  /* Fixed stack while hero is in view to eliminate CLS on Chrome */
  @media(max-width:980px){
    .hero-stack--fixed{
      position:fixed!important;
      left:0!important;
      right:0!important;
      bottom:calc(3.6rem + env(safe-area-inset-bottom,20px))!important;
      z-index:3!important;
      pointer-events:none!important;
      will-change:transform;
    }
  }

  /* Freeze stack temporaneamente durante il resize della barra URL (Chrome) */
  @media(max-width:980px){
    .hero-stack--freeze{
      position:fixed!important;
      left:0!important;
      right:0!important;
      bottom:calc(3.6rem + env(safe-area-inset-bottom,20px))!important;
      z-index:3!important;
      pointer-events:none!important;
      will-change:transform;
    }
  }

  /* === PURE FADE-IN (Apple style) — Fix 2026-02-07: will-change released after animation === */
  .fade-in{opacity:0!important;transition:opacity 1.4s cubic-bezier(.22,1,.36,1);}
  .fade-in.js-animated{opacity:1!important;will-change:auto;}

  /* === APPLE-STYLE TYPOGRAPHY UTILITIES (2025-05) === */
  /* Light background variants */
  .apple-heading{
    font-family:'Crimson Pro',serif;
    font-weight:700;
    font-size:var(--fs-title-1);
    line-height:1.2;
    letter-spacing:var(--letter-spacing-tight);
    color:#1a1a1a;
    margin-bottom:var(--space-1); /* 8px gap to subtitle */
  }
  .apple-subtitle{
    font-family:var(--font-primary);
    font-weight:600;
    font-size:var(--fs-subtitle);
    line-height:1.4;
    letter-spacing:var(--letter-spacing-normal);
    color:var(--gray-700);
    margin-top:0;
    margin-bottom:var(--space-3); /* 20px gap to paragraph */
  }
  .apple-body{
    font-family:var(--font-primary);
    font-weight:400;
    font-size:var(--fs-body);
    line-height:var(--lh-body);
    letter-spacing:-0.012em; /* leggermente più stretto: leggibilità premium */
    color:var(--gray-700);
  }
  /* Desktop upscale */
  @media(min-width:769px){
    .apple-heading{font-size:var(--fs-title-1-lg);}  /* 42 px */
    .apple-body{font-size:var(--fs-body-lg);}        /* 18 px */
    .apple-subtitle{margin-bottom:var(--space-4);}   /* 24px desktop gap */
  }

  /* Dark background variants */
  .apple-heading-dark{
    composes: apple-heading;
    color:var(--apple-white);
  }
  .apple-subtitle-dark{
    composes: apple-subtitle;
    color:var(--apple-white);
  }

  .apple-body-dark{
    composes: apple-body;
    color:var(--apple-white);
  }

  /* === APPLE-STYLE BODY TEXT (paragraph) === */
  /* (vecchie regole mobile/desktop rimosse: ora gestite dai token) */

  /* — override finale rimosso: ora non più necessario — */

  /* Mobile fine-tuning */
  @media(max-width:768px){
    /* Subtitle: 18 px, letter-spacing -0.011 em, more breathing space */
    .apple-subtitle{font-size:1.125rem; letter-spacing:-0.011em; line-height:1.42; margin-bottom:var(--space-4);} /* 24 px */
  }

  /* === PREMIUM INTRO PARAGRAPH (2025-05-14) === */
  .premium-intro {
    font-family: var(--font-primary);
    font-weight: 400;
    font-size: 1.1875rem;
    line-height: 1.4;
    letter-spacing: -0.009em;
    color: var(--gray-700);
    max-width: 68ch;
    margin-top: var(--space-3);
    margin-bottom: var(--space-3);
  }

  @media(max-width: 768px) {
    .premium-intro {
      font-size: 1.125rem;
      letter-spacing: -0.011em;
      /* line-height: 1.35; ← solo se serve */
    }
  }

  /* Sopratitolo utility */
  .sopratitolo{
    font-family:'Inter', var(--font-primary);
    font-size:clamp(0.875rem, 1.5vw, 1.1rem) !important; /* min 0.875rem */
    font-weight:200;
    color:rgba(0,0,0,0.4); /* leggermente più tenue */
    line-height:1.4;
    text-align:center;
    margin:0 auto 0.5rem;
    max-width:90%;
  }
} /* -- fine @layer utilities -- */

/* ================================================================
   BLOCCO EXTRA (fuori dai layer)
   [interamente spostato in Cornerstone – 2025-05-09]
================================================================ */
html{font-size:100% !important;} /* forza 16px anche se il tema imposta 14px */

/* Override margini predefiniti che gonfiano gli spazi */
.castaldi-heading.apple-heading{margin-top:0!important;margin-bottom:var(--space-1)!important;} /* 8px */
.castaldi-subtitle.apple-subtitle{margin-top:0!important;margin-bottom:var(--space-4)!important;} /* 24px */

/* === CASTALDI STANDARD HEADING/SUBTITLE SPACING & COLOR (2025-05-12) === */
.castaldi-heading + .castaldi-subtitle{
  /* Gap of 8 px (Apple-space-1) between heading and subtitle */
  margin-top: var(--space-1) !important;
}

.castaldi-subtitle{
  /* Uniform muted gray color across light sections */
  color: var(--castaldi-muted) !important;
  /* Reset top margin so gap is controlled only by the adjacent-sibling rule */
  margin-top: 0 !important;
  /* Consistent breathing space below subtitle before next block */
  margin-bottom: var(--space-3) !important; /* 20 px */
}

/* Force heading size/line-height across all elements (.p, h1-h6) to avoid overrides from the builder */
.castaldi-heading{
  font-size: var(--font-size-h2) !important;
  line-height: var(--line-height-tight) !important;
}

/* === Bigger mobile heading (2025-05-12) === */
@media (max-width: 768px){
  .castaldi-heading{
    font-size: 2.375rem !important; /* 38 px mobile */
  }
}

/* =============================================================
   GC TYPOGRAPHY – TITOLI DI SEZIONE (NO HERO)
   Uso: per titoli, sottotitoli, pretitoli di tutte le sezioni
   Tag: <h2>, <span>, <p>, <div>, ...
   Stile uniforme, Apple-style, responsive
   Ultima revisione: 2025-05-14
============================================================= */

/* Pretitolo sezione – breve, sopra il titolo principale
   Esempio: <h2 class="GC-pretitolo">Il metodo Gruppo Castaldi...</h2>
   Consigliato per: sopratitoli, micro-headline, label di sezione
*/
.GC-pretitolo {
  display: block;
  font-family: 'Inter', sans-serif;
  font-weight: 300;
  color: rgba(0,0,0,.55);
  font-size: clamp(0.875rem, 1.5vw, 1.1rem);
  letter-spacing: -0.01em;
  line-height: 1.22;
  margin: 0 0 var(--space-6) 0; /* aria massima pretitolo→titolo */
  text-align: left;
}

/* Variante più tenue per pretitoli secondari o label meno importanti */
.GC-pretitolo-muted {
  color: rgba(0,0,0,0.38);
  font-weight: 200;
}

/* Titolo principale di sezione
   Esempio: <p class="GC-titolo">Pensare. Costruire. Coordinare.</p>
   Consigliato per: titoli di sezione, headline principali (NO hero)
*/
.GC-titolo {
  display: block;
  font-family: 'Crimson Pro', serif;
  font-weight: 400;
  font-size: clamp(1.8rem, 4vw, 3.2rem);
  letter-spacing: -0.02em;
  line-height: 1.2;
  color: #1a1a1a;
  margin: 0 0 0.5rem 0;
  max-width: 900px;
  text-align: left;
}

/* Variante per titoli secondari o card: più piccolo, stesso font */
.GC-titolo-small {
  display: block;
  font-family: 'Crimson Pro', serif;
  font-weight: 400;
  font-size: clamp(1.2rem, 2vw, 2rem);
  letter-spacing: -0.015em;
  line-height: 1.22;
  color: #1a1a1a;
  margin: 0 0 0.5rem 0;
  max-width: 700px;
  text-align: left;
}

/* Sottotitolo descrittivo di sezione
   Esempio: <p class="GC-sottotitolo">Tre fasi distinte...</p>
   Consigliato per: descrizioni, payoff, sottotitoli di sezione
*/
.GC-sottotitolo {
  display: block;
  font-family: 'Inter', sans-serif;
  font-weight: 400;
  color: rgba(0,0,0,.55);
  font-size: clamp(1.2rem, 2.4vw, 1.8rem);
  letter-spacing: -0.01em;
  line-height: 1.35;
  margin: 0 0 2rem 0;
  text-align: left;
}

/* Utility: rimuove il margine inferiore dove serve blocco compatto */
.mb-0 { margin-bottom: 0 !important; }

/* Responsive: centra i titoli su mobile, ma lascia left-align per paragrafi lunghi */
@media (max-width: 768px) {
  .GC-pretitolo, .GC-titolo, .GC-titolo-small, .GC-sottotitolo, .text-center-mobile {
    text-align: center !important;
    margin-left: auto;
    margin-right: auto;
  }

  /* distanza leggermente ridotta su mobile */
  .GC-pretitolo{ margin-bottom: var(--space-5) !important; }
}

/* Utility: forza centratura solo dove serve anche su desktop */
.text-center-mobile { text-align: center !important; margin-left: auto; margin-right: auto; }

/* Esempi d'uso:
  <h2 class="GC-pretitolo">Pretitolo</h2>
  <p class="GC-titolo">Titolo principale</p>
  <p class="GC-sottotitolo">Sottotitolo descrittivo</p>
  <span class="GC-pretitolo GC-pretitolo-muted mb-0">Label secondaria</span>
  <h3 class="GC-titolo-small text-center-mobile">Titolo card</h3>
*/

/* =============================================================
   GC-intro – Paragrafo introduttivo di sezione (Apple style 2025)
   Uso: per soglie valoriali, intro emozionali, testi di apertura sezione
   Tag: <p>, <div>, <span> (block)
   Ultima revisione: 2025-05-15
============================================================= */
.GC-intro {
  display: block;
  font-family: 'Inter', sans-serif;
  font-size: clamp(1.25rem, 2.6vw, 1.7rem); /* più grande del sottotitolo */
  font-weight: 400;
  color: #232323;
  line-height: 1.6;
  max-width: 52ch;
  margin: 0 auto 3.5rem auto; /* spacing generoso sotto */
  text-align: center;
  letter-spacing: -0.009em;
}
@media (max-width: 768px) {
  .GC-intro {
    font-size: 1.12rem;
    max-width: 97vw;
    margin-bottom: 2.5rem;
    text-align: left;
    padding-left: 0.5rem;
    padding-right: 0.5rem;
  }
}

/* Fade-in soft: animazione più lenta e naturale per intro valoriali */
/* Fix 2026-02-07: will-change released after animation (Adam Argyle) */
.fade-in-soft {
  opacity: 0;
  transform: translateY(32px);
  transition: opacity 1.25s cubic-bezier(.22,1,.36,1), transform 1.25s cubic-bezier(.22,1,.36,1);
}
.fade-in-soft.js-animated {
  opacity: 1;
  transform: none;
  will-change: auto;
}

/* Esempio d'uso:
<p class="GC-intro fade-in-soft animate-on-scroll delay-0">Testo intro...</p>
<h2 class="GC-pretitolo fade-in-up animate-on-scroll delay-2">Pretitolo</h2>
<p class="GC-titolo fade-in-up animate-on-scroll delay-3">Titolo</p>
<h3 class="GC-sottotitolo fade-in-up animate-on-scroll delay-4">Sottotitolo</h3>
*/

/* === SOTTOLINEATURA DORATA ANIMATA sotto .GC-intro (Apple-style 2025) === */
.GC-intro-underline-wrap {
  display: flex;
  justify-content: center;
  align-items: flex-start;
  width: 100%;
  margin-top: 0.7rem;
  min-height: 2.5rem; /* riserva spazio per evitare shift */
}
.GC-underline-gold {
  display: block;
  height: 2.5px;
  width: 0;
  background: linear-gradient(90deg, #ca9e39 0%, #e7c77a 100%);
  border-radius: 2px;
  box-shadow: 0 1px 4px 0 rgba(202,158,57,0.10);
  transition: width 1.1s cubic-bezier(.22,1,.36,1), opacity .5s;
  margin: 0 auto;
  opacity: 0;
}
.GC-intro.js-animated ~ .GC-intro-underline-wrap .GC-underline-gold {
  width: 64px;
  opacity: 1;
  transition-delay: .15s;
}
@media (max-width: 768px) {
  .GC-intro-underline-wrap { min-height: 1.5rem; }
  .GC-underline-gold { height: 2px; }
  .GC-intro.js-animated ~ .GC-intro-underline-wrap .GC-underline-gold { width: 44px; }
}

#sect-services .castaldi-location {
  text-align: left;
  margin-left: 0;
  margin-right: 0;
  font-size: 0.75rem;
  font-weight: 500;
  color: var(--castaldi-muted);
  letter-spacing: .02em;
  margin-bottom: 0.9rem;
  margin-top: -0.5rem;
  opacity: 1;
  transform: none;
  transition: none;
}

/* Regola #sect-services .castaldi-grid rimossa - ora in .sect-services-grid (audit 2026-02-06) */

/* Uniforma anche eventuale .eyebrow usata nei section-header legacy */
.section-header .eyebrow{
  margin-bottom: var(--space-6) !important;
}

/* Mobile card — animazioni gestite inline in ogni sezione HTML (26-feb-2026) */
/* Le regole di animazione sono state spostate in seconda-sezione.html per 
   permettere personalizzazione specifica (emergence multi-dimensionale). */

/* ═══════════════════════════════════════════════════════════════════════════
   SEZIONE 2 - SERVIZI (#sect-services)
   Consolidato da inline CSS (audit 2026-02-06)
   Target SEO: "ristrutturazioni roma"
═══════════════════════════════════════════════════════════════════════════ */

/* Container interno con padding top */
.sect-services-inner {
  padding-top: 3.5rem;
}

/* Grid con margin top */
.sect-services-grid {
  margin-top: 4rem;
}

@media (min-width: 1024px) {
  .sect-services-grid {
    margin-top: 6.5rem;
  }
}

/* Mantieni pretitolo su una riga su smartphone larghi */
@media (min-width: 430px) and (max-width: 768px) {
  #sect-services .GC-pretitolo {
    white-space: nowrap;
  }
}

/* ═══════════════════════════════════════════════════════════════════════════
   #sect-services card paragraph — GESTITO IN SECONDA-SEZIONE.HTML (26-feb-2026)
   Le regole per margini/padding sono consolidate nel file inline per evitare
   conflitti di specificità. NON aggiungere regole qui.
   ═══════════════════════════════════════════════════════════════════════════ */

/* Card heading: ora è h3, allinea stile — Apple Typography 2026 */
#sect-services .castaldi-card-heading {
  font-family: var(--font-primary);
  font-size: clamp(1.2rem, 2.5vw, 1.6rem);
  font-weight: 500;
  margin-bottom: 0.5rem;
  text-align: left; /* Coerenza con paragrafi */
  text-wrap: balance; /* CSS 2026 */
  letter-spacing: var(--letter-spacing-tight);
  line-height: var(--line-height-snug);
  max-width: 28ch; /* Fallback */
  margin-left: 0;
  margin-right: 0;
}

/* Performance: content-visibility DISABILITATO per #sect-services
   Causa conflitto con IntersectionObserver su mobile.
   Le card non venivano mai considerate "intersecting" perché
   content-visibility: auto impedisce il rendering finché non
   sono nel viewport reale, ma l'IO ha bisogno del rendering
   per calcolare le intersezioni.
   
   RIMOSSO 26-feb-2026 — Fix animazioni mobile
*/
/* #sect-services {
  content-visibility: auto;
  contain-intrinsic-size: 0 600px;
} */

/* Safety net: se IntersectionObserver non scatta entro 2.5s (es. fast scroll,
   JS error, content-visibility rendering delay), rivela gli elementi comunque.
   Quando .js-animated viene aggiunto, :not(.js-animated) non matcha più e
   l'animation viene cancellata — le regole .js-animated (con !important)
   sovrascrivono istantaneamente. Nessun flash visibile.
   
   ⚠️ NOTA 26-feb-2026: 
   - RIMOSSI .castaldi-card e .castaldi-separator dalla safety net.
   - Le card in #sect-services usano animazioni inline con blur + scale.
   - La safety net NON deve applicarsi a elementi con animazioni multi-dimensionali. */
@keyframes gc-reveal-safety {
  to { opacity: 1; transform: none; filter: none; }
}
.fade-in-up:not(.js-animated):not(.castaldi-card):not(.castaldi-separator),
.fade-in-left:not(.js-animated),
.fade-in-right:not(.js-animated),
.fade-in:not(.js-animated),
.fade-in-soft:not(.js-animated),
.fade-only:not(.js-animated),
.slow-up:not(.js-animated),
.zoom-in:not(.js-animated),
.scale-fade-in:not(.js-animated),
.stagger-up:not(.js-animated),
.castaldi-location:not(.js-animated),
.blur-reveal:not(.js-animated) {
  animation: gc-reveal-safety 0.6s ease-out 2.5s both;
}
/* Mobile: safety net timing */
@media (max-width: 768px) {
  .fade-in-up:not(.js-animated):not(.castaldi-card):not(.castaldi-separator),
  .fade-in-left:not(.js-animated),
  .fade-in-right:not(.js-animated),
  .fade-in:not(.js-animated),
  .fade-in-soft:not(.js-animated),
  .fade-only:not(.js-animated),
  .slow-up:not(.js-animated),
  .zoom-in:not(.js-animated),
  .scale-fade-in:not(.js-animated),
  .stagger-up:not(.js-animated),
  .castaldi-location:not(.js-animated),
  .blur-reveal:not(.js-animated) {
    animation-delay: 2s;
  }
}
