/* 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; } } #vm-admin, #vm-admin .table-responsive, #vm-admin table, #vm-admin tbody, #vm-admin tr, #vm-admin td { overflow: visible !important; } #vm-admin td { position: relative; z-index: 1; } #vm-admin .target-node { position: relative; z-index: 1001; } /* Toasts: hard-pinned to bottom-right corner */ #toast-container { position: fixed !important; right: 0 !important; bottom: 0 !important; left: auto !important; top: auto !important; margin: 0 !important; padding: 1rem !important; width: auto; /* allow toast's own width (e.g., 350px in Bootstrap) */ max-width: 100vw; /* safety on tiny screens */ pointer-events: none; z-index: 3000; } #toast-container .toast { pointer-events: auto; margin: 0.25rem 0 0 0; /* stack vertically */ } @supports (inset: 0) { /* If the browser supports logical inset, keep it exact as well */ #toast-container { inset: auto 0 0 auto !important; } }