/* Shared base for the website mockups. Each site sets its own tokens on :root. */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;overflow-x:hidden;overflow-x:clip}
html.reduce{scroll-behavior:auto}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--body);font-size:17px;line-height:1.6;overflow-x:clip;-webkit-font-smoothing:antialiased}
img{max-width:100%;display:block}
a{color:inherit}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.wrap{width:min(1200px,100% - 40px);margin-inline:auto}
@media (max-width:600px){.wrap{width:calc(100% - 32px)}}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* Fixed environment layer: slow drifting glow + grain */
.env{position:fixed;inset:-20%;z-index:-1;pointer-events:none;background:var(--env);animation:envdrift 70s ease-in-out infinite alternate}
.env::after{content:"";position:absolute;inset:0;opacity:.07;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='.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
@keyframes envdrift{from{transform:translate3d(-2%,-1%,0) rotate(0)}to{transform:translate3d(2%,1.5%,0) rotate(3deg)}}
html.reduce .env{animation:none}

/* Progress bar */
.scroll-progress{position:fixed;top:0;left:0;right:0;height:2px;background:var(--accent);transform:scaleX(0);transform-origin:0 50%;z-index:60;pointer-events:none}

/* Header */
.site-header{position:fixed;top:0;left:0;right:0;z-index:50;transition:background .5s ease,backdrop-filter .5s ease,border-color .5s ease;border-bottom:1px solid transparent}
.site-header.scrolled{background:var(--header-bg);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-color:var(--line)}
.site-header .wrap{display:flex;align-items:center;justify-content:space-between;height:72px;gap:16px}
.site-header nav{display:flex;gap:28px}
.site-header nav a{text-decoration:none;font-size:14px;opacity:.82;transition:opacity .3s}
.site-header nav a:hover{opacity:1}
@media (max-width:860px){.site-header nav{display:none}}
.back-link{position:fixed;left:calc(16px + env(safe-area-inset-left,0px));bottom:calc(16px + env(safe-area-inset-bottom,0px));z-index:70;font:600 12px/1 system-ui,sans-serif;letter-spacing:.04em;padding:10px 14px;border-radius:999px;background:rgba(20,20,24,.78);color:#f4f1ea;text-decoration:none;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,.14);transition:transform .3s}
.back-link:hover{transform:translateY(-2px)}

/* Buttons */
.btn{display:inline-flex;align-items:center;gap:10px;padding:15px 26px;border-radius:var(--radius,999px);border:0;background:var(--accent);color:var(--on-accent);font-weight:600;text-decoration:none;cursor:pointer;transition:transform .35s cubic-bezier(.2,.8,.2,1),box-shadow .35s,background .3s}
.btn:hover{box-shadow:0 12px 30px -10px var(--accent)}
.btn.ghost{background:transparent;color:var(--ink);border:1px solid var(--line-strong,var(--line))}
.btn.ghost:hover{box-shadow:none;background:var(--card)}

/* ---------- Scrub hero ---------- */
.hero{position:relative;height:420vh}
.hero .stage{position:sticky;top:0;height:100vh;height:100svh;overflow:hidden;background:var(--bg)}
.hero .media{position:absolute;inset:-14px;transform:translate3d(var(--px,0),var(--py,0),0);transition:transform 1.2s cubic-bezier(.2,.8,.2,1)}
.hero .poster,.hero video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;background-size:cover;background-position:center}
.hero video.scrub{opacity:0;transition:opacity .6s ease;transform:translateZ(0);will-change:transform}
.hero.video-ready:not(.at-top) video.scrub{opacity:1}
.hero video.loop{opacity:0;transition:opacity .7s ease}
.hero.at-top.trailer-on video.loop{opacity:1}
/* the background is never still: a slow drift on the hero image until (and under) the trailer */
.hero .poster{animation:heroDrift 16s ease-in-out infinite alternate;will-change:transform}
@keyframes heroDrift{0%{transform:scale(1.04) translate3d(-1.2%,.6%,0)}100%{transform:scale(1.14) translate3d(1.4%,-1%,0)}}
html.reduce .hero .poster{animation:none}
/* cursor spotlight over the live background */
.hero .stage::after{content:"";position:absolute;inset:0;z-index:2;pointer-events:none;background:radial-gradient(520px circle at var(--sx,70%) var(--sy,40%),var(--spot,rgba(255,255,255,.08)),transparent 60%);mix-blend-mode:soft-light;opacity:var(--hint,1)}

/* ---------- Live opening screen (first band) ---------- */
.hero .band.live-band{inset:0;max-width:none;translate:none;display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);align-items:center;gap:clamp(24px,5vw,80px);padding:110px clamp(20px,6vw,96px) 90px;text-align:left}
.hero .band.live-band::before{inset:0;background:var(--live-scrim,linear-gradient(90deg,rgba(0,0,0,.55),rgba(0,0,0,.15) 55%,transparent));opacity:1}
.hero .live-band .copy{max-width:640px}
.hero .live-band .big{transform:none;filter:none}
.hero .live-band .w{display:inline-block;opacity:0;transform:translateY(.45em);filter:blur(8px);animation:heroWord .9s cubic-bezier(.2,.8,.2,1) calc(var(--hd,.1s) + var(--i) * 85ms) forwards}
.hero .live-band .rise{opacity:0;transform:translateY(16px);animation:heroUp .9s cubic-bezier(.2,.8,.2,1) calc(var(--hd,.1s) + var(--rd,.55s)) forwards}
.hero .live-band .kick{transform:none}
.hero .live-band .sub{transform:none}
.hero .ctas{display:flex;gap:12px;flex-wrap:wrap;margin-top:26px}
@keyframes heroWord{to{opacity:1;transform:none;filter:none}}
@keyframes heroUp{to{opacity:1;transform:none}}
/* glass card that can be used before scrolling */
.live-card{justify-self:end;width:min(380px,100%);padding:22px;border-radius:var(--card-radius,22px);background:var(--glass,rgba(20,18,16,.42));border:1px solid var(--glass-line,rgba(255,255,255,.16));-webkit-backdrop-filter:blur(18px) saturate(1.3);backdrop-filter:blur(18px) saturate(1.3);box-shadow:0 30px 70px -30px rgba(0,0,0,.7);color:var(--glass-ink,inherit);text-shadow:none;animation:heroUp 1s cubic-bezier(.2,.8,.2,1) calc(var(--hd,.1s) + .8s) forwards,cardFloat 7s ease-in-out calc(var(--hd,.1s) + 1.8s) infinite;opacity:0;transform:translateY(24px)}
@keyframes cardFloat{50%{translate:0 -8px}}
.live-card .lc-head{display:flex;justify-content:space-between;align-items:center;gap:10px;font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;opacity:.85;margin-bottom:14px}
.live-dot{display:inline-flex;align-items:center;gap:7px}
.live-dot::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--live,#4ade80);box-shadow:0 0 0 0 var(--live,#4ade80);animation:livePulse 1.8s infinite}
@keyframes livePulse{70%{box-shadow:0 0 0 9px rgba(74,222,128,0)}100%{box-shadow:0 0 0 0 rgba(74,222,128,0)}}
.live-card .lc-img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:calc(var(--card-radius,22px) - 8px);display:block;transition:opacity .35s}
.live-card .lc-row{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:14px}
.live-card .lc-big{font-family:var(--display);font-size:30px;line-height:1;font-variant-numeric:tabular-nums}
.live-card .lc-pills{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px}
.live-card .lc-pills button{padding:7px 12px;border-radius:99px;border:1px solid var(--glass-line,rgba(255,255,255,.25));background:transparent;cursor:pointer;font-size:13px;transition:background .25s,color .25s}
.live-card .lc-pills button[aria-pressed="true"]{background:var(--glass-ink,#fff);color:var(--glass-on,#111)}
.live-card .lc-bar{height:6px;border-radius:6px;background:rgba(255,255,255,.15);overflow:hidden;margin-top:10px}
.live-card .lc-bar i{display:block;height:100%;width:var(--w,30%);background:var(--accent);transition:width .6s ease}
.live-card .btn{padding:11px 18px;font-size:14px;white-space:nowrap;flex:none}
html.reduce .hero .live-band .w,html.reduce .hero .live-band .rise,html.reduce .live-card{opacity:1!important;transform:none!important;filter:none!important;animation:none!important}

/* ---------- Live panning background (Deal Pro style) ---------- */
.hero .panos{position:absolute;inset:0;overflow:hidden;transition:opacity .8s ease}
.hero:not(.at-top) .panos{opacity:0}
.hero .pano{position:absolute;left:0;top:0;background:0 0/100% 100% no-repeat;opacity:0;transition:opacity 1.6s ease;will-change:transform,opacity}
.scene-tag{margin-top:18px;width:fit-content;display:flex;align-items:center;gap:8px;padding:7px 14px 7px 10px;border-radius:999px;background:rgba(12,12,15,.72);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.12);font:500 12.5px/1.2 var(--body);color:rgba(255,255,255,.85);text-shadow:none;transition:opacity .6s ease,transform .6s cubic-bezier(.2,.8,.2,1)}
.scene-tag i{width:7px;height:7px;border-radius:50%;background:var(--pin,var(--accent));box-shadow:0 0 0 4px rgba(255,255,255,.12)}
.scene-tag b{color:#fff;font-weight:600}
.scene-tag.swap{opacity:0;transform:translateY(6px)}

/* trailer sound toggle */
.sound-btn{position:absolute;right:clamp(16px,4vw,48px);bottom:28px;z-index:5;display:inline-flex;align-items:center;gap:10px;padding:10px 16px;border-radius:999px;border:1px solid rgba(255,255,255,.35);background:rgba(10,10,12,.45);color:#fff;font:600 12px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;cursor:pointer;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);transition:background .3s,opacity .4s;opacity:var(--hint,1)}
.sound-btn:hover{background:rgba(10,10,12,.7)}
.sound-btn i{display:flex;gap:2px;align-items:flex-end;height:12px}
.sound-btn i::before,.sound-btn i::after{content:"";width:3px;height:5px;background:currentColor;border-radius:1px}
.sound-btn[aria-pressed="true"] i::before{animation:eq .7s ease-in-out infinite alternate}
.sound-btn[aria-pressed="true"] i::after{animation:eq .7s ease-in-out .35s infinite alternate}
@keyframes eq{to{height:12px}}
.hero:not(.at-top) .sound-btn{opacity:0;pointer-events:none}
.hero .ring{bottom:80px}

/* ---------- Brand intro curtain ---------- */
.curtain{position:fixed;inset:0;z-index:300;display:grid;place-items:center;background:var(--intro-bg,var(--bg));color:var(--intro-ink,var(--ink));animation:introExit .8s cubic-bezier(.7,0,.2,1) 1.2s forwards;pointer-events:none}
.curtain .mark{font-family:var(--display);font-size:clamp(40px,7vw,96px);letter-spacing:var(--intro-track,-.01em);opacity:0;transform:scale(.92);filter:blur(10px);animation:introMark .9s cubic-bezier(.2,.8,.2,1) .1s forwards}
.curtain .mark small{display:block;font-family:var(--mono);font-size:12px;letter-spacing:.3em;text-transform:uppercase;text-align:center;opacity:.7;margin-top:12px}
.curtain::after{content:"";position:absolute;left:50%;bottom:30%;width:120px;height:1px;margin-left:-60px;background:var(--accent);transform:scaleX(0);animation:heroLine .8s cubic-bezier(.2,.8,.2,1) .5s forwards}
@keyframes introMark{to{opacity:1;transform:none;filter:none}}
@keyframes introExit{to{transform:translateY(-100%)}}
@keyframes heroLine{to{transform:scaleX(1)}}
.hero .scrim{position:absolute;inset:0;pointer-events:none;background:var(--scrim)}
.hero .band{position:absolute;z-index:3;opacity:0;visibility:hidden;max-width:min(620px,88vw);text-shadow:0 2px 24px var(--shadow,rgba(0,0,0,.5))}
.hero .band::before{content:"";position:absolute;inset:-60px -80px;z-index:-1;background:radial-gradient(closest-side,var(--band-scrim,rgba(0,0,0,.42)),transparent);opacity:var(--k,0);transition:opacity .4s}
html:not(.js) .hero .band[data-static]{opacity:1;visibility:visible}
.hero .band .kick{display:block;font-family:var(--mono);font-size:12px;letter-spacing:.24em;text-transform:uppercase;opacity:calc(.2 + var(--k,1) * .8);transform:translateY(calc((1 - var(--k,1)) * 14px))}
.hero .band .big{display:block;font-family:var(--display);font-size:clamp(40px,6.4vw,92px);line-height:.98;letter-spacing:-.02em;margin:.18em 0 .22em;transform:translateY(calc((1 - var(--k,1)) * 40px));filter:blur(calc((1 - var(--k,1)) * 10px))}
.hero .band .sub{display:block;font-size:clamp(16px,1.4vw,19px);max-width:44ch;opacity:calc(var(--k,1));transform:translateY(calc((1 - var(--k,1)) * 22px))}
.hero .pos-left{left:clamp(20px,6vw,96px);top:50%;translate:0 -50%}
.hero .pos-right{right:clamp(20px,6vw,96px);top:50%;translate:0 -50%;text-align:right}
.hero .pos-right .sub{margin-left:auto}
.hero .pos-top{left:50%;top:clamp(96px,16vh,170px);translate:-50% 0;text-align:center}
.hero .pos-top .sub{margin-inline:auto}
.hero .pos-bottom{left:clamp(20px,6vw,96px);bottom:clamp(40px,10vh,110px)}
.hero .hint{position:absolute;left:50%;bottom:28px;translate:-50% 0;z-index:4;font-family:var(--mono);font-size:11px;letter-spacing:.3em;text-transform:uppercase;opacity:var(--hint,1);display:flex;flex-direction:column;align-items:center;gap:10px}
.hero .hint i{width:1px;height:42px;background:currentColor;opacity:.7;animation:hintline 2.2s ease-in-out infinite;transform-origin:top}
@keyframes hintline{0%{transform:scaleY(0)}50%{transform:scaleY(1);transform-origin:top}51%{transform-origin:bottom}100%{transform:scaleY(0);transform-origin:bottom}}
.hero .ring{position:absolute;right:24px;bottom:24px;z-index:4;width:40px;height:40px;color:var(--ink);opacity:.8;transition:opacity .6s}
.hero .ring.done{opacity:0}
.hero .ring circle{transition:stroke-dashoffset .2s linear;transform:rotate(-90deg);transform-origin:center}
/* Static hero: phones, reduced motion, Save-Data, file:// preview. The live loop still plays. */
.hero.static{height:auto}
.hero.static .stage{position:relative;height:auto;min-height:100vh;min-height:100svh}
.hero.static .band[data-static]{opacity:1;visibility:visible;--k:1}
.hero.static .band.live-band{position:relative}
.hero.static .hint{display:none}
@media (max-width:860px){
  .hero .band.live-band{grid-template-columns:1fr;padding:100px 20px 40px;align-content:end;min-height:100svh}
  .live-card{justify-self:start}
}
@media (max-width:760px){
  .hero .pos-right{text-align:left;right:auto;left:20px}
  .hero .pos-right .sub{margin-left:0}
  .hero .band{max-width:calc(100vw - 40px)}
  .hero .band.live-band{max-width:none}
}

/* ---------- Reveal system ---------- */
html.js [data-reveal]{opacity:0;transition:opacity 1s cubic-bezier(.2,.8,.2,1),transform 1.1s cubic-bezier(.2,.8,.2,1),filter 1s,clip-path 1.2s cubic-bezier(.7,0,.2,1);transition-delay:var(--d,0ms)}
html.js [data-reveal="up"]{transform:translateY(48px)}
html.js [data-reveal="left"]{transform:translateX(-60px)}
html.js [data-reveal="right"]{transform:translateX(60px)}
html.js [data-reveal="scale"]{transform:scale(.9)}
html.js [data-reveal="blur"]{filter:blur(14px);transform:translateY(20px)}
/* Clip reveal: a cover panel wipes away (a clip-path would hide the target from IntersectionObserver) */
[data-reveal="clip"]{position:relative;overflow:hidden}
html.js [data-reveal="clip"]{opacity:1}
html.js [data-reveal="clip"]::before{content:"";position:absolute;inset:0;z-index:2;background:var(--bg);transform-origin:50% 0;transition:transform 1.3s cubic-bezier(.7,0,.2,1);transition-delay:var(--d,0ms);pointer-events:none}
html.js [data-reveal="clip"].in::before{transform:scaleY(0)}
html.js [data-reveal="clip"] img{transform:scale(1.15);transition:transform 1.8s cubic-bezier(.2,.8,.2,1)}
html.js [data-reveal="clip"].in img{transform:scale(1)}
html.js [data-reveal].in{opacity:1;transform:none;filter:none}
html.js [data-stagger]>*{opacity:0;transform:translateY(32px);transition:opacity .9s cubic-bezier(.2,.8,.2,1),transform .9s cubic-bezier(.2,.8,.2,1);transition-delay:var(--d,0ms)}
html.js [data-stagger].in>*{opacity:1;transform:none}
[data-split] .w{display:inline-block;overflow:hidden;vertical-align:top;padding-bottom:.08em}
[data-split] .w>span{display:inline-block}
html.js [data-split] .w>span{transform:translateY(105%);transition:transform 1s cubic-bezier(.2,.8,.2,1);transition-delay:calc(var(--i) * 55ms)}
html.js [data-split].in .w>span{transform:none}
html.reduce [data-reveal="clip"]::before{display:none}
html.reduce [data-reveal],html.reduce [data-stagger]>*,html.reduce [data-split] .w>span{opacity:1!important;transform:none!important;filter:none!important;clip-path:none!important;transition:none!important}

/* Horizontal rail */
[data-hscroll]{position:relative}
[data-hscroll] .rail-sticky{position:sticky;top:0;height:100vh;overflow:hidden;display:flex;flex-direction:column;justify-content:center}
[data-hscroll] .rail-track{display:flex;gap:28px;padding-inline:max(20px,calc((100vw - 1200px)/2));will-change:transform;width:max-content}
@media (max-width:760px){
  [data-hscroll] .rail-sticky{position:relative;height:auto;padding-block:40px}
  [data-hscroll] .rail-track{overflow-x:auto;width:auto;scroll-snap-type:x mandatory;padding-bottom:12px}
  [data-hscroll] .rail-track>*{scroll-snap-align:start}
}

/* Tilt highlight */
[data-tilt]{transition:transform .5s cubic-bezier(.2,.8,.2,1);transform-style:preserve-3d;position:relative}
[data-tilt]::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;background:radial-gradient(400px circle at var(--mx,50%) var(--my,50%),rgba(255,255,255,.12),transparent 45%);opacity:0;transition:opacity .4s}
[data-tilt]:hover::after{opacity:1}

/* Marquee */
.marquee{overflow:hidden;white-space:nowrap;-webkit-mask-image:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent);mask-image:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent)}
.marquee>div{display:inline-flex;gap:48px;animation:marq 40s linear infinite;padding-right:48px}
@keyframes marq{to{transform:translateX(-100%)}}
html.reduce .marquee>div{animation:none}

/* Toast */
.toast{position:fixed;left:50%;bottom:28px;translate:-50% 30px;z-index:90;padding:14px 22px;border-radius:14px;background:var(--toast-bg,#16151a);color:var(--toast-ink,#f6f2ea);box-shadow:0 18px 40px -12px rgba(0,0,0,.45);opacity:0;transition:opacity .4s,translate .5s cubic-bezier(.2,.8,.2,1);pointer-events:none;font-size:15px;max-width:calc(100vw - 32px)}
.toast.show{opacity:1;translate:-50% 0}

.fiction{font-size:13px;opacity:.6}
