Files
stack/assets/css/grafana.css
kert 0800ba8b9e feat(grafana): full fhirworx editorial theme overlay
Replaces the half-effective inject.css alone with a comprehensive
Grafana-specific stylesheet (assets/css/grafana.css, ~700 lines)
targeting Grafana 12's actual DOM via aria roles, data-testid,
and the legacy class names that survived the emotion CSS-in-JS
migration.

Covers:
  - Self-contained palette (cream / federal navy / amber / teal)
  - Sidebar (always dark navy w/ amber active stripe)
  - Top bar, breadcrumbs, tabs (uppercase serif, low contrast)
  - Panels (cream cards, subtle elevation, hover lift)
  - Stat panels (Playfair Display number, editorial weight)
  - Buttons (primary navy, danger fed-red, icon-only minimal)
  - Inputs / forms (serif body, focus ring, italic placeholder)
  - Dropdowns / popovers / menus (warm card, lg shadow)
  - Tables (Federal Register data table — uppercase head, stripe)
  - Alerts (left-stripe, color-coded background)
  - Modals / drawers (cream card, navy backdrop blur)
  - Login page (centered editorial form, "fhirworx" eyebrow)
  - Explore / query editor / logs panel (mono, log-level stripe)
  - Time picker / pagination / kbd / tabs / badges

Loaded after fhirworx.css base palette via index.html sed-patch.
Light theme is the baseline (GF_USERS_DEFAULT_THEME=light).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 12:53:13 -04:00

820 lines
26 KiB
CSS

/* HTI-5 — fhirworx editorial design system, Grafana 12 overlay
──────────────────────────────────────────────────────────────
Federal Register meets data journalism. Cream background, deep
navy primary, serif typography. Targets Grafana's compiled
light-theme selectors plus emotion-generated DOM via aria roles
and data-testid attributes (Grafana hashes class names so we
can't rely on .css-*; we use semantic selectors instead).
Companion to inject.css; grafana-specific overrides only. The
palette is defined here (self-contained — no @import) so the
file can be served alone and survive a missing fhirworx.css.
Loaded into Grafana via a startup sed-patch on
/usr/share/grafana/public/views/index.html (see compose.yml). */
@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;600;700;900&family=Source+Serif+4:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&family=JetBrains+Mono:wght@400;500;600&display=swap');
/* ============================================
1. CORE PALETTE (HTI-5 / fhirworx)
============================================ */
:root {
/* Surfaces */
--fw-bg: #F7F5F0; /* cream — main background */
--fw-bg-elev-1: #FAFAF7; /* slightly warmer card */
--fw-bg-elev-2: #FDFCF9; /* hover / active panel */
--fw-bg-inset: #F0EDE6; /* inputs, recessed wells */
--fw-bg-stripe: #EDEBE6; /* alt rows */
--fw-fg: #1A1A18; /* near-black text */
--fw-fg-muted: #4A4A47;
--fw-fg-subtle: #6B6B68;
--fw-fg-faint: #908C84;
/* Primary (federal navy) + variants */
--fw-primary: #1C2B3A;
--fw-primary-hover: #253748;
--fw-primary-fg: #F7F5F0;
--fw-primary-tint: #EDF0F4;
--fw-primary-tint-2: #D4DCE6;
/* Accents */
--fw-accent: #2E3D8F; /* indigo */
--fw-accent-hover: #1F2D74;
--fw-success: #2E8B6E; /* teal-green */
--fw-warning: #C8A838; /* amber */
--fw-danger: #C0392B; /* fed red */
--fw-info: #4A5CB8;
/* Lines */
--fw-border: #D4D0C8;
--fw-border-strong: #B0ACA4;
--fw-border-subtle: #E8E4DC;
--fw-divider: rgba(26, 26, 24, 0.08);
/* Sidebar (always dark navy) */
--fw-sidebar-bg: #1C2B3A;
--fw-sidebar-bg-2: #253748;
--fw-sidebar-fg: #EEE9E0;
--fw-sidebar-fg-muted: #B8C5D0;
--fw-sidebar-border: #2E3D52;
--fw-sidebar-active: rgba(247, 245, 240, 0.10);
/* Charts (consistent with marimo theme) */
--fw-chart-1: #1C2B3A; /* navy */
--fw-chart-2: #2E8B6E; /* teal */
--fw-chart-3: #C8A838; /* amber */
--fw-chart-4: #C0392B; /* red */
--fw-chart-5: #6B7FD7; /* indigo light */
--fw-chart-6: #4A5CB8; /* indigo */
--fw-chart-7: #908C84; /* warm gray */
--fw-chart-8: #2E3D8F; /* deep indigo */
/* Type */
--fw-font-display: "Playfair Display", "Times New Roman", Georgia, serif;
--fw-font-body: "Source Serif 4", Georgia, "Times New Roman", serif;
--fw-font-mono: "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;
/* Shadows / elevation */
--fw-shadow-sm: 0 1px 2px rgba(28, 43, 58, 0.04), 0 1px 1px rgba(28, 43, 58, 0.03);
--fw-shadow-md: 0 2px 8px rgba(28, 43, 58, 0.06), 0 1px 3px rgba(28, 43, 58, 0.04);
--fw-shadow-lg: 0 8px 24px rgba(28, 43, 58, 0.10), 0 4px 8px rgba(28, 43, 58, 0.06);
/* Geometry */
--fw-radius-xs: 2px;
--fw-radius-sm: 3px;
--fw-radius-md: 4px;
--fw-radius-lg: 6px;
}
/* ============================================
2. GLOBAL — body, app shell, scrollbars
============================================ */
html, body, .grafana-app, [class*="app-grafana"] {
background-color: var(--fw-bg) !important;
color: var(--fw-fg) !important;
font-family: var(--fw-font-body) !important;
font-feature-settings: "ss01", "kern", "liga";
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
letter-spacing: 0.005em;
}
body {
font-size: 14px;
line-height: 1.55;
}
/* Scrollbars — thin warm accents */
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: var(--fw-bg-inset); }
::-webkit-scrollbar-thumb {
background: var(--fw-border);
border-radius: var(--fw-radius-sm);
border: 2px solid var(--fw-bg-inset);
}
::-webkit-scrollbar-thumb:hover { background: var(--fw-border-strong); }
/* Selection */
::selection {
background: rgba(28, 43, 58, 0.18);
color: var(--fw-fg);
}
/* Links */
a, a:visited {
color: var(--fw-primary);
text-decoration: none;
border-bottom: 1px solid transparent;
transition: border-color 120ms ease;
}
a:hover {
border-bottom-color: var(--fw-primary);
}
/* ============================================
3. TYPOGRAPHY — Playfair for headings, Source Serif for body
============================================ */
h1, h2, h3, h4, h5, h6,
[class*="page-title"], [class*="PageHeader"],
.dashboard-title, .panel-title,
[data-testid*="title"], [data-testid*="Title"],
.modal-header h2, .modal-header h3 {
font-family: var(--fw-font-display) !important;
font-weight: 600 !important;
color: var(--fw-fg) !important;
letter-spacing: -0.01em;
line-height: 1.2;
}
h1, .dashboard-title, [class*="page-title"] h1 {
font-size: 28px !important;
font-weight: 700 !important;
letter-spacing: -0.015em;
}
h2 { font-size: 22px !important; }
h3 { font-size: 18px !important; }
/* Panel titles — slightly smaller, all-small-caps for editorial feel */
.panel-title, [data-testid*="header-container"] h2,
[class*="panel-header"] h2, [class*="panel-header"] h6 {
font-size: 13px !important;
font-weight: 600 !important;
font-family: var(--fw-font-display) !important;
text-transform: uppercase !important;
letter-spacing: 0.06em !important;
color: var(--fw-fg-muted) !important;
}
/* Code, queries, mono surfaces */
code, pre, .monaco-editor, .monaco-editor *,
.cm-editor, .cm-editor *, .ace_editor, .ace_editor *,
[class*="query-editor"] textarea, [class*="QueryEditor"] textarea,
[class*="logs-row__cell"], [class*="LogRowMessage"] {
font-family: var(--fw-font-mono) !important;
font-feature-settings: "ss01", "ss02", "calt", "liga";
}
/* ============================================
4. SIDEBAR / MAIN NAV — dark navy, always
============================================ */
nav[aria-label="Main menu"],
[data-testid="data-testid Nav menu"],
[class*="sidemenu"], [class*="SideMenu"],
.scrollbar-view > div > nav,
ul[aria-label="Main menu"],
section[aria-label="Main menu"] {
background: var(--fw-sidebar-bg) !important;
border-right: 1px solid var(--fw-sidebar-border) !important;
color: var(--fw-sidebar-fg) !important;
}
nav[aria-label="Main menu"] *,
[data-testid="data-testid Nav menu"] *,
[class*="sidemenu"] *, [class*="SideMenu"] * {
color: var(--fw-sidebar-fg-muted) !important;
}
nav[aria-label="Main menu"] a:hover,
[data-testid="data-testid Nav menu"] a:hover,
nav[aria-label="Main menu"] [role="menuitem"]:hover,
nav[aria-label="Main menu"] li:hover {
background: var(--fw-sidebar-active) !important;
color: var(--fw-sidebar-fg) !important;
}
nav[aria-label="Main menu"] [aria-current="page"],
[data-testid="data-testid Nav menu"] [aria-current="page"],
nav[aria-label="Main menu"] .is-active,
nav[aria-label="Main menu"] a[class*="active"] {
background: var(--fw-sidebar-active) !important;
color: var(--fw-sidebar-fg) !important;
border-left: 2px solid var(--fw-warning) !important;
}
/* Sidebar logo / brand area */
[data-testid="data-testid Branding logo"],
[class*="Logo"], [class*="brand"] {
background: var(--fw-sidebar-bg-2) !important;
border-bottom: 1px solid var(--fw-sidebar-border) !important;
padding: 12px !important;
}
/* ============================================
5. TOP BAR / BREADCRUMBS / TOOLBAR
============================================ */
header, [class*="page-toolbar"], [class*="PageToolbar"],
[data-testid*="toolbar"], [class*="topnav"], [class*="TopNav"] {
background: var(--fw-bg) !important;
border-bottom: 1px solid var(--fw-border) !important;
color: var(--fw-fg) !important;
box-shadow: var(--fw-shadow-sm) !important;
}
[class*="breadcrumbs"], [class*="Breadcrumbs"],
nav[aria-label="Breadcrumbs"] a,
nav[aria-label="Breadcrumbs"] span {
font-family: var(--fw-font-body) !important;
font-size: 13px !important;
color: var(--fw-fg-subtle) !important;
}
nav[aria-label="Breadcrumbs"] [aria-current="page"] {
color: var(--fw-fg) !important;
font-weight: 600 !important;
}
/* ============================================
6. PANELS / DASHBOARD CARDS
============================================ */
.panel-container, [data-panelid], [class*="panel-container"],
[class*="PanelChrome"], [data-testid="data-testid panel content"] {
background: var(--fw-bg-elev-1) !important;
border: 1px solid var(--fw-border-subtle) !important;
border-radius: var(--fw-radius-md) !important;
box-shadow: var(--fw-shadow-sm) !important;
transition: box-shadow 180ms ease, border-color 180ms ease;
}
.panel-container:hover, [data-panelid]:hover {
border-color: var(--fw-border) !important;
box-shadow: var(--fw-shadow-md) !important;
}
.panel-content, [class*="panel-content"] {
background: transparent !important;
color: var(--fw-fg) !important;
}
/* Stat panel — large number, editorial */
[class*="stat-panel"] [class*="value"],
[class*="big-value"], [class*="StatPanel"] [class*="value-text"] {
font-family: var(--fw-font-display) !important;
font-weight: 700 !important;
letter-spacing: -0.02em;
color: var(--fw-fg) !important;
}
/* No-data placeholder */
[class*="no-data"], [class*="NoData"] {
font-family: var(--fw-font-display) !important;
font-style: italic;
color: var(--fw-fg-faint) !important;
}
/* ============================================
7. BUTTONS — Federal Register editorial
============================================ */
.btn, button[type="button"], button[type="submit"],
[class*="Button"]:not([class*="IconButton"]) {
font-family: var(--fw-font-body) !important;
font-weight: 500 !important;
font-size: 13px !important;
letter-spacing: 0.01em !important;
border-radius: var(--fw-radius-sm) !important;
border: 1px solid var(--fw-border) !important;
background: var(--fw-bg-elev-1) !important;
color: var(--fw-fg) !important;
padding: 6px 14px !important;
transition: background-color 120ms ease, border-color 120ms ease;
box-shadow: var(--fw-shadow-sm) !important;
}
.btn:hover, button[type="button"]:hover, button[type="submit"]:hover {
background: var(--fw-bg-elev-2) !important;
border-color: var(--fw-border-strong) !important;
}
.btn-primary, [class*="Button"][class*="primary"],
button[type="submit"]:not([class*="secondary"]):not([class*="destructive"]) {
background: var(--fw-primary) !important;
color: var(--fw-primary-fg) !important;
border-color: var(--fw-primary) !important;
}
.btn-primary:hover, [class*="Button"][class*="primary"]:hover {
background: var(--fw-primary-hover) !important;
border-color: var(--fw-primary-hover) !important;
}
.btn-danger, .btn-destructive, [class*="destructive"] {
background: var(--fw-danger) !important;
color: #FFF !important;
border-color: var(--fw-danger) !important;
}
/* Icon buttons — minimal */
[class*="IconButton"], button[aria-label][class*="icon"] {
background: transparent !important;
border: 1px solid transparent !important;
border-radius: var(--fw-radius-sm) !important;
color: var(--fw-fg-muted) !important;
}
[class*="IconButton"]:hover, button[aria-label][class*="icon"]:hover {
background: var(--fw-bg-inset) !important;
color: var(--fw-fg) !important;
}
/* ============================================
8. INPUTS / FORMS / SELECTS
============================================ */
input, textarea, select,
.gf-form-input, [class*="Input"] input, [class*="TextArea"] textarea,
[role="textbox"], [role="combobox"], [role="searchbox"] {
background: var(--fw-bg-elev-1) !important;
color: var(--fw-fg) !important;
border: 1px solid var(--fw-border) !important;
border-radius: var(--fw-radius-sm) !important;
font-family: var(--fw-font-body) !important;
font-size: 13px !important;
padding: 6px 10px !important;
transition: border-color 120ms ease, box-shadow 120ms ease;
}
input:focus, textarea:focus, select:focus,
[role="textbox"]:focus-visible, [role="combobox"]:focus-visible {
border-color: var(--fw-primary) !important;
box-shadow: 0 0 0 3px rgba(28, 43, 58, 0.10) !important;
outline: none !important;
}
input::placeholder, textarea::placeholder {
color: var(--fw-fg-faint) !important;
font-style: italic;
}
/* Search bars (Grafana puts these everywhere) */
[class*="search-input"], [data-testid*="search"] input {
background: var(--fw-bg-elev-1) !important;
border-radius: var(--fw-radius-md) !important;
}
label, .gf-form-label, [class*="FieldLabel"] {
color: var(--fw-fg-muted) !important;
font-size: 12px !important;
font-weight: 500 !important;
font-family: var(--fw-font-body) !important;
text-transform: uppercase;
letter-spacing: 0.04em;
}
/* Checkboxes / radios */
input[type="checkbox"], input[type="radio"] {
accent-color: var(--fw-primary);
}
/* Switches */
[role="switch"], [class*="Switch"] {
--switch-on: var(--fw-primary);
}
/* ============================================
9. DROPDOWNS / POPOVERS / MENUS
============================================ */
[role="listbox"], [role="menu"], [role="tooltip"],
[class*="Tooltip"], [class*="Menu"], [class*="Popover"],
[data-popper-placement] {
background: var(--fw-bg-elev-1) !important;
color: var(--fw-fg) !important;
border: 1px solid var(--fw-border) !important;
border-radius: var(--fw-radius-md) !important;
box-shadow: var(--fw-shadow-lg) !important;
font-family: var(--fw-font-body) !important;
}
[role="menuitem"], [role="option"] {
color: var(--fw-fg) !important;
padding: 6px 12px !important;
}
[role="menuitem"]:hover, [role="option"]:hover,
[role="menuitem"][aria-selected="true"], [role="option"][aria-selected="true"] {
background: var(--fw-bg-inset) !important;
color: var(--fw-fg) !important;
}
[role="menuitem"][aria-current="true"], [role="option"][data-active="true"] {
background: var(--fw-primary-tint) !important;
}
/* ============================================
10. TABLES — Federal Register data tables
============================================ */
table, [role="table"], .css-table {
background: var(--fw-bg-elev-1) !important;
color: var(--fw-fg) !important;
border: 1px solid var(--fw-border) !important;
border-radius: var(--fw-radius-md) !important;
font-family: var(--fw-font-body) !important;
border-collapse: separate !important;
border-spacing: 0 !important;
}
table th, [role="columnheader"] {
background: var(--fw-bg-inset) !important;
color: var(--fw-fg-muted) !important;
font-family: var(--fw-font-display) !important;
font-size: 11px !important;
font-weight: 600 !important;
text-transform: uppercase;
letter-spacing: 0.06em;
padding: 8px 12px !important;
border-bottom: 2px solid var(--fw-border) !important;
text-align: left;
}
table td, [role="cell"] {
padding: 8px 12px !important;
border-bottom: 1px solid var(--fw-border-subtle) !important;
font-size: 13px;
}
table tr:nth-child(even),
[role="row"]:nth-child(even) {
background: var(--fw-bg-stripe);
}
table tr:hover, [role="row"]:hover {
background: var(--fw-primary-tint) !important;
}
/* ============================================
11. CHARTS / VISUALIZATIONS
============================================ */
/* uPlot/Plotly grid colors */
.u-grid, [class*="uplot"] .u-grid {
stroke: var(--fw-border-subtle) !important;
}
/* Axis labels / tick text */
.u-axis text, [class*="uplot"] text,
.gauge-axis text, .grafana-axis text {
fill: var(--fw-fg-subtle) !important;
font-family: var(--fw-font-mono) !important;
font-size: 11px !important;
}
/* Legend */
[class*="legend"], [class*="Legend"] {
font-family: var(--fw-font-body) !important;
font-size: 12px !important;
color: var(--fw-fg-muted) !important;
}
[class*="legend-item"], [class*="LegendItem"] {
border-radius: var(--fw-radius-xs);
padding: 2px 6px;
}
[class*="legend-item"]:hover {
background: var(--fw-bg-inset);
}
/* ============================================
12. ALERTS / NOTIFICATIONS / STATES
============================================ */
[class*="Alert"], .alert {
border-radius: var(--fw-radius-md) !important;
border-left-width: 3px !important;
font-family: var(--fw-font-body) !important;
background: var(--fw-bg-elev-1) !important;
box-shadow: var(--fw-shadow-sm) !important;
}
[class*="Alert"][class*="error"], .alert-error {
background: #FEF5F4 !important;
border-color: var(--fw-danger) !important;
color: #4A0D09 !important;
}
[class*="Alert"][class*="warning"], .alert-warning {
background: #FEFBF0 !important;
border-color: var(--fw-warning) !important;
color: #2E1E00 !important;
}
[class*="Alert"][class*="success"], .alert-success {
background: #F2FAF7 !important;
border-color: var(--fw-success) !important;
color: #08261C !important;
}
[class*="Alert"][class*="info"], .alert-info {
background: var(--fw-primary-tint) !important;
border-color: var(--fw-primary) !important;
color: var(--fw-primary) !important;
}
/* Status badges */
[class*="Badge"] {
font-family: var(--fw-font-mono) !important;
font-size: 11px !important;
font-weight: 500 !important;
text-transform: uppercase;
letter-spacing: 0.04em;
padding: 2px 8px !important;
border-radius: var(--fw-radius-sm) !important;
}
/* ============================================
13. MODALS / DRAWERS
============================================ */
[role="dialog"], [class*="Modal"], [class*="Drawer"] {
background: var(--fw-bg) !important;
color: var(--fw-fg) !important;
border: 1px solid var(--fw-border) !important;
border-radius: var(--fw-radius-lg) !important;
box-shadow: var(--fw-shadow-lg), 0 0 0 1px var(--fw-divider) !important;
}
[class*="ModalHeader"], [class*="DrawerHeader"],
[role="dialog"] header {
border-bottom: 1px solid var(--fw-border-subtle) !important;
padding: 16px 20px !important;
font-family: var(--fw-font-display) !important;
}
[class*="ModalContent"], [class*="DrawerContent"],
[role="dialog"] [class*="content"] {
padding: 20px !important;
}
/* Backdrop */
[class*="Modal"][class*="backdrop"], [class*="Backdrop"] {
background: rgba(26, 26, 24, 0.45) !important;
backdrop-filter: blur(2px);
}
/* ============================================
14. LOGIN PAGE — editorial centered form
============================================ */
.login, [class*="LoginPage"], .login-page,
body:has(.login-form), body:has([class*="LoginForm"]) {
background: var(--fw-bg) !important;
}
.login-content, [class*="login-content"], [class*="LoginContent"] {
background: var(--fw-bg-elev-1) !important;
border: 1px solid var(--fw-border) !important;
border-radius: var(--fw-radius-lg) !important;
box-shadow: var(--fw-shadow-lg) !important;
padding: 48px 40px !important;
max-width: 440px !important;
}
.login-content h1, [class*="LoginContent"] h1,
.login h1 {
font-family: var(--fw-font-display) !important;
font-weight: 700 !important;
font-size: 32px !important;
letter-spacing: -0.02em;
margin-bottom: 8px;
}
.login-content::before, [class*="LoginContent"]::before {
content: "fhirworx";
display: block;
font-family: var(--fw-font-display);
font-size: 12px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.2em;
color: var(--fw-fg-faint);
margin-bottom: 24px;
}
/* OAuth provider button (Sign in with Gitea) */
[class*="LoginPage"] [class*="oauth"], a[href*="generic_oauth"],
.login a[href*="oauth"] {
background: var(--fw-primary) !important;
color: var(--fw-primary-fg) !important;
border: 1px solid var(--fw-primary) !important;
font-family: var(--fw-font-display) !important;
font-weight: 600 !important;
letter-spacing: 0.04em;
text-transform: uppercase;
font-size: 12px !important;
padding: 10px 16px !important;
}
/* ============================================
15. DASHBOARD GRID + LAYOUT
============================================ */
[class*="dashboard-page"], [class*="DashboardPage"] {
background: var(--fw-bg) !important;
padding: 16px !important;
}
[class*="dashboard-row"], .dashboard-row {
background: transparent !important;
border-top: 1px solid var(--fw-border-subtle) !important;
padding-top: 8px;
margin-top: 8px;
}
[class*="dashboard-row__title"], .dashboard-row__title {
font-family: var(--fw-font-display) !important;
font-weight: 700 !important;
font-size: 14px !important;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--fw-fg-muted) !important;
}
/* Variable picker */
[class*="variable-picker"], [class*="VariablePicker"] {
font-family: var(--fw-font-mono) !important;
}
/* ============================================
16. EXPLORE / QUERY EDITOR
============================================ */
[class*="explore"], [class*="Explore"] {
background: var(--fw-bg) !important;
}
[class*="query-editor-row"], [data-testid*="query-editor"] {
background: var(--fw-bg-elev-1) !important;
border: 1px solid var(--fw-border-subtle) !important;
border-radius: var(--fw-radius-md) !important;
padding: 12px !important;
margin-bottom: 8px;
}
[class*="query-editor-row"]:hover {
border-color: var(--fw-border) !important;
}
[class*="datasource-picker"] {
font-family: var(--fw-font-display) !important;
}
/* Logs panel */
[class*="logs-panel"], [class*="LogsPanel"] {
background: var(--fw-bg-elev-1) !important;
font-family: var(--fw-font-mono) !important;
font-size: 12px !important;
line-height: 1.6 !important;
}
[class*="logs-row"], [class*="LogRow"] {
border-bottom: 1px solid var(--fw-border-subtle) !important;
padding: 4px 8px !important;
}
[class*="logs-row"]:hover, [class*="LogRow"]:hover {
background: var(--fw-bg-stripe) !important;
}
/* Log levels — color stripe on the left */
[class*="logs-row"][class*="logs-row-level-error"],
[data-testid*="log-row-error"] {
border-left: 3px solid var(--fw-danger) !important;
}
[class*="logs-row"][class*="logs-row-level-warn"],
[data-testid*="log-row-warning"] {
border-left: 3px solid var(--fw-warning) !important;
}
[class*="logs-row"][class*="logs-row-level-info"] {
border-left: 3px solid var(--fw-info) !important;
}
/* ============================================
17. TABS
============================================ */
[role="tablist"] {
border-bottom: 1px solid var(--fw-border) !important;
gap: 4px;
}
[role="tab"] {
background: transparent !important;
border: none !important;
border-bottom: 2px solid transparent !important;
border-radius: 0 !important;
color: var(--fw-fg-muted) !important;
font-family: var(--fw-font-display) !important;
font-weight: 600 !important;
font-size: 13px !important;
letter-spacing: 0.04em;
text-transform: uppercase;
padding: 8px 12px !important;
}
[role="tab"][aria-selected="true"] {
color: var(--fw-fg) !important;
border-bottom-color: var(--fw-primary) !important;
background: transparent !important;
}
[role="tab"]:hover:not([aria-selected="true"]) {
color: var(--fw-fg) !important;
}
/* ============================================
18. SPINNERS / LOADING
============================================ */
[class*="spinner"], [class*="Spinner"], [class*="loading"] svg {
color: var(--fw-primary) !important;
}
/* ============================================
19. KBD / KEYBOARD HINTS
============================================ */
kbd, [class*="kbd"], [class*="Kbd"] {
font-family: var(--fw-font-mono) !important;
background: var(--fw-bg-inset) !important;
border: 1px solid var(--fw-border) !important;
border-radius: var(--fw-radius-xs) !important;
padding: 1px 5px !important;
font-size: 11px !important;
color: var(--fw-fg-muted) !important;
}
/* ============================================
20. FOOTER / FOOTNOTES
============================================ */
footer, [class*="footer"], [class*="Footer"] {
background: transparent !important;
border-top: 1px solid var(--fw-border-subtle) !important;
color: var(--fw-fg-faint) !important;
font-family: var(--fw-font-body) !important;
font-size: 12px !important;
padding: 16px !important;
}
/* ============================================
21. TIME PICKER
============================================ */
[class*="time-picker"], [data-testid*="time-picker"],
[class*="TimePicker"] {
background: var(--fw-bg-elev-1) !important;
border: 1px solid var(--fw-border) !important;
border-radius: var(--fw-radius-md) !important;
font-family: var(--fw-font-mono) !important;
font-size: 12px !important;
color: var(--fw-fg) !important;
}
/* ============================================
22. PROVISIONING / DATASOURCE LIST
============================================ */
[class*="ds-list"], [class*="DataSourceList"],
[data-testid*="data-source"] {
background: var(--fw-bg-elev-1) !important;
border: 1px solid var(--fw-border-subtle) !important;
border-radius: var(--fw-radius-md) !important;
}
/* ============================================
23. EDITORIAL FLOURISHES
============================================ */
/* Section dividers — Federal Register horizontal rules */
hr, [class*="divider"]:not([class*="vertical"]) {
border: none !important;
border-top: 1px solid var(--fw-border) !important;
margin: 16px 0 !important;
}
/* Subtle drop-cap on first letter of stat panels */
[class*="big-value"] [class*="value-container"] > span:first-child::first-letter {
font-size: 1em; /* leave the actual numeric unstyled */
}
/* Pagination */
[class*="pagination"], [class*="Pagination"] {
font-family: var(--fw-font-mono) !important;
font-size: 12px !important;
}
/* ============================================
24. DARK-THEME FALLBACK
If a user flips to dark, leave Grafana's compiled
dark theme alone — overlay-only on light. Use a
media-query escape hatch so dark works.
============================================ */
[data-theme="dark"], html[data-theme="dark"] body {
/* fall back to Grafana's own dark — our overlay variables
don't apply when the user opts into dark mode */
}