:root{color-scheme:light;--surface-1: #fcfcfb;--page: #f9f9f7;--raised: #ffffff;--text-primary: #0b0b0b;--text-secondary: #52514e;--text-muted: #898781;--grid: #e1e0d9;--axis: #c3c2b7;--border: rgba(11, 11, 11, .1);--series-1: #2a78d6;--series-2: #eb6834;--series-3: #1baf7a;--dryfire: #8a70c2;--good: #1baf7a;--good-wash: rgba(27, 175, 122, .1);--warning: #fab219;--serious: #ec835a;--critical: #d03b3b;--mark-fill: #22221f;--mark-line: rgba(255, 255, 255, .5);--shadow: 0 1px 2px rgba(11, 11, 11, .06), 0 4px 12px rgba(11, 11, 11, .04);--radius: 12px;--chevron-down: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E")}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){color-scheme:dark;--surface-1: #1a1a19;--page: #0d0d0d;--raised: #232322;--text-primary: #ffffff;--text-secondary: #c3c2b7;--text-muted: #898781;--grid: #2c2c2a;--axis: #383835;--border: rgba(255, 255, 255, .1);--mark-fill: #3d3d38;--mark-line: rgba(255, 255, 255, .55);--series-1: #3987e5;--series-2: #d95926;--series-3: #199e70;--dryfire: #a38fd6;--good: #199e70;--good-wash: rgba(25, 158, 112, .16);--shadow: none}}*{box-sizing:border-box}html,body,#root{height:100%;overflow:hidden}body{margin:0;background:var(--page);color:var(--text-primary);font:15px/1.5 system-ui,-apple-system,Segoe UI,sans-serif;-webkit-text-size-adjust:100%}.app{display:flex;flex-direction:column;height:100%;max-width:720px;margin:0 auto}.main{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;scrollbar-gutter:stable both-edges;width:100vw;position:relative;left:50%;margin-left:-50vw}.main-inner{max-width:720px;margin:0 auto;padding:16px 16px calc(164px + env(safe-area-inset-bottom))}h1{font-size:20px;margin:0 0 4px;letter-spacing:-.01em}h2{font-size:16px;margin:24px 0 8px;letter-spacing:-.01em}h3{font-size:14px;margin:0 0 6px}p{margin:0 0 10px;color:var(--text-secondary)}.lede{margin-bottom:18px}.card{background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius);padding:14px;margin-bottom:12px;box-shadow:var(--shadow)}.card.tight{padding:10px 12px}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:center;justify-content:center;padding:20px;z-index:60}.modal-card{background:var(--surface-1);border-radius:var(--radius);padding:20px;max-width:380px;width:100%;box-shadow:0 12px 40px #0000004d}.goal-celebration{text-align:center;animation:rise-in .35s ease both}.goal-medal{width:56px;height:56px;border-radius:50%;margin:0 auto 12px;color:var(--good);display:flex;align-items:center;justify-content:center;background:var(--good-wash);animation:check-pop .5s cubic-bezier(.34,1.56,.64,1) .15s both}@media (prefers-reduced-motion: reduce){.goal-celebration,.goal-medal{animation:none}}.tabs{flex:none;display:flex;background:var(--surface-1);border-top:1px solid var(--border);padding-bottom:calc(8px + env(safe-area-inset-bottom));width:100vw;position:relative;left:50%;margin-left:-50vw}.tabs button{flex:1;background:none;border:0;padding:10px 4px 12px;color:var(--text-muted);font:inherit;font-size:11px;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:3px}.tabs button[aria-current=page]{color:var(--series-1);font-weight:600}.tabs button svg{width:22px;height:22px}button.primary,button.secondary,button.confirm,.filelabel{display:inline-flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:13px 16px;border-radius:10px;border:1px solid transparent;font:inherit;font-weight:600;cursor:pointer}button.primary,.filelabel{background:var(--series-1);color:#fff}button.secondary{background:transparent;color:var(--text-primary);border-color:var(--axis)}button.confirm{background:color-mix(in srgb,var(--good) 78%,black);color:#fff}button.primary:disabled{opacity:.45;cursor:not-allowed}button.link{background:none;border:0;padding:0;font:inherit;color:var(--series-1);cursor:pointer;text-decoration:underline}button.danger{color:var(--critical)}.row{display:flex;gap:8px}.row>*{flex:1}.seg{display:flex;gap:6px}.seg button{flex:1;padding:10px;border-radius:9px;border:1px solid var(--axis);background:transparent;color:var(--text-secondary);font:inherit;cursor:pointer}.seg button[aria-pressed=true]{background:var(--series-1);border-color:var(--series-1);color:#fff;font-weight:600}label.field{display:block;margin-bottom:12px}label.field>span{display:block;font-size:12px;font-weight:600;color:var(--text-secondary);margin-bottom:5px}label.field small{display:block;font-weight:400;color:var(--text-muted);margin-top:3px}input[type=text],input[type=number],input[type=password],input[type=date],textarea,select{width:100%;padding:10px 12px;border-radius:9px;border:1px solid var(--axis);background:var(--raised);color:var(--text-primary);font:inherit}textarea{min-height:64px;resize:vertical}input[type=file]{display:none}label.check{display:flex;align-items:center;gap:9px;margin-bottom:12px;font-size:14px}label.check input{width:18px;height:18px;accent-color:var(--series-1)}.stats{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}.stats.three{grid-template-columns:repeat(3,1fr)}.stat{background:var(--surface-1);border:1px solid var(--border);border-radius:10px;padding:10px 12px}.stat.range{background:var(--series-1);border-color:transparent}.stat.dryfire{background:color-mix(in srgb,var(--dryfire) 72%,black);border-color:transparent}.stat.race{background:color-mix(in srgb,var(--series-2) 80%,black);border-color:transparent}.stat.range .k,.stat.range .v,.stat.range .v small,.stat.range .n,.stat.dryfire .k,.stat.dryfire .v,.stat.dryfire .v small,.stat.dryfire .n,.stat.race .k,.stat.race .v,.stat.race .v small,.stat.race .n{color:#fff}.stat.range .k,.stat.range .n,.stat.dryfire .k,.stat.dryfire .n,.stat.race .k,.stat.race .n{opacity:.85}.stat .k{font-size:11px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.stat .v{font-size:22px;font-weight:600;letter-spacing:-.02em;margin-top:2px}.stat .v small{font-size:12px;font-weight:500;color:var(--text-secondary);margin-left:2px}.stat .n{font-size:12px;color:var(--text-secondary)}.hero{font-size:40px;font-weight:650;letter-spacing:-.03em;line-height:1}.hero small{font-size:16px;font-weight:500;color:var(--text-secondary)}.finding{border-left:3px solid var(--axis);padding-left:12px;margin-bottom:16px}.finding.priority{border-left-color:var(--critical)}.finding.watch{border-left-color:var(--warning)}.finding.info{border-left-color:var(--good)}.badge{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-secondary)}.badge .dot{width:8px;height:8px;border-radius:50%;background:var(--axis)}.finding.priority .dot{background:var(--critical)}.finding.watch .dot{background:var(--warning)}.finding.info .dot{background:var(--good)}.finding p{margin:4px 0;font-size:14px}.finding .cause{color:var(--text-primary)}.meta{font-size:12px;color:var(--text-muted)}.markup{position:relative;-webkit-user-select:none;user-select:none;line-height:0}.markup img{width:100%;border-radius:var(--radius)}.markup svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.boutrow{display:flex;gap:12px;align-items:center;padding:10px;border-radius:10px;background:var(--surface-1);border:1px solid var(--border);margin-bottom:8px;width:100%;text-align:left;font:inherit;color:inherit;cursor:pointer}.boutrow img{width:52px;height:52px;border-radius:8px;object-fit:cover;flex:none}.boutrow .grow{flex:1;min-width:0}.boutrow .title{font-weight:600;font-size:14px}.pill{display:inline-block;font-size:11px;font-weight:600;padding:2px 7px;border-radius:99px;background:var(--grid);color:var(--text-secondary)}.tick{flex:none;width:22px;height:22px;border-radius:50%;border:1.5px solid var(--axis);display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;color:#fff}.tick.on{background:var(--series-1);border-color:var(--series-1)}.selectbar{position:fixed;left:0;right:0;bottom:calc(126px + env(safe-area-inset-bottom));display:flex;align-items:center;gap:12px;padding:10px 16px;background:var(--surface-1);border-top:1px solid var(--border);z-index:15;max-width:720px;margin:0 auto}.selectbar button{width:auto;margin-left:auto;padding:9px 18px}.empty{text-align:center;padding:40px 20px;color:var(--text-muted)}.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--text-secondary);margin-top:6px}.legend span{display:inline-flex;align-items:center;gap:5px}.swatch{width:10px;height:10px;border-radius:3px}.notice{border-radius:10px;padding:10px 12px;font-size:13px;margin-bottom:12px;border:1px solid var(--border);background:var(--surface-1)}.notice.error{border-color:var(--critical);color:var(--critical)}table.data{width:100%;border-collapse:collapse;font-size:13px;font-variant-numeric:tabular-nums}table.data th,table.data td{text-align:right;padding:6px 4px;border-bottom:1px solid var(--grid)}table.data th{color:var(--text-muted);font-weight:600;font-size:11px;text-transform:uppercase}table.data th:first-child,table.data td:first-child{text-align:left}hr.detail-rule{border:0;border-top:1px solid var(--border);margin:10px 0 0}ol.steps{margin:8px 0 0;padding-left:20px;font-size:14px;color:var(--text-secondary)}ol.steps li{margin-bottom:5px}details summary{cursor:pointer;font-weight:600;font-size:14px}details:not(.help)>summary{list-style:none;display:flex;align-items:center;gap:6px}details:not(.help)>summary::-webkit-details-marker{display:none}details:not(.help)>summary::marker{content:""}details:not(.help)>summary:after{content:"";flex:none;width:18px;height:18px;background:var(--series-1);-webkit-mask:var(--chevron-down) center / contain no-repeat;mask:var(--chevron-down) center / contain no-repeat}details:not(.help)[open]>summary:after{transform:rotate(180deg)}details.help{position:relative;top:-.35em;display:inline-block;margin-left:6px;vertical-align:baseline}details.help summary{list-style:none;cursor:pointer;font-weight:700;font-size:11px;line-height:1;width:18px;height:18px;border-radius:50%;border:1px solid var(--border);color:var(--text-muted);display:inline-flex;align-items:center;justify-content:center}details.help summary::-webkit-details-marker{display:none}details.help summary::marker{content:""}details.help[open] summary{color:var(--raised);background:var(--text-primary);border-color:var(--text-primary)}details.help p{position:absolute;z-index:25;top:calc(100% + 6px);left:0;background:var(--raised);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:10px 12px;width:max-content;max-width:min(280px,calc(100vw - 64px));font-size:12px;line-height:1.4;color:var(--text-secondary);font-weight:400}.spinner{width:18px;height:18px;border-radius:50%;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.session-complete{display:flex;flex-direction:column;align-items:center;text-align:center;padding:40px 8px}.session-complete .check-circle{width:72px;height:72px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin-bottom:18px;background:var(--good-wash);animation:check-pop .4s cubic-bezier(.34,1.56,.64,1) both}.session-complete .check-circle svg{width:36px;height:36px}.session-complete .check-circle path{fill:none;stroke:var(--good);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:40;stroke-dashoffset:40;animation:check-draw .4s ease .2s both}.session-complete h1{margin:0 0 6px;animation:rise-in .35s ease .35s both}.session-complete .lede{margin:0 0 22px;animation:rise-in .35s ease .45s both}.session-complete .lede .num{font-weight:700;color:var(--text-primary);font-variant-numeric:tabular-nums}.session-complete .row{width:100%;max-width:320px;animation:rise-in .35s ease .55s both}@keyframes check-pop{0%{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}@keyframes check-draw{to{stroke-dashoffset:0}}@keyframes rise-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion: reduce){.session-complete .check-circle,.session-complete .check-circle path,.session-complete h1,.session-complete .lede,.session-complete .row{animation-duration:.01ms!important}}button.link.cowbell{display:inline-flex;align-items:center;gap:6px;padding:6px 4px;color:var(--text-muted);text-decoration:none}button.link.cowbell[aria-pressed=true]{color:var(--series-3)}.cowbell .count{font-size:14px;font-weight:600;font-variant-numeric:tabular-nums}.cowbell-icon{display:inline-flex;transform-origin:50% 8%}.cowbell-icon.shake{animation:cowbell-shake .45s ease-in-out}@keyframes cowbell-shake{0%{transform:rotate(0)}20%{transform:rotate(-15deg)}40%{transform:rotate(12deg)}60%{transform:rotate(-7deg)}80%{transform:rotate(3deg)}to{transform:rotate(0)}}@media (prefers-reduced-motion: reduce){.cowbell-icon.shake{animation:none}}.megaphone-shake{display:inline-flex;transform-origin:30% 60%;animation:megaphone-shake 1s ease-in-out}@keyframes megaphone-shake{0%{transform:rotate(0) scale(1)}12%{transform:rotate(-14deg) scale(1.3)}26%{transform:rotate(12deg) scale(1.55)}40%{transform:rotate(-10deg) scale(1.2)}54%{transform:rotate(8deg) scale(1.45)}68%{transform:rotate(-5deg) scale(1.15)}82%{transform:rotate(2deg) scale(1.2)}to{transform:rotate(0) scale(1)}}@media (prefers-reduced-motion: reduce){.megaphone-shake{animation:none}}.posted-check{width:56px;height:56px;border-radius:50%;margin:0 auto 12px;display:flex;align-items:center;justify-content:center;background:var(--good-wash);animation:check-pop .4s cubic-bezier(.34,1.56,.64,1) both}.posted-check svg{width:28px;height:28px}.posted-check path{fill:none;stroke:var(--good);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:40;stroke-dashoffset:40;animation:check-draw .4s ease .2s both}@media (prefers-reduced-motion: reduce){.posted-check,.posted-check path{animation-duration:.01ms!important}}.to-top{position:fixed;left:50%;margin-left:-23px;bottom:calc(84px + env(safe-area-inset-bottom));z-index:5;width:46px;height:46px;padding:0;border-radius:50%;display:flex;align-items:center;justify-content:center;border:1px solid var(--border);background:var(--raised);color:var(--series-1);box-shadow:0 2px 12px #0003;cursor:pointer;opacity:0;transform:translateY(10px);pointer-events:none;transition:opacity .2s ease,transform .2s ease}.to-top.show{opacity:1;transform:none;pointer-events:auto}@media (prefers-reduced-motion: reduce){.to-top{transition:none}}.dev-banner{flex:none;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 16px;background:var(--critical);color:#fff;font-size:13px}.dev-banner button.link{color:#fff;flex:none;font-weight:600}button.dev-switch{background:var(--critical);border-color:var(--critical);color:#fff}.goal-bar{height:6px;border-radius:3px;background:var(--grid);overflow:hidden;margin:6px 0 4px}.goal-bar>i{display:block;height:100%;border-radius:3px}.goal-box{margin-bottom:8px;padding:6px 14px;color:#fff;border-color:transparent}.goal-box.range{background:var(--series-1)}.goal-box.dryfire{background:color-mix(in srgb,var(--dryfire) 72%,black)}.goal-check{color:#fff}.goal-tag{margin-left:8px;font-size:10px;font-weight:600;padding:1px 7px;border-radius:99px;background:#ffffff40;vertical-align:1px}.goal-box .meta,.goal-box button.link{color:#fff}.goal-box .meta{opacity:.85}.goal-box .goal-bar{background:#ffffff47}.goal-box .goal-bar>i{background:#fff}.goal-box .goal-bar.missed>i{background:#ffffff8c}.sensor-targets{display:block;width:100%;height:auto;background:var(--page);border:1px solid var(--border);border-radius:var(--radius)}.st-board{fill:var(--surface-1);stroke:var(--axis);stroke-width:.5}.st-disc{fill:var(--mark-fill)}.st-now{fill:none;stroke:var(--dryfire);stroke-width:.8}.st-aimhere{fill:var(--dryfire);font-size:4px;font-weight:700}.st-name{fill:var(--text-muted);font-size:4px}.st-pull{fill:none;stroke:var(--axis);stroke-width:.5}.st-pull.done{fill:var(--good);stroke:var(--good)}.st-tick{fill:var(--good)}.st-tickmark{fill:none;stroke:#fff;stroke-width:.8;stroke-linecap:round;stroke-linejoin:round}.st-trace{fill:none;stroke:var(--series-1);stroke-width:.5;opacity:.55;stroke-linejoin:round}.st-shot.hit{fill:var(--good)}.st-shot.miss{fill:var(--critical)}.st-shotn{fill:#fff;font-size:2.4px;font-weight:700}.st-aim circle{fill:var(--series-1)}.st-aim path{stroke:var(--series-1);stroke-width:.5;fill:none}.sensor-guide{background:var(--page);border:1px solid var(--border);border-radius:var(--radius);padding:12px;margin-bottom:10px}.sensor-guide .sg-step{font-size:11px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.sensor-guide .sg-title{font-size:18px;font-weight:700;margin:2px 0 8px}.sg-pips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}.sg-pip{font-size:12px;padding:3px 9px;border-radius:999px;border:1px solid var(--axis);color:var(--text-secondary)}.sg-pip.now{border-color:var(--dryfire);color:var(--dryfire);font-weight:600}.sg-pip.done{border-color:var(--good);color:var(--good);background:var(--good-wash)}.sg-meter{height:8px;border-radius:4px;background:var(--grid);overflow:hidden;margin-bottom:6px}.sg-meter i{display:block;height:100%;background:var(--series-1);transition:width .1s linear}.sg-meter i.ready{background:var(--good)}.sensor-table{width:100%;border-collapse:collapse;font-size:13px;margin-top:6px}.sensor-table th{text-align:left;font-weight:500;color:var(--text-muted);font-size:11px;text-transform:uppercase;letter-spacing:.04em}.sensor-table th,.sensor-table td{padding:4px 6px 4px 0;border-bottom:1px solid var(--border)}.sensor-bout{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:4px}.sensor-chip{font-size:12px;font-weight:600;padding:2px 8px;border-radius:999px;border:1px solid var(--critical);color:var(--critical)}.sensor-chip.hit{border-color:var(--good);color:var(--good);background:var(--good-wash)}.sensor-head{display:flex;align-items:center;gap:12px}.sensor-head>svg{flex:none}.sensor-head>div{flex:1;min-width:0}.sensor-head>button{flex:none;width:auto;padding-left:18px;padding-right:18px}.sensor-controls{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px}.sensor-controls>*{flex:none}.sensor-controls button{width:auto}.st-leg{fill:none;stroke:currentColor;stroke-width:2.4px;stroke-linecap:round;stroke-linejoin:round;opacity:.9}.st-arrow{fill:currentColor;opacity:.95}.sensor-legend{display:flex;flex-direction:column;gap:3px;margin-top:6px}.sensor-legend i{display:inline-block;width:16px;height:4px;border-radius:2px;margin-right:8px;vertical-align:middle}.sensor-route-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:14px 0 6px}.sensor-route-head h3{margin:0}.sensor-route-head .seg button{padding:5px 10px;font-size:12px;width:auto}.sensor-replay{display:flex;align-items:center;gap:8px;margin-top:8px}.sensor-replay>*{flex:none}.sensor-replay button{width:auto;padding:8px 12px;font-size:13px}.sensor-replay input[type=range]{flex:1;min-width:80px;accent-color:var(--series-1)}.sensor-replay select{width:auto;padding:7px 6px;font-size:13px}.sensor-route-head button.secondary{width:auto;padding:5px 10px;font-size:12px;margin-left:auto}.count-in{font-size:96px;font-weight:700;text-align:center;line-height:1;margin:18px 0;font-variant-numeric:tabular-nums;animation:count-pop .9s ease-out both}.clock-face{font-size:56px;font-weight:600;text-align:center;margin:6px 0;border-radius:12px;font-variant-numeric:tabular-nums}.go-flash{animation:go-flash .9s ease-out both}@keyframes count-pop{0%{transform:scale(1.5);opacity:.2}to{transform:scale(1);opacity:1}}@keyframes go-flash{0%{background:var(--good-wash);transform:scale(1.06)}to{background:transparent;transform:scale(1)}}@media (prefers-reduced-motion: reduce){.count-in,.go-flash{animation-duration:.01ms!important}}
