:root{--navy:#14353c;--ink:#203b43;--teal:#087f8c;--blue:#336bbb;--muted:#6a7e84;--line:#dbe6e7;--bg:#f4f7f6;--amber:#a96a10;--green:#14754f;--red:#aa3c43}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;font-size:14px}header{height:70px;background:white;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:20px;padding:0 36px}.brand{color:var(--navy);font-size:22px;font-weight:850;text-decoration:none;letter-spacing:-.8px}.brand span{font-size:12px;margin-left:11px;letter-spacing:2px;font-weight:650}.spacer{flex:1}.chip{border:1px solid #bfdbd7;color:#307164;border-radius:20px;padding:6px 10px;font-size:11px}.muted{color:var(--muted)}.small{font-size:12px}main{max-width:1500px;margin:auto;padding:30px 36px}h1{font-size:34px;letter-spacing:-1.3px;margin:6px 0 12px}h2{font-size:18px;margin:0 0 8px}h3{font-size:15px;margin:24px 0 12px}p{line-height:1.55}.eyebrow{font-size:10px;letter-spacing:2px;color:var(--teal);font-weight:800;margin:0}.intro{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}.source-badge{font-size:12px;display:grid;grid-template-columns:10px auto;gap:7px}.source-badge .muted{grid-column:2}.dot{width:7px;height:7px;background:#3caa83;border-radius:50%;margin-top:4px}.controls{display:flex;align-items:center;gap:24px;background:white;border:1px solid var(--line);border-radius:12px;padding:18px 22px}.controls>div{flex:1}label{display:flex;flex-direction:column;gap:7px;font-size:11px;font-weight:650;color:var(--muted)}button,input,select{font:inherit}button{cursor:pointer;border:1px solid var(--line);background:white;color:var(--ink);border-radius:7px;padding:9px 13px;font-size:12px;font-weight:650}button:hover{border-color:var(--teal);background:#f1f8f8}button:disabled{opacity:.55;cursor:not-allowed}button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #70c3d0;outline-offset:2px}.primary{background:var(--teal);color:white;border-color:var(--teal);padding:14px 20px;font-size:13px}.primary:hover{background:#076b76;color:white}.primary span{margin-left:24px}input,select{border:1px solid var(--line);border-radius:6px;padding:10px;color:var(--ink);background:white;font-size:13px}select{min-width:180px}#message{padding:12px 18px;background:#eaf3f6;border:1px solid #bad8e1;border-radius:9px;margin-bottom:18px;line-height:1.5}#message.error{background:#fff0f0;border-color:#e4b8bb;color:var(--red)}#progress{margin:18px 0;padding:18px 22px;background:white;border:1px solid var(--line);border-radius:10px}.progress-meta{display:flex;justify-content:space-between;font-size:12px}.progress-track{height:5px;background:#e5eded;margin-top:14px;border-radius:5px;overflow:hidden}#progress-bar{height:100%;background:var(--teal);width:0;transition:width 1s}.stats{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin:20px 0}.stat{padding:18px 20px;background:white;border:1px solid var(--line);border-radius:10px}.stat strong{display:block;font-size:26px;letter-spacing:-.6px;margin:6px 0}.stat .small{line-height:1.45}.stat.green strong{color:var(--green)}.stat.amber strong{color:var(--amber)}.workbench{background:white;border:1px solid var(--line);border-radius:12px;overflow:hidden}.tabbar{display:flex;gap:3px;align-items:center;flex-wrap:wrap;padding:12px 18px;border-bottom:1px solid var(--line)}.tabbar [role=tab]{border:none;color:var(--muted);padding:10px}.tabbar [aria-selected=true]{color:var(--teal);background:#e9f6f4}.view{padding:24px}.view-heading{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:22px}.view-heading p{margin:0}.search-label{min-width:250px}.board{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.lane{border-radius:9px;background:#f4f7f7;padding:13px;min-width:0}.lane-title{display:flex;justify-content:space-between;font-size:11px;font-weight:800;letter-spacing:.2px;margin:0 2px 13px;text-transform:uppercase}.lane-title span{padding:2px 6px;background:#e3ebec;border-radius:5px;font-size:10px}.job-card{display:block;width:100%;text-align:left;border:1px solid #dce5e6;border-left:3px solid var(--blue);border-radius:7px;background:white;padding:13px;margin-bottom:10px;font-weight:400;box-shadow:0 2px 3px #14353c05}.job-card.fixed-card{border-left-color:#8a718f}.job-card.unassigned-card{border-left-color:#c18a33}.job-card:hover{transform:translateY(-1px);box-shadow:0 3px 10px #14353c12;background:white}.card-id{font-size:12px;font-weight:750}.card-top{display:flex;justify-content:space-between;gap:6px;margin-bottom:7px}.pill{font-size:9px;font-weight:750;padding:3px 5px;border-radius:4px;background:#eaf3f6;color:#347a91}.pill.fixed{background:#efeaf2;color:#806084}.pill.movable{background:#e6f4ee;color:#358266}.card-city{font-size:12px;margin-bottom:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-row{font-size:10px;color:var(--muted);display:flex;justify-content:space-between;gap:5px;margin-top:6px;line-height:1.45}.card-row .em{color:var(--ink)}.empty{text-align:center;padding:55px 20px;color:var(--muted);grid-column:1/-1;font-size:13px}.scroll-panel{overflow:auto}.legend{display:flex;gap:14px;font-size:10px}.legend span:before{content:"";display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:4px;background:var(--blue)}.legend .fixed:before{background:#8a718f}.legend .travel:before{background:#72b6bd}.timeline-grid{min-width:950px}.axis,.timeline-row{display:grid;grid-template-columns:180px 1fr;gap:12px}.axis{height:28px}.ticks{position:relative;color:var(--muted);font-size:10px}.ticks span{position:absolute;transform:translateX(-50%)}.timeline-row{border-top:1px solid #edf1f1;min-height:54px;padding:10px 0}.tech-label{font-size:11px;font-weight:650;line-height:1.5}.tech-label span{display:block;color:var(--muted);font-size:9px;font-weight:400}.track{position:relative;height:32px;background:repeating-linear-gradient(to right,transparent 0,transparent calc(6.25% - 1px),#edf1f1 calc(6.25% - 1px),#edf1f1 6.25%);border-radius:4px}.bar{position:absolute;top:6px;height:20px;border-radius:3px;background:var(--blue);color:white;font-size:9px;padding:4px 5px;overflow:hidden;white-space:nowrap;min-width:2px;border:none}.bar.fixed{background:#8a718f}.bar.travel{background:#76b1ba;top:9px;height:14px;padding:1px}.bar.calendar{top:2px;height:28px;background:#edf4f3;padding:0}.map-svg{width:100%;height:460px;border:1px solid var(--line);background:#f5f9f8;border-radius:9px}.map-svg text{font-family:inherit}.map-dot{cursor:pointer}.equation{padding:20px;background:#f2f6f5;border-left:3px solid var(--teal);font-size:17px;line-height:1.9;margin:22px 0}.param-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-bottom:26px}table{border-collapse:collapse;width:100%;font-size:11px}th{text-align:left;padding:11px 10px;background:#f0f5f4;color:#607b81;white-space:nowrap}td{padding:11px 10px;border-bottom:1px solid #e6eded;vertical-align:top;line-height:1.6}ul{padding-left:20px;line-height:1.9}.notice{background:#fff7e8;border:1px solid #ead4a4;padding:13px 17px;margin:12px 0;border-radius:7px;font-size:12px;line-height:1.7}.reason-card{padding:16px;border:1px solid var(--line);border-radius:9px;margin:12px 0}.reason-card strong{font-size:12px}.reason-card p{margin-bottom:0}.validation{display:flex;flex-wrap:wrap;gap:8px;margin:16px 0}.validation span{padding:5px 9px;background:#eaf7ef;color:var(--green);border-radius:4px;font-size:10px}footer{font-size:10px;color:var(--muted);margin:22px 0;line-height:1.8}code{font-size:11px}dialog{border:1px solid var(--line);border-radius:14px;padding:25px;max-width:760px;width:90vw;max-height:88vh;color:var(--ink)}dialog::backdrop{background:#102d35a0}.dialog-top{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);padding-bottom:16px;margin-bottom:20px}.dialog-top button{font-size:20px;padding:1px 9px}.detail-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:18px}.detail-grid .small{display:block;color:var(--muted);margin-bottom:5px}.detail-grid strong{font-size:12px;font-weight:650;line-height:1.7}details{margin-top:20px;font-size:12px}pre{white-space:pre-wrap;word-break:break-word;background:#f5f7f7;padding:14px;font-size:10px;max-height:260px;overflow:auto} [hidden]{display:none!important}@media(max-width:1000px){main{padding:24px 18px}.stats{grid-template-columns:repeat(3,1fr)}.board{grid-template-columns:repeat(2,1fr)}header{padding:0 18px}.controls{gap:15px;flex-wrap:wrap}.intro{align-items:start}.param-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:620px){h1{font-size:28px}.intro{display:block}.source-badge{margin-top:15px}.brand span{font-size:9px}.chip{display:none}.controls>label{width:100%}.controls select{width:100%}.primary{width:100%}.stats{grid-template-columns:repeat(2,1fr)}.board{grid-template-columns:1fr}.view{padding:15px}.view-heading{display:block}.search-label{margin-top:14px}.param-grid,.detail-grid{grid-template-columns:1fr}.tabbar .spacer{display:none}.tabbar{gap:4px}.tabbar [role=tab]{font-size:10px}.source-badge{display:none}}
:root{
  /* Notebook 07 palette: consistent meaning across cards, routes and map. */
  --navy:#17495c;--ink:#172c3e;--teal:#247d87;--muted:#5b7080;
  --line:#dbe4ec;--bg:#f4f7fb;--green:#086a55;--amber:#7b5010;--red:#9c3343;
  --service:#239982;--fixed:#d6a23b;--travel:#648bc4;--return:#9064b5;--unassigned:#c2576b;
}
.lane{background:#f2f6fa}
.job-card{border-left-color:var(--service);transition:background-color .15s,border-color .15s,box-shadow .15s}
.job-card.fixed-card{border-left-color:var(--fixed)}
.job-card.unassigned-card{border-left-color:var(--unassigned)}
.job-card:not(.fixed-card):not(.unassigned-card):hover{background:#f0faf6;border-color:#239982;box-shadow:0 3px 12px #17495c15}
.job-card.fixed-card:hover{background:#fffaf0;border-color:#d6a23b;box-shadow:0 3px 12px #7b501015}
.job-card.unassigned-card:hover{background:#fff6f8;border-color:#c2576b;box-shadow:0 3px 12px #9c334315}
.card-row .em{text-align:right;overflow-wrap:anywhere}
.pill.fixed{color:#7b5010;background:#fff0cc}
.pill.movable{color:#086a55;background:#ddf4eb}
.tabbar [aria-selected=true]{background:#17495c;color:white}
.legend .service:before{background:var(--service)}
.legend .fixed:before{background:var(--fixed)}
.legend .travel:before{background:var(--travel)}
.legend .return:before{background:var(--return)}
.bar{background:var(--service);font-weight:650;box-shadow:0 1px 2px #172c3e15;transition:background-color .15s,box-shadow .15s;line-height:12px}
.bar:hover,.bar:focus-visible{background:#127661;box-shadow:0 0 0 2px #23998233}
.bar.fixed{background:var(--fixed);color:#583b08}
.bar.fixed:hover,.bar.fixed:focus-visible{background:#e9b94f;box-shadow:0 0 0 2px #d6a23b44}
.bar.travel,.bar.return{top:10px;height:12px;padding:0;border-radius:4px;box-shadow:inset 0 0 0 1px #17495c12;cursor:help}
.bar.travel{background:var(--travel)}
.bar.travel:hover,.bar.travel:focus-visible{background:#3f6da8;box-shadow:0 0 0 2px #648bc440}
.bar.return{background:var(--return)}
.bar.return:hover,.bar.return:focus-visible{background:#704694;box-shadow:0 0 0 2px #9064b540}
.bar.calendar,.bar.calendar:hover{background:#edf1f6;box-shadow:none;cursor:default}
.ticks span{white-space:nowrap}
.ticks span:first-child{transform:none}
.ticks span:last-child{transform:translateX(-100%)}
.map-svg{background:#f5f8fb}
/* Geographic map: the basemap is separate from the private route overlay. */
.route-map-layout{display:grid;grid-template-columns:300px minmax(0,1fr);gap:22px;align-items:start}
.route-map-sidebar{padding:17px;border:1px solid var(--line);border-radius:10px;background:#f8fbfb;max-height:660px;overflow:auto}
.route-map-sidebar select{width:100%;min-width:0;font-size:12px}
.route-map-panel{min-width:0}.geographic-map{height:640px;width:100%;border:1px solid var(--line);border-radius:10px;background:#e9efed;z-index:0}
.route-map-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;padding:12px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.route-map-stats strong{display:block;font-size:23px;color:var(--navy)}.route-map-stats span{font-size:10px;color:var(--muted)}
.route-map-key{display:flex;flex-wrap:wrap;gap:10px;font-size:11px;margin:16px 0}.route-map-key .service{color:#239982}.route-map-key .fixed{color:#ab791b}.route-map-key .unassigned{color:#c2576b}
.map-stop{display:flex;align-items:start;gap:10px;padding:10px 0;border-top:1px solid var(--line)}.map-stop button{font-size:11px;padding:4px 7px}.map-stop p{margin:5px 0}
.map-stop-number{min-width:24px;height:24px;display:grid;place-items:center;border-radius:50%;background:#e7efed;font-size:11px;font-weight:750}
.route-map-pin{width:30px;height:30px;display:grid;place-items:center;background:var(--pin-color);color:white;border:2px solid white;box-shadow:0 2px 6px #163b4360;border-radius:50%;font-size:11px;font-weight:800;line-height:1}
.route-map-pin.origin,.route-map-pin.endpoint{border-radius:7px;font-size:9px}.route-map-marker{border:none;background:none}
.route-map-marker:hover .route-map-pin,.route-map-marker:focus .route-map-pin{outline:3px solid #ffffffbb;box-shadow:0 2px 10px #163b4380}
.geographic-map .leaflet-popup-content{font:12px/1.6 Inter,ui-sans-serif,sans-serif;color:var(--ink)}.geographic-map .leaflet-popup-content p{margin:10px 0}
.geographic-map .leaflet-control-attribution{font-size:10px;background:#fffffff0;padding:3px 6px}.geographic-map .leaflet-control-attribution a{color:#315b77}
@media(max-width:1000px){.route-map-layout{grid-template-columns:245px minmax(0,1fr)}.geographic-map{height:560px}.route-map-sidebar{max-height:580px}}
@media(max-width:700px){.route-map-layout{grid-template-columns:1fr}.route-map-sidebar{max-height:none}.geographic-map{height:480px}#map-stop-list{max-height:220px;overflow:auto}}
.fixed-notice{padding:12px 16px;margin-bottom:20px;border:1px solid #ead19a;border-radius:7px;background:#fff0cc;color:#7b5010;line-height:1.6;font-size:12px}
@media(prefers-reduced-motion:reduce){.job-card,.bar{transition:none}.job-card:hover{transform:none}}
.reviewer-entry{max-width:580px;margin:30px auto 40px;background:white;border:1px solid var(--line);border-radius:14px;padding:30px;box-shadow:0 6px 30px #17495c08}
.reviewer-entry h2{font-size:24px;margin-top:10px}
.reviewer-entry form{display:flex;align-items:end;gap:12px;margin:24px 0}
.reviewer-entry label{flex:1}.reviewer-entry input{width:100%;font-size:15px}
.reviewer-entry .primary{white-space:nowrap;padding:11px 17px}
@media(max-width:620px){.reviewer-entry{padding:22px}.reviewer-entry form{display:block}.reviewer-entry button{margin-top:14px}}
