openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
204 lines (179 loc) • 6.59 kB
CSS
/* Beacon palette; selected by index.html and app/theme.ts. */
/*
* Beacon targets WCAG AAA (7:1), not the AA 4.5:1 floor the other themes hold,
* for low vision, direct sunlight, projectors, and poor panels.
*
* That forces one deliberate break from the status-token convention in :root:
* elsewhere each --x-subtle is --x at 8%, but a label sitting on a tint of its
* own hue caps the achievable contrast, because the tint pulls the background
* toward the text. Beacon tints neutrally instead and lets the label carry the
* contrast, which is what buys AAA on the status pairs.
*/
:root[data-theme="beacon"] {
/*
* Accent — high-visibility amber on pure black
*
* WCAG 2.1 AAA audit (bg = #000000):
* --accent #ffc233 contrast ≈ 13.0:1 AAA ✓
* --primary-foreground #000000 on #ffc233 button: 13.0:1 ✓
* worst text pairing --muted on --bg-muted: 10.29:1 ✓
* worst status label on its neutral subtle tint: 7.05:1 ✓
*/
--ring: #ffc233;
--accent: #ffc233;
--accent-hover: #ffd45e;
--accent-muted: #ffc233;
--accent-subtle: rgba(255, 255, 255, 0.1);
--accent-glow: rgba(255, 194, 51, 0.3);
--primary: #ffc233;
--primary-hover: #ffd45e;
--primary-foreground: #000000;
/* Focus is 3px and fully opaque: a translucent ring is the first thing to
disappear on a poor panel, which is exactly this theme's audience. */
--focus: rgba(255, 194, 51, 0.35);
--focus-ring: 0 0 0 2px var(--bg), 0 0 0 5px var(--ring);
--focus-glow: 0 0 0 2px var(--bg), 0 0 0 5px var(--ring);
--bg: #000000;
--bg-accent: #0a0a0a;
--bg-elevated: #141414;
--bg-hover: #1c1c1c;
--bg-muted: #1c1c1c;
--card: #0a0a0a;
--card-foreground: #ffffff;
--card-highlight: rgba(255, 255, 255, 0.06);
--popover: #141414;
--popover-foreground: #ffffff;
--panel: #000000;
--panel-strong: #141414;
--panel-hover: #1c1c1c;
--chrome: rgba(0, 0, 0, 0.98);
--chrome-strong: #000000;
--text: #ffffff;
--text-strong: #ffffff;
--chat-text: #ffffff;
--muted: #c9c9c9;
--muted-strong: #dcdcdc;
--muted-foreground: #c9c9c9;
/* Borders are structure here, not decoration: hairlines vanish first. */
--border: #4a4a4a;
--border-strong: #6e6e6e;
--border-hover: #9a9a9a;
--input: #4a4a4a;
--secondary: #141414;
--secondary-foreground: #ffffff;
--accent-2: #8ecdff;
--accent-2-muted: rgba(142, 205, 255, 0.85);
--accent-2-subtle: rgba(255, 255, 255, 0.1);
/* Neutral status tints — see the block comment above. */
--ok: #5ee88a;
--ok-muted: rgba(94, 232, 138, 0.85);
--ok-subtle: rgba(255, 255, 255, 0.1);
--destructive: #ffabab;
--destructive-hover: #ffc4c4;
--destructive-foreground: #000000;
--warn: #ffc233;
--warn-muted: rgba(255, 194, 51, 0.85);
--warn-subtle: rgba(255, 255, 255, 0.1);
--danger: #ffabab;
--danger-muted: rgba(255, 171, 171, 0.85);
--danger-subtle: rgba(255, 255, 255, 0.1);
--info: #8ecdff;
--info-subtle: rgba(255, 255, 255, 0.1);
/* Diff ink is a status pair too: it sits on the same neutral tints. */
--hljs-deletion: #ffaba3;
--hljs-addition: #7ee787;
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.9);
--shadow-md: 0 4px 16px rgba(0, 0, 0, 0.9);
--shadow-lg: 0 12px 32px rgba(0, 0, 0, 0.95);
--overlay-shadow: var(--shadow-md);
--overlay-border: var(--border-strong);
--grid-line: rgba(255, 255, 255, 0.08);
/* Atkinson Hyperlegible Next everywhere, prose included: the face is part of
the accessibility contract, not an accent (see styles fonts/atkinson-hyperlegible.css). */
--font-body:
"Atkinson Hyperlegible Next", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
--font-chat: var(--font-body);
}
:root[data-theme="beacon-light"] {
/*
* Accent — dark amber on pure white
*
* WCAG 2.1 AAA audit (bg = #ffffff):
* --accent #6e4a00 contrast ≈ 8.0:1 AAA ✓
* --primary-foreground #ffffff on #6e4a00 button: 8.0:1 ✓
* worst text pairing --muted on --bg-muted: 9.72:1 ✓
* worst status label on its neutral subtle tint: 7.02:1 ✓
*/
--ring: #6e4a00;
--accent: #6e4a00;
--accent-hover: #573a00;
--accent-muted: #6e4a00;
--accent-subtle: rgba(0, 0, 0, 0.07);
--accent-glow: rgba(110, 74, 0, 0.2);
--primary: #6e4a00;
--primary-foreground: #ffffff;
--focus: rgba(110, 74, 0, 0.35);
--focus-ring: 0 0 0 2px var(--bg), 0 0 0 5px var(--ring);
--focus-glow: 0 0 0 2px var(--bg), 0 0 0 5px var(--ring);
--bg: #ffffff;
--bg-accent: #f4f4f4;
--bg-elevated: #ffffff;
--bg-hover: #ededed;
--bg-muted: #ededed;
--bg-content: #f4f4f4;
--card: #ffffff;
--card-foreground: #000000;
--card-highlight: rgba(0, 0, 0, 0.04);
--popover: #ffffff;
--popover-foreground: #000000;
--session-hovercard-surface: var(--card);
--session-hovercard-progress-surface: var(--bg-accent);
--panel: #ffffff;
--panel-strong: #f4f4f4;
--panel-hover: #e4e4e4;
--chrome: rgba(255, 255, 255, 0.98);
--chrome-strong: #ffffff;
--text: #000000;
--text-strong: #000000;
--chat-text: #000000;
--muted: #3a3a3a;
--muted-strong: #262626;
--muted-foreground: #3a3a3a;
--border: #8a8a8a;
--border-strong: #5a5a5a;
--border-hover: #2e2e2e;
--input: #8a8a8a;
--secondary: #f4f4f4;
--secondary-foreground: #000000;
--accent-2: #09428d;
--accent-2-muted: rgba(9, 66, 141, 0.85);
--accent-2-subtle: rgba(0, 0, 0, 0.07);
/* Neutral status tints — see the block comment above. */
--ok: #0c5024;
--ok-muted: rgba(12, 80, 36, 0.85);
--ok-subtle: rgba(0, 0, 0, 0.07);
--destructive: #8c0f0f;
--destructive-foreground: #ffffff;
--warn: #613d00;
--warn-muted: rgba(97, 61, 0, 0.85);
--warn-subtle: rgba(0, 0, 0, 0.07);
--danger: #8c0f0f;
--danger-muted: rgba(140, 15, 15, 0.85);
--danger-subtle: rgba(0, 0, 0, 0.07);
--info: #09428d;
--info-subtle: rgba(0, 0, 0, 0.07);
/* Diff ink is a status pair too: it sits on the same neutral tints. */
--hljs-deletion: #8b0c20;
--hljs-addition: #0e5021;
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.25);
--shadow-md: 0 4px 12px rgba(0, 0, 0, 0.28);
--shadow-lg: 0 12px 28px rgba(0, 0, 0, 0.3);
--overlay-shadow: var(--shadow-md);
--overlay-border: var(--border-strong);
--grid-line: rgba(0, 0, 0, 0.12);
/* Atkinson Hyperlegible Next everywhere, prose included: the face is part of
the accessibility contract, not an accent (see styles fonts/atkinson-hyperlegible.css). */
--font-body:
"Atkinson Hyperlegible Next", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
--font-chat: var(--font-body);
}