:root{--ui: #13171b;--panel: #171b20;--border: #262c33;--border2: #46505b;--text: #eef0f2;--muted: #9aa4ae;--accent: #f0a33a;--green: #3ccf7a;--red: #ff5a4f;--sans: "IBM Plex Sans", system-ui, sans-serif;--mono: "IBM Plex Mono", ui-monospace, monospace}*{box-sizing:border-box}html,body{margin:0;height:100%;background:#0c0f12;color:var(--text);font-family:var(--sans)}button,select{font:inherit;color:inherit}button{cursor:pointer;-webkit-tap-highlight-color:transparent}.app{position:relative;height:100dvh;max-width:480px;margin:0 auto;display:flex;flex-direction:column;background:var(--ui);overflow:hidden}.hdr{height:56px;flex:none;display:flex;align-items:center;gap:8px;padding:0 16px 0 4px;border-bottom:1px solid var(--border)}.icon-btn{width:44px;height:44px;border:none;background:transparent;font-size:24px}.hdr-title{display:flex;flex-direction:column;flex:1;min-width:0}.kicker{font:600 10px var(--mono);letter-spacing:.12em;color:var(--muted)}.kicker.running{color:var(--green)}.kicker.stopped{color:var(--red)}.name{font-size:16px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hdr-clock{display:flex;flex-direction:column;align-items:flex-end}.clock{font:600 22px var(--mono)}.par{font:400 10px var(--mono);color:var(--muted)}.map{position:relative;flex:1;min-height:0;background:#56733f}.map-canvas{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:block}.zoom{position:absolute;right:12px;top:16px;display:flex;flex-direction:column;background:#101418d9;border-radius:12px}.zoom button{width:44px;height:44px;border:none;background:transparent;font-size:20px;font-weight:600}.zoom button+button{border-top:1px solid #333a42}.zoom .fit{font-size:16px}.event{position:absolute;left:16px;right:16px;bottom:16px;display:flex;align-items:center;gap:10px;background:#101418e6;border-radius:12px;padding:10px 12px;font-size:13px}.event[hidden]{display:none}.event-time{font:600 11px var(--mono);color:var(--muted)}.dev{flex:none;display:flex;gap:8px;padding:8px 16px;background:var(--panel);border-top:1px solid var(--border)}.dev select{flex:1;min-width:0;height:36px;background:#222830;border:1px solid var(--border2);border-radius:8px;padding:0 8px;font-size:13px}.bar{flex:none;display:flex;gap:10px;align-items:center;padding:12px 16px calc(16px + env(safe-area-inset-bottom));background:var(--panel)}.ctl{height:48px;border-radius:12px;font-weight:600;font-size:14px;background:#222830;border:1px solid var(--border2);padding:0 14px}#play{min-width:96px;background:var(--accent);color:var(--ui);border:none;font-weight:700}.speed{flex:1;display:flex;height:48px;border:1px solid var(--border2);border-radius:12px;overflow:hidden}.speed button{flex:1;border:none;background:transparent;color:#c9d1d9;font:600 14px var(--mono)}.speed button+button{border-left:1px solid var(--border2)}.speed button.on{background:var(--accent);color:var(--ui);font-weight:700}.hdr .par.plan{font:600 12px var(--mono);color:#c9d1d9}[hidden]{display:none!important}.run-btn{flex:1;height:56px;border:none;border-radius:14px;background:var(--accent);color:var(--ui);font:700 17px var(--sans)}#pause{width:56px}#stop{min-width:104px}.event.hint{color:var(--muted)}.sheet-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;z-index:10}.sheet{position:absolute;left:0;right:0;bottom:0;z-index:11;max-height:75%;overflow-y:auto;background:var(--panel);border-radius:18px 18px 0 0;box-shadow:0 -8px 24px #00000073;padding:10px 16px calc(20px + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:10px;transform:translateY(100%);transition:transform .22s ease-out}.sheet.open{transform:none}.grab{align-self:center;width:56px;height:16px;border:none;background:transparent;padding:0;position:relative}.grab:after{content:"";position:absolute;left:10px;right:10px;top:6px;height:4px;border-radius:2px;background:var(--border2)}.sheet-head{display:flex;align-items:center;gap:12px}.sheet-icon{width:28px;display:flex;justify-content:center;color:var(--text)}.mini-head{width:16px;height:32px;background:#1b1f23;border:1px solid #333a42;border-radius:8px;display:flex;flex-direction:column;align-items:center;justify-content:space-around;padding:3px 0}.mini-head .lamp{width:8px;height:8px;border-radius:50%}.mini-head .r{background:var(--red)}.mini-head .g{background:var(--green)}.sheet-titles h2{margin:0;font-size:17px;font-weight:700}.sheet-titles p{margin:0;font-size:12px;color:var(--muted)}.section-label{font:600 10px var(--mono);letter-spacing:.12em;color:var(--muted)}.opts{display:flex;flex-direction:column;gap:2px}.opt{display:flex;align-items:center;gap:12px;min-height:48px;padding:6px 12px;border-radius:10px;border:1px solid transparent;font-size:14px;cursor:pointer}.opt.on{background:#222830;border-color:var(--accent)}.opt input{accent-color:var(--accent);width:18px;height:18px;margin:0;flex:none}.opt-text{line-height:2}.chip{-moz-appearance:none;appearance:none;-webkit-appearance:none;field-sizing:content;background:#2a3139 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5'%3E%3Cpath d='M0 0h8L4 5z' fill='%23eef0f2'/%3E%3C/svg%3E") no-repeat right 8px center;border:1px solid var(--border2);border-radius:6px;padding:1px 22px 1px 8px;margin:0 2px;font:600 13px var(--mono);color:#fff;cursor:pointer;vertical-align:baseline}.chip:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.sheet-actions{display:flex;gap:10px;margin-top:4px}.btn{height:48px;border-radius:12px;font:600 15px var(--sans)}.btn.secondary{flex:1;border:1px solid var(--border2);background:transparent}.btn.primary{flex:2;border:none;background:var(--accent);color:var(--ui);font-weight:700}.minimap{position:absolute;left:12px;top:16px;z-index:2;background:#101418d9;border-radius:10px;box-shadow:0 2px 8px #00000059;cursor:pointer}.info-btn{font:italic 700 17px Georgia,serif;width:32px;height:32px;border-radius:50%;border:1.5px solid var(--border2);color:var(--text);margin-right:4px;position:relative;flex:none}.info-btn:after{content:"";position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px}.panel-body{display:flex;flex-direction:column;gap:8px}.brief{margin:0;font-size:14px;line-height:1.5;color:#dfe3e6}.panel .section-label{margin-top:6px}.train-list{display:flex;flex-direction:column;gap:4px}.train-row{display:grid;grid-template-columns:12px auto 1fr;grid-template-areas:"dot name route" ". meta meta";column-gap:10px;row-gap:2px;align-items:center;text-align:left;min-height:48px;padding:8px 12px;border:1px solid var(--border);border-radius:10px;background:#1c2127}.train-row .dot{grid-area:dot;width:10px;height:10px;border-radius:50%}.train-name{grid-area:name;font:600 14px var(--mono)}.train-route{grid-area:route;font-size:14px}.train-meta{grid-area:meta;font-size:12px;color:var(--muted)}.hint summary{cursor:pointer;color:var(--accent);font-size:14px;font-weight:600;min-height:32px;display:flex;align-items:center}.hint p{margin-top:4px}.train-icon{width:14px;height:32px;border-radius:6px 6px 3px 3px;box-shadow:inset 0 6px 0 -2px #00000059;flex:none;margin:0 7px}.facts{display:grid;grid-template-columns:auto 1fr;gap:8px 14px;margin:4px 0 0;font-size:14px}.facts dt{color:var(--muted)}.facts dd{margin:0;line-height:1.4}#clear-all{height:56px;flex:none}.event-action{margin:-10px -8px -10px auto;min-height:44px;padding:0 12px;border:none;background:transparent;color:var(--accent);font:700 14px var(--sans)}.front,.how{min-height:100dvh;max-width:480px;margin:0 auto;background:var(--ui);display:flex;flex-direction:column;position:relative}.front-hdr{padding:28px 16px 20px;display:flex;flex-direction:column;gap:14px;border-bottom:1px solid var(--border)}.brand{display:flex;align-items:center;gap:12px}.brand .logo{width:20px;height:38px;flex:none}.brand-text{display:flex;flex-direction:column;gap:2px}.brand-text h1{margin:0;font-size:26px;font-weight:700;line-height:1.1}.premise{margin:0;font-size:14px;line-height:1.5;color:#c9d1d9}.progress-box{display:flex;flex-direction:column;gap:8px;padding:12px 14px;background:var(--panel);border:1px solid var(--border);border-radius:12px}.progress-row{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:13px;color:#c9d1d9}.total{display:flex;align-items:center;gap:4px;font:600 13px var(--mono);color:var(--text)}.total svg{width:14px;height:14px;fill:none;stroke:#6b7682;stroke-width:2}.total svg.on{fill:var(--accent);stroke:none}.bar-track{height:6px;background:var(--border);border-radius:3px;overflow:hidden}.bar-fill{height:6px;background:var(--accent);border-radius:3px}.continue{display:flex;align-items:center;gap:10px;min-height:56px;padding:0 18px;border:none;border-radius:14px;background:var(--accent);color:var(--ui);text-align:left}.continue-label{font:700 12px var(--mono);letter-spacing:.08em;text-transform:uppercase}.continue-name{flex:1;font:700 16px var(--sans)}.continue .play{width:14px;height:14px;fill:var(--ui)}.front-main{padding:18px 16px 24px;display:flex;flex-direction:column;gap:12px}.cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.card{display:flex;flex-direction:column;padding:0;text-align:left;background:#1c2127;border:1px solid var(--border);border-radius:12px;overflow:hidden;color:var(--text)}.card.next{border:2px solid var(--accent);box-shadow:0 0 0 4px #f0a33a2e}.card.locked{background:var(--panel)}.thumb{position:relative;height:150px;background:#56733f}.thumb-canvas{display:block;width:100%;height:100%}.card.locked .thumb-canvas{filter:grayscale(1) brightness(.45)}.next-badge{position:absolute;left:8px;top:8px;padding:3px 8px;border-radius:10px;background:var(--accent);color:var(--ui);font:700 10px var(--mono);letter-spacing:.08em}.lock-badge{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:44px;height:44px;border-radius:50%;background:#101418d9;display:flex;align-items:center;justify-content:center}.lock-badge .lock{width:20px;height:20px;fill:none;stroke:#c9d1d9;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.card-body{padding:10px 10px 12px;display:flex;flex-direction:column;gap:6px}.level{font:600 10px var(--mono);letter-spacing:.1em;color:var(--muted)}.level.hard{color:#ff8a80}.card-name{font-size:15px;font-weight:600;line-height:1.25}.card.locked .card-name{color:#c9d1d9}.card-note{font-size:12px;color:var(--muted)}.card-score{display:flex;align-items:center;justify-content:space-between}.card-time{font:600 13px var(--mono)}.card-par{font:400 11px var(--mono);color:var(--muted)}.card-play{height:44px;border-radius:10px;background:#2a3139;color:var(--text);font:700 15px var(--sans);display:flex;align-items:center;justify-content:center;gap:6px}.card-play svg{width:12px;height:12px;fill:currentColor}.card.next .card-play{background:var(--accent);color:var(--ui)}.stars{display:inline-flex;gap:2px}.stars svg{width:16px;height:16px;fill:none;stroke:#6b7682;stroke-width:2}.stars svg.on,.stars .on svg{fill:var(--accent);stroke:none}.front-foot{margin-top:auto;padding:8px 16px calc(12px + env(safe-area-inset-bottom));border-top:1px solid var(--border);display:flex;justify-content:center;gap:24px}.link{min-height:44px;border:none;background:transparent;color:var(--accent);font-size:14px;padding:0 4px}.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%,20px);max-width:calc(100% - 32px);padding:10px 14px;border-radius:10px;background:#2a3139;color:var(--text);font-size:14px;opacity:0;pointer-events:none;transition:opacity .2s,transform .2s}.toast.show{opacity:1;transform:translate(-50%)}.front .sheet-backdrop{position:fixed;transition:background .2s}.front .sheet-backdrop.open{background:#080a0c8c}.front .sheet{position:fixed;left:50%;right:auto;width:min(100%,480px);transform:translate(-50%,100%)}.front .sheet.open{transform:translate(-50%)}.check{display:flex;align-items:center;gap:10px;min-height:44px;font-size:14px;cursor:pointer}.check input{width:18px;height:18px;accent-color:var(--accent)}.btn.danger{flex:1;border:none;background:var(--red);color:var(--ui);font-weight:700}.btn.primary.secondary-look{flex:1;border:1px solid var(--border2);background:transparent;color:var(--text);font-weight:600}.how-main{padding:8px 16px 16px;display:flex;flex-direction:column}.how-section{padding:16px 0;border-bottom:1px solid var(--border)}.how-head{display:flex;align-items:center;gap:10px;margin-bottom:6px}.how-icon{width:30px;display:flex;justify-content:center}.how-section h2{margin:0;font-size:17px;font-weight:700}.how-section p,.how-section li{font-size:14px;line-height:1.55;color:#dfe3e6}.how-section p{margin:6px 0}.how-section ul{margin:6px 0;padding-left:20px}.how-section strong{color:var(--text);font-weight:600}.how-foot{padding:12px 16px calc(16px + env(safe-area-inset-bottom));display:flex}.how-done{flex:1}.result{position:absolute;left:16px;right:16px;bottom:16px;z-index:3;display:flex;flex-direction:column;gap:10px;padding:14px;background:#171b20f5;border:1px solid var(--border2);border-radius:14px;box-shadow:0 8px 24px #00000073}.result-head{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:600}.result-badge{margin-left:auto;padding:3px 8px;border-radius:10px;background:var(--accent);color:var(--ui);font:700 10px var(--mono);letter-spacing:.08em}.result-row{display:flex;align-items:baseline;gap:12px}.result-row .stars svg{width:24px;height:24px}.result-time{font:600 24px var(--mono)}.result-par{font:400 12px var(--mono);color:var(--muted)}.result .btn{flex:none;width:100%}.routes-btn{position:absolute;right:12px;top:164px;width:44px;padding:6px 0 4px;border:none;border-radius:12px;background:#101418d9;color:var(--text);display:flex;flex-direction:column;align-items:center;gap:2px;z-index:1}.routes-btn span{font:600 8px var(--mono);letter-spacing:.06em}.routes-btn.on{background:var(--accent);color:var(--ui)}.leg-dots{margin-left:auto;display:flex;align-items:center;gap:4px;flex:none}.leg-dot{width:12px;height:12px;border-radius:50%}.leg-arrow{width:6px;height:2px;background:var(--muted)}.helper-row{display:flex;align-items:center;gap:12px;min-height:56px;padding:8px 12px;border:1px solid var(--border);border-radius:10px;background:#1c2127;cursor:pointer}.helper-text{flex:1;display:flex;flex-direction:column;gap:2px}.helper-title{font-size:14px;font-weight:600}.helper-desc{font-size:12px;line-height:1.4;color:var(--muted)}.helper-row input{width:22px;height:22px;accent-color:var(--accent);flex:none}.helper-link{align-self:flex-start;padding:0;font-weight:600}.how-tutorial{width:100%;margin-top:4px}.tut{position:absolute;top:0;right:0;bottom:0;left:0;z-index:20;pointer-events:none}.tut-dim{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.tut-bubble{position:absolute;left:50%;transform:translate(-50%);pointer-events:auto;padding:12px 14px 8px;background:var(--panel);border:1px solid var(--border2);border-radius:14px;box-shadow:0 8px 24px #00000080;display:flex;flex-direction:column;gap:6px;box-sizing:border-box}.tut-kicker{font:600 10px var(--mono);letter-spacing:.12em;color:var(--accent)}.tut-text{margin:0;font-size:14px;line-height:1.45}.tut-actions{display:flex;align-items:center;justify-content:space-between;gap:8px}.tut-skip{min-height:44px;padding:0 2px;border:none;background:transparent;color:var(--muted);font-size:14px}.tut-prompt{font-weight:700;font-size:14px;color:var(--accent)}.tut-next{flex:none;width:auto;height:40px;padding:0 22px}.tut-callout{display:flex;flex-direction:column;gap:2px;padding:10px 12px 4px;border:1px solid rgba(240,163,58,.55);border-radius:10px;background:#f0a33a14}.tut-callout .tut-skip{align-self:flex-start;min-height:36px}
