@obsrviq/ui
v0.3.1
Published
Obsrviq design system — tokens + accessible primitives (§16).
Readme
@obsrviq/ui
The Obsrviq design system — tokens + accessible React primitives (spec §16). Every color, type, space, radius, shadow, and motion value routes through CSS custom properties, so the entire product (console, player, widgets) is themed — and white-labeled — from one place.
Use
import { Button, Badge, Tabs, Drawer, Slider, Menu, EmptyState, ToastProvider } from '@obsrviq/ui';
import '@obsrviq/ui/styles.css'; // tokens + component stylesPrimitives: Button, IconButton, Badge, Tabs, Tooltip, Drawer,
Skeleton, ToastProvider/useToast, Slider, Menu, EmptyState,
ErrorState, Card.
Design language
A refined, premium dark aesthetic with a confident iris accent reserved for
live/active/CTA, a 4-tier surface ramp for real depth, a material recipe
(.lum-elevated = layered shadow + a 1px inner top-highlight), a modular type
scale (Inter + JetBrains Mono, tabular numerals), and a small, fast motion system
— all gated by prefers-reduced-motion.
Theming (white-label)
Override any --lum-* token — globally or scoped:
:root {
--lum-accent: #7c3aed; /* your brand */
--lum-radius: 8px;
--lum-font-ui: 'YourFont', system-ui, sans-serif;
}The full, commented token set lives in
tokens.css (surface ramp, text ramp, accent + soft/line/glow
variants, semantic soft/line trios, a categorical data-viz palette, radius,
elevation, and motion). A built-in light theme is [data-lum-theme="light"].
Quality floor (binding)
Responsive to mobile, visible keyboard focus (:focus-visible + --lum-focus),
prefers-reduced-motion respected, WCAG 2.2 AA contrast & semantics, skeletons for
loading, and meaningful empty/error states. UX writing is active-voice and names
things from the user's side — see the design notes in
docs/DESIGN_CRITIQUE.md.
