.stage{max-width:760px;margin:auto}.turnbar{--tb-msg-lines:3;--tb-st-lines:1;--tb-rt:0px;--tb-st-rt:0px}.message{font-size:14px}.board-wrap{background:#edf3f0;border:1px solid var(--line);border-radius:14px;padding:12px;position:relative}.hub{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px}.engine{display:flex;align-items:center;gap:8px;font-weight:650}.engine svg{width:40px;height:63px}.scores{display:grid;grid-template-columns:repeat(2,1fr);gap:6px;margin:12px 0}.score{border:1px solid var(--line);padding:8px;border-radius:8px;background:var(--surface);font-size:14px}.score.active{outline:2px solid var(--accent)}.trains{display:grid;gap:8px}.train{display:flex;align-items:center;gap:10px;border:1px solid #bbc9c1;border-radius:10px;background:var(--surface);padding:8px;min-height:90px;color:var(--ink);text-align:left;cursor:pointer;width:100%}.train[disabled]{cursor:default;opacity:1}.train.eligible{border:2px solid var(--accent);padding:7px}.train.pending{background:#fff3d9}.train.selected{outline:3px solid var(--accent)}.train-name{flex:1;min-width:0;font-weight:650}.train small{display:block;font-size:12px;font-weight:400;margin-top:4px}.tail{display:flex;align-items:center;gap:3px}.tail svg{width:34px;height:53px;opacity:.5}.tail svg:last-child{width:45px;height:71px;opacity:1}.end{min-width:35px;text-align:center;font-size:25px;font-weight:650}.hand{display:flex;flex-wrap:wrap;justify-content:center;gap:6px;padding:8px 0;min-height:100px}.tile{background:transparent;border:2px solid transparent;border-radius:9px;padding:2px;width:54px;height:86px;color:var(--ink);cursor:pointer}.tile svg{width:46px;height:74px}.tile[aria-pressed=true]{border-color:var(--accent);background:#dbe9e1;transform:translateY(-3px)}.tile[disabled]{cursor:default;opacity:.65}.actions,.utility{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin:14px 0}.hand-note{margin:8px 0;min-height:48px;text-align:center;font-size:14px}.privacy{min-height:100px;display:grid;place-content:center;text-align:center}.history{font-size:13px}.history p{overflow-wrap:anywhere}.field{margin:10px 0}.field label{display:block;margin-bottom:5px}.field select{width:100%;min-height:44px}.howto img{width:100%;height:auto;border-radius:12px}.howto{margin:20px 0}.howto figcaption{text-align:center;font-size:14px}.ad-gap{height:160px}.article{max-width:760px;margin:auto;line-height:1.85}.article table{width:100%;border-collapse:collapse}.article td,.article th{border:1px solid var(--line);padding:8px}#result{text-align:center;padding:15px;background:var(--surface);border-radius:10px}button:focus-visible,a:focus-visible{outline:3px solid var(--accent);outline-offset:3px}@media(min-width:641px){.turnbar{--tb-msg-lines:2}.hand-note{min-height:28px}.scores{grid-template-columns:repeat(4,1fr)}}@media(max-width:390px){.board-wrap{padding:8px}.train{gap:6px}.tail svg:not(:last-child){display:none}.train-name{font-size:14px}}@media(prefers-reduced-motion:no-preference){.tile{transition:transform .15s}.train.flash{animation:placed .45s}@keyframes placed{50%{background:#d0e3d8}}}
@media(max-width:640px){.scores{margin:8px 0}.score{padding:6px}.hub{margin-bottom:8px}.engine svg{width:30px;height:47px}.train{min-height:65px;padding:6px}.train.eligible{padding:5px}.tail svg:last-child{width:35px;height:55px}.board-wrap h2{font-size:18px;margin:12px 0 4px}.hand{flex-wrap:nowrap;justify-content:flex-start;overflow-x:auto;min-height:90px;padding:8px 0;scrollbar-width:thin}.tile{flex:0 0 54px}.hand-note{min-height:44px;margin:6px 0}.actions{gap:6px;margin:10px 0}.actions .btn{padding:8px 12px}.utility{gap:6px}.privacy{min-height:90px}}

.engine svg,.tail svg,.tile{color:#293b32}@media(prefers-color-scheme:dark){.board-wrap{background:#22362f;border-color:#52685e}.train.pending{background:#57462b}.tile[aria-pressed=true]{background:#526a5f}.train{border-color:#52685e}}

/* Direct hand -> train end; the wood and number faces reuse existing project art. */
.stage{max-width:640px}.board-wrap{background:#eadcc3 url('assets/wood_light.webp') center/480px;padding:8px;border-radius:6px;color:var(--ink)}
.hub{font-size:14px;gap:8px}.engine{font-weight:600}.engine svg{width:72px;height:38px;filter:var(--shadow-piece)}
.scores{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:8px 0}.score{display:grid;gap:4px;border-radius:6px;font-size:14px}.score small{font-size:14px}.score.active{outline:2px solid var(--accent)}
.hand-heading{display:flex;gap:8px;align-items:center;justify-content:space-between}.hand-heading h2,.trains-heading{font-size:17px;margin:8px 0}.hand-heading .btn{font-size:16px;min-height:44px;white-space:normal}
.hand{display:grid;grid-template-columns:repeat(auto-fit,minmax(48px,1fr));gap:8px;max-height:264px;overflow-y:auto;overflow-x:hidden;justify-content:normal;min-height:0;padding:4px;scrollbar-width:thin;align-content:start;background:var(--surface);border-radius:6px}
.tile{width:100%;height:78px;padding:0;border:2px solid transparent;border-radius:6px;min-width:44px;min-height:44px;transform:none;display:grid;place-items:center}
.tile svg{width:38px;height:73px;filter:var(--shadow-piece)}.tile.playable:not(:disabled){border-color:var(--line-strong);background:var(--surface)}.tile[aria-pressed=true]{border:3px solid var(--accent);background:var(--accent-soft);transform:none}.tile[aria-pressed=true] svg{filter:var(--shadow-lift)}.tile:disabled{opacity:.7}
.hand-note{min-height:42px;line-height:1.5;font-size:14px;margin:8px 0;text-align:left}.actions{margin:8px 0;gap:8px}.actions .btn{font-size:17px;min-height:44px}.trains{gap:8px}.train{position:relative;display:grid;grid-template-columns:minmax(0,1fr) 74px 44px;gap:8px;min-height:74px;padding:8px;border:2px solid var(--line-strong);border-radius:6px}
.train-name{font-size:16px;line-height:1.35}.train small{font-size:14px;line-height:1.4}.tail{justify-content:end;min-width:0}.tail svg,.tail svg:last-child{width:74px;height:40px;opacity:1;filter:var(--shadow-piece)}.empty-track{font-size:14px;color:var(--ink-sub)}
.end{display:grid;place-items:center;border:1px solid var(--line-strong);border-radius:5px;min-width:44px;min-height:44px;font-size:24px}.end small{margin:0;font-size:14px}.train.eligible{border:3px solid var(--ok);padding:7px;background:var(--surface)}.train.eligible .end{border:2px solid var(--ok);background:var(--bg)}.train.pending{border-color:var(--warn);background:var(--surface)}.train.eligible.pending{border-color:var(--ok)}
.placement-preview{display:flex;align-items:center;gap:8px;grid-column:1/-1;justify-content:end;border-top:1px dashed var(--ok);padding-top:4px}.placement-preview svg{width:74px;height:38px}.placement-preview small{margin:0;color:var(--ok);font-weight:600}.potential .end{border-style:dashed}
.options,.history{font-size:16px;margin-top:12px}.options summary,.history summary{min-height:44px;padding:8px 0}.utility{gap:8px;margin:8px 0}.utility .btn{font-size:17px;min-height:44px}.history p,.rule-mini{font-size:14px;overflow-wrap:anywhere}.language-link{margin-left:auto}.field select{font:inherit;font-size:16px;min-height:44px;width:100%;background:var(--surface);color:var(--ink);border:1px solid var(--line-strong);border-radius:6px;padding:8px}
.moving-tile{position:fixed;z-index:50;pointer-events:none;filter:var(--shadow-lift)}.moving-tile svg{width:100%;height:100%}.motion-target{animation:placed .22s ease-out}.privacy{min-height:96px;background:var(--surface);border-radius:6px;padding:8px}
.howto{margin:24px 0}.howto img{display:block;max-width:460px;margin:auto;filter:var(--img-dim);border:1px solid var(--line);border-radius:6px}.howto figcaption{font-size:16px;text-align:left}
@media(min-width:641px){.scores{grid-template-columns:repeat(4,minmax(0,1fr))}.hand{max-height:180px}}
@media(max-width:374px){.train-name{font-size:14px}.train{grid-template-columns:minmax(0,1fr) 66px 44px}.tail svg,.tail svg:last-child{width:66px;height:36px}}
@media(prefers-color-scheme:dark){.board-wrap{background-color:#594b38;color:#1f2328}.board-wrap .hub,.board-wrap h2{color:#1f2328}.train.pending{background:var(--surface)}}
@media(prefers-reduced-motion:reduce){.tile,.motion-target{animation:none;transition:none}}
.actions:not(:has(>button:not([hidden]))){display:none}
