Standardize UI typography, charts and empty states
This commit is contained in:
@@ -1,22 +1,18 @@
|
||||
/* Electric Cherry — design tokens.
|
||||
|
||||
This file is the single source of truth for color, type, spacing, motion,
|
||||
and elevation. It's organized in three layers:
|
||||
and elevation. It's organized in two layers:
|
||||
|
||||
1. RAW RAMPS — the actual color/type/space values. Never referenced
|
||||
directly by components.
|
||||
2. SEMANTIC ALIASES — what components should reference (--surface,
|
||||
--text-primary, --state-online, --space-4, etc.). Swapping the palette
|
||||
or spacing rhythm later is a single-file edit.
|
||||
3. LEGACY ALIASES — old names (--bg-page, --accent, --ink-300, --pad-card…)
|
||||
mapped onto new semantic values. Kept alive so existing components render
|
||||
during the phased redesign; each page rewrite removes its usage, and
|
||||
this block shrinks over time.
|
||||
|
||||
Design principles this file encodes:
|
||||
· One accent (blue). Cyan/amber/red/green mean state only.
|
||||
· Depth by light, not lines. One ambient shadow + subtle translucency.
|
||||
· One typeface (Inter). Mono for data. Display face lives inside BrandMark.
|
||||
· One typeface (Inter). Inter tabular figures for metrics; mono for code and logs. Display face lives inside BrandMark.
|
||||
· Motion tokens standardize easings + durations across the product. */
|
||||
|
||||
:root {
|
||||
@@ -65,7 +61,7 @@
|
||||
--text-primary: var(--gray-050);
|
||||
--text-secondary: var(--gray-300);
|
||||
--text-tertiary: #98a4b8;
|
||||
--text-quaternary: var(--gray-400);
|
||||
--text-quaternary: #8c96a9;
|
||||
--text-on-accent: #08111f;
|
||||
|
||||
/* Border — hairlines, no more. */
|
||||
@@ -82,11 +78,11 @@
|
||||
|
||||
/* Metrics: unknown uses a pattern as well as color. */
|
||||
--chart-active: var(--accent-primary);
|
||||
--chart-idle: #7b9baf;
|
||||
--chart-idle: #2b3442;
|
||||
--chart-unknown-base: #605b64;
|
||||
--chart-unknown-stripe: #a7a0ad;
|
||||
|
||||
/* Typography — Inter everywhere, mono for data.
|
||||
/* Typography — Inter for text and metrics; mono for code, IDs and logs.
|
||||
Display face lives inside BrandMark; no global --font-display token. */
|
||||
--font-body: 'Inter', system-ui, -apple-system, sans-serif;
|
||||
--font-numeric: 'Inter', system-ui, -apple-system, sans-serif;
|
||||
@@ -95,6 +91,7 @@
|
||||
/* Type scale — cleaner ramp anchored at 15px body. */
|
||||
--text-xs: 12px;
|
||||
--text-sm: 13px;
|
||||
--text-input: 16px; /* Prevent mobile browser zoom when a field receives focus. */
|
||||
--text-base: 15px;
|
||||
--text-md: 17px;
|
||||
--text-lg: 20px;
|
||||
@@ -156,72 +153,6 @@
|
||||
|
||||
/* Focus ring — 2px accent, 2px offset, everywhere. */
|
||||
--focus-ring: 0 0 0 2px var(--surface), 0 0 0 4px var(--accent-primary);
|
||||
|
||||
/* ---------- 3. LEGACY ALIASES ----------
|
||||
Old token names, mapped onto new semantic values so components that
|
||||
haven't been rewritten yet keep rendering. Delete entries as pages
|
||||
migrate; the block should be empty at the end of Phase 8. */
|
||||
|
||||
/* Old blue ramp names */
|
||||
--blue-975: var(--gray-975);
|
||||
--blue-925: var(--gray-950);
|
||||
--blue-875: var(--gray-925);
|
||||
--blue-825: var(--gray-850);
|
||||
--blue-600: #256cae;
|
||||
--blue-400: var(--blue-300);
|
||||
|
||||
/* Old spark/cherry/amber names */
|
||||
--spark-500: var(--state-online);
|
||||
--spark-400: #a8e5ff;
|
||||
--spark-glow: 0 0 8px rgba(124, 212, 255, 0.45);
|
||||
--spark-glow-lg: 0 0 14px rgba(124, 212, 255, 0.35);
|
||||
--cherry-500: var(--state-danger);
|
||||
--cherry-400: #ff7590;
|
||||
--cherry-300: #ff9db0;
|
||||
--amber-500: var(--state-warning);
|
||||
--amber-glow: 0 0 8px rgba(255, 176, 32, 0.32);
|
||||
--danger-500: var(--state-danger);
|
||||
--success-500: #4ade80;
|
||||
|
||||
/* Old neutral names */
|
||||
--cream: var(--text-primary);
|
||||
--cream-dim: var(--gray-200);
|
||||
--ink-100: var(--text-primary);
|
||||
--ink-300: var(--text-secondary);
|
||||
--ink-500: var(--text-tertiary);
|
||||
--ink-700: var(--text-quaternary);
|
||||
|
||||
/* Old surface/border/accent aliases */
|
||||
--bg-page: var(--surface-sunken);
|
||||
--bg-nav: var(--surface);
|
||||
--bg-card: var(--surface);
|
||||
--bg-card-hi: var(--surface-raised);
|
||||
--border: var(--border-subtle);
|
||||
--border-hi: var(--border-strong);
|
||||
--accent: var(--accent-primary);
|
||||
--accent-hi: var(--accent-primary-hover);
|
||||
--accent-glow: 0 0 0 1px rgba(46, 134, 209, 0.35);
|
||||
--accent-glow-lg: 0 0 0 1px rgba(46, 134, 209, 0.28);
|
||||
|
||||
/* Old typography names */
|
||||
--font-display: 'Alfa Slab One', 'Georgia', serif;
|
||||
--text-mono: 13px;
|
||||
--text-mono-sm: 12px;
|
||||
--tracking-display: 0.12em;
|
||||
--tracking-nav: 0.03em;
|
||||
|
||||
/* Old spacing/radii names */
|
||||
--pad-card: var(--space-5);
|
||||
--pad-panel: var(--space-6);
|
||||
--pad-nav-y: var(--space-4);
|
||||
--pad-nav-x: var(--space-8);
|
||||
--gap-section: var(--space-8);
|
||||
--gap-cards: var(--space-4);
|
||||
--r-sm: var(--radius-sm);
|
||||
--r-md: var(--radius-md);
|
||||
--r-lg: var(--radius-lg);
|
||||
--shadow-card: var(--shadow-ambient);
|
||||
--shadow-panel: var(--shadow-raised);
|
||||
}
|
||||
|
||||
/* Motion is reserved for active work and changes. */
|
||||
@@ -231,16 +162,6 @@
|
||||
to { background-position: 200% 0; }
|
||||
}
|
||||
|
||||
/* Legacy — retained until ServerCard/BrandMark/StatusDot are replaced. */
|
||||
@keyframes electric-pulse {
|
||||
0%, 100% { box-shadow: 0 0 0 0 rgba(124, 212, 255, 0.5); }
|
||||
50% { box-shadow: 0 0 0 5px rgba(124, 212, 255, 0); }
|
||||
}
|
||||
@keyframes spark-slide {
|
||||
from { background-position: -100% 0; }
|
||||
to { background-position: 200% 0; }
|
||||
}
|
||||
|
||||
/* Reduced motion — neutralize all animation. Components that respect this
|
||||
token get calm behavior for free; the media query below handles the
|
||||
ones that don't. */
|
||||
|
||||
Reference in New Issue
Block a user