:root{--bg:#2b3a2f;--bg-soft:#34463a;--panel:#f6efdf;--panel-strong:#e7dbbf;--ink:#2d2a24;--ink-soft:#5d574b;--on-dark:#f6efdf;--primary:#2f7d70;--primary-ink:#fff;--running:#a8701f;--success:#2f7d4f;--error:#b8352d;--focus:#ffd34d;--tap:52px;--radius:14px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}*,:before,:after{box-sizing:border-box}html,body{background:var(--bg);height:100%;color:var(--ink);overscroll-behavior:none;margin:0;overflow:hidden}body{-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%}.app{height:100dvh;padding:env(safe-area-inset-top) env(safe-area-inset-right) 0 env(safe-area-inset-left);grid-template-rows:auto minmax(0,1fr) auto;grid-template-areas:"top""stage""panel";display:grid}.topbar{color:var(--on-dark);grid-area:top;align-items:center;gap:8px;padding:8px 12px;display:flex}.level-info{text-align:center;flex:1;min-width:0;line-height:1.2}.level-number{opacity:.8;letter-spacing:.02em;font-size:.8rem}.level-name{white-space:nowrap;text-overflow:ellipsis;margin:0;font-size:1.15rem;overflow:hidden}.level-progress{justify-content:center;gap:4px;margin:4px 0 0;padding:0;list-style:none;display:flex}.level-progress li{border:2px solid #f6efdf73;border-radius:2px;width:8px;height:8px}.level-progress li.is-done{background:#f4ab45;border-color:#f4ab45}.level-progress li.is-current{border-color:var(--on-dark);transform:scale(1.25)}.stage{grid-area:stage;min-width:0;min-height:0;position:relative}.board{touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;cursor:pointer;position:absolute;inset:2px 6px 8px}.board canvas{image-rendering:pixelated;display:block}.loading[hidden]{display:none}.loading{color:var(--on-dark);place-items:center;margin:0;font-weight:600;display:grid;position:absolute;inset:0}.icon{width:24px;height:24px;image-rendering:pixelated;flex:none}.btn-primary .icon{filter:brightness(0)invert();width:32px;height:32px}.btn-ghost .icon{filter:brightness(0)invert(.96);width:24px;height:24px}.panel{padding:12px 12px calc(12px + env(safe-area-inset-bottom));background:var(--panel);border-radius:18px 18px 0 0;flex-direction:column;grid-area:panel;gap:10px;display:flex;box-shadow:0 -4px 18px #0000002e}.status{border-left:5px solid var(--primary);background:#fffaf0;border-radius:10px;flex-direction:column;justify-content:center;gap:2px;min-height:3.4em;padding:6px 12px;font-size:.95rem;line-height:1.3;display:flex}.status[data-tone=error]{border-left-color:var(--error);background:#fcebe7}.status[data-tone=success]{border-left-color:var(--success);background:#e8f5e9}.status-title{font-size:1rem}.mode-chip{background:var(--panel-strong);letter-spacing:.02em;border-radius:999px;align-self:flex-start;padding:1px 8px;font-size:.75rem;font-weight:700}.mode-chip[data-mode=RUNNING]{background:#f3dfb8}.mode-chip[data-mode=SUCCESS]{background:#cfe8d2}.mode-chip[data-mode=FAILURE]{background:#f6d0c9}.status-text{color:var(--ink-soft)}.controls{grid-template-columns:minmax(0,1.35fr) repeat(3,minmax(0,1fr));gap:8px;display:grid}.controls .btn{min-width:0}.btn-secondary .icon{width:20px;height:20px}.btn{min-height:var(--tap);min-width:44px;font:inherit;cursor:pointer;touch-action:manipulation;-webkit-user-select:none;user-select:none;border:0;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:1px;padding:6px 8px;font-weight:650;line-height:1.1;transition:transform 80ms,background-color .12s,opacity .12s;display:inline-flex}.btn:active:not(:disabled){transform:scale(.97)}.btn:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.btn:disabled{opacity:.42;cursor:default}.btn-primary{color:var(--primary-ink);background:var(--primary);flex-direction:row;gap:8px;font-size:1.15rem;box-shadow:inset 0 -3px #0000002e}.btn-primary[data-mode=RUNNING]{background:var(--running)}.btn-primary[data-mode=FAILURE]{background:var(--error)}.btn-primary[data-mode=SUCCESS]{background:var(--success)}.btn-secondary{color:var(--ink);background:var(--panel-strong);box-shadow:inset 0 -3px #00000014}.btn-secondary.is-armed{background:#f2c14e}.btn-caption{color:var(--ink-soft);font-size:.68rem;font-weight:500}.btn-ghost{min-height:44px;color:var(--on-dark);background:#ffffff1f;flex-direction:row;gap:6px;padding:6px 12px}.btn-toggle[aria-pressed=false]{background:#0000002e;box-shadow:inset 0 0 0 2px #ffffff2e}.btn-toggle[aria-pressed=false] .icon{opacity:.55}.btn-toggle[aria-pressed=true]{box-shadow:inset 0 -3px #0003}.btn-sound{padding:6px 10px}.level-dialog{background:var(--panel);width:min(92vw,460px);max-height:86dvh;color:var(--ink);border:0;border-radius:18px;padding:18px}.level-dialog::backdrop{background:#141c1699}.level-dialog h2{margin:0 0 12px;font-size:1.2rem}.level-grid{grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:8px;margin-bottom:14px;display:grid}.level-option{min-height:var(--tap);color:var(--ink);font:inherit;text-align:left;cursor:pointer;touch-action:manipulation;background:#fffaf0;border:2px solid #0000;border-radius:12px;align-items:center;gap:10px;padding:8px 12px;display:flex}.level-option[aria-current=true]{border-color:var(--primary)}.level-option:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.level-option-number{background:var(--primary);color:#fff;border-radius:50%;flex:none;place-items:center;width:32px;height:32px;font-weight:700;display:grid}.level-option-name{flex:1}.level-option-done{display:inline-flex}.level-dialog>.btn{width:100%}@media (orientation:landscape) and (width>=720px){.app{padding-bottom:env(safe-area-inset-bottom);grid-template:"top top""stage panel"minmax(0,1fr)/minmax(0,1fr) clamp(260px,30vw,340px)}.panel{border-radius:18px;justify-content:flex-start;margin:0 12px 12px 0;padding:14px}.controls{grid-template-columns:1fr 1fr 1fr}.btn-primary{grid-column:1/-1;min-height:64px}}@media (orientation:landscape) and (height<=520px){.app{grid-template:"top panel""stage panel"minmax(0,1fr)/minmax(0,1fr) clamp(220px,34vw,300px)}.topbar{padding:4px 8px}.level-name{font-size:1rem}.panel{border-radius:16px;gap:8px;margin:6px 6px 6px 0;padding:10px;overflow-y:auto}.status{min-height:0;font-size:.85rem}.btn{min-height:44px}.btn-primary{min-height:52px}}@media (width<=520px){.topbar{gap:6px;padding:6px 8px}.topbar .btn-ghost{padding:6px 10px}.topbar .btn-ghost span{display:none}.level-name{font-size:1.05rem}}@media (width<=380px){.controls{gap:6px}.btn-caption{display:none}}@media (prefers-reduced-motion:reduce){.btn{transition:none}.btn:active:not(:disabled){transform:none}}[hidden]{display:none!important}:root{--primary-ink:oklch(97% .012 85)}button:focus-visible,[tabindex]:focus-visible{outline:3px solid var(--focus);outline-offset:3px}.campaign-screen{height:100dvh;color:var(--on-dark);padding-top:env(safe-area-inset-top);flex-direction:column;display:flex}.map-topbar{z-index:2;background:var(--bg);border-bottom:1px solid oklch(70% .03 140/.2);align-items:center;gap:16px;padding:16px max(20px,50vw - 600px);display:flex}.brand{flex:1;align-items:center;gap:12px;display:flex}.brand img{width:64px;image-rendering:pixelated}.brand h1{letter-spacing:-.04em;margin:0;font-size:1.5rem}.brand span{opacity:.75;font-size:.8rem}.campaign-totals{font-variant-numeric:tabular-nums;align-items:center;gap:16px;display:flex}.campaign-totals span{color:oklch(85% .13 85)}.map-body{flex:1;grid-template-columns:minmax(320px,720px) 320px;justify-content:center;gap:32px;min-height:0;display:grid}.map-scroll{overscroll-behavior:contain;scrollbar-color:var(--panel-strong) var(--bg);position:relative;overflow-y:auto}.map-rail{width:100%;height:100%;position:absolute;inset:0;overflow:visible}.station-sheet{max-height:calc(100% - 68px);color:var(--on-dark);align-self:start;margin:48px 20px 20px 0;overflow-y:auto}.eyebrow{letter-spacing:.08em;text-transform:uppercase;color:oklch(82% .07 125);font-size:.7rem}.station-sheet h2{letter-spacing:-.04em;margin:10px 0 16px;font-size:1.6rem;line-height:1.2}.challenge-badge{border:1px solid oklch(70% .03 140/.5);border-radius:5px;padding:5px 8px;font-size:.75rem;display:inline-block}.station-sheet p{font-size:.9rem;line-height:1.5}.station-sheet .star-targets,.station-best{opacity:.8}.station-sheet .btn{width:100%;margin-top:12px}.map-note{opacity:.65;font-size:.75rem!important}.region-indicator{letter-spacing:.06em;background:var(--bg);pointer-events:none;border-radius:5px;padding:6px 10px;font-size:.65rem;position:fixed;bottom:12px;left:16px}.challenge-hud{font-variant-numeric:tabular-nums;flex-wrap:wrap;align-items:center;gap:8px;font-size:.8rem;display:flex}.challenge-hud>span{flex:1}.challenge-hud strong{background:var(--panel-strong);border-radius:5px;padding:5px 7px}.status{border:0;border-radius:6px}.status[data-tone=error]{background:oklch(91% .04 30)}.status[data-tone=success]{background:oklch(92% .045 145)}.star-targets{margin:0;font-size:.74rem;line-height:1.5}.keyboard-help{color:var(--ink-soft);text-align:center;margin:0;font-size:.65rem}.controls .btn{gap:5px;font-size:.82rem}.controls .btn-primary{grid-column:auto;min-height:56px;font-size:1rem}.result-stars{color:oklch(56% .11 78);letter-spacing:8px;font-size:2rem}.result-actions{flex-wrap:wrap;gap:8px;display:flex}.result-actions .btn-primary{flex-basis:100%}.result-actions .btn-secondary{flex:1}.result-actions .btn{min-height:44px;font-size:.85rem}#result h2{margin:6px 0;font-size:1.4rem}#result p{margin:8px 0;font-size:.85rem}.pause-cover{z-index:5;color:var(--on-dark);text-align:center;background:oklch(24% .03 145/.96);flex-direction:column;justify-content:center;align-items:center;padding:20px;display:flex;position:absolute;inset:0}.pause-cover p{font-size:.85rem}.storage-notice{z-index:20;background:oklch(88% .11 85);margin:0;padding:8px;font-size:.8rem;position:fixed;bottom:0;left:0;right:0}.danger{background:var(--error);color:var(--on-dark)}#settings .btn{margin-top:8px}@media (width>=900px){.panel{justify-content:center;gap:18px}.controls{grid-template-columns:repeat(3,1fr)}.controls .btn-primary{grid-column:1/-1}.map-scroll{border-inline:1px solid oklch(70% .03 140/.2)}}@media (width<=760px){.map-topbar{gap:10px;padding:10px 14px}.brand img{width:44px}.brand{gap:6px}.brand h1{font-size:1.15rem}.brand span{display:none}.campaign-totals{gap:10px;font-size:.8rem}.map-body{flex-direction:column;gap:0;display:flex}.map-scroll{flex:1;min-height:0}.station-sheet{max-height:55dvh;padding:14px 18px calc(12px + env(safe-area-inset-bottom));background:var(--panel);color:var(--ink);z-index:4;flex-shrink:0;grid-template-columns:1fr auto;align-items:center;column-gap:12px;width:100%;margin:0;display:grid;box-shadow:0 -5px oklch(30% .03 140/.15)}.station-sheet .eyebrow{color:var(--ink-soft);grid-column:1;font-size:.62rem}.station-sheet h2{grid-column:1;margin:4px 0;font-size:1.15rem}.station-sheet .challenge-badge{grid-column:1;width:fit-content;font-size:.65rem}.station-sheet #station-objective{grid-column:1/-1;margin:7px 0 0;font-size:.75rem;display:block}.station-sheet #station-rules{grid-column:1/-1;margin:7px 0 0;font-size:.75rem}.station-sheet .star-targets{grid-column:1/-1;margin:4px 0 0;font-size:.65rem}.station-sheet .station-best{grid-column:1;margin:4px 0 0;font-size:.65rem}.station-sheet .btn{grid-area:1/2/4;width:92px;min-height:58px;margin:0}.station-sheet .map-note,.region-indicator{display:none}.panel{padding:10px 10px calc(10px + env(safe-area-inset-bottom));gap:7px}.status{min-height:0;padding:7px 8px;font-size:.8rem}.status-title{font-size:.9rem}.level-name{font-size:1rem}.challenge-hud{font-size:.7rem}.keyboard-help{font-size:.6rem}.panel .star-targets{font-size:.65rem}.result-stars{font-size:1.5rem}.result-actions .btn-primary{flex:1.3}.result-actions .btn{font-size:.72rem}#result h2{font-size:1.1rem}#result p{font-size:.75rem}.controls .btn{min-height:48px;font-size:.72rem}.controls .btn .icon{width:18px;height:18px}}@media (orientation:landscape) and (height<=520px){.panel{justify-content:flex-start;gap:8px;overflow:auto}.controls{grid-template-columns:repeat(3,1fr)}.controls .btn-primary{grid-column:1/-1}.keyboard-help{display:none}.map-topbar{padding-block:4px}.station-sheet{max-height:calc(100% - 32px);margin-top:12px}.station-sheet .map-note{display:none}.station-sheet .btn{min-height:44px;margin-top:8px}.station-sheet h2{font-size:1.2rem}.station-sheet p{margin:8px 0;font-size:.75rem}}:root{--wood-dark:#5a3a2b;--wood-mid:#7a4f37;--wood-light:#efbb82;--wood-edge:#2a1a1c;--paper:#fbf3df;--outline:#0f0c27;--loco-red:#c8463a;--brass:#f2c14e;--map-px:1.5}img,.icon{image-rendering:pixelated}.screen.is-entering{animation:.42s ease-out both screen-in}@keyframes screen-in{0%{opacity:0}to{opacity:1}}.intro-screen{z-index:30;color:var(--on-dark);background:#b0dbec;place-items:center;display:grid;position:fixed;inset:0;overflow:hidden}.intro-screen.is-leaving{animation:.65s ease-in both intro-out}@keyframes intro-out{to{opacity:0;transform:scale(1.04)}}.intro-scene{position:absolute;bottom:0;left:50%;transform:translate(-50%)}.intro-art{width:100%;height:100%;display:block}.intro-smoke{width:calc(12 * var(--px));height:calc(12 * var(--px));opacity:0;animation:2.7s step-end infinite intro-puff,2.7s ease-out infinite intro-rise;animation-delay:var(--delay);pointer-events:none;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAvklEQVR42mNgGAWkg83rt/7fvH7rf2LVYqNhgJFaDmJgYGDwDfRmJEYdOsClb/P6rf99A70Zv3x89Z+HXwxOw8Qp9gApDoKpdXQyRRHfv+80Vj24HI/uCRZCjiIUqrgcRIxamBi6HkKOh9EMDAwMTLgswmYZMaGPTY6Y9I6shhjHw9SzDNZMjs/xBGNg/77TeJMCoaSFLkcoGaKroSgGiLGM2DSPTS0xeYZQDFCtFKJlMUpMETroKzJCldiwAAAOzvmy/3/GfgAAAABJRU5ErkJggg==) 0 0/400% 100%;position:absolute;top:37%;left:51%}@keyframes intro-puff{0%{background-position-x:0}25%{background-position-x:33.333%}50%{background-position-x:66.666%}75%{background-position-x:100%}}@keyframes intro-rise{0%{opacity:0;transform:translate(-50%)}12%{opacity:.95}to{opacity:0;transform:translate(calc(-50% - 6 * var(--px)), calc(-14 * var(--px)))}}.intro-glint{left:var(--x);top:var(--y);width:calc(12 * var(--px));height:calc(12 * var(--px));opacity:0;animation:1.2s step-end infinite intro-puff,4.2s ease-in-out infinite intro-glint;animation-delay:var(--delay);pointer-events:none;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAbElEQVR42mNgGADwda7Lf2qZxcQwxAHTYAtRUs0f8jGAFfz///8/KaHz/////8TGArXVM+JzPCMjIyOhaOVK2g0X+zbPlYGBgYGBO3kPI67ox6YeBrDpI2T+kI+BASkWqal+eGbi0YpsFBAPABiMbrsIX+mcAAAAAElFTkSuQmCC) 0 0/400% 100%;position:absolute}@keyframes intro-glint{0%,70%,to{opacity:0}80%{opacity:.9}}.intro-content{z-index:1;width:min(92vw,720px);padding:max(7vh, calc(env(safe-area-inset-top) + 24px)) 16px max(6vh, calc(env(safe-area-inset-bottom) + 24px));text-align:center;flex-direction:column;align-self:stretch;align-items:center;display:flex;position:relative}.intro-logo{letter-spacing:-.03em;color:var(--paper);text-shadow:-3px 0 0 var(--outline), 3px 0 0 var(--outline), 0 -3px 0 var(--outline), 0 3px 0 var(--outline), -3px -3px 0 var(--outline), 3px -3px 0 var(--outline), -3px 3px 0 var(--outline), 3px 3px 0 var(--outline), 0 9px 0 var(--outline), 3px 9px 0 var(--outline), -3px 9px 0 var(--outline);flex-wrap:wrap;justify-content:center;column-gap:.28em;margin:0;font-size:clamp(3rem,12vw,6.4rem);font-weight:900;line-height:.95;display:flex}.logo-rail{color:#f6c178}.logo-puzzle{color:var(--paper)}.intro-screen[data-mode=first] .intro-logo span{animation:.9s cubic-bezier(.2,1.4,.4,1) both logo-drop}.intro-screen[data-mode=first] .logo-puzzle{animation-delay:.14s}@keyframes logo-drop{0%{opacity:0;transform:translateY(-40px)}to{opacity:1;transform:none}}.intro-tagline{color:var(--ink);background:var(--paper);border:3px solid var(--outline);box-shadow:0 4px 0 var(--outline);margin:18px 0 0;padding:6px 14px;font-size:clamp(.95rem,2.6vw,1.15rem);font-weight:750}.intro-actions{flex-direction:column;align-items:center;gap:10px;margin-top:auto;display:flex}.intro-loading{color:var(--paper);background:#0f0c27b8;margin:0;padding:8px 14px;font-weight:700}.intro-loading span{animation:1.2s infinite dot}.intro-loading span:nth-child(2){animation-delay:.2s}.intro-loading span:nth-child(3){animation-delay:.4s}@keyframes dot{50%{opacity:.2}}.btn-journey{min-height:64px;color:var(--paper);background:var(--loco-red);border:3px solid var(--outline);box-shadow:inset 0 -5px 0 #00000040, 0 5px 0 var(--outline);border-radius:6px;flex-direction:row;gap:12px;padding:10px 28px;font-size:1.3rem;font-weight:850;animation:.5s ease-out both journey-in,2.6s ease-in-out .6s infinite journey-breathe}.btn-journey .icon{width:32px;height:32px}.btn-journey:hover{filter:brightness(1.08)}@keyframes journey-in{0%{opacity:0;transform:translateY(12px)}}@keyframes journey-breathe{50%{box-shadow:inset 0 -5px 0 #00000040, 0 5px 0 var(--outline), 0 0 0 8px #f2c14e73}}.intro-hint{color:var(--paper);background:#0f0c2799;margin:0;padding:4px 10px;font-size:.8rem;font-weight:650}.intro-sound{z-index:2;top:calc(env(safe-area-inset-top) + 12px);right:calc(env(safe-area-inset-right) + 12px);background:#0f0c278c;position:absolute}.intro-sound[aria-pressed=false] .icon{opacity:.6}.wood-bar{background:linear-gradient(180deg, #ffffff14 0 3px, transparent 3px calc(100% - 4px), #00000059 calc(100% - 4px)), repeating-linear-gradient(180deg, var(--wood-mid) 0 14px, #6c4430 14px 16px), var(--wood-mid);border-bottom:3px solid var(--wood-edge);color:var(--paper)}.wood-panel{color:var(--ink);border:30px solid #0000;border-image:url(/rail-puzzle/assets/panel-wood-BIhs8iSl.png) 30 fill/30px round;box-shadow:none!important;background:0 0!important}.btn-icon{padding:6px 10px}.ticket{background:var(--paper);color:var(--ink);border:2px solid var(--outline);font-variant-numeric:tabular-nums;align-items:center;gap:6px;padding:4px 12px 4px 8px;display:inline-flex;-webkit-mask:radial-gradient(5px at 0,#0000 98%,#000) 0/51% 100% no-repeat,radial-gradient(5px at 100%,#0000 98%,#000) 100%/51% 100% no-repeat;mask:radial-gradient(5px at 0,#0000 98%,#000) 0/51% 100% no-repeat,radial-gradient(5px at 100%,#0000 98%,#000) 100%/51% 100% no-repeat}.ticket .icon{width:20px;height:20px}.ticket-label{letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft);font-size:.68rem;font-weight:750}.ticket strong{font-size:1rem}.ticket[data-warn=true]{background:#ffd9c7;border-style:dashed}.ticket[data-warn=true] strong{color:#9b2a20}.map-topbar.wood-bar{border-bottom:3px solid var(--wood-edge)}.campaign-totals .ticket strong{font-size:.95rem}.map-body{background:radial-gradient(circle at 20% 10%, #ffffff0a, transparent 40%), var(--bg)}.campaign-map{isolation:isolate;position:relative;overflow:hidden}.map-region{color:var(--ink);background-image:linear-gradient(#ffffff1a, #ffffff1a), var(--ground);background-size:auto, calc(48px * var(--map-px)) auto;image-rendering:pixelated;position:relative}.map-region.pinewood-forest{background-image:linear-gradient(#d6ecbe38, #d6ecbe38), var(--ground)}.map-region.rocky-mountains{background-image:linear-gradient(#f5eee147, #f5eee147), var(--ground)}.region-blend{background:var(--prev-ground) 0 0 / calc(48px * var(--map-px)) auto;pointer-events:none;height:220px;position:absolute;inset:0 0 auto;-webkit-mask-image:linear-gradient(#000 0%,#0000 100%);mask-image:linear-gradient(#000 0%,#0000 100%)}.map-summit{background:var(--summit) 0 0 / calc(48px * var(--map-px)) auto;opacity:.85;pointer-events:none;height:380px;position:absolute;inset:auto 0 0;-webkit-mask-image:linear-gradient(#0000,#000 60%);mask-image:linear-gradient(#0000,#000 60%)}.map-river{background:var(--river) 0 0 / calc(48px * var(--map-px)) auto;pointer-events:none;border-block:3px solid #78493e;height:44px;animation:6s steps(24,end) infinite river-flow;position:absolute;left:0;right:0;box-shadow:inset 0 4px #0000002e}@keyframes river-flow{to{background-position-x:calc(48px * var(--map-px))}}.map-bridge{pointer-events:none;background:repeating-linear-gradient(#b17b59 0 6px,#834b40 6px 8px),#b17b59;border-inline:5px solid #612e35;width:64px;height:64px;position:absolute;transform:translate(-50%,-50%);box-shadow:0 4px #00000040}.map-rail{z-index:1;pointer-events:none;width:100%;height:100%;position:absolute;inset:0;overflow:visible}.map-rail path{fill:none}.rail-bed{stroke:#5c5660;stroke-width:26px}.rail-ties{stroke:#9e684f;stroke-width:34px;stroke-dasharray:5 8}.rail-line{stroke:#b3afb5;stroke-width:14px}.rail-center{stroke:#756269;stroke-width:8px}.region-sign{z-index:3;text-align:center;width:320px;height:160px;position:absolute;top:18px;left:50%;transform:translate(-50%)}.sign-board{width:100%;height:100%;position:absolute;inset:0}.sign-text{color:#3a2418;flex-direction:column;justify-content:center;align-items:center;height:66%;display:flex;position:absolute;top:18%;left:20%;right:20%}.sign-text span{letter-spacing:.12em;font-size:.6rem;font-weight:800}.sign-text h2{letter-spacing:-.03em;margin:2px 0 0;font-size:1.3rem;line-height:1.05}.sign-text p{margin:2px 0 0;font-size:.68rem;font-style:italic;font-weight:650}.region-sign:before,.region-sign:after{content:"";pointer-events:none;background:radial-gradient(circle,#ffd6788c,#0000 70%);border-radius:50%;width:34px;height:34px;animation:3.2s ease-in-out infinite lantern;position:absolute;top:46%;transform:translate(-50%,-50%)}.region-sign:before{left:11%}.region-sign:after{animation-delay:-1.3s;left:89%}@keyframes lantern{50%{opacity:.55}}.map-decor{width:calc(var(--w) * var(--map-px) * 1px);height:calc(var(--h) * var(--map-px) * 1px);transform-origin:50% 100%;z-index:2;pointer-events:none;position:absolute;transform:translate(-50%,-85%)}.map-decor.sway{animation:5s ease-in-out infinite sway;animation-delay:var(--delay)}@keyframes sway{0%,to{transform:translate(-50%,-85%)skew(0)}50%{transform:translate(-50%,-85%)skew(-2.5deg)}}.station-node{z-index:4;width:calc(48px * var(--map-px));height:calc(48px * var(--map-px) + 26px);font:inherit;color:var(--ink);cursor:pointer;touch-action:manipulation;background:0 0;border:0;padding:0;position:absolute;transform:translate(-50%,-62%)}.node-station{width:100%;height:calc(48px * var(--map-px));transition:transform .14s;display:block}.station-node:hover:not(:disabled) .node-station{transform:translateY(-3px)}.node-plate{white-space:nowrap;background:var(--paper);border:2px solid var(--outline);box-shadow:0 3px 0 var(--outline);align-items:center;gap:5px;padding:2px 8px;display:inline-flex;position:absolute;bottom:0;left:50%;transform:translate(-50%)}.node-number{font-size:1rem;font-weight:900;line-height:1.2}.node-stars{color:#c98a12;letter-spacing:1px;font-size:.72rem}.node-stars .dim{color:#b9ae9a}.node-next{letter-spacing:.05em;color:#fff;background:var(--loco-red);padding:1px 4px;font-size:.62rem;font-weight:900}.node-lock{width:16px;height:16px}.station-node.locked{cursor:default}.station-node.locked .node-station{filter:grayscale(.85)brightness(.92);opacity:.8}.station-node.locked .node-plate{color:#5d574b;background:#d8d2c3}.station-node.completed .node-plate{background:#fff4c9}.station-node:focus-visible{outline:4px solid var(--focus);outline-offset:4px}.node-glow{z-index:-1;background:radial-gradient(closest-side,#ffe08ae6,#ffe08a00);border-radius:50%;width:130%;height:46%;animation:2.2s ease-in-out infinite glow;position:absolute;top:70%;left:50%;transform:translate(-50%,-50%)}@keyframes glow{50%{opacity:.45;transform:translate(-50%,-50%)scale(.85)}}.node-flag{width:32px;height:32px;animation:1.6s ease-in-out infinite flag-bob;position:absolute;top:-6px;right:-14px}.node-flag img{width:32px;height:32px}@keyframes flag-bob{50%{transform:translateY(-5px)}}.map-train{z-index:5;width:calc(48px * var(--map-px));height:calc(48px * var(--map-px));pointer-events:none;position:absolute;transform:translate(-50%,-50%)}.map-train img{width:100%;height:100%}.train-smoke{width:calc(12px * var(--map-px));height:calc(12px * var(--map-px));opacity:0;animation:1.8s step-end infinite intro-puff,1.8s ease-out infinite map-smoke;animation-delay:var(--delay);background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAvklEQVR42mNgGAWkg83rt/7fvH7rf2LVYqNhgJFaDmJgYGDwDfRmJEYdOsClb/P6rf99A70Zv3x89Z+HXwxOw8Qp9gApDoKpdXQyRRHfv+80Vj24HI/uCRZCjiIUqrgcRIxamBi6HkKOh9EMDAwMTLgswmYZMaGPTY6Y9I6shhjHw9SzDNZMjs/xBGNg/77TeJMCoaSFLkcoGaKroSgGiLGM2DSPTS0xeYZQDFCtFKJlMUpMETroKzJCldiwAAAOzvmy/3/GfgAAAABJRU5ErkJggg==) 0 0/400% 100%;position:absolute;top:6%;left:50%}.map-train.is-travelling .train-smoke{animation-duration:.7s}@keyframes map-smoke{0%{opacity:0;transform:translate(-50%)}15%{opacity:.9}to{opacity:0;transform:translate(calc(10px - 50%),-26px)}}.station-sheet.wood-panel{color:var(--ink);margin-top:28px}.station-sheet.wood-panel .eyebrow{color:#7a4f37;font-weight:800}.station-sheet.wood-panel .challenge-badge,.challenge-badge{border:2px solid var(--outline);background:var(--paper);border-radius:0;font-weight:750}.station-sheet.wood-panel .star-targets,.station-sheet.wood-panel .station-best,.station-sheet.wood-panel .map-note{opacity:.85}.region-indicator{background:var(--wood-mid);color:var(--paper);border:2px solid var(--wood-edge);border-radius:0;font-weight:750}.topbar.wood-bar{padding-top:max(8px, env(safe-area-inset-top))}.app{padding-top:0}.station-plate{max-width:min(64vw,480px);color:var(--paper);border:3px solid var(--outline);box-shadow:inset 0 0 0 2px #7cb9a2, 0 3px 0 var(--outline);background:#1d3039;justify-self:center;margin:0 auto;padding:3px 14px 4px}.station-plate .level-number{opacity:.85;font-size:.72rem}.topbar .btn-ghost,.map-topbar .btn-ghost{background:#0f0c2759;border:2px solid #0f0c278c;border-radius:6px}.topbar .btn-ghost .icon,.map-topbar .btn-ghost .icon,.intro-sound .icon{filter:none}.panel.wood-panel{gap:9px}@media (orientation:landscape) and (width>=720px){.panel.wood-panel{justify-content:flex-start;align-self:start;max-height:calc(100% - 12px);overflow-y:auto}}.hud-objective{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.hud-objective p{flex:1;min-width:10em;margin:0;font-size:.85rem;font-weight:650}.hud-objective .challenge-badge{padding:3px 6px;font-size:.7rem}.hud-tickets{flex-wrap:wrap;gap:8px;display:flex}.hud-tickets .ticket{flex:1;min-width:0}.ticket-body{flex-direction:column;min-width:0;line-height:1.15;display:flex}.ticket-body strong{white-space:nowrap}.status{background:var(--paper);border:2px solid var(--outline);border-left-width:6px;border-radius:0;box-shadow:0 3px #0f0c2759}.status[data-tone=ready]{border-left-color:var(--brass);background:#fff6d6}.status[data-tone=error]{border-left-color:var(--error)}.status[data-tone=success]{border-left-color:var(--success)}.panel .btn-secondary,.panel .btn-primary,.settings-dialog .btn{border:2px solid var(--outline);box-shadow:inset 0 -3px 0 #0000001f, 0 3px 0 var(--outline);border-radius:6px}.panel .btn-secondary{background:var(--paper)}.controls{grid-template-columns:repeat(3,minmax(0,1fr))!important}.controls .btn-depart{min-height:var(--tap);color:var(--paper);border:2px solid var(--outline);box-shadow:inset 0 -3px 0 #0003, 0 3px 0 var(--outline);background:#8f5a44;border-radius:6px;font-size:.85rem;grid-column:auto!important}.controls .btn-depart .icon{width:22px;height:22px}.controls .btn-depart.is-ready{background:var(--loco-red);animation:1.6s ease-in-out infinite depart-ready}@keyframes depart-ready{50%{box-shadow:inset 0 -3px 0 #0003, 0 3px 0 var(--outline), 0 0 0 5px #f2c14e99}}.depart-help{color:#5a3a2b;text-align:center;margin:-2px 0 0;font-size:.72rem;font-weight:650}.board[data-cursor=depart]{cursor:pointer}.board[data-cursor=not-ready]{cursor:not-allowed}.board[data-cursor=default]{cursor:default}.board[data-cursor=rotate]{cursor:pointer}.pause-cover{background:#1a241ee6}.pause-loco{width:96px;height:96px;margin-bottom:8px}.result-stars{color:#c98a12;text-shadow:0 2px 0 var(--outline)}.settings-dialog{background:var(--paper);border:3px solid var(--outline);width:min(94vw,480px);box-shadow:0 6px 0 var(--outline);border-radius:8px}.settings-dialog h2{align-items:center;gap:8px;display:flex}.settings-group{border-top:2px dashed #0f0c2733;padding:10px 0}.settings-group h3{letter-spacing:.08em;text-transform:uppercase;color:#7a4f37;margin:0 0 8px;font-size:.78rem}.settings-group p{margin:0 0 6px;font-size:.85rem}.setting-row{grid-template-columns:24px 4.8em minmax(0,1fr) auto;align-items:center;gap:10px;min-height:48px;display:grid}.setting-row label{font-weight:700}.setting-row input[type=range]{width:100%;accent-color:var(--loco-red);min-height:32px}.btn-toggle-sm{min-width:96px;min-height:40px;color:var(--ink);background:#d9f0d9;font-size:.8rem}.btn-toggle-sm[aria-pressed=false]{color:var(--ink-soft);background:#e9e1d0;text-decoration:line-through}.check-row{cursor:pointer;align-items:center;gap:10px;min-height:44px;font-size:.9rem;font-weight:600;display:flex}.check-row input{width:22px;height:22px;accent-color:var(--loco-red)}.settings-dialog>.btn-primary{width:100%;margin-top:6px}@media (width<=760px){:root{--map-px:1}.region-sign{width:240px;height:120px}.sign-text h2{font-size:1rem}.sign-text span{font-size:.5rem}.sign-text p{font-size:.55rem}.station-node{width:60px;height:86px}.node-station{height:60px}.map-train{width:56px;height:56px}.station-sheet.wood-panel{border-width:22px;padding:0 0 env(safe-area-inset-bottom);border-image-width:22px;margin:0}.campaign-totals .ticket{padding:3px 8px 3px 6px}.campaign-totals .ticket .icon{width:16px;height:16px}.panel.wood-panel{border-width:20px;padding:0 0 env(safe-area-inset-bottom);border-image-width:20px;gap:6px}.hud-objective p{font-size:.75rem}.ticket strong{font-size:.85rem}.ticket-label{font-size:.6rem}.station-plate{padding:2px 8px 3px}.depart-help{font-size:.65rem}}@media (width<=520px){.hud-objective .challenge-badge{display:none}.ticket .icon{width:16px;height:16px}}@media (orientation:landscape) and (height<=520px){.panel.wood-panel{border-width:18px;border-image-width:18px;padding:0}.hud-objective,.depart-help{display:none}.intro-logo{font-size:clamp(2.4rem,9vh,4rem)}.intro-content{padding-top:16px;padding-bottom:16px}}@media (prefers-reduced-motion:reduce){.screen.is-entering,.intro-screen.is-leaving,.intro-logo span,.btn-journey,.map-river,.map-decor.sway,.region-sign:before,.region-sign:after,.node-glow,.node-flag,.controls .btn-depart.is-ready,.intro-loading span{animation:none!important}.intro-smoke,.intro-glint,.train-smoke{display:none}}.board[data-cursor=toggle]{cursor:pointer}.btn-infinite{min-height:44px;color:var(--paper);align-items:center;gap:8px;font-weight:750;display:inline-flex}.btn-infinite .icon{width:24px;height:24px}@media (width<=760px){.btn-infinite span{clip-path:inset(50%);width:1px;height:1px;position:absolute;overflow:hidden}}.infinite-screen{background:radial-gradient(circle at 20% 10%, #ffffff0d, transparent 40%), var(--bg);min-height:100dvh;color:var(--on-dark,var(--paper));padding-top:env(safe-area-inset-top);flex-direction:column;display:flex}.infinite-title{letter-spacing:-.02em;flex:1;justify-content:center;align-items:center;gap:10px;margin:0;font-size:1.35rem;display:flex}.infinite-title .icon{width:32px;height:32px}.infinite-body{padding:18px max(14px, env(safe-area-inset-left)) calc(24px + env(safe-area-inset-bottom));flex:1;grid-template-columns:minmax(300px,620px) minmax(260px,340px);justify-content:center;align-items:start;gap:18px;display:grid}.infinite-panel,.infinite-records{flex-direction:column;gap:12px;display:flex}.infinite-lead{color:#5a3a2b;margin:0;font-weight:600}.choice-group{border:0;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0;padding:0;display:grid}.choice-group legend{letter-spacing:.06em;text-transform:uppercase;color:#7a4f37;margin-bottom:6px;font-size:.72rem;font-weight:800}.choice{background:var(--paper);border:2px solid var(--outline);cursor:pointer;align-items:center;gap:8px;min-height:56px;padding:8px 10px;display:flex;position:relative;box-shadow:0 3px #0f0c2759}.choice input{opacity:0;cursor:pointer;margin:0;position:absolute;inset:0}.choice .icon{flex-shrink:0;width:24px;height:24px}.choice span{flex-direction:column;min-width:0;display:flex}.choice strong{font-size:.92rem}.choice small{color:var(--ink-soft);font-size:.7rem;line-height:1.2}.choice:has(input:checked){outline:3px solid var(--brass);outline-offset:-1px;background:#fff4cf;transform:translateY(2px);box-shadow:0 1px #0f0c2759}.choice:has(input:checked):after{content:"✓";color:var(--outline);font-weight:900;position:absolute;top:2px;right:6px}.choice:has(input:focus-visible){outline:3px solid var(--focus,#3a7bd5);outline-offset:2px}.switches-row .icon{width:22px;height:22px}.infinite-actions{flex-wrap:wrap;gap:8px;display:flex}.infinite-actions .btn{flex:180px;justify-content:center;align-items:center;gap:8px;min-height:48px;display:inline-flex}.infinite-actions .icon{width:22px;height:22px}.seed-form{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.seed-form label{letter-spacing:.06em;text-transform:uppercase;color:#7a4f37;font-size:.72rem;font-weight:800}.seed-form input{min-height:44px;font:inherit;background:var(--paper);color:var(--ink);border:2px solid var(--outline);border-radius:0;flex:140px;padding:0 10px;font-family:ui-monospace,SF Mono,Menlo,monospace}.seed-form .btn{min-height:44px}.gen-progress{background:var(--paper);border:2px solid var(--outline);height:10px}.gen-progress span{height:100%;width:calc(var(--progress,0) * 100%);background:repeating-linear-gradient(90deg, var(--loco-red) 0 8px, #a33a30 8px 12px);min-width:12%;transition:width .12s linear;display:block}.infinite-status{color:#5a3a2b;min-height:1.3em;margin:0;font-size:.85rem;font-weight:650}.infinite-screen[data-busy=true] .infinite-status:before{content:"⏳ "}.infinite-records h2,.infinite-records h3{align-items:center;gap:8px;margin:0;display:flex}.infinite-records h2{font-size:1.1rem}.infinite-records h2 .icon{width:24px;height:24px}.infinite-records h3{letter-spacing:.06em;text-transform:uppercase;color:#7a4f37;font-size:.72rem}.records-list{grid-template-columns:repeat(3,1fr);gap:6px;margin:0;display:grid}.records-list div{background:var(--paper);border:2px solid var(--outline);text-align:center;padding:6px 8px}.records-list dt{color:var(--ink-soft);font-size:.64rem;font-weight:750}.records-list dd{font-variant-numeric:tabular-nums;margin:2px 0 0;font-size:1.25rem;font-weight:850}.recent-list{flex-direction:column;gap:6px;max-height:300px;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}.recent-item{text-align:left;width:100%;min-height:44px;font:inherit;color:var(--ink);background:var(--paper);border:2px solid var(--outline);cursor:pointer;align-items:center;gap:10px;padding:6px 10px;display:flex}.recent-item:hover{background:#fff4cf}.recent-item span:last-child{flex-direction:column;min-width:0;display:flex}.recent-item small{color:var(--ink-soft);overflow-wrap:anywhere;font-size:.7rem}.recent-mark{text-align:center;width:22px;font-weight:900}.recent-empty{color:var(--ink-soft);font-size:.85rem}.switch-legend p{align-items:flex-start;gap:8px;margin:6px 0 0;font-size:.8rem;display:flex}.switch-legend .icon{flex-shrink:0;width:20px;height:20px}@media (width<=860px){.infinite-body{grid-template-columns:1fr;padding-inline:6px}.infinite-title{font-size:1.05rem}}@media (width<=520px){.choice-group{grid-template-columns:1fr;gap:6px}.choice{min-height:48px}.infinite-panel,.infinite-records{border-width:22px}}.switch-hint{color:#5a3a2b;align-items:center;gap:8px;margin:0;font-size:.76rem;font-weight:650;display:flex}.switch-hint .icon{flex-shrink:0;width:20px;height:20px}.result-seed{color:var(--ink-soft);text-align:center;overflow-wrap:anywhere;margin:6px 0 0;font-size:.75rem;font-weight:650}#btn-share .icon{vertical-align:-3px;width:18px;height:18px;margin-right:4px}@media (width<=520px) and (orientation:portrait){#puzzle-screen .hud-objective,#puzzle-screen .depart-help,#puzzle-screen .switch-hint{display:none}#puzzle-screen .panel.wood-panel{border-width:14px;border-image-width:14px}#puzzle-screen .status-text{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}}@media (pointer:coarse){#puzzle-screen .keyboard-help{display:none}}:where(#puzzle-screen){grid-template-columns:minmax(0,1fr)}@media (width<=420px){.campaign-screen .brand div{clip-path:inset(50%);width:1px;height:1px;position:absolute;overflow:hidden}.campaign-screen .map-topbar{gap:8px}}@media (width<=760px){#puzzle-screen[data-game=infinite] .result-actions .btn{flex:calc(50% - 4px)}#puzzle-screen[data-game=infinite] #btn-share .icon{display:none}}
