@cogenta/theme-docs 0.3.3 → 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/render/blocks/accordion.d.ts +8 -0
- package/dist/src/render/blocks/accordion.d.ts.map +1 -1
- package/dist/src/render/blocks/accordion.js +10 -10
- package/dist/src/render/blocks/accordion.js.map +1 -1
- package/dist/src/render/blocks/collection-list.d.ts +3 -11
- package/dist/src/render/blocks/collection-list.d.ts.map +1 -1
- package/dist/src/render/blocks/collection-list.js +69 -68
- package/dist/src/render/blocks/collection-list.js.map +1 -1
- package/dist/src/render/blocks/cta.d.ts +6 -0
- package/dist/src/render/blocks/cta.d.ts.map +1 -1
- package/dist/src/render/blocks/cta.js +9 -4
- package/dist/src/render/blocks/cta.js.map +1 -1
- package/dist/src/render/blocks/embed.d.ts.map +1 -1
- package/dist/src/render/blocks/embed.js +14 -13
- package/dist/src/render/blocks/embed.js.map +1 -1
- package/dist/src/render/blocks/faq.d.ts +7 -0
- package/dist/src/render/blocks/faq.d.ts.map +1 -1
- package/dist/src/render/blocks/faq.js +10 -10
- package/dist/src/render/blocks/faq.js.map +1 -1
- package/dist/src/render/blocks/feature-grid.d.ts.map +1 -1
- package/dist/src/render/blocks/feature-grid.js +19 -19
- package/dist/src/render/blocks/feature-grid.js.map +1 -1
- package/dist/src/render/blocks/gallery.d.ts +8 -4
- package/dist/src/render/blocks/gallery.d.ts.map +1 -1
- package/dist/src/render/blocks/gallery.js +19 -13
- package/dist/src/render/blocks/gallery.js.map +1 -1
- package/dist/src/render/blocks/hero.d.ts +12 -9
- package/dist/src/render/blocks/hero.d.ts.map +1 -1
- package/dist/src/render/blocks/hero.js +22 -20
- package/dist/src/render/blocks/hero.js.map +1 -1
- package/dist/src/render/blocks/logo-strip.d.ts +6 -0
- package/dist/src/render/blocks/logo-strip.d.ts.map +1 -1
- package/dist/src/render/blocks/logo-strip.js +6 -10
- package/dist/src/render/blocks/logo-strip.js.map +1 -1
- package/dist/src/render/blocks/logos.d.ts +10 -0
- package/dist/src/render/blocks/logos.d.ts.map +1 -1
- package/dist/src/render/blocks/logos.js +20 -17
- package/dist/src/render/blocks/logos.js.map +1 -1
- package/dist/src/render/blocks/media-figure.d.ts +0 -6
- package/dist/src/render/blocks/media-figure.d.ts.map +1 -1
- package/dist/src/render/blocks/media-figure.js +28 -16
- package/dist/src/render/blocks/media-figure.js.map +1 -1
- package/dist/src/render/blocks/pricing-table.d.ts.map +1 -1
- package/dist/src/render/blocks/pricing-table.js +16 -20
- package/dist/src/render/blocks/pricing-table.js.map +1 -1
- package/dist/src/render/blocks/prose.d.ts +13 -1
- package/dist/src/render/blocks/prose.d.ts.map +1 -1
- package/dist/src/render/blocks/prose.js +12 -31
- package/dist/src/render/blocks/prose.js.map +1 -1
- package/dist/src/render/blocks/quote.d.ts +5 -3
- package/dist/src/render/blocks/quote.d.ts.map +1 -1
- package/dist/src/render/blocks/quote.js +10 -14
- package/dist/src/render/blocks/quote.js.map +1 -1
- package/dist/src/render/blocks/stat-counter.d.ts +5 -0
- package/dist/src/render/blocks/stat-counter.d.ts.map +1 -1
- package/dist/src/render/blocks/stat-counter.js +6 -10
- package/dist/src/render/blocks/stat-counter.js.map +1 -1
- package/dist/src/render/blocks/stats.d.ts +10 -0
- package/dist/src/render/blocks/stats.d.ts.map +1 -1
- package/dist/src/render/blocks/stats.js +13 -8
- package/dist/src/render/blocks/stats.js.map +1 -1
- package/dist/src/render/blocks/testimonial.d.ts +4 -5
- package/dist/src/render/blocks/testimonial.d.ts.map +1 -1
- package/dist/src/render/blocks/testimonial.js +9 -13
- package/dist/src/render/blocks/testimonial.js.map +1 -1
- package/dist/src/render/chrome.d.ts +36 -1
- package/dist/src/render/chrome.d.ts.map +1 -1
- package/dist/src/render/chrome.js +122 -80
- package/dist/src/render/chrome.js.map +1 -1
- package/dist/src/render/doc-index.d.ts +25 -0
- package/dist/src/render/doc-index.d.ts.map +1 -0
- package/dist/src/render/doc-index.js +49 -0
- package/dist/src/render/doc-index.js.map +1 -0
- package/dist/src/render/doc-page.d.ts +6 -0
- package/dist/src/render/doc-page.d.ts.map +1 -0
- package/dist/src/render/doc-page.js +127 -0
- package/dist/src/render/doc-page.js.map +1 -0
- package/dist/src/render/layout.d.ts +23 -0
- package/dist/src/render/layout.d.ts.map +1 -0
- package/dist/src/render/layout.js +40 -0
- package/dist/src/render/layout.js.map +1 -0
- package/dist/src/render/render-block.d.ts +9 -6
- package/dist/src/render/render-block.d.ts.map +1 -1
- package/dist/src/render/render-block.js +47 -100
- package/dist/src/render/render-block.js.map +1 -1
- package/dist/src/render/rich-text.d.ts +26 -0
- package/dist/src/render/rich-text.d.ts.map +1 -0
- package/dist/src/render/rich-text.js +325 -0
- package/dist/src/render/rich-text.js.map +1 -0
- package/dist/src/render/search.d.ts +15 -0
- package/dist/src/render/search.d.ts.map +1 -0
- package/dist/src/render/search.js +31 -0
- package/dist/src/render/search.js.map +1 -0
- package/dist/src/render/strings.d.ts +51 -0
- package/dist/src/render/strings.d.ts.map +1 -0
- package/dist/src/render/strings.js +60 -0
- package/dist/src/render/strings.js.map +1 -0
- package/dist/src/render/term-archive.d.ts +5 -5
- package/dist/src/render/term-archive.d.ts.map +1 -1
- package/dist/src/render/term-archive.js +27 -16
- package/dist/src/render/term-archive.js.map +1 -1
- package/dist/src/render/widget-areas.d.ts +22 -0
- package/dist/src/render/widget-areas.d.ts.map +1 -0
- package/dist/src/render/widget-areas.js +29 -0
- package/dist/src/render/widget-areas.js.map +1 -0
- package/package.json +4 -4
- package/src/index.ts +2 -0
- package/src/render/blocks/accordion.ts +31 -42
- package/src/render/blocks/collection-list.ts +132 -123
- package/src/render/blocks/cta.ts +23 -18
- package/src/render/blocks/embed.ts +37 -28
- package/src/render/blocks/faq.ts +26 -37
- package/src/render/blocks/feature-grid.ts +34 -42
- package/src/render/blocks/gallery.ts +33 -29
- package/src/render/blocks/hero.ts +41 -45
- package/src/render/blocks/logo-strip.ts +21 -21
- package/src/render/blocks/logos.ts +32 -42
- package/src/render/blocks/media-figure.ts +47 -25
- package/src/render/blocks/pricing-table.ts +34 -41
- package/src/render/blocks/prose.ts +25 -40
- package/src/render/blocks/quote.ts +25 -19
- package/src/render/blocks/stat-counter.ts +27 -29
- package/src/render/blocks/stats.ts +35 -32
- package/src/render/blocks/testimonial.ts +18 -19
- package/src/render/chrome.ts +170 -83
- package/src/render/doc-index.ts +65 -0
- package/src/render/doc-page.ts +303 -0
- package/src/render/layout.ts +73 -0
- package/src/render/render-block.ts +67 -191
- package/src/render/rich-text.ts +446 -0
- package/src/render/search.ts +41 -0
- package/src/render/strings.ts +67 -0
- package/src/render/term-archive.ts +62 -38
- package/src/render/widget-areas.ts +33 -0
- package/src/styles/archive.css +21 -27
- package/src/styles/base.css +438 -838
- package/src/styles/blocks.css +658 -916
- package/src/styles/chrome.css +439 -0
- package/src/styles/docs.css +404 -0
- package/src/styles/rich.css +337 -0
- package/src/styles/theme.css +28 -23
- package/src/styles/tokens.css +209 -215
- package/src/styles/widgets.css +890 -0
- package/tokens.json +15 -15
package/src/styles/tokens.css
CHANGED
|
@@ -1,31 +1,26 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* `@cogenta/theme-docs`'s design system.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* build step.
|
|
4
|
+
* The register is first-class technical documentation: dense but calm,
|
|
5
|
+
* navigation first, code treated as the main character of a page. White and
|
|
6
|
+
* a cool grey scale carry the page, text is set in a near-black ink, and one
|
|
7
|
+
* deep petrol teal is kept for links, the page a reader is on, and focus.
|
|
8
|
+
* Structure is drawn with space and hairlines, never with boxes, shadows or
|
|
9
|
+
* decorative shapes.
|
|
11
10
|
*
|
|
12
|
-
* Two
|
|
11
|
+
* Two families from one superfamily. IBM Plex Sans sets everything a reader
|
|
12
|
+
* reads and uses; IBM Plex Mono sets code, file names, keys, commands and
|
|
13
|
+
* the handful of labels a program prints (a version, a date in a changelog).
|
|
13
14
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* and the spacing multiplier from `--cogenta-space-scale`, both emitted
|
|
18
|
-
* by `renderSkin` from the same tokens the validator checked.
|
|
15
|
+
* Contract D fixes a closed skin token set, so nothing here adds a token:
|
|
16
|
+
* every value is derived from a `--cogenta-*` property (`calc`, `color-mix`,
|
|
17
|
+
* relative colour syntax).
|
|
19
18
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* hover elevation, exactly the language `theme-entreprise` already proved);
|
|
26
|
-
* dark mode is a real slate, designed on its own terms rather than
|
|
27
|
-
* mechanically inverted — see the colour section below for the five
|
|
28
|
-
* decisions that make it so.
|
|
19
|
+
* Two rules hold in every stylesheet of this theme:
|
|
20
|
+
*
|
|
21
|
+
* 1. No colour literal. Every colour is a skin token or a function of one.
|
|
22
|
+
* 2. No second type scale. Steps come from `--cogenta-font-size-*`; fluid
|
|
23
|
+
* sizes only interpolate between steps of that one ladder.
|
|
29
24
|
*/
|
|
30
25
|
|
|
31
26
|
:where(:root) {
|
|
@@ -41,267 +36,266 @@
|
|
|
41
36
|
}
|
|
42
37
|
|
|
43
38
|
/* --------------------------------------------------------------------------
|
|
44
|
-
Space
|
|
45
|
-
the aesthetic direction asks for information density over air.
|
|
39
|
+
Space: one unit, one section rhythm, one page width, three reading columns.
|
|
46
40
|
-------------------------------------------------------------------------- */
|
|
47
41
|
|
|
48
42
|
:where(:root) {
|
|
49
|
-
--
|
|
50
|
-
--
|
|
51
|
-
|
|
52
|
-
--
|
|
53
|
-
--
|
|
54
|
-
--
|
|
55
|
-
--
|
|
56
|
-
--
|
|
57
|
-
--
|
|
58
|
-
--
|
|
59
|
-
--
|
|
60
|
-
--
|
|
61
|
-
--
|
|
62
|
-
--
|
|
63
|
-
--
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
--
|
|
69
|
-
--
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
--
|
|
74
|
-
--
|
|
75
|
-
--
|
|
76
|
-
|
|
43
|
+
--cd-density: var(--cogenta-space-scale, 1);
|
|
44
|
+
--cd-unit: calc(var(--cogenta-space-unit) * var(--cd-density));
|
|
45
|
+
|
|
46
|
+
--cd-s1: calc(var(--cd-unit) * 1);
|
|
47
|
+
--cd-s2: calc(var(--cd-unit) * 2);
|
|
48
|
+
--cd-s3: calc(var(--cd-unit) * 3);
|
|
49
|
+
--cd-s4: calc(var(--cd-unit) * 4);
|
|
50
|
+
--cd-s5: calc(var(--cd-unit) * 5);
|
|
51
|
+
--cd-s6: calc(var(--cd-unit) * 6);
|
|
52
|
+
--cd-s8: calc(var(--cd-unit) * 8);
|
|
53
|
+
--cd-s10: calc(var(--cd-unit) * 10);
|
|
54
|
+
--cd-s12: calc(var(--cd-unit) * 12);
|
|
55
|
+
--cd-s16: calc(var(--cd-unit) * 16);
|
|
56
|
+
--cd-s20: calc(var(--cd-unit) * 20);
|
|
57
|
+
--cd-s24: calc(var(--cd-unit) * 24);
|
|
58
|
+
|
|
59
|
+
/* The only vertical rhythm between blocks. Every block is padded by half of
|
|
60
|
+
it above and below, so any two blocks sit one full step apart. Inside an
|
|
61
|
+
article the step is shorter: a documentation page is read continuously. */
|
|
62
|
+
--cd-section: clamp(var(--cd-s12), 7vw, var(--cd-s24));
|
|
63
|
+
--cd-section-doc: var(--cd-s10);
|
|
64
|
+
|
|
65
|
+
/* The home page and every page outside the documentation sit on twelve
|
|
66
|
+
columns. */
|
|
67
|
+
--cd-columns: 12;
|
|
68
|
+
--cd-gutter: clamp(var(--cd-s5), 3vw, var(--cd-s10));
|
|
69
|
+
--cd-col-gap: clamp(var(--cd-s4), 2vw, var(--cd-s8));
|
|
70
|
+
/* One page width for the header, the footer, the home page and a
|
|
71
|
+
documentation page, so every left edge lines up with the wordmark. */
|
|
72
|
+
--cd-page: 90rem;
|
|
73
|
+
|
|
74
|
+
/* A documentation page: navigation, the article, the table of contents.
|
|
75
|
+
The side columns are fixed so the text never moves when the navigation
|
|
76
|
+
changes. Code, notes and reference tables take the whole article;
|
|
77
|
+
running text keeps to the measure. A `ch` is the width of Plex Sans's
|
|
78
|
+
zero, wider than its average letter: 56ch sets about 70 characters to a
|
|
79
|
+
line, measured in Chrome on the real pages. */
|
|
80
|
+
--cd-sidebar: 16rem;
|
|
81
|
+
--cd-toc: 13.5rem;
|
|
82
|
+
--cd-doc-page: var(--cd-page);
|
|
83
|
+
--cd-article: 46rem;
|
|
84
|
+
--cd-measure: 56ch;
|
|
85
|
+
--cd-header-height: 3.75rem;
|
|
77
86
|
}
|
|
78
87
|
|
|
79
88
|
:where([data-density="compact"]) {
|
|
80
|
-
--
|
|
89
|
+
--cd-density: 0.85;
|
|
81
90
|
}
|
|
82
91
|
|
|
83
92
|
:where([data-density="comfortable"]) {
|
|
84
|
-
--
|
|
93
|
+
--cd-density: 1;
|
|
85
94
|
}
|
|
86
95
|
|
|
87
96
|
:where([data-density="spacious"]) {
|
|
88
|
-
--
|
|
97
|
+
--cd-density: 1.2;
|
|
89
98
|
}
|
|
90
99
|
|
|
91
100
|
/* --------------------------------------------------------------------------
|
|
92
|
-
Type
|
|
101
|
+
Type: Plex Sans to read, Plex Mono for what a machine prints.
|
|
93
102
|
-------------------------------------------------------------------------- */
|
|
94
103
|
|
|
95
104
|
:where(:root) {
|
|
96
|
-
--
|
|
97
|
-
--
|
|
98
|
-
|
|
99
|
-
--
|
|
100
|
-
--
|
|
101
|
-
--
|
|
102
|
-
--
|
|
103
|
-
|
|
104
|
-
--
|
|
105
|
-
--
|
|
106
|
-
|
|
107
|
-
--
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
--
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
--
|
|
116
|
-
|
|
117
|
-
--
|
|
105
|
+
--cd-font-sans: var(--cogenta-font-sans);
|
|
106
|
+
--cd-font-mono: var(--cogenta-font-mono);
|
|
107
|
+
|
|
108
|
+
--cd-text-xs: var(--cogenta-font-size-xs, 0.69rem);
|
|
109
|
+
--cd-text-sm: var(--cogenta-font-size-sm, 0.83rem);
|
|
110
|
+
--cd-text-md: var(--cogenta-font-size-md, var(--cogenta-font-base-size, 1rem));
|
|
111
|
+
--cd-text-lg: var(--cogenta-font-size-lg, 1.2rem);
|
|
112
|
+
--cd-text-xl: var(--cogenta-font-size-xl, 1.44rem);
|
|
113
|
+
--cd-text-2xl: var(--cogenta-font-size-2xl, 1.73rem);
|
|
114
|
+
--cd-text-3xl: var(--cogenta-font-size-3xl, 2.07rem);
|
|
115
|
+
/* The same ladder, continued upward by the skin's own ratio. */
|
|
116
|
+
--cd-text-4xl: calc(var(--cd-text-3xl) * var(--cogenta-font-scale, 1.2));
|
|
117
|
+
--cd-text-5xl: calc(var(--cd-text-4xl) * var(--cogenta-font-scale, 1.2));
|
|
118
|
+
|
|
119
|
+
/* Interface text: navigation, labels, table cells. A quarter step under
|
|
120
|
+
the body size, the size an editor or a terminal uses. */
|
|
121
|
+
--cd-text-ui: calc((var(--cd-text-sm) + var(--cd-text-md) * 3) / 4);
|
|
122
|
+
--cd-text-label: calc((var(--cd-text-sm) * 3 + var(--cd-text-md)) / 4);
|
|
123
|
+
/* Code: Plex Mono sets wide, so it runs a step under the text around it. */
|
|
124
|
+
--cd-text-code: calc((var(--cd-text-sm) + var(--cd-text-md)) / 2);
|
|
125
|
+
|
|
126
|
+
--cd-size-display: clamp(var(--cd-text-3xl), calc(1rem + 3.2vw), var(--cd-text-5xl));
|
|
127
|
+
--cd-size-title: clamp(var(--cd-text-2xl), calc(1rem + 1.9vw), var(--cd-text-4xl));
|
|
128
|
+
--cd-size-section: clamp(var(--cd-text-xl), calc(0.95rem + 1.1vw), var(--cd-text-3xl));
|
|
129
|
+
--cd-size-h2: clamp(var(--cd-text-lg), calc(0.95rem + 0.6vw), var(--cd-text-2xl));
|
|
130
|
+
--cd-size-h3: var(--cd-text-lg);
|
|
131
|
+
--cd-size-lead: clamp(var(--cd-text-md), calc(0.9rem + 0.35vw), var(--cd-text-lg));
|
|
132
|
+
--cd-size-figure: clamp(var(--cd-text-2xl), calc(0.95rem + 1.6vw), var(--cd-text-4xl));
|
|
133
|
+
--cd-size-quote: clamp(var(--cd-text-lg), calc(0.95rem + 0.8vw), var(--cd-text-2xl));
|
|
134
|
+
|
|
135
|
+
--cd-leading-display: 1.08;
|
|
136
|
+
--cd-leading-heading: 1.22;
|
|
137
|
+
--cd-leading-lead: 1.55;
|
|
138
|
+
--cd-leading-text: 1.72;
|
|
139
|
+
--cd-leading-code: 1.7;
|
|
140
|
+
--cd-leading-ui: 1.45;
|
|
141
|
+
|
|
142
|
+
--cd-tracking-display: -0.024em;
|
|
143
|
+
--cd-tracking-heading: -0.012em;
|
|
144
|
+
|
|
145
|
+
--cd-weight-regular: 400;
|
|
146
|
+
--cd-weight-medium: 500;
|
|
147
|
+
--cd-weight-semibold: 600;
|
|
118
148
|
}
|
|
119
149
|
|
|
120
150
|
/* --------------------------------------------------------------------------
|
|
121
|
-
|
|
122
|
-
|
|
151
|
+
Shape and motion: a hair of softening on controls and code, motion is a
|
|
152
|
+
colour or an underline.
|
|
123
153
|
-------------------------------------------------------------------------- */
|
|
124
154
|
|
|
125
155
|
:where(:root) {
|
|
126
|
-
--
|
|
127
|
-
--
|
|
128
|
-
--
|
|
129
|
-
--cg-radius-lg: var(--cogenta-radius-lg);
|
|
130
|
-
--cg-radius-xl: calc(var(--cogenta-radius-lg) * 1.4);
|
|
131
|
-
--cg-radius-pill: 999rem;
|
|
132
|
-
}
|
|
156
|
+
--cd-radius-control: var(--cogenta-radius-md);
|
|
157
|
+
--cd-radius-frame: var(--cogenta-radius-lg);
|
|
158
|
+
--cd-radius-inline: var(--cogenta-radius-sm);
|
|
133
159
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
-------------------------------------------------------------------------- */
|
|
160
|
+
--cd-duration: min(var(--cogenta-motion-duration), 150ms);
|
|
161
|
+
--cd-ease: var(--cogenta-motion-easing);
|
|
137
162
|
|
|
138
|
-
:
|
|
139
|
-
--
|
|
140
|
-
--cg-duration: var(--cogenta-motion-duration);
|
|
141
|
-
--cg-duration-slow: calc(var(--cogenta-motion-duration) * 3);
|
|
142
|
-
--cg-ease: var(--cogenta-motion-easing);
|
|
163
|
+
--cd-rule: 1px;
|
|
164
|
+
--cd-rule-strong: 2px;
|
|
143
165
|
}
|
|
144
166
|
|
|
145
167
|
/* --------------------------------------------------------------------------
|
|
146
|
-
Colour
|
|
168
|
+
Colour: white, a cool grey scale, near-black ink, one petrol teal.
|
|
147
169
|
--------------------------------------------------------------------------
|
|
148
170
|
|
|
149
|
-
The block
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
3.
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
Known limit, same one `theme-canonical`/`theme-entreprise` record: the
|
|
177
|
-
derivation assumes a light-first skin (`bg` lighter than `fg`).
|
|
171
|
+
The first block declares the light palette plainly; the scheme-aware
|
|
172
|
+
values follow behind a feature query, so a browser that cannot parse
|
|
173
|
+
`light-dark()` still gets a complete light palette.
|
|
174
|
+
|
|
175
|
+
The teal (the skin's accent) is for four things only: a link in running
|
|
176
|
+
text, the page the reader is on in the navigation, the rule of a note, and
|
|
177
|
+
the focus ring. It is never a band, a card, a heading or a button fill
|
|
178
|
+
larger than a control.
|
|
179
|
+
|
|
180
|
+
Code has its own quiet ground: a step off the page in light, a step above
|
|
181
|
+
it in dark, always inside a hairline, so a long example reads as one
|
|
182
|
+
object without shouting.
|
|
183
|
+
|
|
184
|
+
The dark palette is designed for reading code at night, not inverted:
|
|
185
|
+
|
|
186
|
+
1. The ground is a cool near-black taken from the ink's own hue, and depth
|
|
187
|
+
is a lightness step up: canvas, code ground, raised panel.
|
|
188
|
+
2. Hairlines are a step up from the ground, visible without glowing.
|
|
189
|
+
3. Text is a soft white, a step below pure white, so long code does not
|
|
190
|
+
vibrate; secondary text and code comments keep AA.
|
|
191
|
+
4. The teal is lifted to a pale sea green that holds against the dark
|
|
192
|
+
ground, keeping its hue.
|
|
193
|
+
5. Diagrams and screenshots (light images) are dimmed a little with a
|
|
194
|
+
brightness step, so a white figure does not glare on a dark page.
|
|
195
|
+
|
|
196
|
+
Every ratio is computed from this file by `test/design-system.test.ts`,
|
|
197
|
+
in both schemes.
|
|
178
198
|
-------------------------------------------------------------------------- */
|
|
179
199
|
|
|
180
200
|
:where(:root) {
|
|
181
|
-
--
|
|
182
|
-
--
|
|
183
|
-
--
|
|
184
|
-
--
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
--
|
|
188
|
-
--
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
--
|
|
192
|
-
--
|
|
193
|
-
--
|
|
194
|
-
|
|
195
|
-
--
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
);
|
|
200
|
-
|
|
201
|
-
--
|
|
202
|
-
--cg-line-soft: color-mix(in oklab, var(--cogenta-color-border) 50%, var(--cogenta-color-bg));
|
|
203
|
-
--cg-line-strong: color-mix(in oklab, var(--cogenta-color-border) 60%, var(--cogenta-color-fg));
|
|
204
|
-
|
|
205
|
-
--cg-scrim: color-mix(in oklab, var(--cogenta-color-fg) 58%, transparent);
|
|
201
|
+
--cd-canvas: var(--cogenta-color-bg);
|
|
202
|
+
--cd-surface: color-mix(in oklab, var(--cogenta-color-muted) 55%, var(--cogenta-color-bg));
|
|
203
|
+
--cd-raised: var(--cogenta-color-muted);
|
|
204
|
+
--cd-code-ground: color-mix(in oklab, var(--cogenta-color-muted) 70%, var(--cogenta-color-bg));
|
|
205
|
+
|
|
206
|
+
--cd-ink: var(--cogenta-color-fg);
|
|
207
|
+
--cd-ink-muted: var(--cogenta-color-muted-fg);
|
|
208
|
+
--cd-ink-soft: color-mix(in oklab, var(--cogenta-color-fg) 70%, var(--cogenta-color-muted-fg));
|
|
209
|
+
|
|
210
|
+
--cd-accent: var(--cogenta-color-accent);
|
|
211
|
+
--cd-accent-fg: var(--cogenta-color-accent-fg);
|
|
212
|
+
--cd-accent-hover: color-mix(in oklab, var(--cogenta-color-accent) 80%, var(--cogenta-color-fg));
|
|
213
|
+
--cd-link: var(--cogenta-color-accent);
|
|
214
|
+
|
|
215
|
+
--cd-line: var(--cogenta-color-border);
|
|
216
|
+
--cd-line-strong: color-mix(in oklab, var(--cogenta-color-border) 58%, var(--cogenta-color-fg));
|
|
217
|
+
--cd-line-ink: var(--cogenta-color-fg);
|
|
218
|
+
|
|
219
|
+
--cd-footer: color-mix(in oklab, var(--cogenta-color-muted) 55%, var(--cogenta-color-bg));
|
|
220
|
+
|
|
221
|
+
--cd-image-brightness: 1;
|
|
206
222
|
}
|
|
207
223
|
|
|
208
224
|
@supports (color: light-dark(currentColor, currentColor)) and
|
|
209
225
|
(color: oklch(from currentColor l c h)) {
|
|
210
226
|
:where(:root) {
|
|
211
|
-
--
|
|
227
|
+
--cd-canvas: light-dark(
|
|
212
228
|
var(--cogenta-color-bg),
|
|
213
|
-
oklch(from var(--cogenta-color-fg) 0.
|
|
229
|
+
oklch(from var(--cogenta-color-fg) 0.175 calc(c * 0.9) h)
|
|
214
230
|
);
|
|
215
|
-
--
|
|
216
|
-
var(--cogenta-color-bg),
|
|
217
|
-
oklch(from var(--cogenta-color-fg) 0.
|
|
218
|
-
);
|
|
219
|
-
--cg-surface-raised: light-dark(
|
|
220
|
-
var(--cogenta-color-bg),
|
|
221
|
-
oklch(from var(--cogenta-color-fg) 0.225 calc(c * 0.6) h)
|
|
231
|
+
--cd-surface: light-dark(
|
|
232
|
+
color-mix(in oklab, var(--cogenta-color-muted) 55%, var(--cogenta-color-bg)),
|
|
233
|
+
oklch(from var(--cogenta-color-fg) 0.2 calc(c * 0.9) h)
|
|
222
234
|
);
|
|
223
|
-
--
|
|
235
|
+
--cd-raised: light-dark(
|
|
224
236
|
var(--cogenta-color-muted),
|
|
225
|
-
oklch(from var(--cogenta-color-fg) 0.
|
|
237
|
+
oklch(from var(--cogenta-color-fg) 0.235 calc(c * 0.9) h)
|
|
226
238
|
);
|
|
227
|
-
--
|
|
228
|
-
color-mix(in oklab, var(--cogenta-color-
|
|
229
|
-
oklch(from var(--cogenta-color-
|
|
239
|
+
--cd-code-ground: light-dark(
|
|
240
|
+
color-mix(in oklab, var(--cogenta-color-muted) 70%, var(--cogenta-color-bg)),
|
|
241
|
+
oklch(from var(--cogenta-color-fg) 0.205 calc(c * 0.9) h)
|
|
230
242
|
);
|
|
231
243
|
|
|
232
|
-
--
|
|
233
|
-
|
|
234
|
-
oklch(from var(--cogenta-color-accent) 0.93 0.01 h)
|
|
235
|
-
);
|
|
236
|
-
--cg-ink-muted: light-dark(
|
|
244
|
+
--cd-ink: light-dark(var(--cogenta-color-fg), oklch(from var(--cogenta-color-bg) 0.925 c h));
|
|
245
|
+
--cd-ink-muted: light-dark(
|
|
237
246
|
var(--cogenta-color-muted-fg),
|
|
238
|
-
oklch(from var(--cogenta-color-
|
|
247
|
+
oklch(from var(--cogenta-color-muted-fg) 0.76 c h)
|
|
239
248
|
);
|
|
240
|
-
--
|
|
241
|
-
color-mix(in oklab, var(--cogenta-color-
|
|
242
|
-
oklch(from var(--cogenta-color-
|
|
249
|
+
--cd-ink-soft: light-dark(
|
|
250
|
+
color-mix(in oklab, var(--cogenta-color-fg) 70%, var(--cogenta-color-muted-fg)),
|
|
251
|
+
oklch(from var(--cogenta-color-muted-fg) 0.85 c h)
|
|
243
252
|
);
|
|
244
253
|
|
|
245
|
-
--
|
|
254
|
+
--cd-accent: light-dark(
|
|
246
255
|
var(--cogenta-color-accent),
|
|
247
|
-
oklch(from var(--cogenta-color-accent) 0.
|
|
256
|
+
oklch(from var(--cogenta-color-accent) 0.8 calc(c * 0.85) h)
|
|
248
257
|
);
|
|
249
|
-
--
|
|
258
|
+
--cd-accent-fg: light-dark(
|
|
250
259
|
var(--cogenta-color-accent-fg),
|
|
251
|
-
oklch(from var(--cogenta-color-
|
|
260
|
+
oklch(from var(--cogenta-color-fg) 0.175 calc(c * 0.9) h)
|
|
252
261
|
);
|
|
253
|
-
--
|
|
254
|
-
color-mix(in oklab, var(--cogenta-color-accent)
|
|
255
|
-
oklch(from var(--cogenta-color-accent) 0.
|
|
262
|
+
--cd-accent-hover: light-dark(
|
|
263
|
+
color-mix(in oklab, var(--cogenta-color-accent) 80%, var(--cogenta-color-fg)),
|
|
264
|
+
oklch(from var(--cogenta-color-accent) 0.87 calc(c * 0.7) h)
|
|
256
265
|
);
|
|
257
|
-
--
|
|
258
|
-
|
|
259
|
-
oklch(from var(--cogenta-color-accent) 0.
|
|
260
|
-
);
|
|
261
|
-
--cg-accent-soft-fg: light-dark(
|
|
262
|
-
color-mix(in oklab, var(--cogenta-color-accent) 70%, var(--cogenta-color-fg)),
|
|
263
|
-
oklch(from var(--cogenta-color-accent) 0.87 calc(c * 0.4) h)
|
|
266
|
+
--cd-link: light-dark(
|
|
267
|
+
var(--cogenta-color-accent),
|
|
268
|
+
oklch(from var(--cogenta-color-accent) 0.8 calc(c * 0.85) h)
|
|
264
269
|
);
|
|
265
270
|
|
|
266
|
-
--
|
|
271
|
+
--cd-line: light-dark(
|
|
267
272
|
var(--cogenta-color-border),
|
|
268
|
-
oklch(from var(--cogenta-color-
|
|
273
|
+
oklch(from var(--cogenta-color-fg) 0.3 calc(c * 0.9) h)
|
|
269
274
|
);
|
|
270
|
-
--
|
|
271
|
-
color-mix(in oklab, var(--cogenta-color-border)
|
|
272
|
-
oklch(from var(--cogenta-color-
|
|
275
|
+
--cd-line-strong: light-dark(
|
|
276
|
+
color-mix(in oklab, var(--cogenta-color-border) 58%, var(--cogenta-color-fg)),
|
|
277
|
+
oklch(from var(--cogenta-color-fg) 0.44 calc(c * 0.9) h)
|
|
273
278
|
);
|
|
274
|
-
--
|
|
275
|
-
|
|
276
|
-
oklch(from var(--cogenta-color-
|
|
279
|
+
--cd-line-ink: light-dark(
|
|
280
|
+
var(--cogenta-color-fg),
|
|
281
|
+
oklch(from var(--cogenta-color-bg) 0.925 c h)
|
|
277
282
|
);
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
283
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
:where(:root) {
|
|
287
|
-
--cg-ring: inset 0 0 0 1px var(--cg-line);
|
|
288
|
-
--cg-ring-accent: inset 0 0 0 1px var(--cg-accent);
|
|
289
|
-
--cg-ring-strong: inset 0 0 0 1px var(--cg-line-strong);
|
|
290
|
-
|
|
291
|
-
--cg-elevation-0: none;
|
|
292
|
-
--cg-elevation-1: var(--cg-ring);
|
|
293
|
-
--cg-elevation-2: var(--cogenta-shadow-sm), var(--cg-ring);
|
|
294
|
-
--cg-elevation-3: var(--cogenta-shadow-md), var(--cg-ring);
|
|
284
|
+
--cd-footer: light-dark(
|
|
285
|
+
color-mix(in oklab, var(--cogenta-color-muted) 55%, var(--cogenta-color-bg)),
|
|
286
|
+
oklch(from var(--cogenta-color-fg) 0.155 calc(c * 0.9) h)
|
|
287
|
+
);
|
|
288
|
+
}
|
|
295
289
|
}
|
|
296
290
|
|
|
291
|
+
/* A light figure on the dark ground is dimmed a little, so a white diagram
|
|
292
|
+
does not glare. A brightness step, never a blur. */
|
|
297
293
|
@media (prefers-color-scheme: dark) {
|
|
298
294
|
:where(:root:not([data-theme="light"])) {
|
|
299
|
-
--
|
|
300
|
-
--cg-elevation-3: var(--cg-ring-strong), var(--cogenta-shadow-md);
|
|
295
|
+
--cd-image-brightness: 0.88;
|
|
301
296
|
}
|
|
302
297
|
}
|
|
303
298
|
|
|
304
299
|
:where(:root[data-theme="dark"]) {
|
|
305
|
-
--
|
|
306
|
-
--cg-elevation-3: var(--cg-ring-strong), var(--cogenta-shadow-md);
|
|
300
|
+
--cd-image-brightness: 0.88;
|
|
307
301
|
}
|