:root{--ink: #fdf7f2;--panel: #fffdfb;--panel-2: #fbeee6;--line: #f0dfd3;--amber: #f4a259;--coral: #f76c6c;--cream: #4a3f3a;--muted: #a89a90;--mono: "IBM Plex Mono", ui-monospace, monospace;--sans: "Space Grotesk", system-ui, sans-serif}*{box-sizing:border-box}html,body,#root{margin:0;height:100%;background:var(--ink);color:var(--cream);font-family:var(--sans)}.app{display:flex;height:100%}.map-wrap{flex:1;position:relative;min-width:0;min-height:0;display:flex}.map{flex:1;min-width:0;min-height:0}.panel{width:360px;flex-shrink:0;display:flex;flex-direction:column;gap:16px;padding:20px;background:var(--panel);border-right:1px solid var(--line);overflow-y:auto}.brand h1{margin:0;font-size:34px;letter-spacing:.28em;color:var(--amber)}.brand-top{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.lang-picker{position:relative}.lang-switch{display:inline-flex;align-items:center;gap:6px;font:600 12px var(--mono);letter-spacing:.12em;color:var(--muted);text-decoration:none;background:none;cursor:pointer;border:1px solid var(--line);border-radius:6px;padding:4px 9px;transition:color .15s,border-color .15s}.lang-switch:hover{color:var(--amber);border-color:var(--amber)}.lang-caret{font-size:9px;opacity:.7;transition:transform .15s}.lang-picker.open .lang-caret{transform:rotate(180deg)}.lang-menu{position:absolute;top:calc(100% + 6px);right:0;z-index:50;margin:0;padding:5px;list-style:none;min-width:168px;max-height:340px;overflow-y:auto;background:var(--panel);border:1px solid var(--line);border-radius:10px;box-shadow:0 12px 30px #4a3f3a2e}.lang-item{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:7px;text-decoration:none;color:var(--cream);font:500 13px var(--sans);transition:background .12s}.lang-item:hover{background:var(--panel-2)}.lang-item.on{background:var(--panel-2);color:var(--amber);font-weight:700}.lang-item .lang-name{flex:1}.lang-item .lang-code{font:600 10px var(--mono);letter-spacing:.1em;color:var(--muted)}.lang-flag{width:18px;height:18px;border-radius:50%;object-fit:cover;display:block;flex:none}[dir=rtl] .lang-menu{right:auto;left:0}[dir=rtl] .brand-top{flex-direction:row}[dir=rtl] .row-meta,[dir=rtl] .leg-top,[dir=rtl] .board-head,[dir=rtl] .distance{flex-direction:row-reverse}[dir=rtl] .chip .drag-handle{transform:scaleX(-1)}.brand h1{letter-spacing:.12em;font-size:28px;display:inline-flex;align-items:center;gap:10px}.brand-logo{width:34px;height:34px;object-fit:contain;display:block}.brand p{margin:6px 0 0;color:var(--muted);font-size:13.5px}.search{position:relative}.search input{width:100%;padding:11px 13px;font:500 14px var(--mono);color:var(--cream);background:var(--panel-2);border:1px solid var(--line);border-radius:8px;outline:none}.search input:focus{border-color:var(--amber)}.search-hint{position:absolute;right:12px;top:12px;font:12px var(--mono);color:var(--muted)}.search-results{position:absolute;z-index:30;left:0;right:0;margin:6px 0 0;padding:4px;list-style:none;background:var(--panel-2);border:1px solid var(--line);border-radius:8px;box-shadow:0 10px 28px #b4825a2e}.search-results button{display:flex;flex-direction:column;gap:2px;width:100%;padding:8px 10px;text-align:left;color:var(--cream);background:none;border:0;border-radius:6px;cursor:pointer}.search-results button:hover,.search-results button:focus-visible{background:var(--line)}.search-results strong{font-size:14px}.search-results span{font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.board{background:var(--panel-2);border:1px solid var(--line);border-radius:10px;overflow:hidden}.board-head{display:flex;justify-content:space-between;padding:9px 12px;font:600 11.5px var(--mono);letter-spacing:.18em;color:var(--amber);border-bottom:1px solid var(--line)}.board-status{color:var(--coral)}.board-empty{padding:18px 12px;font-size:13px;color:var(--muted)}.board-rows{margin:0;padding:6px 0;list-style:none}.board-row{display:flex;align-items:center;gap:12px;padding:7px 12px;font:500 13.5px var(--mono);letter-spacing:.06em}.board-row.active .row-name{color:var(--coral)}.board-row.passed{opacity:.45}.row-num{color:var(--amber)}.row-name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.row-remove{border:0;background:none;color:var(--muted);font-size:16px;cursor:pointer;line-height:1}.row-remove:hover:not(:disabled){color:var(--coral)}.row-remove:disabled{opacity:.3;cursor:default}.vehicles{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.vehicle-btn{display:flex;flex-direction:column;align-items:center;gap:3px;padding:10px 4px;background:var(--panel-2);border:1px solid var(--line);border-radius:10px;color:var(--muted);cursor:pointer}.vehicle-btn span{font-size:21px}.vehicle-btn small{font:11px var(--mono)}.vehicle-btn.selected{border-color:var(--amber);color:var(--cream);background:#fbe6d2}.vehicle-btn:disabled{opacity:.5;cursor:default}.actions{display:flex;gap:8px}.play{flex:1;padding:12px;font:700 14px var(--sans);letter-spacing:.04em;color:#1a0f0c;background:var(--coral);border:0;border-radius:10px;cursor:pointer}.play:hover:not(:disabled){filter:brightness(1.08)}.play:disabled{opacity:.45;cursor:default}.clear{padding:12px 14px;font:500 13px var(--sans);color:var(--muted);background:none;border:1px solid var(--line);border-radius:10px;cursor:pointer}.clear:hover:not(:disabled){color:var(--cream)}.clear:disabled{opacity:.4;cursor:default}.credits{margin-top:auto;font:11px var(--mono);color:var(--muted)}.stop-pin{display:flex;align-items:center;gap:5px;padding:4px 8px 4px 5px;background:#0b1120e6;border:1px solid var(--amber);border-radius:999px;font:700 12px var(--mono);letter-spacing:.5px;color:var(--cream);transform:translateY(-6px);white-space:nowrap}.stop-pin-num{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:var(--amber);color:#1a1206;font-size:10px}.vehicle-emoji{display:inline-block;font-size:30px;filter:drop-shadow(0 3px 6px rgba(0,0,0,.5));transition:transform .15s linear;transform-origin:center center}button:focus-visible,input:focus-visible{outline:2px solid var(--amber);outline-offset:2px}@media (prefers-reduced-motion: reduce){.vehicle-emoji{transition:none}}@media (max-width: 760px){.app{flex-direction:column-reverse}.panel{width:100%;max-height:52vh;border-right:0;border-top:1px solid var(--line)}.map-wrap{min-height:48vh}}.field{display:flex;flex-direction:column;gap:6px}.field-label{font:600 10.5px var(--mono);letter-spacing:.22em;color:var(--amber)}.chip{display:flex;align-items:center;justify-content:space-between;padding:10px 13px;background:var(--panel-2);border:1px solid var(--amber);border-radius:8px}.chip-name{font:600 14px var(--sans);color:var(--cream)}.chip-clear{border:0;background:none;color:var(--muted);font-size:18px;line-height:1;cursor:pointer}.chip-clear:hover:not(:disabled){color:var(--coral)}.chip-clear:disabled{opacity:.35;cursor:default}.mids{display:flex;flex-direction:column;gap:8px}.chip.mid{border-color:var(--line);background:var(--panel-2)}.add-mid{padding:9px;font:500 12.5px var(--mono);color:var(--muted);background:none;border:1px dashed var(--line);border-radius:8px;cursor:pointer}.add-mid:hover:not(:disabled){color:var(--cream);border-color:var(--muted)}.add-mid:disabled{opacity:.4;cursor:default}.vehicle-emoji{will-change:transform}.vehicle.takeoff .vehicle-emoji{animation:takeoff .9s ease-out}@keyframes takeoff{0%{scale:.4;opacity:0}60%{scale:1.25;opacity:1}to{scale:1}}.vehicle.landed .vehicle-emoji{animation:landed .8s ease-out}@keyframes landed{0%{scale:1}40%{scale:1.35}to{scale:1}}.stop-pin{transition:transform .2s ease}.stop-pin.arrived{animation:pin-pop .9s cubic-bezier(.34,1.56,.64,1)}@keyframes pin-pop{0%{transform:translateY(-6px) scale(1)}35%{transform:translateY(-14px) scale(1.18)}to{transform:translateY(-6px) scale(1)}}.pulse-ring{width:14px;height:14px;border-radius:50%;border:2px solid var(--coral);animation:pulse 1.6s ease-out infinite}@keyframes pulse{0%{box-shadow:0 0 #ff6b5b8c;opacity:1}to{box-shadow:0 0 0 26px #ff6b5b00;opacity:.6}}.confetti{font-size:34px;animation:confetti-pop 1.5s ease-out forwards;pointer-events:none}@keyframes confetti-pop{0%{transform:translateY(6px) scale(.3);opacity:0}30%{transform:translateY(-22px) scale(1.4);opacity:1}70%{transform:translateY(-30px) scale(1.1);opacity:1}to{transform:translateY(-42px) scale(1);opacity:0}}.passport-stamp{position:absolute;width:180px;height:180px;transform:translate(-50%,-50%);pointer-events:none;z-index:30;filter:drop-shadow(0 3px 6px rgba(74,63,58,.25));animation:stamp-drop 2.6s cubic-bezier(.2,.9,.3,1) forwards}.passport-stamp svg{width:100%;height:100%;display:block}@keyframes stamp-drop{0%{opacity:0;transform:translate(-50%,-50%) rotate(var(--stamp-rot)) scale(2.4)}12%{opacity:.95;transform:translate(-50%,-50%) rotate(var(--stamp-rot)) scale(.92)}18%{transform:translate(-50%,-50%) rotate(var(--stamp-rot)) scale(1.04)}24%{transform:translate(-50%,-50%) rotate(var(--stamp-rot)) scale(1)}80%{opacity:.95;transform:translate(-50%,-50%) rotate(var(--stamp-rot)) scale(1)}to{opacity:0;transform:translate(-50%,-50%) rotate(var(--stamp-rot)) scale(1)}}@media (prefers-reduced-motion: reduce){.vehicle.takeoff .vehicle-emoji,.vehicle.landed .vehicle-emoji,.stop-pin.arrived,.pulse-ring,.passport-stamp,.confetti{animation:none}}.distance{display:flex;align-items:center;justify-content:space-between;padding:10px 13px;background:var(--panel-2);border:1px solid var(--line);border-radius:10px;font-family:var(--mono)}.distance span{font-size:10.5px;letter-spacing:.22em;color:var(--muted)}.distance strong{font-size:16px;letter-spacing:.06em;color:var(--amber)}.export{flex:1;padding:11px;font:500 13px var(--sans);color:var(--cream);background:var(--panel-2);border:1px solid var(--line);border-radius:10px;cursor:pointer}.export:hover:not(:disabled){border-color:var(--amber)}.export:disabled{opacity:.4;cursor:default}.chip.mid{cursor:default}.chip.mid[draggable=true]{cursor:grab}.chip.mid.dragging{opacity:.5;border-color:var(--amber)}.drag-handle{color:var(--muted);font-size:12px;letter-spacing:-2px;margin-right:2px;cursor:grab}.toggle{display:flex;align-items:center;gap:9px;font:500 13px var(--sans);color:var(--cream);cursor:pointer}.toggle input{accent-color:var(--coral);width:16px;height:16px}.author-field{display:flex;flex-direction:column;gap:5px;font:500 13px var(--sans);color:var(--cream)}.author-field input{padding:8px 10px;border-radius:8px;border:1px solid var(--panel-2);background:var(--panel);color:var(--cream);font:500 13px var(--sans);outline:none}.author-field input::placeholder{color:var(--muted)}.author-field input:focus{border-color:var(--coral)}.author-field input:disabled{opacity:.6;cursor:not-allowed}.row-meta{display:flex;align-items:center;gap:8px;font:500 11px var(--mono);color:var(--muted)}.row-wx{color:var(--cream)}.row-tz{color:var(--muted);opacity:.8}.legs{display:flex;flex-direction:column;gap:8px;padding:10px;background:var(--panel-2);border:1px solid var(--line);border-radius:10px}.legs-head{font:600 10.5px var(--mono);letter-spacing:.22em;color:var(--amber)}.leg{display:flex;flex-direction:column;gap:6px;padding:8px;background:var(--panel-2);border:1px solid var(--line);border-radius:8px}.leg-top{display:flex;flex-direction:column;gap:2px}.leg-route{font:600 12.5px var(--sans);color:var(--cream)}.leg-stats{font:500 11px var(--mono);color:var(--muted)}.leg-tz{color:var(--amber)}.leg-vehicles{display:flex;gap:4px;flex-wrap:wrap}.leg-veh{flex:1;min-width:34px;padding:5px 0;font-size:15px;background:var(--ink);border:1px solid var(--line);border-radius:6px;cursor:pointer;opacity:.55}.leg-veh.on{opacity:1;border-color:var(--amber);background:#fbe6d2}.leg-veh:disabled{cursor:default}.distance strong em{font-style:normal;color:var(--muted);font-size:13px}.section-label{font:600 10.5px var(--mono);letter-spacing:.22em;color:var(--amber);margin-bottom:-8px}.options{display:flex;flex-direction:column;gap:10px}.opt{display:flex;align-items:center;gap:10px}.opt-label{width:62px;flex-shrink:0;font:600 10px var(--mono);letter-spacing:.16em;color:var(--muted)}.seg{display:flex;flex:1;gap:4px;padding:3px;background:var(--ink);border:1px solid var(--line);border-radius:8px}.seg button{flex:1;padding:6px 4px;font:500 11.5px var(--mono);color:var(--muted);background:none;border:0;border-radius:6px;cursor:pointer}.seg button.on{background:var(--panel-2);color:var(--cream);box-shadow:inset 0 0 0 1px var(--amber)}.seg button:hover:not(.on):not(:disabled){color:var(--cream)}.seg button:disabled{opacity:.4;cursor:default}.ghost{flex:1;padding:10px;font:500 12.5px var(--sans);color:var(--muted);background:none;border:1px solid var(--line);border-radius:10px;cursor:pointer}.ghost:hover:not(:disabled){color:var(--cream);border-color:var(--amber)}.ghost:disabled{opacity:.4;cursor:default}.saved{display:flex;flex-direction:column;gap:6px}.saved-head{font:600 10.5px var(--mono);letter-spacing:.22em;color:var(--amber)}.saved ul{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:4px}.saved li{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;background:var(--panel-2);border:1px solid var(--line);border-radius:8px;cursor:pointer}.saved li:hover{border-color:var(--amber)}.saved-name{font:500 12.5px var(--sans);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.saved-del{border:0;background:none;color:var(--muted);font-size:17px;line-height:1;cursor:pointer;padding:0 2px}.saved-del:hover{color:var(--coral)}.toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%);padding:11px 20px;background:var(--panel-2);border:1px solid var(--amber);border-radius:999px;font:600 13px var(--sans);color:var(--cream);box-shadow:0 10px 28px #b4825a38;z-index:50;animation:toast-in .25s ease-out}@keyframes toast-in{0%{opacity:0;transform:translate(-50%) translateY(8px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.bend-handle{width:16px;height:16px;border-radius:50%;background:#fff;border:3px solid #FF6B5B;box-shadow:0 2px 8px #00000047;cursor:grab;transition:transform .12s ease}.bend-handle:hover{transform:scale(1.2)}.bend-handle:active{cursor:grabbing;transform:scale(1.25)}.stop-pin.departure{border-color:#3fbf7f}.stop-pin.departure .stop-pin-num{background:#3fbf7f;color:#062015}.arrival-pin{display:flex;flex-direction:column;align-items:center;gap:2px}.arrival-label{display:inline-flex;align-items:center;gap:5px;padding:4px 8px 4px 5px;background:#0b1120e6;border:1px solid #FF6B5B;border-radius:999px;font:700 12px var(--mono);letter-spacing:.5px;color:var(--cream);white-space:nowrap}.stop-pin-num.arr{background:#ff6b5b;color:#2b0d08}.arrival-img{display:block;filter:drop-shadow(0 4px 8px rgba(0,0,0,.3));animation:arrival-bounce 1.15s ease-in-out infinite}@keyframes arrival-bounce{0%,to{transform:translateY(0) scale(1)}40%{transform:translateY(-9px) scale(1.04)}60%{transform:translateY(-9px) scale(1.04)}}.arrival-pin.arrived .arrival-img{animation:pin-pop .9s cubic-bezier(.34,1.56,.64,1),arrival-bounce 1.15s ease-in-out infinite}@media (prefers-reduced-motion: reduce){.arrival-img{animation:none}}.dep-dot{width:16px;height:16px;border-radius:50%;background:#3fbf7f;border:3px solid #fff;box-shadow:0 0 0 2px #3fbf7f59,0 2px 6px #0000004d}.via-dot{width:12px;height:12px;border-radius:50%;background:var(--amber);border:2.5px solid #fff;box-shadow:0 2px 5px #0000004d}.dep-dot.arrived,.via-dot.arrived{animation:pin-pop .9s cubic-bezier(.34,1.56,.64,1)}.tour-card{position:fixed;left:50%;bottom:26px;transform:translate(-50%);width:min(440px,calc(100vw - 32px));background:#fdf7f2;border:2px solid #FF6B5B;border-radius:16px;padding:16px 18px 12px;box-shadow:0 12px 40px #00000047;z-index:60;animation:tour-in .35s ease}@keyframes tour-in{0%{opacity:0;transform:translate(-50%,14px)}to{opacity:1;transform:translate(-50%)}}.tour-title{font:700 16px var(--sans, "Space Grotesk", sans-serif);color:#2b2118;margin-bottom:4px}.tour-body{font:400 13.5px/1.45 var(--sans, "Space Grotesk", sans-serif);color:#57493a}.tour-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:12px}.tour-skip{background:none;border:none;padding:4px 2px;font:500 12px var(--mono);color:#9b8b7a;text-decoration:underline;cursor:pointer}.tour-skip:hover{color:#57493a}.tour-dots{display:flex;gap:5px}.tour-dots span{width:7px;height:7px;border-radius:50%;background:#e3d5c3}.tour-dots span.on{background:#ff6b5b}.tour-next{background:#ff6b5b;color:#fff;border:none;padding:8px 16px;border-radius:999px;font:700 13px var(--mono);cursor:pointer}.tour-next:hover{filter:brightness(1.06)}.tour-hl{border-radius:12px;animation:tour-pulse 1.4s ease-in-out infinite}@keyframes tour-pulse{0%,to{box-shadow:0 0 #ff6b5b8c}50%{box-shadow:0 0 0 6px #ff6b5b00}}.maplibregl-ctrl-attrib{background:#f8f4ecb8!important;border-radius:8px;font-size:10px;line-height:1.5;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);opacity:.55;transition:opacity .2s ease}.maplibregl-ctrl-attrib:hover{opacity:1}.maplibregl-ctrl-attrib a{color:#6b6354;text-decoration:none}.maplibregl-ctrl-attrib-button{opacity:.6}.maplibregl-ctrl-bottom-right{z-index:5}.distance-sub{font-style:normal;font-size:.72em;font-weight:500;opacity:.7;letter-spacing:0}.map-wrap.framing{align-items:center;justify-content:center;background:#2a2622}.map-wrap.framing .map{flex:0 0 auto;aspect-ratio:var(--shot-aspect);height:100%;width:auto;max-width:100%;box-shadow:0 0 0 1px #00000040,0 18px 50px #00000059}
