nexu-io--open-design
127 行
7.9 KiB
CSS
127 行
7.9 KiB
CSS
/* ─────────────────────────────────────────────────────────────────────────
|
|
* design-systems/opencode-ai/tokens.css
|
|
*
|
|
* Structured token bindings for "Design System Inspired by OpenCode".
|
|
* Terminal-native dark theme: warm near-black canvas, Berkeley Mono as
|
|
* the sole typeface, flat depth (no shadows), Apple HIG semantic colors.
|
|
*
|
|
* Key brand decisions encoded here:
|
|
* - Dark-on-dark: #201d1d (warm near-black) as page bg, #302c2c for surface
|
|
* - #fdfcfc (barely-warm off-white) as primary text — never pure white
|
|
* - Berkeley Mono ONLY — no second typeface, no typographic variation
|
|
* - FLAT depth system — zero shadows; depth via borders and bg shifts
|
|
* - Warm borders: rgba(15,0,0,0.12) — subtle red tint ties to warm palette
|
|
* - Apple HIG semantic colors (#007aff, #ff3b30, #30d158, #ff9f0a)
|
|
* - Narrow reading column (~880px) — single-column, text-centric
|
|
* ─────────────────────────────────────────────────────────────────── */
|
|
|
|
:root {
|
|
/* ─── Surface (dark theme) ────────────────────────────────────────
|
|
* Warm near-black → slightly lighter dark surface.
|
|
* The reddish warmth (rgb(32,29,29)) is subtle but essential. */
|
|
--bg: #201d1d; /* OpenCode Dark — warm near-black with reddish undertone */
|
|
--surface: #302c2c; /* Dark Surface — elevated containers, slight differentiation */
|
|
--surface-warm: var(--surface); /* alias — no separate warm tier needed */
|
|
|
|
/* ─── Foreground (on dark) ────────────────────────────────────────
|
|
* Warm off-white text — never clinical pure white. */
|
|
--fg: #fdfcfc; /* OpenCode Light — barely-warm off-white primary text */
|
|
--fg-2: #c8c6c4; /* Warm light gray — secondary on dark */
|
|
--muted: #9a9898; /* Mid Gray — secondary text, muted links */
|
|
--meta: #6e6e73; /* Text Muted — disabled text, placeholders */
|
|
|
|
/* ─── Border (warm transparent) ──────────────────────────────────
|
|
* The warm red tint (rgba(15,0,0,...)) in borders ties them to the
|
|
* overall warm dark palette. Use #646262 for visible outlines. */
|
|
--border: #464343; /* Warm dark border — visible against bg */
|
|
--border-soft: #302c2c; /* Same as surface — barely-visible inner separator */
|
|
|
|
/* ─── Accent ──────────────────────────────────────────────────────
|
|
* Apple system blue — #007aff. Familiar, trustworthy, high-contrast
|
|
* on the warm dark canvas. The full three-stage hover sequence:
|
|
* #007aff → #0056b3 (hover) → #004085 (active). */
|
|
--accent: #007aff;
|
|
--accent-on: #ffffff;
|
|
--accent-hover: #0056b3; /* Accent Blue Hover — explicitly defined */
|
|
--accent-active: #004085; /* Accent Blue Active — deeply pressed */
|
|
|
|
/* ─── Semantic (Apple HIG palette) ────────────────────────────────
|
|
* Familiar trustworthy signals on a dark terminal canvas. */
|
|
--success: #30d158; /* Apple system green */
|
|
--warn: #ff9f0a; /* Apple system orange */
|
|
--danger: #ff3b30; /* Apple system red */
|
|
|
|
/* ─── Typography ──────────────────────────────────────────────────
|
|
* Berkeley Mono is the ONLY font. No typographic variation — no
|
|
* display face, no body face — "everything is code" philosophy.
|
|
* Hierarchy via size and weight alone (400 / 500 / 700). */
|
|
--font-display: "Berkeley Mono", "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
|
|
--font-body: "Berkeley Mono", "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
|
|
--font-mono: "Berkeley Mono", "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
|
|
|
|
/* Type scale — DESIGN.md §3. Heading 1 at 38px, rest at 16px variants.
|
|
* The system is intentionally compressed — terminal scale. */
|
|
--text-xs: 12px;
|
|
--text-sm: 14px; /* Caption — footnotes, metadata (lh 2.0) */
|
|
--text-base: 16px; /* Body — standard text (weight 400 or 500) */
|
|
--text-lg: 18px;
|
|
--text-xl: 22px;
|
|
--text-2xl: 28px;
|
|
--text-3xl: 38px; /* Heading 1 — hero headlines (weight 700, lh 1.5) */
|
|
--text-4xl: 48px; /* Extended display if needed */
|
|
|
|
--leading-body: 1.5; /* Monospace grid breathes at 1.5 */
|
|
--leading-tight: 1.0; /* Compact labels, tab items */
|
|
--tracking-display: 0em; /* Monospace doesn't need letter-spacing manipulation */
|
|
|
|
/* ─── Spacing ─────────────────────────────────────────────────────
|
|
* 8px base unit. Generous extended scale (up to 96px) for sections.
|
|
* Sections separated by spacing alone — no decorative dividers. */
|
|
--space-1: 4px;
|
|
--space-2: 8px;
|
|
--space-3: 12px;
|
|
--space-4: 16px;
|
|
--space-5: 20px;
|
|
--space-6: 24px;
|
|
--space-8: 32px;
|
|
--space-12: 48px;
|
|
|
|
--section-y-desktop: 80px; /* Terminal-like generous spacing between sections */
|
|
--section-y-tablet: 64px;
|
|
--section-y-phone: 48px;
|
|
|
|
/* ─── Radius ──────────────────────────────────────────────────────
|
|
* Minimal: 4px everywhere, 6px for form inputs (the roundest element).
|
|
* "Terminals don't have rounded corners" — utilitarian aesthetic. */
|
|
--radius-sm: 4px; /* Default for all elements */
|
|
--radius-md: 6px; /* Form inputs — slightly more approachable */
|
|
--radius-lg: 8px; /* Rare — largest container radius */
|
|
--radius-pill: 9999px; /* Declared but not part of the OpenCode aesthetic */
|
|
|
|
/* ─── Elevation (FLAT) ────────────────────────────────────────────
|
|
* Zero shadows — consistent with the terminal aesthetic.
|
|
* Depth via border treatments and background color shifts ONLY.
|
|
* All three levels use rings/outlines, never blur shadows. */
|
|
--elev-flat: none;
|
|
--elev-ring: 0 0 0 1px var(--border);
|
|
--elev-raised: 0 0 0 2px var(--border); /* Slightly more prominent ring — no blur */
|
|
|
|
/* ─── Focus ring ──────────────────────────────────────────────────
|
|
* Accent blue focus ring — no shadow-based ring (flat system). */
|
|
--focus-ring: 0 0 0 2px var(--accent);
|
|
|
|
/* ─── Motion ──────────────────────────────────────────────────────
|
|
* Terminal-inspired: instant state changes. 100ms for snappy feedback. */
|
|
--motion-fast: 100ms;
|
|
--motion-base: 150ms;
|
|
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
|
|
|
/* ─── Layout ──────────────────────────────────────────────────────
|
|
* Narrow reading column (880px) — single-column, text-centric.
|
|
* Generous side margins focus attention on the content. */
|
|
--container-max: 880px;
|
|
--container-gutter-desktop: 24px;
|
|
--container-gutter-tablet: 20px;
|
|
--container-gutter-phone: 16px;
|
|
}
|