|
7 | 7 | "blueprint-steel": { |
8 | 8 | "role": "primary", |
9 | 9 | "displayName": "Blueprint Steel", |
10 | | - "canonical": "hsl(224, 29%, 37%)", |
| 10 | + "canonical": "oklch(42% 0.065 258)", |
11 | 11 | "tonalRamp": ["#1A2136", "#252F52", "#2F3D68", "#43527A", "#5D6D97", "#7B8AB0", "#A3AECA", "#D4D9EB"] |
12 | 12 | }, |
13 | 13 | "pre-dawn-navy": { |
14 | 14 | "role": "primary", |
15 | 15 | "displayName": "Pre-Dawn Navy", |
16 | | - "canonical": "hsl(221, 57%, 21%)", |
| 16 | + "canonical": "oklch(23% 0.085 263)", |
17 | 17 | "tonalRamp": ["#0C1524", "#121F38", "#192C50", "#172A54", "#2B4A8C", "#4A6DB8", "#7998D1", "#BAC8E9"] |
18 | 18 | }, |
19 | 19 | "safety-tape-pale": { |
20 | 20 | "role": "tertiary", |
21 | 21 | "displayName": "Safety Tape Pale", |
22 | | - "canonical": "hsl(54, 96%, 79%)", |
| 22 | + "canonical": "oklch(95% 0.14 103)", |
23 | 23 | "tonalRamp": ["#6B5C00", "#8C7A00", "#B89F00", "#D9BC00", "#EDD300", "#F5E84A", "#FDF396", "#FEFBE0"] |
24 | 24 | }, |
25 | 25 | "site-signal-amber": { |
26 | 26 | "role": "secondary", |
27 | 27 | "displayName": "Site Signal Amber", |
28 | | - "canonical": "hsl(41, 93%, 56%)", |
| 28 | + "canonical": "oklch(77% 0.17 80)", |
29 | 29 | "tonalRamp": ["#4A2A00", "#7A4500", "#AB6100", "#D68000", "#F7B526", "#FAC85C", "#FBD98E", "#FCEDB8"] |
30 | 30 | }, |
31 | 31 | "construction-orange": { |
32 | 32 | "role": "secondary", |
33 | 33 | "displayName": "Construction Orange", |
34 | | - "canonical": "#FE6400", |
| 34 | + "canonical": "oklch(63% 0.22 42)", |
35 | 35 | "tonalRamp": ["#5C2000", "#8C3300", "#C04700", "#FE6400", "#FE8033", "#FE9D66", "#FFC099", "#FFDFCC"] |
| 36 | + }, |
| 37 | + "near-black": { |
| 38 | + "role": "neutral", |
| 39 | + "displayName": "Near-Black", |
| 40 | + "canonical": "oklch(15% 0.015 258)", |
| 41 | + "tonalRamp": ["#0a0d14", "#131820", "#1d2535", "#263048", "#36456a", "#485e8c", "#6d86b8", "#a8bbd9"] |
36 | 42 | } |
37 | 43 | }, |
38 | 44 | "typographyMeta": { |
|
57 | 63 | "refersTo": "card", |
58 | 64 | "description": "Documentation feature card. Flat border replaces Material shadow.", |
59 | 65 | "html": "<div class=\"ds-card\"><div class=\"ds-card-header\"><p class=\"ds-card-title\">Issue Triage</p><p class=\"ds-card-subtitle\">Automated agent</p></div><div class=\"ds-card-content\"><p>Analyzes new issues, applies labels, and posts an initial response without human intervention.</p></div><div class=\"ds-card-actions\"><a class=\"ds-card-link\" href=\"#\">READ MORE</a></div></div>", |
60 | | - "css": ".ds-card { background-color: #ffffff; border-radius: 4px; border: 1px solid rgba(67, 82, 122, 0.2); overflow: hidden; font-family: Roboto, system-ui, -apple-system, sans-serif; } .ds-card-header { padding: 16px 16px 24px; background-color: #43527A; color: #ffffff; } .ds-card-title { margin: 0 0 2px; font-size: 1.14em; font-weight: 700; line-height: 1.6; } .ds-card-subtitle { margin: 0; font-size: 0.8em; font-weight: 500; line-height: 1.57; opacity: 0.85; } .ds-card-content { padding: 16px; font-size: 1rem; font-weight: 400; line-height: 1.6; color: #172A54; } .ds-card-content p { margin: 0; } .ds-card-actions { padding: 16px; border-top: 1px solid rgba(67, 82, 122, 0.12); } .ds-card-link { font-size: 0.8125rem; font-weight: 500; letter-spacing: 0.03em; text-transform: uppercase; color: #43527A; text-decoration: none; transition: color 150ms cubic-bezier(0.0, 0.0, 0.2, 1); } .ds-card-link:hover { color: #F7B526; }" |
| 66 | + "css": ".ds-card { background-color: white; border-radius: 4px; border: 1px solid oklch(42% 0.065 258 / 20%); overflow: hidden; font-family: 'Public Sans', system-ui, -apple-system, sans-serif; } .ds-card-header { padding: 16px 16px 24px; background-color: oklch(42% 0.065 258); color: white; } .ds-card-title { margin: 0 0 2px; font-size: 1.14em; font-weight: 700; line-height: 1.6; } .ds-card-subtitle { margin: 0; font-size: 0.8em; font-weight: 500; line-height: 1.57; opacity: 0.85; } .ds-card-content { padding: 16px; font-size: 1rem; font-weight: 400; line-height: 1.6; color: oklch(23% 0.085 263); } .ds-card-content p { margin: 0; } .ds-card-actions { padding: 16px; border-top: 1px solid oklch(42% 0.065 258 / 12%); } .ds-card-link { font-size: 0.8125rem; font-weight: 500; letter-spacing: 0.03em; text-transform: uppercase; color: oklch(42% 0.065 258); text-decoration: none; transition: color 150ms cubic-bezier(0.0, 0.0, 0.2, 1); } .ds-card-link:hover { color: oklch(77% 0.17 80); }" |
61 | 67 | }, |
62 | 68 | { |
63 | 69 | "name": "Tag Chip", |
64 | 70 | "kind": "chip", |
65 | 71 | "refersTo": "tag", |
66 | 72 | "description": "Read-only descriptor label. Pill shape, tonal background.", |
67 | 73 | "html": "<span class=\"ds-tag\">issue-triage</span>", |
68 | | - "css": ".ds-tag { display: inline-flex; align-items: center; height: 24px; padding: 2px 8px; background-color: rgba(23, 42, 84, 0.08); color: #172A54; border-radius: 100px; font-family: Roboto, system-ui, -apple-system, sans-serif; font-size: 0.75rem; font-weight: 500; line-height: 20px; white-space: nowrap; }" |
| 74 | + "css": ".ds-tag { display: inline-flex; align-items: center; height: 24px; padding: 2px 8px; background-color: oklch(42% 0.065 258 / 8%); color: oklch(23% 0.085 263); border-radius: 100px; font-family: 'Public Sans', system-ui, -apple-system, sans-serif; font-size: 0.75rem; font-weight: 500; line-height: 20px; white-space: nowrap; }" |
69 | 75 | }, |
70 | 76 | { |
71 | 77 | "name": "API Doc Label", |
72 | 78 | "kind": "chip", |
73 | 79 | "refersTo": "doc-label", |
74 | 80 | "description": "Inline API documentation label for visibility and type annotations.", |
75 | | - "html": "<span class=\"ds-doc-label ds-doc-label--special\">special</span> <span class=\"ds-doc-label ds-doc-label--property\">property</span> <span class=\"ds-doc-label ds-doc-label--private\">private</span>", |
76 | | - "css": ".ds-doc-label { display: inline-flex; align-items: center; border-radius: 100px; padding: 0 5px; font-family: Roboto, system-ui, -apple-system, sans-serif; font-size: 0.75rem; font-weight: 500; line-height: 1.6; } .ds-doc-label code { background-color: transparent; color: white; } .ds-doc-label--special { background-color: #43527A; color: #ffffff; } .ds-doc-label--private { background-color: #B03030; color: #ffffff; } .ds-doc-label--property { background-color: #2E7D32; color: #ffffff; } .ds-doc-label--read-only { background-color: #b09000; color: #ffffff; }" |
| 81 | + "html": "<span class=\"ds-doc-label ds-doc-label--special\">special</span> <span class=\"ds-doc-label ds-doc-label--property\">property</span> <span class=\"ds-doc-label ds-doc-label--private\">private</span> <span class=\"ds-doc-label ds-doc-label--read-only\">read-only</span>", |
| 82 | + "css": ".ds-doc-label { display: inline-flex; align-items: center; border-radius: 100px; padding: 0 5px; font-family: 'Public Sans', system-ui, -apple-system, sans-serif; font-size: 0.75rem; font-weight: 500; line-height: 1.6; } .ds-doc-label code { background-color: transparent; color: white; } .ds-doc-label--special { background-color: oklch(42% 0.065 258); color: oklch(98% 0.005 258); } .ds-doc-label--private { background-color: oklch(35% 0.12 15); color: oklch(98% 0.005 258); } .ds-doc-label--property { background-color: oklch(33% 0.10 155); color: oklch(98% 0.005 258); } .ds-doc-label--read-only { background-color: oklch(82% 0.16 95); color: oklch(15% 0.015 258); }" |
77 | 83 | }, |
78 | 84 | { |
79 | 85 | "name": "Sidebar Nav Item", |
80 | 86 | "kind": "nav", |
81 | 87 | "refersTo": null, |
82 | 88 | "description": "Sidebar navigation item. Active state uses Blueprint Steel text weight, no stripe.", |
83 | 89 | "html": "<nav class=\"ds-sidenav\"><ul><li><a class=\"ds-sidenav-item\" href=\"#\">Installation</a></li><li><a class=\"ds-sidenav-item ds-sidenav-item--active\" href=\"#\">Quick Start</a></li><li><a class=\"ds-sidenav-item\" href=\"#\">Configuration</a></li></ul></nav>", |
84 | | - "css": ".ds-sidenav { background-color: rgba(253, 243, 150, 0.07); padding: 8px 0; font-family: Roboto, system-ui, -apple-system, sans-serif; } .ds-sidenav ul { list-style: none; margin: 0; padding: 0; } .ds-sidenav-item { display: block; padding: 6px 16px; font-size: 0.875rem; font-weight: 400; color: inherit; text-decoration: none; transition: color 150ms cubic-bezier(0.0, 0.0, 0.2, 1); } .ds-sidenav-item:hover { color: #F7B526; } .ds-sidenav-item--active { color: #43527A; font-weight: 600; }" |
| 90 | + "css": ".ds-sidenav { background-color: oklch(95% 0.14 103 / 7%); padding: 8px 0; font-family: 'Public Sans', system-ui, -apple-system, sans-serif; } .ds-sidenav ul { list-style: none; margin: 0; padding: 0; } .ds-sidenav-item { display: block; padding: 6px 16px; font-size: 0.875rem; font-weight: 400; color: inherit; text-decoration: none; transition: color 150ms cubic-bezier(0.0, 0.0, 0.2, 1); } .ds-sidenav-item:hover { color: oklch(77% 0.17 80); } .ds-sidenav-item--active { color: oklch(42% 0.065 258); font-weight: 600; }" |
85 | 91 | }, |
86 | 92 | { |
87 | 93 | "name": "Primary CTA Button", |
88 | 94 | "kind": "button", |
89 | 95 | "refersTo": null, |
90 | 96 | "description": "Primary call-to-action. Construction Orange, used once per page.", |
91 | 97 | "html": "<button class=\"ds-btn-primary\">Get Started</button>", |
92 | | - "css": ".ds-btn-primary { display: inline-flex; align-items: center; padding: 10px 24px; background-color: #FE6400; color: #ffffff; font-family: Roboto, system-ui, -apple-system, sans-serif; font-size: 0.875rem; font-weight: 600; letter-spacing: 0.02em; border: none; border-radius: 4px; cursor: pointer; text-decoration: none; transition: background-color 150ms cubic-bezier(0.0, 0.0, 0.2, 1), transform 150ms cubic-bezier(0.0, 0.0, 0.2, 1); } .ds-btn-primary:hover { background-color: #D45400; } .ds-btn-primary:focus-visible { outline: 2px solid #F7B526; outline-offset: 2px; } .ds-btn-primary:active { transform: translateY(1px); }" |
| 98 | + "css": ".ds-btn-primary { display: inline-flex; align-items: center; padding: 10px 24px; background-color: oklch(63% 0.22 42); color: white; font-family: 'Public Sans', system-ui, -apple-system, sans-serif; font-size: 0.875rem; font-weight: 600; letter-spacing: 0.02em; border: none; border-radius: 4px; cursor: pointer; text-decoration: none; transition: background-color 150ms cubic-bezier(0.0, 0.0, 0.2, 1), transform 150ms cubic-bezier(0.0, 0.0, 0.2, 1); } .ds-btn-primary:hover { background-color: oklch(53% 0.22 42); } .ds-btn-primary:focus-visible { outline: 2px solid oklch(77% 0.17 80); outline-offset: 2px; } .ds-btn-primary:active { transform: translateY(1px); }" |
93 | 99 | } |
94 | 100 | ], |
95 | 101 | "narrative": { |
|
103 | 109 | ], |
104 | 110 | "rules": [ |
105 | 111 | { "name": "The One Orange Rule", "body": "Construction Orange appears on one primary action per screen. Its rarity is the point. When everything is orange, nothing is urgent.", "section": "colors" }, |
106 | | - { "name": "The Blue-Not-Indigo Correction", "body": "The Material theme defaults --md-primary-fg-color--light (#ECB7B7) and --md-primary-fg-color--dark (#90030C) are off-brand. Replace both with tints and shades derived from Blueprint Steel.", "section": "colors" }, |
| 112 | + { "name": "The Blue-Not-Indigo Correction", "body": "The Zensical/Material theme defaults --md-primary-fg-color--light and --md-primary-fg-color--dark are off-brand. Replace both with tints and shades derived from Blueprint Steel, mapped in colors.css.", "section": "colors" }, |
107 | 113 | { "name": "The Single-Family Rule", "body": "One typeface. Different weights and sizes, not different families. Mixing a display serif into developer docs reads as a design decision made by someone who doesn't use the docs.", "section": "typography" }, |
108 | 114 | { "name": "The Flat-First Rule", "body": "If you're reaching for box-shadow, try a border or background-color shift first. Shadows communicate that an element is physically lifted — which implies interactivity or importance. Use that signal only when it's true.", "section": "elevation" }, |
109 | 115 | { "name": "The No-Stripe Rule", "body": "No border-left accent stripe on sidebar items, list items, or callouts. Ever. Use background tint or text color for active state.", "section": "components" } |
|
127 | 133 | "Don't use #000000 or #ffffff as literal color values. Tint every neutral toward the brand hue.", |
128 | 134 | "Don't add Material's three-layer box-shadow to new components.", |
129 | 135 | "Don't write hero copy that makes promises about productivity (10x, streamline, supercharge).", |
130 | | - "Don't use the off-brand Material defaults #ECB7B7 and #90030C." |
| 136 | + "Don't use the off-brand Zensical/Material defaults for primary-fg-color--light and --dark." |
131 | 137 | ] |
132 | 138 | } |
133 | 139 | } |
0 commit comments