:root{--c900:#122646;--c800:#162f57;--c700:#1b3a6b;--c600:#224988;--c500:#2959a4;--c100:#e5e9f0;--c50:#f4f6f8;--a700:#094a55;--a600:#0c6775;--a500:#10889a;--a-dk:#64c9d8;--a100:#dbedf0;--a50:#eff7f8;--alert:#b3251c;--alert-tint:#fceeec;--alert-border:#f0cdc9;--warn:#8a5300;--warn-tint:#fdf4e3;--warn-border:#efddbb;--go:#0d6b45;--go-tint:#e9f5ef;--go-border:#c2e0d2;--info:#4c5670;--info-tint:#f2f3f5;--info-border:#d8dadf;--alert-strong:#8f1d16;--alert-dk:#ff6b5e;--warn-dk:#f0a93c;--go-dk:#4fcf95;--info-dk:#828daa;--s900:#141824;--s700:#3a4356;--s600:#4c5670;--s500:#616b80;--s400:#838da1;--s300:#abb3c2;--s200:#d5dae4;--s100:#e8ecf3;--s50:#f4f6fa;--m-land:#f2f0e9;--m-park:#d8e4c6;--m-water:#a9c6de;--m-urban:#eae7de;--m-road:#fff;--m-case:#d5dae4;--font:"Outfit",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;--display-size:2rem;--display-lh:1.15;--display-wt:680;--title1-size:1.625rem;--title1-lh:1.2;--title1-wt:680;--title2-size:1.3125rem;--title2-lh:1.25;--title2-wt:660;--title3-size:1.125rem;--title3-lh:1.35;--title3-wt:640;--bodylg-size:1.0625rem;--bodylg-lh:1.5;--bodylg-wt:400;--body-size:1rem;--body-lh:1.5;--body-wt:400;--bodysm-size:0.875rem;--bodysm-lh:1.45;--bodysm-wt:400;--caption-size:0.8125rem;--caption-lh:1.4;--caption-wt:560;--label-size:0.75rem;--label-lh:1.3;--label-wt:680;--label-track:0.06em}.t-display{font-size:var(--display-size);line-height:var(--display-lh);font-weight:var(--display-wt)}.t-title1{font-size:var(--title1-size);line-height:var(--title1-lh);font-weight:var(--title1-wt)}.t-title2{font-size:var(--title2-size);line-height:var(--title2-lh);font-weight:var(--title2-wt)}.t-title3{font-size:var(--title3-size);line-height:var(--title3-lh);font-weight:var(--title3-wt)}.t-bodylg{font-size:var(--bodylg-size);line-height:var(--bodylg-lh);font-weight:var(--bodylg-wt)}.t-body{font-size:var(--body-size);line-height:var(--body-lh);font-weight:var(--body-wt)}.t-bodysm{font-size:var(--bodysm-size);line-height:var(--bodysm-lh);font-weight:var(--bodysm-wt)}.t-caption{font-size:var(--caption-size);line-height:var(--caption-lh);font-weight:var(--caption-wt);color:var(--s500)}.t-label{line-height:var(--label-lh);color:var(--s500)}.chip,.t-label{font-size:var(--label-size);font-weight:var(--label-wt);letter-spacing:var(--label-track);text-transform:uppercase}.chip{display:inline-flex;align-items:center;gap:.375rem;padding:.25rem .625rem;border-radius:999px;border:1px solid}.chip-alert{color:var(--alert);background:var(--alert-tint);border-color:var(--alert-border)}.chip-warn{color:var(--warn);background:var(--warn-tint);border-color:var(--warn-border)}.chip-go{color:var(--go);background:var(--go-tint);border-color:var(--go-border)}.chip-info{color:var(--info);background:var(--info-tint);border-color:var(--info-border)}*{box-sizing:border-box}html{font-size:100%}body{margin:0;background:var(--s50);color:var(--s900);font-family:var(--font);font-size:var(--body-size);line-height:var(--body-lh);-webkit-font-smoothing:antialiased}.topbar{background:var(--c700);color:#fff;padding:.875rem 1.5rem;display:flex;align-items:center;gap:.75rem}.topbar .mark{color:var(--a-dk);display:inline-flex}.topbar .name{font-size:1.125rem;font-weight:680;letter-spacing:-.025em}.topbar .who{margin-left:auto;font-size:var(--bodysm-size);color:#c3cde2}.topbar form{margin:0}.topbar button{font-family:inherit;font-size:var(--bodysm-size);font-weight:640;background:transparent;color:var(--a-dk);border:1px solid var(--c500);border-radius:.5rem;padding:.375rem .75rem;cursor:pointer}.wrap{max-width:68rem;margin:0 auto;padding:1.75rem 1.5rem 4rem}.board{display:grid;grid-template-columns:minmax(20rem,24rem) 1fr;height:calc(100vh - 3.5rem)}@media (max-width:60rem){.board{grid-template-columns:1fr;height:auto}.board-map{height:60vh}}.board-list{border-right:1px solid var(--s200);overflow-y:auto;flex-direction:column}.board-head,.board-list{background:#fff;display:flex}.board-head{position:-webkit-sticky;position:sticky;top:0;z-index:1;border-bottom:1px solid var(--s100);padding:1rem 1.25rem .75rem;align-items:baseline;gap:.75rem}.board-head h2{margin:0;font-size:var(--title2-size);font-weight:var(--title2-wt)}.live{margin-left:auto;font-size:var(--label-size);font-weight:var(--label-wt);letter-spacing:var(--label-track);text-transform:uppercase}.live.on{color:var(--go)}.live.off{color:var(--s500)}.live.on:before{content:"";display:inline-block;width:.5rem;height:.5rem;border-radius:50%;background:var(--go);margin-right:.4rem;vertical-align:.05em}.board-count{margin:0;padding:.75rem 1.25rem .25rem;font-size:var(--bodysm-size);color:var(--s500)}.needs-count{color:var(--alert);font-weight:660}.veh-list{list-style:none;margin:0;padding:.5rem .75rem 1.5rem}.veh{display:block;width:100%;text-align:left;cursor:pointer;font-family:inherit;background:#fff;border:1px solid var(--s200);border-radius:.75rem;padding:.75rem .875rem;margin-bottom:.5rem}.veh:hover{border-color:var(--s300)}.veh.selected{border-color:var(--a600);box-shadow:0 0 0 1px var(--a600)}.veh[data-tone=alert]{box-shadow:inset 3px 0 0 var(--alert);background:var(--alert-tint)}.veh[data-tone=warn]{box-shadow:inset 3px 0 0 var(--warn)}.veh[data-tone=go]{box-shadow:inset 3px 0 0 var(--go)}.veh[data-tone=info]{box-shadow:inset 3px 0 0 var(--s300)}.veh.selected[data-tone=alert]{box-shadow:inset 3px 0 0 var(--alert),0 0 0 1px var(--a600)}.veh-top{display:flex;align-items:center;gap:.5rem;margin-bottom:.25rem}.veh-id{font-size:var(--title3-size);font-weight:var(--title3-wt)}.veh-top .chip{margin-left:auto}.veh-detail{display:block;font-size:var(--bodysm-size);color:var(--s700);margin-bottom:.35rem}.veh-meta{display:block;font-size:var(--caption-size);color:var(--s500)}.board-map{position:relative}.map{position:absolute;inset:0}.veh-marker{width:2rem;height:2rem;border-radius:50%;border:2px solid #fff;cursor:pointer;font-family:var(--font);font-size:.8125rem;font-weight:680;color:#fff;line-height:1;box-shadow:0 1px 4px rgba(20,24,36,.4);display:flex;align-items:center;justify-content:center}.veh-marker[data-selected=true]{outline:3px solid var(--a600);outline-offset:2px;transform:scale(1.15)}.panel{background:#fff;border:1px solid var(--s200);border-radius:.875rem;overflow:hidden}.panel-head{padding:1rem 1.25rem;border-bottom:1px solid var(--s100);display:flex;align-items:baseline;gap:.75rem}.panel-head h2{margin:0;font-size:var(--title2-size);font-weight:var(--title2-wt)}.panel-head .count{margin-left:auto;font-size:var(--caption-size);color:var(--s500)}.cols,.row{display:grid;grid-template-columns:minmax(11rem,1.4fr) minmax(9rem,1fr) 5rem 5rem minmax(8rem,auto);grid-gap:.875rem;gap:.875rem;padding:.75rem 1.25rem;align-items:center}.cols{background:var(--s50);border-bottom:1px solid var(--s100)}.cols span{font-size:var(--label-size);font-weight:var(--label-wt);letter-spacing:var(--label-track);text-transform:uppercase;color:var(--s500)}.row{border-bottom:1px solid var(--s100)}.row:last-child{border-bottom:0}.row .veh{font-size:var(--title3-size);font-weight:var(--title3-wt)}.row .sub{font-size:var(--bodysm-size);color:var(--s500)}.row .num{font-feature-settings:tabular-nums lining-nums;font-variant-numeric:tabular-nums lining-nums;font-weight:640}.needs{background:var(--alert-tint);box-shadow:inset 3px 0 0 var(--alert)}.empty{padding:2.5rem 1.25rem;color:var(--s500)}.empty,.landing{text-align:center}.landing{min-height:100vh;background:var(--c900);background-image:radial-gradient(120% 90% at 50% -10%,var(--c800) 0,var(--c900) 62%);color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3rem 1.5rem 2rem}.landing-inner{max-width:34rem;margin:auto 0}.landing-mark{color:var(--a-dk);display:inline-flex;margin-bottom:1.75rem}.landing-name{margin:0;font-size:clamp(2.75rem,9vw,4rem);line-height:1.05;font-weight:680;letter-spacing:-.03em}.landing-line{margin:1rem 0 0;line-height:1.55;color:#c3cde2}.landing-cta,.landing-line{font-size:var(--bodylg-size)}.landing-cta{display:inline-block;margin-top:2.25rem;font-weight:660;color:var(--c900);background:var(--a-dk);border-radius:.75rem;padding:.9rem 1.6rem;text-decoration:none}.landing-cta:hover{background:#7fd5e1}.landing-cta:focus-visible{outline:2px solid #fff;outline-offset:3px}.landing-note{margin:1.75rem 0 0;font-size:var(--bodysm-size);line-height:1.5;color:var(--info-dk)}.landing-foot{margin-top:auto;padding-top:3rem;font-size:var(--caption-size);color:var(--info-dk)}.login{min-height:100vh;display:grid;place-items:center;padding:1.5rem}.card{background:#fff;border:1px solid var(--s200);border-radius:1rem;padding:2rem;width:100%;max-width:26rem}.card .brand{display:flex;align-items:center;gap:.75rem;color:var(--c700);margin-bottom:1.5rem}.card .brand span{font-size:1.75rem;font-weight:680;letter-spacing:-.03em;color:var(--s900)}.card label{display:block;font-size:var(--label-size);font-weight:var(--label-wt);letter-spacing:var(--label-track);text-transform:uppercase;color:var(--s500);margin-bottom:.4rem}.card input{width:100%;font-family:inherit;font-size:var(--bodylg-size);padding:.8rem .9rem;border:1.5px solid var(--s200);border-radius:.7rem;color:var(--s900)}.card input:focus{outline:2px solid var(--a600);outline-offset:1px;border-color:var(--a600)}.card button{width:100%;margin-top:1rem;font-family:inherit;font-size:var(--bodylg-size);font-weight:660;color:#fff;background:var(--a600);border:0;border-radius:.75rem;padding:.95rem;cursor:pointer}.card button:hover{background:var(--a700)}.card button:disabled{opacity:.6;cursor:default}.note{margin-top:1rem;font-size:var(--bodysm-size);color:var(--s600)}.note.ok{color:var(--go)}.note.bad{color:var(--alert)}.card .lede{margin-top:0;margin-bottom:1.5rem;color:var(--s600)}.linkish{display:block;width:100%;margin-top:1rem;background:none;border:0;padding:.5rem;font-family:inherit;font-size:var(--bodysm-size);font-weight:640;color:var(--a600);cursor:pointer;text-align:center}.linkish:hover{color:var(--a700);text-decoration:underline}.code-input{font-size:1.75rem;font-weight:660;text-align:center;letter-spacing:.4em;text-indent:.4em;font-feature-settings:tabular-nums lining-nums;font-variant-numeric:tabular-nums lining-nums}.card .hint{margin-top:.4rem;font-size:var(--bodysm-size);color:var(--s500)}.card .secondary{width:100%;margin-top:.75rem;font-family:inherit;font-size:var(--bodylg-size);font-weight:660;color:var(--a600);background:#fff;border:1.5px solid var(--s200);border-radius:.75rem;padding:.9rem;cursor:pointer}.card .secondary:hover{border-color:var(--a600)}