:root {
  --ink: #edf7e8;
  --muted: #9aa9a0;
  --dim: #65756d;
  --lime: #c5ff3d;
  --lime-soft: #e1ff85;
  --forest: #122522;
  --forest-dark: #0b1514;
  --surface: rgba(21, 39, 35, .78);
  --line: rgba(203, 233, 213, .16);
  --orange: #ffb55a;
  --display: Arial, Helvetica, sans-serif;
  --body: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

* { box-sizing: border-box; }
[hidden] { display: none !important; }
html { scroll-behavior: smooth; }
body { margin: 0; min-width: 320px; color: var(--ink); background: var(--forest-dark); font-family: var(--body); overflow-x: hidden; }
button, a { font: inherit; }
button { cursor: pointer; }
a { color: inherit; text-decoration: none; }
.grain { position: fixed; inset: 0; z-index: 20; pointer-events: none; opacity: .06; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.7'/%3E%3C/svg%3E"); mix-blend-mode: soft-light; }

.topbar { position: absolute; z-index: 5; top: 0; left: 0; right: 0; height: 84px; padding: 0 clamp(22px, 5vw, 76px); display: flex; align-items: center; justify-content: space-between; }
.wordmark { display: inline-flex; align-items: center; gap: 11px; color: #f5f8f1; font-size: 16px; font-weight: 900; letter-spacing: .18em; }
.wordmark-mark { display: grid; place-items: center; width: 27px; height: 27px; border: 1px solid var(--lime); border-radius: 50%; color: var(--lime); font-size: 13px; letter-spacing: 0; }
.wordmark-accent { color: var(--lime); }
.topbar-right { display: flex; align-items: center; gap: 16px; }
.demo-chip { display: inline-flex; align-items: center; gap: 9px; padding: 11px 16px; border: 1px solid rgba(228, 250, 219, .2); border-radius: 999px; background: rgba(11, 21, 20, .6); color: #d9e4d6; font-size: 10px; font-weight: 800; letter-spacing: .17em; }
.demo-chip i, .mode-pill i { width: 6px; height: 6px; border-radius: 50%; display: inline-block; background: var(--lime); box-shadow: 0 0 12px var(--lime); }
.icon-button { width: 36px; height: 36px; padding: 0; border: 1px solid var(--line); border-radius: 50%; background: transparent; color: var(--muted); }
.icon-button:hover { color: var(--lime); border-color: var(--lime); }

.hero { min-height: 760px; padding: 148px clamp(22px, 8vw, 132px) 78px; display: grid; grid-template-columns: minmax(300px, .8fr) minmax(480px, 1.35fr); gap: clamp(28px, 7vw, 110px); align-items: center; position: relative; overflow: hidden; background: radial-gradient(circle at 60% 18%, rgba(52, 98, 77, .48), transparent 31%), linear-gradient(110deg, #10221f 0%, #0b1715 50%, #162b26 100%); }
.hero::before { content: ""; position: absolute; width: 62vw; height: 62vw; border-radius: 50%; top: -48vw; right: -12vw; border: 1px solid rgba(197,255,61,.11); box-shadow: 0 0 0 30px rgba(197,255,61,.025), 0 0 0 80px rgba(197,255,61,.018); }
.hero-copy { position: relative; z-index: 2; max-width: 500px; }
.eyebrow { margin: 0 0 23px; color: var(--lime); font-size: 10px; font-weight: 800; letter-spacing: .23em; text-transform: uppercase; }
.eyebrow span { display: inline-block; width: 23px; height: 1px; margin-right: 10px; vertical-align: middle; background: var(--lime); }
h1, h2 { margin: 0; font-family: var(--display); font-weight: 900; letter-spacing: -.075em; line-height: .86; text-transform: uppercase; }
h1 { font-size: clamp(65px, 8vw, 126px); }
h1 em, h2 em { color: var(--lime); font-style: normal; }
.hero-subtitle { max-width: 400px; margin: 31px 0 35px; color: #a9b8af; font-size: 15px; line-height: 1.75; }
.hero-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 13px; }
.button { border: 0; border-radius: 4px; padding: 17px 22px; font-size: 10px; font-weight: 900; letter-spacing: .19em; transition: transform .18s ease, box-shadow .18s ease, background .18s ease; }
.button span { margin-left: 22px; font-size: 15px; }
.button-primary { color: #0d1a15; background: var(--lime); box-shadow: 0 0 26px rgba(197,255,61,.17); }
.button-primary:hover, .swing-button:hover { transform: translateY(-2px); background: var(--lime-soft); box-shadow: 0 10px 28px rgba(197,255,61,.2); }
.button-ghost { color: var(--ink); border: 1px solid rgba(237,247,232,.42); background: rgba(8, 16, 15, .18); }
.button-ghost:hover { border-color: var(--lime); color: var(--lime); }
.privacy-note { margin: 27px 0 0; color: #708279; font-size: 10px; letter-spacing: .04em; }
.lock { display: inline-grid; place-items: center; width: 15px; height: 15px; margin-right: 6px; color: var(--lime); border: 1px solid var(--lime); border-radius: 50%; }

.hero-scene { min-height: 530px; position: relative; align-self: stretch; border: 1px solid rgba(213, 241, 218, .14); background: #142c24; overflow: hidden; box-shadow: 0 30px 80px rgba(0,0,0,.25); }
#gameCanvas { display: block; width: 100%; height: 100%; min-height: 530px; }
.scene-vignette { position: absolute; inset: 0; pointer-events: none; background: linear-gradient(90deg, rgba(8,16,15,.46), transparent 21%, transparent 79%, rgba(8,16,15,.35)), linear-gradient(0deg, rgba(8,16,15,.8), transparent 32%, rgba(8,16,15,.15)); }
.scene-label { position: absolute; z-index: 1; color: rgba(231,244,225,.67); font-size: 9px; font-weight: 800; letter-spacing: .18em; }
.scene-label-top { top: 22px; left: 24px; }.scene-label-top span { color: var(--lime); margin: 0 5px; }.scene-label-bottom { bottom: 20px; left: 24px; }.scene-label-bottom strong { color: var(--lime); margin-left: 8px; }
.score-preview { position: absolute; right: 25px; bottom: 22px; text-align: right; }.score-preview span, .score-preview small { display: block; color: #a2b3a7; font-size: 8px; font-weight: 700; letter-spacing: .15em; }.score-preview strong { display: block; margin: 2px 0; color: var(--lime); font-family: var(--display); font-size: 47px; line-height: .9; }.score-preview strong span { display: inline; color: var(--orange); font-size: 25px; }

.info-strip { display: grid; grid-template-columns: 1fr repeat(3, 1.05fr); gap: 0; padding: 0 clamp(22px, 8vw, 132px); border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); background: #0c1917; }
.info-intro, .info-card { min-height: 142px; padding: 27px 26px 27px 0; display: flex; align-items: center; gap: 15px; border-right: 1px solid var(--line); }.info-card { padding: 27px 25px; }.info-card:last-child { border-right: 0; }.info-intro { color: var(--lime); font-size: 10px; letter-spacing: .17em; }.section-number { color: #7a8b82; }.line { width: 28px; height: 1px; background: var(--lime); }.info-icon { display: grid; place-items: center; flex: 0 0 29px; height: 29px; border: 1px solid rgba(197,255,61,.4); border-radius: 50%; color: var(--lime); }.info-card strong { display: block; font-size: 12px; letter-spacing: .04em; }.info-card p { max-width: 200px; margin: 8px 0 0; color: #76877d; font-size: 11px; line-height: 1.55; }
.stats-strip { display: grid; grid-template-columns: repeat(3, .65fr) 1.45fr; gap: 0; padding: 27px clamp(22px, 8vw, 132px) 35px; background: #0b1514; }.stats-strip > div { padding-right: 22px; }.stats-strip span { display: block; color: #6f8076; font-size: 9px; font-weight: 800; letter-spacing: .19em; }.stats-strip strong { display: inline-block; margin: 10px 6px 0 0; color: var(--ink); font-family: var(--display); font-size: 34px; line-height: .8; }.stats-strip small { color: var(--lime); font-size: 10px; }.stats-cta { display: flex; align-items: center; justify-content: space-between; gap: 18px; border-left: 1px solid var(--line); padding-left: 27px; }.mini-link { padding: 0; border: 0; color: var(--lime); background: transparent; font-size: 10px; font-weight: 900; letter-spacing: .16em; white-space: nowrap; }.mini-link b { margin-left: 10px; font-size: 17px; }

.game-overlay, .result-overlay, .modal-backdrop { position: fixed; inset: 0; z-index: 10; display: none; }.game-overlay { background: #0a1513; }.game-overlay.is-visible, .result-overlay.is-visible, .modal-backdrop.is-visible { display: block; }.game-overlay::before { content: ""; position: absolute; z-index: 1; inset: 0; opacity: .4; pointer-events: none; background: radial-gradient(circle at 50% 10%, #4d7a57, transparent 35%), linear-gradient(180deg, transparent 50%, #06100e 100%); }.game-scene-canvas { position: absolute; z-index: 0; inset: 0; width: 100%; height: 100%; }.game-topbar { position: absolute; z-index: 2; top: 0; left: 0; right: 0; height: 76px; padding: 0 35px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(215,247,215,.13); }.back-button, .pause-button { border: 0; color: #c1cec4; background: transparent; font-size: 10px; font-weight: 800; letter-spacing: .16em; }.back-button:hover { color: var(--lime); }.game-title { text-align: center; }.game-title span { display: block; color: var(--lime); font-size: 11px; font-weight: 900; letter-spacing: .25em; }.game-title strong { display: block; margin-top: 6px; color: #85968b; font-size: 9px; font-weight: 700; letter-spacing: .15em; }.game-title b { color: var(--ink); }.mode-pill { display: inline-flex; align-items: center; gap: 8px; color: #a5b5aa; font-size: 9px; font-weight: 800; letter-spacing: .12em; }.game-scoreboard { position: absolute; z-index: 3; top: 104px; left: 50%; transform: translateX(-50%); display: flex; align-items: center; gap: 34px; text-align: center; }.game-scoreboard span { display: block; color: #84988b; font-size: 8px; font-weight: 800; letter-spacing: .19em; }.game-scoreboard strong { display: block; margin-top: 8px; color: var(--ink); font-family: var(--display); font-size: 38px; line-height: .8; }.game-scoreboard strong span { display: inline; margin-left: 3px; color: var(--lime); font-size: 17px; }.score-divider { width: 1px; height: 41px; background: var(--line); }.lives strong { color: var(--orange); font-size: 17px; }.game-message { position: absolute; z-index: 3; top: 186px; left: 0; right: 0; text-align: center; color: var(--lime); font-size: 10px; font-weight: 900; letter-spacing: .2em; }.game-message span { margin: 0 10px; color: #7f9686; }.game-controls { position: absolute; z-index: 3; bottom: 33px; left: 0; right: 0; display: flex; align-items: center; justify-content: center; gap: 24px; }.control-hint { display: flex; align-items: center; gap: 10px; color: #8ea097; font-size: 10px; }.control-hint kbd { padding: 8px 10px; border: 1px solid rgba(221,243,221,.28); border-radius: 4px; color: var(--ink); font-size: 10px; }.swing-button { min-width: 190px; padding: 19px 24px; border: 0; border-radius: 5px; color: #0d1a15; background: var(--lime); font-size: 11px; font-weight: 900; letter-spacing: .22em; }.swing-button span { margin-left: 35px; font-size: 17px; }.pause-button { width: 38px; height: 38px; border: 1px solid var(--line); border-radius: 50%; font-size: 11px; }
.tracking-card { position: absolute; z-index: 4; left: 32px; bottom: 30px; width: 194px; padding: 10px; border: 1px solid rgba(197,255,61,.28); background: rgba(7, 19, 16, .82); box-shadow: 0 12px 30px rgba(0,0,0,.2); }.tracking-card-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 8px; }.tracking-card-head span { color: var(--lime); font-size: 8px; font-weight: 900; letter-spacing: .12em; }.tracking-card-head i { display: inline-block; width: 5px; height: 5px; margin-right: 5px; border-radius: 50%; background: var(--lime); box-shadow: 0 0 8px var(--lime); }.tracking-card-head small { color: #90a496; font-size: 7px; }.tracking-video-wrap { position: relative; height: 91px; overflow: hidden; background: #1c3029; }.tracking-video-wrap video { display: none !important; }.tracking-map-canvas { display: block; width: 100%; height: 100%; }.tracking-crosshair { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); color: var(--lime); font-size: 22px; opacity: .8; }.tracking-meter { height: 3px; margin-top: 8px; overflow: hidden; background: rgba(226,255,210,.12); }.tracking-meter span { display: block; width: 0; height: 100%; background: var(--lime); transition: width .12s ease; }.tracking-card p { margin: 8px 0 0; color: #8ea198; font-size: 8px; line-height: 1.35; }

.result-overlay { overflow-y: auto; background: radial-gradient(circle at 50% 0%, #244a36, transparent 40%), #0a1513; }.result-card { width: min(560px, calc(100% - 44px)); margin: 11vh auto; padding: 48px; border: 1px solid rgba(220,246,219,.18); background: rgba(11, 25, 21, .82); box-shadow: 0 30px 80px rgba(0,0,0,.28); }.result-card h2 { font-size: clamp(55px, 8vw, 84px); }.result-score { margin: 45px 0 27px; padding-bottom: 27px; border-bottom: 1px solid var(--line); }.result-score span, .result-score small { display: block; color: #7e9185; font-size: 9px; font-weight: 800; letter-spacing: .19em; }.result-score strong { display: block; margin: 10px 0; color: var(--lime); font-family: var(--display); font-size: 102px; line-height: .75; }.result-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }.result-stats span { display: block; color: #718379; font-size: 8px; font-weight: 800; letter-spacing: .15em; }.result-stats strong { display: block; margin-top: 8px; font-family: var(--display); font-size: 24px; }.result-actions { display: flex; gap: 10px; margin-top: 43px; }.result-actions .button { flex: 1; padding-left: 13px; padding-right: 13px; }.result-actions .button span { margin-left: 8px; }

.modal-backdrop { display: none; place-items: center; padding: 24px; background: rgba(4, 12, 10, .7); backdrop-filter: blur(12px); }.modal-backdrop.is-visible { display: grid; }.camera-modal { position: relative; width: min(520px, 100%); padding: 23px 42px 38px; border: 1px solid rgba(225,250,216,.2); background: #10221d; box-shadow: 0 35px 100px rgba(0,0,0,.45); }.modal-close { position: absolute; z-index: 2; top: 17px; right: 20px; border: 0; color: #c7d6ca; background: transparent; font-size: 25px; }.camera-preview-wrap { height: 155px; margin-bottom: 29px; position: relative; overflow: hidden; border: 1px solid rgba(197,255,61,.2); background: radial-gradient(ellipse at 50% 75%, #345841, #111f1b 70%); }.camera-preview-wrap video { display: none !important; }.camera-preview-wrap .tracking-map-canvas { display: block; width: 100%; height: 100%; }.camera-preview-wrap.video-active .camera-preview-placeholder { display: none; }.camera-preview-placeholder { position: absolute; inset: 0; display: grid; place-content: center; gap: 7px; text-align: center; color: rgba(219,249,211,.35); }.camera-preview-placeholder span { font-size: 42px; line-height: .7; }.camera-preview-placeholder small { font-size: 9px; font-weight: 800; letter-spacing: .2em; }.preview-scanline { position: absolute; left: 0; right: 0; top: 43%; height: 1px; background: rgba(197,255,61,.35); box-shadow: 0 0 17px var(--lime); opacity: .6; }.camera-modal h2 { font-size: 64px; }.modal-copy { max-width: 380px; margin: 23px 0 15px; color: #9caf9e; font-size: 13px; line-height: 1.65; }.camera-status { min-height: 18px; margin: 0 0 27px; color: #6f8377; font-size: 10px; line-height: 1.5; }.modal-actions { display: flex; align-items: center; gap: 22px; flex-wrap: wrap; }.text-button { padding: 0; border: 0; color: #c9d8cb; background: transparent; font-size: 10px; font-weight: 800; letter-spacing: .1em; }.text-button:hover { color: var(--lime); }.text-button span { margin-left: 7px; color: var(--lime); font-size: 15px; }.sr-only { position: fixed; width: 1px; height: 1px; opacity: 0; pointer-events: none; }

@media (max-width: 980px) { .hero { grid-template-columns: 1fr; padding-top: 125px; }.hero-copy { max-width: 600px; }.hero-scene { min-height: 460px; }.info-strip { grid-template-columns: repeat(2, 1fr); }.info-intro { min-height: 100px; }.stats-strip { grid-template-columns: repeat(3, 1fr); gap: 25px 0; }.stats-cta { grid-column: 1 / -1; min-height: 45px; padding-left: 0; border-left: 0; border-top: 1px solid var(--line); padding-top: 25px; } }
@media (max-width: 620px) { .topbar { height: 68px; padding: 0 20px; }.demo-chip { padding: 9px 11px; font-size: 8px; }.icon-button { display: none; }.hero { min-height: 0; padding: 112px 20px 44px; }.hero h1 { font-size: clamp(63px, 19vw, 100px); }.hero-subtitle { font-size: 13px; }.hero-actions { align-items: stretch; flex-direction: column; }.hero-actions .button { width: 100%; text-align: left; }.hero-scene { min-height: 320px; margin: 15px -20px 0; border-left: 0; border-right: 0; }.hero-scene #gameCanvas { min-height: 320px; }.score-preview { display: none; }.info-strip { display: block; padding: 0 20px; }.info-intro, .info-card { min-height: 95px; padding: 18px 0; border-right: 0; border-bottom: 1px solid var(--line); }.info-card:last-child { border-bottom: 0; }.stats-strip { grid-template-columns: repeat(3, 1fr); padding: 23px 20px 29px; gap: 16px; }.stats-strip > div { padding: 0; }.stats-strip strong { font-size: 27px; }.stats-cta { margin-top: 5px; padding-top: 21px; }.game-topbar { height: 65px; padding: 0 17px; }.back-button { font-size: 8px; }.game-title strong { font-size: 7px; }.mode-pill { max-width: 74px; font-size: 7px; line-height: 1.3; }.game-scoreboard { top: 91px; gap: 17px; }.game-scoreboard strong { font-size: 31px; }.game-message { top: 163px; padding: 0 15px; font-size: 8px; line-height: 1.6; }.game-controls { bottom: 23px; gap: 10px; flex-wrap: wrap; }.control-hint { order: 2; width: 100%; justify-content: center; }.swing-button { order: 1; min-width: 170px; }.pause-button { order: 1; }.result-card { margin: 24px auto; padding: 32px 24px; }.result-card h2 { font-size: 57px; }.result-score { margin-top: 35px; }.result-score strong { font-size: 83px; }.result-actions { flex-direction: column; }.camera-modal { padding: 17px 24px 29px; }.camera-modal h2 { font-size: 52px; }.modal-actions { gap: 17px; }.modal-actions .button { width: 100%; }.text-button { width: 100%; text-align: left; } }

@media (max-width: 620px) { .leaderboard-strip { display: block; padding: 42px 20px 55px; }.leaderboard-intro { margin-bottom: 30px; }.leaderboard-heading { display: block; }.leaderboard-tabs { margin-top: 18px; }.shot-hint { top: -17px; font-size: 7px; } }

@media (min-width: 981px) { .stats-strip { grid-template-columns: repeat(4, .65fr) 1.45fr; } }

.lives small { display: block; margin-top: 6px; color: #a8b7a9; font-size: 7px; font-weight: 800; letter-spacing: .13em; }.shot-hint { position: absolute; top: -20px; left: 50%; transform: translateX(-50%); color: rgba(225, 243, 221, .58); font-size: 8px; font-weight: 800; letter-spacing: .12em; white-space: nowrap; }.shot-hint span { margin-left: 8px; color: var(--lime); }

.leaderboard-strip { display: grid; grid-template-columns: minmax(190px, .7fr) minmax(0, 1.7fr); gap: 44px; padding: 58px 5vw 76px; border-top: 1px solid var(--line); background: rgba(8, 20, 17, .55); }.leaderboard-intro { display: flex; flex-direction: column; align-items: flex-start; }.leaderboard-intro strong { margin-top: 10px; color: var(--ink); font-family: var(--display); font-size: 30px; letter-spacing: -.04em; }.leaderboard-intro .line { width: 48px; height: 1px; margin: 24px 0 18px; background: var(--lime); }.leaderboard-intro p { max-width: 230px; color: #84988b; font-size: 11px; line-height: 1.6; }.leaderboard-main { min-width: 0; }.leaderboard-heading { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px; padding-bottom: 18px; border-bottom: 1px solid var(--line); }.leaderboard-heading span, .leaderboard-heading small { display: block; color: #718379; font-size: 8px; font-weight: 800; letter-spacing: .17em; }.leaderboard-heading strong { display: block; margin: 7px 0 5px; color: var(--lime); font-family: var(--display); font-size: 26px; }.leaderboard-tabs { display: flex; gap: 8px; }.leaderboard-tab { padding: 9px 12px; border: 1px solid var(--line); color: #8ea097; background: transparent; font-size: 8px; font-weight: 900; letter-spacing: .14em; }.leaderboard-tab.is-active { border-color: var(--lime); color: #0d1a15; background: var(--lime); }.leaderboard-list { min-height: 172px; margin: 0; padding: 7px 0 0; list-style: none; }.leaderboard-list li { display: grid; grid-template-columns: 42px 1fr auto; align-items: center; gap: 14px; min-height: 34px; border-bottom: 1px solid rgba(219, 242, 216, .08); }.leaderboard-list li strong { color: var(--ink); font-size: 11px; letter-spacing: .1em; }.leaderboard-list li b { color: var(--lime); font-family: var(--display); font-size: 18px; }.leaderboard-rank { color: #6f8277; font-family: var(--display); font-size: 17px; }.leaderboard-empty { color: #84988b; font-size: 11px; }.leaderboard-status { margin: 14px 0 0; color: #718379; font-size: 9px; letter-spacing: .08em; }.result-player { margin: -6px 0 30px; color: #718379; font-size: 9px; font-weight: 800; letter-spacing: .13em; }.result-player strong { color: var(--lime); }.result-player span { color: #718379; }

@media (max-width: 620px) { .tracking-card { left: 15px; bottom: 105px; width: 145px; }.tracking-video-wrap { height: 67px; }.tracking-card p { display: none; } }

/* Keep camera frames alive for the tracker without ever showing the raw feed. */
.tracking-video-wrap video, .camera-preview-wrap video { position: fixed !important; left: -10000px !important; top: 0 !important; width: 1px !important; height: 1px !important; opacity: 0 !important; pointer-events: none !important; display: block !important; }

/* Transparent Three.js layer for the shaded ball and bat. */
.game-three-canvas { position: absolute; z-index: 1; inset: 0; width: 100%; height: 100%; pointer-events: none; }
