/* ===== v3: Holo HUD chrome + Pixar 3D moments. Loaded after app.css. =====
   Perf rules: animate transform/opacity only, no backdrop-filter, no fixed multi-layer backgrounds. */
:root{
  --navy:#040a16;--cyan:#3fd6ff;--amber:#ffb340;--gold:#ffd75e;--live:#ff3b4e;
  --card:rgba(6,16,32,.92);--card-solid:#07142a;--ink:#e6f6ff;--muted:#8fb0c9;
  --hud-line:rgba(63,214,255,.32);
  --display:'Audiowide',ui-rounded,system-ui,sans-serif;
}
body{background:#040a16;background-image:none}
body::before{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;
  background:
    radial-gradient(900px 500px at 12% -10%,rgba(63,214,255,.16),transparent 60%),
    radial-gradient(800px 480px at 100% 0,rgba(255,179,64,.10),transparent 55%),
    linear-gradient(rgba(63,214,255,.045) 1px,transparent 1px) 0 0/48px 48px,
    linear-gradient(90deg,rgba(63,214,255,.045) 1px,transparent 1px) 0 0/48px 48px,
    #040a16;
  transform:translateZ(0)}
h1,h2,h3{text-shadow:0 0 12px rgba(63,214,255,.35)}
.eyebrow{color:var(--cyan);text-shadow:none}
a{color:var(--cyan)}

/* top bar: solid, no backdrop blur (blur re-composites every scroll frame on phones) */
.topbar{background:rgba(3,9,20,.97);backdrop-filter:none;border-bottom:1px solid var(--hud-line);
  box-shadow:0 1px 0 rgba(63,214,255,.12),0 10px 26px rgba(0,0,0,.45)}
.logo-img{animation:neon-op 7s infinite;filter:drop-shadow(0 0 8px rgba(63,214,255,.5));will-change:opacity}
@keyframes neon-op{0%,18.5%,21%,23.5%,79%,81.5%,100%{opacity:1}19.5%,22.5%{opacity:.72}80.5%{opacity:.88}}
.nav a{border-radius:6px;font-family:var(--font);letter-spacing:.02em;transition:transform .18s ease,background .18s,border-color .18s}
.nav a.on{background:rgba(63,214,255,.12);border-color:rgba(63,214,255,.6);box-shadow:inset 0 -2px 0 var(--cyan)}

/* HUD panel: glass + corner brackets painted as static background layers */
.card,.tile,.hud{background:
    linear-gradient(var(--cyan),var(--cyan)) 0 0/16px 2px no-repeat,
    linear-gradient(var(--cyan),var(--cyan)) 0 0/2px 16px no-repeat,
    linear-gradient(var(--cyan),var(--cyan)) 100% 0/16px 2px no-repeat,
    linear-gradient(var(--cyan),var(--cyan)) 100% 0/2px 16px no-repeat,
    linear-gradient(var(--cyan),var(--cyan)) 0 100%/16px 2px no-repeat,
    linear-gradient(var(--cyan),var(--cyan)) 0 100%/2px 16px no-repeat,
    linear-gradient(var(--cyan),var(--cyan)) 100% 100%/16px 2px no-repeat,
    linear-gradient(var(--cyan),var(--cyan)) 100% 100%/2px 16px no-repeat,
    linear-gradient(180deg,rgba(10,26,50,.94),rgba(4,12,26,.94));
  border-radius:6px;border:1px solid var(--hud-line);backdrop-filter:none;
  box-shadow:0 0 0 1px rgba(63,214,255,.05) inset,0 14px 32px rgba(0,0,0,.45)}
.card.inner{background:rgba(63,214,255,.05);border-radius:6px}
.modal{border-radius:8px;background:linear-gradient(180deg,#0a1a32,#050e1e);border-color:rgba(63,214,255,.4)}
.modal-bg{backdrop-filter:none;background:rgba(2,6,14,.82)}

/* buttons: HUD bevel + scan-sweep tick on hover/press (transform/opacity only) */
.btn,.tbtn,.tool,.opt,.seg button,.lib-item,.lesson-btn,.arcade-card{position:relative;overflow:hidden}
.btn{border-radius:4px;clip-path:polygon(10px 0,100% 0,100% calc(100% - 10px),calc(100% - 10px) 100%,0 100%,0 10px);
  background:linear-gradient(180deg,rgba(63,214,255,.12),rgba(63,214,255,.04));border:1px solid rgba(63,214,255,.45);
  box-shadow:none;font-family:var(--font);letter-spacing:.02em;transition:transform .15s ease}
.btn:hover{transform:translateY(-1px);box-shadow:none}
.btn:active{transform:translateY(1px) scale(.98);box-shadow:none}
.btn::after,.tbtn::after,.tool::after{content:"";position:absolute;top:0;bottom:0;left:-40%;width:40%;pointer-events:none;
  background:linear-gradient(90deg,transparent,rgba(160,240,255,.35),transparent);transform:translateX(-120%);opacity:0}
.btn:hover::after,.tbtn:hover::after,.tool:hover::after{animation:sweep .55s ease-out}
@keyframes sweep{0%{transform:translateX(0);opacity:1}100%{transform:translateX(360%);opacity:0}}
.btn:active::before,.tbtn:active::before,.tool:active::before{content:"";position:absolute;inset:0;background:rgba(63,214,255,.25);animation:tick .18s steps(2) both;pointer-events:none}
@keyframes tick{from{opacity:1}to{opacity:0}}
.btn.primary{background:linear-gradient(180deg,#5fe2ff,#1aa6d6);color:#021220;border-color:#9ff0ff;box-shadow:none}
.btn.danger{background:rgba(255,59,78,.14);border-color:rgba(255,59,78,.55);box-shadow:none}
.tbtn,.tool{border-radius:4px;background:rgba(63,214,255,.08);box-shadow:inset 0 0 0 1px rgba(63,214,255,.3);transition:transform .15s ease}
.tbtn.primary{background:linear-gradient(180deg,#5fe2ff,#1aa6d6);box-shadow:none}
.tool.on{background:rgba(63,214,255,.22);box-shadow:inset 0 0 0 1px var(--cyan),inset 0 -2px 0 var(--cyan)}
.tool.on,.tool:hover{transform:translateY(-1px)}
.seg{border-radius:6px;background:rgba(63,214,255,.05);border-color:rgba(63,214,255,.2)}
.seg button{border-radius:4px}
.seg button.on{background:rgba(63,214,255,.18);box-shadow:inset 0 -2px 0 var(--cyan)}
input,select,textarea{border-radius:4px;border:1px solid rgba(63,214,255,.3);background:rgba(2,8,18,.8)}
.tele,.transport{border-radius:6px;background:rgba(63,214,255,.05);border:1px solid rgba(63,214,255,.16)}
.swatch{border-radius:3px;transform:rotate(45deg) scale(.82);border:2px solid rgba(255,255,255,.85)}
.swatch.on{transform:rotate(45deg) scale(1.05);border-color:#fff;box-shadow:0 0 0 2px var(--cyan)}
.tick{border-radius:1px;transform:translateX(-50%) rotate(45deg);background:var(--gold)}
.tick.callout{background:var(--cyan)}
.lib-item,.lesson-btn{border-radius:6px}
.lib-item:hover,.lib-item.on{background:rgba(63,214,255,.1);border-color:rgba(63,214,255,.45);box-shadow:inset 3px 0 0 var(--cyan)}

/* play stage: holo frame (static shadows; the canvas draws its own HUD overlay) */
.stage{background:#040a16;border-radius:8px;box-shadow:0 0 0 1px rgba(63,214,255,.55),0 0 24px rgba(63,214,255,.22),0 16px 40px rgba(0,0,0,.6)}
.stage-canvas{background:#040a16}

/* LIVE diamond: snaps on, then pulses via a scaled pseudo ring */
.live-badge{background:none;box-shadow:none;padding:2px 8px 2px 4px;color:#ff98a2;font:400 11px var(--display);letter-spacing:.16em;gap:8px;border-radius:0}
.live-badge i{position:relative;width:12px;height:12px;border-radius:1px;background:var(--live);box-shadow:0 0 10px rgba(255,59,78,.8);
  transform:rotate(45deg);animation:snap-on .42s cubic-bezier(.2,1.6,.4,1) both}
.live-badge i::after{content:"";position:absolute;inset:-3px;border:2px solid var(--live);border-radius:1px;animation:ring 1.4s ease-out .42s infinite;opacity:0}
@keyframes snap-on{0%{transform:rotate(45deg) scale(0);opacity:0}55%{transform:rotate(45deg) scale(1.45);opacity:1}100%{transform:rotate(45deg) scale(1)}}
@keyframes ring{0%{transform:scale(1);opacity:.9}100%{transform:scale(2.3);opacity:0}}
.live-dot{position:relative;border-radius:1px;transform:rotate(45deg);animation:snap-on .42s cubic-bezier(.2,1.6,.4,1) both;box-shadow:0 0 10px rgba(255,59,78,.7)}
.live-dot::after{content:"";position:absolute;inset:-3px;border:2px solid var(--live);animation:ring 1.4s ease-out .42s infinite;opacity:0}
.live{animation:blink-op 1.2s infinite}@keyframes blink-op{50%{opacity:.4}}

/* score bump: transform only */
.sb-score.bump{animation:bump2 .8s cubic-bezier(.34,1.56,.64,1)}@keyframes bump2{30%{transform:scale(1.5)}}
.bar i{transform-origin:left center;animation:grow2 1s cubic-bezier(.34,1.56,.64,1) both}@keyframes grow2{from{transform:scaleX(0)}}
.sb-card{background:linear-gradient(160deg,#050d1c,#0b1830 55%,#25080f);border-radius:6px}
.drive-field{background:repeating-linear-gradient(90deg,#062036 0 9.6%,rgba(63,214,255,.8) 9.6% 10%,#05192b 10% 19.6%,rgba(63,214,255,.8) 19.6% 20%);box-shadow:inset 0 0 0 1px rgba(63,214,255,.6)}

/* ===== Home: Pixar hero ===== */
.hero.hero-v3{display:block;padding:0;overflow:hidden;min-height:clamp(340px,42vw,560px);background:#06080f;border-color:rgba(255,179,64,.35)}
.hero-art,.hero-art img,.hero-shade{position:absolute;inset:0;width:100%;height:100%}
.hero-art img{object-fit:cover;object-position:62% 40%;display:block}
.hero-art{transform:translate3d(calc(var(--px,0) * -12px),calc(var(--py,0) * -8px),0) scale(1.06);will-change:transform;transition:transform .25s ease-out}
.hero-shade{background:linear-gradient(90deg,rgba(4,8,16,.94) 0%,rgba(4,8,16,.78) 34%,rgba(4,8,16,.1) 62%,transparent 100%),linear-gradient(0deg,rgba(4,8,16,.75),transparent 40%)}
.hero-v3 .hero-copy{position:relative;z-index:2;max-width:560px;padding:clamp(18px,3vw,40px)}
.hero-v3 h1{text-shadow:0 2px 0 rgba(0,0,0,.4),0 0 18px rgba(255,179,64,.35)}
.hero-v3 h1 .pop{color:var(--gold);animation:none;text-shadow:0 0 16px rgba(255,215,94,.6)}
.hero-mascot{background:none!important;border:0!important;padding:0!important;box-shadow:none!important;position:absolute;z-index:3;right:clamp(8px,3vw,40px);bottom:clamp(8px,2vw,24px);width:clamp(110px,15vw,200px);height:auto;
  transform:translate3d(calc(var(--px,0) * 14px),calc(var(--py,0) * 10px),0);will-change:transform;transition:transform .25s ease-out;pointer-events:auto;cursor:pointer}
.hero-mascot img{width:100%;height:auto;display:block;transform-origin:50% 100%;animation:hop 1.9s cubic-bezier(.3,0,.3,1) infinite;filter:drop-shadow(0 10px 14px rgba(0,0,0,.5))}
@keyframes hop{
  0%,100%{transform:translateY(0) scale(1.08,.9)}
  12%{transform:translateY(0) scale(.94,1.08)}
  40%{transform:translateY(-34px) scale(.98,1.03) rotate(-3deg)}
  62%{transform:translateY(-6px) scale(1,1) rotate(2deg)}
  72%{transform:translateY(0) scale(1.1,.88)}
  82%{transform:translateY(0) scale(.97,1.03)}}
.home-board{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:16px;margin-top:16px;align-items:start}
.home-board .tiles{margin:0}
.home-board .hero-stage{position:relative}
@media (max-width:860px){.home-board{grid-template-columns:1fr}.hero.hero-v3{min-height:460px}.hero-v3 .hero-copy{padding-bottom:150px}.hero-shade{background:linear-gradient(180deg,rgba(4,8,16,.9) 0%,rgba(4,8,16,.7) 55%,rgba(4,8,16,.2) 100%)}}
.tile{border-radius:6px;transition:transform .2s ease}
.tile:hover{transform:translateY(-4px);box-shadow:0 0 0 1px rgba(63,214,255,.45) inset,0 14px 28px rgba(0,0,0,.45)}
.tile-ico{border-radius:6px;background:radial-gradient(circle at 50% 50%,rgba(63,214,255,.2),transparent 70%),#061428;box-shadow:inset 0 0 0 1px rgba(63,214,255,.4)}

/* avatars: Pixar character portraits in a team-colour ring */
.avatar{overflow:hidden;position:relative;box-shadow:0 0 0 2px var(--ring,#3fd6ff),0 0 10px rgba(63,214,255,.25)}
.avatar img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:50%}

/* celebration mascot (score moments) */
.celebrate{position:fixed;left:50%;bottom:-10px;z-index:310;width:min(46vw,300px);pointer-events:none;transform:translateX(-50%)}
.celebrate img{width:100%;height:auto;display:block;transform-origin:50% 100%;animation:cel-jump 1.7s cubic-bezier(.3,0,.3,1) both;filter:drop-shadow(0 12px 18px rgba(0,0,0,.55))}
@keyframes cel-jump{
  0%{transform:translateY(110%) scale(.9,1.1);opacity:0}
  18%{transform:translateY(0) scale(1.12,.86);opacity:1}
  28%{transform:translateY(0) scale(.92,1.1)}
  52%{transform:translateY(-38%) scale(1,1.02) rotate(-6deg)}
  70%{transform:translateY(0) scale(1.1,.9)}
  80%{transform:translateY(0) scale(1,1)}
  100%{transform:translateY(115%) scale(.95,1.05);opacity:1}}

/* ===== Man Cave (Pixar room + layered, transform-only decor) ===== */
.cave-stage{border-radius:8px;aspect-ratio:16/9;background:#140b06;box-shadow:0 0 0 1px rgba(255,179,64,.45),0 16px 36px rgba(0,0,0,.5)}
.cave-bg{position:absolute;inset:-3%;width:106%;height:106%;object-fit:cover;display:block;
  transform:translate3d(calc(var(--px,0) * -10px),calc(var(--py,0) * -6px),0);will-change:transform;transition:transform .25s ease-out}
.cave-mood{position:absolute;inset:0;pointer-events:none;mix-blend-mode:soft-light}
.cave-fg{position:absolute;inset:0;transform:translate3d(calc(var(--px,0) * 6px),calc(var(--py,0) * 4px),0);will-change:transform;transition:transform .25s ease-out}
.cave-item{position:absolute;transform-origin:50% 0}
.cave-item svg{display:block;width:100%;height:auto;overflow:visible}
.cave-item.pennant-i{animation:sway2 4s ease-in-out infinite}@keyframes sway2{50%{transform:rotate(5deg)}}
.cave-item .bob-h{transform-origin:50% 90%;animation:bob2 1.6s ease-in-out infinite}@keyframes bob2{25%{transform:rotate(-9deg)}75%{transform:rotate(9deg)}}
.cave-neon{position:absolute;left:4%;top:8%;width:25%;animation:neon-op 6s infinite;will-change:opacity}
.cave-neon svg{display:block;width:100%;height:auto}
.cave-tint{position:absolute;pointer-events:none;mix-blend-mode:color;border-radius:6px}
.lamp-glow{position:absolute;left:0;top:18%;width:24%;height:60%;pointer-events:none;background:radial-gradient(closest-side,rgba(255,200,120,.38),transparent);mix-blend-mode:screen;animation:breathe 4.5s ease-in-out infinite;will-change:opacity}
@keyframes breathe{50%{opacity:.6}}
.hotspot{position:absolute;border:0;padding:0;background:transparent;cursor:pointer;border-radius:10px}
.hotspot::before{content:"";position:absolute;inset:0;border-radius:inherit;box-shadow:0 0 0 2px rgba(255,215,94,.85),0 0 22px rgba(255,215,94,.55);opacity:0;transition:opacity .2s}
.hotspot:hover::before,.hotspot:focus-visible::before{opacity:1}
.hotspot .hs-label{position:absolute;left:50%;bottom:-4px;transform:translate(-50%,100%);white-space:nowrap;font:800 13px var(--font);color:#fff;background:rgba(4,8,16,.85);border:1px solid rgba(255,215,94,.6);padding:3px 9px;border-radius:4px;opacity:.9;transition:transform .2s ease}
.hotspot:hover .hs-label{transform:translate(-50%,100%) translateY(-3px)}
.hotspot .hs-ping{position:absolute;right:-6px;top:-6px;width:12px;height:12px;border-radius:2px;transform:rotate(45deg);background:var(--gold);box-shadow:0 0 10px rgba(255,215,94,.9)}
.hotspot .hs-ping::after{content:"";position:absolute;inset:-3px;border:2px solid var(--gold);animation:ring 1.8s ease-out infinite}
.cave-tv{position:absolute;pointer-events:none;overflow:hidden;border-radius:3px}
.cave-tv .playview,.cave-tv .stage{height:100%;box-shadow:none;border-radius:0}
.cave-tv .stage-canvas{height:100%;object-fit:cover;aspect-ratio:auto}
.cave-mascot{position:absolute;left:66%;bottom:4%;width:9%;z-index:2;cursor:pointer;border:0;background:none;padding:0}
.cave-mascot img{width:100%;height:auto;display:block;transform-origin:50% 100%;animation:idle-bounce 2.4s ease-in-out infinite;filter:drop-shadow(0 8px 10px rgba(0,0,0,.6))}
@keyframes idle-bounce{0%,100%{transform:translateY(0) scale(1.04,.96)}45%{transform:translateY(-8%) scale(.97,1.03)}}
.cave-mascot.jump img{animation:hop 1s cubic-bezier(.3,0,.3,1) 1}
.arcade-card{border-radius:6px;background:linear-gradient(160deg,#2a1a0c,#0c0a12);border-color:rgba(255,179,64,.35);box-shadow:none;transition:transform .2s ease;padding:0;overflow:hidden}
.arcade-card .arc-art{display:block;width:100%;aspect-ratio:16/9;object-fit:cover;transition:transform .35s ease}
.arcade-card:hover .arc-art{transform:scale(1.06)}
.arcade-card .arc-body{padding:10px 12px 12px;display:flex;flex-direction:column;gap:2px}
.arcade-card:hover{transform:translateY(-4px)}
.game-canvas{border-radius:8px;box-shadow:0 0 0 1px rgba(255,179,64,.45),0 10px 24px rgba(0,0,0,.45)}
.qr-wrap{animation:none;border-radius:8px;background:linear-gradient(135deg,#3fd6ff,#ffb340 55%,#ff3b4e)}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
  .hero-art,.hero-mascot,.cave-bg,.cave-fg{transform:none!important}
  .celebrate{display:none}
}
.vid-thumb{position:relative;overflow:hidden;border-radius:6px}
.vid-thumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.vid-thumb .yt-play{position:relative}
.logo-img{width:auto}.hero-logo{width:auto}.sub-logo{width:auto}
.card.hero-gc{background:linear-gradient(110deg,rgba(4,8,16,.94) 0%,rgba(30,6,12,.78) 55%,rgba(4,8,16,.25) 100%),url('../img/v3/hero-768.webp') 70% 40%/cover no-repeat;border-color:rgba(255,59,78,.45)}
.cave-scene{position:absolute;inset:-3%;width:106%;height:106%;transform:translate3d(calc(var(--px,0) * -10px),calc(var(--py,0) * -6px),0);transition:transform .25s ease-out;will-change:transform}
.cave-scene .cave-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transform:none;transition:none}
.cave-decor,.cave-decor-slot{position:absolute;inset:0}
/* Static HUD overlay for live play views (frame, corner ticks, scanlines, vignette).
   One composited layer instead of a full-canvas alpha blit every frame. */
.stage.holo-hud::after{content:"";position:absolute;inset:0;pointer-events:none;border-radius:inherit;
  background:
    linear-gradient(var(--cyan),var(--cyan)) 10px 10px/34px 3px no-repeat,
    linear-gradient(var(--cyan),var(--cyan)) 10px 10px/3px 34px no-repeat,
    linear-gradient(var(--cyan),var(--cyan)) calc(100% - 10px) 10px/34px 3px no-repeat,
    linear-gradient(var(--cyan),var(--cyan)) calc(100% - 10px) 10px/3px 34px no-repeat,
    linear-gradient(var(--cyan),var(--cyan)) 10px calc(100% - 10px)/34px 3px no-repeat,
    linear-gradient(var(--cyan),var(--cyan)) 10px calc(100% - 10px)/3px 34px no-repeat,
    linear-gradient(var(--cyan),var(--cyan)) calc(100% - 10px) calc(100% - 10px)/34px 3px no-repeat,
    linear-gradient(var(--cyan),var(--cyan)) calc(100% - 10px) calc(100% - 10px)/3px 34px no-repeat,
    repeating-linear-gradient(0deg,rgba(160,230,255,.035) 0 1px,transparent 1px 3px),
    radial-gradient(ellipse at center,transparent 55%,rgba(2,5,12,.55) 100%);
  box-shadow:inset 0 0 0 2px rgba(63,214,255,.55),inset 0 0 18px rgba(63,214,255,.25)}
.playview.compact .stage.holo-hud::after{background-size:20px 2px,2px 20px,20px 2px,2px 20px,20px 2px,2px 20px,20px 2px,2px 20px,auto,auto}

.hero-mascot.hit{right:10%;bottom:22%;width:17%;height:42%;transform:none;border-radius:40%}
.hero-mascot.hit:focus-visible{outline:2px solid var(--gold)}
@media (max-width:600px){
  .hotspot .hs-label{bottom:2px;transform:translate(-50%,0);font-size:10px;padding:2px 5px}
  .hotspot:hover .hs-label{transform:translate(-50%,-2px)}
  .hotspot .hs-ping{width:8px;height:8px;right:-3px;top:-3px}
}
