:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0a0e17;--panel:#131a28;--panel-strong:#1b2436;--edge:#2a3449;--edge-strong:#43506a;--ink:#eef2f8;--muted:#aeb8c9;--faint:#7f8aa0;--red:#ff6b6b;--gold:#f5c542;--led:#ffb547;--rail-off:#364259;--sign:#f6f3ea;--sign-ink:#161a21;--sign-faint:#9da3ad;--line:#8ccf3f;--line-ink:#3d8410;--on-line:#13260a;--jp-font:"Hiragino Sans", "Hiragino Kaku Gothic ProN", "Noto Sans JP", "Yu Gothic", sans-serif;--mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans SC,sans-serif}[data-line=N4]{--line:#f59a3a;--line-ink:#b85800;--on-line:#2b1500}[data-line=N3]{--line:#3cb7ee;--line-ink:#0b74a8;--on-line:#03202f}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--ink);margin:0}body{background:radial-gradient(900px 420px at 50% -160px, #1c2a48 0%, transparent 70%), var(--bg);min-height:100dvh}[hidden]{display:none!important}[lang=ja]{font-family:var(--jp-font)}button{font:inherit;color:inherit;cursor:pointer}button:focus-visible{outline:2px solid var(--led);outline-offset:2px}.app{width:min(760px,100%);margin:0 auto;padding:40px 16px 56px}section{flex-direction:column;gap:16px;display:flex}.primary{background:var(--led);color:#241500;border:0;border-radius:8px;padding:9px 18px;font-size:15px;font-weight:700}.primary:hover{background:#ffc46b}.primary kbd{color:#241500b3;border-color:#24150059}.ghost{border:1px solid var(--edge);color:var(--muted);background:0 0;border-radius:8px;padding:6px 12px}.ghost:hover{color:var(--ink);border-color:var(--edge-strong)}kbd{border:1px solid var(--edge-strong);color:var(--faint);font-family:var(--mono);border-radius:4px;margin-left:4px;padding:0 5px;font-size:11px;font-weight:400}@media (hover:none){kbd{display:none}}.type{color:#fff;letter-spacing:.06em;background:#23934f;border-radius:4px;padding:1px 7px;font-size:13px;font-weight:700;line-height:1.5;display:inline-block}.type.sentence{background:#d93a3a}.brand{align-items:center;gap:12px;display:flex}.brand img{flex:none;display:block}.brand h1{letter-spacing:-.01em;margin:0;font-size:26px;font-weight:800}.brand p{color:var(--muted);margin:2px 0 0;font-size:15px}.kinds{border:1px solid var(--edge);background:var(--panel);border-radius:10px;align-self:flex-start;gap:4px;padding:4px;display:inline-flex}.kind{color:var(--faint);background:0 0;border:0;border-radius:7px;align-items:center;gap:8px;padding:6px 14px 6px 8px;font-size:15px;display:flex}.kind .type{opacity:.45}.kind[aria-selected=true]{background:var(--panel-strong);color:var(--ink);box-shadow:inset 0 0 0 1px var(--edge-strong)}.kind[aria-selected=true] .type{opacity:1}.board{color:var(--led);background:radial-gradient(#ffffff0b 1px,#0000 1.3px) 0 0/4px 4px,#06080c;border:1px solid #222a39;border-radius:10px;padding:12px 14px 10px;box-shadow:inset 0 0 0 3px #0d1118}.board-row{flex-wrap:wrap;align-items:center;gap:8px 14px;display:flex}.board-label{color:#a77a35;font-family:var(--jp-font);letter-spacing:.1em;font-size:13px}.dest{font-family:var(--mono);letter-spacing:.06em;text-shadow:0 0 10px #ffb54773;font-size:26px;font-weight:700}.board-meta{color:#e2a34b;font-size:15px}.board-go{margin-left:auto}.ticker{white-space:nowrap;color:#e6a24a;border-top:1px dashed #262e3e;margin-top:10px;padding-top:8px;font-size:14px;overflow:hidden;-webkit-mask:linear-gradient(90deg,#0000,#000 6% 94%,#0000);mask:linear-gradient(90deg,#0000,#000 6% 94%,#0000)}.ticker span{animation:36s linear infinite marquee;display:inline-block}@keyframes marquee{to{transform:translate(-50%)}}.lines{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;display:grid}.loading{color:var(--muted);margin:0}.line-tab{border:1px solid var(--edge);background:var(--panel);text-align:left;border-radius:12px;align-items:center;gap:10px;padding:10px 12px;display:flex}.line-tab .symbol{border:5px solid var(--line);width:40px;height:40px;color:var(--sign-ink);background:#fff;border-radius:50%;flex:none;place-items:center;font-size:13px;font-weight:800;display:grid}.line-tab .info{flex-direction:column;flex:1;gap:6px;min-width:0;display:flex}.line-tab .count{color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:14px}.line-tab .bar{background:var(--rail-off);border-radius:2px;height:4px;overflow:hidden}.line-tab .bar i{background:var(--line);height:100%;display:block}.line-tab:hover{border-color:var(--edge-strong)}.line-tab[aria-selected=true]{border-color:var(--line);background:var(--panel-strong);box-shadow:0 0 24px -10px var(--line)}.line-tab[aria-selected=true] .count{color:var(--ink)}.book-tab .symbol{color:#5a4520;font-family:var(--jp-font);background:#e8d6ad;border:0;border-radius:8px;font-size:18px}.book-tab .name{color:var(--muted);font-size:13px}.book-tab .count{color:var(--red);font-size:16px;font-weight:700}.map{--rail-y:36px;--row-h:104px;padding:4px 0 8px}.row{grid-template-columns:repeat(var(--cols), minmax(0, 1fr));height:var(--row-h);display:grid;position:relative}.row.rtl{direction:rtl}.stop{direction:ltr;flex-direction:column;align-items:center;display:flex;position:relative}.stop:before,.stop:after{content:"";top:calc(var(--rail-y) - 3px);background:repeating-linear-gradient(90deg, var(--rail-off) 0 8px, transparent 8px 14px);width:calc(50% + 1px);height:6px;position:absolute}.stop:before{left:0}.stop:after{right:0}.row.rtl .stop:before{left:auto;right:0}.row.rtl .stop:after{left:0;right:auto}.stop.lit-in:before,.stop.lit-out:after{background:var(--line)}.stop.row-start:before,.stop.row-end:after{display:none}.turn{inset-inline-end:0;top:calc(var(--rail-y) - 3px);width:calc(100% / var(--cols) / 2);height:calc(var(--row-h) + 6px);border:6px dashed var(--rail-off);border-inline-start:0;border-start-end-radius:60px;border-end-end-radius:60px;position:absolute}.turn.lit{border-style:solid;border-color:var(--line)}.station{z-index:1;width:60px;height:60px;margin-top:calc(var(--rail-y) - 30px);background:0 0;border:0;border-radius:50%;place-items:center;padding:0;display:grid;position:relative}.station .node{border:2px solid var(--rail-off);background:var(--bg);border-radius:50%;place-items:center;width:14px;height:14px;transition:transform .15s ease-out;display:grid}.station:disabled{cursor:default}.station.open .node{border:6px solid var(--line);background:#fff;width:28px;height:28px}.station.current .node{animation:1.8s ease-out infinite beckon}@keyframes beckon{0%{box-shadow:0 0 0 0 var(--line)}70%,to{box-shadow:0 0 0 14px #0000}}.station.stamped .node{border:2.5px solid var(--line);background:var(--bg);width:54px;height:54px;box-shadow:inset 0 0 0 3px var(--bg), inset 0 0 0 4.5px var(--line);color:var(--line);transform:rotate(var(--tilt));align-content:center;gap:0;line-height:1}.station.stamped small{opacity:.85;font-size:11px}.station.stamped b{font-variant-numeric:tabular-nums;font-size:21px;font-weight:800}.station.perfect .node{--line:var(--gold)}.station.perfect b{letter-spacing:.04em;font-size:15px}.station:not(:disabled):hover .node{transform:rotate(var(--tilt,0deg)) scale(1.1)}.station.thunk .node{animation:.5s cubic-bezier(.2,1.4,.4,1) both thunk}@keyframes thunk{0%{opacity:0;transform:rotate(var(--tilt)) scale(2.2)}60%{opacity:1;transform:rotate(var(--tilt)) scale(.92)}to{transform:rotate(var(--tilt)) scale(1)}}.stop .label{color:var(--faint);font-family:var(--mono);font-variant-numeric:tabular-nums;margin-top:4px;font-size:13px}.stop:has(.open) .label{color:var(--ink)}.stop .label .err{color:var(--red);margin-left:4px;font-family:inherit}.playbar{align-items:center;gap:12px;display:flex}.where{font-variant-numeric:tabular-nums;align-items:center;gap:8px;font-size:17px;font-weight:700;display:flex}.kind-note{color:var(--muted);font-size:15px;font-weight:400}.stat{color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;margin-left:auto;font-size:15px}.route{height:34px;margin:0 12px;position:relative}.route:before{content:"";background:var(--rail-off);border-radius:2px;height:4px;position:absolute;top:25px;left:0;right:0}.route-dots i{background:var(--rail-off);border-radius:50%;width:10px;height:10px;transition:background .2s;position:absolute;top:27px;transform:translate(-50%,-50%)}.route-dots i.ok{background:var(--line)}.route-dots i.no{background:var(--red)}.route-dots i.now{border:3px solid var(--line);background:#fff;width:14px;height:14px}.route-dots i.now.no{border-color:var(--red)}.train{color:var(--line);line-height:0;transition:left .35s cubic-bezier(.5,0,.3,1);position:absolute;top:0;transform:translate(-50%)}.sign{background:linear-gradient(180deg, #fffdf6, var(--sign) 55%, #e9e5da);color:var(--sign-ink);cursor:text;border-radius:8px;margin:4px 6px 0;position:relative;overflow:hidden;box-shadow:0 0 0 6px #222a3a,0 0 0 7px #3a465d,0 24px 70px -24px #ffecbe59}.plate{border:3px solid var(--line);background:#fff;border-radius:7px;flex-direction:column;align-items:center;min-width:40px;padding:2px 5px 3px;font-weight:800;line-height:1.05;display:flex;position:absolute;top:14px;left:14px}.plate small{font-size:11px}.plate b{font-variant-numeric:tabular-nums;font-size:17px}.sign-body{text-align:center;flex-direction:column;align-items:center;gap:8px;padding:40px 24px 26px;display:flex}.sign-body.arrive{animation:.26s cubic-bezier(.2,.8,.3,1) arrive}@keyframes arrive{0%{opacity:0;transform:translate(36px)}}.meaning{overflow-wrap:anywhere;font-size:30px;font-weight:700;line-height:1.35}.headword{overflow-wrap:anywhere;font-size:34px;font-weight:800;line-height:1.25}.reading{letter-spacing:.06em;min-height:1.5em;color:var(--sign-faint);overflow-wrap:anywhere;font-size:26px;font-weight:600}.reading .done{color:var(--sign-ink)}.romaji{min-height:1.4em;font-family:var(--mono);letter-spacing:.05em;color:var(--sign-faint);overflow-wrap:anywhere;font-size:22px}.romaji .typed{color:var(--line-ink);font-weight:600}.romaji .cursor{color:var(--sign-ink);border-bottom:3px solid var(--line-ink)}.romaji .caret{vertical-align:-.15em;border-bottom:3px solid var(--line-ink);width:.6em;height:1.1em;animation:1s step-end infinite blink;display:inline-block}@keyframes blink{50%{border-bottom-color:#0000}}.romaji .gap{white-space:pre}.sign.sentence .meaning{font-size:24px}.sign.sentence .headword{font-size:23px}.sign.sentence .reading{letter-spacing:.02em;font-size:19px}.sign.sentence .romaji{font-size:18px}.band{background:var(--line);min-height:46px;color:var(--on-line);grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;padding:8px 14px;font-size:15px;display:grid}.previous{flex-wrap:wrap;align-items:baseline;gap:2px 8px;min-width:0;margin:0;display:flex}.previous .word b{margin-right:8px;font-size:17px}.previous .roma{font-family:var(--mono);opacity:.85}.previous .mark{border-radius:50%;align-self:center;place-items:center;width:20px;height:20px;font-size:12px;font-weight:800;display:inline-grid}.previous .mark.ok{background:#fff9}.previous .mark.no{color:#fff;background:#c62828}.previous .origin,.next-stop{font-family:var(--jp-font);white-space:nowrap;font-weight:700}.sign.miss{box-shadow:0 0 0 6px #222a3a, 0 0 0 7px var(--red), 0 0 40px -6px var(--red);animation:.2s shake}.sign.miss .romaji .cursor{color:#d32f2f;border-bottom-color:#d32f2f}.sign.miss .romaji .caret{border-bottom-color:#d32f2f;animation:none}@keyframes shake{25%{transform:translate(-4px)}75%{transform:translate(4px)}}.keys{opacity:0;border:0;width:1px;height:1px;padding:0;font-size:16px;position:absolute;top:0;left:0}.platform{opacity:.8;background:radial-gradient(circle,#b3901f 2.2px,#0000 2.8px) 0 0/11px 11px,#e3bf3c;border-radius:3px;height:12px;margin:10px 0 0}.below{align-items:center;gap:12px;min-height:36px;display:flex}.warn{color:var(--red);margin:0}.below .ghost{flex:none;margin-left:auto}.ticket{color:#1c2a24;background:repeating-linear-gradient(-45deg,#286e5a12 0 2px,#0000 2px 7px),#d9ece2;border-radius:8px;align-self:center;width:min(560px,100%);padding:20px 26px 16px;animation:.4s cubic-bezier(.2,.8,.3,1) issue;position:relative;-webkit-mask:radial-gradient(circle at 0,#0000 11px,#000 11.5px) 0/51% 100% no-repeat,radial-gradient(circle at 100%,#0000 11px,#000 11.5px) 100%/51% 100% no-repeat;mask:radial-gradient(circle at 0,#0000 11px,#000 11.5px) 0/51% 100% no-repeat,radial-gradient(circle at 100%,#0000 11px,#000 11.5px) 100%/51% 100% no-repeat}@keyframes issue{0%{opacity:0;transform:translateY(-18px)}}.ticket-head{color:#3d5a4d;letter-spacing:.2em;justify-content:space-between;padding-right:34px;font-size:14px;font-weight:700;display:flex}.ticket-route{font-family:var(--mono);letter-spacing:.02em;flex-wrap:wrap;align-items:center;gap:4px 14px;margin-top:8px;font-size:32px;font-weight:800;display:flex}.ticket-route b[lang=ja]{font-family:var(--jp-font);font-size:28px}.ticket-route .arrow{color:var(--line-ink)}.ticket-route .blocked{color:#8a9a92;text-decoration:line-through;text-decoration-thickness:3px}.ticket h2{margin:4px 0 0;font-size:18px;font-weight:700}.numbers{border-block:1px solid #1c2a242e;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:14px 0 0;padding:10px 0;display:grid}.numbers dt{color:#4f6a5e;font-size:13px}.numbers dd{font-variant-numeric:tabular-nums;margin:2px 0 0;font-size:20px;font-weight:700}.ticket-foot{color:#4f6a5e;font-variant-numeric:tabular-nums;flex-wrap:wrap;gap:2px 16px;min-height:46px;padding:10px 92px 0 0;font-size:13px;display:flex}.punch{background:var(--bg);clip-path:polygon(50% 0,100% 38%,82% 100%,18% 100%,0 38%);width:18px;height:18px;position:absolute;top:18px;right:22px;transform:scale(0)}.ticket.passed .punch{animation:.25s ease-out .35s both punch}@keyframes punch{to{transform:scale(1)}}.seal{letter-spacing:.04em;border:3px double;border-radius:50%;place-items:center;width:72px;height:72px;font-size:21px;font-weight:800;animation:.45s cubic-bezier(.2,1.4,.4,1) .25s both seal;display:grid;position:absolute;bottom:14px;right:20px;transform:rotate(-14deg)}.seal.ok{color:#c8312c}.seal.no{color:#6d7d75}.seal.review{color:#8a5a12}@keyframes seal{0%{opacity:0;transform:rotate(-14deg)scale(2)}}.rules{color:var(--faint);text-align:center;margin:0;font-size:13px}.actions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.actions button{border-radius:10px;padding:10px 18px;font-size:15px}.actions button:not(.primary){border:1px solid var(--edge-strong);background:var(--panel-strong)}.actions button.ghost{background:0 0}.missed-title{color:var(--muted);margin:12px 0 0;font-size:15px;font-weight:600}.note{color:var(--muted);margin:0}.filters{flex-wrap:wrap;gap:8px;display:flex}.filter{border:1px solid var(--edge);background:var(--panel);border-radius:999px;align-items:baseline;gap:6px;padding:7px 14px;font-size:15px;display:flex}.filter .count{color:var(--faint);font-variant-numeric:tabular-nums}.filter[aria-selected=true]{border-color:var(--led);background:var(--panel-strong)}.start{align-self:flex-start}.empty{color:var(--muted);margin:0}.missed{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;margin:0;padding:0;list-style:none;display:grid}.missed li{color:#2b2214;clip-path:polygon(14px 0,100% 0,100% 100%,14px 100%,0 calc(100% - 14px),0 14px);background:#e8d6ad;flex-direction:column;gap:3px;min-width:0;padding:12px 14px 12px 34px;font-size:14px;display:flex;position:relative}.missed li:before{content:"";background:var(--bg);border-radius:50%;width:10px;height:10px;margin-top:-5px;position:absolute;top:50%;left:11px;box-shadow:0 0 0 2px #c7b07e}.missed li.sentence{grid-column:1/-1}.missed .word{overflow-wrap:anywhere}.missed .word b{margin-right:8px;font-size:19px}.missed li.sentence .word b{font-size:16px}.missed .kana{color:#6e5c3a}.missed .roma{color:#5c4b2c;font-family:var(--mono);overflow-wrap:anywhere;font-size:13px}.missed .zh{color:#3a2f1c}.missed .misses{color:#b0302a;white-space:nowrap;order:-1;font-size:12px;font-weight:700}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}@media (width<=560px){.app{padding-top:24px}.dest{font-size:22px}.board-go{flex:1 0 100%;margin-left:0}.line-tab{text-align:center;flex-direction:column;gap:6px;padding:10px 6px 8px}.line-tab .symbol{border-width:4px;width:36px;height:36px;font-size:12px}.line-tab .info{gap:4px;width:100%}.line-tab .count{font-size:13px}.book-tab .count{font-size:14px}.sign-body{padding:50px 14px 22px}.meaning{font-size:25px}.headword{font-size:28px}.reading{font-size:22px}.romaji{font-size:19px}.ticket{padding:18px 20px 14px}.ticket-route{font-size:26px}.numbers{grid-template-columns:repeat(2,minmax(0,1fr))}.seal{width:62px;height:62px;font-size:18px}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.ticker span{animation:none}}
