:root{--bg: #0f1115;--surface: #171a21;--surface-2: #1e222b;--line: #2a2f3a;--text: #e8eaed;--text-dim: #9aa0a6;--accent: #4f8cff;--good: #35c759;--warn: #ffcc00;--bad: #ff4d4f;--r-sm: 6px;--r-md: 10px;--r-lg: 16px;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-6: 24px;--font: ui-monospace, "SF Mono", "Cascadia Mono", Menlo, monospace;--font-ui: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;color-scheme:dark}[data-theme=light]{--bg: #f6f7f9;--surface: #ffffff;--surface-2: #eef0f4;--line: #d5d9e0;--text: #1b1e24;--text-dim: #5f6672;--good: #1f9d4d;--warn: #b58900;--bad: #d7373f;color-scheme:light}*{box-sizing:border-box;touch-action:manipulation}html,body{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:var(--font-ui);-webkit-font-smoothing:antialiased;height:100%}body{display:flex;flex-direction:column;min-height:100dvh}button{font:inherit;color:inherit;background:none;border:none;cursor:pointer;padding:0}.ps-num{font-family:var(--font);font-variant-numeric:tabular-nums}.ps-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);min-height:44px;min-width:44px;padding:0 var(--sp-4);border-radius:var(--r-md);background:var(--surface-2);border:1px solid var(--line);color:var(--text);font-size:15px;font-weight:600;transition:background .12s ease,border-color .12s ease;user-select:none;-webkit-user-select:none}.ps-btn:hover{background:var(--surface)}.ps-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.ps-btn--primary{background:var(--accent);border-color:var(--accent);color:#fff}.ps-btn--primary:hover{filter:brightness(1.1);background:var(--accent)}.ps-btn--ghost{background:transparent;border-color:transparent}.ps-btn--icon{padding:0;width:44px}.ps-btn[disabled]{opacity:.45;cursor:default}.ps-btn[aria-pressed=true]{border-color:var(--accent);color:var(--accent)}.ps-header{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--line);background:var(--surface);position:sticky;top:0;z-index:10;padding-top:max(var(--sp-2),env(safe-area-inset-top))}.ps-header__title{font-weight:800;font-size:17px;letter-spacing:.02em;margin-right:var(--sp-1)}.ps-header__title em{color:var(--accent);font-style:normal}.ps-header__sub{color:var(--text-dim);font-size:13px}.ps-header__spacer{flex:1}.ps-modal-backdrop{position:fixed;inset:0;background:#0000008c;display:flex;align-items:center;justify-content:center;z-index:100;padding:var(--sp-4);animation:ps-fade-in .12s ease}.ps-modal{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);width:min(440px,100%);max-height:min(85dvh,700px);display:flex;flex-direction:column;overflow:hidden;animation:ps-pop-in .14s ease}.ps-modal__head{display:flex;align-items:center;padding:var(--sp-4);border-bottom:1px solid var(--line)}.ps-modal__title{font-size:17px;font-weight:800;flex:1;margin:0}.ps-modal__body{padding:var(--sp-4);overflow-y:auto}.ps-modal__actions{display:flex;gap:var(--sp-2);padding:var(--sp-4);border-top:1px solid var(--line)}.ps-modal__actions>.ps-btn{flex:1}@keyframes ps-fade-in{0%{opacity:0}}@keyframes ps-pop-in{0%{opacity:0;transform:scale(.96)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:1ms!important;transition-duration:1ms!important}}.ps-stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--sp-2);text-align:center;margin-bottom:var(--sp-4)}.ps-stat__value{font-size:24px;font-weight:800;font-family:var(--font)}.ps-stat__label{font-size:11px;color:var(--text-dim);text-transform:uppercase;letter-spacing:.06em}.ps-hist{display:flex;flex-direction:column;gap:var(--sp-1)}.ps-hist__row{display:flex;align-items:center;gap:var(--sp-2);font-size:13px}.ps-hist__label{width:90px;color:var(--text-dim);text-align:right;flex-shrink:0}.ps-hist__track{flex:1;background:var(--surface-2);border-radius:var(--r-sm);overflow:hidden;height:20px}.ps-hist__bar{height:100%;background:var(--accent);border-radius:var(--r-sm);min-width:2px;display:flex;align-items:center;justify-content:flex-end;padding-right:var(--sp-1);color:#fff;font-size:11px;font-family:var(--font)}.ps-setting{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);padding:var(--sp-3) 0;border-bottom:1px solid var(--line)}.ps-setting:last-child{border-bottom:none}.ps-setting__label{font-size:15px}.ps-setting__hint{font-size:12px;color:var(--text-dim);margin-top:2px}.ps-toggle{position:relative;width:52px;height:30px;border-radius:15px;background:var(--surface-2);border:1px solid var(--line);flex-shrink:0;transition:background .15s ease}.ps-toggle:after{content:"";position:absolute;top:2px;left:2px;width:24px;height:24px;border-radius:50%;background:var(--text-dim);transition:transform .15s ease,background .15s ease}.ps-toggle[aria-checked=true]{background:var(--accent);border-color:var(--accent)}.ps-toggle[aria-checked=true]:after{transform:translate(22px);background:#fff}.ps-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.ps-seg{display:inline-flex;border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden}.ps-seg>button{padding:var(--sp-2) var(--sp-3);font-size:13px;min-height:36px;background:var(--surface-2);color:var(--text-dim)}.ps-seg>button[aria-pressed=true]{background:var(--accent);color:#fff}.ps-toast-host{position:fixed;bottom:calc(var(--sp-6) + env(safe-area-inset-bottom));left:50%;transform:translate(-50%);z-index:200;display:flex;flex-direction:column;gap:var(--sp-2);align-items:center;pointer-events:none}.ps-toast{background:var(--surface-2);border:1px solid var(--line);color:var(--text);border-radius:var(--r-md);padding:var(--sp-2) var(--sp-4);font-size:14px;box-shadow:0 4px 16px #00000059;animation:ps-pop-in .14s ease}.ps-kbd{font-family:var(--font);font-size:12px;background:var(--surface-2);border:1px solid var(--line);border-bottom-width:2px;border-radius:var(--r-sm);padding:1px 6px}.ps-cal{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--sp-1)}.ps-cal__day{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border-radius:var(--r-sm);background:var(--surface-2);border:1px solid var(--line);font-size:12px;font-family:var(--font);color:var(--text-dim)}.ps-cal__day--done{background:var(--accent);border-color:var(--accent);color:#fff}.ps-cal__day--today{outline:2px solid var(--accent);outline-offset:1px}.ps-cal__day--future{opacity:.35}:root{--accent: #f5a524;--cell-fill: #3d3427}:root[data-theme=light]{--cell-fill: #2b2417}#app,.ng-main{flex:1;display:flex;flex-direction:column;min-height:0}.ng-timer{font-size:13px;color:var(--text-dim);margin-right:var(--sp-1)}.ps-header__sub{min-width:0;flex-shrink:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:540px){.ps-header{gap:2px}.ps-header .ps-btn--icon{width:38px;min-width:38px}.ng-timer{font-size:12px}}.ng-viewport{flex:1;position:relative;overflow:hidden;min-height:0}.ng-viewport,.ng-viewport *{touch-action:none}.ng-stage{position:absolute;left:0;top:0;transform-origin:0 0;will-change:transform}.ng-board{--cell: 24px;display:grid;grid-template-columns:auto auto;grid-template-rows:auto auto;padding:var(--sp-2);user-select:none;-webkit-user-select:none}.ng-cells{display:grid;background:var(--surface);border:2px solid var(--line)}.ng-cell{width:var(--cell);height:var(--cell);border-right:1px solid var(--line);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:center;font-family:var(--font);font-size:calc(var(--cell) * .62);color:var(--text-dim);background:var(--surface)}.ng-cell--x5{border-left:2px solid var(--text-dim);margin-left:-1px}.ng-cell--y5{border-top:2px solid var(--text-dim);margin-top:-1px}.ng-cell--hl{background:color-mix(in srgb,var(--accent) 12%,var(--surface))}.ng-cell--hl2{background:color-mix(in srgb,var(--accent) 26%,var(--surface))}.ng-cell--fill{background:var(--text)}.ng-cell--fill.ng-cell--hl,.ng-cell--fill.ng-cell--hl2{background:color-mix(in srgb,var(--accent) 30%,var(--text))}:root[data-colorblind=true] .ng-cell--fill{background-image:repeating-linear-gradient(45deg,transparent 0 3px,rgb(127 127 127 / 35%) 3px 5px)}.ng-cell--cursor{outline:2px solid var(--accent);outline-offset:-2px;z-index:1}.ng-cell--flash{animation:ng-reject .32s ease}@keyframes ng-reject{0%,to{background:var(--surface)}40%{background:var(--bad)}}.ng-cell--bad{outline:2px dashed var(--bad);outline-offset:-3px;color:var(--bad)}.ng-cell--hint{animation:ng-hint .7s ease}@keyframes ng-hint{0%{box-shadow:inset 0 0 0 99px color-mix(in srgb,var(--accent) 45%,transparent)}to{box-shadow:inset 0 0 0 99px transparent}}.ng-board--won .ng-cells{border-color:var(--accent)}.ng-cell--art{border-color:transparent}.ng-rowclues{display:grid;grid-auto-rows:var(--cell);align-items:stretch}.ng-colclues{display:grid;align-items:end}.ng-clue{display:flex;gap:calc(var(--cell) * .18);color:var(--text);font-family:var(--font);font-variant-numeric:tabular-nums;font-size:max(9px,calc(var(--cell) * .5));line-height:1;transition:opacity .14s ease}.ng-clue--row{align-items:center;justify-content:flex-end;padding-right:6px}.ng-clue--col{flex-direction:column;align-items:center;justify-content:flex-end;padding-bottom:6px}.ng-clue--done{opacity:.28}.ng-clue--hl span:last-child{color:var(--accent)}.ng-clue--hl{color:var(--accent)}.ng-toolbar{display:flex;gap:var(--sp-2);align-items:stretch;justify-content:center;padding:var(--sp-2) var(--sp-3);padding-bottom:max(var(--sp-2),env(safe-area-inset-bottom));border-top:1px solid var(--line);background:var(--surface)}.ng-tool-toggle{display:flex;border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden}.ng-tool{display:flex;align-items:center;gap:var(--sp-2);min-height:52px;padding:0 var(--sp-4);font-size:15px;font-weight:700;background:var(--surface-2);color:var(--text-dim)}.ng-tool[aria-pressed=true]{background:var(--accent);color:#fff}.ng-tool__swatch{width:18px;height:18px;border-radius:4px;border:2px solid currentcolor;display:inline-flex;align-items:center;justify-content:center;font-size:14px;font-family:var(--font)}.ng-tool__swatch--fill{background:currentcolor}.ng-undo-badge{font-size:11px;color:var(--text-dim);margin-left:4px}.ps-btn[disabled] .ng-undo-badge{color:inherit}.ng-win-frame{display:flex;justify-content:center;margin-bottom:var(--sp-3)}.ng-win-pic{border:6px solid var(--surface-2);outline:1px solid var(--line);border-radius:4px;image-rendering:pixelated}.ng-win-sub{text-align:center;color:var(--text-dim);font-size:14px;margin-bottom:var(--sp-2)}.ng-win-progress{text-align:center;font-family:var(--font);color:var(--accent);font-size:13px;margin-bottom:var(--sp-2)}.ng-win-row{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-2);text-align:center;margin-top:var(--sp-3)}.ng-streak-risk{color:var(--warn);font-size:13px;margin-bottom:var(--sp-3)}.ng-album-row{display:flex;align-items:center;gap:var(--sp-3);width:100%;text-align:left;padding:var(--sp-3);border-radius:var(--r-md);border:1px solid var(--line);background:var(--surface-2);margin-bottom:var(--sp-2)}.ng-album-row:hover{border-color:var(--accent)}.ng-album-row__info{flex:1;min-width:0}.ng-album-row__title{font-weight:700;margin-bottom:2px}.ng-album-row__count{color:var(--text-dim);font-size:13px}.ng-badge{color:var(--accent)}.ng-progress{height:6px;border-radius:3px;background:var(--surface);overflow:hidden;margin-top:var(--sp-2)}.ng-progress__bar{height:100%;background:var(--accent);border-radius:3px;transition:width .15s ease}.ng-progress--big{height:10px;margin-top:var(--sp-3)}.ng-album-banner{text-align:center;color:var(--accent);font-weight:700;padding:var(--sp-2);margin-bottom:var(--sp-2);border:1px dashed var(--accent);border-radius:var(--r-md)}.ng-album-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:var(--sp-3)}.ng-slot{display:flex;flex-direction:column;align-items:center;gap:var(--sp-1)}.ng-slot__frame{width:96px;height:96px;display:flex;align-items:center;justify-content:center;background:var(--surface-2);border:4px solid var(--surface-2);outline:1px solid var(--line);border-radius:4px}.ng-slot--done .ng-slot__frame{border-color:color-mix(in srgb,var(--accent) 40%,var(--surface-2))}.ng-slot--capstone .ng-slot__frame,button.ng-slot:hover .ng-slot__frame{outline-color:var(--accent)}.ng-slot__frame--silhouette{background:repeating-linear-gradient(45deg,var(--surface-2) 0 8px,color-mix(in srgb,var(--text-dim) 12%,var(--surface-2)) 8px 16px);filter:blur(.4px)}.ng-slot__q{font-size:26px;color:var(--text-dim);opacity:.6}.ng-slot__lock{font-size:22px}.ng-slot__title{font-size:11px;color:var(--text-dim);text-align:center;max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ng-thumb{image-rendering:pixelated;max-width:100%;max-height:100%}.ng-cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--sp-3)}.ng-cal-title{font-family:var(--font);font-size:14px}.ng-cal__day{overflow:hidden;padding:2px}.ng-cal__day--done{background:var(--surface);border-color:var(--accent)}.ng-progress-overlay{position:fixed;inset:0;z-index:150;display:flex;align-items:center;justify-content:center;background:#00000073}.ng-progress-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--sp-6);width:min(320px,80vw);text-align:center}.ng-mini{display:inline-flex;flex-direction:column;gap:2px;margin:var(--sp-2) 0}.ng-mini__row{display:flex;gap:2px;align-items:center}.ng-mini__cell{width:22px;height:22px;border:1px solid var(--line);border-radius:3px;background:var(--surface-2);display:inline-flex;align-items:center;justify-content:center;font-family:var(--font);color:var(--text-dim)}.ng-mini__cell--fill{background:var(--text)}.ng-mini__cell--maybe{background:color-mix(in srgb,var(--accent) 45%,var(--surface-2))}.ng-mini__clue{margin-left:var(--sp-2);font-family:var(--font);font-size:12px;color:var(--text-dim)}.st-root{padding:var(--sp-4);max-width:720px;margin:0 auto}.st-title{font-size:20px}.st-controls{display:flex;flex-wrap:wrap;gap:var(--sp-2);align-items:center;margin-bottom:var(--sp-3)}.st-grid,.st-grid *{touch-action:none}.st-grid{display:grid;gap:1px;background:var(--line);border:2px solid var(--line);max-width:560px;aspect-ratio:1;margin-bottom:var(--sp-3)}.st-cell{background:var(--surface);aspect-ratio:1}.st-cell--on{background:var(--text)}.st-report{font-family:var(--font);font-size:13px;background:var(--surface-2);border-radius:var(--r-md);padding:var(--sp-3);white-space:pre-wrap}.st-export{width:100%;font-family:var(--font);font-size:12px;background:var(--surface-2);color:var(--text);border:1px solid var(--line);border-radius:var(--r-md);padding:var(--sp-2)}
