/* Dark theme */ body { background-color: #0f1115; } .card.health-card { background: #101520; } .health-dot { width: 12px; height: 12px; border-radius: 50%; background: #dc3545; } .health-dot.ok { background: #28a745; } .health-dot.bad { background: #dc3545; } /* Tables */ .table td, .table th { vertical-align: middle; } /* Dividers */ .vr { width: 1px; min-height: 1rem; background: rgba(255, 255, 255, .15); } /* --- horizontal scroll & nowrap for wide tables --- */ .table-responsive { overflow-x: auto; } .table-nowrap { white-space: nowrap; } @media (min-width: 992px) { .table-nowrap-lg-normal { white-space: normal; } } /* sticky first column (for wide tables) */ .sticky-col { position: sticky; left: 0; z-index: 2; background: var(--bs-body-bg); box-shadow: 1px 0 0 rgba(255, 255, 255, .08); } footer.site-footer { border-top: 1px solid rgba(255, 255, 255, .1); } footer.site-footer a { text-decoration: none; } footer.site-footer a:hover { text-decoration: underline; } /* Toast container constraints */ #toast-container .toast { max-width: min(420px, 90vw); word-wrap: break-word; } #toast-container { max-width: 92vw; } #toast-container { width: min(480px, 96vw); max-width: min(480px, 96vw); } #toast-container .toast { max-width: 100%; overflow-wrap: anywhere; word-break: break-word; white-space: normal; } .position-fixed.bottom-0.end-0.p-3 { right: max(env(safe-area-inset-right), 1rem); bottom: max(env(safe-area-inset-bottom), 1rem); } /* Row chevron (expandable rows) */ .table .chev { width: 1.25rem; text-align: center; user-select: none; } .table tr.expandable { cursor: pointer; } .table tr.expandable .chev::before { content: "▸"; display: inline-block; transition: transform .15s ease; } .table tr.expanded .chev::before { transform: rotate(90deg); content: "▾"; } /* Small utility widths */ .w-1 { width: 1.25rem; } /* Subtle skeleton */ .skel { position: relative; background: linear-gradient(90deg, rgba(255, 255, 255, .05) 25%, rgba(255, 255, 255, .10) 37%, rgba(255, 255, 255, .05) 63%); background-size: 400% 100%; animation: skel 1.4s ease-in-out infinite; } @keyframes skel { 0% { background-position: 100% 0; } 100% { background-position: 0 0; } }