.home[data-v-981c97fd]{flex:1;display:grid;place-items:center;gap:22px;padding:36px 20px 28px;text-align:center}.hero[data-v-981c97fd]{width:min(760px,100%);padding:34px 26px;display:grid;gap:18px}.hero-badge[data-v-981c97fd]{justify-self:center;padding:8px 14px;border-radius:999px;background:#1f6feb14;color:var(--accent);font-size:12px;font-weight:800;letter-spacing:.16em}h1[data-v-981c97fd]{font-size:clamp(30px,5vw,52px);line-height:1.06;margin:0}.tagline[data-v-981c97fd]{margin:0 auto;color:var(--ink-dim);font-size:16px;max-width:520px;line-height:1.7}.cta-row[data-v-981c97fd]{display:flex;justify-content:center;gap:12px;flex-wrap:wrap}.stat-strip[data-v-981c97fd]{width:min(760px,100%);display:grid;grid-template-columns:repeat(4,minmax(0,1fr));overflow:hidden}.stat[data-v-981c97fd]{padding:18px 14px;border-right:1px solid var(--line)}.stat[data-v-981c97fd]:last-child{border-right:none}.stat-num[data-v-981c97fd]{font-size:24px;font-weight:800;color:var(--accent)}.stat-label[data-v-981c97fd]{font-size:12px;color:var(--ink-dim);margin-top:4px}@media (max-width: 760px){.hero[data-v-981c97fd]{padding:28px 18px}.stat-strip[data-v-981c97fd]{grid-template-columns:repeat(2,minmax(0,1fr))}.stat[data-v-981c97fd]{border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.stat[data-v-981c97fd]:nth-child(2n){border-right:none}.stat[data-v-981c97fd]:nth-last-child(-n+2){border-bottom:none}}.modes[data-v-fa75224e]{flex:1;padding:34px 20px 24px;max-width:1080px;margin:0 auto;width:100%}.heading[data-v-fa75224e]{margin-bottom:20px}h1[data-v-fa75224e]{font-size:clamp(22px,3vw,28px);margin:0;color:var(--ink);font-weight:800}.heading p[data-v-fa75224e]{margin:8px 0 0;color:var(--ink-dim);line-height:1.7}.mode-grid[data-v-fa75224e]{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px}.mode-card[data-v-fa75224e]{text-align:left;padding:22px;display:grid;gap:14px;align-content:start}.mode-tag[data-v-fa75224e]{color:var(--accent);font-size:12px;font-weight:800;letter-spacing:.12em}h2[data-v-fa75224e]{margin:0;font-size:20px}p[data-v-fa75224e]{margin:0;color:var(--ink-dim);line-height:1.7;font-size:14px}.mode-progress[data-v-fa75224e],.route-list[data-v-fa75224e]{display:flex;flex-wrap:wrap;gap:8px}.progress-chip[data-v-fa75224e],.route-pill[data-v-fa75224e]{display:inline-flex;align-items:center;gap:8px;padding:10px 12px;border-radius:14px;border:1px solid var(--line);background:var(--bg-soft);color:var(--ink);font-size:13px;font-weight:700}.progress-chip.locked[data-v-fa75224e]{opacity:.55}.route-card[data-v-fa75224e]{background:linear-gradient(180deg,#fffffff5,#f3f8fff5)}.route-list[data-v-fa75224e]{margin-top:2px}.route-pill[data-v-fa75224e]{justify-content:space-between;width:100%;background:#fff}.route-pill span[data-v-fa75224e]{color:var(--ink-dim);font-size:12px;font-weight:600}.route-pill.west-main[data-v-fa75224e]{border-color:#1f6feb33}.route-pill.east-main[data-v-fa75224e]{border-color:#0f9d5833}.route-pill.branch-line[data-v-fa75224e]{border-color:#a855f733}.station-display[data-v-034650ed]{display:flex;justify-content:center;flex-wrap:wrap;gap:12px}.char-cell[data-v-034650ed]{display:flex;flex-direction:column;align-items:center;gap:8px;padding:16px 12px 12px;min-width:92px;background:linear-gradient(180deg,#fff,#f4f8fc);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow-soft);transition:transform .16s ease,border-color .2s ease,box-shadow .2s ease,opacity .2s ease}.char-cell.done[data-v-034650ed]{border-color:#0f9d5847;opacity:.6}.char-cell.active[data-v-034650ed]{border-color:#1f6feb80;box-shadow:0 12px 24px #1f6feb1f;transform:translateY(-1px)}.zhuyin[data-v-034650ed]{font-family:var(--font-mono);font-size:14px;letter-spacing:.06em;color:var(--ink-dim);min-height:18px}.char-cell.active .zhuyin[data-v-034650ed]{color:var(--accent)}.hanzi[data-v-034650ed]{font-size:28px;font-weight:800;line-height:1}.char-cell.active .hanzi[data-v-034650ed]{color:var(--accent)}.keys[data-v-034650ed]{display:flex;flex-wrap:wrap;justify-content:center;gap:4px;min-height:28px}.key[data-v-034650ed]{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:24px;padding:0 6px;border-radius:8px;background:var(--bg-soft);border:1px solid var(--line);color:var(--ink-dim);font-family:var(--font-mono);font-size:12px;font-weight:700}.key.typed[data-v-034650ed]{background:#0f9d581f;border-color:#0f9d5838;color:#0a8a4a}.key.current[data-v-034650ed]{background:#1f6feb24;border-color:#1f6feb4d;color:#124fc4}.shake[data-v-034650ed]{animation:shake-034650ed .28s ease}@keyframes shake-034650ed{0%,to{transform:translate(0)}20%{transform:translate(-4px)}40%{transform:translate(4px)}60%{transform:translate(-3px)}80%{transform:translate(3px)}}@media (max-width: 860px){.char-cell[data-v-034650ed]{min-width:84px;padding:14px 10px 10px}.hanzi[data-v-034650ed]{font-size:24px}}.soft-keyboard[data-v-07d15414]{padding:16px;display:grid;gap:10px}.kb-head[data-v-07d15414]{display:flex;justify-content:space-between;align-items:flex-end;gap:12px}.kb-title[data-v-07d15414]{font-size:15px;font-weight:800}.kb-sub[data-v-07d15414]{margin-top:4px;font-size:12px;color:var(--ink-dim)}.kb-pill[data-v-07d15414]{padding:8px 12px;border-radius:999px;background:var(--bg-soft);border:1px solid var(--line);color:var(--ink-dim);font-size:12px;white-space:nowrap}.kb-row[data-v-07d15414]{display:grid;gap:6px}.kb-row.row-11[data-v-07d15414]{grid-template-columns:repeat(11,minmax(0,1fr))}.kb-row.row-10[data-v-07d15414]{grid-template-columns:repeat(10,minmax(0,1fr))}.kb-row.row-1[data-v-07d15414]{grid-template-columns:1fr}.kb-key[data-v-07d15414]{min-height:46px;border-radius:14px;border:1px solid var(--line);background:linear-gradient(180deg,#fff,#f2f6fb);color:var(--ink);font-size:14px;font-weight:800;box-shadow:0 3px #18304205;transition:transform .08s ease,border-color .15s ease,background .15s ease}.kb-key[data-v-07d15414]:active{transform:translateY(1px)}.kb-key.current[data-v-07d15414]{border-color:#1f6feb8c;background:linear-gradient(180deg,#e9f1ff,#dce9ff);color:#124fc4}.kb-key.wide[data-v-07d15414]{grid-column:span 11}@media (max-width: 860px){.kb-head[data-v-07d15414]{align-items:flex-start;flex-direction:column}.kb-row[data-v-07d15414]{gap:5px}.kb-key[data-v-07d15414]{min-height:42px;border-radius:12px;font-size:13px}}.practice[data-v-75104e4b]{flex:1;display:flex;flex-direction:column;min-height:100vh;padding:20px;gap:16px}.practice-top[data-v-75104e4b]{display:flex;justify-content:space-between;align-items:center;gap:12px}.back-btn[data-v-75104e4b]{font-size:12px;padding:9px 14px}.progress[data-v-75104e4b]{color:var(--ink-dim);font-size:13px}.practice-center[data-v-75104e4b]{flex:1;display:grid;place-items:center;gap:18px;padding:20px 0 6px}.line-tag[data-v-75104e4b]{display:flex;justify-content:center}.mobile-keyboard[data-v-75104e4b]{width:min(100%,1040px);align-self:center}.practice-bottom[data-v-75104e4b]{display:flex;justify-content:center;flex-wrap:wrap;gap:18px;font-size:12px;color:var(--ink-dim);padding-bottom:4px}@media (max-width: 860px){.practice[data-v-75104e4b]{padding:14px;gap:12px}.practice-top[data-v-75104e4b]{align-items:flex-start;flex-direction:column}.progress[data-v-75104e4b]{font-size:12px}.practice-center[data-v-75104e4b]{padding-top:6px}.practice-bottom[data-v-75104e4b]{gap:12px}}@media (min-width: 861px){.mobile-keyboard[data-v-75104e4b]{display:none}}.result[data-v-cadd12cb]{flex:1;display:flex;align-items:center;justify-content:center;padding:30px 16px}.result-card[data-v-cadd12cb]{padding:28px;max-width:760px;width:100%}.eyebrow[data-v-cadd12cb]{color:var(--accent);font-size:12px;letter-spacing:.08em;font-weight:800}h1[data-v-cadd12cb]{margin:6px 0 20px;font-size:clamp(22px,3vw,28px)}.summary-grid[data-v-cadd12cb]{display:grid;grid-template-columns:repeat(auto-fit,minmax(108px,1fr));gap:12px;margin-bottom:24px}.summary-item[data-v-cadd12cb]{background:var(--bg-soft);border:1px solid var(--line);border-radius:18px;padding:14px 10px;text-align:center}.num[data-v-cadd12cb]{font-size:24px;font-weight:800;color:var(--accent)}.label[data-v-cadd12cb]{font-size:11px;color:var(--ink-dim);margin-top:4px}.station-list[data-v-cadd12cb]{border:1px solid var(--line);border-radius:18px;overflow:hidden;margin-bottom:22px;max-height:320px;overflow-y:auto;background:#fff}.row[data-v-cadd12cb]{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;padding:10px 14px;font-size:13px;border-bottom:1px solid var(--line)}.row[data-v-cadd12cb]:last-child{border-bottom:none}.row.header[data-v-cadd12cb]{color:var(--ink-dim);font-size:11px;background:var(--bg-soft);position:sticky;top:0}.actions[data-v-cadd12cb]{display:flex;gap:10px;flex-wrap:wrap}.stats-view[data-v-fa7efeae]{flex:1;padding:32px 20px 28px;max-width:1080px;width:100%;margin:0 auto;display:grid;gap:18px}.heading h1[data-v-fa7efeae]{margin:0;font-size:clamp(22px,3vw,28px)}.heading p[data-v-fa7efeae]{margin:8px 0 0;color:var(--ink-dim);line-height:1.7}.overview-grid[data-v-fa7efeae]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.stat-box[data-v-fa7efeae]{padding:20px;text-align:center}.num[data-v-fa7efeae]{font-size:26px;font-weight:800;color:var(--accent)}.label[data-v-fa7efeae]{margin-top:4px;color:var(--ink-dim);font-size:12px}.save-actions[data-v-fa7efeae],.history[data-v-fa7efeae]{padding:22px;display:grid;gap:14px}h2[data-v-fa7efeae]{margin:0;font-size:18px}.actions[data-v-fa7efeae]{display:flex;flex-wrap:wrap;gap:10px}.message[data-v-fa7efeae]{margin:0;font-size:13px}.message.success[data-v-fa7efeae]{color:var(--success)}.message.error[data-v-fa7efeae]{color:var(--danger)}.history-list[data-v-fa7efeae]{border:1px solid var(--line);border-radius:18px;overflow:hidden;background:#fff}.row[data-v-fa7efeae]{display:grid;grid-template-columns:1.1fr .8fr 1.4fr .8fr .7fr;gap:10px;padding:10px 14px;font-size:13px;border-bottom:1px solid var(--line)}.row[data-v-fa7efeae]:last-child{border-bottom:none}.row.header[data-v-fa7efeae]{background:var(--bg-soft);color:var(--ink-dim);font-size:11px;position:sticky;top:0}.empty[data-v-fa7efeae]{color:var(--ink-dim);font-size:14px}@media (max-width: 760px){.overview-grid[data-v-fa7efeae]{grid-template-columns:repeat(2,minmax(0,1fr))}.row[data-v-fa7efeae]{grid-template-columns:1fr .7fr 1.2fr .7fr .6fr;font-size:12px}}:root{--bg: #f4f7fb;--bg-elevated: rgba(255, 255, 255, .82);--bg-card: #ffffff;--bg-soft: #edf3fb;--line: #d9e3ef;--ink: #183042;--ink-dim: #67809a;--accent: #1f6feb;--accent-2: #0f9d58;--accent-warm: #f59e0b;--danger: #d94b4b;--success: #0f9d58;--route-west: #1f6feb;--route-east: #0f9d58;--route-branch: #a855f7;--font-display: "Noto Sans TC", "PingFang TC", "Microsoft JhengHei", "Heiti TC", sans-serif;--font-mono: "JetBrains Mono", "Menlo", "Consolas", "Noto Sans Mono CJK TC", monospace;--radius: 20px;--radius-sm: 14px;--shadow: 0 14px 34px rgba(24, 48, 66, .08);--shadow-soft: 0 10px 24px rgba(24, 48, 66, .06)}*{box-sizing:border-box}html,body,#app{height:100%}body{margin:0;background:radial-gradient(circle at top,rgba(31,111,235,.08),transparent 35%),linear-gradient(180deg,#f8fbff,#f2f6fb);color:var(--ink);font-family:var(--font-display);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:inherit;text-decoration:none}button,input,textarea,select{font-family:inherit}button{cursor:pointer}::selection{background:#1f6feb2e;color:var(--ink)}:focus-visible{outline:3px solid rgba(31,111,235,.35);outline-offset:2px}.app-shell{min-height:100%;display:flex;flex-direction:column}.top-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 22px;border-bottom:1px solid rgba(217,227,239,.9);background:#ffffffa8;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);position:sticky;top:0;z-index:20}.brand{display:inline-flex;align-items:center;gap:10px;font-weight:800;letter-spacing:.01em;font-size:16px}.brand-mark{width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;border-radius:10px;background:linear-gradient(180deg,#fff,#eaf2ff);border:1px solid var(--line);box-shadow:var(--shadow-soft);font-size:17px}.top-bar nav{display:flex;gap:8px;flex-wrap:wrap}.top-bar nav a{padding:10px 14px;border-radius:999px;border:1px solid transparent;color:var(--ink-dim);background:transparent;transition:background .18s ease,color .18s ease,border-color .18s ease}.top-bar nav a:hover,.top-bar nav a.active{color:var(--ink);background:#1f6feb14;border-color:#1f6feb26}.app-main{flex:1;display:flex;flex-direction:column}.card{background:var(--bg-card);border:1px solid rgba(217,227,239,.95);border-radius:var(--radius);box-shadow:var(--shadow)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:12px 18px;border-radius:999px;border:1px solid var(--line);background:#fff;color:var(--ink);font-size:14px;font-weight:700;box-shadow:0 1px #fff9 inset;transition:transform .12s ease,box-shadow .12s ease,border-color .12s ease,background .12s ease}.btn:hover{transform:translateY(-1px);box-shadow:var(--shadow-soft);border-color:#1f6feb2e}.btn:active{transform:translateY(0)}.btn-primary{background:linear-gradient(180deg,#2f7af2,#1f6feb);color:#fff;border-color:#1f6feb47}.btn-primary:hover{background:linear-gradient(180deg,#387ff6,#2a75f0)}.btn-danger{background:linear-gradient(180deg,#f46d6d,#d94b4b);color:#fff;border-color:#d94b4b3d}.btn-lg{padding:14px 24px;font-size:15px}.mono{font-family:var(--font-mono);letter-spacing:.01em}.route-badge{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border-radius:999px;color:#fff;font-weight:800;font-size:13px;box-shadow:0 10px 18px #18304224}.route-badge.west-main{background:linear-gradient(180deg,#387ff6,#1f6feb)}.route-badge.east-main{background:linear-gradient(180deg,#1dbb7a,#0f9d58)}.route-badge.branch-line{background:linear-gradient(180deg,#b66af4,#a855f7)}.hidden-input{display:none}@media (max-width: 860px){.top-bar{padding:14px 16px;align-items:flex-start;flex-direction:column}.brand{font-size:15px}.top-bar nav{width:100%}.top-bar nav a{flex:1;text-align:center;justify-content:center}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
