:root{
  --navy:#091327; --navy2:#0c1b38; --navy3:#0f2247; --ink:#0d1426;
  --paper:#f6f8fc; --paper2:#eef2f9; --line:#e2e7f0; --slate:#43506b; --muted:#8793ad;
  --acc:#2f6bff; --acc2:#46e0ff; --acc-d:#1f51d6;
  --white:#eaf0ff;
  --maxw:1180px; --sora:'Sora',system-ui,sans-serif; --inter:'Inter',system-ui,sans-serif; --mono:'Space Mono',monospace;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{font-family:var(--inter);background:var(--navy);color:var(--white);line-height:1.6;overflow-x:hidden;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
h1,h2,h3,h4,.brand{font-family:var(--sora);font-weight:800;line-height:1.04;letter-spacing:-.02em}
img{max-width:100%;display:block}
.mono{font-family:var(--mono)}
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 32px}
.wrap.narrow{max-width:820px}

/* buttons */
.btn{display:inline-flex;align-items:center;gap:.5em;border:0;cursor:pointer;font-family:var(--inter);
  font-weight:600;font-size:15px;padding:12px 22px;border-radius:999px;transition:.25s;white-space:nowrap}
/* CTA = invito-testo (niente pulsante "commerciale") */
.btn-pri{background:none;color:var(--acc2,#46e0ff);box-shadow:none;padding:8px 2px;border-radius:0;font-weight:600;position:relative;transition:color .25s}
.btn-pri::after{content:"→";display:inline-block;transition:transform .3s cubic-bezier(.16,1,.3,1)}
.btn-pri::before{content:"";position:absolute;left:2px;right:2px;bottom:2px;height:1px;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .35s cubic-bezier(.16,1,.3,1)}
.btn-pri:hover{transform:none;box-shadow:none}
.btn-pri:hover::after{transform:translateX(6px)}
.btn-pri:hover::before{transform:scaleX(1)}
.btn-out{background:rgba(255,255,255,.05);color:var(--white);border:1px solid rgba(255,255,255,.18)}
.btn-out:hover{border-color:var(--acc2);background:rgba(70,224,255,.10)}
.btn-lg{padding:15px 28px;font-size:16px}
/* Contatti: inviti-testo coerenti (no pulsanti) */
.btn-light{background:none;color:var(--acc2);padding:6px 2px;border-radius:0;font-weight:700;font-size:clamp(19px,2.2vw,28px);position:relative}
.btn-light::after{content:"→";display:inline-block;margin-left:.45em;transition:transform .3s cubic-bezier(.16,1,.3,1)}
.btn-light::before{content:"";position:absolute;left:2px;right:2px;bottom:-1px;height:1px;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .35s cubic-bezier(.16,1,.3,1)}
.btn-light:hover{transform:none}
.btn-light:hover::after{transform:translateX(6px)}
.btn-light:hover::before{transform:scaleX(1)}
.btn-out-light{background:none;border:0;color:#9fb0d0;padding:6px 2px;border-radius:0;font-weight:500;font-size:clamp(15px,1.4vw,18px);font-family:var(--mono,monospace);letter-spacing:.02em}
.btn-out-light:hover{background:none;color:#eef3ff}

/* header */
.hd{position:fixed;inset:0 0 auto 0;z-index:60;display:flex;align-items:center;justify-content:space-between;
  gap:20px;padding:18px 32px;transition:.3s}
.hd.scrolled{background:rgba(9,19,39,.8);backdrop-filter:blur(14px);border-bottom:1px solid rgba(255,255,255,.08);padding:12px 32px}
.brand{font-size:19px;color:#fff}.brand span{color:var(--acc2)}
.hd-nav{display:flex;gap:28px;font-size:15px;color:#aeb9d6;font-weight:500}
.hd-nav a:hover{color:#fff}
.hd-right{display:flex;align-items:center;gap:18px}
.lang{display:flex;align-items:center;gap:8px;color:#7e8bab;font-size:14px}
.lang button{background:none;border:0;color:#7e8bab;cursor:pointer;font-weight:700;font-size:14px}
.lang button.active{color:#fff}
.burger{display:none;flex-direction:column;gap:5px;background:none;border:0;cursor:pointer}
.burger span{width:24px;height:2px;background:#fff;border-radius:2px}

/* ===== HERO (cinematic, pinned, Elco-style cross-fade) ===== */
.hero{position:relative}
.hero-stage{position:relative;height:100vh;width:100%;overflow:hidden;display:flex;align-items:center}
/* DIVE: stacked full-screen layers that scale/fade to feel like flying into the screen */
.dive{position:absolute;inset:0;z-index:0;overflow:hidden;background:#060d1c;perspective:1200px}
/* VIDEO dive: cinematic frame-scrub canvas behind the captions */
#diveCanvas{position:absolute;inset:0;width:100%;height:100%;z-index:0;display:none}
.dive.videomode #diveCanvas{display:block}
.dive.videomode .dlayer{background-image:none !important;z-index:1}
.dive.videomode .dlayer::after{display:none}
#divePreload{position:absolute;left:0;bottom:0;height:2px;width:100%;z-index:6;transform:scaleX(0);transform-origin:0 50%;
  background:linear-gradient(90deg,rgba(70,224,255,0),rgba(120,214,255,.9));transition:opacity .8s ease;pointer-events:none}
.dive:not(.videomode) #divePreload{display:none}
.dlayer{position:absolute;inset:0;transform-origin:50% 41%;transform:scale(1);
  background-size:cover;background-position:center;opacity:0;will-change:transform,opacity;
  display:flex;align-items:center;justify-content:center;backface-visibility:hidden}
.dlayer::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(120% 80% at 50% 45%,transparent 40%,rgba(4,9,20,.6) 100%)} /* vignette = depth */
.dlayer:first-child{opacity:1}
.dlayer:first-child::after{background:none}
/* explanatory caption — HIGH-IMPACT: each letter MATERIALISES from a burst of light, a photon
   bar IGNITES across the line, and the whole caption keeps a living cyan bloom. Replays every
   time the caption arrives while scrolling (.live toggled from renderDive). */
.dcap{position:relative;z-index:2;max-width:16ch;text-align:center;font-family:var(--sora);font-weight:800;
  font-size:clamp(34px,5.6vw,80px);line-height:1.04;padding:.44em .74em;letter-spacing:-.015em;border-radius:28px;
  color:#eef9ff;text-shadow:0 2px 5px rgba(0,0,0,.96),0 0 30px rgba(70,200,255,.35);
  animation:dcapGlow 2.8s ease-in-out infinite}
/* dark legibility plaque behind the text */
.dcap::before{content:"";position:absolute;inset:-.12em -.24em;z-index:-1;border-radius:30px;
  background:radial-gradient(120% 140% at 50% 50%,rgba(3,7,18,.92),rgba(3,7,18,.6) 62%,transparent 90%);
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
/* photon ignite bar that sweeps across once on arrival */
.dcap::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;border-radius:28px;opacity:0;
  background:linear-gradient(105deg,transparent 38%,rgba(120,224,255,.10) 47%,rgba(220,250,255,.85) 50%,
    rgba(120,224,255,.10) 53%,transparent 62%);mix-blend-mode:screen}
.dcap .word{display:inline-block;white-space:nowrap}
.dcap .ch{display:inline-block;will-change:transform,opacity,filter}
/* MODERN HORIZONTAL reveal: letters slide in sideways, left-to-right cascade, + a light sweep */
.dcap.live .ch{animation:chIn .52s cubic-bezier(.22,.68,.18,1) both;animation-delay:calc(var(--i)*.028s)}
.dcap.live::after{animation:dcapShine 1.05s cubic-bezier(.3,0,.2,1) .05s 1}
@keyframes chIn{
  0%{opacity:0;transform:translateX(.55em)}
  100%{opacity:1;transform:translateX(0)}}
@keyframes dcapShine{0%{opacity:0;transform:translateX(-60%)}22%{opacity:1}100%{opacity:0;transform:translateX(260%)}}
@keyframes dcapGlow{0%,100%{text-shadow:0 2px 5px rgba(0,0,0,.96),0 0 16px rgba(70,200,255,.3)}
  50%{text-shadow:0 2px 5px rgba(0,0,0,.96),0 0 36px rgba(110,210,255,.72)}}
@media (prefers-reduced-motion:reduce){.dcap,.dcap .ch,.dcap.live .ch,.dcap.live::after{animation:none}}
/* speed streaks while diving */
.streaks{position:absolute;inset:0;z-index:3;overflow:hidden;pointer-events:none;opacity:0}
.streak{position:absolute;left:50%;top:41%;height:2px;width:0;border-radius:2px;transform-origin:0 50%;
  background:linear-gradient(90deg,rgba(70,224,255,0),rgba(170,240,255,.95));animation:streakFly 1.1s linear infinite}
@keyframes streakFly{
  0%{width:0;opacity:0;transform:rotate(var(--a)) translateX(2vw)}
  15%{opacity:1}
  100%{width:42vw;opacity:0;transform:rotate(var(--a)) translateX(60vw)}}
.hero-scrim{position:absolute;inset:0;z-index:1;pointer-events:none;background:
  linear-gradient(90deg,rgba(6,12,26,.86) 0%,rgba(6,12,26,.62) 38%,rgba(6,12,26,.30) 64%,rgba(6,12,26,.55) 100%),
  linear-gradient(180deg,rgba(6,12,26,.45),transparent 30%,rgba(6,12,26,.55) 100%)}
.grain{position:absolute;inset:0;z-index:2;opacity:.45;pointer-events:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .04 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}

.beat{position:absolute;z-index:5;max-width:var(--maxw);left:50%;transform:translateX(-50%);width:100%;padding:0 32px}
.beat1{top:50%;transform:translate(-50%,-50%)}
.badge{display:inline-block;padding:7px 15px;border-radius:999px;background:rgba(255,255,255,.08);
  border:1px solid rgba(255,255,255,.18);color:var(--acc2);font-weight:600;font-size:13px;margin-bottom:22px;backdrop-filter:blur(6px)}
.hero-title{font-size:clamp(46px,8vw,104px);color:#fff;margin-bottom:20px;text-shadow:0 4px 40px rgba(0,0,0,.6)}
.hero-sub{font-size:clamp(17px,2vw,21px);color:#dbe4f7;max-width:500px;margin-bottom:28px;text-shadow:0 2px 16px rgba(0,0,0,.5)}
.hero-cta{display:flex;flex-wrap:wrap;gap:14px;margin-bottom:30px}
.hero-tags{display:flex;flex-wrap:wrap;gap:10px}
.hero-tags span{font-size:12.5px;color:#cdd6ea;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14);padding:7px 14px;border-radius:999px;backdrop-filter:blur(6px)}

.beat2{left:42%;top:50%;transform:translate(-50%,-50%);text-align:center;opacity:0;max-width:720px}
.beat2 .kicker{display:block;color:var(--acc2);font-size:13px;letter-spacing:.22em;margin-bottom:18px;font-family:var(--mono)}
.beat2 h2{font-size:clamp(30px,5vw,64px);color:#fff;text-shadow:0 4px 40px rgba(0,0,0,.6)}

.mascot{position:absolute;right:7%;top:50%;transform:translateY(-50%);z-index:4;width:min(420px,40vw);height:min(460px,52vw)}
.m-glow{position:absolute;inset:6% 6% 6% 6%;border-radius:50%;background:radial-gradient(circle,rgba(47,107,255,.55),transparent 65%);filter:blur(12px)}
.fox{position:absolute;left:50%;bottom:0;transform:translateX(-50%);width:96%;height:98%;z-index:3}
.pose{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;object-position:bottom center;
  opacity:0;transform-origin:50% 92%;filter:drop-shadow(0 34px 56px rgba(0,0,0,.7));will-change:opacity,transform}
.pose[data-pose="wave"]{opacity:1}
/* bubble sits ABOVE the mascot's head (its own right-side band) so it never covers the claim */
.bubble{position:absolute;left:auto;right:0;top:-4%;z-index:6;max-width:220px;text-align:center;
  background:linear-gradient(180deg,rgba(255,255,255,.97),rgba(226,238,255,.97));color:#0c1b38;
  font-family:var(--sora);font-weight:700;font-size:15px;line-height:1.3;padding:12px 16px;border-radius:16px;
  box-shadow:0 18px 40px rgba(0,0,0,.4);border:1px solid rgba(255,255,255,.6)}
.bubble::after{content:"";position:absolute;left:40px;bottom:-12px;width:0;height:0;
  border:13px solid transparent;border-top-color:rgba(226,238,255,.97);border-bottom:0;filter:drop-shadow(0 6px 4px rgba(0,0,0,.12))}

.scrollhint{position:absolute;bottom:30px;left:50%;transform:translateX(-50%);z-index:6;display:flex;
  flex-direction:column;align-items:center;gap:8px;color:#8a97b8;font-size:12px;letter-spacing:.15em;text-transform:uppercase}
.sh-line{width:2px;height:34px;background:linear-gradient(var(--acc2),transparent);border-radius:2px;
  animation:shp 1.8s ease-in-out infinite;transform-origin:top}
@keyframes shp{0%,100%{transform:scaleY(.4);opacity:.4}50%{transform:scaleY(1);opacity:1}}

/* ===================== HERO v2 — light premium: render 3D + glass + aurora ===================== */
.hero2{position:relative;min-height:100vh;display:flex;align-items:center;overflow:hidden;padding:124px 0 72px;
  background:radial-gradient(120% 95% at 72% 2%,#11265b 0%,#0a1631 52%,#070f20 100%)}
.aurora{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden;opacity:.75}
.aurora span{position:absolute;border-radius:50%;filter:blur(64px);mix-blend-mode:screen;animation:auroraFloat 22s ease-in-out infinite}
.aurora span:nth-child(1){width:52vw;height:52vw;left:-12vw;top:-15vw;background:radial-gradient(circle,rgba(59,107,255,.55),transparent 62%)}
.aurora span:nth-child(2){width:46vw;height:46vw;right:-10vw;top:1vw;background:radial-gradient(circle,rgba(43,212,255,.42),transparent 62%);animation-delay:-7s}
.aurora span:nth-child(3){width:42vw;height:42vw;left:24vw;bottom:-20vw;background:radial-gradient(circle,rgba(126,86,255,.4),transparent 62%);animation-delay:-14s}
@keyframes auroraFloat{0%,100%{transform:translate(0,0) scale(1)}33%{transform:translate(4vw,3vw) scale(1.1)}66%{transform:translate(-3vw,-2vw) scale(.94)}}
.hero2-grid{position:relative;z-index:2;display:grid;grid-template-columns:1.04fr .96fr;gap:40px;align-items:center;width:100%}
.hero2-copy{max-width:640px}
.pill{display:inline-flex;align-items:center;gap:9px;padding:8px 16px;border-radius:999px;font-size:13.5px;font-weight:600;
  color:#cfe0ff;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);backdrop-filter:blur(8px);margin-bottom:26px}
.pill .dot{width:8px;height:8px;border-radius:50%;background:var(--acc2);box-shadow:0 0 12px var(--acc2);animation:bpulse 2s ease-in-out infinite}
@keyframes bpulse{0%,100%{opacity:1}50%{opacity:.35}}
.hero2-title{font-size:clamp(38px,5vw,66px);line-height:1.06;letter-spacing:-.025em;color:#fff}
.hero2-title .wi{background:linear-gradient(180deg,#ffffff 28%,#bcd0ff);-webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:transparent}
.hero2-lead{margin:22px 0 30px;font-size:clamp(16px,1.45vw,19px);color:#aebbd8;max-width:30em;line-height:1.62}
.hero2-cta{display:flex;gap:14px;flex-wrap:wrap}
.hero2-meta{display:flex;align-items:center;gap:13px;margin-top:28px;color:#7f8db0;font-size:14px;flex-wrap:wrap}
.hero2-meta .sep{width:4px;height:4px;border-radius:50%;background:#46527a;display:inline-block}
.hero2-visual{position:relative;display:flex;align-items:center;justify-content:center;min-height:540px}
.orb-stage{position:relative;width:min(540px,44vw);aspect-ratio:1}
#heroGL{position:absolute;inset:-16%;width:132%;height:132%;z-index:1;display:none}
.orb-stage.gl-on #heroGL{display:block}
.orb-stage.gl-on .orb{display:none}
.orb-glow{position:absolute;inset:-6%;z-index:0;border-radius:50%;
  background:radial-gradient(circle,rgba(64,150,255,.5),transparent 60%);filter:blur(36px);animation:breathe 6s ease-in-out infinite}
@keyframes breathe{0%,100%{transform:scale(1);opacity:.8}50%{transform:scale(1.1);opacity:1}}
.orb{position:relative;z-index:1;width:100%;height:auto;
  filter:drop-shadow(0 30px 60px rgba(0,0,0,.55));
  -webkit-mask-image:radial-gradient(circle at 50% 50%,#000 60%,transparent 80%);
  mask-image:radial-gradient(circle at 50% 50%,#000 60%,transparent 80%)}
.gcard{position:absolute;z-index:3;display:flex;flex-direction:column;gap:1px;padding:12px 16px;border-radius:15px;
  background:rgba(11,22,46,.55);border:1px solid rgba(255,255,255,.16);backdrop-filter:blur(14px);
  box-shadow:0 18px 44px rgba(0,0,0,.42)}
.gcard b{font-family:var(--sora);font-weight:700;font-size:15px;color:#fff}
.gcard span{font-size:12.5px;color:#9fb0d4}
.gcard.gc1{left:-9%;top:13%;animation-delay:-1.5s}
.gcard.gc2{right:-11%;bottom:19%;animation-delay:-4.5s}
@keyframes cardFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-13px)}}
/* small mascot greeter (user's asset) */
.mascot2{position:absolute;right:1%;bottom:-4%;z-index:4;width:158px;height:188px}
.mascot2 .fox{position:absolute;left:50%;bottom:0;transform:translateX(-50%);width:100%;height:100%}
.mascot2 .bubble{left:auto;right:62%;top:6%;max-width:148px;font-size:13px;padding:9px 12px}
.mascot2 .bubble::after{left:auto;right:16px;bottom:-11px}
@media (max-width:980px){
  .hero2{padding:100px 0 52px;min-height:auto}
  .hero2-grid{grid-template-columns:1fr;gap:14px;text-align:center}
  .hero2-copy{max-width:none;margin:0 auto}
  .hero2-cta,.hero2-meta{justify-content:center}
  .hero2-visual{min-height:auto;order:-1;margin-bottom:8px}
  .orb-stage{width:min(330px,68vw)}
  .gcard{display:none}
  .mascot2{right:4%;bottom:0;width:104px;height:124px}
  .mascot2 .bubble{display:none}
}
@media (prefers-reduced-motion:reduce){.aurora span,.orb,.orb-glow,.gcard{animation:none}}

/* ===================== SHOWCASE DECK — full-screen cinematic scenes ===================== */
.deck{position:relative}
.deck-pin{position:relative;background:#070f20}
.deck-eyebrow{position:absolute;top:26px;left:0;right:0;text-align:center;z-index:20;
  font-size:12px;letter-spacing:.34em;text-transform:uppercase;color:#8aa0cf;font-weight:600}
.deck-dots{position:absolute;right:30px;top:50%;transform:translateY(-50%);z-index:20;display:none;flex-direction:column;gap:12px}
.deck-dots span{width:8px;height:8px;border-radius:50%;background:rgba(255,255,255,.2);transition:.45s}
.deck-dots span.active{background:var(--acc2);box-shadow:0 0 14px var(--acc2);transform:scale(1.35)}
.scene{position:relative;display:flex;align-items:center;min-height:90vh;padding:60px 0}
.scene-bg{position:absolute;inset:0;z-index:0}
.s-flow .scene-bg{background:radial-gradient(85% 80% at 24% 32%,#15376a,#0a1834 58%,#070f20)}
.s-api  .scene-bg{background:radial-gradient(85% 80% at 76% 30%,#122657,#0b1838 58%,#070f20)}
.s-data .scene-bg{background:radial-gradient(90% 85% at 50% 72%,#154463,#0a1a36 58%,#070f20)}
.scene-inner{position:relative;z-index:2;display:grid;grid-template-columns:1fr 1fr;gap:50px;align-items:center;width:100%}
.scene-copy{max-width:540px}
.scene-num{display:inline-block;font-family:var(--mono);font-size:13px;color:var(--acc2);letter-spacing:.18em;margin-bottom:20px;
  padding:5px 13px;border:1px solid rgba(70,224,255,.32);border-radius:999px}
.scene-title{font-size:clamp(42px,6.2vw,86px);line-height:1.01;letter-spacing:-.03em;color:#fff;margin-bottom:22px}
.scene-lead{font-size:clamp(16px,1.55vw,21px);color:#b3c0dd;max-width:25em;line-height:1.6}
.scene-visual{position:relative;display:flex;align-items:center;justify-content:center}
.sv-glow{position:absolute;inset:4%;border-radius:30px;background:radial-gradient(circle,rgba(64,150,255,.5),transparent 64%);filter:blur(46px);z-index:0}
.scene-img{position:relative;z-index:1;width:100%;max-width:640px;border-radius:18px;
  box-shadow:0 40px 90px rgba(0,0,0,.55),0 0 0 1px rgba(255,255,255,.08);will-change:transform}
/* word reveal (titles) */
.w{display:inline-block;overflow:hidden;vertical-align:top;line-height:1.01}
.wi{display:inline-block;will-change:transform}
/* parola-accento ciano nei titoli di sezione (stessa "firma" della hero) */
.sec h2 .w.acc .wi,.cta h2 .w.acc .wi,.hero2-title .w.acc .wi{color:var(--acc2);-webkit-text-fill-color:var(--acc2)}
/* underline che si disegna sotto la parola-accento dei Contatti (scroll-driven) */
.cta h2 .w.acc{position:relative}
.cta h2 .w.acc::after{content:"";position:absolute;left:2%;right:2%;bottom:.04em;height:2px;background:var(--acc2);
  transform:scaleX(0);transform-origin:left;transition:transform .7s cubic-bezier(.625,.05,0,1)}
.cta h2.acc-drawn .w.acc::after{transform:scaleX(1)}
@media(prefers-reduced-motion:reduce){.cta h2 .w.acc::after{transform:scaleX(1)}}
/* PINNED desktop deck: scenes stack & cross-fade (added by JS only when active) */
.deck.js .deck-pin{height:100vh;overflow:hidden}
.deck.js .deck-dots{display:flex}
.deck.js .scene{position:absolute;inset:0;min-height:0;padding:0;opacity:0}
@media (max-width:980px){
  .scene{min-height:auto;padding:64px 0}
  .scene-inner{grid-template-columns:1fr;gap:22px;text-align:center}
  .scene-copy{max-width:none;margin:0 auto}.scene-lead{margin:0 auto}
  .scene-visual{order:-1}
}

/* ===== sections ===== */
.sec{padding:clamp(72px,10vw,120px) 0;position:relative}
.sec.light{background:var(--paper);color:var(--ink)}
.sec.dark{background:linear-gradient(180deg,var(--navy2),var(--navy));color:var(--white)}
.eyebrow{display:inline-block;color:var(--acc);font-weight:700;font-size:12.5px;letter-spacing:.2em;text-transform:uppercase;margin-bottom:18px}
.sec.dark .eyebrow{color:var(--acc2)}
.sec h2{font-size:clamp(28px,4vw,48px);max-width:820px;margin-bottom:18px}
.sec.light h2{color:var(--ink)} .sec.dark h2{color:#fff}
.lead{font-size:clamp(16px,1.6vw,19px);max-width:680px}
.sec.light .lead{color:var(--slate)} .sec.dark .lead{color:#b9c4de}

.pos-grid{display:grid;grid-template-columns:1.2fr .9fr;gap:40px;align-items:end}
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:24px;margin-top:54px;
  border-top:1px solid var(--line);padding-top:40px}
.stat dt{font-family:var(--sora);font-weight:800;font-size:clamp(26px,3vw,38px);color:var(--acc)}
.stat dd{color:var(--slate);font-size:14px;margin-top:6px}

.steps{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin-top:38px}
.step{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.09);border-radius:18px;padding:26px 22px;transition:.3s}
.step:hover{transform:translateY(-4px);border-color:rgba(70,224,255,.4)}
.step .num{font-family:var(--mono);color:var(--acc2);font-size:15px;letter-spacing:.05em}
.step h3{font-size:18px;color:#fff;margin:14px 0 8px}
.step p{font-size:14.5px;color:#aab5d2}

.cards-2{display:grid;grid-template-columns:1fr 1fr;gap:22px;margin-top:32px}
.card{background:#fff;border:1px solid var(--line);border-radius:22px;padding:34px;transition:.3s}
.card:hover{transform:translateY(-4px);border-color:rgba(47,107,255,.4);box-shadow:0 20px 50px rgba(20,40,90,.10)}
.card .bar{width:42px;height:5px;border-radius:5px;background:linear-gradient(90deg,var(--acc),var(--acc2));margin-bottom:18px;transition:.3s}
.card:hover .bar{width:72px}
.card-img{border-radius:14px;overflow:hidden;margin-bottom:20px;line-height:0;aspect-ratio:16/10;background:#0b1226}
.card-img img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .4s}
.card:hover .card-img img{transform:scale(1.04)}
.card h3{font-size:22px;color:var(--ink);margin-bottom:10px}
.card p{color:var(--slate)}

.checklist{list-style:none;display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:34px}
.checklist li{position:relative;padding:20px 20px 20px 54px;background:rgba(255,255,255,.04);
  border:1px solid rgba(255,255,255,.09);border-radius:14px;color:#c2cce0;font-size:15px}
.checklist li::before{content:"!";position:absolute;left:18px;top:18px;width:24px;height:24px;border-radius:50%;
  display:grid;place-items:center;background:rgba(47,107,255,.18);color:var(--acc2);font-weight:800;font-size:13px}

.timeline{display:flex;flex-direction:column;gap:16px;margin-top:38px;position:relative}
.tprog{position:absolute;left:-2px;top:0;width:3px;height:100%;border-radius:3px;
  background:linear-gradient(180deg,var(--acc),var(--acc2));transform:scaleY(0);transform-origin:top;z-index:1}
.job{background:rgba(18,26,44,.5);border:1px solid rgba(150,190,240,.14);border-radius:18px;padding:28px 30px;border-left:3px solid var(--acc2);transition:.35s cubic-bezier(.16,1,.3,1);backdrop-filter:blur(10px)}
.job:hover{transform:translateX(4px);border-color:rgba(70,224,255,.4);box-shadow:0 16px 50px rgba(0,0,0,.35)}
.job-head{display:flex;justify-content:space-between;align-items:baseline;gap:16px;flex-wrap:wrap;margin-bottom:8px}
.job h3{font-size:20px;color:#eef3ff}
.job .when{color:var(--acc2);opacity:.85}
.when{color:var(--muted);font-size:14px;font-family:var(--mono)}
.job p{color:#aeb9d6;font-size:15px;margin-bottom:14px}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chips span{font-size:12px;color:#cdd6ea;background:rgba(255,255,255,.05);border:1px solid rgba(150,190,240,.18);padding:5px 12px;border-radius:999px;font-family:var(--mono,monospace)}
.link-more{display:inline-block;margin-top:26px;color:var(--acc);font-weight:600}

.faq{display:flex;flex-direction:column;gap:12px;margin-top:32px}
.faq details{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.09);border-radius:14px;padding:2px 24px}
.faq summary{cursor:pointer;list-style:none;padding:20px 0;font-weight:600;color:#fff;font-size:17px;display:flex;justify-content:space-between;align-items:center;gap:16px}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";color:var(--acc2);font-size:26px;font-weight:300;transition:.3s}
.faq details[open] summary::after{transform:rotate(45deg)}
.faq details p{color:#aab5d2;padding:0 0 22px;font-size:15px}

/* Contatti = sezione PINNATA: si blocca e lo zoom si completa scrollando */
.cta{height:230vh;text-align:center;background:transparent;color:#fff;position:relative}
.cta-pin{position:sticky;top:0;height:100vh;height:100dvh;display:flex;align-items:center;justify-content:center;overflow:hidden}
.cta-pin::before{content:"";position:absolute;left:50%;top:50%;width:80vw;height:80vw;max-width:920px;max-height:920px;transform:translate(-50%,-50%);background:radial-gradient(circle,rgba(70,224,255,.16),rgba(70,224,255,0) 62%);pointer-events:none}
.cta .wrap{position:relative;z-index:1;transform-origin:center center;will-change:transform,opacity}
@media(prefers-reduced-motion:reduce){.cta{height:auto} .cta-pin{position:relative;min-height:80vh} .cta .wrap{transform:none !important;opacity:1 !important}}
.cta h2{font-size:clamp(30px,5vw,62px);max-width:900px;margin:0 auto 18px;color:#eef3ff}
.cta h2 .acc{color:var(--acc2)}
.cta p{color:#9fb0d0;max-width:620px;margin:0 auto 30px}
/* firma di chiusura (chiasmo) — riga memorabile con filetto sopra */
.cta-sign{max-width:600px;margin:0 auto 34px !important;color:#cdd8ee;font-family:var(--sora,sans-serif);
  font-size:clamp(16px,1.5vw,21px);line-height:1.5;letter-spacing:-.01em;
  padding-top:22px;border-top:1px solid rgba(150,190,240,.18)}
.cta-actions{display:flex;gap:clamp(24px,5vw,64px);justify-content:center;align-items:baseline;flex-wrap:wrap}

.footer{background:#060d1c;border-top:1px solid rgba(255,255,255,.08);padding:64px 0 30px}
.foot-grid{display:grid;grid-template-columns:1.5fr 1fr 1fr;gap:40px}
.foot-brand{font-size:20px;color:#fff;margin-bottom:10px}
.footer h4{color:#fff;font-size:15px;margin-bottom:12px}
.footer p{color:#9aa6c2;font-size:14px;margin-bottom:6px}
.footer a:hover{color:#fff}
.muted{color:#67738f !important;margin-top:8px}
.copy{margin-top:44px;padding-top:22px;border-top:1px solid rgba(255,255,255,.08);color:#5a667f;font-size:13px}

/* ===== Cosa ottieni (3 card su dark) ===== */
.cards-3{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin-top:38px}
.card-d{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.10);border-radius:22px;
  padding:0 0 28px;overflow:hidden;transition:.3s}
.card-d:hover{transform:translateY(-5px);border-color:rgba(70,224,255,.4);box-shadow:0 24px 60px rgba(0,0,0,.4)}
.card-d .card-img{border-radius:0;margin-bottom:22px;aspect-ratio:16/11;background:#0b1226}
.card-d h3{font-size:21px;color:#fff;margin:0 26px 10px}
.card-d p{color:#aab5d2;font-size:15px;margin:0 26px}

#scrollbar{position:fixed;top:0;left:0;height:3px;width:100%;z-index:200;transform:scaleX(0);transform-origin:0 50%;
  background:linear-gradient(90deg,var(--acc),var(--acc2));box-shadow:0 0 12px rgba(70,224,255,.6)}

.reveal{opacity:0;transform:translateY(30px)}
.reveal.in{opacity:1;transform:none;transition:opacity .8s ease,transform .8s cubic-bezier(.2,.7,.2,1)}

@media (max-width:980px){
  .hd-nav,.hd-right .btn{display:none}
  .burger{display:flex}
  .hd.open .hd-nav{display:flex;position:absolute;top:100%;left:0;right:0;flex-direction:column;background:rgba(9,19,39,.97);padding:20px 32px;gap:16px;border-bottom:1px solid rgba(255,255,255,.08)}
  .pos-grid{grid-template-columns:1fr;gap:18px}
  .stats{grid-template-columns:1fr 1fr;gap:20px}
  .steps{grid-template-columns:1fr 1fr}
  .cards-2,.cards-3,.checklist,.foot-grid{grid-template-columns:1fr}
  /* hero: static scene (photo bg + mascot above text), no pin on mobile */
  .hero-stage{height:auto;min-height:100vh;flex-direction:column;justify-content:center;align-items:stretch;padding:108px 0 56px}
  .hphoto{position:absolute}
  .hero-scrim{background:linear-gradient(180deg,rgba(6,12,26,.55),rgba(6,12,26,.78))}
  .beat{position:relative !important;left:auto !important;top:auto !important;transform:none !important;width:100%;text-align:center}
  .beat1{order:2}
  .beat2{display:none}
  .hero-cta{justify-content:center}
  .hero-tags{justify-content:center}
  .hero-sub{margin-left:auto;margin-right:auto}
  .mascot{position:relative;order:1;top:auto;right:auto;transform:none;width:min(280px,64vw);height:290px;margin:0 auto 4px}
  .fox{width:86%}
  .cloudie{right:0;top:0}
  .scrollhint{display:none}
  .hero-title{font-size:clamp(44px,13vw,72px)}
  .card-d .card-img{aspect-ratio:16/9}
}
@media (max-width:560px){ .steps{grid-template-columns:1fr} .stats{grid-template-columns:1fr 1fr} }
@media (prefers-reduced-motion:reduce){ .reveal{opacity:1;transform:none} .sh-line{animation:none} }

/* ===================== CONTINUITÀ: una sola tela scura continua (no stacchi dark/light) ============ */
body{background:#070f20}
#bgfx{position:fixed;inset:0;z-index:-1;pointer-events:none;overflow:hidden;
  background:radial-gradient(120% 75% at 50% -8%,#0e2150 0%,#0a1631 46%,#070f20 100%)}
#bgfx span{position:absolute;border-radius:50%;filter:blur(90px);opacity:.5;mix-blend-mode:screen;will-change:transform}
#bgfx .b1{width:52vw;height:52vw;left:-12vw;top:2vh;background:radial-gradient(circle,rgba(59,107,255,.5),transparent 60%)}
#bgfx .b2{width:46vw;height:46vw;right:-10vw;top:42vh;background:radial-gradient(circle,rgba(43,212,255,.42),transparent 60%)}
#bgfx .b3{width:44vw;height:44vw;left:28vw;top:78vh;background:radial-gradient(circle,rgba(126,86,255,.4),transparent 60%)}
/* every section transparent → the continuous atmosphere shows through (no abrupt section bg) */
.sec{background:transparent !important}
.hero2{background:transparent}
.sec.light,.sec.dark{color:var(--white)}
.sec.light h2,.sec.dark h2,.pos-grid h2{color:#fff}
.sec .eyebrow{color:var(--acc2)}
.sec.light .lead,.sec.dark .lead,.pos-grid p{color:#b9c4de}
.stat dt{color:var(--acc2)} .stat dd{color:#9fb0d4}
/* former white cards → dark glass (so they fit the continuous dark) */
.card{background:rgba(255,255,255,.045);border:1px solid rgba(255,255,255,.10)}
.card h3{color:#fff} .card p{color:#aab5d2}
.card:hover{border-color:rgba(70,224,255,.4);box-shadow:0 24px 60px rgba(0,0,0,.4)}
.card-img,.card-d .card-img{background:#0b1226}

/* (rimosse le animazioni idle "respiro" titleBreath/numBreath/ebBreath — nessun effetto perpetuo) */
.eyebrow{display:inline-block}

/* ===================== HERO CINEMATOGRAFICA (morph di STATI allo scroll, Smart-Animate-in-codice) ===== */
.cine{position:relative}
.cine-stage{position:relative;height:100vh;width:100%;overflow:hidden;background:#04070f}
.cine-bg{position:absolute;inset:-6% -4%;z-index:0;will-change:transform}
.cine-bg img,.cine-bg video{width:100%;height:100%;object-fit:cover;object-position:50% 38%;display:block}
.cine-scrim{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:radial-gradient(120% 92% at 50% 42%,transparent 28%,rgba(4,8,18,.5) 100%),
    linear-gradient(180deg,rgba(4,8,18,.55) 0%,transparent 26%,transparent 58%,rgba(4,8,18,.78) 100%)}
/* ---- VISUAL competenze: mini-scene schematiche che si compongono sullo scroll ---- */
.cine-viz{position:absolute;inset:0;z-index:2;pointer-events:none}
.viz{position:absolute;top:50%;transform:translateY(-50%);width:min(40vw,440px);height:min(40vw,440px);opacity:0}
.viz.right{right:max(40px,8vw)} .viz.left{left:max(40px,8vw)}
.vsvg{width:100%;height:100%;overflow:visible;filter:drop-shadow(0 10px 28px rgba(0,0,0,.45))}
.vsvg text{font-family:var(--sora);fill:#e4eeff;font-weight:600}
.vsvg .panel{fill:rgba(9,20,42,.55);stroke:url(#vg);stroke-width:2}
.vsvg .dot{fill:#5ee7ff}
/* wires: energia che scorre di continuo */
.vsvg .fl{fill:none;stroke:#5ee7ff;stroke-width:2.5;stroke-linecap:round;stroke-dasharray:5 9;
  filter:drop-shadow(0 0 4px rgba(94,231,255,.7));animation:dashflow .9s linear infinite}
@keyframes dashflow{to{stroke-dashoffset:-14}}
/* C · board */
#vizC .rrow{fill:rgba(70,224,255,.06);stroke:rgba(94,231,255,.28);stroke-width:1.2}
#vizC .ric{fill:url(#vg)} #vizC .rtx{font-size:13px}
#vizC .tg{fill:#2f6bff} #vizC .tgk{fill:#fff}
/* D · flow */
#vizD .node,#vizD .diam{fill:rgba(9,20,42,.72);stroke:url(#vg);stroke-width:2}
#vizD .ntx{text-anchor:middle;font-size:13px}
/* E · LWC editor */
#vizE .blk{fill:url(#vg);opacity:.92} #vizE .ln{fill:rgba(214,228,255,.42)}
#vizE .tile{fill:rgba(70,224,255,.14);stroke:rgba(94,231,255,.4);stroke-width:1}
#vizE .btn{fill:url(#vg)}
#vizE .code{fill:#5ee7ff;font-family:var(--mono);font-weight:700;font-size:18px;text-anchor:middle}
/* F · integrations */
#vizF .node{fill:rgba(9,20,42,.72);stroke:url(#vg);stroke-width:2}
#vizF .hub{fill:rgba(70,224,255,.16);stroke:#5ee7ff;stroke-width:2}
#vizF .ntx{text-anchor:middle} #vizF .ntx.sm{font-size:12px;font-weight:700;fill:#eaf3ff}
.cine-A,.cine-panel{position:absolute;z-index:3;will-change:transform,opacity}
.cine-A{left:50%;top:50%;transform:translate(-50%,-50%);width:min(900px,90vw);text-align:center;padding:0 24px}
.cine-A .pill{margin-bottom:22px}
.cine-A h1{font-family:var(--sora);font-weight:800;font-size:clamp(40px,6vw,78px);line-height:1.03;letter-spacing:-.025em;
  color:#fff;text-shadow:0 6px 50px rgba(0,0,0,.65);margin-bottom:20px}
.cine-A p{color:#d2ddf2;font-size:clamp(16px,1.6vw,20px);max-width:30em;margin:0 auto 26px;text-shadow:0 2px 20px rgba(0,0,0,.6)}
/* competency panels — alternate left/right, the camera/mascot keep moving between them */
.cine-panel{top:50%;transform:translateY(-50%);width:min(460px,42vw);opacity:0}
.cine-panel.left{left:max(32px,7vw)}
.cine-panel.right{right:max(32px,7vw);text-align:right}
.cine-kicker{display:inline-block;font-family:var(--mono);font-size:12px;letter-spacing:.32em;text-transform:uppercase;
  color:var(--acc2);margin-bottom:14px;text-shadow:0 2px 12px rgba(0,0,0,.7)}
.cine-panel h2{font-family:var(--sora);font-weight:800;font-size:clamp(32px,4.4vw,58px);line-height:1.05;letter-spacing:-.025em;
  color:#fff;white-space:pre-line;text-shadow:0 6px 44px rgba(0,0,0,.65);margin-bottom:16px}
.cine-panel p{color:#d6e0f4;font-size:clamp(15px,1.4vw,18px);line-height:1.6;margin-bottom:24px;text-shadow:0 2px 18px rgba(0,0,0,.65)}
.cine .scrollhint{z-index:4}
/* MOBILE: la scena e il testo si IMPILANO (scena in alto al centro, testo sotto al centro) e
   l'animazione allo scroll resta identica. */
@media (max-width:980px){
  .cine-A{width:92vw}
  .cine-A h1{font-size:clamp(32px,8vw,52px)}
  .viz{top:30%;width:66vw;height:66vw}
  .viz.left,.viz.right{left:50%;right:auto;margin-left:-33vw}
  .cine-panel{top:68%;left:6vw;width:88vw;text-align:center}
  .cine-panel.left,.cine-panel.right{left:6vw;right:auto;text-align:center}
  .cine-panel h2{font-size:clamp(26px,7vw,40px)}
  .cine-panel p{max-width:32em;margin-left:auto;margin-right:auto}
}

/* ===================== CAROSELLO SERVIZI (item che ruotano, tema-colore, SVG vettoriali) ===== */
.svc-head{text-align:center;margin-bottom:14px}
.svc-head h2{margin-inline:auto}
.svc{position:relative;max-width:1100px;margin:0 auto;padding:16px 0 4px;display:flex;flex-direction:column;align-items:center}
.svc-glow{position:absolute;top:96px;left:50%;width:560px;height:340px;transform:translateX(-50%);pointer-events:none;filter:blur(14px)}
.svc-glow span{position:absolute;inset:0;border-radius:50%;opacity:0}
.svc-glow .g0{background:radial-gradient(circle,rgba(47,107,255,.5),transparent 62%)}
.svc-glow .g1{background:radial-gradient(circle,rgba(22,200,184,.5),transparent 62%)}
.svc-glow .g2{background:radial-gradient(circle,rgba(138,107,255,.5),transparent 62%)}
.svc-stage{position:relative;width:100%;height:300px}
.svc-item{position:absolute;left:50%;top:50%;width:300px;height:256px;display:flex;align-items:center;justify-content:center;
  will-change:transform,opacity}
/* OGGETTI 3D VERI fatti di blocchi (CSS 3D) che si RICOMPONGONO; tema = currentColor dell'item */
.obj-wrap{width:240px;height:240px;perspective:900px;display:grid;place-items:center}
.obj3d{position:relative;width:0;height:0;transform-style:preserve-3d;will-change:transform}
.blk{position:absolute;left:0;top:0;width:30px;height:30px;margin:-15px 0 0 -15px;transform-style:preserve-3d;will-change:transform,opacity}
.bf{position:absolute;width:30px;height:30px;border:1px solid color-mix(in srgb,currentColor 72%,transparent);
  background:color-mix(in srgb,currentColor 18%,rgba(6,12,28,.5));
  box-shadow:0 0 8px color-mix(in srgb,currentColor 45%,transparent) inset}
.bf.f0{transform:translateZ(15px)} .bf.f1{transform:rotateY(180deg) translateZ(15px)}
.bf.f2{transform:rotateY(90deg) translateZ(15px)} .bf.f3{transform:rotateY(-90deg) translateZ(15px)}
.bf.tp{transform:rotateX(90deg) translateZ(15px);background:color-mix(in srgb,currentColor 34%,rgba(6,12,28,.35))}
.bf.bo{transform:rotateX(-90deg) translateZ(15px);background:color-mix(in srgb,currentColor 7%,rgba(6,12,28,.72))}
/* cubo WebGL (Governance) come la foto: pannello scuro con bagliore blu + cubo che si ricompone */
.cube-stage{position:relative;width:112%;height:118%;margin:-9% 0 0 -6%;border-radius:22px;overflow:hidden;
  background:radial-gradient(circle at 50% 44%, #163a72 0%, #0a1c3e 44%, #03070f 100%);
  box-shadow:0 26px 64px rgba(0,0,0,.5),0 0 0 1px rgba(94,180,255,.12) inset}
.cubegl{width:100%;height:100%;display:block;mix-blend-mode:screen}
.svc-arrow{position:absolute;top:150px;z-index:6;width:52px;height:52px;border-radius:50%;cursor:pointer;
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.22);color:#fff;display:grid;place-items:center;transition:.2s}
.svc-arrow:hover{background:rgba(70,224,255,.18);border-color:var(--acc2);transform:scale(1.08)}
.svc-arrow svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.svc-arrow.prev{left:1%} .svc-arrow.next{right:1%}
.svc-info{position:relative;z-index:5;text-align:center;max-width:560px;margin-top:14px;will-change:transform,opacity}
.svc-kick{display:inline-block;font-family:var(--mono);font-size:12px;letter-spacing:.3em;text-transform:uppercase;color:var(--acc2);margin-bottom:12px}
.svc-info h3{font-family:var(--sora);font-weight:800;font-size:clamp(26px,3.4vw,40px);color:#fff;margin-bottom:12px}
.svc-info p{color:#c4d2ec;font-size:16px;line-height:1.6;margin-bottom:18px}
.svc-feats{list-style:none;display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin-bottom:22px;padding:0}
.svc-feats li{font-size:13px;color:#dbe6ff;background:rgba(70,224,255,.08);border:1px solid rgba(70,224,255,.25);border-radius:999px;padding:8px 16px}
.svc-dots{display:flex;gap:10px;justify-content:center;margin-top:6px}
.svc-dots i{width:8px;height:8px;border-radius:50%;background:rgba(255,255,255,.25);cursor:pointer;transition:.3s}
.svc-dots i.on{background:var(--acc2);width:24px;border-radius:4px}
@media (max-width:720px){
  .svc-item{width:76vw;height:200px} .svc-arrow{top:118px} .svc-stage{height:260px}
  .svc-glow{width:92vw;top:78px}
}

/* ===== VIDEO HERO scrollytelling (Excel destroyed → cloud → system) ===== */
.vhero{position:relative;height:600vh}
.vhero-pin{position:sticky;top:0;height:100vh;height:100dvh;overflow:hidden;background:#05070d}
.vhero-vid{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 45%}
.vhero-scrim{position:absolute;inset:0;z-index:1;background:radial-gradient(130% 100% at 50% 38%,rgba(5,8,16,.18),rgba(5,8,16,.74))}
.vhero-flash{position:absolute;inset:0;z-index:2;pointer-events:none;opacity:0;mix-blend-mode:screen;
  background:radial-gradient(circle at 50% 50%,#f2fdff,#7fe9ff 24%,rgba(70,224,255,0) 66%)}
.vhero-stage{position:absolute;inset:0;z-index:3;text-align:center}
.vbeat{position:absolute;left:50%;top:39%;width:min(1160px,92vw);padding:0 4vw;
  opacity:0;transform:translate(-50%,-50%);pointer-events:none;
  transition:opacity .45s ease;will-change:opacity}
.vbeat.on{opacity:1;pointer-events:auto}
/* reveal a MASCHERA per riga/parola (easing-firma) */
.vbeat h2 .ln{display:block;overflow:hidden;padding-bottom:.06em}
.vbeat .w{display:inline-block;position:relative;transform:translateY(118%);
  transition:transform .8s cubic-bezier(.625,.05,0,1);transition-delay:calc(var(--i,0)*.06s);will-change:transform}
.vbeat.on .w{transform:translateY(0)}
.vbeat:not(.on) .w{transition-delay:0s}
/* parola-accento: ciano + underline che si disegna, leggermente in ritardo */
.vbeat .w.acc{color:var(--acc2)}
.vbeat .w.acc::after{content:"";position:absolute;left:0;right:0;bottom:.02em;height:.05em;background:currentColor;
  transform:scaleX(0);transform-origin:left;transition:transform .6s cubic-bezier(.625,.05,0,1);
  transition-delay:calc(var(--i,0)*.06s + .42s)}
.vbeat.on .w.acc::after{transform:scaleX(1)}
/* kicker: tracking-in */
.vbeat .vk{opacity:0;letter-spacing:.62em;transition:opacity .6s ease,letter-spacing .9s cubic-bezier(.625,.05,0,1)}
.vbeat.on .vk{opacity:1;letter-spacing:.3em}
/* CTA finale: entra dopo il titolo */
.vbeat.end .btn-lg{opacity:0;transform:translateY(14px);transition:opacity .6s ease .55s,transform .6s cubic-bezier(.625,.05,0,1) .55s}
.vbeat.end.on .btn-lg{opacity:1;transform:none}
/* "Basta." — shockwave ring all'impatto */
.shockwave{position:absolute;left:50%;top:50%;width:46px;height:46px;margin:-23px 0 0 -23px;border:2px solid var(--acc2);border-radius:50%;
  transform:scale(0);opacity:0;pointer-events:none}
.vbeat.bang.on .shockwave{animation:shock 1.1s cubic-bezier(.19,1,.22,1) .05s forwards}
@keyframes shock{0%{transform:scale(0);opacity:.85}70%{opacity:.25}100%{transform:scale(30);opacity:0}}
/* glitch chromatico su "Excel" quando JS aggiunge .kick (sincronizzato al beam) */
.glitch::before,.glitch::after{content:attr(data-text);position:absolute;left:0;top:0;width:100%;opacity:0;pointer-events:none}
.glitch.kick::before{color:#46e0ff;animation:glx .42s steps(2,end) 2}
.glitch.kick::after{color:#ff2f8e;animation:glx2 .42s steps(2,end) 2}
@keyframes glx{0%,100%{opacity:0;transform:translate(0,0)}20%{opacity:.9;transform:translate(-3px,-2px)}60%{opacity:.7;transform:translate(2px,1px)}}
@keyframes glx2{0%,100%{opacity:0;transform:translate(0,0)}25%{opacity:.85;transform:translate(3px,2px)}55%{opacity:.6;transform:translate(-2px,-1px)}}
/* impatto cromatico su tutta la hero */
.vhero-pin.kick{animation:heroKick .45s ease}
@keyframes heroKick{0%{filter:none}18%{filter:saturate(1.7) brightness(1.22) contrast(1.1)}100%{filter:none}}
/* micro-shake all'impatto di "Basta." (sul layer testo, sicuro per lo sticky) */
.vhero-stage.shake{animation:heroShake .42s cubic-bezier(.36,.07,.19,.97)}
@keyframes heroShake{
  0%,100%{transform:translate(0,0)}
  12%{transform:translate(-7px,3px)}28%{transform:translate(6px,-4px)}
  44%{transform:translate(-5px,-3px)}60%{transform:translate(4px,3px)}
  76%{transform:translate(-3px,2px)}88%{transform:translate(2px,-1px)}}
/* progress dots laterali */
.vhero-dots{position:absolute;right:26px;top:50%;transform:translateY(-50%);z-index:4;display:flex;flex-direction:column;gap:10px}
.vhero-dots i{width:7px;height:7px;border-radius:50%;background:rgba(234,240,251,.28);transition:.3s}
.vhero-dots i.on{background:var(--acc2);transform:scale(1.3)}
@media(prefers-reduced-motion:reduce){
  .vbeat .w{transform:none;transition:none}.vbeat .w.acc::after{transform:scaleX(1)}
  .vbeat .vk{opacity:1;letter-spacing:.3em}.shockwave,.glitch.kick::before,.glitch.kick::after{animation:none;opacity:0}
  .vhero-pin.kick{animation:none}
}
.vbeat .vk{display:inline-block;font-family:'Space Mono',monospace;font-size:13px;letter-spacing:.3em;
  text-transform:uppercase;color:#46e0ff;margin-bottom:18px}
.vbeat h2{font-family:'Sora',sans-serif;font-weight:800;letter-spacing:-.03em;line-height:.98;
  font-size:clamp(40px,7.5vw,112px);color:#fff;text-shadow:0 8px 48px rgba(0,0,0,.55)}
.vbeat h2 em{font-style:normal;color:#46e0ff}
.vbeat.bang h2{font-size:clamp(72px,15vw,220px);text-shadow:0 0 70px rgba(70,224,255,.65)}
.vbeat.end .btn-lg{margin-top:28px}
.vhero .scrollhint{position:absolute;left:50%;bottom:26px;transform:translateX(-50%);z-index:4}
@media(max-width:760px){.vbeat h2{font-size:clamp(34px,9.5vw,60px)}.vbeat.bang h2{font-size:clamp(64px,20vw,110px)}}

/* ===================== SECONDA PARTE — card che si impilano (sticky-stack, solo-scroll) ===================== */
.stack{position:relative}
.stack .svc-head{padding:clamp(46px,8vw,96px) 0 0;position:relative;z-index:5}
.stack-track{position:relative;margin-top:clamp(22px,4vw,52px)}
.stk{position:sticky;top:0;height:100vh;height:100dvh;overflow:hidden;display:flex;align-items:center;will-change:transform;z-index:1}
.stk[data-i="1"]{z-index:2}
.stk[data-i="2"]{z-index:3}
.stk-bg{position:absolute;inset:0;z-index:0}
.stk-bg img{width:100%;height:100%;object-fit:cover;object-position:center}
.stk-scrim{position:absolute;inset:0;z-index:1;background:linear-gradient(90deg,rgba(5,9,18,.95) 0%,rgba(5,9,18,.74) 38%,rgba(5,9,18,.2) 72%,rgba(5,9,18,.04) 100%)}
.stk-dim{position:absolute;inset:0;z-index:2;background:#04070f;opacity:0;pointer-events:none}
.stk-inner{position:relative;z-index:3;width:100%}
.stk-num{font-family:var(--mono,monospace);font-size:13px;letter-spacing:.34em;color:var(--acc2);display:block;margin-bottom:16px;
  opacity:0;transform:translateY(12px);transition:opacity .6s ease,transform .6s cubic-bezier(.625,.05,0,1)}
.stk-kick{display:block;font-family:var(--mono,monospace);font-size:12.5px;letter-spacing:.26em;text-transform:uppercase;color:#9fb0d0;margin-bottom:14px;
  opacity:0;transform:translateY(12px);transition:opacity .6s ease .06s,transform .6s cubic-bezier(.625,.05,0,1) .06s}
.stk-title{font-family:'Sora',sans-serif;font-weight:800;letter-spacing:-.03em;line-height:1.0;
  font-size:clamp(36px,5.6vw,82px);color:#fff;max-width:15ch;margin-bottom:22px;text-shadow:0 6px 40px rgba(0,0,0,.5)}
.stk-title .w{display:inline-block;overflow:hidden;vertical-align:top;line-height:1.04}
.stk-title .l{display:inline-block;transform:translateY(120%);transition:transform .85s cubic-bezier(.625,.05,0,1);transition-delay:calc(var(--i,0)*.05s + .1s)}
.stk-title .w.acc .l{color:var(--acc2)}
.stk-body{max-width:520px;color:#c7d2e6;font-size:clamp(15px,1.2vw,18px);line-height:1.6;
  opacity:0;transform:translateY(16px);transition:opacity .7s ease .28s,transform .7s cubic-bezier(.625,.05,0,1) .28s}
.stk-cta{margin-top:26px;opacity:0;transform:translateY(14px);transition:opacity .6s ease .4s,transform .6s cubic-bezier(.625,.05,0,1) .4s}
.stk.in .stk-num,.stk.in .stk-kick,.stk.in .stk-body,.stk.in .stk-cta{opacity:1;transform:none}
.stk.in .stk-title .l{transform:translateY(0)}
@media(max-width:760px){
  .stk-scrim{background:linear-gradient(180deg,rgba(5,9,18,.55) 0%,rgba(5,9,18,.9) 78%)}
  /* su mobile il contenuto deve stare in 100dvh anche sui telefoni piccoli: tipografia e spazi ridotti */
  .stk-title{max-width:none;font-size:clamp(26px,7.4vw,40px);line-height:1.05;margin-bottom:14px}
  .stk-body{font-size:14.5px;line-height:1.5;max-width:none}
  .stk-num{margin-bottom:10px}
  .stk-kick{margin-bottom:10px;font-size:11px;letter-spacing:.22em}
  .stk-cta{margin-top:18px}
  .stk-inner.wrap{padding-left:22px;padding-right:22px}
}
@media (prefers-reduced-motion:reduce){
  .stk-num,.stk-kick,.stk-body,.stk-cta{opacity:1;transform:none;transition:none}
  .stk-title .l{transform:none;transition:none}
}

/* numero-fantasma gigante (outline) dietro al titolo + riga che si disegna dal numero */
.stk-ghost{position:absolute;right:3vw;bottom:-5vh;z-index:2;font-family:'Sora',sans-serif;font-weight:800;
  font-size:46vh;line-height:.8;letter-spacing:-.04em;color:transparent;-webkit-text-stroke:1.6px rgba(120,180,240,.11);
  pointer-events:none;user-select:none}
.stk-num{display:flex;align-items:center;gap:14px}
.stk-num::after{content:"";display:inline-block;width:0;height:1.5px;background:var(--acc2);opacity:.85;
  transition:width .75s cubic-bezier(.625,.05,0,1) .2s}
.stk.in .stk-num::after{width:clamp(40px,5vw,84px)}
@media(max-width:760px){ .stk-ghost{font-size:22vh;right:-1vw;bottom:auto;top:4%;opacity:.7} }
@media(prefers-reduced-motion:reduce){ .stk-num::after{width:clamp(40px,5vw,84px)} }

/* ===================== CIRCUIT RAIL — filo conduttore che si disegna sullo scroll ===================== */
.circuit{position:fixed;top:0;height:100dvh;width:50px;z-index:40;pointer-events:none;opacity:0;transition:opacity .6s ease}
#circuit{left:clamp(14px,2.4vw,42px)}
#circuitR{right:clamp(14px,2.4vw,42px)}
.circuit.show{opacity:1}
.circuit svg{width:100%;height:100%;overflow:visible;filter:drop-shadow(0 0 8px rgba(95,230,255,.6))}
#circuitR svg{filter:drop-shadow(0 0 6px rgba(70,224,255,.5))}
.circDraw{stroke-dasharray:1;stroke-dashoffset:1}      /* lunghezza reale impostata via JS */
.cnode{fill:#06101f;stroke:rgba(120,170,230,.6);stroke-width:1.4;vector-effect:non-scaling-stroke;transition:fill .45s ease,stroke .45s ease,filter .45s ease}
.cnode.on{fill:#9af0ff;stroke:#eafdff;filter:drop-shadow(0 0 11px #46e0ff)}
.circHead{fill:#eafdff;opacity:0;vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 14px #5fe6ff)}
.circuit.show .circHead{opacity:1}
@media (max-width:760px){ #circuit{left:8px;width:30px} #circuitR{right:8px;width:30px} }
@media (prefers-reduced-motion:reduce){
  .circuit{opacity:1}
  .circDraw{stroke-dasharray:none;stroke-dashoffset:0}
  .cnode{fill:#9af0ff;stroke:#eafdff}
  .circHead{display:none}
}

/* ===================== DETTAGLIO PRO: grana globale (statica) ===================== */
/* grana fissa su tutta la pagina (texture filmica, coerente coi reference) — nessuna animazione */
body::after{content:"";position:fixed;inset:0;z-index:9990;pointer-events:none;opacity:.05;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='gn'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23gn)'/%3E%3C/svg%3E")}
