578 lines
17 KiB
CSS
578 lines
17 KiB
CSS
/* Fonts are self-hosted via @fontsource (imported in main.tsx) - no external CDN. */
|
||
@import "tailwindcss";
|
||
|
||
@theme {
|
||
--font-sans: "Inter", ui-sans-serif, system-ui, sans-serif;
|
||
--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, monospace;
|
||
}
|
||
|
||
/* ── AirIT brand tokens ────────────────────────────────────────── */
|
||
:root {
|
||
--airit-navy: #003A70;
|
||
--airit-navy-dark: #002B55;
|
||
--airit-blue: #005AA0;
|
||
--airit-gray: #6F7478;
|
||
--airit-text: #1F2933;
|
||
--airit-bg: #FFFFFF;
|
||
--airit-bg-soft: #F3F5F7;
|
||
--airit-border: #D6DADF;
|
||
}
|
||
|
||
/* ── CSS custom properties ─────────────────────────────────────── */
|
||
:root {
|
||
--bg: #0b0f19;
|
||
--bg-header: #0f172a;
|
||
--bg-card: #1e293b;
|
||
--bg-inner: #090d16;
|
||
--bg-input: #020408;
|
||
--border: #1e293b;
|
||
--border-muted:#334155;
|
||
--text: #f1f5f9;
|
||
--text-muted: #94a3b8;
|
||
--text-label: #cbd5e1;
|
||
}
|
||
|
||
:root.light {
|
||
--bg: #f1f5f9;
|
||
--bg-header: #ffffff;
|
||
--bg-card: #ffffff;
|
||
--bg-inner: #f8fafc;
|
||
--bg-input: #ffffff;
|
||
--border: #e2e8f0;
|
||
--border-muted:#cbd5e1;
|
||
--text: #0f172a;
|
||
--text-muted: #475569;
|
||
--text-label: #334155;
|
||
}
|
||
|
||
/* ── LIGHT MODE OVERRIDES ─────────────────────────────────────── */
|
||
|
||
/* Root / body */
|
||
:root.light body,
|
||
:root.light #main-root {
|
||
background-color: var(--bg) !important;
|
||
color: var(--text) !important;
|
||
}
|
||
|
||
/* ── Backgrounds: all dark hex variants → card/inner */
|
||
:root.light .bg-\[\#0B0F19\],
|
||
:root.light .bg-\[\#0b0f19\] {
|
||
background-color: var(--bg) !important;
|
||
}
|
||
|
||
:root.light .bg-\[\#0F172A\],
|
||
:root.light .bg-\[\#0f172a\] {
|
||
background-color: var(--bg-header) !important;
|
||
border-color: var(--border) !important;
|
||
}
|
||
|
||
:root.light .bg-\[\#1E293B\],
|
||
:root.light .bg-\[\#1e293b\] {
|
||
background-color: var(--bg-card) !important;
|
||
border-color: var(--border) !important;
|
||
}
|
||
|
||
/* Amber-tinted warning/safety card used in Dashboard */
|
||
:root.light .bg-\[\#1D2535\],
|
||
:root.light .bg-\[\#1d2535\] {
|
||
background-color: #fffbeb !important;
|
||
border-color: #fde68a !important;
|
||
}
|
||
|
||
/* ── Header & nav ─────────────────────────────────────────────── */
|
||
:root.light header,
|
||
:root.light #app-header {
|
||
background-color: var(--bg-header) !important;
|
||
border-color: var(--border) !important;
|
||
color: var(--text) !important;
|
||
}
|
||
|
||
:root.light aside,
|
||
:root.light #nav-sidebar {
|
||
background-color: #f8fafc !important;
|
||
border-color: var(--border) !important;
|
||
}
|
||
|
||
/* ── Slate utility backgrounds ────────────────────────────────── */
|
||
:root.light .bg-slate-950,
|
||
:root.light .bg-slate-900 {
|
||
background-color: #f1f5f9 !important;
|
||
border-color: var(--border) !important;
|
||
}
|
||
|
||
:root.light .bg-slate-800 {
|
||
background-color: #e2e8f0 !important;
|
||
}
|
||
|
||
/* opacity variants */
|
||
:root.light .bg-slate-950\/10,
|
||
:root.light .bg-slate-950\/20,
|
||
:root.light .bg-slate-950\/30,
|
||
:root.light .bg-slate-950\/40,
|
||
:root.light .bg-slate-950\/60,
|
||
:root.light .bg-slate-950\/80 {
|
||
background-color: rgba(241, 245, 249, 0.85) !important;
|
||
}
|
||
|
||
:root.light .bg-slate-900\/10,
|
||
:root.light .bg-slate-900\/35,
|
||
:root.light .bg-slate-900\/40,
|
||
:root.light .bg-slate-900\/60,
|
||
:root.light .bg-slate-900\/80 {
|
||
background-color: #f8fafc !important;
|
||
}
|
||
|
||
:root.light .bg-slate-800\/50,
|
||
:root.light .bg-slate-800\/60,
|
||
:root.light .bg-slate-800\/80 {
|
||
background-color: #e9ecf0 !important;
|
||
}
|
||
|
||
/* ── Dashboard banner gradient ────────────────────────────────── */
|
||
:root.light .bg-gradient-to-br {
|
||
background-image: linear-gradient(to bottom right, #ffffff, #f1f5f9) !important;
|
||
border-color: var(--border) !important;
|
||
}
|
||
|
||
/* ── Inputs, selects, textareas ───────────────────────────────── */
|
||
:root.light input,
|
||
:root.light select,
|
||
:root.light textarea {
|
||
background-color: var(--bg-input) !important;
|
||
border-color: var(--border-muted) !important;
|
||
color: var(--text) !important;
|
||
}
|
||
|
||
:root.light option {
|
||
background-color: #ffffff !important;
|
||
color: var(--text) !important;
|
||
}
|
||
|
||
:root.light input:focus,
|
||
:root.light select:focus,
|
||
:root.light textarea:focus {
|
||
border-color: #6366f1 !important;
|
||
}
|
||
|
||
/* ── Borders ──────────────────────────────────────────────────── */
|
||
:root.light .border-slate-800,
|
||
:root.light .border-slate-850,
|
||
:root.light .border-slate-855,
|
||
:root.light .border-slate-700,
|
||
:root.light .border-\[\#1E293B\],
|
||
:root.light .border-\[\#1e293b\] {
|
||
border-color: var(--border) !important;
|
||
}
|
||
|
||
:root.light .divide-slate-800 > *,
|
||
:root.light .divide-slate-850 > * {
|
||
border-color: var(--border) !important;
|
||
}
|
||
|
||
/* ── Text colours ─────────────────────────────────────────────── */
|
||
:root.light .text-white,
|
||
:root.light .text-slate-100,
|
||
:root.light .text-slate-200 {
|
||
color: var(--text) !important;
|
||
}
|
||
|
||
:root.light .text-slate-300 {
|
||
color: #334155 !important;
|
||
}
|
||
|
||
:root.light .text-slate-400 {
|
||
color: #64748b !important;
|
||
}
|
||
|
||
:root.light .text-slate-500 {
|
||
color: #94a3b8 !important;
|
||
}
|
||
|
||
/* Accent colours - slightly darkened for readability on white */
|
||
:root.light .text-emerald-400 {
|
||
color: #059669 !important;
|
||
}
|
||
|
||
:root.light .text-cyan-400 {
|
||
color: #0891b2 !important;
|
||
}
|
||
|
||
:root.light .text-indigo-400 {
|
||
color: #4f46e5 !important;
|
||
}
|
||
|
||
:root.light .text-amber-400,
|
||
:root.light .text-amber-500 {
|
||
color: #d97706 !important;
|
||
}
|
||
|
||
:root.light .text-rose-400,
|
||
:root.light .text-rose-450 {
|
||
color: #be123c !important;
|
||
}
|
||
|
||
/* ── Accent / status badge backgrounds ───────────────────────── */
|
||
:root.light .bg-emerald-950\/60,
|
||
:root.light .bg-emerald-950\/50,
|
||
:root.light .bg-emerald-950\/40,
|
||
:root.light .bg-emerald-950\/20,
|
||
:root.light .bg-emerald-950\/80 {
|
||
background-color: #d1fae5 !important;
|
||
border-color: #6ee7b7 !important;
|
||
color: #065f46 !important;
|
||
}
|
||
|
||
:root.light .bg-indigo-950\/60,
|
||
:root.light .bg-indigo-950\/50,
|
||
:root.light .bg-indigo-950\/40 {
|
||
background-color: #e0e7ff !important;
|
||
border-color: #a5b4fc !important;
|
||
color: #3730a3 !important;
|
||
}
|
||
|
||
:root.light .bg-rose-950\/60,
|
||
:root.light .bg-rose-950\/40,
|
||
:root.light .bg-rose-950\/20 {
|
||
background-color: #ffe4e6 !important;
|
||
border-color: #fca5a5 !important;
|
||
color: #9f1239 !important;
|
||
}
|
||
|
||
:root.light .bg-cyan-950\/40 {
|
||
background-color: #cffafe !important;
|
||
border-color: #67e8f9 !important;
|
||
color: #155e75 !important;
|
||
}
|
||
|
||
:root.light .bg-amber-950\/40,
|
||
:root.light .bg-amber-900\/30 {
|
||
background-color: #fef3c7 !important;
|
||
border-color: #fde68a !important;
|
||
color: #92400e !important;
|
||
}
|
||
|
||
/* ── Nav sidebar active item ──────────────────────────────────── */
|
||
:root.light #nav-sidebar button {
|
||
color: #475569 !important;
|
||
}
|
||
|
||
:root.light #nav-sidebar button:hover:not(.bg-gradient-to-r) {
|
||
background-color: rgba(0, 0, 0, 0.05) !important;
|
||
color: var(--text) !important;
|
||
}
|
||
|
||
/* ── Sidebar telemetry box ────────────────────────────────────── */
|
||
:root.light #nav-sidebar .bg-slate-950 {
|
||
background-color: #f1f5f9 !important;
|
||
border-color: var(--border-muted) !important;
|
||
}
|
||
|
||
/* ── Dropdown panels (mail, bell) ─────────────────────────────── */
|
||
:root.light .bg-\[\#1E293B\].rounded-xl,
|
||
:root.light .shadow-2xl.rounded-xl {
|
||
background-color: #ffffff !important;
|
||
border-color: var(--border-muted) !important;
|
||
}
|
||
|
||
/* ── Table internals ──────────────────────────────────────────── */
|
||
:root.light table {
|
||
color: var(--text) !important;
|
||
}
|
||
|
||
:root.light thead {
|
||
background-color: #f8fafc !important;
|
||
}
|
||
|
||
:root.light tbody tr:hover {
|
||
background-color: #f1f5f9 !important;
|
||
}
|
||
|
||
:root.light .bg-\[\#0f172a\]\/60,
|
||
:root.light tr.bg-\[\#0f172a\] {
|
||
background-color: #f1f5f9 !important;
|
||
}
|
||
|
||
/* ── Dashed empty states ──────────────────────────────────────── */
|
||
:root.light .border-dashed {
|
||
border-color: var(--border-muted) !important;
|
||
}
|
||
|
||
/* ── DeviceInventory ──────────────────────────────────────────── */
|
||
|
||
/* Emergency Sheet container (amber-tinted dark card) */
|
||
:root.light .bg-\[\#1D2432\],
|
||
:root.light .bg-\[\#1d2432\] {
|
||
background-color: #fffbeb !important;
|
||
border-color: #fde68a !important;
|
||
}
|
||
|
||
/* Emergency sheet markdown content area - light in light mode */
|
||
:root.light .bg-\[\#1D2432\] .bg-slate-950\/80,
|
||
:root.light .bg-\[\#1d2432\] .bg-slate-950\/80 {
|
||
background-color: #ffffff !important;
|
||
border-color: var(--border) !important;
|
||
color: var(--text) !important;
|
||
}
|
||
|
||
:root.light .bg-\[\#1D2432\] .bg-slate-950\/80 *,
|
||
:root.light .bg-\[\#1d2432\] .bg-slate-950\/80 * {
|
||
color: var(--text) !important;
|
||
}
|
||
|
||
/* Keep emerald headings readable */
|
||
:root.light .bg-\[\#1D2432\] .bg-slate-950\/80 h5,
|
||
:root.light .bg-\[\#1d2432\] .bg-slate-950\/80 h5 {
|
||
color: #059669 !important;
|
||
}
|
||
|
||
/* Device type icon pill backgrounds */
|
||
:root.light .bg-rose-950\/20 { background-color: #fff1f2 !important; border-color: #fecdd3 !important; }
|
||
:root.light .bg-amber-950\/20 { background-color: #fffbeb !important; border-color: #fde68a !important; }
|
||
:root.light .bg-cyan-950\/20 { background-color: #ecfeff !important; border-color: #a5f3fc !important; }
|
||
:root.light .bg-teal-950\/20 { background-color: #f0fdfa !important; border-color: #99f6e4 !important; }
|
||
|
||
/* Filter toolbar type-filter buttons */
|
||
:root.light .bg-slate-850,
|
||
:root.light .hover\:bg-slate-850:hover {
|
||
background-color: #e2e8f0 !important;
|
||
}
|
||
|
||
/* Device card selected state */
|
||
:root.light #inventory-list-container .bg-slate-900.border-emerald-500\/80 {
|
||
background-color: #f0fdf4 !important;
|
||
border-color: #10b981 !important;
|
||
}
|
||
|
||
/* Device card unselected/hover */
|
||
:root.light #inventory-list-container .bg-slate-900\/40 {
|
||
background-color: #f8fafc !important;
|
||
border-color: var(--border) !important;
|
||
}
|
||
|
||
:root.light #inventory-list-container .hover\:bg-slate-900\/60:hover {
|
||
background-color: #f1f5f9 !important;
|
||
}
|
||
|
||
/* SPECS ID badge and code block inside right panel */
|
||
:root.light #inventory-details-container .bg-slate-950 {
|
||
background-color: #f1f5f9 !important;
|
||
border-color: var(--border) !important;
|
||
color: var(--text) !important;
|
||
}
|
||
|
||
:root.light #inventory-details-container .bg-slate-900\/50,
|
||
:root.light #inventory-details-container .bg-slate-900\/60 {
|
||
background-color: #f8fafc !important;
|
||
border-color: var(--border) !important;
|
||
}
|
||
|
||
/* Amber rescue badge */
|
||
:root.light .bg-amber-950 {
|
||
background-color: #fef3c7 !important;
|
||
border-color: #fde68a !important;
|
||
color: #92400e !important;
|
||
}
|
||
|
||
/* ── Dashboard "NET" watermark: invisible in light mode ───────── */
|
||
:root.light #dashboard-cockpit-root .text-slate-800 {
|
||
color: transparent !important;
|
||
}
|
||
|
||
/* ── Modal overlays ───────────────────────────────────────────── */
|
||
:root.light .fixed.inset-0 {
|
||
background-color: rgba(15, 23, 42, 0.45) !important;
|
||
}
|
||
|
||
:root.light .fixed.inset-0 > div,
|
||
:root.light .bg-\[\#0F172A\].rounded-2xl {
|
||
background-color: #ffffff !important;
|
||
border-color: var(--border-muted) !important;
|
||
}
|
||
|
||
/* ── Lab Template Modal internals ─────────────────────────────── */
|
||
|
||
/* Modal header bar */
|
||
:root.light .fixed.inset-0 .bg-slate-900.border-b {
|
||
background-color: #f8fafc !important;
|
||
border-color: var(--border) !important;
|
||
}
|
||
|
||
/* Modal form body */
|
||
:root.light .fixed.inset-0 form {
|
||
background-color: #ffffff !important;
|
||
}
|
||
|
||
/* Device-toggle buttons inside modal */
|
||
:root.light .fixed.inset-0 .bg-slate-900.border-slate-800 {
|
||
background-color: #f1f5f9 !important;
|
||
border-color: var(--border) !important;
|
||
color: var(--text-label) !important;
|
||
}
|
||
|
||
:root.light .fixed.inset-0 .bg-slate-900.border-slate-850 {
|
||
background-color: #f1f5f9 !important;
|
||
}
|
||
|
||
/* Device grid area */
|
||
:root.light .bg-slate-950\/60 {
|
||
background-color: #f8fafc !important;
|
||
border-color: var(--border) !important;
|
||
}
|
||
|
||
/* Link builder row */
|
||
:root.light .bg-slate-1000,
|
||
:root.light .bg-slate-1000\/40 {
|
||
background-color: #f1f5f9 !important;
|
||
border-color: var(--border) !important;
|
||
}
|
||
|
||
/* Existing link row badges */
|
||
:root.light .fixed.inset-0 .bg-slate-900\/40 {
|
||
background-color: #f8fafc !important;
|
||
}
|
||
|
||
/* border-slate-700 in modal context */
|
||
:root.light .border-slate-700 {
|
||
border-color: var(--border) !important;
|
||
}
|
||
|
||
/* ── Login / Register pages ───────────────────────────────────── */
|
||
:root.light .min-h-screen.bg-\[\#0B0F19\] {
|
||
background-color: var(--bg) !important;
|
||
}
|
||
|
||
:root.light .bg-slate-950\/80 {
|
||
background-color: rgba(255, 255, 255, 0.9) !important;
|
||
border-color: var(--border) !important;
|
||
}
|
||
|
||
/* ── Code / terminal blocks - always dark ─────────────────────── */
|
||
:root.light pre,
|
||
:root.light code,
|
||
:root.light .font-mono.bg-slate-950 {
|
||
background-color: #0d1117 !important;
|
||
color: #00f0ff !important;
|
||
border-color: #1f242c !important;
|
||
}
|
||
|
||
:root.light pre *,
|
||
:root.light code * {
|
||
color: inherit !important;
|
||
}
|
||
|
||
/* ── Settings page – blue (Entra ID) tokens ─────────────────────── */
|
||
:root.light .bg-blue-950\/60,
|
||
:root.light .bg-blue-950\/50,
|
||
:root.light .bg-blue-950\/40 {
|
||
background-color: #dbeafe !important;
|
||
border-color: #93c5fd !important;
|
||
color: #1d4ed8 !important;
|
||
}
|
||
|
||
:root.light .border-blue-900\/50,
|
||
:root.light .border-blue-900\/40 {
|
||
border-color: #93c5fd !important;
|
||
}
|
||
|
||
:root.light .text-blue-400 {
|
||
color: #1d4ed8 !important;
|
||
}
|
||
|
||
/* ── AirIT badge - always white text on navy, regardless of theme ─ */
|
||
.airit-badge {
|
||
color: #ffffff !important;
|
||
background-color: var(--airit-navy) !important;
|
||
}
|
||
|
||
/* ── Text selection ───────────────────────────────────────────── */
|
||
:root.light ::selection {
|
||
background-color: rgba(5, 150, 105, 0.2) !important;
|
||
color: #047857 !important;
|
||
}
|
||
|
||
/* ── Reservation Details Modal (BookingDetailsModal) ──────────── */
|
||
|
||
/* Device node cards inside right panel */
|
||
:root.light #booking-details-modal .bg-slate-950\/65 {
|
||
background-color: #f8fafc !important;
|
||
border-color: var(--border) !important;
|
||
}
|
||
|
||
/* Developer panel wrapper - restore dark terminal feel */
|
||
:root.light #booking-details-modal .font-mono.bg-slate-950 {
|
||
background-color: #0d1117 !important;
|
||
color: #c9d1d9 !important;
|
||
border-color: #30363d !important;
|
||
}
|
||
|
||
/* Terminal output area bg-slate-1000 */
|
||
:root.light #booking-details-modal .bg-slate-1000 {
|
||
background-color: #0d1117 !important;
|
||
color: #c9d1d9 !important;
|
||
border-color: #30363d !important;
|
||
}
|
||
|
||
/* Ansible/terminal button trigger row bg-slate-900/40 - keep readable */
|
||
:root.light #booking-details-modal .bg-slate-900\/40 {
|
||
background-color: #f1f5f9 !important;
|
||
border-color: var(--border) !important;
|
||
color: var(--text) !important;
|
||
}
|
||
|
||
/* ── Reserve Slot selects & date pickers (BookingCalendar) ───── */
|
||
:root.light #booking-actions-card select,
|
||
:root.light #booking-actions-card input[type="text"],
|
||
:root.light #booking-actions-card input[type="date"],
|
||
:root.light #booking-actions-card textarea {
|
||
background-color: #ffffff !important;
|
||
border-color: var(--border-muted) !important;
|
||
color: var(--text) !important;
|
||
}
|
||
|
||
/* Date picker calendar icon - invert to dark in light mode */
|
||
:root.light input[type="date"]::-webkit-calendar-picker-indicator {
|
||
filter: invert(0.6);
|
||
cursor: pointer;
|
||
}
|
||
|
||
/* ── Define Ports dropdowns & Link Builder (LabTemplates modal) ── */
|
||
|
||
/* Non-standard text/border classes used in the link builder */
|
||
:root.light .text-slate-250 {
|
||
color: var(--text) !important;
|
||
}
|
||
|
||
:root.light .border-slate-805 {
|
||
border-color: var(--border) !important;
|
||
}
|
||
|
||
/* Selects and inputs inside any fixed modal overlay */
|
||
:root.light .fixed.inset-0 select,
|
||
:root.light .fixed.inset-0 input[type="text"],
|
||
:root.light .fixed.inset-0 input[type="email"],
|
||
:root.light .fixed.inset-0 input[type="password"],
|
||
:root.light .fixed.inset-0 input[type="date"],
|
||
:root.light .fixed.inset-0 textarea {
|
||
background-color: #ffffff !important;
|
||
border-color: var(--border-muted) !important;
|
||
color: var(--text) !important;
|
||
}
|
||
|
||
/* Link row items inside modal */
|
||
:root.light .fixed.inset-0 .bg-slate-950.font-mono {
|
||
background-color: #f8fafc !important;
|
||
border-color: var(--border) !important;
|
||
color: var(--text) !important;
|
||
}
|
||
|
||
/* "Add Link" button - keep readable white label on indigo in light mode
|
||
(the global :root.light .text-white override would otherwise darken it) */
|
||
:root.light #add-link-btn {
|
||
background-color: #4f46e5 !important;
|
||
color: #ffffff !important;
|
||
}
|
||
|
||
:root.light #add-link-btn:hover {
|
||
background-color: #6366f1 !important;
|
||
}
|