*{box-sizing:border-box;margin:0;padding:0}:root{--bg:#0b0e14;--panel:#10141eeb;--fg:#e6edf3;--dim:#8b949e;--accent:#37d5ff;--accent2:#ff5c93;--good:#7ce38b;--bad:#ff6b6b}html,body{background:var(--bg);width:100%;height:100%;color:var(--fg);-webkit-user-select:none;user-select:none;font-family:SF Mono,ui-monospace,Menlo,monospace;overflow:hidden}#gl{width:100%;height:100%;display:block;position:fixed;inset:0}.hidden{display:none!important}.overlay{z-index:10;background:radial-gradient(#0b0e14d1,#0b0e14f5);flex-direction:column;justify-content:center;align-items:center;gap:14px;padding:24px;display:flex;position:fixed;inset:0;overflow-y:auto}h1{letter-spacing:2px;color:var(--accent);font-size:42px}.tagline{color:var(--dim);margin-bottom:10px}#dropzone{border:2px dashed var(--accent);text-align:center;cursor:pointer;border-radius:12px;padding:36px 60px;transition:background .15s,transform .15s}#dropzone:hover,#dropzone.drag{background:#37d5ff14;transform:scale(1.02)}#dropzone .dim{margin-top:6px}#analyze-status{background:var(--panel);border:1px solid var(--accent);border-radius:8px;padding:10px 18px}#analyze-status.error{border-color:var(--bad);color:var(--bad)}.progressbar{background:#ffffff14;border-radius:4px;width:260px;height:8px;margin-top:8px;overflow:hidden}.progressbar-fill{background:var(--accent);width:0%;height:100%;transition:width .4s ease-out}.settings{background:var(--panel);border:1px solid #1f2733;border-radius:12px;flex-direction:column;gap:8px;min-width:380px;padding:18px 22px;display:flex}.row{justify-content:space-between;align-items:center;gap:16px;display:flex}.row label{color:var(--dim);font-size:13px}.row input[type=number],.row input[type=text],.row select{color:var(--fg);background:#0d1117;border:1px solid #2a3340;border-radius:6px;width:130px;padding:5px 8px;font-family:inherit}.row input[type=checkbox]{width:18px;height:18px;accent-color:var(--accent)}.row input[type=range]{width:130px;accent-color:var(--accent)}details{border-top:1px solid #1f2733;padding-top:8px}details summary{color:var(--dim);cursor:pointer;margin-bottom:6px;font-size:13px}details .row{margin:4px 0}button{color:var(--fg);border:1px solid var(--accent);cursor:pointer;background:#0d1117;border-radius:8px;padding:9px 22px;font-family:inherit;font-size:14px;transition:background .12s}button:hover{background:#37d5ff1f}button.big{background:#37d5ff24;padding:14px 48px;font-size:20px}.dim{color:var(--dim);font-size:12px}#crosshair{background:var(--good);z-index:5;pointer-events:none;border-radius:50%;width:6px;height:6px;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 0 4px #000000e6}#hud{z-index:4;pointer-events:none;position:fixed;inset:0}#hud-left{position:absolute;top:18px;left:22px}#score{font-variant-numeric:tabular-nums;font-size:30px;font-weight:700}#acc{color:var(--dim);font-size:15px}#combo{color:var(--accent);min-height:24px;font-size:18px}#combo.combo-punch{animation:.24s ease-out combopunch}@keyframes combopunch{0%{transform:scale(1.5)}to{transform:scale(1)}}#combo.combo-break{animation:.4s ease-out combobreak}@keyframes combobreak{0%{color:var(--bad);text-shadow:0 0 8px var(--bad);transform:scale(1.15)}to{color:var(--bad);opacity:0;transform:scale(.7)}}#combo.milestone{animation:.55s ease-out milepop}@keyframes milepop{0%{color:#ffe14a;transform:scale(1.8)}to{transform:scale(1)}}#judgment{opacity:0;font-size:22px;font-weight:700;position:absolute;top:42%;left:50%;transform:translate(-50%)}#judgment.pop{animation:.45s ease-out judgepop}@keyframes judgepop{0%{opacity:1;transform:translate(-50%)scale(1.25)}70%{opacity:1}to{opacity:0;transform:translate(-50%)scale(1)}}#judgment.miss{animation:.6s ease-in forwards judgemiss}@keyframes judgemiss{0%{opacity:1;transform:translate(-50%)translateY(0)rotate(0)scale(1.1)}to{opacity:0;transform:translate(-50%)translateY(46px)rotate(14deg)scale(.9)}}#hint{color:var(--fg);text-shadow:0 0 6px #000000e6;opacity:0;white-space:nowrap;font-size:15px;transition:opacity .25s;position:absolute;top:58%;left:50%;transform:translate(-50%)}#hint.show{opacity:.9}#arrow{border:11px solid #0000;border-left:20px solid var(--accent);pointer-events:none;z-index:6;width:0;height:0;position:fixed;top:50%;left:50%}.legend{text-align:center;line-height:1.7}#hit-error{pointer-events:none;width:300px;height:18px;position:absolute;bottom:64px;left:50%;transform:translate(-50%)}.he-band{opacity:.14;border-radius:2px;height:12px;position:absolute;top:3px}#he-center{background:#ffffff8c;width:2px;height:18px;position:absolute;top:0;left:50%;transform:translate(-50%)}.he-tick{opacity:0;border-radius:1.5px;width:3px;height:16px;margin-left:-1.5px;position:absolute;top:1px}.he-tick.on{animation:.8s linear forwards he-tick-fade}@keyframes he-tick-fade{0%{opacity:.95}to{opacity:0}}#he-chevron{border-top:7px solid #fff;border-left:5px solid #0000;border-right:5px solid #0000;width:0;height:0;margin-left:-5px;transition:left .35s ease-out;position:absolute;top:-6px;left:50%}#progress{background:#ffffff14;height:4px;position:absolute;bottom:0;left:0;right:0}#progress-fill{background:var(--accent);width:0%;height:100%}#results-body{background:var(--panel);border:1px solid #1f2733;border-radius:12px;min-width:340px;padding:20px 30px;font-size:15px;line-height:1.9}#results-body .grade{text-align:center;color:var(--accent);font-size:52px}.board{border-collapse:collapse;width:100%;font-size:13px}.board td{padding:2px 6px}.board td:first-child{color:var(--dim);text-align:right;width:24px}.board td.bn{text-align:left;color:var(--fg)}.board td:nth-child(3){text-align:right;font-weight:700}.board tr.me{background:#37d5ff24;border-radius:4px}.board tr.me td.bn{color:var(--accent)}.charts{justify-content:center;align-items:flex-start;gap:18px;margin-top:12px;display:flex}.charts>div{text-align:center}.chart-title{color:var(--dim);margin-bottom:4px;font-size:12px}#results-body .record{text-align:center;color:#ffe14a;font-weight:700;animation:.7s ease-out milepop}#results-body table{border-collapse:collapse;width:100%}#results-body td:last-child{text-align:right}#calib-status{color:var(--accent);min-height:40px;font-size:26px}
