.app-shell[data-v-16e33a7a]{min-height:100dvh}.boot[data-v-16e33a7a]{min-height:100dvh;font-family:var(--font-display);color:var(--color-on-green);background:linear-gradient(165deg, var(--color-line) 0%, var(--color-line-deep) 100%);place-items:center;font-size:1.6rem;display:grid}.big-btn[data-v-86466763]{min-height:var(--touch-min);border-radius:var(--radius-md);font-family:var(--font-display);letter-spacing:.04em;cursor:pointer;box-shadow:var(--shadow-soft);-webkit-tap-highlight-color:transparent;border:none;padding:12px 24px;font-size:1.4rem;transition:transform .16s,box-shadow .16s,background .16s,opacity .16s}.big-btn.block[data-v-86466763]{width:100%;display:block}.big-btn[data-v-86466763]:active:not(:disabled){box-shadow:var(--shadow-press);transform:scale(.96)translateY(2px)}.big-btn[data-v-86466763]:disabled,.big-btn.disabled[data-v-86466763]{opacity:.38;cursor:not-allowed;box-shadow:none;filter:grayscale(.2)}.primary[data-v-86466763]{background:linear-gradient(165deg, var(--color-line) 0%, var(--color-line-deep) 100%);color:var(--color-on-green);box-shadow:var(--shadow-green)}.secondary[data-v-86466763]{background:var(--color-surface);color:var(--color-line-deep);border:3px solid var(--color-line-soft)}.ghost[data-v-86466763]{color:var(--color-ink-muted);box-shadow:none;background:0 0;min-height:52px;font-size:1.15rem}.ghost[data-v-86466763]:active:not(:disabled){background:var(--color-line-wash);box-shadow:none}.accent[data-v-86466763]{background:linear-gradient(165deg, #ff9440 0%, var(--color-accent) 55%, var(--color-accent-deep) 100%);color:#fff;box-shadow:0 12px 28px #e8650047}.md[data-v-86466763]{min-height:56px;padding:12px 22px;font-size:1.15rem}.switcher[data-v-64810697]{border-radius:var(--radius-md);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#ffffff38;gap:6px;padding:5px;display:flex}.segment[data-v-64810697]{border-radius:calc(var(--radius-md) - 4px);min-height:44px;color:var(--color-on-green);font-family:var(--font-display);letter-spacing:.02em;cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:none;flex:1;font-size:1.05rem;font-weight:800;transition:background .16s,color .16s,transform .16s}.segment[data-v-64810697]:not(.active):hover{background:#ffffff24}.segment[data-v-64810697]:active:not(.active){transform:scale(.96)}.segment.active[data-v-64810697]{box-shadow:0 4px 12px #0000002e}.metro[data-v-f699fd0e]{-webkit-overflow-scrolling:touch;scrollbar-width:thin;padding:16px 4px 12px;position:relative;overflow-x:auto}.rail[data-v-f699fd0e]{background:color-mix(in srgb, var(--line,#00b33c) 70%, #9ecfb0);z-index:0;border-radius:999px;height:8px;position:absolute;top:32px;left:0;right:0}.stations[data-v-f699fd0e]{z-index:1;gap:10px;min-width:max-content;padding-bottom:4px;display:flex;position:relative}.stop[data-v-f699fd0e]{width:80px;min-height:var(--touch-min);cursor:pointer;color:var(--color-ink);-webkit-tap-highlight-color:transparent;background:0 0;border:none;flex-direction:column;align-items:center;gap:8px;padding:0;transition:transform .16s;display:flex;position:relative}.stop[data-v-f699fd0e]:active:not(:disabled){transform:scale(.95)}.stop.locked[data-v-f699fd0e]{cursor:not-allowed;color:var(--color-locked)}.dot[data-v-f699fd0e]{background:var(--color-surface);border:4px solid var(--color-rail);border-radius:50%;width:24px;height:24px;margin-top:16px;transition:transform .2s,border-color .2s,background .2s}.stop.unlocked .dot[data-v-f699fd0e]{border-color:var(--color-line)}.stop.current .dot[data-v-f699fd0e]{background:var(--color-line);border-color:var(--color-line-deep);animation:1.8s ease-in-out infinite pulse-glow;transform:scale(1.35)}.label[data-v-f699fd0e]{text-align:center;font-size:.85rem;font-weight:800;line-height:1.25}.train[data-v-f699fd0e]{font-size:1.45rem;animation:.9s ease-in-out infinite train-chug;position:absolute;top:-6px}.compact .stop[data-v-f699fd0e]{width:64px}.compact .label[data-v-f699fd0e]{font-size:.74rem}.compact .dot[data-v-f699fd0e]{border-width:3px;width:20px;height:20px}.home[data-v-5e12e943]{min-height:100dvh}.hero-band[data-v-5e12e943]{background:linear-gradient(160deg, var(--color-line) 0%, var(--color-line-deep) 100%);color:var(--color-on-green);text-align:center;padding:max(28px, env(safe-area-inset-top,0px)) 20px 36px;border-radius:0 0 var(--radius-xl) var(--radius-xl);box-shadow:var(--shadow-green)}.brand[data-v-5e12e943]{font-family:var(--font-display);letter-spacing:.1em;margin:0;font-size:clamp(2.6rem,9vw,3.6rem);line-height:1.05}.tagline[data-v-5e12e943]{opacity:.92;margin:10px 0 0;font-size:clamp(1.15rem,3.5vw,1.4rem);font-weight:800}.line-switcher[data-v-5e12e943]{max-width:320px;margin:18px auto 0}.home-body[data-v-5e12e943]{flex-direction:column;gap:20px;padding-top:20px;display:flex}.focus[data-v-5e12e943]{background:var(--color-surface);border-radius:var(--radius-xl);box-shadow:var(--shadow-soft);border:3px solid var(--color-line-soft);text-align:center;padding:28px 22px 26px}.train-badge[data-v-5e12e943]{font-size:3rem;line-height:1;animation:1s ease-in-out infinite train-chug}.eyebrow[data-v-5e12e943]{color:var(--color-ink-muted);margin:10px 0 0;font-size:1.05rem;font-weight:800}.station-name[data-v-5e12e943]{font-family:var(--font-display);color:var(--color-line-deep);margin:4px 0 8px;font-size:clamp(2.4rem,8vw,3.2rem);line-height:1.1}.hint[data-v-5e12e943]{color:var(--color-ink-muted);margin:0 0 20px;font-size:1.05rem;font-weight:700}.char-row[data-v-5e12e943]{grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:24px;display:grid}.char-chip[data-v-5e12e943]{min-width:var(--chip-min);min-height:var(--chip-min);border:3px solid var(--color-line-wash);border-radius:var(--radius-md);background:var(--color-line-wash);cursor:pointer;-webkit-tap-highlight-color:transparent;flex-direction:column;justify-content:center;align-items:center;gap:2px;padding:10px 8px;transition:transform .15s,background .15s,border-color .15s;display:flex}.char-chip[data-v-5e12e943]:active:not(:disabled){background:var(--color-line-soft);border-color:var(--color-line);transform:scale(.94)}.char-chip[data-v-5e12e943]:disabled{opacity:.45;cursor:wait}.emoji[data-v-5e12e943]{font-size:1.4rem;line-height:1}.han[data-v-5e12e943]{color:var(--color-ink);font-size:1.85rem;font-weight:800;line-height:1.1}.py[data-v-5e12e943]{color:var(--color-ink-muted);font-size:.82rem;font-weight:700}.rail-strip[data-v-5e12e943]{background:var(--color-surface);border-radius:var(--radius-lg);border:3px solid var(--color-line-soft);box-shadow:var(--shadow-soft);padding:14px 10px 8px}.section-head[data-v-5e12e943]{justify-content:space-between;align-items:center;padding:0 8px 6px;display:flex}.section-head h2[data-v-5e12e943]{font-family:var(--font-display);color:var(--color-line-deep);margin:0;font-size:1.2rem}.link[data-v-5e12e943]{color:var(--color-line-deep);cursor:pointer;background:0 0;border:none;min-height:44px;padding:0 4px;font-size:.95rem;font-weight:800}.parent-entry[data-v-5e12e943]{text-align:center;padding-bottom:8px}@media (width>=900px){.hero-band[data-v-5e12e943]{border-radius:0 0 var(--radius-xl) var(--radius-xl);padding-bottom:44px}.home-body[data-v-5e12e943]{grid-template-rows:auto auto;grid-template-columns:1.2fr .8fr;align-items:start;gap:24px;padding-top:28px;display:grid}.focus[data-v-5e12e943]{grid-area:1/1/span 2;padding:36px 32px}.rail-strip[data-v-5e12e943]{grid-area:1/2}.parent-entry[data-v-5e12e943]{grid-area:2/2}}.map-page[data-v-f58d7950]{flex-direction:column;gap:8px;display:flex}.head .page-title[data-v-f58d7950]{color:var(--color-line-deep)}.map-card[data-v-f58d7950]{background:var(--color-surface);border-radius:var(--radius-xl);box-shadow:var(--shadow-soft);border:3px solid var(--color-line-soft);margin-bottom:8px;padding:22px 12px;overflow:hidden}.legend[data-v-f58d7950]{text-align:center;color:var(--color-ink-muted);margin:0 0 20px;font-size:1.05rem;font-weight:700}.arrive[data-v-cfea98d9]{background:0 0}.burst[data-v-cfea98d9]{background:linear-gradient(165deg, var(--color-line) 0%, var(--color-line-deep) 100%);color:var(--color-on-green);border-radius:var(--radius-xl);box-shadow:var(--shadow-green);text-align:center;opacity:0;flex-direction:column;flex:1;justify-content:center;align-items:center;min-height:320px;padding:48px 24px;display:flex;transform:scale(.7)}.burst.pop[data-v-cfea98d9]{animation:.45s forwards arrive-pop}.emoji[data-v-cfea98d9]{margin:0 0 12px;font-size:5rem;line-height:1;animation:.85s ease-in-out infinite train-chug}.title[data-v-cfea98d9]{font-family:var(--font-display);letter-spacing:.06em;margin:0;font-size:clamp(2.4rem,8vw,3.2rem)}.from[data-v-cfea98d9]{opacity:.92;margin:12px 0 0;font-size:1.2rem;font-weight:700}.next[data-v-cfea98d9]{font-family:var(--font-display);margin:16px 0 0;font-size:clamp(1.5rem,4.5vw,1.9rem);line-height:1.3}@media (width>=900px){.burst[data-v-cfea98d9]{min-height:420px;padding:64px 40px}}.writer-wrap[data-v-6e34fb86]{flex-direction:column;align-items:center;gap:8px;display:flex}.writer[data-v-6e34fb86]{background:var(--color-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-soft);border:3px solid var(--color-line-soft)}.writer.embedded[data-v-6e34fb86]{box-shadow:none;background:0 0;border:none}.replay[data-v-6e34fb86]{background:var(--color-line-wash);color:var(--color-line-deep);cursor:pointer;border:none;border:2px solid var(--color-line-soft);-webkit-tap-highlight-color:transparent;border-radius:999px;min-height:40px;padding:6px 18px;font-size:.95rem;font-weight:800;transition:transform .15s,background .15s}.replay[data-v-6e34fb86]:active{background:var(--color-line-soft);transform:scale(.96)}.quiz-wrap[data-v-a89f72af]{flex-direction:column;align-items:center;gap:12px;display:flex}.writer[data-v-a89f72af]{background:var(--color-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-soft);border:3px solid var(--color-line-soft);touch-action:none}.writer.embedded[data-v-a89f72af]{box-shadow:none;background:0 0;border:none}.reset[data-v-a89f72af]{background:var(--color-line-wash);color:var(--color-line-deep);cursor:pointer;border:none;border:2px solid var(--color-line-soft);-webkit-tap-highlight-color:transparent;border-radius:999px;min-height:48px;padding:10px 22px;font-size:1.05rem;font-weight:800;transition:transform .15s,background .15s}.reset[data-v-a89f72af]:active{background:var(--color-line-soft);transform:scale(.96)}.meta-bar[data-v-55bdf4c1]{text-align:center;color:var(--color-line-deep);flex:none;margin:0 0 12px;font-size:1.1rem;font-weight:800}.stage-area[data-v-55bdf4c1]{min-height:0}.stage-card[data-v-55bdf4c1]{background:var(--color-surface);border-radius:var(--radius-xl);box-shadow:var(--shadow-soft);text-align:center;border:3px solid var(--color-line-soft);flex-direction:column;align-items:center;min-height:0;margin:auto 0;padding:16px 14px 18px;display:flex}.dock-actions[data-v-55bdf4c1]{grid-template-columns:1fr;gap:8px;display:grid}.dock-actions.split[data-v-55bdf4c1]{grid-template-columns:1fr 1fr}.dock-actions[data-v-55bdf4c1] .big-btn.md{min-height:56px;padding:12px 14px;font-size:1.2rem}.dock-nav[data-v-55bdf4c1]{grid-template-columns:1fr 1fr;align-items:center;gap:8px;display:grid}.dock-nav.solo[data-v-55bdf4c1]{grid-template-columns:1fr}.dock-nav[data-v-55bdf4c1] .big-btn.ghost{min-height:44px;padding:6px 12px;font-size:1.05rem}.char-head[data-v-55bdf4c1]{justify-content:center;align-items:center;gap:10px;display:flex}.emoji[data-v-55bdf4c1]{margin:0;font-size:2.25rem;line-height:1}.pinyin[data-v-55bdf4c1]{color:var(--color-line-deep);margin:0;font-size:1.25rem;font-weight:800}.hanzi[data-v-55bdf4c1]{color:var(--color-ink);margin:0;font-size:clamp(4.5rem,20vw,6.5rem);font-weight:900;line-height:1.05}.gloss[data-v-55bdf4c1]{color:var(--color-ink-muted);margin:6px 0 10px;font-size:1.15rem;font-weight:700}.write-hint[data-v-55bdf4c1]{font-family:var(--font-display);color:var(--color-line-deep);margin:0 0 12px;font-size:1.25rem}@media (width>=640px){.stage-card[data-v-55bdf4c1]{padding:28px 18px 32px}.char-head[data-v-55bdf4c1]{flex-direction:column;gap:0}.emoji[data-v-55bdf4c1]{font-size:3rem}.pinyin[data-v-55bdf4c1]{margin:10px 0 0;font-size:1.6rem}.gloss[data-v-55bdf4c1]{margin:6px 0 20px}}.meta-bar[data-v-4b089a3a]{text-align:center;color:var(--color-line-deep);margin:0 0 12px;font-size:1.1rem;font-weight:800}.prompt[data-v-4b089a3a]{background:linear-gradient(165deg, var(--color-line) 0%, var(--color-line-deep) 100%);color:var(--color-on-green);border-radius:var(--radius-xl);box-shadow:var(--shadow-green);text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;min-height:200px;padding:32px 20px;display:flex}.prompt.write[data-v-4b089a3a]{background:var(--color-surface);color:var(--color-ink);border:3px solid var(--color-line-soft);box-shadow:var(--shadow-soft);min-height:auto}.mode-pill[data-v-4b089a3a]{background:#ffffff38;border-radius:999px;margin:0;padding:6px 14px;font-size:.95rem;font-weight:800;display:inline-block}.prompt.write .mode-pill[data-v-4b089a3a]{background:var(--color-line-wash);color:var(--color-line-deep)}.hint[data-v-4b089a3a]{font-family:var(--font-display);margin:0;font-size:clamp(1.6rem,5vw,2rem)}.ear[data-v-4b089a3a]{margin:8px 0 0;font-size:3.5rem;line-height:1}.pinyin[data-v-4b089a3a]{color:var(--color-line-deep);margin:0;font-size:1.6rem;font-weight:800}.big-emoji[data-v-4b089a3a]{margin:0;font-size:5rem;line-height:1}.options[data-v-4b089a3a]{grid-template-columns:1fr 1fr;gap:14px;display:grid}.opt[data-v-4b089a3a]{border-radius:var(--radius-md);background:var(--color-surface);min-height:108px;box-shadow:var(--shadow-soft);cursor:pointer;border:none;border:3px solid var(--color-line-soft);color:var(--color-ink);-webkit-tap-highlight-color:transparent;font-size:2.7rem;font-weight:900;transition:transform .15s,background .15s,border-color .15s}.opt[data-v-4b089a3a]:active{transform:scale(.95)}.options.ok .opt[data-v-4b089a3a]{pointer-events:none;border-color:var(--color-success);background:color-mix(in srgb, var(--color-success) 14%, var(--color-surface));animation:.38s success-flash}.options.bad[data-v-4b089a3a]{animation:.4s feedback-bad}.options.bad .opt[data-v-4b089a3a]{border-color:color-mix(in srgb, var(--color-danger) 60%, var(--color-line-soft))}.retry-card[data-v-4b089a3a]{background:var(--color-surface);border-radius:var(--radius-xl);border:3px solid var(--color-line-soft);box-shadow:var(--shadow-soft);text-align:center;flex-direction:column;gap:14px;max-width:480px;margin:40px auto 0;padding:32px 22px;display:flex}@media (width>=640px){.opt[data-v-4b089a3a]{min-height:120px;font-size:3rem}}@media (width>=900px){.prompt[data-v-4b089a3a]{min-height:280px;padding:40px 28px}.options[data-v-4b089a3a]{gap:16px}}.lock-card[data-v-350d48e4]{background:var(--color-surface);border-radius:var(--radius-xl);border:3px solid var(--color-line-soft);box-shadow:var(--shadow-soft);text-align:center;padding:28px 20px}.page-title[data-v-350d48e4]{color:var(--color-line-deep)}.pin-dots[data-v-350d48e4]{justify-content:center;gap:16px;margin:20px 0;display:flex}.dot[data-v-350d48e4]{border:3px solid var(--color-line);background:0 0;border-radius:50%;width:18px;height:18px;transition:background .15s}.dot.on[data-v-350d48e4]{background:var(--color-line)}.error[data-v-350d48e4]{text-align:center;color:var(--color-danger);margin:0 0 8px;font-weight:800}.pad[data-v-350d48e4]{grid-template-columns:repeat(3,1fr);gap:12px;max-width:300px;margin:0 auto 24px;display:grid}.key[data-v-350d48e4]{min-height:var(--touch-min);border:3px solid var(--color-line-soft);border-radius:var(--radius-md);background:var(--color-line-wash);cursor:pointer;color:var(--color-ink);-webkit-tap-highlight-color:transparent;font-size:1.55rem;font-weight:800;transition:transform .15s}.key[data-v-350d48e4]:active:not(:disabled){background:var(--color-line-soft);transform:scale(.95)}.key[data-v-350d48e4]:disabled{opacity:0;pointer-events:none}.stats[data-v-350d48e4]{grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:20px;display:grid}.stat[data-v-350d48e4]{background:var(--color-surface);border-radius:var(--radius-md);text-align:center;box-shadow:var(--shadow-soft);border:3px solid var(--color-line-soft);flex-direction:column;gap:6px;padding:18px 8px;display:flex}.stat strong[data-v-350d48e4]{font-family:var(--font-display);color:var(--color-line-deep);font-size:1.35rem}.stat span[data-v-350d48e4]{color:var(--color-ink-muted);font-size:.85rem;font-weight:700}.panel[data-v-350d48e4]{background:var(--color-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-soft);border:3px solid var(--color-line-soft);margin-bottom:22px;padding:18px}.panel h3[data-v-350d48e4]{font-family:var(--font-display);color:var(--color-line-deep);margin:0 0 12px}.panel ul[data-v-350d48e4]{margin:0;padding:0;list-style:none}.panel li[data-v-350d48e4]{border-bottom:2px solid var(--color-line-wash);justify-content:space-between;align-items:center;padding:12px 0;display:flex}.panel li[data-v-350d48e4]:last-child{border-bottom:none}.han[data-v-350d48e4]{font-size:1.55rem;font-weight:800}.cnt[data-v-350d48e4]{color:var(--color-ink-muted);font-weight:700}.empty[data-v-350d48e4]{color:var(--color-ink-muted);margin:0;font-size:1.05rem;font-weight:700}.actions[data-v-350d48e4]{flex-direction:column;gap:12px;display:flex}.line-switcher[data-v-350d48e4]{margin-bottom:16px}.line-switcher[data-v-350d48e4] .switcher{background:var(--color-line-wash)}.line-switcher[data-v-350d48e4] .segment{color:var(--color-line-deep)}.line-switcher[data-v-350d48e4] .segment:not(.active):hover{background:var(--color-line-soft)}.page-title[data-v-e005e67e]{color:var(--color-line-deep)}.panel[data-v-e005e67e]{background:var(--color-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-soft);border:3px solid var(--color-line-soft);flex-direction:column;gap:12px;margin-bottom:16px;padding:20px;display:flex}.panel.danger[data-v-e005e67e]{border-color:color-mix(in srgb, var(--color-danger) 35%, var(--color-line-soft))}.panel h3[data-v-e005e67e]{font-family:var(--font-display);color:var(--color-line-deep);margin:0}.hint[data-v-e005e67e]{color:var(--color-ink-muted);margin:0;font-size:.95rem;font-weight:600;line-height:1.5}.toggle[data-v-e005e67e]{color:var(--color-ink);min-height:var(--touch-min);justify-content:space-between;align-items:center;gap:12px;font-size:1.1rem;font-weight:700;display:flex}.toggle input[data-v-e005e67e]{width:26px;height:26px;accent-color:var(--color-line-deep)}label[data-v-e005e67e]:not(.toggle){color:var(--color-ink-muted);flex-direction:column;gap:6px;font-size:.95rem;font-weight:700;display:flex}input[data-v-e005e67e]:not([type=checkbox]){min-height:var(--touch-min);border-radius:var(--radius-sm);border:3px solid var(--color-line-soft);letter-spacing:.2em;color:var(--color-ink);background:var(--color-line-wash);padding:0 14px;font-size:1.25rem}input[data-v-e005e67e]:not([type=checkbox]):focus{border-color:var(--color-line);background:var(--color-surface);outline:none}input[data-v-e005e67e]:not([type=checkbox]):focus-visible{outline:var(--focus-outline);outline-offset:2px}.warn[data-v-e005e67e]{color:var(--color-ink-muted);margin:0;font-weight:600;line-height:1.45}.error[data-v-e005e67e]{color:var(--color-danger);text-align:center;font-weight:800}.ok[data-v-e005e67e]{color:var(--color-success);text-align:center;font-weight:800}:root{--color-line:#00b33c;--color-line-deep:#007a2a;--color-line-mid:#093;--color-line-soft:#c8f0d6;--color-line-wash:#e8f9ee;--color-bg:#f0faf3;--color-bg-warm:#fffdf8;--color-surface:#fff;--color-ink:#12281c;--color-ink-muted:#4a6656;--color-on-green:#fff;--color-accent:#ff7a1a;--color-accent-deep:#e86500;--color-accent-soft:#ffe8d4;--color-danger:#ef4444;--color-success:#16a34a;--color-rail:#9ecfb0;--color-locked:#a8bdb0;--radius-sm:14px;--radius-md:22px;--radius-lg:32px;--radius-xl:40px;--shadow-soft:0 12px 32px #005a281a;--shadow-press:0 4px 14px #005a2824;--shadow-green:0 16px 40px #007a2a38;--font-display:"ZCOOL KuaiLe", "Nunito", "PingFang SC", "Hiragino Sans GB", sans-serif;--font-body:"Nunito", "PingFang SC", "Hiragino Sans GB", sans-serif;--touch-min:68px;--chip-min:80px;--focus-outline:3px solid var(--color-line-deep);--bp-md:640px;--bp-lg:900px;--page-max:720px;--page-pad-inline:18px;--page-pad-top:max(16px, env(safe-area-inset-top,0px));--page-pad-bottom:max(28px, env(safe-area-inset-bottom,0px));--dock-pad-bottom:max(20px, env(safe-area-inset-bottom,0px));--split-gap:20px;color:var(--color-ink);background:var(--color-bg);font-family:var(--font-body);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased}@media (width>=640px){:root{--page-max:860px;--page-pad-inline:28px}}@media (width>=900px){:root{--page-max:1160px;--page-pad-inline:36px;--split-gap:28px}}*,:before,:after{box-sizing:border-box}html,body,#app{min-height:100dvh;margin:0}body{background:radial-gradient(ellipse 90% 55% at 50% -10%, #00b33c47, transparent 55%), radial-gradient(ellipse 50% 40% at 100% 80%, #ff7a1a1a, transparent 50%), linear-gradient(180deg, var(--color-bg-warm) 0%, var(--color-bg) 40%, #d9f5e4 100%);min-height:100dvh}button{font:inherit}button:focus{outline:none}button:focus-visible{outline:var(--focus-outline);outline-offset:3px}a{color:inherit;text-decoration:none}.page{width:min(var(--page-max), 100%);padding-top:var(--page-pad-top);padding-bottom:calc(var(--page-pad-bottom) + 72px);padding-left:max(var(--page-pad-inline), env(safe-area-inset-left,0px));padding-right:max(var(--page-pad-inline), env(safe-area-inset-right,0px));margin:0 auto}.page-dock{height:100dvh;max-height:100dvh;width:min(var(--page-max), 100%);padding-top:var(--page-pad-top);padding-left:max(var(--page-pad-inline), env(safe-area-inset-left,0px));padding-right:max(var(--page-pad-inline), env(safe-area-inset-right,0px));flex-direction:column;margin:0 auto;padding-bottom:0;display:flex;overflow:hidden}.page-dock>.stage-area{-webkit-overflow-scrolling:touch;flex-direction:column;flex:auto;min-height:0;padding-bottom:12px;display:flex;overflow:hidden auto}.page-dock>.dock{z-index:20;padding:12px 0 calc(12px + var(--dock-pad-bottom));background:linear-gradient(180deg, transparent 0%, var(--color-bg) 14%, var(--color-bg) 100%);border-top:3px solid var(--color-line-soft);flex-direction:column;flex:none;gap:10px;display:flex;position:sticky;bottom:0}.split-stage{gap:var(--split-gap);flex-direction:column;flex:1;display:flex}.split-stage>.stage,.split-stage>.controls{min-width:0}@media (width>=900px){.page-dock{align-items:stretch;gap:var(--split-gap);padding-bottom:var(--page-pad-bottom);grid-template-rows:auto 1fr;grid-template-columns:1.25fr .85fr;display:grid}.page-dock>.meta-bar{grid-column:1/-1}.page-dock>.stage-area{grid-column:1;padding-bottom:0}.page-dock>.dock{top:max(20px, env(safe-area-inset-top,0px));border:3px solid var(--color-line-soft);border-radius:var(--radius-lg);background:var(--color-surface);box-shadow:var(--shadow-soft);-webkit-backdrop-filter:none;backdrop-filter:none;grid-area:2/2;align-self:start;margin:0;padding:20px;position:sticky;bottom:auto}.split-stage{grid-template-columns:1.2fr .8fr;align-items:start;display:grid}.split-stage>.controls{top:max(20px, env(safe-area-inset-top,0px));position:sticky}}.page-title{font-family:var(--font-display);letter-spacing:.02em;color:var(--color-ink);margin:0 0 8px;font-size:clamp(1.75rem,5.5vw,2.4rem)}.page-sub{color:var(--color-ink-muted);margin:0 0 20px;font-size:1.1rem;font-weight:700;line-height:1.45}.surface-card{background:var(--color-surface);border-radius:var(--radius-lg);border:3px solid var(--color-line-soft);box-shadow:var(--shadow-soft)}.surface-green{background:linear-gradient(165deg, var(--color-line) 0%, var(--color-line-deep) 100%);color:var(--color-on-green);border-radius:var(--radius-lg);box-shadow:var(--shadow-green)}.tap-target{min-height:var(--touch-min);min-width:var(--touch-min)}@keyframes train-chug{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}@keyframes arrive-pop{0%{opacity:0;transform:scale(.65)}55%{opacity:1;transform:scale(1.1)}to{opacity:1;transform:scale(1)}}@keyframes pulse-glow{0%,to{box-shadow:0 0 #00b33c73}50%{box-shadow:0 0 0 14px #00b33c00}}@keyframes success-flash{0%{transform:scale(1)}40%{transform:scale(1.05)}to{transform:scale(1)}}@keyframes feedback-ok{0%{box-shadow:0 0 #16a34a80}to{box-shadow:0 0 0 12px #16a34a00}}@keyframes feedback-bad{0%,to{transform:translate(0)}20%{transform:translate(-8px)}40%{transform:translate(8px)}60%{transform:translate(-5px)}80%{transform:translate(5px)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
