body { background: var(--bs-tertiary-bg); }
.sidebar { width: 240px; min-height: 100vh; position: sticky; top: 0; background: var(--bs-body-bg); }
.sidebar .nav-link, .offcanvas .nav-link { color: var(--bs-body-color); }
.sidebar .nav-link.active, .offcanvas .nav-link.active { color: #fff; }
.sidebar .nav-link i, .offcanvas .nav-link i { width: 1.25rem; display: inline-block; }
.topbar { background: var(--bs-body-bg); position: sticky; top: 0; z-index: 1020; }
.min-vw-0 { min-width: 0; }
.card { border-color: var(--bs-border-color-translucent); }
.kpi .value { font-size: 1.6rem; font-weight: 600; line-height: 1.2; }
.kpi .label { font-size: .8rem; color: var(--bs-secondary-color); text-transform: uppercase; letter-spacing: .03em; }
.charger-tile { border-left: 4px solid var(--bs-secondary); }
.charger-tile.online { border-left-color: var(--bs-success); }
.charger-tile.offline { border-left-color: var(--bs-danger); }
.dot { display: inline-block; width: .6rem; height: .6rem; border-radius: 50%; }
pre.json { font-size: .75rem; max-height: 320px; overflow: auto; background: var(--bs-tertiary-bg); padding: .5rem; border-radius: .375rem; margin: 0; }
.log-table td { font-size: .8rem; vertical-align: top; }
.log-table .payload { font-family: var(--bs-font-monospace); white-space: pre-wrap; word-break: break-all; max-width: 640px; }
.log-scroll { max-height: calc(100vh - 260px); overflow: auto; }
.table td, .table th { white-space: nowrap; }
.table td.wrap { white-space: normal; }
