:root{--bg-0:#0a1210;--bg-1:#12201c;--bg-2:#1a2e28;--ink:#e8f2ef;--muted:#8aa399;--accent:#3dd6c6;--accent-dim:#1f8f84;--warn:#f0c75e;--danger:#e86b5a;--good:#5ed39a;--line:#3dd6c62e;--font-display:"Outfit", sans-serif;--font-body:"IBM Plex Sans", sans-serif;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box}html,body,#root{min-height:100%}body{font-family:var(--font-body);color:var(--ink);background:radial-gradient(1200px 600px at 12% -10%, #3dd6c629, transparent 55%), radial-gradient(900px 500px at 100% 0%, #f0c75e14, transparent 50%), linear-gradient(165deg, var(--bg-0), var(--bg-1) 45%, #0e1815);background-attachment:fixed;margin:0}button,input,select{font:inherit}button{cursor:pointer}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.app{max-width:920px;margin:0 auto;padding:2rem 1.25rem 3.5rem}.brand{flex-direction:column;gap:.35rem;margin-bottom:1.75rem;animation:.7s ease-out both rise;display:flex}.brand-mark{align-items:center;gap:.65rem;display:inline-flex}.brand-orb{border:2px solid var(--accent);border-radius:50%;flex-shrink:0;width:2.25rem;height:2.25rem;position:relative}.brand-orb:after{content:"";background:var(--warn);border-radius:50%;position:absolute;inset:28%;box-shadow:0 0 12px #f0c75e8c}.brand h1{font-family:var(--font-display);letter-spacing:-.03em;margin:0;font-size:clamp(1.85rem,4vw,2.45rem);font-weight:800;line-height:1.1}.brand h1 span{color:var(--accent)}.brand p{color:var(--muted);max-width:36rem;margin:0;font-size:.98rem}.panel{border:1px solid var(--line);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:linear-gradient(#1a2e28d9,#12201ceb);border-radius:1.15rem;margin-bottom:1rem;padding:1.25rem 1.35rem;animation:.75s ease-out both rise}.panel:nth-of-type(2){animation-delay:60ms}.panel:nth-of-type(3){animation-delay:.12s}.panel-title{font-family:var(--font-display);letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin:0 0 1rem;font-size:.8rem;font-weight:700}.controls{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));align-items:end;gap:1rem 1.25rem;display:grid}.field label{color:var(--muted);margin-bottom:.4rem;font-size:.82rem;display:block}.field input[type=range]{width:100%;accent-color:var(--accent)}.field .value{font-family:var(--font-display);color:var(--ink);font-size:1.35rem;font-weight:700}.field select{background:var(--bg-0);width:100%;color:var(--ink);border:1px solid var(--line);border-radius:.55rem;padding:.55rem .7rem}.pulse-stage{flex-direction:column;align-items:center;gap:1.25rem;padding:1.5rem 0 .5rem;display:flex}.pulse{aspect-ratio:1;background:radial-gradient(circle at 40% 35%, #3dd6c640, transparent 55%), var(--bg-0);border:2px solid var(--line);border-radius:50%;place-items:center;width:min(220px,55vw);transition:border-color .15s,box-shadow .15s;display:grid;position:relative}.pulse.active{border-color:var(--accent);animation:.18s ease-out beat-pop;box-shadow:0 0 0 6px #3dd6c61f,0 0 40px #3dd6c633}.pulse.downbeat.active{border-color:var(--warn);box-shadow:0 0 0 8px #f0c75e24,0 0 48px #f0c75e38}.pulse-count{font-family:var(--font-display);letter-spacing:-.04em;font-size:4rem;font-weight:800;line-height:1}.pulse-ring{pointer-events:none;border:1px solid #0000;border-radius:50%;position:absolute;inset:-8%}.pulse.active .pulse-ring{border-color:#3dd6c673;animation:.55s ease-out ring-out}.meter{background:var(--bg-0);border:1px solid var(--line);border-radius:999px;width:min(280px,80%);height:8px;overflow:hidden}.meter>span{background:linear-gradient(90deg, var(--accent-dim), var(--accent));width:0%;height:100%;transition:width 50ms linear;display:block}.actions{flex-wrap:wrap;justify-content:center;gap:.65rem;display:flex}.btn{font-family:var(--font-display);letter-spacing:.02em;border:none;border-radius:.7rem;padding:.75rem 1.25rem;font-size:.95rem;font-weight:700;transition:transform .15s,opacity .15s,background .15s}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:var(--accent);color:#06201c}.btn-primary:hover:not(:disabled){background:#57e4d4}.btn-ghost{color:var(--ink);border:1px solid var(--line);background:0 0}.btn-ghost:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.btn-file{position:relative;overflow:hidden}.btn-file input{opacity:0;cursor:pointer;position:absolute;inset:0}.stats{grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:.75rem;display:grid}.stat{background:var(--bg-0);border:1px solid var(--line);text-align:center;border-radius:.85rem;padding:.85rem .9rem}.stat .label{color:var(--muted);letter-spacing:.06em;text-transform:uppercase;font-size:.72rem}.stat .num{font-family:var(--font-display);margin-top:.2rem;font-size:1.65rem;font-weight:800}.stat .num.grade-S{color:var(--warn)}.stat .num.grade-A{color:var(--good)}.stat .num.grade-B{color:var(--accent)}.stat .num.grade-C,.stat .num.grade-D{color:var(--danger)}.hits{flex-wrap:wrap;gap:.4rem;max-height:7.5rem;margin-top:1rem;display:flex;overflow-y:auto}.chip{border:1px solid var(--line);background:var(--bg-0);border-radius:999px;padding:.28rem .55rem;font-size:.75rem;font-weight:600;animation:.25s ease-out both chip-in}.chip.perfect{color:var(--good);border-color:#5ed39a73}.chip.good{color:var(--accent);border-color:#3dd6c666}.chip.early,.chip.late{color:var(--warn);border-color:#f0c75e66}.hint{color:var(--muted);margin:.85rem 0 0;font-size:.85rem;line-height:1.5}.mode-tabs{background:var(--bg-0);border:1px solid var(--line);border-radius:.75rem;gap:.4rem;width:fit-content;margin-bottom:1rem;padding:.25rem;display:flex}.mode-tabs button{color:var(--muted);font-family:var(--font-display);background:0 0;border:none;border-radius:.55rem;padding:.5rem 1rem;font-size:.88rem;font-weight:600}.mode-tabs button.active{background:var(--bg-2);color:var(--accent)}.status-line{color:var(--muted);align-items:center;gap:.5rem;font-size:.85rem;display:flex}.dot{background:var(--muted);border-radius:50%;width:8px;height:8px}.dot.live{background:var(--good);box-shadow:0 0 8px var(--good);animation:1.2s ease-in-out infinite blink}@keyframes rise{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}@keyframes beat-pop{0%{transform:scale(.94)}to{transform:scale(1)}}@keyframes ring-out{0%{opacity:1;transform:scale(.92)}to{opacity:0;transform:scale(1.12)}}@keyframes chip-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@keyframes blink{0%,to{opacity:1}50%{opacity:.35}}@media (width<=560px){.app{padding:1.25rem 1rem 2.5rem}.pulse-count{font-size:3.2rem}}
