:root{--paper: #f5f3ee;--card: #ffffff;--ink: #23262f;--ink-soft: #6b7080;--line: #e4e1d8;--accent: #23262f;--good: #2f9e63;--bad: #d64550;--radius: 14px;--mono: "Cascadia Code", "Consolas", ui-monospace, monospace}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html{touch-action:manipulation;-webkit-text-size-adjust:100%}body{margin:0;background:var(--paper);color:var(--ink);font-family:Segoe UI,system-ui,-apple-system,sans-serif;line-height:1.45;overscroll-behavior-y:contain}#root{max-width:980px;margin:0 auto;padding:24px 20px 60px}h1,h2,h3{margin:0;font-weight:650}.muted{color:var(--ink-soft);font-size:.92rem;margin:4px 0}.btn{border:1px solid transparent;border-radius:10px;padding:9px 18px;font-size:.95rem;font-weight:600;cursor:pointer;font-family:inherit;transition:transform .05s ease,opacity .15s ease}.btn:active{transform:scale(.97)}.btn-primary{background:var(--accent);color:#fff}.btn-ghost{background:transparent;color:var(--ink);border-color:var(--line)}@media (hover: hover){.btn-primary:hover{opacity:.88}.btn-ghost:hover{background:#00000008}}.btn-danger-ghost{background:transparent;color:var(--bad);border-color:var(--line)}.btn-sm{padding:6px 12px;font-size:.85rem}.dash-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap;margin-bottom:20px}.app-name{font-size:1.7rem;letter-spacing:-.02em}.dash-stats{display:flex;gap:12px}.stat-tile{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:10px 18px;display:flex;flex-direction:column;align-items:center;min-width:96px}.stat-value{font-family:var(--mono);font-size:1.5rem;font-weight:700}.stat-label{font-size:.75rem;color:var(--ink-soft);text-transform:uppercase;letter-spacing:.06em}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:20px;margin-bottom:18px}.card-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px}.session-done{color:var(--good);font-weight:600}.session-list{list-style:none;margin:12px 0 0;padding:0;display:flex;flex-direction:column;gap:8px}.session-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:10px}.session-item.done{opacity:.55}.session-game{font-weight:600;min-width:130px}.session-mark{margin-left:auto;color:var(--good);font-family:var(--mono);font-size:.85rem}.cat-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.cat-chip{display:inline-block;color:#fff;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;border-radius:999px;padding:3px 10px}.cat-bars{display:flex;flex-direction:column;gap:10px;margin-top:8px}.cat-bar-row{display:grid;grid-template-columns:150px 1fr 48px;align-items:center;gap:12px}.cat-bar-label{font-size:.9rem;font-weight:600}.cat-bar-track{height:10px;border-radius:999px;background:var(--paper);border:1px solid var(--line);overflow:hidden}.cat-bar-fill{height:100%;border-radius:999px;transition:width .4s ease}.cat-bar-value{font-family:var(--mono);font-size:.9rem;text-align:right}.game-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;margin-top:10px}.game-card{border:1px solid var(--line);border-radius:12px;padding:14px;display:flex;flex-direction:column;gap:10px}.game-card h3{margin-top:8px;font-size:1.05rem}.game-card-top .muted{min-height:2.6em}.game-card-meta{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:auto}.game-card-actions{display:flex;gap:6px}.dash-foot{display:flex;justify-content:flex-end;margin-top:6px}.board{list-style:none;margin:8px 0;padding:0;display:flex;flex-direction:column;gap:4px}.board-row{display:grid;grid-template-columns:28px 1fr 44px 90px;align-items:center;gap:8px;padding:7px 10px;border-radius:8px;background:var(--paper);font-size:.92rem}.board-row-hl{outline:2px solid var(--good)}.board-rank{font-family:var(--mono);font-weight:700;color:var(--ink-soft)}.board-name{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.board-tier{font-family:var(--mono);font-size:.8rem;color:var(--ink-soft)}.board-score{font-family:var(--mono);font-weight:700;text-align:right}.board-empty{color:var(--ink-soft);font-size:.9rem;padding:10px;border:1px dashed var(--line);border-radius:8px;margin:8px 0}.board-title{margin-top:18px;font-size:1rem}.shell{display:flex;flex-direction:column;gap:16px}.shell-head{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.shell-title{font-size:1.4rem;margin-top:6px}.shell-hud{display:flex;gap:10px}.hud-item{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:6px 14px;display:flex;flex-direction:column;align-items:center;min-width:76px}.hud-label{font-size:.68rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-soft)}.hud-value{font-family:var(--mono);font-size:1.15rem;font-weight:700}.shell-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:28px;display:flex;flex-direction:column;align-items:flex-start;gap:12px}.tagline{font-size:1.05rem;margin:0}.howto{margin:0;padding-left:20px;color:var(--ink-soft)}.countdown{align-items:center;justify-content:center;min-height:320px}.countdown-num{font-family:var(--mono);font-size:4.5rem;font-weight:800}.shell-stage{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:24px;min-height:420px;display:flex;flex-direction:column}.shell-stage,.shell-card{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}.shell-stage input,.shell-card input{-webkit-user-select:text;user-select:text}.results{align-items:stretch}.result-score{font-family:var(--mono);font-size:3.2rem;font-weight:800;line-height:1}.pb-badge{align-self:flex-start;background:var(--good);color:#fff;font-weight:700;border-radius:999px;padding:5px 14px;font-size:.9rem}.result-stats{display:flex;gap:18px;color:var(--ink-soft);font-size:.92rem}.name-entry p{margin:4px 0 8px;font-weight:600}.name-row{display:flex;flex-wrap:wrap;gap:8px}.name-input{border:1px solid var(--line);border-radius:10px;padding:8px 12px;font-family:var(--mono);font-size:1.05rem;font-weight:700;text-transform:uppercase;width:160px}.game-center{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px}.stage-hint{font-size:1rem;font-weight:600;color:var(--ink-soft);min-height:1.4em;margin:0}.shake{animation:shake .3s}@keyframes shake{0%{transform:translate(0)}25%{transform:translate(-6px)}50%{transform:translate(6px)}75%{transform:translate(-3px)}to{transform:translate(0)}}.echo-grid{display:grid;gap:8px;width:min(360px,100%)}.echo-cell{aspect-ratio:1;border:1px solid var(--line);border-radius:10px;background:var(--paper);cursor:pointer;transition:background .1s ease}.echo-cell:disabled{cursor:default}.echo-lit{background:#7c5cff;border-color:#7c5cff}.echo-good{background:#d9f2e4}.pair-grid{display:grid;gap:8px;width:min(420px,100%)}.pair-card{aspect-ratio:1;border:1px solid var(--line);border-radius:10px;background:var(--ink);cursor:pointer;font-family:var(--mono);font-size:1.4rem;font-weight:800;display:flex;align-items:center;justify-content:center}.pair-up{background:var(--card)}.pair-gone{background:transparent;border-color:transparent;cursor:default}.fs-circle{border-radius:50%}.fs-square{border-radius:4px}.fs-diamond{clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%)}.fs-triangle{background:transparent!important;width:0!important;height:0!important;border-left:16px solid transparent;border-right:16px solid transparent;border-bottom:28px solid}.sweep-field{position:relative;width:min(640px,100%);height:340px;border:1px solid var(--line);border-radius:12px;background:var(--paper);overflow:hidden}.sweep-item{position:absolute;width:32px;height:32px;border:none;cursor:pointer;padding:0}.watch-stage{width:min(320px,100%);height:240px;border:1px solid var(--line);border-radius:14px;background:var(--paper);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s ease}.watch-hit{background:#d9f2e4}.watch-bad{background:#f8dede}.watch-stim{width:72px;height:72px;display:block}.watch-stim.fs-triangle{border-left-width:36px;border-right-width:36px;border-bottom-width:62px}.pulse-stage{position:relative;width:min(560px,100%);height:280px;border:1px solid var(--line);border-radius:14px;background:var(--paper);display:flex;align-items:center;justify-content:center}.pulse-dot{position:absolute;width:84px;height:84px;border-radius:50%;border:none;background:var(--good);cursor:pointer}.pulse-nogo{background:var(--bad)}.pulse-left{left:12%}.pulse-right{right:12%}.pulse-center{left:calc(50% - 42px)}.pulse-fix{font-family:var(--mono);font-size:2rem;color:var(--ink-soft)}.pulse-note{font-family:var(--mono);font-size:1.3rem;font-weight:700}.sort-item{font-family:var(--mono);font-size:4rem;font-weight:800;width:110px;height:110px;display:flex;align-items:center;justify-content:center;border:1px solid var(--line);border-radius:14px;background:var(--paper)}.sort-good{background:#d9f2e4}.sort-bad{background:#f8dede}.sort-timer{width:min(320px,100%);height:6px;border-radius:999px;background:var(--line);overflow:hidden}.sort-timer-fill{height:100%;background:var(--ink);animation-name:drain;animation-timing-function:linear;animation-fill-mode:forwards}@keyframes drain{0%{width:100%}to{width:0%}}.sort-buckets{display:flex;flex-wrap:wrap;justify-content:center;gap:12px}.sort-bucket{display:flex;flex-direction:column;align-items:center;min-width:110px;padding:12px 18px}.rw-sequence{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;align-items:center}.rw-tile{width:76px;height:76px;border:1px solid var(--line);border-radius:10px;background:var(--paper);display:flex;flex-wrap:wrap;gap:4px;align-items:center;justify-content:center;padding:6px}.rw-tile-sm{width:64px;height:64px}.rw-unknown{font-family:var(--mono);font-size:1.8rem;font-weight:800;color:var(--ink-soft)}.rw-options{display:flex;flex-wrap:wrap;justify-content:center;gap:10px}.rw-option{border:2px solid var(--line);border-radius:12px;background:var(--card);cursor:pointer;padding:4px}.rw-right{border-color:var(--good)}.rw-wrong{border-color:var(--bad)}.rungs-path{display:flex;flex-wrap:wrap;gap:8px;align-items:center;max-width:620px;justify-content:center}.rung{font-family:var(--mono);font-weight:700;font-size:1.05rem;border:1px solid var(--line);border-radius:8px;padding:6px 10px;background:var(--paper)}.rung-goal{background:#d9f2e4;border-color:var(--good)}.rung-target{border-style:dashed;color:var(--ink-soft)}.track-rule{font-family:var(--mono);font-weight:800;font-size:1.15rem;letter-spacing:.08em;padding:8px 18px;border-radius:999px;border:1px solid var(--line);background:var(--paper)}.track-rule-new{background:var(--ink);color:#fff}.track-card{width:130px;height:130px;border:1px solid var(--line);border-radius:14px;background:var(--paper);display:flex;align-items:center;justify-content:center}.track-shape{width:64px;height:64px;display:block}.spin-pair{display:flex;flex-wrap:wrap;justify-content:center;gap:28px}.spin-panel{display:flex;flex-direction:column;align-items:center;gap:6px}.spin-grid{display:grid;grid-template-columns:repeat(5,26px);grid-template-rows:repeat(5,26px);gap:3px;padding:8px;border:1px solid var(--line);border-radius:10px;background:var(--paper)}.spin-cell{border-radius:4px}.chart-wrap{position:relative}.chart-svg{width:100%;height:auto;display:block;touch-action:pan-y}.chart-grid{stroke:#efede6;stroke-width:1}.chart-crosshair{stroke:#c9c5b8;stroke-width:1}.chart-tick{font-size:11px;fill:var(--ink-soft);font-family:var(--mono)}.chart-tip{position:absolute;top:10px;background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:0 4px 14px #00000014;padding:8px 12px;pointer-events:none;font-size:.82rem;min-width:150px;z-index:2}.chart-tip-day{font-family:var(--mono);font-weight:700;margin-bottom:4px}.chart-tip-row{display:flex;align-items:center;gap:6px}.chart-tip-row strong{margin-left:auto;font-family:var(--mono)}.chart-legend{display:flex;flex-wrap:wrap;gap:14px;margin-top:8px}.chart-legend-item{display:inline-flex;align-items:center;gap:6px;font-size:.85rem;color:var(--ink-soft)}.summary-list{display:flex;flex-direction:column;gap:10px;margin-bottom:16px}.summary-row{display:flex;align-items:center;gap:12px;border:1px solid var(--line);border-radius:10px;padding:12px 14px}.summary-name{display:flex;flex-direction:column}.summary-score{margin-left:auto;text-align:right;display:flex;flex-direction:column}.summary-score strong{font-family:var(--mono);font-size:1.1rem}@media (pointer: coarse){.key-hint{display:none}.sweep-item{width:40px;height:40px}.sweep-item.fs-triangle{border-left-width:20px;border-right-width:20px;border-bottom-width:34px}}@media (max-width: 600px){#root{padding:16px 12px 48px}.app-name{font-size:1.45rem}.card{padding:14px}.stat-tile{min-width:80px;padding:8px 12px}.stat-value{font-size:1.25rem}.cat-bar-row{grid-template-columns:96px 1fr 40px;gap:8px}.cat-bar-label{font-size:.8rem}.session-game{min-width:0}.shell-card{padding:18px}.shell-stage{padding:14px;min-height:360px}.shell-title{font-size:1.2rem}.hud-item{min-width:62px;padding:5px 10px}.hud-value{font-size:1rem}.countdown{min-height:240px}.result-score{font-size:2.6rem}.name-input{width:130px}.sort-item{width:92px;height:92px;font-size:3.2rem}.sort-bucket{min-width:0;flex:1 1 0;padding:12px 8px}.rw-tile{width:60px;height:60px}.rw-tile-sm{width:52px;height:52px}.rw-sequence,.rw-options{gap:6px}.spin-pair{gap:14px}.spin-grid{grid-template-columns:repeat(5,22px);grid-template-rows:repeat(5,22px)}.track-card{width:110px;height:110px}}
