mirror of
https://github.com/nexu-io/open-design.git
synced 2026-05-31 19:04:39 +07:00
feat(design-systems): add remaining style token fixtures (#2043)
Co-authored-by: chaoxiaoche <chaoxiaoche@chaoxiaochedeMacBook-Pro.local>
This commit is contained in:
parent
477e602951
commit
e8887aab13
88 changed files with 8756 additions and 0 deletions
136
design-systems/artistic/components.html
Normal file
136
design-systems/artistic/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Artistic - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/artistic: artistic gallery language with warm paper, rich accent, and expressive composition." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #fbf6ee;
|
||||
--surface: #fffdf8;
|
||||
--surface-warm: #f1e3cf;
|
||||
--fg: #201914;
|
||||
--fg-2: #4c4037;
|
||||
--muted: #7a6d63;
|
||||
--meta: #9b5b32;
|
||||
--border: #ded2c3;
|
||||
--border-soft: #eee4d7;
|
||||
--accent: #9b5b32;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4f8a4f;
|
||||
--warn: #c9822f;
|
||||
--danger: #b33a3a;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 17px;
|
||||
--text-lg: 20px;
|
||||
--text-xl: 28px;
|
||||
--text-2xl: 42px;
|
||||
--text-3xl: 64px;
|
||||
--text-4xl: 88px;
|
||||
--leading-body: 1.62;
|
||||
--leading-tight: 1;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 112px;
|
||||
--section-y-tablet: 80px;
|
||||
--section-y-phone: 56px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(32, 25, 20, 0.12);
|
||||
--focus-ring: 0 0 0 4px rgba(155, 91, 50, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #fbf6ee 0%, #fffdf8 58%, #f1e3cf 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Artistic design system</p>
|
||||
<h1>Studio composition system</h1>
|
||||
<p class="lead">Expressive portfolio surfaces, painterly rhythm, and gallery-forward component cards.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Artistic component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>artistic gallery language with warm paper, rich accent, and expressive composition.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="artistic-input">Reference input</label><input id="artistic-input" value="Artistic system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/artistic/tokens.css
Normal file
63
design-systems/artistic/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/artistic/tokens.css
|
||||
* Structured token bindings for Artistic.
|
||||
* artistic gallery language with warm paper, rich accent, and expressive composition.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #fbf6ee;
|
||||
--surface: #fffdf8;
|
||||
--surface-warm: #f1e3cf;
|
||||
--fg: #201914;
|
||||
--fg-2: #4c4037;
|
||||
--muted: #7a6d63;
|
||||
--meta: #9b5b32;
|
||||
--border: #ded2c3;
|
||||
--border-soft: #eee4d7;
|
||||
--accent: #9b5b32;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4f8a4f;
|
||||
--warn: #c9822f;
|
||||
--danger: #b33a3a;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 17px;
|
||||
--text-lg: 20px;
|
||||
--text-xl: 28px;
|
||||
--text-2xl: 42px;
|
||||
--text-3xl: 64px;
|
||||
--text-4xl: 88px;
|
||||
--leading-body: 1.62;
|
||||
--leading-tight: 1;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 112px;
|
||||
--section-y-tablet: 80px;
|
||||
--section-y-phone: 56px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(32, 25, 20, 0.12);
|
||||
--focus-ring: 0 0 0 4px rgba(155, 91, 50, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/atelier-zero/components.html
Normal file
136
design-systems/atelier-zero/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Atelier Zero - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/atelier-zero: independent studio identity with off-white canvas, sharp black type, and gallery restraint." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #ffffff;
|
||||
--surface: #f7f7f7;
|
||||
--surface-warm: #eeeeee;
|
||||
--fg: #111111;
|
||||
--fg-2: #3a3a3a;
|
||||
--muted: #707070;
|
||||
--meta: #111111;
|
||||
--border: #d9d9d9;
|
||||
--border-soft: #eeeeee;
|
||||
--accent: #111111;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #168a46;
|
||||
--warn: #b7791f;
|
||||
--danger: #c53030;
|
||||
--font-display: "Helvetica Neue", Arial, sans-serif;
|
||||
--font-body: "Helvetica Neue", Arial, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 4px;
|
||||
--radius-md: 8px;
|
||||
--radius-lg: 12px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 16px 40px rgba(0, 0, 0, 0.10);
|
||||
--focus-ring: 0 0 0 3px rgba(17, 17, 17, 0.18);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #ffffff 0%, #f7f7f7 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Atelier Zero design system</p>
|
||||
<h1>Independent studio atelier</h1>
|
||||
<p class="lead">Minimal creative studio pages with quiet type, object cards, and restrained editorial space.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Atelier Zero component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>independent studio identity with off-white canvas, sharp black type, and gallery restraint.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="atelier-zero-input">Reference input</label><input id="atelier-zero-input" value="Atelier Zero system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/atelier-zero/tokens.css
Normal file
63
design-systems/atelier-zero/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/atelier-zero/tokens.css
|
||||
* Structured token bindings for Atelier Zero.
|
||||
* independent studio identity with off-white canvas, sharp black type, and gallery restraint.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #ffffff;
|
||||
--surface: #f7f7f7;
|
||||
--surface-warm: #eeeeee;
|
||||
--fg: #111111;
|
||||
--fg-2: #3a3a3a;
|
||||
--muted: #707070;
|
||||
--meta: #111111;
|
||||
--border: #d9d9d9;
|
||||
--border-soft: #eeeeee;
|
||||
--accent: #111111;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #168a46;
|
||||
--warn: #b7791f;
|
||||
--danger: #c53030;
|
||||
--font-display: "Helvetica Neue", Arial, sans-serif;
|
||||
--font-body: "Helvetica Neue", Arial, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 4px;
|
||||
--radius-md: 8px;
|
||||
--radius-lg: 12px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 16px 40px rgba(0, 0, 0, 0.10);
|
||||
--focus-ring: 0 0 0 3px rgba(17, 17, 17, 0.18);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/bento/components.html
Normal file
136
design-systems/bento/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Bento - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/bento: modular bento interface with friendly tiles, soft borders, and balanced product density." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #f5f8ff;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #eaf1ff;
|
||||
--fg: #101828;
|
||||
--fg-2: #344054;
|
||||
--muted: #667085;
|
||||
--meta: #2563eb;
|
||||
--border: #d7e0ef;
|
||||
--border-soft: #edf2f8;
|
||||
--accent: #2563eb;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #16a34a;
|
||||
--warn: #f59e0b;
|
||||
--danger: #ef4444;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(16, 24, 40, 0.11);
|
||||
--focus-ring: 0 0 0 4px rgba(37, 99, 235, 0.22);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: radial-gradient(circle at 80% 10%, rgba(37, 99, 235, 0.16), transparent 34%), #f5f8ff; }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Bento design system</p>
|
||||
<h1>Modular bento grid</h1>
|
||||
<p class="lead">Compact product storytelling built from tidy tiles, nested panels, and friendly hierarchy.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Bento component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>modular bento interface with friendly tiles, soft borders, and balanced product density.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="bento-input">Reference input</label><input id="bento-input" value="Bento system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/bento/tokens.css
Normal file
63
design-systems/bento/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/bento/tokens.css
|
||||
* Structured token bindings for Bento.
|
||||
* modular bento interface with friendly tiles, soft borders, and balanced product density.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #f5f8ff;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #eaf1ff;
|
||||
--fg: #101828;
|
||||
--fg-2: #344054;
|
||||
--muted: #667085;
|
||||
--meta: #2563eb;
|
||||
--border: #d7e0ef;
|
||||
--border-soft: #edf2f8;
|
||||
--accent: #2563eb;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #16a34a;
|
||||
--warn: #f59e0b;
|
||||
--danger: #ef4444;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(16, 24, 40, 0.11);
|
||||
--focus-ring: 0 0 0 4px rgba(37, 99, 235, 0.22);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/bold/components.html
Normal file
136
design-systems/bold/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Bold - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/bold: bold campaign language with hard contrast, oversized type, and assertive actions." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #ffffff;
|
||||
--surface: #f7f7f7;
|
||||
--surface-warm: #eeeeee;
|
||||
--fg: #111111;
|
||||
--fg-2: #3a3a3a;
|
||||
--muted: #707070;
|
||||
--meta: #111111;
|
||||
--border: #d9d9d9;
|
||||
--border-soft: #eeeeee;
|
||||
--accent: #111111;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #168a46;
|
||||
--warn: #b7791f;
|
||||
--danger: #c53030;
|
||||
--font-display: Arial Black, Impact, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 4px;
|
||||
--radius-md: 8px;
|
||||
--radius-lg: 12px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 16px 40px rgba(0, 0, 0, 0.10);
|
||||
--focus-ring: 0 0 0 3px rgba(17, 17, 17, 0.18);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #ffffff 0%, #f7f7f7 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Bold design system</p>
|
||||
<h1>High-contrast campaign system</h1>
|
||||
<p class="lead">Large type, confident blocks, and direct action patterns for punchy visual systems.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Bold component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>bold campaign language with hard contrast, oversized type, and assertive actions.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="bold-input">Reference input</label><input id="bold-input" value="Bold system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/bold/tokens.css
Normal file
63
design-systems/bold/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/bold/tokens.css
|
||||
* Structured token bindings for Bold.
|
||||
* bold campaign language with hard contrast, oversized type, and assertive actions.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #ffffff;
|
||||
--surface: #f7f7f7;
|
||||
--surface-warm: #eeeeee;
|
||||
--fg: #111111;
|
||||
--fg-2: #3a3a3a;
|
||||
--muted: #707070;
|
||||
--meta: #111111;
|
||||
--border: #d9d9d9;
|
||||
--border-soft: #eeeeee;
|
||||
--accent: #111111;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #168a46;
|
||||
--warn: #b7791f;
|
||||
--danger: #c53030;
|
||||
--font-display: Arial Black, Impact, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 4px;
|
||||
--radius-md: 8px;
|
||||
--radius-lg: 12px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 16px 40px rgba(0, 0, 0, 0.10);
|
||||
--focus-ring: 0 0 0 3px rgba(17, 17, 17, 0.18);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/cafe/components.html
Normal file
136
design-systems/cafe/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Cafe - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/cafe: cafe hospitality system with warm cream, espresso text, and inviting menu surfaces." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #fbf6ee;
|
||||
--surface: #fffdf8;
|
||||
--surface-warm: #f1e3cf;
|
||||
--fg: #201914;
|
||||
--fg-2: #4c4037;
|
||||
--muted: #7a6d63;
|
||||
--meta: #9b5b32;
|
||||
--border: #ded2c3;
|
||||
--border-soft: #eee4d7;
|
||||
--accent: #9b5b32;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4f8a4f;
|
||||
--warn: #c9822f;
|
||||
--danger: #b33a3a;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 17px;
|
||||
--text-lg: 20px;
|
||||
--text-xl: 28px;
|
||||
--text-2xl: 42px;
|
||||
--text-3xl: 64px;
|
||||
--text-4xl: 88px;
|
||||
--leading-body: 1.62;
|
||||
--leading-tight: 1;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 112px;
|
||||
--section-y-tablet: 80px;
|
||||
--section-y-phone: 56px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(32, 25, 20, 0.12);
|
||||
--focus-ring: 0 0 0 4px rgba(155, 91, 50, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #fbf6ee 0%, #fffdf8 58%, #f1e3cf 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Cafe design system</p>
|
||||
<h1>Hospitality menu board</h1>
|
||||
<p class="lead">Warm cafe commerce, menu cards, reservation controls, and cozy editorial atmosphere.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Cafe component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>cafe hospitality system with warm cream, espresso text, and inviting menu surfaces.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="cafe-input">Reference input</label><input id="cafe-input" value="Cafe system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/cafe/tokens.css
Normal file
63
design-systems/cafe/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/cafe/tokens.css
|
||||
* Structured token bindings for Cafe.
|
||||
* cafe hospitality system with warm cream, espresso text, and inviting menu surfaces.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #fbf6ee;
|
||||
--surface: #fffdf8;
|
||||
--surface-warm: #f1e3cf;
|
||||
--fg: #201914;
|
||||
--fg-2: #4c4037;
|
||||
--muted: #7a6d63;
|
||||
--meta: #9b5b32;
|
||||
--border: #ded2c3;
|
||||
--border-soft: #eee4d7;
|
||||
--accent: #9b5b32;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4f8a4f;
|
||||
--warn: #c9822f;
|
||||
--danger: #b33a3a;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 17px;
|
||||
--text-lg: 20px;
|
||||
--text-xl: 28px;
|
||||
--text-2xl: 42px;
|
||||
--text-3xl: 64px;
|
||||
--text-4xl: 88px;
|
||||
--leading-body: 1.62;
|
||||
--leading-tight: 1;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 112px;
|
||||
--section-y-tablet: 80px;
|
||||
--section-y-phone: 56px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(32, 25, 20, 0.12);
|
||||
--focus-ring: 0 0 0 4px rgba(155, 91, 50, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/clay/components.html
Normal file
136
design-systems/clay/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Clay - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/clay: soft clay interface with molded surfaces, warm shadows, and approachable controls." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #f7eee6;
|
||||
--surface: #fff8f1;
|
||||
--surface-warm: #ead6c7;
|
||||
--fg: #2b211c;
|
||||
--fg-2: #5a4b43;
|
||||
--muted: #8a7a70;
|
||||
--meta: #b46a46;
|
||||
--border: #dac8b9;
|
||||
--border-soft: #eaded4;
|
||||
--accent: #b46a46;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4d8f5a;
|
||||
--warn: #c88735;
|
||||
--danger: #b84c4c;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 14px;
|
||||
--radius-md: 22px;
|
||||
--radius-lg: 34px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 8px 10px 24px rgba(128, 92, 70, 0.18), -8px -8px 20px rgba(255, 255, 255, 0.70);
|
||||
--focus-ring: 0 0 0 4px rgba(180, 106, 70, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #f7eee6 0%, #fff8f1 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Clay design system</p>
|
||||
<h1>Soft molded interface</h1>
|
||||
<p class="lead">Tactile clay surfaces, raised controls, and warm product cards for playful tools.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Clay component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>soft clay interface with molded surfaces, warm shadows, and approachable controls.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="clay-input">Reference input</label><input id="clay-input" value="Clay system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/clay/tokens.css
Normal file
63
design-systems/clay/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/clay/tokens.css
|
||||
* Structured token bindings for Clay.
|
||||
* soft clay interface with molded surfaces, warm shadows, and approachable controls.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #f7eee6;
|
||||
--surface: #fff8f1;
|
||||
--surface-warm: #ead6c7;
|
||||
--fg: #2b211c;
|
||||
--fg-2: #5a4b43;
|
||||
--muted: #8a7a70;
|
||||
--meta: #b46a46;
|
||||
--border: #dac8b9;
|
||||
--border-soft: #eaded4;
|
||||
--accent: #b46a46;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4d8f5a;
|
||||
--warn: #c88735;
|
||||
--danger: #b84c4c;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 14px;
|
||||
--radius-md: 22px;
|
||||
--radius-lg: 34px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 8px 10px 24px rgba(128, 92, 70, 0.18), -8px -8px 20px rgba(255, 255, 255, 0.70);
|
||||
--focus-ring: 0 0 0 4px rgba(180, 106, 70, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/claymorphism/components.html
Normal file
136
design-systems/claymorphism/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Claymorphism - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/claymorphism: claymorphism visual language with rounded molded panels and soft relief." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #f7eee6;
|
||||
--surface: #fff8f1;
|
||||
--surface-warm: #ead6c7;
|
||||
--fg: #2b211c;
|
||||
--fg-2: #5a4b43;
|
||||
--muted: #8a7a70;
|
||||
--meta: #b46a46;
|
||||
--border: #dac8b9;
|
||||
--border-soft: #eaded4;
|
||||
--accent: #b46a46;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4d8f5a;
|
||||
--warn: #c88735;
|
||||
--danger: #b84c4c;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 14px;
|
||||
--radius-md: 22px;
|
||||
--radius-lg: 34px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 8px 10px 24px rgba(128, 92, 70, 0.18), -8px -8px 20px rgba(255, 255, 255, 0.70);
|
||||
--focus-ring: 0 0 0 4px rgba(180, 106, 70, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #f7eee6 0%, #fff8f1 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Claymorphism design system</p>
|
||||
<h1>Molded depth system</h1>
|
||||
<p class="lead">Rounded 3D-like cards, soft inset controls, and tactile pastel surfaces.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Claymorphism component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>claymorphism visual language with rounded molded panels and soft relief.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="claymorphism-input">Reference input</label><input id="claymorphism-input" value="Claymorphism system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/claymorphism/tokens.css
Normal file
63
design-systems/claymorphism/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/claymorphism/tokens.css
|
||||
* Structured token bindings for Claymorphism.
|
||||
* claymorphism visual language with rounded molded panels and soft relief.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #f7eee6;
|
||||
--surface: #fff8f1;
|
||||
--surface-warm: #ead6c7;
|
||||
--fg: #2b211c;
|
||||
--fg-2: #5a4b43;
|
||||
--muted: #8a7a70;
|
||||
--meta: #b46a46;
|
||||
--border: #dac8b9;
|
||||
--border-soft: #eaded4;
|
||||
--accent: #b46a46;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4d8f5a;
|
||||
--warn: #c88735;
|
||||
--danger: #b84c4c;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 14px;
|
||||
--radius-md: 22px;
|
||||
--radius-lg: 34px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 8px 10px 24px rgba(128, 92, 70, 0.18), -8px -8px 20px rgba(255, 255, 255, 0.70);
|
||||
--focus-ring: 0 0 0 4px rgba(180, 106, 70, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/clean/components.html
Normal file
136
design-systems/clean/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Clean - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/clean: clean product system with white surfaces, subtle borders, and focused hierarchy." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #ffffff;
|
||||
--surface: #f7f7f7;
|
||||
--surface-warm: #eeeeee;
|
||||
--fg: #111111;
|
||||
--fg-2: #3a3a3a;
|
||||
--muted: #707070;
|
||||
--meta: #111111;
|
||||
--border: #d9d9d9;
|
||||
--border-soft: #eeeeee;
|
||||
--accent: #111111;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #168a46;
|
||||
--warn: #b7791f;
|
||||
--danger: #c53030;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 4px;
|
||||
--radius-md: 8px;
|
||||
--radius-lg: 12px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 16px 40px rgba(0, 0, 0, 0.10);
|
||||
--focus-ring: 0 0 0 3px rgba(17, 17, 17, 0.18);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #ffffff 0%, #f7f7f7 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Clean design system</p>
|
||||
<h1>Clarity-first product surface</h1>
|
||||
<p class="lead">Quiet neutral components, crisp hierarchy, and low-noise application patterns.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Clean component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>clean product system with white surfaces, subtle borders, and focused hierarchy.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="clean-input">Reference input</label><input id="clean-input" value="Clean system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/clean/tokens.css
Normal file
63
design-systems/clean/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/clean/tokens.css
|
||||
* Structured token bindings for Clean.
|
||||
* clean product system with white surfaces, subtle borders, and focused hierarchy.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #ffffff;
|
||||
--surface: #f7f7f7;
|
||||
--surface-warm: #eeeeee;
|
||||
--fg: #111111;
|
||||
--fg-2: #3a3a3a;
|
||||
--muted: #707070;
|
||||
--meta: #111111;
|
||||
--border: #d9d9d9;
|
||||
--border-soft: #eeeeee;
|
||||
--accent: #111111;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #168a46;
|
||||
--warn: #b7791f;
|
||||
--danger: #c53030;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 4px;
|
||||
--radius-md: 8px;
|
||||
--radius-lg: 12px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 16px 40px rgba(0, 0, 0, 0.10);
|
||||
--focus-ring: 0 0 0 3px rgba(17, 17, 17, 0.18);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/colorful/components.html
Normal file
136
design-systems/colorful/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Colorful - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/colorful: colorful product language with warm bright canvas and saturated action color." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #fff8d7;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #ffef9f;
|
||||
--fg: #1d1836;
|
||||
--fg-2: #4c426c;
|
||||
--muted: #796f91;
|
||||
--meta: #ff6b00;
|
||||
--border: #eadfba;
|
||||
--border-soft: #f5eccd;
|
||||
--accent: #ff6b00;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #2e9d57;
|
||||
--warn: #ffb020;
|
||||
--danger: #e5484d;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 18px 44px rgba(29, 24, 54, 0.14);
|
||||
--focus-ring: 0 0 0 4px rgba(255, 107, 0, 0.26);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #fff8d7 0%, #ffef9f 52%, #ffffff 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Colorful design system</p>
|
||||
<h1>Vibrant launch kit</h1>
|
||||
<p class="lead">High-energy cards, bright accent states, and playful marketing sections.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Colorful component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>colorful product language with warm bright canvas and saturated action color.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="colorful-input">Reference input</label><input id="colorful-input" value="Colorful system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/colorful/tokens.css
Normal file
63
design-systems/colorful/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/colorful/tokens.css
|
||||
* Structured token bindings for Colorful.
|
||||
* colorful product language with warm bright canvas and saturated action color.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #fff8d7;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #ffef9f;
|
||||
--fg: #1d1836;
|
||||
--fg-2: #4c426c;
|
||||
--muted: #796f91;
|
||||
--meta: #ff6b00;
|
||||
--border: #eadfba;
|
||||
--border-soft: #f5eccd;
|
||||
--accent: #ff6b00;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #2e9d57;
|
||||
--warn: #ffb020;
|
||||
--danger: #e5484d;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 18px 44px rgba(29, 24, 54, 0.14);
|
||||
--focus-ring: 0 0 0 4px rgba(255, 107, 0, 0.26);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/contemporary/components.html
Normal file
136
design-systems/contemporary/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Contemporary - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/contemporary: contemporary product system with polished neutrals, soft panels, and measured accent color." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #f5f8ff;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #eaf1ff;
|
||||
--fg: #101828;
|
||||
--fg-2: #344054;
|
||||
--muted: #667085;
|
||||
--meta: #2563eb;
|
||||
--border: #d7e0ef;
|
||||
--border-soft: #edf2f8;
|
||||
--accent: #2563eb;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #16a34a;
|
||||
--warn: #f59e0b;
|
||||
--danger: #ef4444;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(16, 24, 40, 0.11);
|
||||
--focus-ring: 0 0 0 4px rgba(37, 99, 235, 0.22);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: radial-gradient(circle at 80% 10%, rgba(37, 99, 235, 0.16), transparent 34%), #f5f8ff; }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Contemporary design system</p>
|
||||
<h1>Contemporary product editorial</h1>
|
||||
<p class="lead">Current SaaS layout rhythm, polished type, and calm accent-driven components.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Contemporary component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>contemporary product system with polished neutrals, soft panels, and measured accent color.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="contemporary-input">Reference input</label><input id="contemporary-input" value="Contemporary system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/contemporary/tokens.css
Normal file
63
design-systems/contemporary/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/contemporary/tokens.css
|
||||
* Structured token bindings for Contemporary.
|
||||
* contemporary product system with polished neutrals, soft panels, and measured accent color.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #f5f8ff;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #eaf1ff;
|
||||
--fg: #101828;
|
||||
--fg-2: #344054;
|
||||
--muted: #667085;
|
||||
--meta: #2563eb;
|
||||
--border: #d7e0ef;
|
||||
--border-soft: #edf2f8;
|
||||
--accent: #2563eb;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #16a34a;
|
||||
--warn: #f59e0b;
|
||||
--danger: #ef4444;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(16, 24, 40, 0.11);
|
||||
--focus-ring: 0 0 0 4px rgba(37, 99, 235, 0.22);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/corporate/components.html
Normal file
136
design-systems/corporate/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Corporate - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/corporate: corporate communication language with conservative blue, white panels, and trust-first hierarchy." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #f5f8ff;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #eaf1ff;
|
||||
--fg: #101828;
|
||||
--fg-2: #344054;
|
||||
--muted: #667085;
|
||||
--meta: #2563eb;
|
||||
--border: #d7e0ef;
|
||||
--border-soft: #edf2f8;
|
||||
--accent: #2563eb;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #16a34a;
|
||||
--warn: #f59e0b;
|
||||
--danger: #ef4444;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(16, 24, 40, 0.11);
|
||||
--focus-ring: 0 0 0 4px rgba(37, 99, 235, 0.22);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: radial-gradient(circle at 80% 10%, rgba(37, 99, 235, 0.16), transparent 34%), #f5f8ff; }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Corporate design system</p>
|
||||
<h1>Corporate communications system</h1>
|
||||
<p class="lead">Formal pages, trust modules, annual-report rhythm, and restrained executive surfaces.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Corporate component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>corporate communication language with conservative blue, white panels, and trust-first hierarchy.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="corporate-input">Reference input</label><input id="corporate-input" value="Corporate system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/corporate/tokens.css
Normal file
63
design-systems/corporate/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/corporate/tokens.css
|
||||
* Structured token bindings for Corporate.
|
||||
* corporate communication language with conservative blue, white panels, and trust-first hierarchy.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #f5f8ff;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #eaf1ff;
|
||||
--fg: #101828;
|
||||
--fg-2: #344054;
|
||||
--muted: #667085;
|
||||
--meta: #2563eb;
|
||||
--border: #d7e0ef;
|
||||
--border-soft: #edf2f8;
|
||||
--accent: #2563eb;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #16a34a;
|
||||
--warn: #f59e0b;
|
||||
--danger: #ef4444;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(16, 24, 40, 0.11);
|
||||
--focus-ring: 0 0 0 4px rgba(37, 99, 235, 0.22);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/cosmic/components.html
Normal file
136
design-systems/cosmic/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Cosmic - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/cosmic: cosmic dark interface with star-field depth, luminous violet-blue accents, and spacious modules." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #070711;
|
||||
--surface: #111126;
|
||||
--surface-warm: #1e1540;
|
||||
--fg: #f8f7ff;
|
||||
--fg-2: #d6ccff;
|
||||
--muted: #9d8ad4;
|
||||
--meta: #c084fc;
|
||||
--border: #34265e;
|
||||
--border-soft: #241c42;
|
||||
--accent: #c084fc;
|
||||
--accent-on: #13051f;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #39ff88;
|
||||
--warn: #fff34d;
|
||||
--danger: #ff4d8d;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 24px 80px rgba(192, 132, 252, 0.22);
|
||||
--focus-ring: 0 0 0 4px rgba(192, 132, 252, 0.32);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: radial-gradient(circle at 78% 10%, rgba(192, 132, 252, 0.35), transparent 34%), radial-gradient(circle at 20% 20%, rgba(45, 212, 191, 0.22), transparent 32%), #070711; }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Cosmic design system</p>
|
||||
<h1>Cosmic exploration interface</h1>
|
||||
<p class="lead">Space-like depth, luminous signals, and immersive cards for speculative experiences.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Cosmic component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>cosmic dark interface with star-field depth, luminous violet-blue accents, and spacious modules.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="cosmic-input">Reference input</label><input id="cosmic-input" value="Cosmic system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/cosmic/tokens.css
Normal file
63
design-systems/cosmic/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/cosmic/tokens.css
|
||||
* Structured token bindings for Cosmic.
|
||||
* cosmic dark interface with star-field depth, luminous violet-blue accents, and spacious modules.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #070711;
|
||||
--surface: #111126;
|
||||
--surface-warm: #1e1540;
|
||||
--fg: #f8f7ff;
|
||||
--fg-2: #d6ccff;
|
||||
--muted: #9d8ad4;
|
||||
--meta: #c084fc;
|
||||
--border: #34265e;
|
||||
--border-soft: #241c42;
|
||||
--accent: #c084fc;
|
||||
--accent-on: #13051f;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #39ff88;
|
||||
--warn: #fff34d;
|
||||
--danger: #ff4d8d;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 24px 80px rgba(192, 132, 252, 0.22);
|
||||
--focus-ring: 0 0 0 4px rgba(192, 132, 252, 0.32);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/creative/components.html
Normal file
136
design-systems/creative/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Creative - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/creative: creative workspace language with warm bright panels, rounded controls, and energetic accent states." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #fff8d7;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #ffef9f;
|
||||
--fg: #1d1836;
|
||||
--fg-2: #4c426c;
|
||||
--muted: #796f91;
|
||||
--meta: #ff6b00;
|
||||
--border: #eadfba;
|
||||
--border-soft: #f5eccd;
|
||||
--accent: #ff6b00;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #2e9d57;
|
||||
--warn: #ffb020;
|
||||
--danger: #e5484d;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 18px 44px rgba(29, 24, 54, 0.14);
|
||||
--focus-ring: 0 0 0 4px rgba(255, 107, 0, 0.26);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #fff8d7 0%, #ffef9f 52%, #ffffff 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Creative design system</p>
|
||||
<h1>Creative campaign workspace</h1>
|
||||
<p class="lead">Flexible cards, expressive accents, and friendly controls for concept-led work.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Creative component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>creative workspace language with warm bright panels, rounded controls, and energetic accent states.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="creative-input">Reference input</label><input id="creative-input" value="Creative system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/creative/tokens.css
Normal file
63
design-systems/creative/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/creative/tokens.css
|
||||
* Structured token bindings for Creative.
|
||||
* creative workspace language with warm bright panels, rounded controls, and energetic accent states.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #fff8d7;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #ffef9f;
|
||||
--fg: #1d1836;
|
||||
--fg-2: #4c426c;
|
||||
--muted: #796f91;
|
||||
--meta: #ff6b00;
|
||||
--border: #eadfba;
|
||||
--border-soft: #f5eccd;
|
||||
--accent: #ff6b00;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #2e9d57;
|
||||
--warn: #ffb020;
|
||||
--danger: #e5484d;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 18px 44px rgba(29, 24, 54, 0.14);
|
||||
--focus-ring: 0 0 0 4px rgba(255, 107, 0, 0.26);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/dithered/components.html
Normal file
136
design-systems/dithered/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Dithered - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/dithered: dithered retro interface with hard edges, bitmap texture, and compact monochrome controls." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #fff4cf;
|
||||
--surface: #fffaf0;
|
||||
--surface-warm: #ffdca8;
|
||||
--fg: #2a1810;
|
||||
--fg-2: #593625;
|
||||
--muted: #8a6652;
|
||||
--meta: #d24b1f;
|
||||
--border: #d9aa7a;
|
||||
--border-soft: #efd0ab;
|
||||
--accent: #d24b1f;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #3d8f4f;
|
||||
--warn: #f2a93b;
|
||||
--danger: #b83a2f;
|
||||
--font-display: "Courier New", ui-monospace, monospace;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "Courier New", ui-monospace, monospace;
|
||||
--text-xs: 11px;
|
||||
--text-sm: 12px;
|
||||
--text-base: 14px;
|
||||
--text-lg: 16px;
|
||||
--text-xl: 20px;
|
||||
--text-2xl: 28px;
|
||||
--text-3xl: 40px;
|
||||
--text-4xl: 56px;
|
||||
--leading-body: 1.45;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: 0;
|
||||
--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;
|
||||
--section-y-tablet: 60px;
|
||||
--section-y-phone: 42px;
|
||||
--radius-sm: 4px;
|
||||
--radius-md: 8px;
|
||||
--radius-lg: 12px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 6px 6px 0 rgba(42, 24, 16, 0.26);
|
||||
--focus-ring: 0 0 0 4px rgba(210, 75, 31, 0.28);
|
||||
--motion-fast: 100ms;
|
||||
--motion-base: 180ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1280px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #fff4cf 0%, #ffdca8 58%, #fffaf0 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Dithered design system</p>
|
||||
<h1>Dithered bitmap interface</h1>
|
||||
<p class="lead">Retro-computing texture, monochrome contrast, and pixel-inspired control surfaces.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Dithered component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>dithered retro interface with hard edges, bitmap texture, and compact monochrome controls.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="dithered-input">Reference input</label><input id="dithered-input" value="Dithered system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/dithered/tokens.css
Normal file
63
design-systems/dithered/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/dithered/tokens.css
|
||||
* Structured token bindings for Dithered.
|
||||
* dithered retro interface with hard edges, bitmap texture, and compact monochrome controls.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #fff4cf;
|
||||
--surface: #fffaf0;
|
||||
--surface-warm: #ffdca8;
|
||||
--fg: #2a1810;
|
||||
--fg-2: #593625;
|
||||
--muted: #8a6652;
|
||||
--meta: #d24b1f;
|
||||
--border: #d9aa7a;
|
||||
--border-soft: #efd0ab;
|
||||
--accent: #d24b1f;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #3d8f4f;
|
||||
--warn: #f2a93b;
|
||||
--danger: #b83a2f;
|
||||
--font-display: "Courier New", ui-monospace, monospace;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "Courier New", ui-monospace, monospace;
|
||||
--text-xs: 11px;
|
||||
--text-sm: 12px;
|
||||
--text-base: 14px;
|
||||
--text-lg: 16px;
|
||||
--text-xl: 20px;
|
||||
--text-2xl: 28px;
|
||||
--text-3xl: 40px;
|
||||
--text-4xl: 56px;
|
||||
--leading-body: 1.45;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: 0;
|
||||
--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;
|
||||
--section-y-tablet: 60px;
|
||||
--section-y-phone: 42px;
|
||||
--radius-sm: 4px;
|
||||
--radius-md: 8px;
|
||||
--radius-lg: 12px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 6px 6px 0 rgba(42, 24, 16, 0.26);
|
||||
--focus-ring: 0 0 0 4px rgba(210, 75, 31, 0.28);
|
||||
--motion-fast: 100ms;
|
||||
--motion-base: 180ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1280px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/doodle/components.html
Normal file
136
design-systems/doodle/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Doodle - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/doodle: doodle visual language with sketchbook warmth, soft cards, and informal orange accents." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #fff8d7;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #ffef9f;
|
||||
--fg: #1d1836;
|
||||
--fg-2: #4c426c;
|
||||
--muted: #796f91;
|
||||
--meta: #ff6b00;
|
||||
--border: #eadfba;
|
||||
--border-soft: #f5eccd;
|
||||
--accent: #ff6b00;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #2e9d57;
|
||||
--warn: #ffb020;
|
||||
--danger: #e5484d;
|
||||
--font-display: "Comic Sans MS", "Trebuchet MS", sans-serif;
|
||||
--font-body: "Comic Sans MS", "Trebuchet MS", sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 18px 44px rgba(29, 24, 54, 0.14);
|
||||
--focus-ring: 0 0 0 4px rgba(255, 107, 0, 0.26);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #fff8d7 0%, #ffef9f 52%, #ffffff 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Doodle design system</p>
|
||||
<h1>Sketchbook product system</h1>
|
||||
<p class="lead">Hand-drawn energy, rounded notes, and playful cards for lightweight ideation.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Doodle component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>doodle visual language with sketchbook warmth, soft cards, and informal orange accents.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="doodle-input">Reference input</label><input id="doodle-input" value="Doodle system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/doodle/tokens.css
Normal file
63
design-systems/doodle/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/doodle/tokens.css
|
||||
* Structured token bindings for Doodle.
|
||||
* doodle visual language with sketchbook warmth, soft cards, and informal orange accents.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #fff8d7;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #ffef9f;
|
||||
--fg: #1d1836;
|
||||
--fg-2: #4c426c;
|
||||
--muted: #796f91;
|
||||
--meta: #ff6b00;
|
||||
--border: #eadfba;
|
||||
--border-soft: #f5eccd;
|
||||
--accent: #ff6b00;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #2e9d57;
|
||||
--warn: #ffb020;
|
||||
--danger: #e5484d;
|
||||
--font-display: "Comic Sans MS", "Trebuchet MS", sans-serif;
|
||||
--font-body: "Comic Sans MS", "Trebuchet MS", sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 18px 44px rgba(29, 24, 54, 0.14);
|
||||
--focus-ring: 0 0 0 4px rgba(255, 107, 0, 0.26);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/dramatic/components.html
Normal file
136
design-systems/dramatic/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Dramatic - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/dramatic: dramatic cinematic interface with dark surfaces, strong contrast, and spotlight accent states." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #090b12;
|
||||
--surface: #121722;
|
||||
--surface-warm: #1b2233;
|
||||
--fg: #f8fafc;
|
||||
--fg-2: #cbd5e1;
|
||||
--muted: #94a3b8;
|
||||
--meta: #60a5fa;
|
||||
--border: #2a3447;
|
||||
--border-soft: #1d2636;
|
||||
--accent: #60a5fa;
|
||||
--accent-on: #06101d;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #22c55e;
|
||||
--warn: #fbbf24;
|
||||
--danger: #fb7185;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 24px 72px rgba(0, 0, 0, 0.42);
|
||||
--focus-ring: 0 0 0 4px rgba(96, 165, 250, 0.28);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: radial-gradient(circle at 80% 8%, rgba(96, 165, 250, 0.24), transparent 34%), #090b12; }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Dramatic design system</p>
|
||||
<h1>Cinematic landing system</h1>
|
||||
<p class="lead">Dark immersive panels, high contrast, and theatrical content reveals.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Dramatic component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>dramatic cinematic interface with dark surfaces, strong contrast, and spotlight accent states.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="dramatic-input">Reference input</label><input id="dramatic-input" value="Dramatic system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/dramatic/tokens.css
Normal file
63
design-systems/dramatic/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/dramatic/tokens.css
|
||||
* Structured token bindings for Dramatic.
|
||||
* dramatic cinematic interface with dark surfaces, strong contrast, and spotlight accent states.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #090b12;
|
||||
--surface: #121722;
|
||||
--surface-warm: #1b2233;
|
||||
--fg: #f8fafc;
|
||||
--fg-2: #cbd5e1;
|
||||
--muted: #94a3b8;
|
||||
--meta: #60a5fa;
|
||||
--border: #2a3447;
|
||||
--border-soft: #1d2636;
|
||||
--accent: #60a5fa;
|
||||
--accent-on: #06101d;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #22c55e;
|
||||
--warn: #fbbf24;
|
||||
--danger: #fb7185;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 24px 72px rgba(0, 0, 0, 0.42);
|
||||
--focus-ring: 0 0 0 4px rgba(96, 165, 250, 0.28);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/elegant/components.html
Normal file
136
design-systems/elegant/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Elegant - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/elegant: elegant interface language with warm neutrals, serif display type, and quiet premium controls." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #fbf6ee;
|
||||
--surface: #fffdf8;
|
||||
--surface-warm: #f1e3cf;
|
||||
--fg: #201914;
|
||||
--fg-2: #4c4037;
|
||||
--muted: #7a6d63;
|
||||
--meta: #9b5b32;
|
||||
--border: #ded2c3;
|
||||
--border-soft: #eee4d7;
|
||||
--accent: #9b5b32;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4f8a4f;
|
||||
--warn: #c9822f;
|
||||
--danger: #b33a3a;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 17px;
|
||||
--text-lg: 20px;
|
||||
--text-xl: 28px;
|
||||
--text-2xl: 42px;
|
||||
--text-3xl: 64px;
|
||||
--text-4xl: 88px;
|
||||
--leading-body: 1.62;
|
||||
--leading-tight: 1;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 112px;
|
||||
--section-y-tablet: 80px;
|
||||
--section-y-phone: 56px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(32, 25, 20, 0.12);
|
||||
--focus-ring: 0 0 0 4px rgba(155, 91, 50, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #fbf6ee 0%, #fffdf8 58%, #f1e3cf 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Elegant design system</p>
|
||||
<h1>Elegant editorial commerce</h1>
|
||||
<p class="lead">Refined typography, soft luxury neutrals, and graceful product presentation.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Elegant component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>elegant interface language with warm neutrals, serif display type, and quiet premium controls.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="elegant-input">Reference input</label><input id="elegant-input" value="Elegant system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/elegant/tokens.css
Normal file
63
design-systems/elegant/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/elegant/tokens.css
|
||||
* Structured token bindings for Elegant.
|
||||
* elegant interface language with warm neutrals, serif display type, and quiet premium controls.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #fbf6ee;
|
||||
--surface: #fffdf8;
|
||||
--surface-warm: #f1e3cf;
|
||||
--fg: #201914;
|
||||
--fg-2: #4c4037;
|
||||
--muted: #7a6d63;
|
||||
--meta: #9b5b32;
|
||||
--border: #ded2c3;
|
||||
--border-soft: #eee4d7;
|
||||
--accent: #9b5b32;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4f8a4f;
|
||||
--warn: #c9822f;
|
||||
--danger: #b33a3a;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 17px;
|
||||
--text-lg: 20px;
|
||||
--text-xl: 28px;
|
||||
--text-2xl: 42px;
|
||||
--text-3xl: 64px;
|
||||
--text-4xl: 88px;
|
||||
--leading-body: 1.62;
|
||||
--leading-tight: 1;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 112px;
|
||||
--section-y-tablet: 80px;
|
||||
--section-y-phone: 56px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(32, 25, 20, 0.12);
|
||||
--focus-ring: 0 0 0 4px rgba(155, 91, 50, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/energetic/components.html
Normal file
136
design-systems/energetic/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Energetic - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/energetic: energetic product system with saturated action, tight motion, and lively card structure." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #fff8d7;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #ffef9f;
|
||||
--fg: #1d1836;
|
||||
--fg-2: #4c426c;
|
||||
--muted: #796f91;
|
||||
--meta: #ff6b00;
|
||||
--border: #eadfba;
|
||||
--border-soft: #f5eccd;
|
||||
--accent: #ff6b00;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #2e9d57;
|
||||
--warn: #ffb020;
|
||||
--danger: #e5484d;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 18px 44px rgba(29, 24, 54, 0.14);
|
||||
--focus-ring: 0 0 0 4px rgba(255, 107, 0, 0.26);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #fff8d7 0%, #ffef9f 52%, #ffffff 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Energetic design system</p>
|
||||
<h1>Momentum launch system</h1>
|
||||
<p class="lead">Fast marketing sections, bright actions, and confident product-card rhythm.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Energetic component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>energetic product system with saturated action, tight motion, and lively card structure.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="energetic-input">Reference input</label><input id="energetic-input" value="Energetic system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/energetic/tokens.css
Normal file
63
design-systems/energetic/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/energetic/tokens.css
|
||||
* Structured token bindings for Energetic.
|
||||
* energetic product system with saturated action, tight motion, and lively card structure.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #fff8d7;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #ffef9f;
|
||||
--fg: #1d1836;
|
||||
--fg-2: #4c426c;
|
||||
--muted: #796f91;
|
||||
--meta: #ff6b00;
|
||||
--border: #eadfba;
|
||||
--border-soft: #f5eccd;
|
||||
--accent: #ff6b00;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #2e9d57;
|
||||
--warn: #ffb020;
|
||||
--danger: #e5484d;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 18px 44px rgba(29, 24, 54, 0.14);
|
||||
--focus-ring: 0 0 0 4px rgba(255, 107, 0, 0.26);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/expressive/components.html
Normal file
136
design-systems/expressive/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Expressive - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/expressive: expressive design language with vibrant accents, roomy sections, and characterful cards." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #fbf8ff;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #efe8ff;
|
||||
--fg: #1f1730;
|
||||
--fg-2: #4d425f;
|
||||
--muted: #776b88;
|
||||
--meta: #7c3aed;
|
||||
--border: #ded4ee;
|
||||
--border-soft: #efe8f7;
|
||||
--accent: #7c3aed;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #16a34a;
|
||||
--warn: #f59e0b;
|
||||
--danger: #ef4444;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 22px 58px rgba(87, 49, 139, 0.13);
|
||||
--focus-ring: 0 0 0 4px rgba(124, 58, 237, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: radial-gradient(circle at 78% 8%, rgba(124, 58, 237, 0.18), transparent 34%), #fbf8ff; }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Expressive design system</p>
|
||||
<h1>Expressive storytelling kit</h1>
|
||||
<p class="lead">Large display type, colorful emphasis, and flexible campaign components.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Expressive component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>expressive design language with vibrant accents, roomy sections, and characterful cards.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="expressive-input">Reference input</label><input id="expressive-input" value="Expressive system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/expressive/tokens.css
Normal file
63
design-systems/expressive/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/expressive/tokens.css
|
||||
* Structured token bindings for Expressive.
|
||||
* expressive design language with vibrant accents, roomy sections, and characterful cards.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #fbf8ff;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #efe8ff;
|
||||
--fg: #1f1730;
|
||||
--fg-2: #4d425f;
|
||||
--muted: #776b88;
|
||||
--meta: #7c3aed;
|
||||
--border: #ded4ee;
|
||||
--border-soft: #efe8f7;
|
||||
--accent: #7c3aed;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #16a34a;
|
||||
--warn: #f59e0b;
|
||||
--danger: #ef4444;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 22px 58px rgba(87, 49, 139, 0.13);
|
||||
--focus-ring: 0 0 0 4px rgba(124, 58, 237, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/fantasy/components.html
Normal file
136
design-systems/fantasy/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Fantasy - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/fantasy: fantasy interface with deep mystical surfaces, luminous accents, and ornate card rhythm." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #070711;
|
||||
--surface: #111126;
|
||||
--surface-warm: #1e1540;
|
||||
--fg: #f8f7ff;
|
||||
--fg-2: #d6ccff;
|
||||
--muted: #9d8ad4;
|
||||
--meta: #c084fc;
|
||||
--border: #34265e;
|
||||
--border-soft: #241c42;
|
||||
--accent: #c084fc;
|
||||
--accent-on: #13051f;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #39ff88;
|
||||
--warn: #fff34d;
|
||||
--danger: #ff4d8d;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 24px 80px rgba(192, 132, 252, 0.22);
|
||||
--focus-ring: 0 0 0 4px rgba(192, 132, 252, 0.32);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: radial-gradient(circle at 78% 10%, rgba(192, 132, 252, 0.35), transparent 34%), radial-gradient(circle at 20% 20%, rgba(45, 212, 191, 0.22), transparent 32%), #070711; }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Fantasy design system</p>
|
||||
<h1>Fantasy world interface</h1>
|
||||
<p class="lead">Ornamental surfaces, glowing status, and storybook-inspired product modules.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Fantasy component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>fantasy interface with deep mystical surfaces, luminous accents, and ornate card rhythm.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="fantasy-input">Reference input</label><input id="fantasy-input" value="Fantasy system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/fantasy/tokens.css
Normal file
63
design-systems/fantasy/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/fantasy/tokens.css
|
||||
* Structured token bindings for Fantasy.
|
||||
* fantasy interface with deep mystical surfaces, luminous accents, and ornate card rhythm.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #070711;
|
||||
--surface: #111126;
|
||||
--surface-warm: #1e1540;
|
||||
--fg: #f8f7ff;
|
||||
--fg-2: #d6ccff;
|
||||
--muted: #9d8ad4;
|
||||
--meta: #c084fc;
|
||||
--border: #34265e;
|
||||
--border-soft: #241c42;
|
||||
--accent: #c084fc;
|
||||
--accent-on: #13051f;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #39ff88;
|
||||
--warn: #fff34d;
|
||||
--danger: #ff4d8d;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 24px 80px rgba(192, 132, 252, 0.22);
|
||||
--focus-ring: 0 0 0 4px rgba(192, 132, 252, 0.32);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/flat/components.html
Normal file
136
design-systems/flat/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Flat - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/flat: flat interface system with crisp colors, no depth effects, and direct component hierarchy." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #f5f8ff;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #eaf1ff;
|
||||
--fg: #101828;
|
||||
--fg-2: #344054;
|
||||
--muted: #667085;
|
||||
--meta: #2563eb;
|
||||
--border: #d7e0ef;
|
||||
--border-soft: #edf2f8;
|
||||
--accent: #2563eb;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #16a34a;
|
||||
--warn: #f59e0b;
|
||||
--danger: #ef4444;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(16, 24, 40, 0.11);
|
||||
--focus-ring: 0 0 0 4px rgba(37, 99, 235, 0.22);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: radial-gradient(circle at 80% 10%, rgba(37, 99, 235, 0.16), transparent 34%), #f5f8ff; }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Flat design system</p>
|
||||
<h1>Flat UI system</h1>
|
||||
<p class="lead">No-shadow panels, clear color blocks, and simple direct interaction states.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Flat component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>flat interface system with crisp colors, no depth effects, and direct component hierarchy.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="flat-input">Reference input</label><input id="flat-input" value="Flat system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/flat/tokens.css
Normal file
63
design-systems/flat/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/flat/tokens.css
|
||||
* Structured token bindings for Flat.
|
||||
* flat interface system with crisp colors, no depth effects, and direct component hierarchy.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #f5f8ff;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #eaf1ff;
|
||||
--fg: #101828;
|
||||
--fg-2: #344054;
|
||||
--muted: #667085;
|
||||
--meta: #2563eb;
|
||||
--border: #d7e0ef;
|
||||
--border-soft: #edf2f8;
|
||||
--accent: #2563eb;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #16a34a;
|
||||
--warn: #f59e0b;
|
||||
--danger: #ef4444;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(16, 24, 40, 0.11);
|
||||
--focus-ring: 0 0 0 4px rgba(37, 99, 235, 0.22);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/friendly/components.html
Normal file
136
design-systems/friendly/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Friendly - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/friendly: friendly product surface with warm colors, rounded controls, and low-pressure hierarchy." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #fff8d7;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #ffef9f;
|
||||
--fg: #1d1836;
|
||||
--fg-2: #4c426c;
|
||||
--muted: #796f91;
|
||||
--meta: #ff6b00;
|
||||
--border: #eadfba;
|
||||
--border-soft: #f5eccd;
|
||||
--accent: #ff6b00;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #2e9d57;
|
||||
--warn: #ffb020;
|
||||
--danger: #e5484d;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 18px 44px rgba(29, 24, 54, 0.14);
|
||||
--focus-ring: 0 0 0 4px rgba(255, 107, 0, 0.26);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #fff8d7 0%, #ffef9f 52%, #ffffff 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Friendly design system</p>
|
||||
<h1>Friendly onboarding system</h1>
|
||||
<p class="lead">Soft cards, welcoming language, and rounded controls for approachable products.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Friendly component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>friendly product surface with warm colors, rounded controls, and low-pressure hierarchy.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="friendly-input">Reference input</label><input id="friendly-input" value="Friendly system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/friendly/tokens.css
Normal file
63
design-systems/friendly/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/friendly/tokens.css
|
||||
* Structured token bindings for Friendly.
|
||||
* friendly product surface with warm colors, rounded controls, and low-pressure hierarchy.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #fff8d7;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #ffef9f;
|
||||
--fg: #1d1836;
|
||||
--fg-2: #4c426c;
|
||||
--muted: #796f91;
|
||||
--meta: #ff6b00;
|
||||
--border: #eadfba;
|
||||
--border-soft: #f5eccd;
|
||||
--accent: #ff6b00;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #2e9d57;
|
||||
--warn: #ffb020;
|
||||
--danger: #e5484d;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 18px 44px rgba(29, 24, 54, 0.14);
|
||||
--focus-ring: 0 0 0 4px rgba(255, 107, 0, 0.26);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/futuristic/components.html
Normal file
136
design-systems/futuristic/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Futuristic - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/futuristic: futuristic interface with dark panels, cyan accent, compact data, and advanced product cues." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #090b12;
|
||||
--surface: #121722;
|
||||
--surface-warm: #1b2233;
|
||||
--fg: #f8fafc;
|
||||
--fg-2: #cbd5e1;
|
||||
--muted: #94a3b8;
|
||||
--meta: #60a5fa;
|
||||
--border: #2a3447;
|
||||
--border-soft: #1d2636;
|
||||
--accent: #60a5fa;
|
||||
--accent-on: #06101d;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #22c55e;
|
||||
--warn: #fbbf24;
|
||||
--danger: #fb7185;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 24px 72px rgba(0, 0, 0, 0.42);
|
||||
--focus-ring: 0 0 0 4px rgba(96, 165, 250, 0.28);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: radial-gradient(circle at 80% 8%, rgba(96, 165, 250, 0.24), transparent 34%), #090b12; }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Futuristic design system</p>
|
||||
<h1>Future systems console</h1>
|
||||
<p class="lead">Sharp dark panels, cyan signals, and high-tech component structure.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Futuristic component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>futuristic interface with dark panels, cyan accent, compact data, and advanced product cues.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="futuristic-input">Reference input</label><input id="futuristic-input" value="Futuristic system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/futuristic/tokens.css
Normal file
63
design-systems/futuristic/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/futuristic/tokens.css
|
||||
* Structured token bindings for Futuristic.
|
||||
* futuristic interface with dark panels, cyan accent, compact data, and advanced product cues.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #090b12;
|
||||
--surface: #121722;
|
||||
--surface-warm: #1b2233;
|
||||
--fg: #f8fafc;
|
||||
--fg-2: #cbd5e1;
|
||||
--muted: #94a3b8;
|
||||
--meta: #60a5fa;
|
||||
--border: #2a3447;
|
||||
--border-soft: #1d2636;
|
||||
--accent: #60a5fa;
|
||||
--accent-on: #06101d;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #22c55e;
|
||||
--warn: #fbbf24;
|
||||
--danger: #fb7185;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 24px 72px rgba(0, 0, 0, 0.42);
|
||||
--focus-ring: 0 0 0 4px rgba(96, 165, 250, 0.28);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/hud/components.html
Normal file
136
design-systems/hud/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>HUD - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/hud: HUD interface language with dark transparent panels, cyan telemetry, and compact status readouts." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #090b12;
|
||||
--surface: #121722;
|
||||
--surface-warm: #1b2233;
|
||||
--fg: #f8fafc;
|
||||
--fg-2: #cbd5e1;
|
||||
--muted: #94a3b8;
|
||||
--meta: #60a5fa;
|
||||
--border: #2a3447;
|
||||
--border-soft: #1d2636;
|
||||
--accent: #60a5fa;
|
||||
--accent-on: #06101d;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #22c55e;
|
||||
--warn: #fbbf24;
|
||||
--danger: #fb7185;
|
||||
--font-display: "IBM Plex Mono", ui-monospace, monospace;
|
||||
--font-body: "IBM Plex Mono", ui-monospace, monospace;
|
||||
--font-mono: "IBM Plex Mono", ui-monospace, monospace;
|
||||
--text-xs: 11px;
|
||||
--text-sm: 12px;
|
||||
--text-base: 14px;
|
||||
--text-lg: 16px;
|
||||
--text-xl: 20px;
|
||||
--text-2xl: 28px;
|
||||
--text-3xl: 40px;
|
||||
--text-4xl: 56px;
|
||||
--leading-body: 1.45;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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;
|
||||
--section-y-tablet: 60px;
|
||||
--section-y-phone: 42px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 24px 72px rgba(0, 0, 0, 0.42);
|
||||
--focus-ring: 0 0 0 4px rgba(96, 165, 250, 0.28);
|
||||
--motion-fast: 100ms;
|
||||
--motion-base: 180ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1280px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: radial-gradient(circle at 80% 8%, rgba(96, 165, 250, 0.24), transparent 34%), #090b12; }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">HUD design system</p>
|
||||
<h1>Heads-up display overlay</h1>
|
||||
<p class="lead">Transparent tactical panels, scanning metrics, and high-contrast status overlays.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="HUD component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>HUD interface language with dark transparent panels, cyan telemetry, and compact status readouts.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="hud-input">Reference input</label><input id="hud-input" value="HUD system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/hud/tokens.css
Normal file
63
design-systems/hud/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/hud/tokens.css
|
||||
* Structured token bindings for HUD.
|
||||
* HUD interface language with dark transparent panels, cyan telemetry, and compact status readouts.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #090b12;
|
||||
--surface: #121722;
|
||||
--surface-warm: #1b2233;
|
||||
--fg: #f8fafc;
|
||||
--fg-2: #cbd5e1;
|
||||
--muted: #94a3b8;
|
||||
--meta: #60a5fa;
|
||||
--border: #2a3447;
|
||||
--border-soft: #1d2636;
|
||||
--accent: #60a5fa;
|
||||
--accent-on: #06101d;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #22c55e;
|
||||
--warn: #fbbf24;
|
||||
--danger: #fb7185;
|
||||
--font-display: "IBM Plex Mono", ui-monospace, monospace;
|
||||
--font-body: "IBM Plex Mono", ui-monospace, monospace;
|
||||
--font-mono: "IBM Plex Mono", ui-monospace, monospace;
|
||||
--text-xs: 11px;
|
||||
--text-sm: 12px;
|
||||
--text-base: 14px;
|
||||
--text-lg: 16px;
|
||||
--text-xl: 20px;
|
||||
--text-2xl: 28px;
|
||||
--text-3xl: 40px;
|
||||
--text-4xl: 56px;
|
||||
--leading-body: 1.45;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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;
|
||||
--section-y-tablet: 60px;
|
||||
--section-y-phone: 42px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 24px 72px rgba(0, 0, 0, 0.42);
|
||||
--focus-ring: 0 0 0 4px rgba(96, 165, 250, 0.28);
|
||||
--motion-fast: 100ms;
|
||||
--motion-base: 180ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1280px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/mission-control/components.html
Normal file
136
design-systems/mission-control/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Mission Control - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/mission-control: mission control interface with dark command panels, status color, and dense operational modules." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #090b12;
|
||||
--surface: #121722;
|
||||
--surface-warm: #1b2233;
|
||||
--fg: #f8fafc;
|
||||
--fg-2: #cbd5e1;
|
||||
--muted: #94a3b8;
|
||||
--meta: #60a5fa;
|
||||
--border: #2a3447;
|
||||
--border-soft: #1d2636;
|
||||
--accent: #60a5fa;
|
||||
--accent-on: #06101d;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #22c55e;
|
||||
--warn: #fbbf24;
|
||||
--danger: #fb7185;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 11px;
|
||||
--text-sm: 12px;
|
||||
--text-base: 14px;
|
||||
--text-lg: 16px;
|
||||
--text-xl: 20px;
|
||||
--text-2xl: 28px;
|
||||
--text-3xl: 40px;
|
||||
--text-4xl: 56px;
|
||||
--leading-body: 1.45;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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;
|
||||
--section-y-tablet: 60px;
|
||||
--section-y-phone: 42px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 24px 72px rgba(0, 0, 0, 0.42);
|
||||
--focus-ring: 0 0 0 4px rgba(96, 165, 250, 0.28);
|
||||
--motion-fast: 100ms;
|
||||
--motion-base: 180ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1280px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: radial-gradient(circle at 80% 8%, rgba(96, 165, 250, 0.24), transparent 34%), #090b12; }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Mission Control design system</p>
|
||||
<h1>Mission operations room</h1>
|
||||
<p class="lead">Command surfaces, status boards, and operational telemetry for complex systems.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Mission Control component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>mission control interface with dark command panels, status color, and dense operational modules.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="mission-control-input">Reference input</label><input id="mission-control-input" value="Mission Control system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/mission-control/tokens.css
Normal file
63
design-systems/mission-control/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/mission-control/tokens.css
|
||||
* Structured token bindings for Mission Control.
|
||||
* mission control interface with dark command panels, status color, and dense operational modules.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #090b12;
|
||||
--surface: #121722;
|
||||
--surface-warm: #1b2233;
|
||||
--fg: #f8fafc;
|
||||
--fg-2: #cbd5e1;
|
||||
--muted: #94a3b8;
|
||||
--meta: #60a5fa;
|
||||
--border: #2a3447;
|
||||
--border-soft: #1d2636;
|
||||
--accent: #60a5fa;
|
||||
--accent-on: #06101d;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #22c55e;
|
||||
--warn: #fbbf24;
|
||||
--danger: #fb7185;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 11px;
|
||||
--text-sm: 12px;
|
||||
--text-base: 14px;
|
||||
--text-lg: 16px;
|
||||
--text-xl: 20px;
|
||||
--text-2xl: 28px;
|
||||
--text-3xl: 40px;
|
||||
--text-4xl: 56px;
|
||||
--leading-body: 1.45;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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;
|
||||
--section-y-tablet: 60px;
|
||||
--section-y-phone: 42px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 24px 72px rgba(0, 0, 0, 0.42);
|
||||
--focus-ring: 0 0 0 4px rgba(96, 165, 250, 0.28);
|
||||
--motion-fast: 100ms;
|
||||
--motion-base: 180ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1280px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/mono/components.html
Normal file
136
design-systems/mono/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Mono - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/mono: monochrome interface with black ink, white surfaces, and severe component discipline." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #ffffff;
|
||||
--surface: #f7f7f7;
|
||||
--surface-warm: #eeeeee;
|
||||
--fg: #111111;
|
||||
--fg-2: #3a3a3a;
|
||||
--muted: #707070;
|
||||
--meta: #111111;
|
||||
--border: #d9d9d9;
|
||||
--border-soft: #eeeeee;
|
||||
--accent: #111111;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #168a46;
|
||||
--warn: #b7791f;
|
||||
--danger: #c53030;
|
||||
--font-display: "IBM Plex Mono", ui-monospace, monospace;
|
||||
--font-body: "IBM Plex Mono", ui-monospace, monospace;
|
||||
--font-mono: "IBM Plex Mono", ui-monospace, monospace;
|
||||
--text-xs: 11px;
|
||||
--text-sm: 12px;
|
||||
--text-base: 14px;
|
||||
--text-lg: 16px;
|
||||
--text-xl: 20px;
|
||||
--text-2xl: 28px;
|
||||
--text-3xl: 40px;
|
||||
--text-4xl: 56px;
|
||||
--leading-body: 1.45;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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;
|
||||
--section-y-tablet: 60px;
|
||||
--section-y-phone: 42px;
|
||||
--radius-sm: 4px;
|
||||
--radius-md: 8px;
|
||||
--radius-lg: 12px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 16px 40px rgba(0, 0, 0, 0.10);
|
||||
--focus-ring: 0 0 0 3px rgba(17, 17, 17, 0.18);
|
||||
--motion-fast: 100ms;
|
||||
--motion-base: 180ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1280px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #ffffff 0%, #f7f7f7 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Mono design system</p>
|
||||
<h1>Monochrome product system</h1>
|
||||
<p class="lead">Pure black-and-white structure, disciplined spacing, and typographic restraint.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Mono component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>monochrome interface with black ink, white surfaces, and severe component discipline.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="mono-input">Reference input</label><input id="mono-input" value="Mono system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/mono/tokens.css
Normal file
63
design-systems/mono/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/mono/tokens.css
|
||||
* Structured token bindings for Mono.
|
||||
* monochrome interface with black ink, white surfaces, and severe component discipline.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #ffffff;
|
||||
--surface: #f7f7f7;
|
||||
--surface-warm: #eeeeee;
|
||||
--fg: #111111;
|
||||
--fg-2: #3a3a3a;
|
||||
--muted: #707070;
|
||||
--meta: #111111;
|
||||
--border: #d9d9d9;
|
||||
--border-soft: #eeeeee;
|
||||
--accent: #111111;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #168a46;
|
||||
--warn: #b7791f;
|
||||
--danger: #c53030;
|
||||
--font-display: "IBM Plex Mono", ui-monospace, monospace;
|
||||
--font-body: "IBM Plex Mono", ui-monospace, monospace;
|
||||
--font-mono: "IBM Plex Mono", ui-monospace, monospace;
|
||||
--text-xs: 11px;
|
||||
--text-sm: 12px;
|
||||
--text-base: 14px;
|
||||
--text-lg: 16px;
|
||||
--text-xl: 20px;
|
||||
--text-2xl: 28px;
|
||||
--text-3xl: 40px;
|
||||
--text-4xl: 56px;
|
||||
--leading-body: 1.45;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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;
|
||||
--section-y-tablet: 60px;
|
||||
--section-y-phone: 42px;
|
||||
--radius-sm: 4px;
|
||||
--radius-md: 8px;
|
||||
--radius-lg: 12px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 16px 40px rgba(0, 0, 0, 0.10);
|
||||
--focus-ring: 0 0 0 3px rgba(17, 17, 17, 0.18);
|
||||
--motion-fast: 100ms;
|
||||
--motion-base: 180ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1280px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/neobrutalism/components.html
Normal file
136
design-systems/neobrutalism/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Neobrutalism - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/neobrutalism: neo-brutalist design language with hard borders, offset shadows, and loud yellow emphasis." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #fff4cf;
|
||||
--surface: #fffaf0;
|
||||
--surface-warm: #ffdca8;
|
||||
--fg: #2a1810;
|
||||
--fg-2: #593625;
|
||||
--muted: #8a6652;
|
||||
--meta: #d24b1f;
|
||||
--border: #d9aa7a;
|
||||
--border-soft: #efd0ab;
|
||||
--accent: #d24b1f;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #3d8f4f;
|
||||
--warn: #f2a93b;
|
||||
--danger: #b83a2f;
|
||||
--font-display: Arial Black, Impact, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: 0;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 4px;
|
||||
--radius-md: 8px;
|
||||
--radius-lg: 12px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 6px 6px 0 rgba(42, 24, 16, 0.26);
|
||||
--focus-ring: 0 0 0 4px rgba(210, 75, 31, 0.28);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #fff4cf 0%, #ffdca8 58%, #fffaf0 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Neobrutalism design system</p>
|
||||
<h1>Neo-brutalist board</h1>
|
||||
<p class="lead">Offset shadows, thick lines, loud cards, and deliberately raw UI controls.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Neobrutalism component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>neo-brutalist design language with hard borders, offset shadows, and loud yellow emphasis.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="neobrutalism-input">Reference input</label><input id="neobrutalism-input" value="Neobrutalism system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/neobrutalism/tokens.css
Normal file
63
design-systems/neobrutalism/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/neobrutalism/tokens.css
|
||||
* Structured token bindings for Neobrutalism.
|
||||
* neo-brutalist design language with hard borders, offset shadows, and loud yellow emphasis.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #fff4cf;
|
||||
--surface: #fffaf0;
|
||||
--surface-warm: #ffdca8;
|
||||
--fg: #2a1810;
|
||||
--fg-2: #593625;
|
||||
--muted: #8a6652;
|
||||
--meta: #d24b1f;
|
||||
--border: #d9aa7a;
|
||||
--border-soft: #efd0ab;
|
||||
--accent: #d24b1f;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #3d8f4f;
|
||||
--warn: #f2a93b;
|
||||
--danger: #b83a2f;
|
||||
--font-display: Arial Black, Impact, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: 0;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 4px;
|
||||
--radius-md: 8px;
|
||||
--radius-lg: 12px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 6px 6px 0 rgba(42, 24, 16, 0.26);
|
||||
--focus-ring: 0 0 0 4px rgba(210, 75, 31, 0.28);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/neon/components.html
Normal file
136
design-systems/neon/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Neon - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/neon: neon visual language with dark backgrounds, glowing accents, and high-energy controls." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #070711;
|
||||
--surface: #111126;
|
||||
--surface-warm: #1e1540;
|
||||
--fg: #f8f7ff;
|
||||
--fg-2: #d6ccff;
|
||||
--muted: #9d8ad4;
|
||||
--meta: #c084fc;
|
||||
--border: #34265e;
|
||||
--border-soft: #241c42;
|
||||
--accent: #c084fc;
|
||||
--accent-on: #13051f;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #39ff88;
|
||||
--warn: #fff34d;
|
||||
--danger: #ff4d8d;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 24px 80px rgba(192, 132, 252, 0.22);
|
||||
--focus-ring: 0 0 0 4px rgba(192, 132, 252, 0.32);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: radial-gradient(circle at 78% 10%, rgba(192, 132, 252, 0.35), transparent 34%), radial-gradient(circle at 20% 20%, rgba(45, 212, 191, 0.22), transparent 32%), #070711; }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Neon design system</p>
|
||||
<h1>Neon nightlife interface</h1>
|
||||
<p class="lead">Dark club-like surfaces, bright glows, and saturated interactive states.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Neon component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>neon visual language with dark backgrounds, glowing accents, and high-energy controls.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="neon-input">Reference input</label><input id="neon-input" value="Neon system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/neon/tokens.css
Normal file
63
design-systems/neon/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/neon/tokens.css
|
||||
* Structured token bindings for Neon.
|
||||
* neon visual language with dark backgrounds, glowing accents, and high-energy controls.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #070711;
|
||||
--surface: #111126;
|
||||
--surface-warm: #1e1540;
|
||||
--fg: #f8f7ff;
|
||||
--fg-2: #d6ccff;
|
||||
--muted: #9d8ad4;
|
||||
--meta: #c084fc;
|
||||
--border: #34265e;
|
||||
--border-soft: #241c42;
|
||||
--accent: #c084fc;
|
||||
--accent-on: #13051f;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #39ff88;
|
||||
--warn: #fff34d;
|
||||
--danger: #ff4d8d;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 24px 80px rgba(192, 132, 252, 0.22);
|
||||
--focus-ring: 0 0 0 4px rgba(192, 132, 252, 0.32);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/neumorphism/components.html
Normal file
136
design-systems/neumorphism/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Neumorphism - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/neumorphism: neumorphic interface with tonal surfaces, soft raised controls, and quiet embossed depth." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #f7eee6;
|
||||
--surface: #fff8f1;
|
||||
--surface-warm: #ead6c7;
|
||||
--fg: #2b211c;
|
||||
--fg-2: #5a4b43;
|
||||
--muted: #8a7a70;
|
||||
--meta: #b46a46;
|
||||
--border: #dac8b9;
|
||||
--border-soft: #eaded4;
|
||||
--accent: #b46a46;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4d8f5a;
|
||||
--warn: #c88735;
|
||||
--danger: #b84c4c;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 14px;
|
||||
--radius-md: 22px;
|
||||
--radius-lg: 34px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 8px 10px 24px rgba(128, 92, 70, 0.18), -8px -8px 20px rgba(255, 255, 255, 0.70);
|
||||
--focus-ring: 0 0 0 4px rgba(180, 106, 70, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #f7eee6 0%, #fff8f1 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Neumorphism design system</p>
|
||||
<h1>Soft embossed interface</h1>
|
||||
<p class="lead">Subtle extruded controls, tonal surfaces, and low-contrast tactile depth.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Neumorphism component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>neumorphic interface with tonal surfaces, soft raised controls, and quiet embossed depth.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="neumorphism-input">Reference input</label><input id="neumorphism-input" value="Neumorphism system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/neumorphism/tokens.css
Normal file
63
design-systems/neumorphism/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/neumorphism/tokens.css
|
||||
* Structured token bindings for Neumorphism.
|
||||
* neumorphic interface with tonal surfaces, soft raised controls, and quiet embossed depth.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #f7eee6;
|
||||
--surface: #fff8f1;
|
||||
--surface-warm: #ead6c7;
|
||||
--fg: #2b211c;
|
||||
--fg-2: #5a4b43;
|
||||
--muted: #8a7a70;
|
||||
--meta: #b46a46;
|
||||
--border: #dac8b9;
|
||||
--border-soft: #eaded4;
|
||||
--accent: #b46a46;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4d8f5a;
|
||||
--warn: #c88735;
|
||||
--danger: #b84c4c;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 14px;
|
||||
--radius-md: 22px;
|
||||
--radius-lg: 34px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 8px 10px 24px rgba(128, 92, 70, 0.18), -8px -8px 20px rgba(255, 255, 255, 0.70);
|
||||
--focus-ring: 0 0 0 4px rgba(180, 106, 70, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/paper/components.html
Normal file
136
design-systems/paper/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Paper - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/paper: paper design language with warm document surfaces, soft texture, and readable hierarchy." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #faf3df;
|
||||
--surface: #fffaf0;
|
||||
--surface-warm: #efe0bd;
|
||||
--fg: #211b12;
|
||||
--fg-2: #504737;
|
||||
--muted: #7c7160;
|
||||
--meta: #8f5d24;
|
||||
--border: #ddd0b4;
|
||||
--border-soft: #eee3cd;
|
||||
--accent: #8f5d24;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #5b8d42;
|
||||
--warn: #c27b22;
|
||||
--danger: #a64036;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 17px;
|
||||
--text-lg: 20px;
|
||||
--text-xl: 28px;
|
||||
--text-2xl: 42px;
|
||||
--text-3xl: 64px;
|
||||
--text-4xl: 88px;
|
||||
--leading-body: 1.62;
|
||||
--leading-tight: 1;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 112px;
|
||||
--section-y-tablet: 80px;
|
||||
--section-y-phone: 56px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 18px 42px rgba(33, 27, 18, 0.12);
|
||||
--focus-ring: 0 0 0 4px rgba(143, 93, 36, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #faf3df 0%, #fffaf0 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Paper design system</p>
|
||||
<h1>Paper document system</h1>
|
||||
<p class="lead">Paper-like panels, document cards, and low-glare editorial reading surfaces.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Paper component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>paper design language with warm document surfaces, soft texture, and readable hierarchy.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="paper-input">Reference input</label><input id="paper-input" value="Paper system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/paper/tokens.css
Normal file
63
design-systems/paper/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/paper/tokens.css
|
||||
* Structured token bindings for Paper.
|
||||
* paper design language with warm document surfaces, soft texture, and readable hierarchy.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #faf3df;
|
||||
--surface: #fffaf0;
|
||||
--surface-warm: #efe0bd;
|
||||
--fg: #211b12;
|
||||
--fg-2: #504737;
|
||||
--muted: #7c7160;
|
||||
--meta: #8f5d24;
|
||||
--border: #ddd0b4;
|
||||
--border-soft: #eee3cd;
|
||||
--accent: #8f5d24;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #5b8d42;
|
||||
--warn: #c27b22;
|
||||
--danger: #a64036;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 17px;
|
||||
--text-lg: 20px;
|
||||
--text-xl: 28px;
|
||||
--text-2xl: 42px;
|
||||
--text-3xl: 64px;
|
||||
--text-4xl: 88px;
|
||||
--leading-body: 1.62;
|
||||
--leading-tight: 1;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 112px;
|
||||
--section-y-tablet: 80px;
|
||||
--section-y-phone: 56px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 18px 42px rgba(33, 27, 18, 0.12);
|
||||
--focus-ring: 0 0 0 4px rgba(143, 93, 36, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/perspective/components.html
Normal file
136
design-systems/perspective/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Perspective - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/perspective: perspective visual system with layered depth, cool surfaces, and dimensional product cards." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #f5f8ff;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #eaf1ff;
|
||||
--fg: #101828;
|
||||
--fg-2: #344054;
|
||||
--muted: #667085;
|
||||
--meta: #2563eb;
|
||||
--border: #d7e0ef;
|
||||
--border-soft: #edf2f8;
|
||||
--accent: #2563eb;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #16a34a;
|
||||
--warn: #f59e0b;
|
||||
--danger: #ef4444;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(16, 24, 40, 0.11);
|
||||
--focus-ring: 0 0 0 4px rgba(37, 99, 235, 0.22);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: radial-gradient(circle at 80% 10%, rgba(37, 99, 235, 0.16), transparent 34%), #f5f8ff; }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Perspective design system</p>
|
||||
<h1>Perspective showcase system</h1>
|
||||
<p class="lead">Layered panels, depth cues, and angled product presentation cards.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Perspective component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>perspective visual system with layered depth, cool surfaces, and dimensional product cards.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="perspective-input">Reference input</label><input id="perspective-input" value="Perspective system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/perspective/tokens.css
Normal file
63
design-systems/perspective/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/perspective/tokens.css
|
||||
* Structured token bindings for Perspective.
|
||||
* perspective visual system with layered depth, cool surfaces, and dimensional product cards.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #f5f8ff;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #eaf1ff;
|
||||
--fg: #101828;
|
||||
--fg-2: #344054;
|
||||
--muted: #667085;
|
||||
--meta: #2563eb;
|
||||
--border: #d7e0ef;
|
||||
--border-soft: #edf2f8;
|
||||
--accent: #2563eb;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #16a34a;
|
||||
--warn: #f59e0b;
|
||||
--danger: #ef4444;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(16, 24, 40, 0.11);
|
||||
--focus-ring: 0 0 0 4px rgba(37, 99, 235, 0.22);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/professional/components.html
Normal file
136
design-systems/professional/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Professional - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/professional: professional services interface with restrained blue, crisp cards, and business-first structure." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #f5f8ff;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #eaf1ff;
|
||||
--fg: #101828;
|
||||
--fg-2: #344054;
|
||||
--muted: #667085;
|
||||
--meta: #2563eb;
|
||||
--border: #d7e0ef;
|
||||
--border-soft: #edf2f8;
|
||||
--accent: #2563eb;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #16a34a;
|
||||
--warn: #f59e0b;
|
||||
--danger: #ef4444;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(16, 24, 40, 0.11);
|
||||
--focus-ring: 0 0 0 4px rgba(37, 99, 235, 0.22);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: radial-gradient(circle at 80% 10%, rgba(37, 99, 235, 0.16), transparent 34%), #f5f8ff; }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Professional design system</p>
|
||||
<h1>Professional services kit</h1>
|
||||
<p class="lead">Trustworthy layouts, conservative controls, and polished business hierarchy.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Professional component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>professional services interface with restrained blue, crisp cards, and business-first structure.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="professional-input">Reference input</label><input id="professional-input" value="Professional system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/professional/tokens.css
Normal file
63
design-systems/professional/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/professional/tokens.css
|
||||
* Structured token bindings for Professional.
|
||||
* professional services interface with restrained blue, crisp cards, and business-first structure.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #f5f8ff;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #eaf1ff;
|
||||
--fg: #101828;
|
||||
--fg-2: #344054;
|
||||
--muted: #667085;
|
||||
--meta: #2563eb;
|
||||
--border: #d7e0ef;
|
||||
--border-soft: #edf2f8;
|
||||
--accent: #2563eb;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #16a34a;
|
||||
--warn: #f59e0b;
|
||||
--danger: #ef4444;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(16, 24, 40, 0.11);
|
||||
--focus-ring: 0 0 0 4px rgba(37, 99, 235, 0.22);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/refined/components.html
Normal file
136
design-systems/refined/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Refined - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/refined: refined interface language with warm neutrals, restrained accent, and composed spacing." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #fbf6ee;
|
||||
--surface: #fffdf8;
|
||||
--surface-warm: #f1e3cf;
|
||||
--fg: #201914;
|
||||
--fg-2: #4c4037;
|
||||
--muted: #7a6d63;
|
||||
--meta: #9b5b32;
|
||||
--border: #ded2c3;
|
||||
--border-soft: #eee4d7;
|
||||
--accent: #9b5b32;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4f8a4f;
|
||||
--warn: #c9822f;
|
||||
--danger: #b33a3a;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 17px;
|
||||
--text-lg: 20px;
|
||||
--text-xl: 28px;
|
||||
--text-2xl: 42px;
|
||||
--text-3xl: 64px;
|
||||
--text-4xl: 88px;
|
||||
--leading-body: 1.62;
|
||||
--leading-tight: 1;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 112px;
|
||||
--section-y-tablet: 80px;
|
||||
--section-y-phone: 56px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(32, 25, 20, 0.12);
|
||||
--focus-ring: 0 0 0 4px rgba(155, 91, 50, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #fbf6ee 0%, #fffdf8 58%, #f1e3cf 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Refined design system</p>
|
||||
<h1>Refined brand system</h1>
|
||||
<p class="lead">Subtle premium details, quiet contrast, and elegant product-card composition.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Refined component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>refined interface language with warm neutrals, restrained accent, and composed spacing.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="refined-input">Reference input</label><input id="refined-input" value="Refined system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/refined/tokens.css
Normal file
63
design-systems/refined/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/refined/tokens.css
|
||||
* Structured token bindings for Refined.
|
||||
* refined interface language with warm neutrals, restrained accent, and composed spacing.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #fbf6ee;
|
||||
--surface: #fffdf8;
|
||||
--surface-warm: #f1e3cf;
|
||||
--fg: #201914;
|
||||
--fg-2: #4c4037;
|
||||
--muted: #7a6d63;
|
||||
--meta: #9b5b32;
|
||||
--border: #ded2c3;
|
||||
--border-soft: #eee4d7;
|
||||
--accent: #9b5b32;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4f8a4f;
|
||||
--warn: #c9822f;
|
||||
--danger: #b33a3a;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 17px;
|
||||
--text-lg: 20px;
|
||||
--text-xl: 28px;
|
||||
--text-2xl: 42px;
|
||||
--text-3xl: 64px;
|
||||
--text-4xl: 88px;
|
||||
--leading-body: 1.62;
|
||||
--leading-tight: 1;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 112px;
|
||||
--section-y-tablet: 80px;
|
||||
--section-y-phone: 56px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(32, 25, 20, 0.12);
|
||||
--focus-ring: 0 0 0 4px rgba(155, 91, 50, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/retro/components.html
Normal file
136
design-systems/retro/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Retro - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/retro: retro interface with warm colors, chunky controls, and nostalgic product cards." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #fff4cf;
|
||||
--surface: #fffaf0;
|
||||
--surface-warm: #ffdca8;
|
||||
--fg: #2a1810;
|
||||
--fg-2: #593625;
|
||||
--muted: #8a6652;
|
||||
--meta: #d24b1f;
|
||||
--border: #d9aa7a;
|
||||
--border-soft: #efd0ab;
|
||||
--accent: #d24b1f;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #3d8f4f;
|
||||
--warn: #f2a93b;
|
||||
--danger: #b83a2f;
|
||||
--font-display: "Courier New", ui-monospace, monospace;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "Courier New", ui-monospace, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: 0;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 4px;
|
||||
--radius-md: 8px;
|
||||
--radius-lg: 12px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 6px 6px 0 rgba(42, 24, 16, 0.26);
|
||||
--focus-ring: 0 0 0 4px rgba(210, 75, 31, 0.28);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #fff4cf 0%, #ffdca8 58%, #fffaf0 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Retro design system</p>
|
||||
<h1>Retro computing dashboard</h1>
|
||||
<p class="lead">Vintage color, chunky geometry, and nostalgic controls for playful products.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Retro component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>retro interface with warm colors, chunky controls, and nostalgic product cards.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="retro-input">Reference input</label><input id="retro-input" value="Retro system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/retro/tokens.css
Normal file
63
design-systems/retro/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/retro/tokens.css
|
||||
* Structured token bindings for Retro.
|
||||
* retro interface with warm colors, chunky controls, and nostalgic product cards.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #fff4cf;
|
||||
--surface: #fffaf0;
|
||||
--surface-warm: #ffdca8;
|
||||
--fg: #2a1810;
|
||||
--fg-2: #593625;
|
||||
--muted: #8a6652;
|
||||
--meta: #d24b1f;
|
||||
--border: #d9aa7a;
|
||||
--border-soft: #efd0ab;
|
||||
--accent: #d24b1f;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #3d8f4f;
|
||||
--warn: #f2a93b;
|
||||
--danger: #b83a2f;
|
||||
--font-display: "Courier New", ui-monospace, monospace;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "Courier New", ui-monospace, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: 0;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 4px;
|
||||
--radius-md: 8px;
|
||||
--radius-lg: 12px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 6px 6px 0 rgba(42, 24, 16, 0.26);
|
||||
--focus-ring: 0 0 0 4px rgba(210, 75, 31, 0.28);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/simple/components.html
Normal file
136
design-systems/simple/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Simple - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/simple: simple application system with neutral surfaces, clear action color, and dependable layout primitives." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #f5f8ff;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #eaf1ff;
|
||||
--fg: #101828;
|
||||
--fg-2: #344054;
|
||||
--muted: #667085;
|
||||
--meta: #2563eb;
|
||||
--border: #d7e0ef;
|
||||
--border-soft: #edf2f8;
|
||||
--accent: #2563eb;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #16a34a;
|
||||
--warn: #f59e0b;
|
||||
--danger: #ef4444;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(16, 24, 40, 0.11);
|
||||
--focus-ring: 0 0 0 4px rgba(37, 99, 235, 0.22);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: radial-gradient(circle at 80% 10%, rgba(37, 99, 235, 0.16), transparent 34%), #f5f8ff; }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Simple design system</p>
|
||||
<h1>Simple app foundation</h1>
|
||||
<p class="lead">Straightforward surfaces, accessible controls, and clean reusable component defaults.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Simple component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>simple application system with neutral surfaces, clear action color, and dependable layout primitives.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="simple-input">Reference input</label><input id="simple-input" value="Simple system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/simple/tokens.css
Normal file
63
design-systems/simple/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/simple/tokens.css
|
||||
* Structured token bindings for Simple.
|
||||
* simple application system with neutral surfaces, clear action color, and dependable layout primitives.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #f5f8ff;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #eaf1ff;
|
||||
--fg: #101828;
|
||||
--fg-2: #344054;
|
||||
--muted: #667085;
|
||||
--meta: #2563eb;
|
||||
--border: #d7e0ef;
|
||||
--border-soft: #edf2f8;
|
||||
--accent: #2563eb;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #16a34a;
|
||||
--warn: #f59e0b;
|
||||
--danger: #ef4444;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(16, 24, 40, 0.11);
|
||||
--focus-ring: 0 0 0 4px rgba(37, 99, 235, 0.22);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/skeumorphism/components.html
Normal file
136
design-systems/skeumorphism/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Skeuomorphism - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/skeumorphism: skeuomorphic interface with tactile surfaces, beveled cards, and warm analog depth." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #f7eee6;
|
||||
--surface: #fff8f1;
|
||||
--surface-warm: #ead6c7;
|
||||
--fg: #2b211c;
|
||||
--fg-2: #5a4b43;
|
||||
--muted: #8a7a70;
|
||||
--meta: #b46a46;
|
||||
--border: #dac8b9;
|
||||
--border-soft: #eaded4;
|
||||
--accent: #b46a46;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4d8f5a;
|
||||
--warn: #c88735;
|
||||
--danger: #b84c4c;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 14px;
|
||||
--radius-md: 22px;
|
||||
--radius-lg: 34px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 8px 10px 24px rgba(128, 92, 70, 0.18), -8px -8px 20px rgba(255, 255, 255, 0.70);
|
||||
--focus-ring: 0 0 0 4px rgba(180, 106, 70, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #f7eee6 0%, #fff8f1 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Skeuomorphism design system</p>
|
||||
<h1>Skeuomorphic control panel</h1>
|
||||
<p class="lead">Physical metaphors, soft bevels, and tactile card controls.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Skeuomorphism component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>skeuomorphic interface with tactile surfaces, beveled cards, and warm analog depth.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="skeumorphism-input">Reference input</label><input id="skeumorphism-input" value="Skeuomorphism system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/skeumorphism/tokens.css
Normal file
63
design-systems/skeumorphism/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/skeumorphism/tokens.css
|
||||
* Structured token bindings for Skeuomorphism.
|
||||
* skeuomorphic interface with tactile surfaces, beveled cards, and warm analog depth.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #f7eee6;
|
||||
--surface: #fff8f1;
|
||||
--surface-warm: #ead6c7;
|
||||
--fg: #2b211c;
|
||||
--fg-2: #5a4b43;
|
||||
--muted: #8a7a70;
|
||||
--meta: #b46a46;
|
||||
--border: #dac8b9;
|
||||
--border-soft: #eaded4;
|
||||
--accent: #b46a46;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4d8f5a;
|
||||
--warn: #c88735;
|
||||
--danger: #b84c4c;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 14px;
|
||||
--radius-md: 22px;
|
||||
--radius-lg: 34px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 8px 10px 24px rgba(128, 92, 70, 0.18), -8px -8px 20px rgba(255, 255, 255, 0.70);
|
||||
--focus-ring: 0 0 0 4px rgba(180, 106, 70, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/sleek/components.html
Normal file
136
design-systems/sleek/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Sleek - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/sleek: sleek product language with polished panels, sharp typography, and confident blue accent." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #090b12;
|
||||
--surface: #121722;
|
||||
--surface-warm: #1b2233;
|
||||
--fg: #f8fafc;
|
||||
--fg-2: #cbd5e1;
|
||||
--muted: #94a3b8;
|
||||
--meta: #60a5fa;
|
||||
--border: #2a3447;
|
||||
--border-soft: #1d2636;
|
||||
--accent: #60a5fa;
|
||||
--accent-on: #06101d;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #22c55e;
|
||||
--warn: #fbbf24;
|
||||
--danger: #fb7185;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 24px 72px rgba(0, 0, 0, 0.42);
|
||||
--focus-ring: 0 0 0 4px rgba(96, 165, 250, 0.28);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: radial-gradient(circle at 80% 8%, rgba(96, 165, 250, 0.24), transparent 34%), #090b12; }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Sleek design system</p>
|
||||
<h1>Sleek product launch</h1>
|
||||
<p class="lead">Polished dark-light contrast, slim controls, and modern premium rhythm.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Sleek component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>sleek product language with polished panels, sharp typography, and confident blue accent.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="sleek-input">Reference input</label><input id="sleek-input" value="Sleek system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/sleek/tokens.css
Normal file
63
design-systems/sleek/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/sleek/tokens.css
|
||||
* Structured token bindings for Sleek.
|
||||
* sleek product language with polished panels, sharp typography, and confident blue accent.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #090b12;
|
||||
--surface: #121722;
|
||||
--surface-warm: #1b2233;
|
||||
--fg: #f8fafc;
|
||||
--fg-2: #cbd5e1;
|
||||
--muted: #94a3b8;
|
||||
--meta: #60a5fa;
|
||||
--border: #2a3447;
|
||||
--border-soft: #1d2636;
|
||||
--accent: #60a5fa;
|
||||
--accent-on: #06101d;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #22c55e;
|
||||
--warn: #fbbf24;
|
||||
--danger: #fb7185;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 24px 72px rgba(0, 0, 0, 0.42);
|
||||
--focus-ring: 0 0 0 4px rgba(96, 165, 250, 0.28);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/spacious/components.html
Normal file
136
design-systems/spacious/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Spacious - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/spacious: spacious interface with airy sections, soft surfaces, and generous layout rhythm." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #faf3df;
|
||||
--surface: #fffaf0;
|
||||
--surface-warm: #efe0bd;
|
||||
--fg: #211b12;
|
||||
--fg-2: #504737;
|
||||
--muted: #7c7160;
|
||||
--meta: #8f5d24;
|
||||
--border: #ddd0b4;
|
||||
--border-soft: #eee3cd;
|
||||
--accent: #8f5d24;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #5b8d42;
|
||||
--warn: #c27b22;
|
||||
--danger: #a64036;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 17px;
|
||||
--text-lg: 20px;
|
||||
--text-xl: 28px;
|
||||
--text-2xl: 42px;
|
||||
--text-3xl: 64px;
|
||||
--text-4xl: 88px;
|
||||
--leading-body: 1.62;
|
||||
--leading-tight: 1;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 112px;
|
||||
--section-y-tablet: 80px;
|
||||
--section-y-phone: 56px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 18px 42px rgba(33, 27, 18, 0.12);
|
||||
--focus-ring: 0 0 0 4px rgba(143, 93, 36, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #faf3df 0%, #fffaf0 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Spacious design system</p>
|
||||
<h1>Spacious editorial system</h1>
|
||||
<p class="lead">Large whitespace, airy cards, and slow premium reading rhythm.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Spacious component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>spacious interface with airy sections, soft surfaces, and generous layout rhythm.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="spacious-input">Reference input</label><input id="spacious-input" value="Spacious system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/spacious/tokens.css
Normal file
63
design-systems/spacious/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/spacious/tokens.css
|
||||
* Structured token bindings for Spacious.
|
||||
* spacious interface with airy sections, soft surfaces, and generous layout rhythm.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #faf3df;
|
||||
--surface: #fffaf0;
|
||||
--surface-warm: #efe0bd;
|
||||
--fg: #211b12;
|
||||
--fg-2: #504737;
|
||||
--muted: #7c7160;
|
||||
--meta: #8f5d24;
|
||||
--border: #ddd0b4;
|
||||
--border-soft: #eee3cd;
|
||||
--accent: #8f5d24;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #5b8d42;
|
||||
--warn: #c27b22;
|
||||
--danger: #a64036;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 17px;
|
||||
--text-lg: 20px;
|
||||
--text-xl: 28px;
|
||||
--text-2xl: 42px;
|
||||
--text-3xl: 64px;
|
||||
--text-4xl: 88px;
|
||||
--leading-body: 1.62;
|
||||
--leading-tight: 1;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 112px;
|
||||
--section-y-tablet: 80px;
|
||||
--section-y-phone: 56px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 18px 42px rgba(33, 27, 18, 0.12);
|
||||
--focus-ring: 0 0 0 4px rgba(143, 93, 36, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/storytelling/components.html
Normal file
136
design-systems/storytelling/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Storytelling - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/storytelling: storytelling design language with warm paper, narrative modules, and editorial pacing." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #fbf6ee;
|
||||
--surface: #fffdf8;
|
||||
--surface-warm: #f1e3cf;
|
||||
--fg: #201914;
|
||||
--fg-2: #4c4037;
|
||||
--muted: #7a6d63;
|
||||
--meta: #9b5b32;
|
||||
--border: #ded2c3;
|
||||
--border-soft: #eee4d7;
|
||||
--accent: #9b5b32;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4f8a4f;
|
||||
--warn: #c9822f;
|
||||
--danger: #b33a3a;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 17px;
|
||||
--text-lg: 20px;
|
||||
--text-xl: 28px;
|
||||
--text-2xl: 42px;
|
||||
--text-3xl: 64px;
|
||||
--text-4xl: 88px;
|
||||
--leading-body: 1.62;
|
||||
--leading-tight: 1;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 112px;
|
||||
--section-y-tablet: 80px;
|
||||
--section-y-phone: 56px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(32, 25, 20, 0.12);
|
||||
--focus-ring: 0 0 0 4px rgba(155, 91, 50, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #fbf6ee 0%, #fffdf8 58%, #f1e3cf 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Storytelling design system</p>
|
||||
<h1>Narrative product story</h1>
|
||||
<p class="lead">Chaptered sections, narrative cards, and warm long-form product rhythm.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Storytelling component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>storytelling design language with warm paper, narrative modules, and editorial pacing.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="storytelling-input">Reference input</label><input id="storytelling-input" value="Storytelling system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/storytelling/tokens.css
Normal file
63
design-systems/storytelling/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/storytelling/tokens.css
|
||||
* Structured token bindings for Storytelling.
|
||||
* storytelling design language with warm paper, narrative modules, and editorial pacing.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #fbf6ee;
|
||||
--surface: #fffdf8;
|
||||
--surface-warm: #f1e3cf;
|
||||
--fg: #201914;
|
||||
--fg-2: #4c4037;
|
||||
--muted: #7a6d63;
|
||||
--meta: #9b5b32;
|
||||
--border: #ded2c3;
|
||||
--border-soft: #eee4d7;
|
||||
--accent: #9b5b32;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4f8a4f;
|
||||
--warn: #c9822f;
|
||||
--danger: #b33a3a;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 17px;
|
||||
--text-lg: 20px;
|
||||
--text-xl: 28px;
|
||||
--text-2xl: 42px;
|
||||
--text-3xl: 64px;
|
||||
--text-4xl: 88px;
|
||||
--leading-body: 1.62;
|
||||
--leading-tight: 1;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 112px;
|
||||
--section-y-tablet: 80px;
|
||||
--section-y-phone: 56px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(32, 25, 20, 0.12);
|
||||
--focus-ring: 0 0 0 4px rgba(155, 91, 50, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/totality-festival/components.html
Normal file
136
design-systems/totality-festival/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Totality Festival - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/totality-festival: festival identity with cosmic dark surfaces, warm highlights, and event-program cards." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #070711;
|
||||
--surface: #111126;
|
||||
--surface-warm: #1e1540;
|
||||
--fg: #f8f7ff;
|
||||
--fg-2: #d6ccff;
|
||||
--muted: #9d8ad4;
|
||||
--meta: #c084fc;
|
||||
--border: #34265e;
|
||||
--border-soft: #241c42;
|
||||
--accent: #c084fc;
|
||||
--accent-on: #13051f;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #39ff88;
|
||||
--warn: #fff34d;
|
||||
--danger: #ff4d8d;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 24px 80px rgba(192, 132, 252, 0.22);
|
||||
--focus-ring: 0 0 0 4px rgba(192, 132, 252, 0.32);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: radial-gradient(circle at 78% 10%, rgba(192, 132, 252, 0.35), transparent 34%), radial-gradient(circle at 20% 20%, rgba(45, 212, 191, 0.22), transparent 32%), #070711; }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Totality Festival design system</p>
|
||||
<h1>Festival experience guide</h1>
|
||||
<p class="lead">Event programming, celestial dark sections, and energetic schedule cards.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Totality Festival component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>festival identity with cosmic dark surfaces, warm highlights, and event-program cards.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="totality-festival-input">Reference input</label><input id="totality-festival-input" value="Totality Festival system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/totality-festival/tokens.css
Normal file
63
design-systems/totality-festival/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/totality-festival/tokens.css
|
||||
* Structured token bindings for Totality Festival.
|
||||
* festival identity with cosmic dark surfaces, warm highlights, and event-program cards.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #070711;
|
||||
--surface: #111126;
|
||||
--surface-warm: #1e1540;
|
||||
--fg: #f8f7ff;
|
||||
--fg-2: #d6ccff;
|
||||
--muted: #9d8ad4;
|
||||
--meta: #c084fc;
|
||||
--border: #34265e;
|
||||
--border-soft: #241c42;
|
||||
--accent: #c084fc;
|
||||
--accent-on: #13051f;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #39ff88;
|
||||
--warn: #fff34d;
|
||||
--danger: #ff4d8d;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 24px 80px rgba(192, 132, 252, 0.22);
|
||||
--focus-ring: 0 0 0 4px rgba(192, 132, 252, 0.32);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/urdu/components.html
Normal file
136
design-systems/urdu/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Urdu - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/urdu: Urdu editorial language with green cultural accent, warm paper, and composed reading surfaces." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #f3faf4;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #e5f5e7;
|
||||
--fg: #15261a;
|
||||
--fg-2: #38513e;
|
||||
--muted: #6b7d70;
|
||||
--meta: #1f8f46;
|
||||
--border: #d4e3d7;
|
||||
--border-soft: #edf3ee;
|
||||
--accent: #1f8f46;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #16a34a;
|
||||
--warn: #d97706;
|
||||
--danger: #dc2626;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 48px rgba(21, 38, 26, 0.10);
|
||||
--focus-ring: 0 0 0 4px rgba(31, 143, 70, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #f3faf4 0%, #e5f5e7 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Urdu design system</p>
|
||||
<h1>Urdu editorial interface</h1>
|
||||
<p class="lead">Right-to-left publishing inspiration, calligraphic warmth, and readable content panels.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Urdu component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>Urdu editorial language with green cultural accent, warm paper, and composed reading surfaces.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="urdu-input">Reference input</label><input id="urdu-input" value="Urdu system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/urdu/tokens.css
Normal file
63
design-systems/urdu/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/urdu/tokens.css
|
||||
* Structured token bindings for Urdu.
|
||||
* Urdu editorial language with green cultural accent, warm paper, and composed reading surfaces.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #f3faf4;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #e5f5e7;
|
||||
--fg: #15261a;
|
||||
--fg-2: #38513e;
|
||||
--muted: #6b7d70;
|
||||
--meta: #1f8f46;
|
||||
--border: #d4e3d7;
|
||||
--border-soft: #edf3ee;
|
||||
--accent: #1f8f46;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #16a34a;
|
||||
--warn: #d97706;
|
||||
--danger: #dc2626;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 48px rgba(21, 38, 26, 0.10);
|
||||
--focus-ring: 0 0 0 4px rgba(31, 143, 70, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/vibrant/components.html
Normal file
136
design-systems/vibrant/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Vibrant - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/vibrant: vibrant visual system with saturated accents, warm surfaces, and optimistic product energy." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #fff8d7;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #ffef9f;
|
||||
--fg: #1d1836;
|
||||
--fg-2: #4c426c;
|
||||
--muted: #796f91;
|
||||
--meta: #ff6b00;
|
||||
--border: #eadfba;
|
||||
--border-soft: #f5eccd;
|
||||
--accent: #ff6b00;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #2e9d57;
|
||||
--warn: #ffb020;
|
||||
--danger: #e5484d;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 18px 44px rgba(29, 24, 54, 0.14);
|
||||
--focus-ring: 0 0 0 4px rgba(255, 107, 0, 0.26);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #fff8d7 0%, #ffef9f 52%, #ffffff 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Vibrant design system</p>
|
||||
<h1>Vibrant brand launch</h1>
|
||||
<p class="lead">Saturated sections, expressive controls, and colorful high-energy component states.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Vibrant component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>vibrant visual system with saturated accents, warm surfaces, and optimistic product energy.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="vibrant-input">Reference input</label><input id="vibrant-input" value="Vibrant system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/vibrant/tokens.css
Normal file
63
design-systems/vibrant/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/vibrant/tokens.css
|
||||
* Structured token bindings for Vibrant.
|
||||
* vibrant visual system with saturated accents, warm surfaces, and optimistic product energy.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #fff8d7;
|
||||
--surface: #ffffff;
|
||||
--surface-warm: #ffef9f;
|
||||
--fg: #1d1836;
|
||||
--fg-2: #4c426c;
|
||||
--muted: #796f91;
|
||||
--meta: #ff6b00;
|
||||
--border: #eadfba;
|
||||
--border-soft: #f5eccd;
|
||||
--accent: #ff6b00;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #2e9d57;
|
||||
--warn: #ffb020;
|
||||
--danger: #e5484d;
|
||||
--font-display: Inter, system-ui, sans-serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 16px;
|
||||
--text-lg: 18px;
|
||||
--text-xl: 24px;
|
||||
--text-2xl: 36px;
|
||||
--text-3xl: 54px;
|
||||
--text-4xl: 76px;
|
||||
--leading-body: 1.52;
|
||||
--leading-tight: 1.06;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 96px;
|
||||
--section-y-tablet: 68px;
|
||||
--section-y-phone: 48px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 18px 44px rgba(29, 24, 54, 0.14);
|
||||
--focus-ring: 0 0 0 4px rgba(255, 107, 0, 0.26);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/vintage/components.html
Normal file
136
design-systems/vintage/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Vintage - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/vintage: vintage interface with aged paper, muted ink, and heritage-inspired controls." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #faf3df;
|
||||
--surface: #fffaf0;
|
||||
--surface-warm: #efe0bd;
|
||||
--fg: #211b12;
|
||||
--fg-2: #504737;
|
||||
--muted: #7c7160;
|
||||
--meta: #8f5d24;
|
||||
--border: #ddd0b4;
|
||||
--border-soft: #eee3cd;
|
||||
--accent: #8f5d24;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #5b8d42;
|
||||
--warn: #c27b22;
|
||||
--danger: #a64036;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 17px;
|
||||
--text-lg: 20px;
|
||||
--text-xl: 28px;
|
||||
--text-2xl: 42px;
|
||||
--text-3xl: 64px;
|
||||
--text-4xl: 88px;
|
||||
--leading-body: 1.62;
|
||||
--leading-tight: 1;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 112px;
|
||||
--section-y-tablet: 80px;
|
||||
--section-y-phone: 56px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 18px 42px rgba(33, 27, 18, 0.12);
|
||||
--focus-ring: 0 0 0 4px rgba(143, 93, 36, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #faf3df 0%, #fffaf0 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Vintage design system</p>
|
||||
<h1>Vintage archive system</h1>
|
||||
<p class="lead">Aged-paper surfaces, classic typography, and nostalgic product cards.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Vintage component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>vintage interface with aged paper, muted ink, and heritage-inspired controls.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="vintage-input">Reference input</label><input id="vintage-input" value="Vintage system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/vintage/tokens.css
Normal file
63
design-systems/vintage/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/vintage/tokens.css
|
||||
* Structured token bindings for Vintage.
|
||||
* vintage interface with aged paper, muted ink, and heritage-inspired controls.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #faf3df;
|
||||
--surface: #fffaf0;
|
||||
--surface-warm: #efe0bd;
|
||||
--fg: #211b12;
|
||||
--fg-2: #504737;
|
||||
--muted: #7c7160;
|
||||
--meta: #8f5d24;
|
||||
--border: #ddd0b4;
|
||||
--border-soft: #eee3cd;
|
||||
--accent: #8f5d24;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #5b8d42;
|
||||
--warn: #c27b22;
|
||||
--danger: #a64036;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 17px;
|
||||
--text-lg: 20px;
|
||||
--text-xl: 28px;
|
||||
--text-2xl: 42px;
|
||||
--text-3xl: 64px;
|
||||
--text-4xl: 88px;
|
||||
--leading-body: 1.62;
|
||||
--leading-tight: 1;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 112px;
|
||||
--section-y-tablet: 80px;
|
||||
--section-y-phone: 56px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 18px 42px rgba(33, 27, 18, 0.12);
|
||||
--focus-ring: 0 0 0 4px rgba(143, 93, 36, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
136
design-systems/warm-editorial/components.html
Normal file
136
design-systems/warm-editorial/components.html
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Warm Editorial - reference components</title>
|
||||
<meta name="description" content="Reference fixture for design-systems/warm-editorial: warm editorial system with cream canvas, serif display, and calm publication rhythm." />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #fbf6ee;
|
||||
--surface: #fffdf8;
|
||||
--surface-warm: #f1e3cf;
|
||||
--fg: #201914;
|
||||
--fg-2: #4c4037;
|
||||
--muted: #7a6d63;
|
||||
--meta: #9b5b32;
|
||||
--border: #ded2c3;
|
||||
--border-soft: #eee4d7;
|
||||
--accent: #9b5b32;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4f8a4f;
|
||||
--warn: #c9822f;
|
||||
--danger: #b33a3a;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 17px;
|
||||
--text-lg: 20px;
|
||||
--text-xl: 28px;
|
||||
--text-2xl: 42px;
|
||||
--text-3xl: 64px;
|
||||
--text-4xl: 88px;
|
||||
--leading-body: 1.62;
|
||||
--leading-tight: 1;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 112px;
|
||||
--section-y-tablet: 80px;
|
||||
--section-y-phone: 56px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(32, 25, 20, 0.12);
|
||||
--focus-ring: 0 0 0 4px rgba(155, 91, 50, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html, body { margin: 0; padding: 0; }
|
||||
body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; }
|
||||
.page { min-height: 100vh; background: linear-gradient(135deg, #fbf6ee 0%, #fffdf8 58%, #f1e3cf 100%); }
|
||||
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: var(--container-gutter-desktop); }
|
||||
section { padding-block: var(--section-y-desktop); }
|
||||
@media (max-width: 1023px) { .container { padding-inline: var(--container-gutter-tablet); } section { padding-block: var(--section-y-tablet); } }
|
||||
@media (max-width: 639px) { .container { padding-inline: var(--container-gutter-phone); } section { padding-block: var(--section-y-phone); } }
|
||||
h1, h2, h3, p { margin: 0; }
|
||||
h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); letter-spacing: var(--tracking-display); }
|
||||
h1 { max-width: 840px; font-size: var(--text-4xl); font-weight: 760; }
|
||||
h2 { font-size: var(--text-3xl); font-weight: 700; }
|
||||
h3 { font-size: var(--text-xl); font-weight: 700; }
|
||||
.eyebrow { color: var(--meta); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
||||
.lead { max-width: 640px; color: var(--fg-2); font-size: var(--text-lg); }
|
||||
.hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr); gap: var(--space-8); align-items: center; }
|
||||
.stack > * + * { margin-block-start: var(--space-4); }
|
||||
.actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-block-start: var(--space-6); }
|
||||
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent; border-radius: var(--radius-md); font: 700 var(--text-sm) / 1 var(--font-body); color: inherit; text-decoration: none; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), box-shadow var(--motion-fast) var(--ease-standard); }
|
||||
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
||||
.btn-primary { background: var(--accent); color: var(--accent-on); }
|
||||
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
|
||||
.btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); box-shadow: var(--elev-ring); }
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
.panel { background: color-mix(in oklab, var(--surface), transparent 4%); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--elev-raised); overflow: hidden; }
|
||||
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-4); padding: var(--space-5); border-bottom: 1px solid var(--border-soft); }
|
||||
.status { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--meta); font: 700 var(--text-xs) / 1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; }
|
||||
.status::before { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--success); content: ""; }
|
||||
.metric-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-soft); }
|
||||
.metric { padding: var(--space-5); border-right: 1px solid var(--border-soft); }
|
||||
.metric:last-child { border-right: 0; }
|
||||
.metric strong { display: block; font-family: var(--font-display); font-size: var(--text-2xl); line-height: var(--leading-tight); }
|
||||
.metric span { color: var(--muted); font-size: var(--text-sm); }
|
||||
.card-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); padding: var(--space-5); }
|
||||
.mini-card { min-height: 148px; padding: var(--space-5); border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-warm); }
|
||||
.mini-card p, .tile p { color: var(--muted); font-size: var(--text-sm); margin-block-start: var(--space-3); }
|
||||
.swatches { display: flex; gap: var(--space-2); margin-block-start: var(--space-4); }
|
||||
.swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border); }
|
||||
.swatch.accent { background: var(--accent); } .swatch.surface { background: var(--surface); } .swatch.warm { background: var(--surface-warm); } .swatch.fg { background: var(--fg); }
|
||||
.field { display: grid; gap: var(--space-2); margin-block-start: var(--space-5); }
|
||||
label { color: var(--fg-2); font-size: var(--text-sm); font-weight: 700; }
|
||||
input { width: 100%; min-height: 46px; padding: 0 var(--space-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--fg); font: inherit; }
|
||||
input:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
|
||||
.lower { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
|
||||
.tile { padding: var(--space-5); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); }
|
||||
@media (max-width: 860px) { .hero, .lower { grid-template-columns: 1fr; } .metric-grid, .card-row { grid-template-columns: 1fr; } .metric { border-right: 0; border-bottom: 1px solid var(--border-soft); } .metric:last-child { border-bottom: 0; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section>
|
||||
<div class="container hero">
|
||||
<div class="stack">
|
||||
<p class="eyebrow">Warm Editorial design system</p>
|
||||
<h1>Warm editorial publication</h1>
|
||||
<p class="lead">Soft magazine pages, warm ink, and generous long-form reading components.</p>
|
||||
<div class="actions" aria-label="Reference actions"><a class="btn btn-primary" href="#">Primary action</a><a class="btn btn-secondary" href="#">Secondary action</a></div>
|
||||
</div>
|
||||
<article class="panel" aria-label="Warm Editorial component preview">
|
||||
<div class="panel-head"><div><p class="eyebrow">Live module</p><h3>Reference component</h3></div><span class="status">online</span></div>
|
||||
<div class="metric-grid"><div class="metric"><strong>98%</strong><span>Signal quality</span></div><div class="metric"><strong>24</strong><span>Active flows</span></div><div class="metric"><strong>3.2s</strong><span>Response time</span></div></div>
|
||||
<div class="card-row"><div class="mini-card"><h3>Palette</h3><p>warm editorial system with cream canvas, serif display, and calm publication rhythm.</p><div class="swatches" aria-label="Token swatches"><span class="swatch accent"></span><span class="swatch surface"></span><span class="swatch warm"></span><span class="swatch fg"></span></div></div><div class="mini-card"><h3>Control</h3><p>Focus, hover, and status states share the same system signal.</p><div class="field"><label for="warm-editorial-input">Reference input</label><input id="warm-editorial-input" value="Warm Editorial system token" /></div></div></div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section><div class="container lower"><article class="tile"><p class="eyebrow">Typography</p><h2>Display rhythm</h2><p>Headlines use the display stack with the declared scale and leading.</p></article><article class="tile"><p class="eyebrow">Surface</p><h2>Layer system</h2><p>Cards, warm panels, borders, and raised states resolve through shared tokens.</p></article><article class="tile"><p class="eyebrow">Interaction</p><h2>Motion states</h2><p>Buttons, inputs, and panels use system-specific focus rings and easing.</p></article></div></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
63
design-systems/warm-editorial/tokens.css
Normal file
63
design-systems/warm-editorial/tokens.css
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* design-systems/warm-editorial/tokens.css
|
||||
* Structured token bindings for Warm Editorial.
|
||||
* warm editorial system with cream canvas, serif display, and calm publication rhythm.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bg: #fbf6ee;
|
||||
--surface: #fffdf8;
|
||||
--surface-warm: #f1e3cf;
|
||||
--fg: #201914;
|
||||
--fg-2: #4c4037;
|
||||
--muted: #7a6d63;
|
||||
--meta: #9b5b32;
|
||||
--border: #ded2c3;
|
||||
--border-soft: #eee4d7;
|
||||
--accent: #9b5b32;
|
||||
--accent-on: #ffffff;
|
||||
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
--success: #4f8a4f;
|
||||
--warn: #c9822f;
|
||||
--danger: #b33a3a;
|
||||
--font-display: Georgia, "Times New Roman", serif;
|
||||
--font-body: Inter, system-ui, sans-serif;
|
||||
--font-mono: "SF Mono", ui-monospace, Menlo, monospace;
|
||||
--text-xs: 12px;
|
||||
--text-sm: 14px;
|
||||
--text-base: 17px;
|
||||
--text-lg: 20px;
|
||||
--text-xl: 28px;
|
||||
--text-2xl: 42px;
|
||||
--text-3xl: 64px;
|
||||
--text-4xl: 88px;
|
||||
--leading-body: 1.62;
|
||||
--leading-tight: 1;
|
||||
--tracking-display: -0.025em;
|
||||
--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: 112px;
|
||||
--section-y-tablet: 80px;
|
||||
--section-y-phone: 56px;
|
||||
--radius-sm: 10px;
|
||||
--radius-md: 16px;
|
||||
--radius-lg: 24px;
|
||||
--radius-pill: 9999px;
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised: 0 20px 52px rgba(32, 25, 20, 0.12);
|
||||
--focus-ring: 0 0 0 4px rgba(155, 91, 50, 0.24);
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 240ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--container-max: 1180px;
|
||||
--container-gutter-desktop: 36px;
|
||||
--container-gutter-tablet: 24px;
|
||||
--container-gutter-phone: 16px;
|
||||
}
|
||||
Loading…
Reference in a new issue