:root{
    --accent:#2f7dd1;
    --accent-dark:#1f5f9e;
    --navy:#101c2b;
    --navy2:#17283c;
    --line:#d3dbe5;
    --bg:#eef2f6;
    --panel:#fff;
    --text:#202935;
    --muted:#697787;
    --danger:#b42318;
    --ok:#237a3b;
    --warning:#aa6500;
    --radius:12px;
    --shadow:0 7px 24px rgba(20,36,58,.08);
}
*{box-sizing:border-box}
html,body{margin:0;min-height:100%;font:14px Inter,Segoe UI,Arial,sans-serif;background:var(--bg);color:var(--text)}
a{color:inherit}
body.app-body{min-height:100vh}
.topbar{position:sticky;top:0;z-index:100;height:62px;background:linear-gradient(110deg,var(--navy),#193452);color:#fff;display:flex;align-items:center;justify-content:space-between;padding:0 20px;border-bottom:1px solid rgba(255,255,255,.1)}
.brand-block{display:flex;flex-direction:column;justify-content:center;min-width:180px}.brand-block strong{font-size:18px}.brand-block span{font-size:11px;opacity:.72;text-transform:uppercase;letter-spacing:.08em}
.topbar-user{display:flex;align-items:center;gap:14px}.topbar-user a{color:#fff;text-decoration:none;border:1px solid rgba(255,255,255,.25);padding:7px 10px;border-radius:8px}.topbar-user a:hover{background:rgba(255,255,255,.1)}
.mobile-menu-button{display:none;background:transparent;border:0;color:#fff;font-size:23px;padding:0}
.layout{display:grid;grid-template-columns:276px minmax(0,1fr);min-height:calc(100vh - 62px)}
.sidebar{background:var(--navy2);padding:13px 10px 30px;overflow:auto}
.nav-group{margin-bottom:13px}.nav-group-title{padding:9px 11px 5px;color:#91a6bd;font-size:11px;text-transform:uppercase;letter-spacing:.1em;font-weight:700}
.sidebar a{display:block;color:#eaf1f8;text-decoration:none;padding:9px 11px;border-radius:8px;margin:2px 0;transition:.15s}.sidebar a:hover{background:rgba(255,255,255,.08)}.sidebar a.active{background:var(--accent);box-shadow:0 6px 16px rgba(0,0,0,.18)}
.content{padding:22px;min-width:0;overflow:auto}.page-head{display:flex;justify-content:space-between;align-items:center;gap:15px}.page-head h1,h1{margin:0 0 18px;font-size:25px;line-height:1.2}
.panel,.stat,.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.panel{padding:17px;margin-bottom:16px}.panel h2{margin:0 0 13px;font-size:19px}.panel h3{margin:15px 0 9px}.panel hr{border:0;border-top:1px solid var(--line);margin:17px 0}
.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px;margin-bottom:18px}.stat{padding:16px}.stat span{display:block;color:var(--muted)}.stat strong{font-size:28px;margin-top:6px;display:block}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:15px}.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:15px}
.form-grid{display:grid;grid-template-columns:repeat(3,minmax(180px,1fr));gap:13px}.form-grid.compact{grid-template-columns:repeat(2,minmax(140px,1fr))}.form-grid .wide{grid-column:1/-1}
label{display:block;font-weight:650;margin-bottom:5px}input,select,textarea{width:100%;padding:9px 10px;border:1px solid #aebbc9;border-radius:7px;background:#fff;color:inherit;font:inherit}input:focus,select:focus,textarea:focus{outline:3px solid color-mix(in srgb,var(--accent) 20%,transparent);border-color:var(--accent)}textarea{min-height:95px;resize:vertical}.check{display:flex;gap:8px;align-items:center;margin-top:24px}.check input{width:auto}.check label{margin:0}
.actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:13px}.btn,button{display:inline-flex;align-items:center;justify-content:center;gap:6px;background:var(--accent);color:#fff;border:1px solid var(--accent-dark);border-radius:8px;padding:8px 12px;text-decoration:none;cursor:pointer;font:inherit;font-weight:600}.btn:hover,button:hover{filter:brightness(.95)}.btn.secondary,button.secondary{background:#667483;border-color:#53606d}.btn.danger,.btn-danger,button.danger,button.btn-danger{background:var(--danger)!important;border-color:#7d1710!important;color:#fff!important}.btn.ok{background:var(--ok);border-color:#175c2b}.btn.warning{background:var(--warning);border-color:#754600}
table{width:100%;border-collapse:separate;border-spacing:0;background:#fff;border:1px solid var(--line);border-radius:10px;overflow:hidden}th,td{padding:9px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}th{background:#f4f7fa;white-space:nowrap;font-size:12px;text-transform:uppercase;letter-spacing:.03em;color:#536170}tr:last-child td{border-bottom:0}.table-wrap{overflow:auto}
.badge{display:inline-block;padding:4px 8px;border-radius:999px;font-size:11px;font-weight:700}.badge.green{background:#dff3e4;color:#1f6934}.badge.red{background:#fde2df;color:#8d2017}.badge.gray{background:#e7ebef;color:#4c5966}.badge.orange{background:#fff0d3;color:#7e5200}.badge.blue{background:#e0edf9;color:#245a89}
.alert{padding:11px 13px;margin-bottom:14px;border:1px solid;border-radius:9px}.alert.success{background:#e5f5e7;color:#205f2b;border-color:#9bc8a2}.alert.error{background:#fde6e6;color:#8c2020;border-color:#dda3a3}.alert.info{background:#e8f1fb;color:#294f78;border-color:#a7c1dd}.alert.warning{background:#fff2d8;color:#73500f;border-color:#dbc17f}
.tabs{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:13px}.tabs a{padding:8px 11px;background:#e4e9ef;border:1px solid #bdc6d0;border-radius:8px;text-decoration:none}.tabs a.active{background:var(--accent);color:#fff;border-color:var(--accent-dark)}
.small{font-size:12px;color:var(--muted)}.muted{color:var(--muted)}.code{font-family:Consolas,Monaco,monospace}.secret-box{padding:12px;background:#fff4ce;border:1px solid #d8bd5c;border-radius:8px;word-break:break-all}.details{display:grid;grid-template-columns:150px 1fr;gap:8px}.details dt{font-weight:bold}.details dd{margin:0}
.public-footer{margin-top:28px;padding:20px 4px 4px;color:#687586;border-top:1px solid var(--line);font-size:12px}.public-footer .footer-links{display:flex;flex-wrap:wrap;gap:14px;margin-bottom:8px}.public-footer a{color:var(--accent)}.public-footer p{max-width:1050px;line-height:1.45}
.login-page{min-height:100vh;display:flex;flex-direction:column;background:#132338 center/cover fixed no-repeat}.login-shell{flex:1;display:grid;grid-template-columns:minmax(280px,560px) minmax(360px,460px);align-items:center;justify-content:center;gap:60px;padding:42px;background:linear-gradient(90deg,rgba(8,17,29,.84),rgba(8,17,29,.46))}.login-hero{color:#fff;max-width:560px}.login-hero h1{font-size:42px;margin-bottom:10px}.login-hero p{font-size:18px;line-height:1.5;opacity:.9}.login-disclaimer{margin-top:22px;padding:14px;border:1px solid rgba(255,255,255,.25);border-radius:12px;background:rgba(0,0,0,.22);font-size:13px}.login-box{width:100%;background:rgba(255,255,255,.96);border:1px solid rgba(255,255,255,.5);padding:27px;border-radius:18px;box-shadow:0 22px 70px rgba(0,0,0,.35);backdrop-filter:blur(12px)}.login-box h2{margin:0 0 5px;font-size:25px}.login-box>p{margin-top:0;color:var(--muted)}.login-box input{margin-bottom:11px}.login-box button{width:100%;margin-top:7px}.login-logo{max-height:70px;max-width:250px;margin-bottom:15px}.login-page .public-footer{margin:0;background:#0d1927;color:#bfccda;padding:18px 30px}.login-page .public-footer a{color:#fff}
.grid-map{display:grid;grid-template-columns:360px minmax(0,1fr);gap:15px}.map-panel{min-width:0}.map-toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.map-canvas,#routeMap,#infrastructureMap,#vehicleMap{height:600px;border:1px solid var(--line);border-radius:10px;background:#dde3ea}.input-small{min-width:80px;width:95px}.inline-form{display:inline-block;margin:2px}
.kpi-list{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.kpi{padding:12px;border:1px solid var(--line);border-radius:10px;background:#f8fafc}.kpi strong{display:block;font-size:20px}.status-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:5px}.status-dot.online{background:#25a244}.status-dot.offline{background:#c63b31}.status-dot.stale{background:#d98b19}
.editor-shell{display:grid;grid-template-columns:220px minmax(0,1fr) 280px;gap:12px}.editor-toolbar,.editor-properties{background:#fff;border:1px solid var(--line);border-radius:10px;padding:12px}.editor-stage-wrap{background:#cfd7df;border-radius:10px;padding:20px;overflow:auto;min-height:620px}.editor-stage{position:relative;transform-origin:top left;background:#000;box-shadow:0 10px 28px rgba(0,0,0,.25);overflow:hidden}.editor-item{position:absolute;border:1px dashed transparent;cursor:move;overflow:hidden}.editor-item.selected{border-color:#00a8ff;background:rgba(0,168,255,.08)}.editor-resize{position:absolute;right:0;bottom:0;width:13px;height:13px;background:#00a8ff;cursor:nwse-resize}.tool-button{width:100%;margin-bottom:7px;justify-content:flex-start}
@media(max-width:1200px){.stats{grid-template-columns:1fr 1fr}.form-grid{grid-template-columns:1fr 1fr}.editor-shell{grid-template-columns:200px 1fr}.editor-properties{grid-column:1/-1}.grid-3{grid-template-columns:1fr 1fr}}
@media(max-width:850px){.mobile-menu-button{display:block}.layout{grid-template-columns:1fr}.sidebar{position:fixed;z-index:90;top:62px;bottom:0;left:-290px;width:276px;transition:.2s}.menu-open .sidebar{left:0}.content{padding:14px}.topbar-user span{display:none}.form-grid,.grid-2,.grid-3,.stats,.grid-map,.editor-shell{grid-template-columns:1fr}.map-canvas,#routeMap,#infrastructureMap,#vehicleMap{height:470px}.login-shell{grid-template-columns:1fr;padding:22px}.login-hero{display:none}.details{grid-template-columns:1fr}.kpi-list{grid-template-columns:1fr 1fr}}

.topbar-brand-logo{display:block;max-width:260px;max-height:44px;object-fit:contain;object-position:left center}.brand-block.has-logo{height:52px}.settings-logo-preview{display:block;max-width:260px;max-height:90px;object-fit:contain;margin-top:8px;padding:7px;background:#f5f7fa;border:1px solid var(--line);border-radius:8px}.login-logo{max-height:110px;max-width:360px;object-fit:contain;object-position:left center}
