:root{--bg:#08090b;--panel:#0d0f12;--panel-raised:#101318;--ink:#e9e7e2;--muted:#71757e;--faint:#43464d;--hairline:#ffffff12;--hairline-strong:#ffffff24;--accent:#ffb03a;--accent-dim:#ffb03a80;--ok:#4ade80;--err:#ff5d5d;--sans:"Archivo", sans-serif;--mono:"Azeret Mono", monospace}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{background:var(--bg);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;font-size:14px;overflow:hidden}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:none}.app{flex-direction:column;height:100%;display:flex}@keyframes rise-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.topbar{animation:.45s cubic-bezier(.22,1,.36,1) both rise-in}.col-left{animation:.45s cubic-bezier(.22,1,.36,1) 80ms both rise-in}.scramble-strip{animation:.45s cubic-bezier(.22,1,.36,1) .16s both rise-in}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.topbar{border-bottom:1px solid var(--hairline);background:var(--panel);flex:none;justify-content:space-between;align-items:center;height:52px;padding:0 18px;display:flex}.wordmark{font-family:var(--mono);letter-spacing:.28em;font-size:17px;font-weight:600}.wordmark-accent{color:var(--accent);animation:1.4s step-end infinite blink}@keyframes blink{50%{opacity:0}}.wordmark-sub{font-family:var(--sans);letter-spacing:.14em;text-transform:uppercase;color:var(--faint);margin-left:14px;font-size:11px;font-weight:400}.topbar-status{align-items:center;gap:12px;display:flex}.status-device{font-family:var(--mono);color:var(--muted);font-size:12px}.status-chip{font-family:var(--mono);color:var(--muted);border:1px solid var(--hairline);white-space:nowrap;border-radius:999px;padding:3px 8px;font-size:10px}.status-error{font-family:var(--mono);color:var(--err);text-overflow:ellipsis;white-space:nowrap;max-width:320px;font-size:11px;overflow:hidden}.conn-dot{background:var(--faint);border-radius:50%;flex:none;width:8px;height:8px}.conn-connected{background:var(--ok);box-shadow:0 0 8px #4ade8099}.conn-connecting{background:var(--accent);animation:.8s step-end infinite blink}.battery{align-items:center;gap:6px;display:flex}.battery-shell{border:1px solid var(--faint);border-radius:2px;width:26px;height:10px;display:block;overflow:hidden}.battery-fill{height:100%;display:block}.battery-num{font-family:var(--mono);color:var(--muted);font-size:11px}.btn{font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;border:1px solid var(--hairline);color:var(--ink);white-space:nowrap;border-radius:3px;padding:7px 14px;font-size:11px;transition:border-color .15s,background .15s,color .15s}.btn:hover:not(:disabled){border-color:var(--hairline-strong);background:#ffffff08}.btn:disabled{opacity:.35;cursor:default}.btn-accent{border-color:var(--accent-dim);color:var(--accent)}.btn-accent:hover:not(:disabled){border-color:var(--accent);background:#ffb03a14}.btn-ghost{color:var(--muted);border-color:#0000}.btn-ghost:hover:not(:disabled){color:var(--ink)}.btn.is-active{border-color:var(--accent-dim);color:var(--accent)}.btn-primary-action{align-items:center;gap:8px;padding:9px 18px;font-size:13px;display:inline-flex}.btn-key{font-family:var(--mono);border:1px solid var(--accent-dim);opacity:.75;border-radius:3px;padding:2px 5px;font-size:10px;line-height:1}.btn-quiet{color:var(--faint)}.btn-quiet:hover:not(:disabled){color:var(--muted)}.layout{flex:1;grid-template-columns:280px 1fr;min-height:0;display:grid}.col{flex-direction:column;min-height:0;display:flex;overflow-y:auto}.col-left{border-right:1px solid var(--hairline);background:var(--panel)}.panel{border-bottom:1px solid var(--hairline);flex-direction:column;gap:12px;padding:16px;display:flex}.panel-grow{flex:1;min-height:0}.panel-label{letter-spacing:.22em;text-transform:uppercase;color:var(--faint);justify-content:space-between;align-items:baseline;font-size:10px;font-weight:600;display:flex}.panel-label-right{font-family:var(--mono);letter-spacing:.05em;color:var(--muted);text-transform:none}.empty-note{color:var(--muted);font-size:12px;line-height:1.5}.stats-grid{grid-template-columns:1fr 1fr;gap:8px;display:grid}.stat{border:1px solid var(--hairline);background:var(--panel-raised);border-radius:4px;flex-direction:column;gap:2px;padding:10px 12px;display:flex;position:relative}.stat-label{font-family:var(--mono);letter-spacing:.2em;text-transform:uppercase;color:var(--faint);font-size:9px}.stat-value{font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--ink);font-size:19px;font-weight:300;line-height:1.15}.stat-sub{font-family:var(--mono);color:var(--faint);font-size:9px}.stat-wide{grid-column:span 2}.insights{flex-direction:column;gap:8px;margin-top:4px;display:flex}.phase-bar{border-radius:3px;gap:1px;height:6px;display:flex;overflow:hidden}.phase-bar-seg{background:var(--phase,var(--muted));opacity:.85;min-width:2px}.phase-legend{font-family:var(--mono);flex-wrap:wrap;gap:4px 12px;font-size:10px;display:flex}.insight-note{font-family:var(--mono);color:var(--muted);font-size:10px}.insight-phase{color:var(--accent)}.stat-hot{border-color:var(--accent-dim)}.stat-hot .stat-value{color:var(--accent)}.stat-hot:after{content:"";background:var(--accent);border-radius:50%;width:5px;height:5px;position:absolute;top:4px;right:4px;box-shadow:0 0 6px #ffb03acc}.scramble-strip{border-bottom:1px solid var(--hairline);background:var(--panel);flex:none;align-items:center;gap:18px;min-height:56px;padding:10px 20px;display:flex}.strip-label{letter-spacing:.22em;text-transform:uppercase;color:var(--faint);white-space:nowrap;align-items:baseline;gap:10px;font-size:10px;font-weight:600;display:flex}.strip-count{font-family:var(--mono);letter-spacing:.05em;color:var(--accent)}.strip-moves{font-family:var(--mono);flex-wrap:wrap;flex:1;gap:4px 12px;min-width:0;font-size:17px;font-weight:500;line-height:1.4;display:flex}.strip-message{font-family:var(--sans);color:var(--muted);font-size:13px;font-weight:400}.strip-side{flex:none;align-items:center;gap:12px;display:flex}.scr-move{color:var(--ink);transition:color .15s}.scr-done{color:var(--faint)}.scr-current{color:var(--accent);position:relative}.scr-current:after{content:"";background:var(--accent);height:2px;position:absolute;bottom:-3px;left:0;right:0}.scr-fix{align-items:baseline;gap:12px;display:inline-flex}.scr-fix-label{font-family:var(--sans);letter-spacing:.22em;text-transform:uppercase;color:var(--err);font-size:10px;font-weight:600}.scr-fix-move{color:var(--err);font-weight:600}.scr-fix-label+.scr-fix-move{position:relative}.scr-fix-label+.scr-fix-move:after{content:"";background:var(--err);height:2px;position:absolute;bottom:-3px;left:0;right:0}.inspection-toggle{color:var(--muted);white-space:nowrap}.stage-wrap{background:radial-gradient(70% 55% at 50% 42%,#ffffff09,#0000),radial-gradient(circle at 1px 1px,#ffffff0d 1px,#0000 0) 0 0/28px 28px;flex-direction:column;min-width:0;min-height:0;display:flex;position:relative;overflow:clip}.stage{flex:1;min-height:0}.stage canvas{display:block}.timer-block{pointer-events:none;flex-direction:column;align-items:center;gap:6px;display:flex;position:absolute;bottom:34px;left:0;right:0}.timer-phase{font-family:var(--mono);letter-spacing:.34em;color:var(--faint);font-size:10px}.timer-digits{font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--ink);letter-spacing:-.01em;font-size:92px;font-weight:300;line-height:1}.timer-meta{font-family:var(--mono);color:var(--muted);font-size:12px}.timer-idle .timer-digits,.timer-scrambling .timer-digits{color:var(--faint)}.timer-ready .timer-phase{color:var(--ok)}.timer-solving .timer-phase,.timer-inspecting .timer-phase{color:var(--accent)}.timer-inspecting .timer-digits{color:var(--ink)}.timer-plus2 .timer-digits{color:var(--accent)}.timer-dnf .timer-digits{color:var(--err)}@keyframes solve-landed{0%{opacity:.6;transform:scale(.985)}to{opacity:1;transform:none}}.timer-solved .timer-digits{color:var(--accent);animation:.35s cubic-bezier(.22,1,.36,1) both solve-landed}.telemetry-drawer{border-left:1px solid var(--hairline);visibility:hidden;z-index:5;background:#0d0f12f7;flex-direction:column;width:min(440px,92vw);transition:transform .26s cubic-bezier(.32,.72,0,1),visibility 0s .26s;display:flex;position:absolute;top:0;bottom:0;right:0;transform:translate(102%);box-shadow:-24px 0 48px #00000073}.telemetry-drawer.is-open{visibility:visible;transition-delay:0s,0s;transform:none}.drawer-head{border-bottom:1px solid var(--hairline);flex:none;justify-content:space-between;align-items:center;padding:10px 16px;display:flex}.drawer-tabs{gap:4px;display:flex}.drawer-tab{letter-spacing:.22em;text-transform:uppercase;color:var(--faint);border-radius:3px;padding:6px 10px;font-size:10px;font-weight:600;transition:color .15s}.drawer-tab:hover{color:var(--muted)}.drawer-tab.is-active{color:var(--ink);background:var(--panel-raised);box-shadow:inset 0 -1px 0 var(--accent)}.tab-body{flex-direction:column;flex:1;min-height:0;display:flex;overflow-y:auto}.kv{grid-template-columns:auto 1fr;gap:5px 16px;font-size:12px;display:grid}.kv dt{color:var(--faint);letter-spacing:.06em}.kv dd{font-family:var(--mono);color:var(--ink);text-align:right;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.kv-ok{color:var(--ok)!important}.btn-column{flex-direction:column;gap:6px;display:flex}.hint{color:var(--faint);font-size:11px}.log-toggle{cursor:pointer;align-items:center;gap:5px;font-size:11px;display:flex}.log-toggle input{accent-color:var(--accent)}.alg-select,.alg-input{width:100%;font-family:var(--mono);color:var(--ink);background:var(--panel-raised);border:1px solid var(--hairline);border-radius:3px;padding:7px 8px;font-size:11px}.alg-select:focus,.alg-input:focus{border-color:var(--accent-dim);outline:none}.alg-armed b{color:var(--accent);font-weight:600}.sample-list{flex-direction:column;flex:1;min-height:0;margin:0 -16px;padding:0 16px;display:flex;overflow-y:auto}.sample-row{border-bottom:1px solid var(--hairline);font-family:var(--mono);align-items:center;gap:10px;padding:6px 0;font-size:11px;display:flex}.sample-mark{flex:none;width:14px}.sample-mark.is-ok{color:var(--ok)}.sample-mark.is-bad{color:var(--err)}.sample-label{color:var(--ink);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.sample-meta{color:var(--muted);flex:none;margin-left:auto}.sample-time{color:var(--faint);flex:none}.sample-delete{color:var(--faint);border-radius:3px;flex:none;padding:2px 5px;font-size:14px;line-height:1}.sample-delete:hover{color:var(--err);background:var(--panel-raised)}.calib-overlay{z-index:6;text-align:center;pointer-events:none;background:radial-gradient(70% 60% at 50% 100%,#08090bd9,#0000);flex-direction:column;justify-content:flex-end;align-items:center;gap:8px;padding-bottom:48px;animation:.3s cubic-bezier(.22,1,.36,1) both rise-in;display:flex;position:absolute;inset:0}.calib-count{font-family:var(--mono);color:var(--accent);font-variant-numeric:tabular-nums;font-size:64px;font-weight:300;line-height:1}.calib-overlay.is-done .calib-count{color:var(--ok);animation:.35s cubic-bezier(.22,1,.36,1) both solve-landed}.calib-title{letter-spacing:.34em;text-transform:uppercase;color:var(--faint);font-size:10px;font-weight:600}.calib-instructions{color:var(--ink);max-width:340px;font-size:13px;line-height:1.5}.calib-green{color:#1fbf5e;font-weight:600}.calib-white{color:#f6f6f4;font-weight:600}.calib-hint{font-family:var(--mono);color:var(--faint);font-size:10px}.shortcuts-scrim{z-index:20;background:#04050699;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.shortcuts-card{background:var(--panel);border:1px solid var(--hairline-strong);border-radius:6px;width:min(560px,92vw);animation:.25s cubic-bezier(.22,1,.36,1) both rise-in;box-shadow:0 24px 64px #0000008c}.shortcuts-cols{grid-template-columns:1fr 1fr;gap:24px;padding:16px;display:grid}.shortcuts-group{flex-direction:column;gap:10px;display:flex}.shortcuts-list{flex-direction:column;gap:7px;display:flex}.shortcut-row{align-items:baseline;gap:12px;font-size:12px;display:flex}.shortcut-row dt{flex:none;width:82px}.shortcut-row dd{color:var(--muted)}kbd{font-family:var(--mono);color:var(--ink);background:var(--panel-raised);border:1px solid var(--hairline-strong);white-space:nowrap;border-bottom-width:2px;border-radius:3px;padding:2px 6px;font-size:10px}.kbd-inline{color:var(--muted);margin-left:6px}.desync-flag{color:var(--accent);letter-spacing:.06em;cursor:help;white-space:nowrap;font-size:11px}.btn-kbd{font-family:var(--mono);padding-left:9px;padding-right:9px}.event-log{min-height:0;font-family:var(--mono);flex:1;margin:0 -16px;padding:0 16px;font-size:11px;line-height:1.7;overflow-y:auto}.log-row{white-space:nowrap;gap:10px;display:flex}.log-ts{color:var(--faint);flex:none}.log-type{width:76px;color:var(--muted);flex:none}.log-detail{color:var(--ink);text-overflow:ellipsis;overflow:hidden}.log-move .log-type{color:var(--accent)}.log-gyro .log-type,.log-gyro .log-detail{color:var(--faint)}.log-error .log-type,.log-warn .log-type{color:var(--err)}.log-timer .log-type{color:var(--ok)}.solve-list{flex:1;min-height:0}.solve-rows{margin:0 -16px;list-style:none;overflow-y:auto}.solve-row{text-align:left;width:100%;font-family:var(--mono);border-bottom:1px solid #ffffff08;grid-template-columns:28px 1fr auto auto;align-items:baseline;gap:10px;padding:8px 16px;transition:background .12s,padding-left .12s;display:grid;position:relative}.solve-row:before{content:"";background:var(--accent);opacity:0;width:2px;transition:opacity .12s;position:absolute;top:0;bottom:0;left:0}.solve-row:hover{background:#ffffff08;padding-left:20px}.solve-row:hover:before{opacity:1}.solve-idx{color:var(--faint);font-size:10px}.solve-time{font-size:15px;font-weight:500}.solve-tps{color:var(--muted);font-size:11px}.solve-date{color:var(--faint);font-size:10px}.solve-dnf{color:var(--err)}.replay-scrim{z-index:12;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#0405068c;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.replay-window{background:var(--bg,#0b0c0e);border:1px solid var(--hairline-strong);border-radius:8px;flex-direction:column;width:min(1080px,94vw);height:min(760px,92vh);animation:.25s cubic-bezier(.22,1,.36,1) both rise-in;display:flex;position:relative;overflow:clip;box-shadow:0 32px 88px #0009}.replay-stage{background:radial-gradient(70% 55% at 50% 42%,#ffffff09,#0000),radial-gradient(circle at 1px 1px,#ffffff0d 1px,#0000 0) 0 0/28px 28px;flex:1;min-height:0}.replay-stage canvas{display:block}.pair-tiles{vertical-align:middle;gap:3px;margin-left:7px;display:inline-flex}.pair-tile{border:1px solid #00000073;border-radius:2px;width:9px;height:9px}.replay-titlebar{border-bottom:1px solid var(--hairline);background:#0a0b0db3;flex:none;align-items:center;gap:14px;padding:10px 16px;display:flex}.replay-summary{font-family:var(--mono);color:var(--ink);white-space:nowrap;font-size:12px}.replay-summary-sep{color:var(--faint);margin:0 7px}.replay-close{padding:6px 10px;font-size:13px}.replay-controls{border-top:1px solid var(--hairline);background:#0a0b0db3;flex-direction:column;flex:none;gap:9px;padding:12px 16px;display:flex}.replay-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.replay-play{text-align:center;min-width:76px}.replay-speed{text-align:center;min-width:52px}.replay-badge{font-family:var(--mono);letter-spacing:.3em;color:var(--accent);font-size:10px;font-weight:600}.replay-time{font-family:var(--mono);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:16px}.replay-total{color:var(--muted);font-size:12px}.replay-readout{font-family:var(--mono);color:var(--muted);white-space:nowrap;font-size:11px}.replay-spacer{flex:1}.replay-phase{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--accent);white-space:nowrap;border:1px solid #ffb03a66;border-radius:3px;padding:2px 8px;font-size:11px}.replay-bar{cursor:pointer;touch-action:none;width:100%;height:18px;position:relative}.replay-bar:before{content:"";background:#ffffff1a;border-radius:2px;height:4px;position:absolute;top:50%;left:0;right:0;transform:translateY(-50%)}.replay-phase-band,.replay-bar-fill{pointer-events:none;height:4px;position:absolute;top:50%;transform:translateY(-50%)}.replay-phase-band{opacity:.62;background:var(--phase,var(--muted));border-radius:1px}.replay-bar-fill{background:#ffffff3d;border-radius:2px;left:0}.phase-cross{--phase:#3a7bd5}.phase-f2l{--phase:#1fbf5e}.phase-oll{--phase:#ffb03a}.phase-pll{--phase:#d23c3c}.replay-playhead{background:var(--ink);pointer-events:none;border-radius:2px;width:3px;height:16px;margin-left:-1.5px;position:absolute;top:50%;transform:translateY(-50%);box-shadow:0 0 6px #0009}.replay-mark{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.replay-mark-pause{background:#ffb03a66;border-radius:1px;height:9px}.replay-mark-rot{background:#e9e7e280;width:2px;height:9px;margin-left:-1px}.replay-splits{font-family:var(--mono);flex-wrap:wrap;gap:4px 12px;font-size:11px;display:flex}.phase-chip{color:var(--muted);align-items:center;gap:5px;display:inline-flex}.phase-chip b{color:var(--ink);font-weight:500}.phase-chip-dot{background:var(--phase,var(--muted));border-radius:2px;width:7px;height:7px}.replay-stepper{gap:2px;display:flex}.replay-stepper .btn{padding:6px 9px}.replay-moves{text-align:right;min-width:44px}.bt-warning{color:var(--err);background:#ff5d5d0f;border:1px solid #ff5d5d66;border-radius:3px;padding:6px 12px;font-size:12px;position:absolute;top:72px;left:50%;transform:translate(-50%)}.modal-backdrop{-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:10;background:#040506bf;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--panel);border:1px solid var(--hairline);border-radius:6px;flex-direction:column;gap:12px;width:min(760px,100vw - 48px);max-height:calc(100vh - 64px);padding:22px;animation:.25s cubic-bezier(.22,1,.36,1) both rise-in;display:flex;overflow-y:auto}.modal-head{align-items:baseline;gap:16px;display:flex}.modal-time{font-family:var(--mono);color:var(--accent);font-size:40px;font-weight:300}.modal-stats{font-family:var(--mono);color:var(--muted);font-size:12px}.modal-spacer{flex:1}.modal-scramble,.modal-recon{font-family:var(--mono);color:var(--ink);word-spacing:4px;font-size:13px;line-height:1.7}.tps-chart{border:1px solid var(--hairline);background:#ffffff04;border-radius:3px;width:100%;height:150px}.tps-line{stroke:var(--accent);stroke-width:1.5px}.tps-pause{fill:#ffb03a1f}.tps-axis{fill:var(--faint);font-family:var(--mono);font-size:10px}.move-table-wrap{overflow-x:auto}.move-table{border-collapse:collapse;width:100%;font-family:var(--mono);font-size:11px}.move-table th{text-align:left;color:var(--faint);border-bottom:1px solid var(--hairline);padding:4px 12px 4px 0;font-weight:400}.move-table td{color:var(--muted);border-bottom:1px solid #ffffff08;padding:3px 12px 3px 0}.move-cell{font-weight:500;color:var(--ink)!important}.ts-cell{color:var(--faint)!important}.move-pause td{border-top:1px dashed var(--accent-dim)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:#ffffff1a;border-radius:4px}::-webkit-scrollbar-track{background:0 0}
