@import url('https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Space+Grotesk:wght@400;500;600;700&display=swap');

:root { color-scheme: dark; --ink:#f2f4f7; --muted:#9ba5b3; --faint:#626d7b; --bg:#10151f; --panel:#171e2a; --line:#2a3545; --blue:#58a8ff; --blue-deep:#2378d6; --green:#7de4af; --orange:#ffbf78; --danger:#ff8c8c; --mono:'DM Mono',monospace; --sans:'Space Grotesk',system-ui,sans-serif; }
* { box-sizing:border-box; }
html,body { margin:0; min-height:100%; background:var(--bg); color:var(--ink); font-family:var(--sans); }
body { min-height:100svh; background:radial-gradient(circle at 50% -20%,#27384e 0%,var(--bg) 47%); }
button,input { font:inherit; }
button { cursor:pointer; }
.app-shell { width:min(100%,720px); min-height:100svh; margin:0 auto; position:relative; overflow:hidden; }
.screen { min-height:100svh; padding:clamp(24px,6vw,56px) clamp(20px,6vw,56px) 30px; position:relative; }
[hidden] { display:none !important; }
.brand-row { display:flex; align-items:center; gap:10px; color:var(--muted); text-transform:uppercase; letter-spacing:.15em; font:500 11px var(--mono); }
.brand-mark { width:22px; height:22px; border:1px solid var(--blue); border-radius:50%; display:grid; place-items:center; transform:rotate(45deg); }
.brand-mark span { width:8px; height:8px; background:var(--blue); display:block; clip-path:polygon(50% 0,100% 100%,50% 78%,0 100%); }
.hero-copy { margin-top:clamp(54px,12vw,108px); position:relative; z-index:2; }
h1,h2,p { margin:0; }
h1 { font-size:clamp(43px,11vw,78px); line-height:.96; letter-spacing:-.065em; font-weight:600; }
h1 em { color:var(--blue); font-style:normal; }
.hero-copy p { max-width:405px; color:var(--muted); line-height:1.55; margin-top:24px; font-size:15px; }
.hero-graphic { height:250px; position:relative; margin:-16px -20px -4px; }
.hero-ring { border:1px solid var(--line); border-radius:50%; position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); }
.ring-one { width:218px; height:218px; opacity:.7; }.ring-two { width:140px; height:140px; border-style:dashed; opacity:.7; }
.hero-dot { width:18px; height:18px; border-radius:50%; background:var(--blue); position:absolute; left:calc(50% - 9px); top:calc(50% - 9px); box-shadow:0 0 0 8px #58a8ff18; z-index:2; }
.hero-cone { position:absolute; left:50%; top:50%; width:172px; height:152px; transform:translate(-50%,-93%) rotate(28deg); transform-origin:50% 96%; clip-path:polygon(50% 100%,0 0,100% 0); background:linear-gradient(150deg,#58a8ff00,#58a8ff43); border:1px solid #58a8ff; }
.hero-landmark { position:absolute; left:calc(50% + 83px); top:27px; color:var(--orange); font-size:25px; filter:drop-shadow(0 0 12px #ffbf7855); }
.hero-label { position:absolute; color:var(--faint); letter-spacing:.12em; font:500 10px var(--mono); }.label-you { left:calc(50% - 104px); top:calc(50% + 23px); }.label-target { left:calc(50% + 88px); top:8px; color:var(--orange); }
.home-actions { display:grid; gap:10px; max-width:390px; }.button { border:0; min-height:53px; padding:0 18px; border-radius:10px; color:var(--ink); transition:transform .15s ease,background .15s ease; }.button:active { transform:translateY(2px); }.button-primary { background:var(--blue); color:#071321; font-weight:700; }.button-primary:hover { background:#7abaff; }.button-primary span { float:right; font-size:21px; line-height:15px; }.button-secondary { background:#202b3a; color:var(--ink); }.button-quiet { background:transparent; color:var(--muted); padding:0 10px; }.button-lock { flex:1; }.privacy-note { color:var(--faint); font-size:11px; margin-top:18px; display:flex; align-items:center; gap:8px; }.status-dot,.sensor-pulse { width:7px; height:7px; display:inline-block; background:var(--green); border-radius:50%; box-shadow:0 0 0 4px #7de4af16; }
.game-screen { padding:18px 0 24px; }.game-header,.game-meta,.aim-panel { padding-left:20px; padding-right:20px; }.game-header { display:flex; align-items:center; justify-content:space-between; }.icon-button { color:var(--muted); background:none; border:0; font-size:30px; width:40px; height:40px; line-height:1; }.round-label { text-align:center; }.round-label span { color:var(--blue); font:500 9px var(--mono); letter-spacing:.12em; }.round-label strong { display:block; font:600 14px var(--mono); margin-top:3px; }.round-label small { color:var(--faint); font-size:11px; }.score-chip { text-align:right; min-width:70px; }.score-chip span,.meta-label { display:block; color:var(--faint); text-transform:uppercase; letter-spacing:.12em; font:500 9px var(--mono); }.score-chip strong { color:var(--blue); font:500 16px var(--mono); }.game-meta { display:flex; justify-content:space-between; align-items:end; padding-top:25px; padding-bottom:14px; }.game-meta strong { display:block; font-size:19px; letter-spacing:-.03em; margin-top:4px; }.meta-sub { display:block; color:var(--muted); font-size:11px; margin-top:2px; }.timer-wrap { text-align:right; }.timer-wrap strong { font:500 22px var(--mono); color:var(--orange); }.notice { margin:0 20px 12px; padding:10px 12px; color:#151a20; background:var(--orange); border-radius:8px; font-size:12px; line-height:1.4; }.map-wrap { height:min(64svh,560px); min-height:390px; position:relative; overflow:hidden; background:#d9dfd0; }.map-wrap .leaflet-container { width:100%; height:100%; background:#d9dfd0; }.leaflet-control-attribution { font-size:9px !important; }.leaflet-control-zoom { display:none; }.map-overlay { position:absolute; z-index:500; }.top-left { top:14px; left:17px; }.top-right { top:12px; right:16px; }.bottom-left { bottom:16px; left:16px; }.tier-badge { background:#10151fe8; border:1px solid #ffffff20; border-radius:5px; padding:7px 9px; color:var(--blue); font:500 10px var(--mono); letter-spacing:.03em; }.map-control { width:39px; height:39px; border:1px solid #ffffff28; background:#10151fe8; color:var(--ink); border-radius:8px; font-size:22px; }.sensor-readout { background:#10151fe8; border:1px solid #ffffff20; border-radius:5px; padding:8px 10px; color:var(--muted); font:500 10px var(--mono); display:flex; align-items:center; gap:7px; }.sensor-readout strong { color:var(--ink); margin-left:4px; }.sensor-pulse { width:6px; height:6px; }.aim-cone { position:absolute; z-index:450; width:110px; height:140px; transform:translate(-50%,-92%); transform-origin:50% 92%; pointer-events:none; clip-path:polygon(50% 100%,0 0,100% 0); background:linear-gradient(180deg,#58a8ff38,#58a8ff09); border:1px solid #58a8ff99; }.aim-cone span { display:block; position:absolute; width:13px; height:13px; left:calc(50% - 6px); bottom:0; border-radius:50%; background:var(--blue); box-shadow:0 0 0 5px #58a8ff30; }.map-vignette { position:absolute; inset:0; z-index:400; pointer-events:none; box-shadow:inset 0 0 80px #13202d25; }
.aim-panel { padding-top:18px; }.aim-prompt { display:flex; justify-content:space-between; gap:12px; align-items:baseline; font-size:14px; }.aim-prompt span:first-child { font-weight:600; }.accuracy-hint { color:var(--muted); font-size:11px; text-align:right; }.heading-slider-label { display:block; margin:16px 0 14px; }.heading-slider-label input { width:100%; accent-color:var(--blue); }.aim-actions { display:flex; align-items:center; gap:12px; }.sensor-help { color:var(--faint); font-size:11px; text-align:center; margin-top:13px; }.text-button { border:0; padding:0; background:none; color:var(--blue); text-decoration:underline; }.result-screen,.summary-screen { display:flex; flex-direction:column; justify-content:center; align-items:center; text-align:center; }.result-kicker { color:var(--blue); font:500 10px var(--mono); letter-spacing:.16em; }.result-icon { color:var(--orange); font-size:46px; margin:28px 0 6px; text-shadow:0 0 22px #ffbf7858; }.result-screen h2,.summary-screen h2 { font-size:clamp(34px,9vw,58px); letter-spacing:-.06em; line-height:1; }.result-screen p,.summary-screen p { color:var(--muted); margin-top:12px; }.result-score,.total-score { margin:36px 0 25px; }.result-score span,.total-score span { display:block; color:var(--faint); text-transform:uppercase; letter-spacing:.15em; font:500 10px var(--mono); }.result-score strong,.total-score strong { display:inline-block; color:var(--blue); font:500 clamp(58px,16vw,94px) var(--mono); letter-spacing:-.09em; margin-top:2px; }.result-score small,.total-score small { color:var(--muted); font:500 11px var(--mono); margin-left:7px; }.result-grid,.summary-grid { display:grid; grid-template-columns:repeat(3,1fr); width:100%; max-width:430px; border-top:1px solid var(--line); border-bottom:1px solid var(--line); padding:15px 0; }.result-grid div,.summary-grid div { border-right:1px solid var(--line); }.result-grid div:last-child,.summary-grid div:last-child { border-right:0; }.result-grid span,.summary-grid span { display:block; color:var(--faint); font-size:10px; }.result-grid strong,.summary-grid strong { display:block; font:500 15px var(--mono); margin-top:5px; }.result-actions,.summary-actions { width:100%; max-width:390px; display:grid; gap:10px; margin-top:30px; }.summary-constellation { color:var(--blue); font-size:54px; margin-bottom:15px; }.summary-screen h2 { max-width:420px; }.summary-grid { grid-template-columns:1fr 1fr; margin-top:5px; }.best-line { color:var(--green); font:500 11px var(--mono); margin-top:19px !important; }.toast { position:fixed; z-index:1000; bottom:20px; left:50%; transform:translate(-50%,20px); opacity:0; pointer-events:none; background:#f2f4f7; color:#10151f; border-radius:8px; padding:10px 14px; font-size:12px; transition:opacity .2s,transform .2s; box-shadow:0 10px 30px #0004; }.toast.show { opacity:1; transform:translate(-50%,0); }.sr-only { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0; }
@media (min-width:650px) { .screen { padding-left:56px; padding-right:56px; }.game-screen { padding-left:0; padding-right:0; }.game-header,.game-meta,.aim-panel { padding-left:56px; padding-right:56px; }.map-wrap { border-radius:14px; margin:0 22px; }.hero-graphic { margin-left:0; margin-right:0; } }
.player-marker span { display:block; width:14px; height:14px; border-radius:50%; background:var(--blue); border:2px solid #e8f4ff; box-shadow:0 0 0 5px #58a8ff42,0 2px 7px #13202d88; }
.target-marker { color:var(--orange); font-size:27px; line-height:34px; text-align:center; text-shadow:0 1px 4px #10151f88; }
.fallback-map-grid { position:absolute; inset:0; overflow:hidden; background:radial-gradient(circle at 50% 50%,#52604a 0%,#283321 72%); }
.fallback-map-grid::before,.fallback-map-grid::after { content:""; position:absolute; inset:-30%; background:repeating-linear-gradient(35deg,transparent 0 48px,#ffffff0d 49px 51px); transform:rotate(5deg); }
.fallback-map-grid::after { background:repeating-linear-gradient(125deg,transparent 0 62px,#ffffff0b 63px 65px); transform:rotate(-4deg); }
.fallback-road { position:absolute; display:block; background:#a8ac8b33; transform-origin:center; z-index:1; }.road-a { width:140%; height:15px; top:46%; left:-20%; transform:rotate(-17deg); }.road-b { width:130%; height:11px; top:28%; left:-15%; transform:rotate(42deg); }.road-c { width:115%; height:9px; top:70%; left:-8%; transform:rotate(7deg); }
.fallback-block { position:absolute; display:block; width:70px; height:45px; border:1px solid #e1e2b51c; background:#1821163d; z-index:2; transform:rotate(12deg); }.block-a { left:18%; top:22%; }.block-b { right:16%; top:57%; transform:rotate(-17deg); }.block-c { left:42%; bottom:15%; transform:rotate(27deg); }.fallback-map-label { position:absolute; z-index:3; right:12px; bottom:10px; color:#e7efc355; font:500 9px var(--mono); letter-spacing:.12em; }
.fallback-target { position:absolute; z-index:5; transform:translate(-50%,-50%); color:var(--orange); font-size:32px; line-height:1; text-shadow:0 0 15px #ffbf7866; }
