Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
50f390a
docs(specs): design token CSS-var completion + docs visual review fin…
blove Aug 29, 2026
0083fb4
docs(plans): implementation plan for design token CSS-var completion
blove Aug 29, 2026
637d15e
test(design-tokens): assert token↔CSS-var parity (red — type and spac…
blove Aug 29, 2026
90e0efe
feat(design-tokens): emit the type scale as Tailwind v4 composite tex…
blove Aug 29, 2026
23edeb1
feat(design-tokens): emit the space scale; token↔CSS parity now green
blove Aug 29, 2026
ddba808
test(design-tokens): pin the --ds-* names cockpit and example apps re…
blove Aug 29, 2026
8689500
refactor(design-tokens): generate tokens.css from light.ts so --ds-* …
blove Aug 29, 2026
7d52e0d
build(design-tokens): export and ship tokens.css alongside theme.css
blove Aug 29, 2026
bb3817b
refactor(website): use accent tokens for docs code chips and table rule
blove Aug 29, 2026
feb8c92
fix(website): docs tables and code titles use the live text tokens
blove Aug 29, 2026
0898f19
refactor(website): name the docs-local constants that are not design …
blove Aug 29, 2026
5967edf
docs(design-tokens): correct the utility name and record two browser …
blove Aug 29, 2026
0ab9f90
fix(website): keep the code-title foreground with the syntax-theme co…
blove Aug 29, 2026
bdcabec
test(design-tokens): --ds-render-green is consumer-referenced, add it…
blove Aug 29, 2026
f8f40d6
test(design-tokens): enforce the invariant the light.* parity exclusi…
blove Aug 29, 2026
5cec358
test(design-tokens): assert cssVars() and generated tokens.css agree
blove Aug 29, 2026
6be802c
chore(design-tokens): align the regenerate command, fix a tint commen…
blove Aug 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 45 additions & 16 deletions apps/website/src/app/global.css
Original file line number Diff line number Diff line change
@@ -1,6 +1,35 @@
@import "tailwindcss";
@import "@threadplane/design-tokens/theme.css";

/*
* Local, non-token constants.
*
* These are deliberately NOT design tokens. Promoting them to
* @threadplane/design-tokens would imply the design system owns the syntax
* theme and the docs figure treatment. It does not.
*
* The --docs-code-* group is coupled to `rehypeOptions.theme` ('tokyo-night')
* in components/docs/MdxRenderer.tsx. Change the shiki theme and these must
* change with it.
* --docs-code-title-fg is here rather than on --color-text-muted for the same
* reason: it sits on a dark surface, where the light-theme muted token drops
* to 3.6:1 contrast.
*/
:root {
--docs-code-bg: #1a1b26;
--docs-code-title-fg: #8b8fa3;
--docs-code-border: rgba(0, 0, 0, 0.1);
--docs-code-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
--docs-code-title-rule: rgba(255, 255, 255, 0.06);
--docs-figure-shadow: 0 4px 16px rgba(0, 32, 72, 0.1);
--docs-figure-shadow-bare: 0 4px 16px rgba(0, 32, 72, 0.08);
/* Accent tints in the 3.5–10% range, around --color-accent-surface (6%).
* Derived rather than hardcoded so they track the accent. */
--docs-accent-tint-faint: color-mix(in srgb, var(--color-accent) 3.5%, transparent);
--docs-accent-tint-soft: color-mix(in srgb, var(--color-accent) 8%, transparent);
--docs-accent-tint-line: color-mix(in srgb, var(--color-accent) 10%, transparent);
}

* {
box-sizing: border-box;
}
Expand Down Expand Up @@ -55,7 +84,7 @@ html {
/* Shiki code blocks — tokyo-night theme */
.shiki {
padding: 1.5rem;
background: #1a1b26 !important;
background: var(--docs-code-bg) !important;
overflow-x: auto;
}
.shiki code {
Expand All @@ -74,8 +103,8 @@ html {
.docs-prose [data-rehype-pretty-code-figure] pre {
padding: 1.25rem 1.5rem;
border-radius: 0.75rem;
border: 1px solid rgba(0, 0, 0, 0.1);
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
border: 1px solid var(--docs-code-border);
box-shadow: var(--docs-code-shadow);
overflow-x: auto;
font-size: 0.8rem;
line-height: 1.7;
Expand All @@ -97,10 +126,10 @@ html {
.docs-prose [data-rehype-pretty-code-figure] [data-rehype-pretty-code-title] {
font-family: var(--font-mono), monospace;
font-size: 0.7rem;
color: #8b8fa3;
color: var(--docs-code-title-fg);
padding: 0.5rem 1.5rem;
background: #1a1b26;
border-bottom: 1px solid rgba(255, 255, 255, 0.06);
background: var(--docs-code-bg);
border-bottom: 1px solid var(--docs-code-title-rule);
border-radius: 0.75rem 0.75rem 0 0;
}

Expand All @@ -111,8 +140,8 @@ html {
.docs-prose :not(pre) > code {
font-family: var(--font-mono), monospace;
font-size: 0.85em;
background: rgba(0, 64, 144, 0.06);
color: #004090;
background: var(--color-accent-surface);
color: var(--color-accent);
padding: 0.15rem 0.4rem;
border-radius: 0.25rem;
font-weight: 400;
Expand All @@ -136,7 +165,7 @@ html {
.docs-prose ol { list-style-type: decimal; }
.docs-prose li { margin-bottom: 0.5rem; line-height: 1.6; }
.docs-prose li > p { margin-bottom: 0.5rem; }
.docs-prose li::marker { color: var(--color-text-muted, #555770); }
.docs-prose li::marker { color: var(--color-text-muted); }
.docs-prose ul ul, .docs-prose ol ol, .docs-prose ul ol, .docs-prose ol ul {
margin-top: 0.5rem;
margin-bottom: 0.5rem;
Expand All @@ -151,23 +180,23 @@ html {
.docs-prose figure:has(> img) {
margin: 2.5rem 0;
padding: 0.75rem 0.75rem 0;
background: rgba(0, 64, 144, 0.035);
border: 1px solid rgba(0, 64, 144, 0.1);
background: var(--docs-accent-tint-faint);
border: 1px solid var(--docs-accent-tint-line);
border-radius: 0.75rem;
}
.docs-prose figure:has(> img) > img {
display: block;
width: 100%;
height: auto;
border-radius: 0.5rem;
box-shadow: 0 4px 16px rgba(0, 32, 72, 0.1);
box-shadow: var(--docs-figure-shadow);
}
.docs-prose figure:has(> img) > figcaption {
margin: 0;
padding: 0.875rem 0.5rem 0.625rem;
font-size: 0.875rem;
line-height: 1.5;
color: var(--color-text-muted, #555770);
color: var(--color-text-muted);
text-align: center;
font-style: italic;
}
Expand All @@ -179,7 +208,7 @@ html {
height: auto;
margin: 2rem auto;
border-radius: 0.5rem;
box-shadow: 0 4px 16px rgba(0, 32, 72, 0.08);
box-shadow: var(--docs-figure-shadow-bare);
}

/* Architecture diagrams are authored at exactly the width `.docs-prose`
Expand All @@ -192,8 +221,8 @@ html {

.docs-table-scroll { max-width: 100%; overflow-x: auto; margin: 1.5rem 0; }
.docs-prose table { width: 100%; border-collapse: collapse; font-size: 0.875rem; margin: 0; }
.docs-prose th { text-align: left; padding: 0.5rem 0.75rem; font-family: var(--font-mono); font-size: 0.75rem; text-transform: uppercase; color: #555770; border-bottom: 1px solid rgba(0, 64, 144, 0.15); }
.docs-prose td { padding: 0.5rem 0.75rem; border-bottom: 1px solid rgba(0, 64, 144, 0.08); color: #555770; }
.docs-prose th { text-align: left; padding: 0.5rem 0.75rem; font-family: var(--font-mono); font-size: 0.75rem; text-transform: uppercase; color: var(--color-text-muted); border-bottom: 1px solid var(--color-accent-border); }
.docs-prose td { padding: 0.5rem 0.75rem; border-bottom: 1px solid var(--docs-accent-tint-soft); color: var(--color-text-secondary); }
.docs-prose td code { font-size: 0.8em; }

/* UI primitive — Card.
Expand Down
Loading
Loading