:root{--bg: #f4f1ec;--bg-elev: #fffefc;--bg-sunken: #eae6df;--bg-invert: #16151a;--ink: #17161b;--ink-2: #55524c;--ink-3: #918d85;--ink-4: #b9b5ad;--on-invert: #f7f5f1;--line: rgba(23, 22, 27, .085);--line-2: rgba(23, 22, 27, .16);--accent: #b4552d;--good: #2f6b4f;--bad: #a33a2c;--r-sm: 10px;--r: 16px;--r-lg: 22px;--r-xl: 28px;--serif: "Songti SC", "Source Han Serif SC", "Noto Serif SC", "Times New Roman", ui-serif, Georgia, serif;--sans: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace;--ease: cubic-bezier(.22, 1, .36, 1);--dur: .42s;--tab-h: 62px;--pad: 20px;--shadow: 0 1px 2px rgba(23, 22, 27, .04), 0 8px 24px -16px rgba(23, 22, 27, .18)}[data-theme=dark]{--bg: #121214;--bg-elev: #1b1b1e;--bg-sunken: #0d0d0f;--bg-invert: #f2f0ec;--ink: #f0eee9;--ink-2: #a8a49c;--ink-3: #7a766f;--ink-4: #56534d;--on-invert: #131215;--line: rgba(240, 238, 233, .1);--line-2: rgba(240, 238, 233, .2);--good: #6fae8c;--bad: #d4776a;--shadow: 0 1px 2px rgba(0, 0, 0, .4), 0 12px 32px -20px rgba(0, 0, 0, .7)}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{margin:0;padding:0;background:var(--bg);color:var(--ink)}body{font-family:var(--sans);font-size:15px;line-height:1.6;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overscroll-behavior-y:none}button{font:inherit;color:inherit;background:none;border:none;padding:0;cursor:pointer}a{color:inherit;text-decoration:none}::selection{background:color-mix(in srgb,var(--accent) 24%,transparent)}#root{min-height:100dvh}.app{max-width:520px;margin:0 auto;min-height:100dvh;display:flex;flex-direction:column;background:var(--bg)}.screen{flex:1;padding-bottom:calc(var(--tab-h) + env(safe-area-inset-bottom) + 28px)}.pad{padding-left:var(--pad);padding-right:var(--pad)}.topbar{position:sticky;top:0;z-index:30;padding:calc(env(safe-area-inset-top) + 18px) var(--pad) 12px;background:color-mix(in srgb,var(--bg) 82%,transparent);backdrop-filter:saturate(180%) blur(18px);-webkit-backdrop-filter:saturate(180%) blur(18px);border-bottom:1px solid transparent;transition:border-color var(--dur) var(--ease)}.topbar.scrolled{border-bottom-color:var(--line)}.topbar-row{display:flex;align-items:flex-end;justify-content:space-between;gap:12px}.eyebrow{font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-3);font-weight:500}.title{font-family:var(--serif);font-size:27px;line-height:1.2;font-weight:600;letter-spacing:-.01em;margin:4px 0 0}.subtitle{color:var(--ink-2);font-size:13.5px;margin-top:6px}.icon-btn{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;border:1px solid var(--line);color:var(--ink-2);background:var(--bg-elev);flex:none;transition:all .2s var(--ease)}.icon-btn:active{transform:scale(.94)}.card{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--r-lg);padding:18px;box-shadow:var(--shadow)}.card-flat{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}.section{margin-top:30px}.section-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:12px}.section-title{font-family:var(--serif);font-size:17px;font-weight:600;letter-spacing:.01em}.section-more{font-size:12.5px;color:var(--ink-3)}.hairline{height:1px;background:var(--line);border:0;margin:0}.t-xs{font-size:11.5px}.t-sm{font-size:13px}.t-mut{color:var(--ink-2)}.t-dim{color:var(--ink-3)}.t-faint{color:var(--ink-4)}.t-serif{font-family:var(--serif)}.t-num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}.t-body{font-size:15.5px;line-height:1.85;color:var(--ink-2)}.t-body p{margin:0 0 1.05em}.t-body p:last-child{margin-bottom:0}.t-good{color:var(--good)}.t-bad{color:var(--bad)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:50px;padding:0 22px;border-radius:999px;background:var(--ink);color:var(--bg);font-size:15px;font-weight:550;letter-spacing:.01em;transition:transform .18s var(--ease),opacity .18s var(--ease)}.btn:active{transform:scale(.975);opacity:.88}.btn.block{width:100%}.btn.ghost{background:transparent;color:var(--ink);border:1px solid var(--line-2)}.btn.quiet{background:var(--bg-sunken);color:var(--ink);border:1px solid var(--line)}.btn.sm{height:38px;padding:0 16px;font-size:13.5px}.btn:disabled{opacity:.4;pointer-events:none}.chip{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 13px;border-radius:999px;border:1px solid var(--line);background:var(--bg-elev);color:var(--ink-2);font-size:12.5px;white-space:nowrap;transition:all .2s var(--ease)}.chip.on{background:var(--ink);color:var(--bg);border-color:var(--ink)}.chip-row{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;padding:2px 0;-webkit-overflow-scrolling:touch}.chip-row::-webkit-scrollbar{display:none}.tag{display:inline-block;padding:3px 9px;border-radius:6px;background:var(--bg-sunken);color:var(--ink-3);font-size:10.5px;letter-spacing:.04em}.bar{height:4px;border-radius:999px;background:var(--bg-sunken);overflow:hidden}.bar>i{display:block;height:100%;border-radius:999px;background:var(--accent);transition:width .6s var(--ease)}.ring{transform:rotate(-90deg)}.ring circle{fill:none;stroke-linecap:round}.stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border-radius:var(--r);overflow:hidden}.stat{background:var(--bg-elev);padding:14px 10px;text-align:center}.stat b{display:block;font-family:var(--serif);font-size:24px;font-weight:600;line-height:1.2;font-variant-numeric:tabular-nums}.stat span{font-size:11px;color:var(--ink-3);letter-spacing:.06em}.vis{width:100%;display:block}.vis svg{display:block;width:100%;height:auto}.vis-caption{font-size:11.5px;color:var(--ink-3);margin-top:9px;line-height:1.55}.vis-frame{border-radius:var(--r);overflow:hidden;border:1px solid var(--line);background:var(--bg-sunken)}.swatch-row{display:flex;gap:3px}.swatch-grid{display:grid;gap:3px}.swatch{position:relative;overflow:hidden}.swatch-row .swatch,.swatch-grid .swatch{flex:1;border-radius:4px}.swatch-label{font-size:10px;color:var(--ink-3);margin-top:5px;text-align:center;font-variant-numeric:tabular-nums}.swatch-stack{display:flex;flex-direction:column;gap:3px}.swatch-stack .swatch{border-radius:4px}.type-vis{border-radius:var(--r);overflow:hidden;border:1px solid var(--line);position:relative}.type-vis .tv-rule{position:absolute;top:0;left:0;right:0;height:1px}.type-line{white-space:pre-wrap}.outfit-grid{display:grid;gap:10px 4px;padding:4px 0 2px}.outfit-cell{display:flex;flex-direction:column;align-items:center;gap:6px}.outfit-cell svg{width:100%;max-width:78px;height:auto}.outfit-label{font-size:10.5px;color:var(--ink-3);text-align:center;line-height:1.3}.duel-options{display:grid;gap:12px}.duel-opt{display:block;width:100%;text-align:left;border-radius:var(--r-lg);border:1px solid var(--line);background:var(--bg-elev);padding:12px;position:relative;transition:all .28s var(--ease)}.duel-opt:active{transform:scale(.99)}.duel-opt.picked{border-color:var(--ink)}.duel-opt.win{border-color:var(--good);box-shadow:0 0 0 1px var(--good) inset}.duel-opt.lose{border-color:var(--bad);opacity:.72}.duel-opt:disabled{cursor:default}.duel-label{display:flex;align-items:center;justify-content:space-between;font-size:12px;letter-spacing:.09em;color:var(--ink-3);margin-bottom:10px;text-transform:uppercase}.duel-verdict{font-size:11px;letter-spacing:.06em;font-weight:600}.duel-verdict.win{color:var(--good)}.duel-verdict.lose{color:var(--bad)}.verdict-card{border-radius:var(--r-lg);border:1px solid var(--line);background:var(--bg-elev);padding:18px;animation:rise .5s var(--ease) both}.verdict-head{display:flex;align-items:center;gap:8px;font-family:var(--serif);font-size:16px;margin-bottom:10px}.dot{width:8px;height:8px;border-radius:50%;flex:none}.rule-callout{margin-top:14px;padding:13px 15px;border-radius:var(--r);background:var(--bg-sunken);border-left:2px solid var(--accent);font-size:14px;line-height:1.7}.opt{display:flex;align-items:flex-start;gap:12px;width:100%;text-align:left;padding:15px 16px;border-radius:var(--r);border:1px solid var(--line);background:var(--bg-elev);font-size:14.5px;line-height:1.55;transition:all .24s var(--ease)}.opt+.opt{margin-top:9px}.opt:active{transform:scale(.994)}.opt .key{width:22px;height:22px;border-radius:50%;border:1px solid var(--line-2);display:grid;place-items:center;font-size:11px;color:var(--ink-3);flex:none;margin-top:1px}.opt.correct{border-color:var(--good)}.opt.correct .key{background:var(--good);border-color:var(--good);color:#fff}.opt.wrong{border-color:var(--bad)}.opt.wrong .key{background:var(--bad);border-color:var(--bad);color:#fff}.opt:disabled{cursor:default}.opt.dim{opacity:.5}.mix-preview{display:grid;grid-template-columns:1fr 1fr;gap:12px}.mix-pane{border-radius:var(--r);border:1px solid var(--line);overflow:hidden}.mix-pane .fill{height:118px}.mix-pane .meta{padding:9px 11px;font-size:11px;color:var(--ink-3);display:flex;justify-content:space-between;gap:6px;font-variant-numeric:tabular-nums;background:var(--bg-elev)}.slider{display:grid;grid-template-columns:34px 1fr 46px;align-items:center;gap:12px;margin-top:16px}.slider label{font-size:11.5px;color:var(--ink-3);letter-spacing:.06em}.slider .val{font-size:12px;color:var(--ink-2);text-align:right;font-variant-numeric:tabular-nums}input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:30px;background:transparent;margin:0;cursor:grab}input[type=range]::-webkit-slider-runnable-track{height:10px;background:var(--track, var(--line-2));border-radius:6px;border:1px solid var(--line);box-sizing:border-box}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:24px;height:24px;border-radius:50%;background:var(--bg-elev);border:1px solid var(--line-2);box-shadow:0 2px 8px #00000038;margin-top:-7px}input[type=range]::-moz-range-track{height:10px;background:var(--track, var(--line-2));border-radius:6px;border:1px solid var(--line)}input[type=range]::-moz-range-thumb{width:22px;height:22px;border-radius:50%;background:var(--bg-elev);border:1px solid var(--line-2)}.hue-track{height:2px;border-radius:2px;background:linear-gradient(to right,red,#ff0 17%,#0f0 33%,#0ff,#00f 67%,#f0f 83%,red)}.pick-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}.pick{aspect-ratio:1;border-radius:10px;border:1px solid var(--line);position:relative;transition:transform .2s var(--ease)}.pick:active{transform:scale(.92)}.pick.on:after{content:"";position:absolute;inset:-3px;border-radius:13px;border:1.5px solid var(--ink)}.scene-stage{border-radius:var(--r);border:1px solid var(--line);overflow:hidden;padding:18px;min-height:130px;display:flex;flex-direction:column;justify-content:space-between}.mod-card{display:flex;align-items:center;gap:14px;width:100%;text-align:left;padding:16px;border-radius:var(--r-lg);border:1px solid var(--line);background:var(--bg-elev);transition:all .24s var(--ease)}.mod-card:active{transform:scale(.992)}.mod-mark{width:44px;height:44px;border-radius:12px;flex:none;display:grid;place-items:center;font-family:var(--serif);font-size:18px;font-weight:600}.concept-row{display:flex;gap:14px;align-items:flex-start;width:100%;text-align:left;padding:15px 2px;border-bottom:1px solid var(--line)}.concept-row:last-child{border-bottom:0}.concept-row .idx{font-family:var(--serif);font-size:12px;color:var(--ink-4);width:20px;flex:none;padding-top:3px;font-variant-numeric:tabular-nums}.concept-row .ct{font-size:15px;font-weight:550;margin-bottom:3px}.concept-row .cs{font-size:12.5px;color:var(--ink-3);line-height:1.55}.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:40;max-width:520px;margin:0 auto;height:calc(var(--tab-h) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);display:grid;grid-template-columns:repeat(4,1fr);background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:saturate(180%) blur(20px);-webkit-backdrop-filter:saturate(180%) blur(20px);border-top:1px solid var(--line)}.tab{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;color:var(--ink-4);transition:color .24s var(--ease)}.tab.on{color:var(--ink)}.tab span{font-size:10px;letter-spacing:.06em}.row{display:flex;align-items:center;gap:10px}.row-between{display:flex;align-items:center;justify-content:space-between;gap:12px}.col{display:flex;flex-direction:column}.stack>*+*{margin-top:12px}.grow{flex:1;min-width:0}.fade-in{animation:fade .4s var(--ease) both}@keyframes fade{0%{opacity:0}}@keyframes rise{0%{opacity:0;transform:translateY(10px)}}.rise{animation:rise .5s var(--ease) both}.sheet-backdrop{position:fixed;inset:0;z-index:60;background:#0a0a0c6b;backdrop-filter:blur(3px);animation:fade .3s ease both}.sheet{position:fixed;left:0;right:0;bottom:0;z-index:61;max-width:520px;margin:0 auto;max-height:88dvh;overflow-y:auto;background:var(--bg);border-radius:var(--r-xl) var(--r-xl) 0 0;padding:10px var(--pad) calc(var(--pad) + env(safe-area-inset-bottom));animation:rise .44s var(--ease) both}.sheet-grip{width:38px;height:4px;border-radius:99px;background:var(--line-2);margin:6px auto 16px}.toast{position:fixed;left:50%;bottom:calc(var(--tab-h) + env(safe-area-inset-bottom) + 18px);transform:translate(-50%);z-index:70;background:var(--bg-invert);color:var(--on-invert);padding:10px 18px;border-radius:999px;font-size:13px;animation:rise .35s var(--ease) both;white-space:nowrap}.seg{display:flex;padding:3px;border-radius:999px;background:var(--bg-sunken);border:1px solid var(--line)}.seg button{flex:1;height:34px;border-radius:999px;font-size:13px;color:var(--ink-3);transition:all .24s var(--ease)}.seg button.on{background:var(--bg-elev);color:var(--ink);box-shadow:0 1px 3px #0000001a;font-weight:550}.field{width:100%;height:46px;padding:0 14px;border-radius:var(--r-sm);border:1px solid var(--line-2);background:var(--bg-elev);color:var(--ink);font-size:14px;font-family:var(--sans);outline:none}.field:focus{border-color:var(--ink-3)}.field::placeholder{color:var(--ink-4)}.dots{display:flex;gap:5px;align-items:center}.dots i{width:5px;height:5px;border-radius:50%;background:var(--line-2);display:block}.dots i.on{background:var(--ink)}.dots i.done{background:var(--ink-3)}.heat{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}.heat i{aspect-ratio:1;border-radius:3px;background:var(--bg-sunken);border:1px solid var(--line);display:block}.empty{text-align:center;color:var(--ink-3);font-size:13px;padding:40px 20px}
