feat(appearance): Sahara theme

Built from the three sands an operator sent: #faf6eb for panels, #e8dfca
for the page behind them, #ddd2ba for toolbars, table headers and rows.
The ordering is what makes it work — a panel reads as lifted off the page
and the log grid as settled into it, so rows stay scannable without extra
rules. Ink is a deep warm brown; pure black on sand glares.
This commit is contained in:
2026-08-13 18:18:52 +02:00
parent 380472bda8
commit ab0db0ef3a
5 changed files with 85 additions and 8 deletions
+75 -1
View File
@@ -775,6 +775,79 @@
color-scheme: light;
}
/* ---- Theme 1e: Sahara — warm sand, from an operator's own palette ---------
Three sands, lightest to darkest: panels sit on #faf6eb, the page behind them
on #e8dfca, and toolbars, table headers and rows on #ddd2ba. The order is the
point — a panel must read as lifted OFF the page, and the log grid as settled
INTO it, which is what makes rows scannable without lines everywhere.
Ink is a deep warm brown rather than black: pure black on sand glares. ---- */
[data-theme="sahara"] {
--background: #e8dfca; /* sand — the page */
--foreground: #2b2318; /* deep warm brown-ink */
--card: #faf6eb; /* lifted panel / entry strip */
--card-foreground: #2b2318;
--popover: #faf6eb;
--popover-foreground: #2b2318;
--primary: #b45309; /* burnt sienna */
--primary-foreground: #fffbf2;
--secondary: #ddd2ba;
--secondary-foreground: #2b2318;
--muted: #ddd2ba; /* toolbars / table headers — the darkest sand */
--muted-foreground: #5c503c; /* readable on both sands */
--accent: #ecd9b8; /* warm highlight */
--accent-foreground: #6b3a06;
--destructive: #b91c1c;
--destructive-foreground: #ffffff;
--destructive-muted: #fdecec;
--destructive-muted-foreground: #b91c1c;
--border: #c9bc9e; /* sand a step down again, so edges read */
--input: #c9bc9e;
--ring: #d97706; /* amber focus ring */
--success: #15803d;
--success-foreground: #ffffff;
--success-muted: #dcf3e1;
--success-muted-foreground: #14532d;
--success-border: #86d99f;
--warning: #b45309;
--warning-foreground: #ffffff;
--warning-muted: #fbeacd;
--warning-muted-foreground: #7c3d05;
--warning-border: #e8b96a;
--caution: #a16207;
--caution-foreground: #1c1917;
--caution-muted: #f7edcb;
--caution-muted-foreground: #713f12;
--caution-border: #e0c069;
--danger: #be123c;
--danger-foreground: #ffffff;
--danger-muted: #fbe3e8;
--danger-muted-foreground: #9f1239;
--danger-border: #ee9aac;
--info: #0369a1;
--info-foreground: #ffffff;
--info-muted: #e0eef6;
--info-muted-foreground: #075985;
--info-border: #86c5e4;
/* Band/mode matrix — the app's blues kept, on a sand neutral so an empty slot
recedes into the grid instead of punching a hole in it. */
--mx-call-conf: #15803d;
--mx-call-work: #7fd6a4;
--mx-dx-conf: #3730a3;
--mx-dx-work: #a5b4fc;
--mx-none: #ddd2ba;
--scrollbar-thumb: #c0b193;
--scrollbar-thumb-hover: #a89676;
--card-shadow: 0 1px 2px rgba(43, 35, 24, 0.07), 0 0 0 1px rgba(43, 35, 24, 0.03);
color-scheme: light;
}
/* ── Data-viz palette (Statistics dashboard) ────────────────────────────────
A VALIDATED categorical palette, not hand-picked: the slot ORDER is what makes
it colour-blind-safe (worst adjacent ΔE 24.2 light / 10.3 dark), so never
@@ -793,7 +866,8 @@
[data-theme="light-warm"],
[data-theme="light-cool"],
[data-theme="light-sage"],
[data-theme="light-nordic"] {
[data-theme="light-nordic"],
[data-theme="sahara"] {
--chart-1: #2a78d6; /* blue — default single-series hue */
--chart-2: #1baf7a; /* aqua */
--chart-3: #eda100; /* yellow */