body { background: #f5f6f8; }
.navbar-brand small { font-weight: 400; opacity: .7; }
.table td, .table th { vertical-align: middle; }
.stat-card .value { font-size: 1.8rem; font-weight: 600; }
.stat-card .label { color: #6c757d; font-size: .85rem; text-transform: uppercase; letter-spacing: .03em; }
.status-dot { display: inline-block; width: .6rem; height: .6rem; border-radius: 50%; margin-right: .35rem; }
.status-online { background: #198754; }
.status-alerting { background: #fd7e14; }
.status-offline { background: #dc3545; }
.status-dormant, .status-unknown { background: #adb5bd; }
.mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: .85em; }
.ip-chip { cursor: pointer; text-decoration: underline dotted; color: inherit; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
.ip-wrap { white-space: nowrap; }
.popover { max-width: 320px; }
.port-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(78px, 1fr)); gap: 6px; }
.port { display: block; border-radius: 6px; padding: 4px 6px; font-size: .75rem; line-height: 1.25; text-decoration: none; color: #212529; border: 1px solid transparent; }
.port:hover { border-color: #495057; }
.port .num { font-weight: 600; font-size: .85rem; }
.port-ok { background: #d1e7dd; }
.port-warning { background: #fff3cd; }
.port-problem { background: #f8d7da; }
.port-idle { background: #f1f3f5; color: #6c757d; }
.port-off { background: #343a40; color: #adb5bd; }
