:root{--bg:#0f1419;--surface:#1a2332;--text:#e8eaed;--muted:#9aa0a6;--accent:#c9a227;--danger:#c45c5c;--ok:#5cb87a}*{box-sizing:border-box}body,html{margin:0;width:100%;min-height:100%;font-family:Segoe UI,system-ui,sans-serif;background:var(--bg);color:var(--text)}main{width:100%;max-width:none}a{color:var(--accent)}button{font:inherit;cursor:pointer}input,select,textarea{font:inherit;color:var(--text);background:#0d1117;border:1px solid #30363d;border-radius:6px;padding:.5rem .65rem}.panel{background:var(--surface);border:1px solid #30363d;border-radius:10px;padding:1rem}.btn{border:none;border-radius:8px;padding:.55rem 1rem;font-weight:600}.btn-primary{background:var(--accent);color:#111}.btn-ghost{background:transparent;color:var(--muted);border:1px solid #30363d}.toolbar{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center;margin-bottom:1rem}.map-wrap{border-radius:10px;overflow:hidden;min-height:420px}.app-header,.map-wrap{border:1px solid #30363d}.app-header{background:var(--surface);border-radius:10px;padding:.75rem 1rem;margin-bottom:1rem;position:static}.maps-toolbar{position:static;margin-bottom:.75rem;padding:.5rem .6rem;gap:.45rem;border-radius:12px;background:linear-gradient(180deg,hsla(0,0%,100%,.02),transparent),var(--surface)}.maps-toolbar .btn{padding:.36rem .68rem;border-radius:7px;font-size:12px;line-height:1.2}.maps-toolbar label{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}.maps-toolbar input[type=file],.maps-toolbar input[type=text],.maps-toolbar select{min-height:30px;padding:.28rem .5rem;font-size:12px;border-radius:6px}.maps-toolbar input[type=file]{max-width:210px}.maps-layout{grid-template-columns:460px minmax(0,1fr);grid-gap:.75rem;gap:.75rem}.maps-layout,.maps-side{display:grid;align-items:start}.maps-side{grid-gap:.9rem;gap:.9rem}.maps-bottom{margin-top:.75rem;display:grid;grid-template-columns:minmax(0,1fr) 500px;grid-gap:.75rem;gap:.75rem;align-items:start}.maps-bottom-left{display:grid;grid-gap:1rem;gap:1rem}.app-header-row{display:grid;grid-template-columns:240px 1fr auto;align-items:center;grid-gap:1rem;gap:1rem}.app-header-title{margin:0;font-size:1.2rem;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-header-nav{display:flex;gap:.5rem;justify-self:end}.app-header-link{border:1px solid #30363d;border-radius:8px;padding:.4rem .75rem;color:var(--muted);text-decoration:none}.app-header-link.active{color:#111;background:var(--accent);border-color:var(--accent)}.route-row-btn{width:100%;border:0;border-bottom:1px solid #263040;color:var(--text);background:transparent;padding:.55rem .65rem;display:grid;grid-template-columns:8px 1fr;grid-gap:.5rem;gap:.5rem;align-items:start;text-align:left}.route-row-btn:hover{background:#101a29}.route-row-btn-full{box-shadow:inset 0 0 0 1px rgba(34,197,94,.55);background:linear-gradient(90deg,rgba(34,197,94,.14),rgba(34,197,94,.04) 55%,transparent)}.full-load-pill{display:inline-flex;align-items:center;margin-left:8px;padding:1px 6px;border-radius:999px;border:1px solid rgba(34,197,94,.55);color:#7ce6a4;font-size:10px;font-weight:700;letter-spacing:.02em;background:rgba(34,197,94,.12);vertical-align:middle}.route-row-color{display:inline-block;width:8px;height:100%;min-height:30px;border-radius:3px}.dispatcher-panel{padding:.55rem;height:calc(100vh - 150px);min-height:660px;max-height:980px;display:flex;flex-direction:column;background:radial-gradient(circle at top right,rgba(201,162,39,.16),transparent 42%),var(--surface)}.dispatcher-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem;border-bottom:1px solid #30363d;padding:.2rem .2rem .55rem;margin-bottom:.55rem}.dispatcher-body{display:grid;grid-gap:.55rem;gap:.55rem;flex:1 1;min-height:0}.dispatcher-assign,.dispatcher-routes{border:1px solid #263040;border-radius:8px;background:#111a28;overflow:hidden}.dispatcher-routes{display:flex;flex-direction:column}.dispatcher-routes,.dispatcher-routes-scroll{flex:1 1;min-height:0}.dispatcher-assign-panel{padding:0;overflow:hidden;margin-top:.9rem}.dispatcher-title{padding:.5rem .65rem;font-weight:700;font-size:13px;border-bottom:1px solid #263040;background:rgba(15,23,35,.9)}.soft-scroll{scrollbar-width:thin;scrollbar-color:#4b5d79 transparent}.soft-scroll::-webkit-scrollbar{width:9px;height:9px}.soft-scroll::-webkit-scrollbar-track{background:transparent}.soft-scroll::-webkit-scrollbar-thumb{background-color:#4b5d79;border-radius:999px;border:2px solid transparent;background-clip:content-box}.soft-scroll::-webkit-scrollbar-thumb:hover{background-color:#61779a}.assign-table td,.assign-table th{padding:4px 6px;vertical-align:top}.assign-table th{color:var(--muted);font-size:12px;font-weight:700}.assign-table td select{padding-top:.4rem;padding-bottom:.4rem}.assign-name-cell{white-space:normal;overflow:visible;text-overflow:clip;line-height:1.25;word-break:break-word}.td-trunc{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.car-stop-row{border-radius:8px}.car-stop-row:hover{background:#101a29}.car-stop-row.dragging{opacity:.75;outline:2px solid rgba(201,162,39,.6);background:rgba(15,23,35,.9)}.car-stop-grip{-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:-webkit-grab;cursor:grab;color:var(--muted);display:flex;align-items:center;justify-content:center;height:32px;border:1px solid #263040;border-radius:8px;background:rgba(13,21,35,.8)}.car-stop-grip:active{cursor:-webkit-grabbing;cursor:grabbing}.car-row-controls{position:absolute;right:10px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;align-items:center;gap:6px;width:32px}.car-visibility-toggle{width:30px;height:30px;background:#374151;border:1px solid #30363d;border-radius:10px;cursor:pointer;transition:all .2s ease;padding:0}.car-lock-wrapper,.car-visibility-toggle{display:flex;align-items:center;justify-content:center}.car-lock-wrapper{width:-moz-fit-content;width:fit-content;height:-moz-fit-content;height:fit-content;flex-direction:column;transform:rotate(-10deg)}.car-lock-shackle{background-color:transparent;height:7px;width:11px;border-top-right-radius:10px;border-top-left-radius:10px;border-top:2px solid #fff;border-left:2px solid #fff;border-right:2px solid #fff;transition:all .25s ease}.car-lock-body{width:12px}.car-visibility-toggle:hover{filter:brightness(1.1)}.car-visibility-toggle:active{transform:scale(.92)}.car-visibility-toggle.is-hidden{background:#a747f5}.car-visibility-toggle.is-hidden .car-lock-shackle{transform:rotateY(150deg) translateX(2px);transform-origin:right}.car-download-btn{width:30px;height:30px;border:1px solid #30363d;border-radius:10px;background:#374151;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;position:relative;transition:all .2s ease;box-shadow:none;padding:0;font-size:12px}.car-download-svg-icon{fill:#e5e7eb;width:11px;height:11px}.car-download-icon2{width:10px;height:3px;border-bottom:1.6px solid #e5e7eb;border-left:1.6px solid #e5e7eb;border-right:1.6px solid #e5e7eb}.car-download-tooltip{position:absolute;right:-96px;opacity:0;background-color:#0c0c0c;color:#fff;padding:4px 8px;border-radius:5px;display:flex;align-items:center;justify-content:center;transition-duration:.2s;pointer-events:none;letter-spacing:.2px;font-size:11px;white-space:nowrap}.car-download-tooltip:before{position:absolute;content:"";width:10px;height:10px;background-color:#0c0c0c;background-size:1000%;background-position:50%;transform:rotate(45deg);left:-5%;transition-duration:.3s}.car-download-btn:hover .car-download-tooltip{opacity:1;transition-duration:.2s}.car-download-btn:hover{filter:brightness(1.1)}.car-download-btn:active{transform:scale(.92)}.car-download-btn:hover .car-download-icon2,.car-download-btn:hover .car-download-svg-icon{opacity:1}.inline-spinner{width:14px;height:14px;border-radius:999px;border:2px solid #334155;border-top:2px solid var(--accent);animation:spin .8s linear infinite}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.modal-overlay{position:fixed;inset:0;z-index:5000}.modal-backdrop{position:absolute;inset:0;background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center;padding:24px;animation:modal-fade-in .18s ease-out}.modal-card{width:min(520px,100%);max-height:min(86vh,860px);overflow:auto;background:transparent;color:inherit;border-radius:10px;box-shadow:none;border:none;animation:modal-scale-in .2s ease-out;transform-origin:center top}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-scale-in{0%{opacity:0;transform:translateY(-6px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}