:root{--green:#185440;--dark:#123e31;--accent:#c3df88;--ink:#233c34;--muted:#718078;--line:#e1e8e2;--bg:#f4f6f2;--red:#b63d3d;--amber:#956610}*{box-sizing:border-box}body{margin:0;font-family:Inter,"Segoe UI",Arial,sans-serif;background:var(--bg);color:var(--ink);font-size:14px}a{color:inherit;text-decoration:none}button,input,select{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.45}button:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid #87b94c;outline-offset:4px}button{border:0;border-radius:7px;padding:11px 15px;font-weight:600}h1,h2,h3,p{margin:0}h1{font-size:30px;letter-spacing:-1px;font-weight:650}h2{font-size:16px;font-weight:650;letter-spacing:-.2px}h3{font-size:13px;font-weight:500}small{font-size:11px}.sidebar{position:fixed;inset:0 auto 0 0;width:220px;background:var(--dark);color:#f4f8ed;display:flex;flex-direction:column;padding:34px 20px 24px}.brand{display:flex;gap:10px;align-items:center;font-size:19px;font-weight:750;letter-spacing:1px}.brand small{display:block;font-size:8px;letter-spacing:1.4px;font-weight:400;margin-top:6px;color:#bccfc4}.brand-symbol{border:2px solid #bedb87;color:#bedb87;width:36px;height:40px;border-radius:14px 3px 14px 3px;display:grid;place-items:center}.nav-label{font-size:10px;letter-spacing:1.5px;color:#94b5a6;margin:55px 12px 18px}nav{display:grid;gap:9px}nav a{display:flex;gap:13px;align-items:center;padding:14px;border-radius:7px;color:#cbd8ce}nav a span{font-size:21px;width:22px;text-align:center}nav a.active{color:#193f2c;background:#d4e6ad;font-weight:650}nav a:not(.active):hover{background:#1b4c3b}.sidebar-bottom{margin-top:auto;border-top:1px solid #35604e;padding-top:24px;display:flex;align-items:center;gap:10px}.sidebar-bottom small{display:block;color:#a7c1b3;margin-top:5px;max-width:135px;overflow:hidden;text-overflow:ellipsis}.avatar{width:33px;height:33px;border:1px solid #547361;border-radius:50%;display:grid;place-items:center}.sidebar-button{background:transparent;border:1px solid #557563;color:#e4ece3;margin-top:15px;font-size:12px}.project-note{color:#91ad9c;font-size:10px;line-height:1.6;margin-top:24px}main{margin-left:220px;padding:35px 35px 20px;max-width:1900px}header{display:flex;justify-content:space-between;gap:20px;margin-bottom:26px;align-items:center}.eyebrow{font-size:10px;font-weight:700;letter-spacing:1.5px;color:#698373;margin-bottom:10px}header p{color:var(--muted);margin-top:8px;font-size:13px}.header-right{display:flex;flex-direction:column;gap:10px;align-items:flex-end;white-space:nowrap}.header-right>span:last-child{font-size:11px;color:var(--muted)}.connection{font-size:12px;padding:8px 12px;border:1px solid #e1dccc;background:#f3efdf;color:#786743;border-radius:20px}.connection.online{background:#e7f1df;color:var(--green);border-color:#cfdfc3}.notice{border:1px solid #dce4d4;background:#ecf1e5;border-radius:8px;padding:14px 18px;display:flex;gap:13px;align-items:center;margin-bottom:26px}.notice strong{font-size:12px}.notice p{font-size:12px;color:#677660;margin-top:4px}.notice-icon{border:1.5px solid #718365;border-radius:50%;width:19px;height:19px;display:grid;place-items:center;font-weight:bold;font-size:12px}.section-line{display:flex;justify-content:space-between;gap:15px;align-items:center;margin-bottom:14px}.section-line>span{font-size:11px;color:var(--muted)}.card{background:white;border:1px solid var(--line);border-radius:10px;padding:20px;box-shadow:0 2px 3px #20352a02}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:15px;margin-bottom:18px}.metric{display:flex;gap:15px;align-items:flex-start;padding:20px 17px}.metric-icon{background:#f0f4e9;color:#627c51;border-radius:8px;min-width:37px;height:37px;display:grid;place-items:center;font-size:22px}.metric h3{color:#617268;margin-bottom:10px;font-size:12px}.metric strong{display:block;font-size:29px;font-weight:600;line-height:1.1}.metric .text-value{font-size:19px;margin-top:14px}.metric div>span{display:block;font-size:10px;color:#849087;margin-top:10px}.dashboard-grid{display:grid;grid-template-columns:1fr 1.35fr 1fr;gap:18px}.card-heading{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.card-heading p{font-size:11px;color:var(--muted);margin-top:7px;line-height:1.5}.sensor-tag{border:1px solid #e3e8de;color:#7b8977;font-size:9px;padding:4px 6px;border-radius:4px;white-space:nowrap;letter-spacing:.6px}.ring{--fill:0%;width:148px;height:148px;border-radius:50%;background:conic-gradient(var(--green) var(--fill),#edf0e9 0);margin:22px auto 14px;padding:12px}.ring>div{height:100%;border-radius:50%;background:white;display:flex;flex-direction:column;align-items:center;justify-content:center}.ring strong{font-size:31px;font-weight:500}.ring span{font-size:11px;color:var(--muted);margin-top:7px}.ring.alert{background:conic-gradient(var(--red) var(--fill),#edf0e9 0)}.center{text-align:center}.muted{color:var(--muted);font-size:11px}.legend{white-space:nowrap;font-size:10px;color:var(--muted)}.legend i{display:inline-block;width:7px;height:7px;background:var(--green);border-radius:50%;margin-right:4px}.chart{position:relative;height:178px;margin:17px 0 10px;background:repeating-linear-gradient(to top,transparent 0,transparent 43px,#edf0eb 44px),repeating-linear-gradient(to right,transparent 0,transparent 89px,#edf0eb 90px);border-left:1px solid #e3e8e0;border-bottom:1px solid #e3e8e0}.chart.compact{height:115px}.chart svg{height:100%;width:100%;display:block}.chart-empty{position:absolute;inset:0;display:grid;place-items:center;color:#89938b;font-size:11px;text-align:center}.chart-empty span{background:#fffffff0;padding:10px}.stops-card{grid-column:3;grid-row:1 / span 2;display:flex;flex-direction:column}.empty-stop{text-align:center;padding:42px 5px}.stop-symbol{margin:0 auto 18px;border:1px solid #e1e7dc;background:#f5f7f1;border-radius:50%;width:63px;height:63px;display:grid;place-items:center;color:#899880;font-size:25px}.empty-stop h3{font-size:14px;font-weight:600}.empty-stop p{font-size:12px;color:var(--muted);line-height:1.6;margin:10px auto 23px;max-width:175px}.primary{background:var(--green);color:white}.primary:hover:not(:disabled){background:#0c3f2d}.secondary{background:#f3f5ef;border:1px solid #dce4d7;color:#47614b}.empty-stop button{width:100%;font-size:12px}.stop-footnote{margin-top:auto;border-top:1px solid var(--line);padding-top:14px;line-height:1.6;color:var(--muted);font-size:10px}.stop-request{padding:18px 0;border-bottom:1px solid var(--line)}.stop-request p{font-size:12px;color:var(--muted);margin:7px 0 12px}.stop-request button{width:100%}.small-icon{color:#74856b}.door-display{display:flex;gap:16px;align-items:center;margin:20px 0}.door-display svg{width:50px;fill:none;stroke:#9aa68f;stroke-width:2}.door-display strong{font-size:13px}.door-display p{font-size:10px;line-height:1.5;color:var(--muted);margin-top:5px}.door-timeline{display:flex;gap:3px;align-items:center;height:18px;background:#f5f6f2;border-radius:4px;font-size:10px;color:#9aa294;padding:0 5px;overflow:hidden}.door-timeline span{height:9px;flex:1;min-width:2px;border-radius:2px}.mini-legend{font-size:9px;color:var(--muted);margin-top:10px}.mini-legend span{margin:0 8px}#acceleration-value{white-space:nowrap;font-size:19px}#acceleration-value small{font-size:10px;font-weight:400}.speed-card{grid-column:1}.speed-dial{border:10px solid #e9ede4;border-bottom:0;border-radius:100px 100px 0 0;width:110px;height:55px;margin:20px auto 13px;display:flex;align-items:center;justify-content:center;gap:4px;padding-top:15px}.speed-dial span{font-size:25px}.speed-dial small{color:var(--muted);font-size:10px}.speed-card>strong{display:block;text-align:center;font-size:12px}.speed-card>p{text-align:center;font-size:10px;color:var(--muted);margin-top:5px}.speed-limit{margin-top:15px;padding-top:11px;border-top:1px solid var(--line);display:flex;justify-content:space-between;font-size:10px;color:var(--muted)}.sensor-details{margin-top:18px}.sensor-details summary{cursor:pointer;font-weight:600;font-size:13px;display:flex;justify-content:space-between;gap:10px}.sensor-details summary span{font-size:11px;font-weight:400;color:var(--muted)}.sensor-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:20px}.sensor-grid div{padding:10px;background:#f6f8f3;border-radius:6px}.sensor-grid dt{font-size:10px;color:var(--muted)}.sensor-grid dd{margin:7px 0 0;font-size:12px}.events-card{margin-top:18px}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;font-size:12px;text-align:left}th{padding:13px 12px;font-size:10px;text-transform:uppercase;letter-spacing:.6px;font-weight:600;color:#7a8878;border-bottom:1px solid var(--line);white-space:nowrap}td{padding:15px 12px;border-bottom:1px solid #eef1ea;color:#536550;max-width:330px;overflow-wrap:anywhere}tbody tr:last-child td{border-bottom:0}.empty-row{text-align:center;color:#8b9585;padding:35px 12px}.text-link{font-size:11px;color:var(--green);white-space:nowrap}.filters{display:flex;align-items:end;gap:15px;margin-bottom:18px;flex-wrap:wrap}label{display:grid;gap:8px;font-size:11px;color:#657662}input,select{padding:10px 12px;border:1px solid #d8e0d2;border-radius:6px;background:white;color:var(--ink);min-width:140px}.pagination{display:flex;gap:16px;align-items:center;justify-content:flex-end;padding-top:20px;font-size:11px}.trip-detail{margin-top:18px}.trip-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:15px;margin:20px 0}.trip-summary strong{display:block;font-size:22px;margin-top:8px}.trip-summary span{font-size:11px;color:var(--muted)}footer{display:flex;justify-content:space-between;gap:15px;color:#87937f;font-size:10px;margin-top:24px}.live-dot{display:inline-block;width:5px;height:5px;background:#8ba16f;border-radius:50%;margin-right:6px}.danger{color:var(--red)!important}.badge{padding:4px 7px;border-radius:4px;background:#eef3e8;color:#5f7752;font-size:10px}dialog{border:1px solid var(--line);border-radius:12px;max-width:410px;width:calc(100% - 32px);padding:30px;color:var(--ink)}dialog::backdrop{background:#0f291e70}dialog p{color:var(--muted);font-size:12px;line-height:1.6;margin:12px 0 20px}dialog label{margin-top:16px}.dialog-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}#login-error{color:var(--red);margin:12px 0}#toast{position:fixed;bottom:25px;right:25px;max-width:400px;background:#193e30;color:white;padding:18px;border-radius:9px;box-shadow:0 5px 25px #0002;font-size:13px;z-index:5}[hidden]{display:none!important}@media(min-width:1450px){.dashboard-grid{grid-template-columns:1fr 1.25fr 1.25fr 1fr}.occupancy-chart{grid-column:2 / span 2}.stops-card{grid-column:4}.speed-card{grid-column:3}.metrics{gap:18px}.acceleration-card{grid-column:2}.chart{height:178px}}@media(max-width:1100px){main{padding:25px}.sidebar{width:185px;padding:28px 15px}.brand{font-size:15px}.brand-symbol{width:30px;height:35px}.brand small{font-size:7px}main{margin-left:185px}.metrics{grid-template-columns:repeat(2,1fr)}.dashboard-grid{grid-template-columns:1fr 1fr}.stops-card{grid-column:2;grid-row:2 / span 2}.occupancy-chart{grid-column:2;grid-row:1}.acceleration-card{grid-column:1}.speed-card{grid-column:1 / span 2}.sensor-grid{grid-template-columns:repeat(3,1fr)}h1{font-size:26px}}@media(max-width:720px){.sidebar{position:static;width:100%;padding:18px;display:block}.brand{font-size:17px}.nav-label,.sidebar-bottom,.project-note{display:none}nav{display:flex;margin-top:18px;gap:5px}nav a{flex:1;justify-content:center;padding:10px 6px;font-size:12px}nav a span{font-size:17px;width:16px}.sidebar-button{position:absolute;right:18px;top:20px;margin:0;font-size:10px;padding:9px}main{margin:0;padding:22px 16px}header{align-items:start}h1{font-size:23px}.eyebrow{font-size:8px}.header-right #clock{display:none}.connection{font-size:9px;padding:7px}header p{font-size:11px}.metrics{gap:10px}.metric{padding:15px 12px;gap:10px}.metric-icon{min-width:28px;height:28px;font-size:18px}.metric strong{font-size:24px}.metric .text-value{font-size:16px}.metric h3{font-size:10px}.dashboard-grid{display:flex;flex-direction:column}.card{padding:18px}.stops-card{order:-1}.empty-stop{padding:15px 5px}.empty-stop .stop-symbol{display:none}.empty-stop p{max-width:none;margin:8px 0 15px}.stop-footnote{margin-top:15px}.sensor-grid{grid-template-columns:repeat(2,1fr)}.filters{display:grid;grid-template-columns:1fr 1fr}.filters input,.filters select{min-width:0;width:100%}.filters label:nth-child(3){grid-column:span 2}.trip-summary{grid-template-columns:repeat(2,1fr)}.section-line{align-items:start}.section-line>span{max-width:140px;text-align:right}.card-heading h2{font-size:14px}footer{font-size:9px}.speed-card .speed-dial{margin-top:20px}.notice{padding:12px}.notice p{font-size:11px}}

.icon{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;vertical-align:middle}.stop-symbol .icon{width:30px;height:30px}
