nexu-io--open-design
150 行
6.3 KiB
HTML
150 行
6.3 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title>Gradient - dark component kit</title>
|
|
<style>
|
|
:root {
|
|
--accent: #7c3aed;
|
|
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
|
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
|
--accent-on: #ffffff;
|
|
--bg: #f7f3ff;
|
|
--border: #ddd2f2;
|
|
--border-soft: #eee6fb;
|
|
--container-gutter-desktop: 36px;
|
|
--container-gutter-phone: 16px;
|
|
--container-gutter-tablet: 24px;
|
|
--container-max: 1180px;
|
|
--danger: #ef4444;
|
|
--ease-standard: cubic-bezier(0.22, 1, 0.36, 1);
|
|
--elev-flat: none;
|
|
--elev-raised: 0 24px 72px rgba(124, 58, 237, 0.20);
|
|
--elev-ring: 0 0 0 1px var(--border);
|
|
--fg: #191225;
|
|
--fg-2: #443856;
|
|
--focus-ring: 0 0 0 4px rgba(124, 58, 237, 0.26);
|
|
--font-body: Inter, system-ui, sans-serif;
|
|
--font-display: Inter, system-ui, sans-serif;
|
|
--font-mono: "Geist Mono", ui-monospace, Menlo, monospace;
|
|
--leading-body: 1.52;
|
|
--leading-tight: 1.02;
|
|
--meta: #7c3aed;
|
|
--motion-base: 260ms;
|
|
--motion-fast: 160ms;
|
|
--muted: #746985;
|
|
--radius-lg: 32px;
|
|
--radius-md: 20px;
|
|
--radius-pill: 9999px;
|
|
--radius-sm: 12px;
|
|
--section-y-desktop: 104px;
|
|
--section-y-phone: 52px;
|
|
--section-y-tablet: 72px;
|
|
--space-1: 4px;
|
|
--space-12: 48px;
|
|
--space-2: 8px;
|
|
--space-3: 12px;
|
|
--space-4: 16px;
|
|
--space-5: 20px;
|
|
--space-6: 24px;
|
|
--space-8: 32px;
|
|
--success: #10b981;
|
|
--surface: #ffffff;
|
|
--surface-warm: #efe7ff;
|
|
--text-2xl: 40px;
|
|
--text-3xl: 62px;
|
|
--text-4xl: 86px;
|
|
--text-base: 16px;
|
|
--text-lg: 19px;
|
|
--text-sm: 14px;
|
|
--text-xl: 26px;
|
|
--text-xs: 12px;
|
|
--tracking-display: -0.03em;
|
|
--warn: #f59e0b;
|
|
}
|
|
:root {
|
|
--od-page-bg: #0f1115;
|
|
--od-surface: #171a21;
|
|
--od-text: #f8fafc;
|
|
--od-muted: #a7adba;
|
|
--od-border: #2a2f3a;
|
|
--od-accent: #7c3aed;
|
|
--od-radius: 20px;
|
|
--od-font-body: Inter, system-ui, sans-serif;
|
|
--od-font-display: Inter, system-ui, sans-serif;
|
|
}
|
|
* { box-sizing: border-box; }
|
|
body {
|
|
margin: 0;
|
|
min-height: 100vh;
|
|
background: var(--od-page-bg);
|
|
color: var(--od-text);
|
|
font-family: var(--od-font-body);
|
|
-webkit-font-smoothing: antialiased;
|
|
}
|
|
a { color: inherit; }
|
|
.page { width: min(1100px, calc(100vw - 48px)); margin: 0 auto; padding: 72px 0; }
|
|
.eyebrow { color: var(--od-accent); font-size: 12px; font-weight: 750; letter-spacing: 0; text-transform: uppercase; }
|
|
.hero { display: grid; grid-template-columns: 1.05fr .95fr; gap: 32px; align-items: center; }
|
|
h1, h2, h3, p { margin: 0; }
|
|
h1, h2, h3 { font-family: var(--od-font-display); letter-spacing: 0; line-height: 1.05; }
|
|
h1 { margin-top: 12px; font-size: 64px; }
|
|
h2 { font-size: 40px; }
|
|
h3 { font-size: 22px; }
|
|
.lead { margin-top: 18px; color: var(--od-muted); font-size: 20px; line-height: 1.55; }
|
|
.actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 28px; }
|
|
.button { display: inline-flex; min-height: 44px; align-items: center; justify-content: center; border-radius: var(--od-radius); padding: 0 18px; font-weight: 750; text-decoration: none; border: 1px solid var(--od-border); }
|
|
.button.primary { background: var(--od-accent); border-color: var(--od-accent); color: #0b0b0b; }
|
|
.button.secondary { background: var(--od-surface); }
|
|
.panel, .card, .field, .slide, .email, .poster { border: 1px solid var(--od-border); border-radius: var(--od-radius); background: var(--od-surface); }
|
|
.panel { padding: 24px; box-shadow: 0 24px 80px rgba(15, 17, 23, 0.32); }
|
|
.metric-grid, .card-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; margin-top: 22px; }
|
|
.metric, .card { padding: 18px; }
|
|
.metric strong { display: block; font-size: 30px; line-height: 1; }
|
|
.metric span, .card p, .field span { color: var(--od-muted); font-size: 14px; line-height: 1.5; }
|
|
.chip-row { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 18px; }
|
|
.chip { border: 1px solid var(--od-border); border-radius: 999px; padding: 8px 12px; color: var(--od-muted); }
|
|
input, textarea, select { width: 100%; min-height: 44px; border: 1px solid var(--od-border); border-radius: var(--od-radius); background: var(--od-page-bg); color: var(--od-text); font: inherit; padding: 10px 12px; }
|
|
label { display: grid; gap: 8px; color: var(--od-muted); font-size: 13px; font-weight: 700; }
|
|
@media (max-width: 820px) { .hero, .metric-grid, .card-grid { grid-template-columns: 1fr; } .page { width: min(100vw - 28px, 1100px); padding: 40px 0; } h1 { font-size: 42px; } h2 { font-size: 30px; } }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<main class="page">
|
|
<section class="hero">
|
|
<div>
|
|
<p class="eyebrow">Morphism & Effects system</p>
|
|
<h1>Gradient component kit</h1>
|
|
<p class="lead">Bundled Open Design package for Gradient, derived from curated DESIGN.md, tokens.css, and components.html fixtures.</p>
|
|
<div class="actions">
|
|
<a class="button primary" href="#">Primary</a>
|
|
<a class="button secondary" href="#">Default</a>
|
|
<a class="button secondary" href="#">Dashed</a>
|
|
</div>
|
|
</div>
|
|
<article class="panel">
|
|
<p class="eyebrow">Reference module</p>
|
|
<h3>Token-driven surface</h3>
|
|
<div class="metric-grid">
|
|
<div class="metric"><strong>12</strong><span>Components</span></div>
|
|
<div class="metric"><strong>4</strong><span>States</span></div>
|
|
<div class="metric"><strong>1</strong><span>Token contract</span></div>
|
|
</div>
|
|
<div class="chip-row">
|
|
<span class="chip">Hover</span>
|
|
<span class="chip">Focus</span>
|
|
<span class="chip">Active</span>
|
|
<span class="chip">Disabled</span>
|
|
</div>
|
|
</article>
|
|
</section>
|
|
<section class="card-grid" aria-label="Component examples">
|
|
<article class="card"><h3>Buttons</h3><p>Primary, secondary, text, and destructive treatments resolve through shared color tokens.</p></article>
|
|
<article class="card"><h3>Inputs</h3><p>Labels, helper text, and focus state use the same spacing and radius scale.</p></article>
|
|
<article class="card"><h3>Cards</h3><p>Information modules keep elevation, border, and padding consistent across breakpoints.</p></article>
|
|
</section>
|
|
</main>
|
|
</body>
|
|
</html>
|