:root{--azul:#0b4f8a;--azul-escuro:#072f52;--vermelho:#c8102e;--cinza:#5b6b7b;--cinza-claro:#8a98a6;--bg:#f4f7fa;--borda:#e3eaf1;--sidebar-w:244px}*{box-sizing:border-box;margin:0;padding:0}body,html{height:100%}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:#0f1d2b;font-size:14px}a{color:var(--azul);text-decoration:none}.btn{background:var(--azul);color:#fff;border:0;border-radius:8px;padding:10px 16px;font-size:14px;cursor:pointer;font-weight:500}.btn:hover{background:var(--azul-escuro)}.btn:disabled{opacity:.55;cursor:default}.btn--danger{background:var(--vermelho)}.btn--ghost{background:transparent;color:var(--azul);border:1px solid var(--borda)}.btn--sm{padding:6px 12px;font-size:13px}.input,select.input,textarea.input{width:100%;padding:9px 12px;border:1px solid #cdd8e3;border-radius:8px;font-size:14px;background:#fff;color:#0f1d2b}.input:focus{outline:2px solid #bcd6ef;border-color:var(--azul)}label.lbl{font-size:12px;color:var(--cinza);display:block;margin-bottom:5px}.field{margin-bottom:14px}.card{background:#fff;border:1px solid var(--borda);border-radius:14px;padding:22px}.card h2{font-size:16px;color:var(--azul-escuro);margin-bottom:14px}.grid{display:grid;grid-gap:14px;gap:14px}.grid-cards{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.tbl{width:100%;border-collapse:collapse;font-size:14px}.tbl th{text-align:left;color:var(--cinza);border-bottom:2px solid var(--borda);padding:8px;font-weight:600}.tbl td{padding:8px;border-bottom:1px solid #eef3f8}.tbl tbody tr:hover{background:#f7fafd}.badge{display:inline-block;padding:2px 10px;border-radius:999px;font-size:12px;font-weight:600}.badge--ok{background:#e6f6ec;color:#1a7f37}.badge--warn{background:#fff4e0;color:#a86b00}.badge--err{background:#fdeef0;color:var(--vermelho)}.shell{display:grid;grid-template-columns:var(--sidebar-w) 1fr;grid-template-rows:56px 1fr;min-height:100vh;grid-template-areas:"side top" "side main"}.shell.collapsed{--sidebar-w:0px}.topbar{grid-area:top;background:#fff;border-bottom:1px solid var(--borda);display:flex;align-items:center;gap:14px;padding:0 18px;position:-webkit-sticky;position:sticky;top:0;z-index:20}.topbar .empresa{font-weight:700;color:var(--azul-escuro)}.topbar .spacer{flex:1 1}.topbar .user{font-size:13px;color:var(--cinza)}.avatar{width:32px;height:32px;border-radius:50%;background:var(--azul);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:700}.hamb{background:transparent;border:0;cursor:pointer;font-size:20px;color:var(--azul-escuro);line-height:1}.sidebar{grid-area:side;background:linear-gradient(180deg,var(--azul-escuro),var(--azul));color:#fff;overflow-y:auto;padding-bottom:24px}.sidebar .brand{padding:16px 18px;font-size:18px;font-weight:800;letter-spacing:.3px;display:flex;align-items:center;gap:8px}.sidebar .brand .dot{width:8px;height:22px;background:var(--vermelho);border-radius:2px}.sidebar .grp{padding:14px 18px 4px;font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:#9db8d2}.sidebar a.nav{display:flex;align-items:center;gap:10px;padding:9px 18px;color:#dceaf6;font-size:14px;border-left:3px solid transparent}.sidebar a.nav:hover{background:hsla(0,0%,100%,.07)}.sidebar a.nav.active{background:hsla(0,0%,100%,.14);border-left-color:var(--vermelho);color:#fff;font-weight:600}.sidebar a.nav .ic{width:20px;display:inline-flex;align-items:center;justify-content:center;opacity:.9}.sidebar a.nav.active .ic{opacity:1}.status-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:middle}.status-dot--on{background:#1a7f37}.status-dot--off{background:var(--cinza-claro)}.content{grid-area:main;padding:22px;overflow-x:auto}.content h1{font-size:22px;color:var(--azul-escuro);margin-bottom:4px}.content .sub{color:var(--cinza);margin-bottom:18px;font-size:13px}@media (max-width:820px){.shell{grid-template-columns:0 1fr}.sidebar{position:fixed;width:244px;height:100vh;z-index:40;transform:translateX(-100%);transition:transform .2s}.shell.open .sidebar{transform:translateX(0)}}