:root{--navy:#123a59;--navy2:#0a2a42;--blue:#1373a8;--blue2:#eaf5fb;--ink:#153248;--muted:#657d8e;--line:#d8e3ea;--panel:#fff;--bg:#f4f7f9;--green:#1f8b55;--greenbg:#edf9f2;--amber:#9a6a0b;--amberbg:#fff8e7;--red:#ad3040;--redbg:#fff1f3;--shadow:0 10px 26px rgba(16,53,79,.08)}
*{box-sizing:border-box}html,body{margin:0;min-height:100%;background:var(--bg);color:var(--ink);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}button,input,select,textarea{font:inherit}.topbar{position:sticky;top:0;z-index:50;display:flex;justify-content:space-between;align-items:center;gap:20px;padding:14px 22px;background:var(--navy2);color:#fff;border-bottom:3px solid var(--blue)}.brand{display:flex;align-items:center;gap:12px}.brand-mark{display:grid;place-items:center;width:44px;height:44px;border-radius:11px;background:#fff;overflow:hidden}.brand-mark img{width:100%;height:100%;display:block;object-fit:cover}.brand h1{margin:0;font-size:18px}.brand p{margin:2px 0 0;color:#bdd0dc;font-size:12px}.standalone-pill,.locked-pill{display:inline-flex;align-items:center;border:1px solid rgba(255,255,255,.22);border-radius:999px;padding:6px 9px;font-size:10px;font-weight:800;letter-spacing:.45px;color:#dcebf3}.top-actions{display:flex;gap:8px;align-items:center}.button{height:36px;border-radius:9px;border:1px solid transparent;padding:0 13px;font-size:12px;font-weight:800;letter-spacing:.18px;cursor:pointer}.button:disabled{opacity:.45;cursor:not-allowed}.button.primary{background:var(--blue);color:#fff}.button.primary:hover{background:#0e6594}.button.secondary{background:#fff;color:var(--navy);border-color:#c8d8e2}.topbar .button.secondary{background:transparent;color:#fff;border-color:#638198}.app-shell{max-width:1680px;margin:0 auto;padding:16px}.hero-strip{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:20px;align-items:center;background:#fff;border:1px solid var(--line);border-left:5px solid var(--blue);border-radius:13px;padding:15px 17px}.eyebrow{margin:0 0 3px;color:#698292;font-size:10px;font-weight:900;letter-spacing:.7px}.hero-strip h2{margin:2px 0 5px;font-size:20px;color:var(--navy)}.hero-strip p:not(.eyebrow){margin:0;max-width:900px;color:var(--muted);font-size:13px;line-height:1.5}.safety-badge{display:grid;gap:2px;border:1px solid #a9d9bc;border-radius:10px;background:var(--greenbg);padding:10px 12px;min-width:220px}.safety-badge b{font-size:11px;color:#176f43}.safety-badge span{font-size:11px;color:#547766}.notice{margin-top:10px;border-radius:9px;padding:10px 12px;border:1px solid var(--line);background:#fff;font-size:12px;font-weight:700}.notice.green{border-color:#b3dec3;background:var(--greenbg);color:#176f43}.notice.amber{border-color:#ead49a;background:var(--amberbg);color:var(--amber)}.notice.red{border-color:#e8bcc3;background:var(--redbg);color:var(--red)}.metrics{display:grid;grid-template-columns:1.4fr repeat(4,1fr);gap:9px;margin-top:10px}.metrics article{position:relative;overflow:hidden;background:#fff;border:1px solid var(--line);border-radius:11px;padding:11px 12px;min-height:83px}.metrics article:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--blue)}.metrics span{font-size:10px;font-weight:900;letter-spacing:.45px;color:#718695}.metrics strong{display:block;margin-top:5px;font-size:22px;color:var(--navy);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.metrics small{display:block;margin-top:4px;color:#788d9b;font-size:11px}.workspace{display:grid;grid-template-columns:minmax(320px,.72fr) minmax(0,2fr);gap:10px;margin-top:10px;min-height:650px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:12px}.scenario-pane{padding:12px;display:grid;grid-template-rows:auto auto minmax(0,1fr);min-width:0}.section-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.section-head h3{margin:2px 0 0;color:var(--navy);font-size:15px}.icon-button{width:34px;height:34px;border-radius:9px;border:1px solid #bcd0dc;background:var(--blue2);color:var(--blue);font-size:22px;cursor:pointer}.filters{display:grid;grid-template-columns:minmax(0,1fr) 125px;gap:6px;margin-top:9px}.filters input,.filters select,.modal input,.modal select,.modal textarea{width:100%;border:1px solid #c9d8e2;border-radius:8px;background:#fff;color:var(--ink);padding:8px 9px;font-size:12px;outline:none}.filters input,.filters select,.modal input,.modal select{height:36px}.filters input:focus,.filters select:focus,.modal input:focus,.modal select:focus,.modal textarea:focus{border-color:#5fa4ca;box-shadow:0 0 0 3px rgba(35,119,165,.1)}.scenario-list{display:grid;align-content:start;gap:7px;overflow:auto;margin-top:9px;padding-right:2px}.scenario-row{width:100%;display:grid;gap:5px;text-align:left;border:1px solid #d9e3e9;border-left:4px solid #91a7b6;border-radius:10px;background:#fff;padding:10px;cursor:pointer}.scenario-row:hover{border-color:#9cbfd2;background:#fbfdfe}.scenario-row.selected{border-color:#6ca8c8;border-left-color:var(--blue);background:#f0f8fc}.scenario-row-head{display:flex;justify-content:space-between;align-items:center;gap:6px}.scenario-ref{font-size:10px;font-weight:900;letter-spacing:.4px;color:#688398}.scenario-row b{font-size:13px;color:var(--navy);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.scenario-row small{color:#778b99;font-size:10.5px}.scenario-row p{margin:0;color:#60798b;font-size:11px;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.status{display:inline-flex;align-items:center;border:1px solid #cad7df;border-radius:999px;padding:4px 7px;background:#f3f6f8;color:#617585;font-size:9px;font-weight:900;letter-spacing:.3px}.status.in-review{background:var(--amberbg);border-color:#ead69e;color:var(--amber)}.status.approved{background:var(--greenbg);border-color:#b6dcc5;color:var(--green)}.status.rejected{background:var(--redbg);border-color:#e7bbc2;color:var(--red)}.empty-list{display:grid;place-items:center;text-align:center;border:1px dashed #cbd8e1;border-radius:10px;background:#fafcfd;padding:24px 14px;color:#718797;font-size:12px;line-height:1.45}.detail-pane{min-width:0}.empty-state{height:100%;min-height:650px;display:grid;place-items:center;align-content:center;text-align:center;gap:7px;border:1px dashed #c8d8e2;border-radius:12px;background:#f9fbfc;padding:22px}.empty-icon{display:grid;place-items:center;width:60px;height:60px;border:1px solid #c8dae6;border-radius:16px;background:#fff;color:var(--blue);font-size:26px}.empty-state h3{margin:4px 0 0;color:var(--navy);font-size:18px}.empty-state p{max-width:620px;margin:0 0 6px;color:var(--muted);font-size:13px;line-height:1.5}.detail-head{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:14px;align-items:start;background:var(--navy);color:#fff;border-radius:12px;padding:14px 16px;border-bottom:3px solid var(--blue)}.detail-head h2{margin:5px 0 4px;font-size:19px}.detail-head p{margin:0;max-width:850px;color:#cfdee7;font-size:12px;line-height:1.5}.detail-kicker{display:flex;align-items:center;gap:8px}.detail-kicker .scenario-ref{color:#b9cfdd}.detail-actions{display:flex;align-items:center;gap:7px;flex-wrap:wrap;justify-content:flex-end}.isolation{display:inline-flex;border:1px solid #78b997;border-radius:999px;background:#174e3a;color:#c9f1da;padding:7px 9px;font-size:9px;font-weight:900;letter-spacing:.35px}.detail-grid{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(270px,.68fr);gap:10px;margin-top:10px}.map-panel,.version-panel,.workflow,.audit{padding:12px}.network-map{position:relative;z-index:0;isolation:isolate;height:390px;margin-top:9px;border:1px solid #cbd9e2;border-radius:10px;overflow:hidden;background:#eef3f6}.map-fallback{width:100%;height:100%;display:block;background:#eff4f7}.map-note{display:flex;gap:11px;flex-wrap:wrap;margin-top:8px;color:#6d8292;font-size:10.5px}.version-list{display:grid;margin:7px 0 0}.version-list div{display:grid;gap:2px;padding:8px 0;border-bottom:1px solid #e5ecef}.version-list dt{font-size:9px;font-weight:900;letter-spacing:.4px;color:#788c9b}.version-list dd{margin:0;color:#244a66;font-size:11.5px;font-weight:750;overflow-wrap:anywhere}.version-list .mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:10px}.source-note{display:grid;gap:3px;border:1px solid #acd8bf;border-left:4px solid var(--green);border-radius:8px;background:var(--greenbg);padding:9px}.source-note b{font-size:10px;color:#197148}.source-note span{font-size:11px;line-height:1.45;color:#577a69}.workflow,.audit{margin-top:10px}.workflow-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.workflow-head small{color:#7b8e9c;font-size:10.5px}.stages{display:grid;grid-template-columns:auto 1fr auto 1fr auto 1fr auto 1fr auto 1fr auto;align-items:center;gap:6px;margin-top:12px}.stages span{border:1px solid #cbd8df;border-radius:999px;padding:6px 8px;background:#f5f7f8;color:#718390;font-size:9px;font-weight:900;text-align:center}.stages span.done{background:#eaf5fb;border-color:#99c8df;color:#165f86}.stages span.locked{background:#f0f1f2;color:#9aa6ad}.stages i{height:2px;background:#cbd8df}.stages i.locked{background:repeating-linear-gradient(90deg,#cbd5db 0 5px,transparent 5px 9px)}.action-row{display:flex;gap:7px;flex-wrap:wrap;margin-top:12px}.audit-list{display:grid;margin-top:8px}.audit-row{display:grid;grid-template-columns:160px 125px 1fr auto;gap:9px;align-items:center;padding:9px 2px;border-bottom:1px solid #e8eef2}.audit-row time,.audit-row small{color:#718695;font-size:10px}.audit-row b{font-size:11px;color:#31546c}.audit-row span{font-size:11px;color:#4f6a7b}.roadmap{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-top:10px;padding:12px 14px}.roadmap b{display:block;color:var(--navy);font-size:12px}.roadmap div>span{display:block;margin-top:3px;color:#6d8291;font-size:11px}.roadmap .locked-pill{color:#6d7b84;border-color:#cbd6dc;background:#f2f4f5}.modal-backdrop{position:fixed;inset:0;z-index:20000;display:grid;place-items:center;background:rgba(7,31,47,.58);padding:20px;overflow:auto;isolation:isolate}.modal-backdrop[hidden]{display:none}.modal{position:relative;z-index:20001;width:min(650px,96vw);max-height:92vh;display:flex;flex-direction:column;overflow:hidden;border-radius:14px;background:#fff;box-shadow:0 28px 70px rgba(0,0,0,.25)}.modal.small{width:min(520px,96vw)}.modal header{position:sticky;top:0;z-index:2;display:flex;justify-content:space-between;align-items:flex-start;padding:14px 16px;border-bottom:1px solid #e1e8ed;background:#fff;flex:0 0 auto}.modal header h3{margin:2px 0 0;color:var(--navy);font-size:17px}.close{width:32px;height:32px;border:1px solid #d4dfe5;border-radius:8px;background:#fff;color:#536f82;font-size:20px;cursor:pointer}.modal-body{display:grid;gap:11px;padding:15px 16px;overflow:auto;min-height:0;flex:1 1 auto}.modal label{display:grid;gap:5px}.modal label>span{font-size:10px;font-weight:900;letter-spacing:.4px;color:#6d8393}.modal textarea{min-height:95px;resize:vertical;line-height:1.5}.two-col{display:grid;grid-template-columns:1fr 1fr;gap:9px}.file-drop{position:relative;display:grid!important;place-items:center;text-align:center;border:1px dashed #96b9cd;border-radius:11px;background:#f7fbfd;padding:21px;cursor:pointer}.file-drop input{position:absolute;inset:0;opacity:0;cursor:pointer;height:auto}.file-drop b{color:#176f9e;font-size:12px}.file-drop span{margin-top:3px;color:#6f8594;font-size:11px;line-height:1.4}.progress-box{display:grid;gap:6px;border:1px solid #d4e0e7;border-radius:9px;background:#f9fbfc;padding:9px}.progress-box span{font-size:11px;color:#536f82;font-weight:750}.progress-box>div{height:8px;border-radius:999px;background:#e6edf1;overflow:hidden}.progress-box i{display:block;width:15%;height:100%;background:var(--blue);transition:width .2s}.helper{margin:0;color:#6d8290;font-size:11px;line-height:1.5}.helper code{background:#eef3f6;border-radius:4px;padding:2px 4px}.modal footer{position:sticky;bottom:0;z-index:2;display:flex;justify-content:flex-end;gap:7px;padding:12px 16px 15px;border-top:1px solid #e1e8ed;background:#fff;flex:0 0 auto}.leaflet-container{font-family:inherit}.leaflet-control-attribution{font-size:9px!important}
@media(max-width:1100px){.metrics{grid-template-columns:repeat(3,1fr)}.workspace{grid-template-columns:minmax(285px,.8fr) minmax(0,1.6fr)}.detail-grid{grid-template-columns:1fr}.network-map{height:330px}}@media(max-width:820px){.topbar{position:static;align-items:flex-start;flex-direction:column}.standalone-pill{display:none}.hero-strip{grid-template-columns:1fr}.metrics{grid-template-columns:1fr 1fr}.workspace{grid-template-columns:1fr}.scenario-list{max-height:330px}.detail-head{grid-template-columns:1fr}.detail-actions{justify-content:flex-start}.stages{grid-template-columns:1fr;gap:4px}.stages i{width:2px;height:10px;justify-self:center}.audit-row{grid-template-columns:1fr 1fr}.audit-row span{grid-column:1/-1}.roadmap{align-items:flex-start;flex-direction:column}}@media(max-width:520px){.app-shell{padding:10px}.metrics{grid-template-columns:1fr}.filters,.two-col{grid-template-columns:1fr}.top-actions{width:100%;flex-wrap:wrap}.top-actions .button{flex:1}.brand-mark{width:38px;height:38px}.brand h1{font-size:16px}.audit-row{grid-template-columns:1fr}.audit-row span{grid-column:auto}}
.foundation-strip{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:0;margin-top:10px;overflow:hidden}.foundation-strip>div{display:grid;gap:4px;padding:10px 11px;border-right:1px solid var(--line)}.foundation-strip>div:last-child{border-right:0}.foundation-strip span{font-size:9px;font-weight:900;letter-spacing:.4px;color:#718695}.foundation-strip b{font-size:10px;color:#176f43}.foundation-panel{margin-top:10px;padding:12px}.foundation-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:9px}.foundation-card{border:1px solid var(--line);border-radius:9px;background:#fafcfd;padding:9px}.foundation-card span{display:block;font-size:9px;font-weight:900;letter-spacing:.35px;color:#718695}.foundation-card strong{display:block;margin-top:4px;color:var(--navy);font-size:17px}.foundation-card small{display:block;margin-top:3px;color:#788d9b;font-size:10px;line-height:1.35}.capability-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:7px;margin-top:10px}.capability-item{display:flex;justify-content:space-between;gap:8px;align-items:center;border:1px solid #d9e3e9;border-radius:8px;padding:8px 9px;background:#fff}.capability-item span{font-size:10px;font-weight:800;color:#45657a}.capability-item b{font-size:9px;color:#197148}.capability-item.locked b{color:#8b6a18}.plan-ref{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:10px;color:#5b778a}.warning-note{display:grid;gap:3px;margin-top:9px;border:1px solid #ead49a;border-left:4px solid var(--amber);border-radius:8px;background:var(--amberbg);padding:9px}.warning-note b{font-size:10px;color:#8b620c}.warning-note span{font-size:11px;line-height:1.45;color:#7a6a3d}
@media(max-width:1250px){.foundation-strip{grid-template-columns:repeat(4,1fr)}.foundation-grid,.capability-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:700px){.foundation-strip{grid-template-columns:repeat(2,1fr)}.foundation-grid,.capability-grid{grid-template-columns:1fr}}

/* V0.2 route / road / runtime editor */
.compact-hero{padding-top:14px;padding-bottom:14px}
.network-select{min-width:220px;max-width:320px;border:1px solid rgba(255,255,255,.3);background:#fff;color:var(--navy);border-radius:8px;padding:8px 10px;font-weight:800;font-size:11px}
.empty-actions{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}
.button.light{background:#fff;color:var(--navy);border-color:#d6e1e8}
.editor-button{background:#1d8f59;color:#fff;border-color:#1d8f59}
.editor-button:hover{background:#18794c}
.wide-modal{width:min(960px,96vw)}
.city-wizard{grid-template-columns:minmax(270px,.75fr) minmax(0,1.25fr);align-items:stretch}
.city-fields{display:grid;gap:11px;align-content:start}
.city-picker-map{height:380px;border:1px solid #c9d8e1;border-radius:11px;overflow:hidden;background:#eef3f6}
.field-caption{margin:0 0 6px;font-size:9px;font-weight:900;letter-spacing:.45px;color:#6d8393}
.editor-shell{display:grid;gap:8px;min-width:0}
.editor-head{display:flex;justify-content:space-between;align-items:center;gap:12px;background:var(--navy);border-radius:12px;padding:10px 12px;border-bottom:3px solid var(--blue);color:#fff}
.editor-head>div{display:flex;align-items:center;gap:10px;min-width:0}.editor-head-actions{display:flex!important;justify-content:flex-end;flex-wrap:wrap}
.editor-title{display:grid;gap:1px;min-width:0}.editor-title b{font-size:15px}.editor-title small{color:#c8dbe7;font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.editor-grid{display:grid;grid-template-columns:190px minmax(0,1fr) 330px;gap:8px;align-items:start;min-width:0}
.editor-grid.empty-editor{grid-template-columns:210px minmax(0,1fr)}
.editor-browser{padding:10px;position:sticky;top:80px;max-height:calc(100vh - 100px);overflow:auto}
.editor-browser>.eyebrow{margin-bottom:8px}.full{width:100%}
.editor-route-list{display:grid;gap:6px;margin-top:8px}.editor-route-row{display:grid;gap:2px;width:100%;text-align:left;border:1px solid #d8e3ea;border-radius:8px;background:#fff;padding:8px;cursor:pointer}.editor-route-row:hover,.editor-route-row.selected{border-color:#74b5d6;background:#f0f9fd}.editor-route-row b{font-size:12px;color:var(--navy)}.editor-route-row span{font-size:10.5px;color:#4c6c80}.editor-route-row small{font-size:9px;color:#8294a0}
.editor-welcome{min-height:630px;display:grid;place-items:center;align-content:center;text-align:center;gap:8px;padding:30px}.editor-welcome h2{margin:0;color:var(--navy);font-size:22px}.editor-welcome p{max-width:680px;margin:0;color:#627d8f;line-height:1.55;font-size:13px}
.editor-canvas{padding:8px;min-width:0}.editor-map-toolbar{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-bottom:6px}.toolbar-spacer{flex:1}
.tool-button{border:1px solid #cad9e2;background:#fff;color:#3d6076;border-radius:7px;padding:7px 9px;font-size:9.5px;font-weight:900;letter-spacing:.25px;cursor:pointer}.tool-button:hover{border-color:#8cbdd7;background:#f3faff}.tool-button.active{background:#e6f5fc;border-color:#4ba1cd;color:#0f6591}.tool-button:disabled{opacity:.45;cursor:not-allowed}
.direction-tabs{display:flex;gap:5px;overflow:auto;padding:2px 0 6px}.direction-tab{border:1px solid #d0dde5;background:#f8fafb;border-radius:999px;padding:6px 9px;color:#577185;font-size:10px;font-weight:850;white-space:nowrap;cursor:pointer}.direction-tab small{font-weight:600;color:#8395a1}.direction-tab.active{border-color:#5aa9cf;background:#eaf6fb;color:#145f86}
.route-editor-map{position:relative;z-index:0;isolation:isolate;height:620px;border:1px solid #c7d6df;border-radius:10px;overflow:hidden;background:#eef3f6}.editor-map-help{margin-top:6px;border-left:3px solid #5da7ca;background:#eef8fc;border-radius:6px;padding:7px 8px;color:#4c7083;font-size:10.5px;line-height:1.4}
.editor-inspector{padding:10px;position:sticky;top:80px;max-height:calc(100vh - 100px);overflow:auto}.inspector-section{display:grid;gap:8px;padding-bottom:11px;margin-bottom:11px;border-bottom:1px solid #e1e9ee}.inspector-section:last-child{border-bottom:0;margin-bottom:0}.inspector-section label{display:grid;gap:4px}.inspector-section label>span{font-size:8.5px;font-weight:900;letter-spacing:.35px;color:#708796}.inspector-section input,.inspector-section select{width:100%;border:1px solid #cbd9e1;border-radius:7px;background:#fff;color:#18384f;padding:7px 8px;font-size:11px}.inspector-section input:disabled{background:#eef2f4;color:#6c7e89}.selected-card{border:1px solid #c7dde8;border-radius:9px;background:#f8fcfe;padding:9px;margin-bottom:10px}.road-card{border-color:#e0d3a9;background:#fffaf0}.asset-note{display:grid;gap:2px;border-radius:7px;padding:7px;background:#edf9f2;border-left:3px solid var(--green)}.asset-note.shared{background:#f0f4f6;border-left-color:#7a8c97}.asset-note b{font-size:9px;color:#245f45}.asset-note span{font-size:9.5px;line-height:1.4;color:#60796d}
.three-col{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.speed-band-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:6px}.segment-distance{display:flex;align-items:baseline;gap:7px;border:1px solid #eadfb9;background:#fff;padding:7px;border-radius:7px}.segment-distance span{font-size:8.5px;font-weight:900;color:#8a7334}.segment-distance b{font-size:13px;color:#604e1f}.segment-distance small{margin-left:auto;font-size:9px;color:#887a54}.field-hint{display:block;color:#778b98;font-size:9.5px;line-height:1.45}.mini-action{border:1px solid #a9cadb;background:#f1f9fc;color:#1d6d94;border-radius:7px;padding:7px 8px;font-size:9px;font-weight:900;cursor:pointer}
.band-table{display:grid;border:1px solid #dae4ea;border-radius:8px;overflow:hidden}.band-head,.band-row{display:grid;grid-template-columns:1.1fr .75fr .9fr;gap:6px;align-items:center;padding:6px 7px}.band-head{background:#edf3f6;font-size:8px;font-weight:900;color:#6d8392}.band-row{border-top:1px solid #e4ebef}.band-row>span{display:grid}.band-row b{font-size:10px;color:#31546a}.band-row small{font-size:8.5px;color:#83939e}.band-row label{display:flex;align-items:center;gap:3px}.band-row input{padding:5px 6px}.band-row label small{white-space:nowrap}
.metric-mini-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:6px}.metric-mini-grid article{border:1px solid #dce6eb;border-radius:8px;background:#fff;padding:7px}.metric-mini-grid span{display:block;font-size:8px;font-weight:900;color:#708696}.metric-mini-grid b{display:block;margin-top:3px;color:var(--navy);font-size:14px}.metric-mini-grid small{display:block;margin-top:2px;color:#7d909c;font-size:8.5px}.metric-mini-grid .peak-card{background:#eef9f3;border-color:#b8dec8}.metric-mini-grid .peak-card b{color:#176c42;font-size:19px}.pvr-band-list{display:grid;margin-top:7px;border:1px solid #dde6eb;border-radius:8px;overflow:hidden}.pvr-band-list div{display:grid;grid-template-columns:.8fr .7fr 1.3fr;gap:5px;align-items:center;padding:6px 7px;border-bottom:1px solid #e6ecef}.pvr-band-list div:last-child{border-bottom:0}.pvr-band-list span{font-size:9px;font-weight:800;color:#46677b}.pvr-band-list b{font-size:10px;color:#1d5d81}.pvr-band-list small{font-size:8.5px;color:#7a8d99}.calc-note{margin-top:7px;border-radius:7px;background:#edf9f2;border-left:3px solid var(--green);padding:7px;color:#527563;font-size:9.5px;line-height:1.45}.calc-note.warning{background:#fff8e7;border-left-color:#b98514;color:#796633}
@media(max-width:1350px){.editor-grid{grid-template-columns:170px minmax(0,1fr) 300px}.route-editor-map{position:relative;z-index:0;isolation:isolate;height:560px}}
@media(max-width:1100px){.editor-grid{grid-template-columns:170px minmax(0,1fr)}.editor-inspector{grid-column:1/-1;position:static;max-height:none;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.inspector-section{border:1px solid #e0e8ed;border-radius:8px;padding:9px;margin:0}.route-editor-map{position:relative;z-index:0;isolation:isolate;height:500px}.city-wizard{grid-template-columns:1fr}}
@media(max-width:760px){.editor-grid,.editor-grid.empty-editor{grid-template-columns:1fr}.editor-browser{position:static;max-height:260px}.editor-inspector{display:block}.route-editor-map{position:relative;z-index:0;isolation:isolate;height:420px}.editor-head{align-items:flex-start;flex-direction:column}.editor-head-actions{width:100%}.three-col,.speed-band-grid{grid-template-columns:1fr 1fr}.network-select{width:100%;max-width:none}.city-picker-map{height:300px}}
@media(max-width:520px){.three-col,.speed-band-grid{grid-template-columns:1fr}.band-head,.band-row{grid-template-columns:1fr 1fr}.band-head span:nth-child(2),.band-row>span:nth-child(2){display:none}.metric-mini-grid{grid-template-columns:1fr}.pvr-band-list div{grid-template-columns:1fr 1fr}.pvr-band-list small{grid-column:1/-1}.route-editor-map{position:relative;z-index:0;isolation:isolate;height:360px}}


/* V0.2.1 scenario-map and road-routing hotfix */
.map-mode-switch{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}.map-mode{border:1px solid var(--line,#c7d7e3);background:#fff;color:#27465c;border-radius:999px;padding:7px 10px;font-weight:800;font-size:11px;cursor:pointer}.map-mode.active{background:#0f5577;color:#fff;border-color:#0f5577}.route-road{border-color:#168a55!important;color:#0c7145!important;background:#eefbf4!important}.routing-proof{display:flex;flex-direction:column;gap:2px;margin-top:10px;padding:9px 10px;border-radius:9px;border:1px solid #d5dee5;background:#f7fafc}.routing-proof b{font-size:11px}.routing-proof span{font-size:11px;color:#526575}.routing-proof.routed{border-color:#98d7b5;background:#effaf4}.routing-proof.routed b{color:#08713f}.routing-proof.pending{border-color:#e7c985;background:#fff9eb}.routing-proof.pending b{color:#986400}


/* V0.2.3 scenario deletion + expanded map workspace */
.button.danger{background:#a82828;color:#fff;border-color:#a82828}.button.danger:hover{background:#8d2020;border-color:#8d2020}.danger-text{color:#a82828!important}.danger-note{display:grid;gap:5px;border:1px solid #e4b6b6;border-left:4px solid #a82828;border-radius:9px;background:#fff5f5;padding:10px 11px;color:#6d2b2b}.danger-note b{font-size:13px;color:#8f1f1f}.danger-note span{font-size:10px;font-weight:900;letter-spacing:.35px;color:#a04a4a}.danger-note p{margin:2px 0 0;font-size:11px;line-height:1.5;color:#754545}
.expand-map-button{white-space:nowrap}.map-mode-switch .expand-map-button{border-color:#1d8f59;color:#176b47;background:#effaf4}.map-mode-switch .expand-map-button:hover{background:#e2f6ea}.editor-map-toolbar .expand-map-button{border-color:#1d8f59;color:#176b47;background:#effaf4}
body.map-expanded{overflow:hidden}.map-expanded-panel{position:fixed!important;inset:10px!important;z-index:5000!important;width:auto!important;max-width:none!important;height:auto!important;max-height:none!important;margin:0!important;border-radius:12px!important;background:#fff!important;box-shadow:0 16px 60px rgba(9,38,56,.34)!important;display:flex!important;flex-direction:column!important;overflow:hidden!important}.map-expanded-panel .section-head{flex:0 0 auto}.map-expanded-panel .network-map,.map-expanded-panel .route-editor-map{flex:1 1 auto!important;height:auto!important;min-height:0!important;border-radius:9px}.map-expanded-panel .map-note,.map-expanded-panel .editor-map-help,.map-expanded-panel .editor-map-toolbar,.map-expanded-panel .direction-tabs{flex:0 0 auto}.map-expanded-panel.editor-canvas{padding:10px!important}.map-expanded-panel .editor-map-toolbar{margin-bottom:7px}.map-expanded-panel .direction-tabs{padding-bottom:7px}.leaflet-control-container{z-index:1000}
@media(max-width:700px){.map-expanded-panel{inset:4px!important;border-radius:8px!important}.map-mode-switch{justify-content:flex-start}.map-expanded-panel .network-map,.map-expanded-panel .route-editor-map{min-height:260px!important}}

/* V0.2.3.1 modal layering hotfix: dialogs always sit above Leaflet/map workspaces. */
body.modal-open{overflow:hidden}
@media(max-height:620px){.modal-backdrop{place-items:start center;padding:8px}.modal{max-height:calc(100vh - 16px)}}

/* V0.2.4 guided planning workflow + control workbook */
.editor-head-actions{flex-wrap:wrap;justify-content:flex-end}
.band-head,.band-row{grid-template-columns:.8fr 1.55fr .72fr .9fr}
.band-window{display:grid!important;grid-template-columns:1fr auto 1fr;gap:3px;align-items:center}.band-window input{min-width:0;padding:5px 4px!important;font-size:9px!important}.band-window i{font-style:normal;color:#7b8f9b;font-size:9px}
.guide-modal{width:min(760px,94vw)}.workbook-modal{width:min(1520px,97vw);max-width:1520px}.workbook-modal .modal-body{padding:12px 14px 18px;overflow:auto}.guide-hero{display:grid;gap:4px;border-left:4px solid #d39116;background:#fff8e8;border-radius:9px;padding:10px 12px}.guide-hero.ready{border-left-color:#168a55;background:#effaf4}.guide-hero span{font-size:9px;font-weight:950;letter-spacing:.5px;color:#6f8190}.guide-hero b{font-size:14px;color:#163c54;line-height:1.35}
.guide-checklist{display:grid;gap:6px;margin-top:10px}.guide-item{display:grid;grid-template-columns:26px 1fr;gap:8px;align-items:start;border:1px solid #dce6eb;border-radius:9px;padding:8px 9px;background:#fff}.guide-item>span{display:grid;place-items:center;width:24px;height:24px;border-radius:999px;background:#edf2f5;color:#536c7c;font-weight:950}.guide-item div{display:grid;gap:2px}.guide-item b{font-size:11px;color:#264b62}.guide-item small{font-size:10px;line-height:1.4;color:#718794}.guide-item.done{border-color:#b9dec8;background:#f3fbf6}.guide-item.done>span{background:#d8f0e2;color:#0c7042}.guide-item.warning{border-color:#ead49c;background:#fffaf0}.guide-item.warning>span{background:#f7e9bd;color:#8b6411}.guide-item.pending{border-color:#e4c1bd;background:#fff8f6}.guide-item.pending>span{background:#f6ddda;color:#a13f34}
.guide-warning{display:grid;gap:4px;margin-top:10px;border:1px solid #ead49c;border-left:4px solid #c18818;border-radius:9px;background:#fff9e9;padding:9px 10px}.guide-warning b{font-size:9px;letter-spacing:.4px;color:#8a6517}.guide-warning span{font-size:10.5px;line-height:1.45;color:#6e6245}.guide-next-engine{display:grid;gap:3px;margin-top:10px;border:1px solid #c9dbe5;border-radius:9px;background:#f4f9fb;padding:9px 10px}.guide-next-engine b{font-size:9px;letter-spacing:.4px;color:#39647c}.guide-next-engine span{font-size:10.5px;line-height:1.5;color:#577284}
.workbook-summary{display:grid;grid-template-columns:repeat(6,minmax(150px,1fr));gap:8px}.workbook-summary article{border:1px solid #dce6eb;border-radius:9px;background:#fff;padding:9px}.workbook-summary span{display:block;font-size:8px;font-weight:950;letter-spacing:.35px;color:#728996}.workbook-summary b{display:block;margin-top:3px;font-size:15px;color:#153e56}.workbook-summary small{display:block;margin-top:2px;font-size:9px;color:#7c8f9a}.workbook-section{margin-top:12px;border:1px solid #dce6eb;border-radius:10px;background:#fff;overflow:hidden}.workbook-section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;padding:9px 10px;background:#f3f7f9;border-bottom:1px solid #dce6eb}.workbook-section-head h3{margin:1px 0 0;font-size:13px;color:#183e56}.workbook-section-head>span{font-size:10px;font-weight:850;color:#5b7484}.table-scroll{overflow:auto;max-width:100%}.planning-table{border-collapse:collapse;width:max-content;min-width:100%;font-size:9.5px}.planning-table th,.planning-table td{padding:6px 7px;border-right:1px solid #e7edf0;border-bottom:1px solid #e7edf0;text-align:left;white-space:nowrap;vertical-align:top}.planning-table th{position:sticky;top:0;background:#eaf1f5;color:#476578;font-size:8.5px;font-weight:950;letter-spacing:.25px;z-index:2}.planning-table tbody tr:nth-child(even){background:#fbfcfd}.planning-table tfoot th{background:#edf8f2;color:#246446}.road-names-cell{white-space:normal!important;min-width:220px;max-width:380px;line-height:1.35}.workbook-disclaimer{margin:9px 10px 10px;color:#6d8290;font-size:9.5px;line-height:1.5}
@media(max-width:1200px){.workbook-summary{grid-template-columns:repeat(3,minmax(150px,1fr))}}
@media(max-width:720px){.workbook-summary{grid-template-columns:1fr 1fr}.band-head,.band-row{grid-template-columns:.8fr 1.4fr .9fr}.band-head span:nth-child(3),.band-row>span:nth-child(3){display:none}}
.guide-stage-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin-top:10px}.guide-stage{display:grid;grid-template-columns:27px 1fr;gap:7px;align-items:start;border:1px solid #dce6eb;border-radius:9px;padding:8px;background:#fff}.guide-stage>span{display:grid;place-items:center;width:25px;height:25px;border-radius:7px;background:#edf2f5;font-size:10px;font-weight:950;color:#4e697a}.guide-stage div{display:grid;gap:2px}.guide-stage b{font-size:9.5px;color:#254b62}.guide-stage small{font-size:9px;line-height:1.35;color:#758a96}.guide-stage.done{border-color:#b9dec8;background:#f2fbf6}.guide-stage.done>span{background:#d7f0e2;color:#0d7043}.guide-stage.next{border-color:#aacfe2;background:#eff8fc}.guide-stage.next>span{background:#d8edf7;color:#0c5e84}.guide-stage.future{background:#fafbfc}.guide-stage.future>span{background:#eef1f3;color:#82929b}
@media(max-width:900px){.guide-stage-grid{grid-template-columns:1fr 1fr}}@media(max-width:620px){.guide-stage-grid{grid-template-columns:1fr}}

/* V0.3 timetable + guided continuation */
.next-step-button{background:#f6c945!important;color:#102f46!important;border-color:#e7b81b!important;font-weight:900!important}.next-step-panel,.timetable-next{display:flex;align-items:center;justify-content:space-between;gap:22px;border-left:5px solid #f0b90b;background:linear-gradient(90deg,#fffdf3,#fff)}.next-step-panel.complete,.timetable-next.complete{border-left-color:#168a50;background:linear-gradient(90deg,#f3fff8,#fff)}.next-step-panel h3,.timetable-next h2{margin:.15rem 0 .35rem}.next-step-panel p,.timetable-next p{margin:0;max-width:900px;color:#526777}.next-step-big{white-space:nowrap;font-size:.8rem;padding:.85rem 1rem}.next-modal-hero{padding:18px;border:1px solid #edd889;border-radius:12px;background:#fffaf0}.next-modal-hero.complete{border-color:#9dd8b7;background:#f1fff7}.next-modal-hero span{display:block;font-size:.68rem;font-weight:900;letter-spacing:.08em}.next-modal-hero b{display:block;font-size:1.25rem;margin:.25rem 0}.next-output-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:14px}.next-output-grid div{padding:12px;border:1px solid #d9e4ec;border-radius:10px;background:#fff}.next-output-grid b,.next-output-grid span{display:block}.next-output-grid b{font-size:.68rem}.next-output-grid span{font-size:.8rem;color:#617485;margin-top:4px}.next-modal-flow{margin-top:14px;padding:12px;border-radius:9px;background:#eef6fb}.next-modal-flow b{display:block;font-size:.68rem;margin-bottom:4px}.timetable-shell{display:flex;flex-direction:column;gap:12px}.timetable-kpis{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px}.timetable-kpis article{background:#fff;border:1px solid #d7e2ea;border-radius:10px;padding:12px}.timetable-kpis span,.timetable-kpis small{display:block}.timetable-kpis span{font-size:.62rem;font-weight:900;letter-spacing:.05em;color:#65798a}.timetable-kpis b{display:block;font-size:1.35rem;color:#123d59;margin:.25rem 0}.timetable-validation,.timetable-register,.downstream-register,.timetable-next{padding:14px}.validation-list{display:grid;gap:6px;margin:10px 0}.validation-list div{padding:9px 11px;border-radius:8px;font-size:.78rem}.validation-list.errors div{background:#fff0f0;color:#a52828;border:1px solid #f0b4b4}.validation-list.warnings div{background:#fff8e5;color:#8b5b00;border:1px solid #efd08a}.validation-good{padding:10px;background:#effaf4;color:#147641;border:1px solid #a9ddbf;border-radius:8px;margin:10px 0}.route-preflight-table,.trip-table{display:flex;flex-direction:column;border:1px solid #dce5eb;border-radius:9px;overflow:hidden}.tt-row{display:grid;grid-template-columns:1.5fr .7fr .7fr .7fr 1fr .8fr;gap:8px;padding:9px 10px;border-bottom:1px solid #edf1f4;align-items:center;font-size:.73rem}.tt-row:last-child{border-bottom:0}.tt-row span small{display:block;color:#738696}.tt-head,.trip-head{background:#eef5f8;font-size:.62rem;font-weight:900;letter-spacing:.05em}.tt-tools{display:flex;gap:8px;align-items:center}.tt-tools input,.tt-tools select{min-height:34px;border:1px solid #ccd9e2;border-radius:7px;padding:0 9px}.timetable-grid{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(340px,.75fr);gap:12px}.trip-table-wrap{max-height:620px;overflow:auto;border-radius:9px}.trip-row{display:grid;grid-template-columns:1.2fr .65fr 1fr .8fr .72fr .72fr .75fr .6fr .45fr;gap:7px;padding:8px 9px;border:0;border-bottom:1px solid #edf1f4;background:#fff;text-align:left;align-items:center;font-size:.71rem;width:100%;color:#243b4d}.trip-row[data-trip-id]{cursor:pointer}.trip-row[data-trip-id]:hover,.trip-row.selected{background:#edf8ff}.trip-row span small{display:block;color:#758898;font-size:.58rem;overflow:hidden;text-overflow:ellipsis}.trip-stop-panel{border:1px solid #dce5eb;border-radius:9px;background:#fff;max-height:620px;overflow:auto}.trip-empty{display:flex;flex-direction:column;gap:5px;padding:22px;color:#6d8090}.trip-detail-head{padding:14px;border-bottom:1px solid #e4ebf0}.trip-detail-head h3{margin:.2rem 0}.trip-detail-head>span{font-size:.74rem;color:#647989}.stop-time-list{display:flex;flex-direction:column}.stop-time-row{display:grid;grid-template-columns:.35fr 1.6fr .75fr .75fr .6fr .55fr;gap:6px;padding:8px 9px;border-bottom:1px solid #edf1f4;font-size:.68rem;align-items:center}.stop-time-row span small{display:block;color:#7c8d99}.stop-time-row.stop-head{position:sticky;top:0;background:#eef5f8;font-weight:900;font-size:.59rem}.downstream-register{border-left:5px solid #9b6a00}.downstream-register p{margin:0;color:#566b7c}@media(max-width:1200px){.timetable-kpis{grid-template-columns:repeat(3,1fr)}.timetable-grid{grid-template-columns:1fr}.trip-stop-panel{max-height:420px}.next-output-grid{grid-template-columns:repeat(2,1fr)}}

/* V0.3.1 pre-flight return workflow */
.preflight-return-banner{display:flex;align-items:center;justify-content:space-between;gap:18px;margin:12px 14px 0;padding:13px 16px;border:1px solid #e2b43f;border-left:5px solid #d89a00;border-radius:10px;background:#fff8df;color:#4d3b00;box-shadow:0 2px 8px rgba(28,46,65,.08)}
.preflight-return-banner>div{display:grid;gap:4px;min-width:0}.preflight-return-banner b{font-size:14px}.preflight-return-banner span{font-size:12px;line-height:1.45}.preflight-return-banner .button{flex:0 0 auto}
.preflight-action-stack{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.preflight-action-stack .next-step-big{min-width:220px}
@media(max-width:900px){.preflight-return-banner{align-items:flex-start;flex-direction:column}.preflight-action-stack{width:100%;justify-content:flex-start}}


/* V0.3.1.1 service time-window visibility hotfix */
.service-band-cards{display:grid;gap:8px;margin-top:8px}.service-band-card{border:1px solid #d8e4ea;border-radius:9px;background:#fff;padding:9px;display:grid;gap:8px}.service-band-title{display:flex;align-items:center;justify-content:space-between;gap:8px}.service-band-title b{font-size:11px;color:#244d66}.service-band-title span{font-size:8.5px;font-weight:900;letter-spacing:.25px;color:#6e8493}.service-band-times{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:end;gap:7px}.service-band-times label{display:grid;gap:4px;min-width:0}.service-band-times label>span,.service-band-headway>span{font-size:8px;font-weight:950;letter-spacing:.4px;color:#718797}.service-band-times i{align-self:end;padding-bottom:9px;font-style:normal;font-size:14px;font-weight:900;color:#6c8392}.service-band-times input[type=time]{display:block;width:100%;min-width:96px;height:38px;padding:6px 8px!important;border:1px solid #bfcfda;border-radius:8px;background:#fff;color:#183e56;font-size:12px!important;font-weight:800;font-variant-numeric:tabular-nums;line-height:1.2}.service-band-times input[type=time]:focus{border-color:#4f9ec7;box-shadow:0 0 0 3px rgba(35,119,165,.12);outline:none}.service-band-times input[type=time]::-webkit-datetime-edit{padding:0;min-width:52px}.service-band-times input[type=time]::-webkit-datetime-edit-fields-wrapper{padding:0}.service-band-times input[type=time]::-webkit-calendar-picker-indicator{opacity:.75;cursor:pointer;margin-left:2px}.service-band-headway{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:9px;border-top:1px solid #edf1f4;padding-top:8px}.service-band-headway>div{display:flex;align-items:center;gap:5px}.service-band-headway input{width:74px;height:34px;padding:5px 7px;border:1px solid #c6d5de;border-radius:7px}.service-band-headway small{font-size:9px;color:#748997;white-space:nowrap}.inspector-section .three-col input[type=time]{min-width:0;font-variant-numeric:tabular-nums}.field-hint{display:block;margin-top:7px;line-height:1.45}
@media(max-width:430px){.service-band-times{grid-template-columns:1fr}.service-band-times i{display:none}.service-band-times input[type=time]{min-width:0}.service-band-headway{grid-template-columns:1fr}.service-band-headway>div{justify-content:flex-start}}


/* V0.3.2 single planning workspace */
.workspace-row p{font-size:9.5px;line-height:1.35;color:#647b8a}.planning-pipeline{padding:12px 14px;margin-bottom:12px;border-top:4px solid #157aa8}.pipeline-head,.pipeline-action{display:flex;align-items:center;justify-content:space-between;gap:14px}.pipeline-head h3{margin:2px 0}.pipeline-note{font-size:10px;color:#6c8190}.pipeline-scroll{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(118px,1fr);gap:6px;overflow-x:auto;padding:10px 0 11px;scrollbar-width:thin}.pipeline-step{display:grid;grid-template-columns:25px 1fr;grid-template-rows:auto auto;column-gap:7px;min-height:58px;border:1px solid #dce5eb;border-radius:9px;padding:7px;background:#fafcfd}.pipeline-step>span{grid-row:1/3;display:grid;place-items:center;width:25px;height:25px;border-radius:50%;background:#edf2f5;font-size:9px;font-weight:950;color:#6e8391}.pipeline-step b{font-size:9px;color:#34566b;align-self:end}.pipeline-step small{font-size:8px;color:#798c98;line-height:1.25}.pipeline-step.done{background:#f0fbf5;border-color:#b9dfc9}.pipeline-step.done>span{background:#d4efdf;color:#0e6c41}.pipeline-step.current{background:#fff8df;border-color:#e6c15d;box-shadow:0 0 0 2px rgba(222,173,39,.08)}.pipeline-step.current>span{background:#f4c84b;color:#17394c}.pipeline-action{border-top:1px solid #e6edf1;padding-top:10px}.pipeline-action>span{flex:1;font-size:9.5px;color:#647a89;line-height:1.4}.pipeline-action>b{font-size:10.5px;color:#163f59}.pipeline-action .button{white-space:nowrap}.version-history-summary{display:grid;gap:4px;padding:12px;border-radius:9px;background:#eef6fa;margin-bottom:10px}.version-history-summary b{font-size:14px;color:#173f59}.version-history-summary span{font-size:10px;color:#647b8a}.version-history-list{display:grid;gap:6px}.version-history-row{display:grid;grid-template-columns:1.6fr .9fr .8fr;gap:8px;align-items:center;width:100%;border:1px solid #dbe5eb;background:#fff;border-radius:8px;padding:10px;text-align:left;color:#27485d;cursor:pointer}.version-history-row:hover,.version-history-row.selected{background:#eef8fd;border-color:#87bfd9}.version-history-row span{font-size:10px}.version-history-row b,.version-history-row small{display:block}.version-history-row small{color:#7b8d99;margin-top:2px}.button.compact{padding:6px 8px;font-size:9px}.wide-modal{width:min(860px,calc(100vw - 32px))}@media(max-width:1100px){.pipeline-action{align-items:flex-start;flex-direction:column}.pipeline-action .button{width:100%}}

/* V0.4 vehicle block + total kilometre optimiser */
.vehicle-shell{display:grid;gap:14px}.vehicle-grid{display:grid;grid-template-columns:minmax(0,1.8fr) minmax(330px,.9fr);gap:14px;min-height:520px}.block-table-wrap{min-width:0;overflow:auto;border:1px solid #d8e4ec;border-radius:14px;background:#fff}.block-table{min-width:900px}.block-row{width:100%;display:grid;grid-template-columns:1.35fr .75fr .75fr .55fr .9fr .8fr 1fr;gap:10px;align-items:center;padding:11px 12px;border:0;border-bottom:1px solid #e6edf2;background:#fff;text-align:left;color:#163c55;font:inherit}.block-row:not(.block-head){cursor:pointer}.block-row:not(.block-head):hover,.block-row.selected{background:#eaf6fb}.block-head{position:sticky;top:0;z-index:2;background:#f3f8fb;font-size:11px;font-weight:800;letter-spacing:.04em}.block-row span{min-width:0}.block-row b,.block-row small{display:block}.block-row small{font-size:10px;color:#6d8090;margin-top:2px}.block-metric-mini{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin:12px 0}.block-metric-mini span{display:block;border:1px solid #dce8ef;border-radius:10px;padding:9px;background:#f8fbfd}.block-metric-mini b,.block-metric-mini small{display:block}.block-metric-mini b{font-size:14px}.block-metric-mini small{font-size:9px;text-transform:uppercase;color:#6a7e8d;margin-top:3px}.block-activity-list{display:grid;gap:5px;max-height:540px;overflow:auto}.block-activity-row{display:grid;grid-template-columns:30px 1.25fr 1fr .55fr;gap:8px;align-items:center;padding:8px;border:1px solid #e0e9ee;border-radius:9px;background:#fff;font-size:11px}.block-activity-row.trip{border-left:4px solid #1175a8}.block-activity-row.dead_run,.block-activity-row.depot_pull_out,.block-activity-row.depot_pull_in{border-left:4px solid #b46c00;background:#fffaf2}.block-activity-row.layover{border-left:4px solid #758696;background:#f8fafb}.block-activity-row b,.block-activity-row small{display:block}.block-activity-row small{font-size:9px;color:#748694;margin-top:2px}.depot-list{display:grid;gap:7px;margin-top:12px}.depot-list>span{display:flex;justify-content:space-between;gap:14px;border:1px solid #dbe7ed;border-radius:10px;padding:10px;background:#f9fcfd}.depot-list b,.depot-list small{display:block}.depot-list small{font-size:10px;color:#6a7d8a}.vehicle-shell .trip-stop-panel{min-height:480px}.vehicle-shell .timetable-kpis{grid-template-columns:repeat(6,minmax(130px,1fr))}
@media(max-width:1150px){.vehicle-grid{grid-template-columns:1fr}.vehicle-shell .timetable-kpis{grid-template-columns:repeat(3,1fr)}}
@media(max-width:760px){.vehicle-shell .timetable-kpis{grid-template-columns:repeat(2,1fr)}.block-activity-row{grid-template-columns:26px 1fr}.block-activity-row>span:nth-child(3),.block-activity-row>span:nth-child(4){grid-column:2}}

.depot-picker-map{height:280px;min-height:220px;border:1px solid var(--line,#cbd9e4);border-radius:12px;overflow:hidden;background:#eef5f8;margin:8px 0 12px}.depot-picker-map .leaflet-control-container{z-index:400}

/* V0.4.1 responsive workspace + fleet/energy selector */
.app-shell{max-width:none;width:100%;padding:clamp(8px,1vw,16px)}
.topbar{flex-wrap:wrap;gap:10px 14px;padding:10px clamp(10px,1.2vw,20px)}
.topbar .brand{min-width:0;flex:1 1 520px;flex-wrap:wrap}
.top-actions{flex:1 1 520px;justify-content:flex-end;flex-wrap:wrap;min-width:0}
.top-actions .network-select{flex:1 1 230px;min-width:180px;max-width:360px}
.top-actions .button{flex:0 1 auto;min-width:88px}
.metrics{grid-template-columns:repeat(auto-fit,minmax(185px,1fr))}
.foundation-strip{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
.workspace{grid-template-columns:clamp(260px,20vw,340px) minmax(0,1fr);gap:10px}
.detail-head{grid-template-columns:minmax(220px,.8fr) minmax(0,1.5fr);align-items:start}
.detail-actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(118px,1fr));width:min(100%,760px);justify-self:end;gap:7px}
.detail-actions .button,.detail-actions .isolation{width:100%;min-width:0;justify-content:center;text-align:center;white-space:normal;line-height:1.15;height:auto;min-height:36px;padding:8px 10px}
.detail-actions .isolation{display:grid;place-items:center}
.fleet-step-button{background:#f0a83a!important;color:#17354a!important;border-color:#db8f1f!important;font-weight:950!important}
.planning-pipeline{overflow:hidden}
.pipeline-scroll{display:grid;grid-auto-flow:row;grid-template-columns:repeat(auto-fit,minmax(112px,1fr));grid-auto-columns:unset;overflow:visible;gap:6px}
.pipeline-step{min-width:0}
.pipeline-action{display:grid;grid-template-columns:minmax(150px,.7fr) minmax(220px,1.6fr) auto;align-items:center}
.pipeline-action .button{min-width:180px}
.editor-head{align-items:flex-start;flex-wrap:wrap}
.editor-head>div:first-child{flex:1 1 380px}
.editor-head-actions{display:grid!important;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));flex:1 1 420px;max-width:720px;gap:7px;width:100%}
.editor-head-actions .button,.editor-head-actions .status{width:100%;min-width:0;white-space:normal;text-align:center;justify-content:center;height:auto;min-height:34px;padding:7px 9px}
.roadmap{flex-wrap:wrap}
.roadmap>div{min-width:0;flex:1 1 600px}
.fleet-shell{display:grid;gap:12px}
.fleet-selector,.fleet-profile,.fleet-range-preview{padding:14px}
.propulsion-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(145px,1fr));gap:9px;margin-top:12px}
.propulsion-card{display:grid;gap:5px;text-align:left;border:1px solid #d6e2e9;border-radius:12px;background:#fff;padding:13px;cursor:pointer;color:#21475f;min-height:78px}
.propulsion-card:hover{border-color:#82b8d2;background:#f8fcfe}
.propulsion-card.selected{border:2px solid #1478a8;background:#eaf7fd;box-shadow:0 0 0 2px rgba(20,120,168,.08)}
.propulsion-card b{font-size:14px;color:#123e59}.propulsion-card span{font-size:10px;color:#6d8290;line-height:1.35}
.fleet-common-grid,.fleet-energy-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:9px;margin-top:12px}
.fleet-common-grid label,.fleet-energy-grid label,.fleet-notes{display:grid;gap:5px}
.fleet-common-grid label span,.fleet-energy-grid label span,.fleet-notes span{font-size:9px;font-weight:900;letter-spacing:.4px;color:#6f8493}
.fleet-common-grid input,.fleet-energy-grid input,.fleet-notes textarea{width:100%;border:1px solid #cbd9e1;border-radius:8px;background:#fff;color:#17384e;padding:8px 9px;min-height:36px}
.fleet-notes{margin-top:10px}.fleet-notes textarea{min-height:78px;resize:vertical}
.fleet-save-row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:12px;padding-top:12px;border-top:1px solid #e4ebef}
.fleet-save-row span{font-size:10px;color:#6b7f8e;line-height:1.4;max-width:760px}
.fleet-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:9px;margin-top:12px}
.fleet-kpis article{border:1px solid #d9e5eb;border-radius:10px;background:#fff;padding:11px}
.fleet-kpis span,.fleet-kpis small{display:block}.fleet-kpis span{font-size:9px;font-weight:900;letter-spacing:.45px;color:#738795}.fleet-kpis b{display:block;font-size:18px;color:#143f5b;margin:4px 0}.fleet-kpis small{font-size:10px;color:#6d8190}
@media(max-width:1380px){.detail-head{grid-template-columns:1fr}.detail-actions{width:100%;max-width:none;justify-self:stretch}.workspace{grid-template-columns:280px minmax(0,1fr)}.pipeline-action{grid-template-columns:1fr 1.8fr}.pipeline-action .button{grid-column:1/-1;width:100%}}
@media(max-width:1050px){.workspace{grid-template-columns:1fr}.scenario-pane{max-height:360px}.detail-grid{grid-template-columns:1fr}.top-actions{justify-content:stretch}.top-actions .network-select{max-width:none}.top-actions .button{flex:1 1 110px}.pipeline-head{align-items:flex-start;flex-direction:column}.pipeline-action{grid-template-columns:1fr}.pipeline-action .button{grid-column:auto}.fleet-save-row{align-items:stretch;flex-direction:column}.fleet-save-row .button{width:100%}}
@media(max-width:700px){.detail-actions{grid-template-columns:repeat(2,minmax(0,1fr))}.pipeline-scroll{grid-template-columns:repeat(2,minmax(0,1fr))}.topbar .brand{flex-basis:100%}.top-actions{flex-basis:100%}.top-actions .network-select{flex-basis:100%}.editor-head-actions{grid-template-columns:1fr 1fr}.propulsion-grid{grid-template-columns:1fr 1fr}}
@media(max-width:460px){.detail-actions,.editor-head-actions,.propulsion-grid,.pipeline-scroll{grid-template-columns:1fr}.top-actions .button{flex:1 1 calc(50% - 8px)}}

/* V0.4.2 direction colours + always-visible bus stops */
.map-legend{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:8px;padding:7px 9px;border:1px solid #d7e2e8;border-radius:8px;background:#f9fbfc;color:#526d7f;font-size:10.5px;font-weight:800}.map-legend span{display:inline-flex;align-items:center;gap:6px}.legend-line{display:inline-block;width:26px;height:0;border-top:4px solid;border-radius:3px}.legend-line.outbound{border-color:#0B6FA4}.legend-line.inbound{border-color:#D13C67}.legend-stop{display:inline-block;width:11px;height:11px;border-radius:50%;background:#12364d;border:2px solid #fff;box-shadow:0 0 0 1px #879aa7}.direction-tab{display:inline-flex!important;align-items:center;gap:6px}.direction-swatch{width:10px;height:10px;border-radius:50%;background:var(--direction-colour,#0B6FA4);box-shadow:0 0 0 2px #fff,0 0 0 3px #aebdc6;flex:0 0 auto}.leaflet-stop-pane,.leaflet-pane.leaflet-stopMarkers-pane{z-index:650!important}.leaflet-pane.leaflet-routeLines-pane{z-index:430!important}

/* V0.5 fleet / energy feasibility */
.energy-facility-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;align-items:end}
.energy-facility-grid label,.fleet-energy-grid label,.fleet-common-grid label{min-width:0}
.energy-facility-grid input,.energy-facility-grid select{width:100%;min-width:0}
.facility-list{display:grid;gap:8px;margin-top:12px}
.facility-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;border:1px solid #d9e4ec;border-radius:10px;background:#fbfdff}
.facility-row span{display:flex;flex-direction:column;min-width:0}.facility-row small{color:#61798a;margin-top:3px}
.energy-block-table tbody tr{cursor:pointer}.energy-block-table tbody tr:hover{background:#eef8fd}.energy-block-table .energy-fail,.energy-result-row.energy-fail{background:#fff4f1}
.energy-detail{scroll-margin-top:12px}.energy-detail .planning-table td,.energy-detail .planning-table th{white-space:nowrap}
.energy-run .next-step-big{margin-top:12px}
@media(max-width:1100px){.energy-facility-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.facility-row{align-items:flex-start;flex-wrap:wrap}}
@media(max-width:680px){.energy-facility-grid{grid-template-columns:1fr}.facility-row{display:grid}.energy-detail .table-scroll{max-width:100vw}}

/* V0.6 crew planning + named users / role-based access */
.crew-step-button{background:#f0b33e!important;border-color:#d99b20!important;color:#17384e!important;font-weight:950!important}
.crew-shell{display:grid;gap:12px}.crew-rules{padding:14px}.crew-rule-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:9px;margin:12px 0}.crew-rule-grid label{display:grid;gap:5px;min-width:0}.crew-rule-grid label span{font-size:9px;font-weight:900;letter-spacing:.4px;color:#6f8493}.crew-rule-grid input{width:100%;min-width:0;border:1px solid #cbd9e1;border-radius:8px;background:#fff;color:#17384e;padding:8px 9px;min-height:36px}.check-row{display:flex!important;align-items:flex-start;gap:9px;margin-top:9px;padding:9px 10px;border:1px solid #dce7ed;border-radius:9px;background:#fafcfd}.check-row input{width:auto!important;min-height:0!important;margin-top:2px}.confirm-rules{border-color:#e9c066;background:#fff9eb}.crew-duty-row{grid-template-columns:1.35fr .75fr .75fr .75fr .7fr .7fr .7fr .65fr}.crew-duty-row.trip-head{font-size:9px}.block-activity-row.sign_on,.block-activity-row.sign_off{border-left:4px solid #5c6f7c}.block-activity-row.break{border-left:4px solid #2f9a64;background:#f4fbf7}.block-activity-row.standby{border-left:4px solid #9a7b31;background:#fffaf0}
.users-modal{width:min(1180px,94vw)}.users-admin-layout{display:grid;grid-template-columns:minmax(300px,.8fr) minmax(480px,1.5fr);gap:14px}.user-create-card{border:1px solid #d9e5eb;border-radius:12px;padding:14px;background:#fbfdff;height:max-content}.users-admin-list{display:grid;gap:8px}.user-admin-row{display:grid;grid-template-columns:minmax(220px,1.4fr) minmax(120px,.55fr) minmax(120px,.55fr) auto;gap:9px;align-items:end;border:1px solid #dbe6ec;border-radius:11px;padding:10px;background:#fff}.user-admin-person{min-width:0}.user-admin-person b,.user-admin-person span,.user-admin-person small{display:block}.user-admin-person b{font-size:13px;color:#173f59}.user-admin-person span{font-size:10.5px;color:#5f7787;margin-top:2px;overflow-wrap:anywhere}.user-admin-person small{font-size:9.5px;color:#738794;margin-top:4px}.user-admin-row label{display:grid;gap:4px}.user-admin-row label>span{font-size:8.5px;font-weight:900;letter-spacing:.4px;color:#6f8493}.user-admin-row select{min-width:0;width:100%;border:1px solid #cad9e2;border-radius:7px;padding:7px;background:#fff}.user-admin-actions{display:flex;gap:6px;flex-wrap:wrap}.user-secret-result{display:grid;gap:5px;margin-top:10px;padding:11px;border:1px solid #e4ba56;border-radius:10px;background:#fff8df;color:#46360d}.user-secret-result b,.user-secret-result span,.user-secret-result small{display:block}.user-secret-result code{display:inline-block;font-size:13px;font-weight:900;background:#fff;border:1px solid #d9c582;border-radius:5px;padding:3px 6px;user-select:all}.auth-section{display:grid;gap:9px}.auth-divider{display:flex;align-items:center;gap:8px;margin:10px 0;color:#81929d;font-size:10px}.auth-divider:before,.auth-divider:after{content:"";height:1px;background:#dbe5eb;flex:1}.bootstrap-access{border:1px solid #dbe5eb;border-radius:9px;padding:9px;background:#fafcfd}.bootstrap-access summary{cursor:pointer;font-size:10px;font-weight:900;color:#516d7e;margin-bottom:8px}.field-caption{font-size:9px;font-weight:950;letter-spacing:.6px;color:#6d8290;margin:0}.full{width:100%}
@media(max-width:1050px){.users-admin-layout{grid-template-columns:1fr}.user-admin-row{grid-template-columns:minmax(220px,1fr) 130px 130px}.user-admin-actions{grid-column:1/-1}.crew-duty-row{min-width:900px}.crew-shell .trip-table-wrap{overflow:auto}}
@media(max-width:700px){.user-admin-row{grid-template-columns:1fr 1fr}.user-admin-person{grid-column:1/-1}.user-admin-actions{grid-column:1/-1}.crew-rule-grid{grid-template-columns:1fr 1fr}}
@media(max-width:460px){.user-admin-row,.crew-rule-grid{grid-template-columns:1fr}}
.first-admin-setup{display:grid;gap:10px;border:2px solid #b9d7e5;border-radius:12px;padding:13px;background:#f4fbff}.first-admin-setup .section-head{margin:0}.first-admin-copy{margin:0;color:#5a7484;font-size:11px;line-height:1.45}.field-help{display:block;color:#708591;font-size:9.5px;line-height:1.4;margin-top:-3px}.first-admin-setup[hidden],#namedLoginSection[hidden],#emergencyDivider[hidden],#emergencyAdminAccess[hidden]{display:none!important}

/* V0.6.2 - first Admin bootstrap must report status inside the modal. */
.first-admin-inline{margin-top:10px;display:grid;gap:3px}
.first-admin-inline.error{border-color:#efb7b7;background:#fff1f1;color:#7f1d1d}
.first-admin-inline.success{border-color:#9ed8b3;background:#eefbf3;color:#14532d}

/* V0.7 Cost / Demand */
.cost-demand-shell{display:grid;gap:12px;min-width:0}.cost-input-panel,.cost-generate-panel{min-width:0}.cost-rule-grid{grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}.demand-route-list{display:grid;gap:12px}.demand-route-card{border:1px solid #cbdbe5;border-radius:12px;padding:12px;background:#fff;min-width:0}.demand-route-head{display:grid;grid-template-columns:minmax(0,1fr) minmax(180px,260px);gap:12px;align-items:end}.demand-route-head small,.demand-band-row small{display:block;color:#637887;margin-top:3px}.demand-route-head label,.demand-band-row{display:grid;gap:5px}.demand-route-head label span{font-size:11px;font-weight:800;color:#5e7281}.demand-route-head input,.demand-band-row input{min-width:0;width:100%}.demand-band-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:8px;margin-top:10px}.demand-band-row{border:1px solid #dbe7ee;border-radius:10px;padding:9px;background:#f9fcfd;grid-template-columns:minmax(0,1fr) 100px;align-items:center}.cost-kpis{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.cost-breakdown-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:8px;margin:12px 0}.cost-breakdown-grid article{border:1px solid #dbe7ee;border-radius:10px;padding:10px;background:#f9fcfd;display:grid;gap:4px}.cost-breakdown-grid article span{font-size:10px;font-weight:800;color:#607685}.cost-breakdown-grid article b{font-size:17px}.cost-route-row{grid-template-columns:1.35fr .55fr .65fr .7fr .65fr .85fr .8fr;min-width:900px}.cost-band-row{grid-template-columns:1.4fr .6fr .55fr .7fr .7fr .6fr .75fr .85fr;min-width:980px}.capacity-ok{color:#0b7a4b}.capacity-tight{color:#b27300}.capacity-over-capacity{color:#b62323}.capacity-no-data{color:#71808b}.cost-generate-panel{display:flex;justify-content:flex-end}.cost-step-button{background:#d79a00;color:#102f42;border-color:#c88900}.cost-step-button:hover{filter:brightness(.97)}
@media(max-width:900px){.demand-route-head{grid-template-columns:1fr}.demand-band-grid{grid-template-columns:1fr}.cost-generate-panel{justify-content:stretch}.cost-generate-panel .button{width:100%}}

/* V0.8 Whole-plan Validation + installable full-screen app */
.validate-step-button{background:#106f83!important;border-color:#0b6071!important;color:#fff!important;font-weight:950!important}
.validation-shell{display:grid;gap:12px;min-width:0}
.validation-summary-kpis{display:grid;grid-template-columns:repeat(4,minmax(150px,1fr));gap:10px}
.validation-summary-kpis article{border:1px solid #d6e3e9;border-radius:12px;background:#fff;padding:12px;display:grid;gap:4px;min-width:0}
.validation-summary-kpis span{font-size:9px;font-weight:950;letter-spacing:.7px;color:#6a8190}
.validation-summary-kpis b{font-size:21px;line-height:1.1;color:#173f59;overflow-wrap:anywhere}
.validation-summary-kpis small{font-size:10px;color:#6f828e}
.validation-intro{margin:0 0 12px;color:#5d7585;line-height:1.45}
.publication-grid{display:grid;grid-template-columns:repeat(4,minmax(150px,1fr));gap:9px}
.publication-grid label{display:grid;gap:5px;min-width:0}.publication-grid label>span{font-size:9px;font-weight:950;letter-spacing:.45px;color:#667d8c}
.publication-grid input{width:100%;min-width:0;border:1px solid #cbd9e1;border-radius:8px;background:#fff;color:#17384e;padding:8px 9px;min-height:36px}
.feed-grid{margin-top:12px}
.service-day-checks{display:flex;gap:7px;flex-wrap:wrap;margin-top:12px}
.service-day-checks label{display:inline-flex;align-items:center;gap:6px;padding:7px 9px;border:1px solid #d6e2e8;border-radius:9px;background:#fafcfd;font-size:9px;font-weight:900;color:#496577}
.service-day-checks input{margin:0}
.validation-confirm{display:flex;align-items:flex-start;gap:9px;margin-top:13px;padding:10px 11px;border:1px solid #e3bf64;border-radius:10px;background:#fff9e9;color:#5f4b17;font-size:10.5px;line-height:1.4}
.validation-confirm input{margin-top:2px;flex:0 0 auto}
.gtfs-file-grid{display:grid;grid-template-columns:repeat(3,minmax(190px,1fr));gap:8px;margin:12px 0}
.gtfs-file-row{display:flex;align-items:center;justify-content:space-between;gap:10px;border:1px solid #d8e5eb;border-radius:10px;padding:9px 10px;background:#fbfdfe;min-width:0}
.gtfs-file-row span{min-width:0}.gtfs-file-row b,.gtfs-file-row small{display:block}.gtfs-file-row b{font-size:11px;color:#173f59}.gtfs-file-row small{font-size:9px;color:#6f8390;margin-top:3px}.gtfs-file-row strong{font-size:9px;letter-spacing:.4px;white-space:nowrap}
.gtfs-file-row.ready{border-color:#a8d4bd;background:#f3fbf6}.gtfs-file-row.ready strong{color:#167044}.gtfs-file-row.blocked{border-color:#efb9b9;background:#fff5f5}.gtfs-file-row.blocked strong{color:#ad2727}.gtfs-file-row.optional,.gtfs-file-row.recommended,.gtfs-file-row.review,.gtfs-file-row.not-used{background:#fafcfd}.gtfs-file-row.recommended strong,.gtfs-file-row.review strong{color:#9a6a00}.gtfs-file-row.optional strong,.gtfs-file-row.not-used strong{color:#697f8c}
.validation-groups{display:grid;gap:10px;margin-top:10px}.validation-group{border:1px solid #d9e5eb;border-radius:11px;background:#fff;overflow:hidden}.validation-group h4{margin:0;padding:9px 11px;background:#f5f9fb;border-bottom:1px solid #d9e5eb;font-size:10px;letter-spacing:.55px;color:#4e6a7b}
.validation-rule{display:grid;grid-template-columns:26px minmax(0,1fr) auto;gap:9px;align-items:center;padding:9px 11px;border-top:1px solid #eef3f6}.validation-group .validation-rule:first-of-type{border-top:0}.validation-rule-icon{display:grid;place-items:center;width:22px;height:22px;border-radius:50%;font-size:11px;font-weight:950;background:#edf3f6;color:#547082}.validation-rule b,.validation-rule small{display:block}.validation-rule b{font-size:11px;color:#1c435b}.validation-rule small{font-size:9.5px;color:#687e8c;line-height:1.35;margin-top:2px}.validation-fix{font-size:8.5px;font-weight:950;letter-spacing:.35px;color:#607987;white-space:nowrap}.validation-rule.pass .validation-rule-icon{background:#e8f7ee;color:#147342}.validation-rule.warn .validation-rule-icon{background:#fff4d9;color:#996900}.validation-rule.fail .validation-rule-icon{background:#ffebeb;color:#ae2020}
@media(max-width:1050px){.publication-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.validation-summary-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.gtfs-file-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:620px){.publication-grid,.validation-summary-kpis,.gtfs-file-grid{grid-template-columns:1fr}.validation-rule{grid-template-columns:26px minmax(0,1fr)}.validation-fix{grid-column:2}.topbar:fullscreen{overflow:auto}}

/* V0.8 GTFS publication/calendar register */
.calendar-register{display:grid;gap:6px;margin:10px 0 14px;border:1px solid #d7e3e9;border-radius:10px;background:#f8fbfc;padding:10px;max-height:260px;overflow:auto}
.calendar-register-head,.calendar-register-row{display:grid;grid-template-columns:minmax(160px,1.2fr) minmax(190px,1.3fr) minmax(170px,.9fr);gap:10px;align-items:center}
.calendar-register-head{padding:0 6px 6px;border-bottom:1px solid #dce7ec;font-size:10px;letter-spacing:.35px;color:#5d7483}
.calendar-register-row{padding:7px 6px;border-bottom:1px solid #e8eff2;font-size:12px}
.calendar-register-row:last-child{border-bottom:0}.calendar-register-row strong{color:#17384e;overflow-wrap:anywhere}.calendar-register-row span{color:#31566d}.calendar-register-row small,.calendar-more{color:#69808e}
@media(max-width:760px){.calendar-register-head,.calendar-register-row{grid-template-columns:1fr}.calendar-register-head span{display:none}}

/* V0.9 Governed GTFS Schedule publication */
.publication-shell{display:grid;gap:12px;min-width:0}
.publication-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}
.publication-step-button{background:#167a63!important;border-color:#116652!important;color:#fff!important;font-weight:950!important}
.publication-live-pill{border-color:#7bc8ab;color:#dff8ee;background:rgba(24,122,99,.18)}
.publication-kpis{grid-template-columns:repeat(4,minmax(150px,1fr))}
.publication-proof-grid{display:grid;grid-template-columns:repeat(4,minmax(150px,1fr));gap:8px}
.publication-proof-grid>div{display:grid;gap:4px;border:1px solid #d8e5eb;border-radius:10px;padding:10px;background:#fbfdfe;min-width:0}
.publication-proof-grid>div.wide{grid-column:1/-1}.publication-proof-grid span{font-size:9px;font-weight:950;letter-spacing:.55px;color:#657c8b}.publication-proof-grid b{font-size:12px;color:#173f59;overflow-wrap:anywhere}.publication-proof-grid code{font-size:10px;white-space:normal;overflow-wrap:anywhere;user-select:all;color:#254c63}
.publication-history{display:grid;gap:7px}.publication-history article{display:grid;grid-template-columns:minmax(220px,1.3fr) minmax(160px,.8fr) auto;gap:10px;align-items:center;border:1px solid #d9e5eb;border-radius:10px;padding:9px 10px;background:#fbfdfe;min-width:0}.publication-history span{min-width:0}.publication-history b,.publication-history strong,.publication-history small{display:block}.publication-history b{font-size:11px;color:#173f59}.publication-history strong{font-size:11px;color:#31566d}.publication-history small{font-size:9px;color:#6c818e;margin-top:2px;overflow-wrap:anywhere}.publication-history .compact{height:30px;padding:0 10px;font-size:10px}
.downstream-register p{margin:0;color:#607787;font-size:11px;line-height:1.5}
.stages span.ready{background:#fff6d7;border-color:#dfb64d;color:#795600}
@media(max-width:850px){.publication-kpis,.publication-proof-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.publication-history article{grid-template-columns:1fr auto}.publication-history article>span:nth-child(2){grid-column:1}.publication-history article>button{grid-column:2;grid-row:1/3}.publication-actions{justify-content:stretch}.publication-actions .button{flex:1 1 180px}}
@media(max-width:560px){.publication-kpis,.publication-proof-grid{grid-template-columns:1fr}.publication-proof-grid>div.wide{grid-column:auto}.publication-history article{grid-template-columns:1fr}.publication-history article>span:nth-child(2),.publication-history article>button{grid-column:auto;grid-row:auto}.publication-history article>button{width:100%}}

/* V0.9.1 Guided validation corrections */
.validation-fix-queue{border-left:5px solid #d35b28;background:linear-gradient(90deg,#fff8f3,#fff)}
.validation-fix-queue.complete{border-left-color:#168a50;background:linear-gradient(90deg,#f3fff8,#fff)}
.validation-fix-list{display:grid;gap:8px;margin-top:10px}
.validation-fix-card{display:grid;grid-template-columns:30px minmax(0,1fr) auto;gap:10px;align-items:center;border:1px solid #e4e9ed;border-radius:10px;padding:10px;background:#fff;min-width:0}
.validation-fix-card.fail{border-color:#efb3a0;background:#fff8f5}
.validation-fix-card.warn{border-color:#ead59b;background:#fffdf5}
.validation-fix-number{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;font-size:11px;font-weight:950;background:#edf3f6;color:#38566a}
.validation-fix-card.fail .validation-fix-number{background:#ffe6de;color:#9d2d12}
.validation-fix-card.warn .validation-fix-number{background:#fff0c7;color:#8a5b00}
.validation-fix-card>div{min-width:0;display:grid;gap:3px}
.validation-fix-card>div>b{font-size:11px;color:#173f59}
.validation-fix-card small{display:block;font-size:9.5px;line-height:1.4;color:#627887}
.validation-problem strong{color:#9d2d12}.validation-fix-card.warn .validation-problem strong{color:#8a5b00}
.validation-instruction strong{color:#173f59}
.validation-fix-button{border:1px solid #bfd0da;border-radius:7px;background:#fff;color:#16506e;padding:7px 9px;font-size:8.5px;font-weight:950;letter-spacing:.35px;white-space:nowrap;cursor:pointer}
.validation-fix-button:hover{background:#edf7fb;border-color:#7eb3ca}
.validation-inline-help{margin-top:5px!important;padding:6px 8px;border-left:3px solid #d6a321;background:#fff9e9;color:#5b4a1b!important;border-radius:4px}
.validation-inline-help strong{color:#4d3e12}
.validation-fix.ready-label{color:#168a50}
.validation-focus-pulse{animation:validationFocusPulse .6s ease-in-out 0s 3;border-color:#e0a400!important;box-shadow:0 0 0 3px rgba(224,164,0,.14)}
@keyframes validationFocusPulse{0%,100%{box-shadow:0 0 0 0 rgba(224,164,0,0)}50%{box-shadow:0 0 0 5px rgba(224,164,0,.18)}}
@media(max-width:760px){.validation-fix-card{grid-template-columns:28px minmax(0,1fr)}.validation-fix-card>button{grid-column:2;justify-self:start}.validation-fix-button{white-space:normal;text-align:left}.validation-fix-queue .section-head{align-items:flex-start;gap:8px}}

/* V0.9.2 field-level validation: incorrect publication inputs are unmistakably red */
.validation-field-legend{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 10px;align-items:center;border:1px solid #d8e4ea;border-left:5px solid #6d8796;border-radius:10px;background:#f8fbfc;padding:9px 11px;color:#4f6979}
.validation-field-legend>b{font-size:9px;letter-spacing:.55px;color:#173f59}.validation-field-legend>span{font-size:10.5px;font-weight:850}.validation-field-legend>small{grid-column:1/-1;font-size:9px;color:#687e8c}.validation-field-legend>small strong:first-child{color:#aa1e1e}.validation-field-legend>small strong:last-child{color:#8a6500}
.validation-field-legend.has-errors{border-color:#e4a0a0;border-left-color:#c82424;background:#fff5f5;color:#811b1b}.validation-field-legend.has-warnings{border-color:#e5ce8b;border-left-color:#c68a00;background:#fffbef;color:#725100}
.publication-grid label.validation-field-error>span{color:#a71919}.publication-grid label.validation-field-error input{border:2px solid #d62d2d!important;background:#fff0f0!important;color:#651515!important;box-shadow:0 0 0 3px rgba(214,45,45,.10)}
.publication-grid label.validation-field-error input:focus{outline:none;border-color:#b71313!important;box-shadow:0 0 0 4px rgba(214,45,45,.18)}
.publication-grid label.validation-field-warning>span{color:#896000}.publication-grid label.validation-field-warning input{border:2px solid #d49b12!important;background:#fff9e9!important;box-shadow:0 0 0 3px rgba(212,155,18,.08)}
.validation-field-message{display:block;margin-top:1px;font-size:8.5px!important;line-height:1.3;font-weight:850;letter-spacing:0!important}.validation-field-error>.validation-field-message{color:#ad1e1e!important}.validation-field-warning>.validation-field-message{color:#8a6200!important}
.service-day-checks.validation-field-error{border:2px solid #d62d2d;border-radius:10px;background:#fff0f0;padding:8px;box-shadow:0 0 0 3px rgba(214,45,45,.08)}.service-day-checks.validation-field-warning{border:2px solid #d49b12;border-radius:10px;background:#fff9e9;padding:8px}.service-day-checks>.validation-field-message{grid-column:1/-1;width:100%}
.validation-confirm.validation-field-error{border:2px solid #d62d2d!important;background:#fff0f0!important;color:#7c1717!important;box-shadow:0 0 0 3px rgba(214,45,45,.08)}.validation-confirm.validation-field-warning{border:2px solid #d49b12!important;background:#fff9e9!important}.validation-confirm>.validation-field-message{width:100%;margin-left:3px}
@media(max-width:620px){.validation-field-legend{grid-template-columns:1fr}.validation-field-legend>small{grid-column:auto}}

/* V0.9.4 explicit multi-route workspace browser */
.route-browser-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin:0 0 8px}
.route-browser-head>span{display:grid;gap:2px;min-width:0}
.route-browser-head b{font-size:10px;font-weight:950;letter-spacing:.25px;color:var(--navy)}
.route-browser-head small{font-size:9px;line-height:1.3;color:var(--muted)}
.route-browser-search{display:block;width:100%;height:34px;margin:0 0 8px;padding:0 10px;border:1px solid #c7d7e1;border-radius:8px;background:#fff;color:var(--ink);font:inherit;font-size:11px;outline:none}
.route-browser-search:focus{border-color:#2b87ae;box-shadow:0 0 0 3px rgba(43,135,174,.12)}
@media(max-width:760px){.route-browser-head{align-items:stretch;flex-direction:column}.route-browser-head .button{width:100%}}

/* V0.9.4 unified branding and developer-rights footer */
.app-footer{max-width:1680px;margin:10px auto 22px;padding:14px 18px;display:grid;grid-template-columns:minmax(230px,.55fr) minmax(0,1.45fr);gap:18px;align-items:start;border:1px solid var(--line);border-top:3px solid var(--blue);border-radius:12px;background:#fff;color:var(--muted)}.app-footer-brand{display:flex;align-items:center;gap:11px}.app-footer-brand img{width:44px;height:44px;border-radius:10px;display:block}.app-footer-brand div{display:grid;gap:2px}.app-footer-brand b{font-size:12px;color:var(--navy)}.app-footer-brand span{font-size:11px}.app-footer-rights{display:grid;gap:4px;font-size:10.5px;line-height:1.45}.app-footer-rights>b{color:var(--navy)}.app-footer-rights details{margin-top:4px;border-top:1px solid #e2eaef;padding-top:6px}.app-footer-rights summary{cursor:pointer;color:var(--blue);font-size:10px;font-weight:900;letter-spacing:.35px}.legal-copy{padding:5px 0 0;max-width:1100px}.legal-copy p{margin:7px 0}.legal-copy b{color:var(--navy)}@media(max-width:900px){.app-footer{grid-template-columns:1fr}}

/* V0.10 GTFS Release QA */
.qa-flow-panel{border-left:5px solid #157aa0;background:linear-gradient(90deg,#f3fbff,#fff)}
.qa-flow{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;margin-top:10px}
.qa-flow article{display:grid;grid-template-columns:30px minmax(0,1fr) auto;gap:9px;align-items:center;border:1px solid #d7e5ec;border-radius:10px;background:#fff;padding:10px;min-width:0}
.qa-flow article.done{border-color:#9fd4bf;background:#f6fffa}.qa-flow article>span:first-child{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;background:#e7f3f8;color:#155779;font-size:11px;font-weight:950}.qa-flow article.done>span:first-child{background:#dff5e8;color:#147044}.qa-flow article div{min-width:0}.qa-flow b,.qa-flow small{display:block}.qa-flow b{font-size:11px;color:#173f59}.qa-flow small{margin-top:3px;font-size:9px;line-height:1.4;color:#667d8b}.qa-step-state{font-size:9px;font-weight:950;color:#167a63;white-space:nowrap}
.qa-upload-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;margin-top:10px}.qa-upload-grid label,.qa-note{display:grid;gap:5px;min-width:0}.qa-upload-grid label>span,.qa-note>span{font-size:9px;font-weight:950;letter-spacing:.4px;color:#385a6e}.qa-upload-grid input[type=file]{width:100%;min-width:0;border:1px solid #c8d8e1;border-radius:8px;background:#fff;padding:8px;font-size:10px;color:#34566b}.qa-exact-confirm,.qa-warning-ack{display:flex;align-items:flex-start;gap:8px;margin-top:10px;border:1px solid #e1cb88;border-radius:9px;background:#fffaf0;padding:10px;font-size:10px;line-height:1.45;color:#604c16}.qa-exact-confirm input,.qa-warning-ack input{margin-top:2px}.qa-exact-confirm code{overflow-wrap:anywhere;font-size:9px}.qa-upload-actions,.qa-evidence-links,.qa-decision-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px}
.qa-result-kpis{display:grid;grid-template-columns:repeat(4,minmax(120px,1fr));gap:8px;margin:10px 0}.qa-result-kpis article{display:grid;gap:3px;border:1px solid #d9e5eb;border-radius:9px;background:#fbfdfe;padding:10px}.qa-result-kpis article.error{border-color:#efb3b3;background:#fff6f6}.qa-result-kpis article.warning{border-color:#ead59b;background:#fffdf5}.qa-result-kpis span{font-size:8.5px;font-weight:950;letter-spacing:.5px;color:#647c8b}.qa-result-kpis b{font-size:22px;color:#173f59}.qa-result-kpis article.error b{color:#ad2424}.qa-result-kpis article.warning b{color:#8a6200}
.qa-notice-list{display:grid;gap:8px}.qa-notice{display:grid;grid-template-columns:30px minmax(0,1fr) auto;gap:10px;align-items:start;border:1px solid #dce6eb;border-radius:10px;background:#fff;padding:10px;min-width:0}.qa-notice.error{border-color:#ecaaa5;background:#fff7f6}.qa-notice.warning{border-color:#e5cf8b;background:#fffdf4}.qa-notice.info{border-color:#bdd9e8;background:#f7fcff}.qa-notice-number{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;background:#edf3f6;color:#38566a;font-size:10px;font-weight:950}.qa-notice.error .qa-notice-number{background:#ffe5e2;color:#a31f19}.qa-notice.warning .qa-notice-number{background:#fff0c5;color:#855c00}.qa-notice-title{display:flex;justify-content:space-between;gap:8px;align-items:center}.qa-notice-title b{font-size:11px;color:#173f59;overflow-wrap:anywhere}.qa-notice-title span,.qa-info-label{font-size:8.5px;font-weight:950;letter-spacing:.35px;color:#627a89}.qa-notice small{display:block;margin-top:4px;font-size:9.5px;line-height:1.45;color:#5c7483}.qa-notice small strong{color:#173f59}.qa-notice details{margin-top:6px}.qa-notice summary{cursor:pointer;font-size:8.5px;font-weight:900;color:#1f698b}.qa-notice pre{max-height:190px;overflow:auto;border:1px solid #dce6eb;border-radius:7px;background:#f7fafc;padding:8px;font-size:8px;white-space:pre-wrap;overflow-wrap:anywhere}
.qa-visual-panel select{height:32px;max-width:320px;border:1px solid #c7d8e1;border-radius:7px;background:#fff;padding:0 8px;font-size:10px;color:#254b62}.qa-visual-grid{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(320px,.75fr);gap:10px;align-items:stretch}.qa-visual-map{height:430px;border:1px solid #cfdde5;border-radius:10px;overflow:hidden;background:#eaf0f2}.qa-compare-table,.qa-route-table{display:grid;border:1px solid #d9e5eb;border-radius:10px;overflow:hidden;background:#fff}.qa-compare-row{display:grid;grid-template-columns:minmax(120px,1.3fr) repeat(3,minmax(70px,.7fr));gap:8px;align-items:center;padding:9px 10px;border-bottom:1px solid #e7eef2;font-size:10px}.qa-compare-row:last-child{border-bottom:0}.qa-compare-row.head,.qa-route-row.head{background:#eef5f8;color:#557080;font-size:8px;font-weight:950;letter-spacing:.4px}.qa-compare-row b{color:#173f59}.qa-compare-row.match>span:last-child{color:#168a50;font-weight:950}.qa-compare-row.mismatch{background:#fff7f4}.qa-compare-row.mismatch>span:last-child{color:#b0371d;font-weight:950}.qa-route-table{margin-top:10px}.qa-route-row{display:grid;grid-template-columns:minmax(180px,1.4fr) repeat(3,minmax(70px,.6fr)) auto;gap:8px;align-items:center;padding:8px 10px;border-bottom:1px solid #e7eef2;font-size:10px}.qa-route-row:last-child{border-bottom:0}.qa-route-row b,.qa-route-row small{display:block}.qa-route-row b{color:#173f59}.qa-route-row small{font-size:8.5px;color:#6b818f;margin-top:2px}
.qa-decision{border-left:5px solid #708797}.qa-decision.approved{border-left-color:#168a50;background:linear-gradient(90deg,#f4fff9,#fff)}.qa-decision.rejected{border-left-color:#c4372a;background:linear-gradient(90deg,#fff6f5,#fff)}.qa-note textarea{width:100%;resize:vertical;border:1px solid #c7d8e1;border-radius:8px;padding:9px;font:inherit;font-size:10.5px;line-height:1.45}.qa-decision-proof{display:grid;grid-template-columns:repeat(4,minmax(140px,1fr));gap:8px}.qa-decision-proof>div{display:grid;gap:3px;border:1px solid #d9e5eb;border-radius:8px;background:#fff;padding:9px}.qa-decision-proof span{font-size:8px;font-weight:950;letter-spacing:.4px;color:#6a808e}.qa-decision-proof b{font-size:10.5px;color:#173f59;overflow-wrap:anywhere}
.publication-history{overflow:hidden}.publication-history article{grid-template-columns:minmax(180px,1.1fr) minmax(130px,.65fr) minmax(170px,.8fr) auto}.publication-history-qa b{color:#167a63!important}
@media(max-width:1050px){.qa-flow{grid-template-columns:1fr}.qa-visual-grid{grid-template-columns:1fr}.qa-visual-map{height:360px}.qa-decision-proof{grid-template-columns:repeat(2,minmax(0,1fr))}.publication-history article{grid-template-columns:1fr 1fr auto}.publication-history-qa{grid-column:1/3}}
@media(max-width:760px){.qa-upload-grid,.qa-result-kpis{grid-template-columns:1fr}.qa-notice{grid-template-columns:28px minmax(0,1fr)}.qa-notice>button,.qa-info-label{grid-column:2;justify-self:start}.qa-compare-row,.qa-route-row{grid-template-columns:1fr auto}.qa-compare-row.head span:nth-child(n+2),.qa-route-row.head span:nth-child(n+2){display:none}.qa-compare-row span:nth-child(2)::before{content:'Plan: ';font-weight:800}.qa-compare-row span:nth-child(3)::before{content:'GTFS: ';font-weight:800}.qa-route-row span:nth-child(2)::before{content:'Trips: ';font-weight:800}.qa-route-row span:nth-child(3)::before{content:'Stops: ';font-weight:800}.qa-route-row span:nth-child(4)::before{content:'Shapes: ';font-weight:800}.qa-decision-proof{grid-template-columns:1fr}.publication-history article{grid-template-columns:1fr}.publication-history-qa{grid-column:auto}.publication-history article>button{width:100%}}

/* V0.10.1 Planner AI Copilot */
.ai-top-button{background:linear-gradient(135deg,#0f8396,#165d79)!important;border-color:#0f6f82!important;color:#fff!important;font-weight:950!important;box-shadow:0 0 0 1px rgba(255,255,255,.08) inset}
.ai-top-button::before{content:'AI';display:inline-grid;place-items:center;width:20px;height:20px;margin-right:6px;border-radius:6px;background:#13d7df;color:#063746;font-size:9px;font-weight:1000;vertical-align:middle}
.ai-modal{width:min(980px,calc(100vw - 28px));max-width:980px}.ai-modal-body{display:grid;gap:12px}.ai-status-strip,.ai-safety-note{display:grid;gap:4px;border-radius:11px;padding:11px 13px}.ai-status-strip{border:1px solid #bdd7e2;background:#f3f9fc}.ai-status-strip b{color:#173f59;font-size:11px;letter-spacing:.45px}.ai-status-strip span{font-size:10px;color:#607987}.ai-status-strip.ready{border-color:#9fd6b9;background:#eefaf3}.ai-status-strip.ready b{color:#0d6d42}.ai-status-strip.blocked{border-color:#efb8b8;background:#fff2f2}.ai-status-strip.blocked b{color:#aa2424}.ai-safety-note{grid-template-columns:auto 1fr;align-items:center;border:1px solid #e5c56f;background:#fff9e8;color:#5f4b17}.ai-safety-note b{font-size:10px;letter-spacing:.5px}.ai-safety-note span{font-size:10px;line-height:1.4}.ai-quick-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.ai-quick{min-height:38px;font-size:9px!important}.ai-controls{margin:0}.ai-answer-shell{border:1px solid #a7d2df;border-radius:12px;background:#f8fcfd;overflow:hidden}.ai-answer-head{display:flex;justify-content:space-between;gap:12px;padding:10px 12px;background:#eaf5f8;border-bottom:1px solid #cce1e8}.ai-answer-head b{font-size:10px;color:#14425b;letter-spacing:.45px}.ai-answer-head span{font-size:9px;color:#647e8c}.ai-answer-text{white-space:pre-wrap;padding:14px;font-size:12px;line-height:1.55;color:#17384e;max-height:46vh;overflow:auto}.ai-answer-foot{padding:9px 12px;border-top:1px solid #dbe8ed;background:#fff9e9;color:#69531b;font-size:9.5px;line-height:1.4}.ai-send{background:#0f7f91!important;border-color:#0b6878!important}.modal-footer-actions{display:flex;gap:8px;align-items:center}.ai-modal footer>span{font-size:9px;color:#718692;max-width:55%}
@media(max-width:820px){.ai-quick-grid{grid-template-columns:1fr 1fr}.ai-modal footer{align-items:flex-start;gap:10px}.ai-modal footer>span{max-width:none}.modal-footer-actions{width:100%;justify-content:flex-end}}
@media(max-width:520px){.ai-quick-grid{grid-template-columns:1fr}.ai-safety-note{grid-template-columns:1fr}.ai-answer-text{max-height:38vh}}


/* V0.10.1 AI/PWA hotfix: older installed Edge/Chrome PWAs may temporarily retain
   the previous window-controls-overlay display mode. Keep the application header
   below the OS overlay until the refreshed manifest takes effect. */
@media (display-mode: window-controls-overlay){
  body{padding-top:env(titlebar-area-height,36px)}
}
