/* Hero: fixed swirling background + 3 text panels that cross-fade while scrolling. */

/* Loading screen */
.loader{position:fixed;inset:0;z-index:50;display:grid;place-items:center;background:var(--midnight);
  transition:opacity .6s ease,visibility .6s}
.loader.done{opacity:0;visibility:hidden}
.loader-inner{text-align:center;font-family:var(--font-heading);font-weight:700;font-size:1.4rem;letter-spacing:-.02em}
.loader-logo{width:96px;height:96px;margin-bottom:14px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,255,255,.92) 0 62%,rgba(255,255,255,0) 72%);animation:spin 3s linear infinite}
.loader-bar{width:160px;height:3px;margin:16px auto 0;background:var(--line);border-radius:3px;overflow:hidden}
.loader-bar i{display:block;height:100%;width:40%;background:var(--grad-text);border-radius:3px;animation:slide 1.1s ease-in-out infinite}
@keyframes slide{0%{transform:translateX(-100%)}100%{transform:translateX(350%)}}

/* Fine grain texture over everything (very light) */
.grain{position:fixed;inset:0;z-index:40;pointer-events:none;opacity:.07;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>")}

/* Tall wrapper = the scroll distance; the stage inside stays fixed on screen */
.hero{position:relative;height:420vh;max-width:none;padding:0;margin:0}
.stage{position:sticky;top:0;height:100vh;height:100svh;overflow:hidden;display:grid;place-items:center}

/* Animated swirling gradient background */
.bg{position:absolute;inset:0;background:var(--midnight);overflow:hidden}
.swirl{position:absolute;left:50%;top:50%;width:150vmax;height:150vmax;margin:-75vmax 0 0 -75vmax;
  background:conic-gradient(from 0deg,var(--violet),var(--midnight) 20%,var(--cyan) 38%,var(--midnight) 55%,var(--magenta) 72%,var(--midnight) 88%,var(--violet));
  opacity:.55;filter:blur(70px);animation:spin 40s linear infinite;will-change:transform}
.swirl.two{opacity:.35;animation-duration:65s;animation-direction:reverse;transform:scale(.7)}
@keyframes spin{to{transform:rotate(360deg)}}
.bg::after{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at center,rgba(11,11,30,.15),rgba(11,11,30,.85) 85%)}
.bg-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.7}

/* Panels */
.panel{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;
  max-width:var(--page-width);margin:auto;padding:80px var(--gutter) 40px;opacity:0;
  transform:translateY(24px);will-change:opacity,transform}
.panel h1,.panel h2{font-size:var(--text-h1);max-width:14ch}
.panel p.lead{font-size:1.2rem;max-width:34rem;color:var(--text)}
.panel ul{list-style:none;margin:0 0 var(--space-3);padding:0;display:flex;flex-wrap:wrap;gap:8px}
.panel li{padding:8px 14px;border:1px solid var(--line);border-radius:var(--radius-pill);background:rgba(20,20,46,.6);font-size:.95rem}
.hint{position:absolute;bottom:max(20px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);font-size:.8rem;letter-spacing:.14em;text-transform:uppercase;color:var(--text-soft);transition:opacity .4s}
.dots{position:absolute;right:max(14px,env(safe-area-inset-right));top:50%;transform:translateY(-50%);display:flex;flex-direction:column;gap:10px}
.dots i{width:8px;height:8px;border-radius:50%;background:var(--line);transition:background .3s,transform .3s}
.dots i.on{background:var(--cyan);transform:scale(1.4)}

/* Reduce motion: calm static version, panels simply stacked and readable */
@media (prefers-reduced-motion:reduce){
  .loader{display:none}
  .swirl{animation:none}
  .bg-video,.hint,.dots{display:none}
  .hero{height:auto}
  .stage{position:relative;height:auto;display:block}
  .bg{position:fixed;z-index:-1}
  .panel{position:relative;opacity:1!important;transform:none!important;min-height:80vh;padding-top:96px}
}
