@symbion/opalui
Version:
A minimalistic CSS framework
312 lines (278 loc) • 17.6 kB
CSS
/* ==========================================================================
Color System - OpalUI
LCH color space with relative color syntax
========================================================================== */
body {
/* -------------------------------------------------------------------------
Base Color Definitions
These are the source colors that generate the entire palette
------------------------------------------------------------------------- */
--color-primary: lch(35 60 250);
--color-secondary: lch(from var(--color-primary) l calc(c / 2) h);
--color-accent: lch(from var(--color-primary) l c calc(h + 180));
--color-neutral: lch(35 20 250);
--color-error: lch(35 50 25);
--color-warning: lch(35 50 80);
--color-success: lch(35 50 155);
/* -------------------------------------------------------------------------
Opacity Tokens
------------------------------------------------------------------------- */
--op-panel: 1;
--op-button: 1;
--op-disabled: 0.5;
/* WCAG 2 Contrast Recommendations:
minimum for large text: 3:1 (2 levels)
minimum: 4.5:1 (3 levels)
enhanced: 7:1 (4 levels)
*/
/* -------------------------------------------------------------------------
Core UI Colors (always defined, theme-independent)
------------------------------------------------------------------------- */
--col-shadow: lch(0 0 0 / 0.15);
--col-frost: lch(100 0 0 / 0.15);
--col-focus: var(--col-primary);
--col-outline: lch(from var(--color-neutral) l c h / 0.3);
--sh-focus: 0.25rem;
--col-toggle-knob: lch(98 0 0);
/* -------------------------------------------------------------------------
Primary Color Scale
m2, m1 = darker variants; p1-p4 = lighter variants
------------------------------------------------------------------------- */
--col-primary-m2: lch(from var(--col-primary) calc(l - 30) calc(c * 0.3) h);
--col-primary-m1: lch(from var(--col-primary) calc(l - 15) calc(c * 0.8) h);
--col-primary: lch(from var(--color-primary) 35 c h);
--col-primary-p1: lch(from var(--col-primary) calc(l + 15) c h);
--col-primary-p2: lch(from var(--col-primary) calc(l + 30) c h);
--col-primary-p3: lch(from var(--col-primary) calc(l + 45) calc(c * 0.8) h);
--col-primary-p4: lch(from var(--col-primary) calc(l + 60) calc(c * 0.3) h);
/* -------------------------------------------------------------------------
Secondary Color Scale
------------------------------------------------------------------------- */
--col-secondary-m2: lch(from var(--col-secondary) calc(l - 30) calc(c * 0.3) h);
--col-secondary-m1: lch(from var(--col-secondary) calc(l - 15) calc(c * 0.8) h);
--col-secondary: lch(from var(--color-secondary) 35 c h);
--col-secondary-p1: lch(from var(--col-secondary) calc(l + 15) c h);
--col-secondary-p2: lch(from var(--col-secondary) calc(l + 30) c h);
--col-secondary-p3: lch(from var(--col-secondary) calc(l + 45) calc(c * 0.8) h);
--col-secondary-p4: lch(from var(--col-secondary) calc(l + 60) calc(c * 0.3) h);
/* -------------------------------------------------------------------------
Accent Color Scale
------------------------------------------------------------------------- */
--col-accent-m2: lch(from var(--col-accent) calc(l - 30) calc(c * 0.3) h);
--col-accent-m1: lch(from var(--col-accent) calc(l - 15) calc(c * 0.8) h);
--col-accent: lch(from var(--color-accent) 35 c h);
--col-accent-p1: lch(from var(--col-accent) calc(l + 15) c h);
--col-accent-p2: lch(from var(--col-accent) calc(l + 30) c h);
--col-accent-p3: lch(from var(--col-accent) calc(l + 45) calc(c * 0.8) h);
--col-accent-p4: lch(from var(--col-accent) calc(l + 60) calc(c * 0.3) h);
/* -------------------------------------------------------------------------
Neutral Color Scale
------------------------------------------------------------------------- */
--col-neutral-m2: lch(from var(--color-neutral) calc(l - 30) calc(c * 0.3) h);
--col-neutral-m1: lch(from var(--color-neutral) calc(l - 15) calc(c * 0.8) h);
--col-neutral: lch(from var(--color-neutral) l c h);
--col-neutral-p1: lch(from var(--color-neutral) calc(l + 15) c h);
--col-neutral-p2: lch(from var(--color-neutral) calc(l + 30) c h);
--col-neutral-p3: lch(from var(--color-neutral) calc(l + 45) calc(c * 0.8) h);
--col-neutral-p4: lch(from var(--color-neutral) calc(l + 60) calc(c * 0.3) h);
/* -------------------------------------------------------------------------
Semantic Color Scales (Error, Warning, Success)
------------------------------------------------------------------------- */
--col-error-m2: lch(from var(--color-error) calc(l - 30) calc(c * 0.3) h);
--col-error-m1: lch(from var(--color-error) calc(l - 15) calc(c * 0.8) h);
--col-error: lch(from var(--color-error) 35 c h);
--col-error-p1: lch(from var(--color-error) calc(l + 15) c h);
--col-error-p2: lch(from var(--color-error) calc(l + 30) c h);
--col-error-p3: lch(from var(--color-error) calc(l + 45) calc(c * 0.8) h);
--col-error-p4: lch(from var(--color-error) calc(l + 60) calc(c * 0.3) h);
--col-warning-m2: lch(from var(--color-warning) calc(l - 30) calc(c * 0.3) h);
--col-warning-m1: lch(from var(--color-warning) calc(l - 15) calc(c * 0.8) h);
--col-warning: lch(from var(--color-warning) 35 c h);
--col-warning-p1: lch(from var(--color-warning) calc(l + 15) c h);
--col-warning-p2: lch(from var(--color-warning) calc(l + 30) c h);
--col-warning-p3: lch(from var(--color-warning) calc(l + 45) calc(c * 0.8) h);
--col-warning-p4: lch(from var(--color-warning) calc(l + 60) calc(c * 0.3) h);
--col-success-m2: lch(from var(--color-success) calc(l - 30) calc(c * 0.3) h);
--col-success-m1: lch(from var(--color-success) calc(l - 15) calc(c * 0.8) h);
--col-success: lch(from var(--color-success) 35 c h);
--col-success-p1: lch(from var(--color-success) calc(l + 15) c h);
--col-success-p2: lch(from var(--color-success) calc(l + 30) c h);
--col-success-p3: lch(from var(--color-success) calc(l + 45) calc(c * 0.8) h);
--col-success-p4: lch(from var(--color-success) calc(l + 60) calc(c * 0.3) h);
/* -------------------------------------------------------------------------
"On" Colors - Text on colored backgrounds
------------------------------------------------------------------------- */
--col-on-primary: lch(from var(--col-primary) calc(l + 60) calc(c * 0.3) h);
--col-on-secondary: lch(from var(--col-secondary) calc(l + 60) calc(c * 0.3) h);
--col-on-accent: lch(from var(--col-accent) calc(l + 60) calc(c * 0.3) h);
--col-on-neutral: lch(from var(--color-neutral) calc(l + 60) calc(c * 0.3) h);
--col-on-error: lch(from var(--color-error) calc(l + 60) c h);
--col-on-warning: lch(from var(--color-warning) calc(l + 60) c h);
--col-on-success: lch(from var(--color-success) calc(l + 60) c h);
/* -------------------------------------------------------------------------
Emphasis Colors - Higher contrast text
------------------------------------------------------------------------- */
--col-em-primary: lch(from var(--col-primary) calc(l + 65) calc(c * 0.3) h);
--col-em-secondary: lch(from var(--col-secondary) calc(l + 65) calc(c * 0.3) h);
--col-em-accent: lch(from var(--col-accent) calc(l + 65) calc(c * 0.3) h);
--col-em-neutral: lch(from var(--color-neutral) calc(l + 65) calc(c * 0.3) h);
--col-em-error: lch(from var(--color-error) calc(l + 65) c h);
--col-em-warning: lch(from var(--color-warning) calc(l + 65) c h);
--col-em-success: lch(from var(--color-success) calc(l + 65) c h);
/* -------------------------------------------------------------------------
Surface & Container Colors
------------------------------------------------------------------------- */
--col-surface: lch(from var(--color-neutral) 92 calc(c * 0.3) h);
--col-container-low: lch(from var(--color-neutral) 88 calc(c * 0.4) h);
--col-container: lch(from var(--color-neutral) 83 calc(c * 0.5) h);
--col-container-high: lch(from var(--color-neutral) 78 calc(c * 0.6) h);
--col-container-primary: lch(from var(--color-primary) 90 calc(c * 0.5) h);
--col-container-secondary: lch(from var(--color-secondary) 90 calc(c * 0.5) h);
--col-container-accent: lch(from var(--color-accent) 90 calc(c * 0.5) h);
--col-container-error: lch(from var(--color-error) 90 calc(c * 0.5) h);
--col-container-warning: lch(from var(--color-warning) 90 calc(c * 0.5) h);
--col-container-success: lch(from var(--color-success) 90 calc(c * 0.5) h);
/* -------------------------------------------------------------------------
"On Container" Colors - Text on container backgrounds
------------------------------------------------------------------------- */
--col-on-surface: lch(from var(--color-neutral) 39 c h);
--col-on-container-low: lch(from var(--color-neutral) 35 c h);
--col-on-container: lch(from var(--color-neutral) 30 c h);
--col-on-container-high: lch(from var(--color-neutral) 25 c h);
--col-on-container-primary: lch(from var(--color-primary) 30 c h);
--col-on-container-secondary: lch(from var(--color-secondary) 30 c h);
--col-on-container-accent: lch(from var(--color-accent) 30 c h);
--col-on-container-error: lch(from var(--color-error) 30 c h);
--col-on-container-warning: lch(from var(--color-warning) 30 c h);
--col-on-container-success: lch(from var(--color-success) 30 c h);
/* -------------------------------------------------------------------------
Emphasis on Container Colors
------------------------------------------------------------------------- */
--col-em-surface: lch(from var(--color-neutral) 29 c h);
--col-em-container-low: lch(from var(--color-neutral) 25 c h);
--col-em-container: lch(from var(--color-neutral) 20 c h);
--col-em-container-high: lch(from var(--color-neutral) 15 c h);
--col-em-container-primary: lch(from var(--color-primary) 20 c h);
--col-em-container-secondary: lch(from var(--color-secondary) 20 c h);
--col-em-container-accent: lch(from var(--color-accent) 20 c h);
--col-em-container-error: lch(from var(--color-error) 20 c h);
--col-em-container-warning: lch(from var(--color-warning) 20 c h);
--col-em-container-success: lch(from var(--color-success) 20 c h);
}
/* ==========================================================================
Dark Mode
========================================================================== */
body.dark {
/* Base colors - lighter in dark mode */
--color-primary: lch(68 60 250);
--color-secondary: lch(from var(--color-primary) l calc(c / 2) h);
--color-accent: lch(from var(--color-primary) l c calc(h + 180));
/* Core UI colors for dark mode */
--col-shadow: lch(0 0 0 / 0.3);
--col-frost: lch(100 0 0 / 0.1);
--col-outline: lch(from var(--color-neutral) calc(l + 30) c h / 0.3);
/* Primary scale - inverted direction */
--col-primary-m2: lch(from var(--col-primary) calc(l + 30) calc(c * 0.3) h);
--col-primary-m1: lch(from var(--col-primary) calc(l + 15) calc(c * 0.8) h);
--col-primary: lch(from var(--color-primary) 65 c h);
--col-primary-p1: lch(from var(--col-primary) calc(l - 15) c h);
--col-primary-p2: lch(from var(--col-primary) calc(l - 30) c h);
--col-primary-p3: lch(from var(--col-primary) calc(l - 45) calc(c * 0.8) h);
--col-primary-p4: lch(from var(--col-primary) calc(l - 60) calc(c * 0.3) h);
/* Secondary scale */
--col-secondary-m2: lch(from var(--col-secondary) calc(l + 30) calc(c * 0.3) h);
--col-secondary-m1: lch(from var(--col-secondary) calc(l + 15) calc(c * 0.8) h);
--col-secondary: lch(from var(--color-secondary) 65 c h);
--col-secondary-p1: lch(from var(--col-secondary) calc(l - 15) c h);
--col-secondary-p2: lch(from var(--col-secondary) calc(l - 30) c h);
--col-secondary-p3: lch(from var(--col-secondary) calc(l - 45) calc(c * 0.8) h);
--col-secondary-p4: lch(from var(--col-secondary) calc(l - 60) calc(c * 0.3) h);
/* Accent scale */
--col-accent-m2: lch(from var(--col-accent) calc(l + 30) calc(c * 0.3) h);
--col-accent-m1: lch(from var(--col-accent) calc(l + 15) calc(c * 0.8) h);
--col-accent: lch(from var(--color-accent) 65 c h);
--col-accent-p1: lch(from var(--col-accent) calc(l - 15) c h);
--col-accent-p2: lch(from var(--col-accent) calc(l - 30) c h);
--col-accent-p3: lch(from var(--col-accent) calc(l - 45) calc(c * 0.8) h);
--col-accent-p4: lch(from var(--col-accent) calc(l - 60) calc(c * 0.3) h);
/* Neutral scale */
--col-neutral-m2: lch(from var(--color-neutral) calc(l + 30) calc(c * 0.3) h);
--col-neutral-m1: lch(from var(--color-neutral) calc(l + 15) calc(c * 0.8) h);
--col-neutral-p1: lch(from var(--color-neutral) calc(l - 15) c h);
--col-neutral-p2: lch(from var(--color-neutral) calc(l - 30) c h);
--col-neutral-p3: lch(from var(--color-neutral) calc(l - 45) calc(c * 0.8) h);
--col-neutral-p4: lch(from var(--color-neutral) calc(l - 60) calc(c * 0.3) h);
/* Semantic scales */
--col-error: lch(from var(--color-error) 65 c h);
--col-error-m2: lch(from var(--col-error) calc(l + 30) calc(c * 0.3) h);
--col-error-m1: lch(from var(--col-error) calc(l + 15) calc(c * 0.8) h);
--col-error-p1: lch(from var(--col-error) calc(l - 15) c h);
--col-error-p2: lch(from var(--col-error) calc(l - 30) c h);
--col-error-p3: lch(from var(--col-error) calc(l - 45) calc(c * 0.8) h);
--col-error-p4: lch(from var(--col-error) calc(l - 60) calc(c * 0.3) h);
--col-warning: lch(from var(--color-warning) 65 c h);
--col-warning-m2: lch(from var(--col-warning) calc(l + 30) calc(c * 0.3) h);
--col-warning-m1: lch(from var(--col-warning) calc(l + 15) calc(c * 0.8) h);
--col-warning-p1: lch(from var(--col-warning) calc(l - 15) c h);
--col-warning-p2: lch(from var(--col-warning) calc(l - 30) c h);
--col-warning-p3: lch(from var(--col-warning) calc(l - 45) calc(c * 0.8) h);
--col-warning-p4: lch(from var(--col-warning) calc(l - 60) calc(c * 0.3) h);
--col-success: lch(from var(--color-success) 65 c h);
--col-success-m2: lch(from var(--col-success) calc(l + 30) calc(c * 0.3) h);
--col-success-m1: lch(from var(--col-success) calc(l + 15) calc(c * 0.8) h);
--col-success-p1: lch(from var(--col-success) calc(l - 15) c h);
--col-success-p2: lch(from var(--col-success) calc(l - 30) c h);
--col-success-p3: lch(from var(--col-success) calc(l - 45) calc(c * 0.8) h);
--col-success-p4: lch(from var(--col-success) calc(l - 60) calc(c * 0.3) h);
/* "On" colors - inverted */
--col-on-primary: lch(from var(--col-primary) calc(l - 60) calc(c * 0.3) h);
--col-on-secondary: lch(from var(--col-secondary) calc(l - 60) calc(c * 0.3) h);
--col-on-accent: lch(from var(--col-accent) calc(l - 60) calc(c * 0.3) h);
--col-on-neutral: lch(from var(--color-neutral) calc(l - 60) calc(c * 0.3) h);
--col-on-error: lch(from var(--color-error) calc(l - 60) c h);
--col-on-warning: lch(from var(--color-warning) calc(l - 60) c h);
--col-on-success: lch(from var(--color-success) calc(l - 60) c h);
/* Emphasis colors - inverted */
--col-em-primary: lch(from var(--col-primary) calc(l - 65) calc(c * 0.3) h);
--col-em-secondary: lch(from var(--col-secondary) calc(l - 65) calc(c * 0.3) h);
--col-em-accent: lch(from var(--col-accent) calc(l - 65) calc(c * 0.3) h);
--col-em-neutral: lch(from var(--color-neutral) calc(l - 65) calc(c * 0.3) h);
--col-em-error: lch(from var(--color-error) calc(l - 65) c h);
--col-em-warning: lch(from var(--color-warning) calc(l - 65) c h);
--col-em-success: lch(from var(--color-success) calc(l - 65) c h);
/* Dark mode surfaces */
--col-surface: lch(from var(--color-neutral) 4 calc(c * 0.2) h);
--col-container-low: lch(from var(--color-neutral) 11 calc(c * 0.3) h);
--col-container: lch(from var(--color-neutral) 17 calc(c * 0.5) h);
--col-container-high: lch(from var(--color-neutral) 23 calc(c * 0.6) h);
--col-container-primary: lch(from var(--color-primary) 17 calc(c * 0.5) h);
--col-container-secondary: lch(from var(--color-secondary) 17 calc(c * 0.5) h);
--col-container-accent: lch(from var(--color-accent) 17 calc(c * 0.5) h);
--col-container-error: lch(from var(--color-error) 17 calc(c * 0.5) h);
--col-container-warning: lch(from var(--color-warning) 17 calc(c * 0.5) h);
--col-container-success: lch(from var(--color-success) 17 calc(c * 0.5) h);
/* Dark mode "on container" colors */
--col-on-surface: lch(from var(--color-neutral) 61 c h);
--col-on-container-low: lch(from var(--color-neutral) 65 c h);
--col-on-container: lch(from var(--color-neutral) 70 c h);
--col-on-container-high: lch(from var(--color-neutral) 75 c h);
--col-on-container-primary: lch(from var(--color-primary) 70 c h);
--col-on-container-secondary: lch(from var(--color-secondary) 70 c h);
--col-on-container-accent: lch(from var(--color-accent) 70 c h);
--col-on-container-error: lch(from var(--color-error) 70 c h);
--col-on-container-warning: lch(from var(--color-warning) 70 c h);
--col-on-container-success: lch(from var(--color-success) 70 c h);
/* Dark mode emphasis on container */
--col-em-surface: lch(from var(--color-neutral) 71 c h);
--col-em-container-low: lch(from var(--color-neutral) 75 c h);
--col-em-container: lch(from var(--color-neutral) 80 c h);
--col-em-container-high: lch(from var(--color-neutral) 85 c h);
--col-em-container-primary: lch(from var(--color-primary) 80 c h);
--col-em-container-secondary: lch(from var(--color-secondary) 80 c h);
--col-em-container-accent: lch(from var(--color-accent) 80 c h);
--col-em-container-error: lch(from var(--color-error) 80 c h);
--col-em-container-warning: lch(from var(--color-warning) 80 c h);
--col-em-container-success: lch(from var(--color-success) 80 c h);
}
/* vim: ts=4
*/