@cogenta/theme-magazine 1.1.3 → 1.3.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 +3 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/render/article.d.ts +32 -0
- package/dist/src/render/article.d.ts.map +1 -0
- package/dist/src/render/article.js +137 -0
- package/dist/src/render/article.js.map +1 -0
- package/dist/src/render/blocks/accordion.d.ts.map +1 -1
- package/dist/src/render/blocks/accordion.js +9 -13
- package/dist/src/render/blocks/accordion.js.map +1 -1
- package/dist/src/render/blocks/collection-list.d.ts.map +1 -1
- package/dist/src/render/blocks/collection-list.js +91 -118
- package/dist/src/render/blocks/collection-list.js.map +1 -1
- package/dist/src/render/blocks/cta.d.ts +4 -4
- package/dist/src/render/blocks/cta.d.ts.map +1 -1
- package/dist/src/render/blocks/cta.js +7 -9
- 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 +17 -20
- package/dist/src/render/blocks/embed.js.map +1 -1
- package/dist/src/render/blocks/faq.d.ts.map +1 -1
- package/dist/src/render/blocks/faq.js +12 -11
- 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 +13 -20
- package/dist/src/render/blocks/feature-grid.js.map +1 -1
- package/dist/src/render/blocks/gallery.d.ts +6 -6
- package/dist/src/render/blocks/gallery.d.ts.map +1 -1
- package/dist/src/render/blocks/gallery.js +15 -13
- package/dist/src/render/blocks/gallery.js.map +1 -1
- package/dist/src/render/blocks/hero.d.ts +6 -5
- package/dist/src/render/blocks/hero.d.ts.map +1 -1
- package/dist/src/render/blocks/hero.js +15 -14
- package/dist/src/render/blocks/hero.js.map +1 -1
- package/dist/src/render/blocks/logo-strip.d.ts.map +1 -1
- package/dist/src/render/blocks/logo-strip.js +8 -11
- package/dist/src/render/blocks/logo-strip.js.map +1 -1
- package/dist/src/render/blocks/logos.d.ts.map +1 -1
- package/dist/src/render/blocks/logos.js +16 -16
- package/dist/src/render/blocks/logos.js.map +1 -1
- package/dist/src/render/blocks/media-figure.d.ts +8 -8
- package/dist/src/render/blocks/media-figure.d.ts.map +1 -1
- package/dist/src/render/blocks/media-figure.js +23 -19
- 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 +19 -22
- package/dist/src/render/blocks/pricing-table.js.map +1 -1
- package/dist/src/render/blocks/prose.d.ts +6 -10
- package/dist/src/render/blocks/prose.d.ts.map +1 -1
- package/dist/src/render/blocks/prose.js +8 -11
- package/dist/src/render/blocks/prose.js.map +1 -1
- package/dist/src/render/blocks/quote.d.ts +6 -9
- package/dist/src/render/blocks/quote.d.ts.map +1 -1
- package/dist/src/render/blocks/quote.js +11 -13
- package/dist/src/render/blocks/quote.js.map +1 -1
- package/dist/src/render/blocks/stat-counter.d.ts.map +1 -1
- package/dist/src/render/blocks/stat-counter.js +9 -10
- package/dist/src/render/blocks/stat-counter.js.map +1 -1
- package/dist/src/render/blocks/stats.d.ts.map +1 -1
- package/dist/src/render/blocks/stats.js +9 -12
- package/dist/src/render/blocks/stats.js.map +1 -1
- package/dist/src/render/blocks/testimonial.d.ts +4 -13
- package/dist/src/render/blocks/testimonial.d.ts.map +1 -1
- package/dist/src/render/blocks/testimonial.js +7 -15
- package/dist/src/render/blocks/testimonial.js.map +1 -1
- package/dist/src/render/chrome.d.ts.map +1 -1
- package/dist/src/render/chrome.js +109 -97
- package/dist/src/render/chrome.js.map +1 -1
- package/dist/src/render/layout.d.ts +28 -0
- package/dist/src/render/layout.d.ts.map +1 -0
- package/dist/src/render/layout.js +72 -0
- package/dist/src/render/layout.js.map +1 -0
- package/dist/src/render/render-block.d.ts +15 -13
- package/dist/src/render/render-block.d.ts.map +1 -1
- package/dist/src/render/render-block.js +53 -29
- package/dist/src/render/render-block.js.map +1 -1
- package/dist/src/render/story.d.ts +41 -0
- package/dist/src/render/story.d.ts.map +1 -0
- package/dist/src/render/story.js +65 -0
- package/dist/src/render/story.js.map +1 -0
- package/dist/src/render/term-archive.d.ts +0 -10
- package/dist/src/render/term-archive.d.ts.map +1 -1
- package/dist/src/render/term-archive.js +42 -19
- package/dist/src/render/term-archive.js.map +1 -1
- package/dist/src/render/widget-areas.d.ts +12 -0
- package/dist/src/render/widget-areas.d.ts.map +1 -0
- package/dist/src/render/widget-areas.js +19 -0
- package/dist/src/render/widget-areas.js.map +1 -0
- package/dist/theme.config.js +2 -2
- package/dist/theme.config.js.map +1 -1
- package/package.json +5 -5
- package/src/index.ts +3 -0
- package/src/render/article.ts +239 -0
- package/src/render/blocks/accordion.ts +23 -30
- package/src/render/blocks/collection-list.ts +161 -225
- package/src/render/blocks/cta.ts +19 -13
- package/src/render/blocks/embed.ts +40 -36
- package/src/render/blocks/faq.ts +31 -36
- package/src/render/blocks/feature-grid.ts +26 -36
- package/src/render/blocks/gallery.ts +24 -18
- package/src/render/blocks/hero.ts +32 -32
- package/src/render/blocks/logo-strip.ts +17 -17
- package/src/render/blocks/logos.ts +23 -31
- package/src/render/blocks/media-figure.ts +36 -20
- package/src/render/blocks/pricing-table.ts +29 -34
- package/src/render/blocks/prose.ts +13 -13
- package/src/render/blocks/quote.ts +24 -24
- package/src/render/blocks/stat-counter.ts +16 -24
- package/src/render/blocks/stats.ts +14 -24
- package/src/render/blocks/testimonial.ts +12 -17
- package/src/render/chrome.ts +123 -104
- package/src/render/layout.ts +105 -0
- package/src/render/render-block.ts +61 -33
- package/src/render/story.ts +139 -0
- package/src/render/term-archive.ts +111 -58
- package/src/render/widget-areas.ts +22 -0
- package/src/styles/archive.css +114 -17
- package/src/styles/article.css +237 -0
- package/src/styles/base.css +848 -591
- package/src/styles/blocks.css +903 -921
- package/src/styles/stories.css +593 -0
- package/src/styles/theme.css +28 -9
- package/src/styles/tokens.css +200 -185
- package/src/styles/widgets.css +614 -0
- package/tokens.json +18 -18
package/src/styles/tokens.css
CHANGED
|
@@ -1,39 +1,32 @@
|
|
|
1
1
|
/*
|
|
2
|
-
*
|
|
2
|
+
* `@cogenta/theme-magazine`'s design system.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* every
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* step.
|
|
4
|
+
* The register is a serious daily of quality: white newsprint, black ink, one
|
|
5
|
+
* editorial red kept for section kickers and a few rules, and structure drawn
|
|
6
|
+
* with rules and space, never with boxes or shadows. Fraunces sets the
|
|
7
|
+
* nameplate and every headline at the optical size drawn for its point size,
|
|
8
|
+
* Source Serif 4 sets the text a reader reads, and Libre Franklin sets what a
|
|
9
|
+
* reader scans: kickers, bylines, dates, navigation, captions.
|
|
11
10
|
*
|
|
12
|
-
*
|
|
11
|
+
* Contract D fixes a closed skin token set, so nothing here adds a token:
|
|
12
|
+
* every value is derived from a `--cogenta-*` property (`calc`, `color-mix`,
|
|
13
|
+
* relative colour syntax). The skin names the display face (`serif`) and the
|
|
14
|
+
* interface face (`sans`); the text face is this theme's own choice, set in
|
|
15
|
+
* front of the skin's serif stack so a skin that changes the display face
|
|
16
|
+
* never leaves the reading column without a text face.
|
|
13
17
|
*
|
|
14
|
-
*
|
|
15
|
-
* Every colour is either a skin token or a function *of* a skin token.
|
|
16
|
-
* `test/isolation.test.ts` enforces this on the source.
|
|
17
|
-
* 2. **No second scale.** The type steps come from `--cogenta-font-size-*`
|
|
18
|
-
* and the spacing multiplier from `--cogenta-space-scale`, both emitted
|
|
19
|
-
* by `renderSkin` from the same tokens the validator checked.
|
|
18
|
+
* Two rules hold in every stylesheet of this theme:
|
|
20
19
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* Google Fonts (or a site that strips the `@import` for a stricter CSP)
|
|
26
|
-
* still gets Georgia/system-ui, never an unstyled page.
|
|
20
|
+
* 1. No colour literal. Every colour is a skin token or a function of one.
|
|
21
|
+
* 2. No second scale. Type steps come from `--cogenta-font-size-*`; the
|
|
22
|
+
* display steps above `3xl` continue the same ratio, and fluid sizes only
|
|
23
|
+
* interpolate between steps of that one ladder.
|
|
27
24
|
*/
|
|
28
25
|
|
|
29
|
-
@import url("https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,500;0,9..144,600;0,9..144,700;0,9..144,900;1,9..144,500;1,9..144,600&family=Public+Sans:wght@400;500;600;700&display=swap");
|
|
30
|
-
|
|
31
26
|
:where(:root) {
|
|
32
27
|
color-scheme: light dark;
|
|
33
28
|
}
|
|
34
29
|
|
|
35
|
-
/* An explicit choice wins over the OS preference. No script ships with this
|
|
36
|
-
theme to set it; the attribute is the hook a site (or the admin) can flip. */
|
|
37
30
|
:where(:root[data-theme="dark"]) {
|
|
38
31
|
color-scheme: dark;
|
|
39
32
|
}
|
|
@@ -43,7 +36,7 @@
|
|
|
43
36
|
}
|
|
44
37
|
|
|
45
38
|
/* --------------------------------------------------------------------------
|
|
46
|
-
Space
|
|
39
|
+
Space: one unit, one section rhythm, one twelve-column grid.
|
|
47
40
|
-------------------------------------------------------------------------- */
|
|
48
41
|
|
|
49
42
|
:where(:root) {
|
|
@@ -63,17 +56,30 @@
|
|
|
63
56
|
--cg-s20: calc(var(--cg-unit) * 20);
|
|
64
57
|
--cg-s24: calc(var(--cg-unit) * 24);
|
|
65
58
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
--cg-
|
|
70
|
-
|
|
71
|
-
|
|
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, whatever
|
|
61
|
+
their order. A newspaper is denser than a book: the step is short. */
|
|
62
|
+
--cg-section: clamp(var(--cg-s10), 5.5vw, var(--cg-s16));
|
|
63
|
+
|
|
64
|
+
/* Twelve columns with constant gutters. A column rule sits in the middle
|
|
65
|
+
of a gutter, never against the text. */
|
|
66
|
+
--cg-columns: 12;
|
|
67
|
+
--cg-gutter: clamp(var(--cg-s4), 3.2vw, var(--cg-s10));
|
|
68
|
+
--cg-col-gap: clamp(var(--cg-s5), 2.2vw, var(--cg-s8));
|
|
69
|
+
--cg-page: 80rem;
|
|
72
70
|
|
|
73
71
|
--cg-measure: 66ch;
|
|
74
|
-
--cg-measure-
|
|
75
|
-
|
|
76
|
-
|
|
72
|
+
--cg-measure-short: 48ch;
|
|
73
|
+
|
|
74
|
+
/* Where text sits on the twelve columns of a wide screen. The reading
|
|
75
|
+
column is centred (columns 4 to 9): a page that reads down one column
|
|
76
|
+
should not leave a third of the screen empty on one side only. A
|
|
77
|
+
headline reaches one column further right, a pull quote hangs one column
|
|
78
|
+
further left, and a wide figure takes columns 2 to 11. */
|
|
79
|
+
--cg-col-reading: 4 / span 6;
|
|
80
|
+
--cg-col-headline: 4 / span 7;
|
|
81
|
+
--cg-col-hang: 3 / span 6;
|
|
82
|
+
--cg-col-wide: 2 / span 10;
|
|
77
83
|
}
|
|
78
84
|
|
|
79
85
|
:where([data-density="compact"]) {
|
|
@@ -89,220 +95,229 @@
|
|
|
89
95
|
}
|
|
90
96
|
|
|
91
97
|
/* --------------------------------------------------------------------------
|
|
92
|
-
Type
|
|
93
|
-
carry. Two families: a characterful display serif for headlines and pull
|
|
94
|
-
quotes, a quiet sans for running text, bylines and dates — the split the
|
|
95
|
-
masthead itself uses on the front page.
|
|
98
|
+
Type: Fraunces to announce, Source Serif 4 to read, Libre Franklin to scan.
|
|
96
99
|
-------------------------------------------------------------------------- */
|
|
97
100
|
|
|
98
101
|
:where(:root) {
|
|
99
|
-
--cg-
|
|
100
|
-
--cg-text
|
|
101
|
-
--cg-
|
|
102
|
-
--cg-
|
|
103
|
-
|
|
104
|
-
--cg-text-
|
|
105
|
-
--cg-text-
|
|
106
|
-
|
|
107
|
-
--cg-
|
|
108
|
-
--cg-
|
|
109
|
-
--cg-
|
|
110
|
-
--cg-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
--cg-
|
|
115
|
-
--cg-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
102
|
+
--cg-font-display: var(--cogenta-font-serif);
|
|
103
|
+
--cg-font-text: "Source Serif 4", var(--cogenta-font-serif);
|
|
104
|
+
--cg-font-ui: var(--cogenta-font-sans);
|
|
105
|
+
--cg-font-code: var(--cogenta-font-mono);
|
|
106
|
+
|
|
107
|
+
--cg-text-xs: var(--cogenta-font-size-xs, 0.68rem);
|
|
108
|
+
--cg-text-sm: var(--cogenta-font-size-sm, 0.85rem);
|
|
109
|
+
--cg-text-md: var(--cogenta-font-size-md, var(--cogenta-font-base-size, 1.0625rem));
|
|
110
|
+
--cg-text-lg: var(--cogenta-font-size-lg, 1.33rem);
|
|
111
|
+
--cg-text-xl: var(--cogenta-font-size-xl, 1.66rem);
|
|
112
|
+
--cg-text-2xl: var(--cogenta-font-size-2xl, 2.08rem);
|
|
113
|
+
--cg-text-3xl: var(--cogenta-font-size-3xl, 2.59rem);
|
|
114
|
+
/* The same ladder, continued: each step is the previous one times the
|
|
115
|
+
skin's own ratio. */
|
|
116
|
+
--cg-text-4xl: calc(var(--cg-text-3xl) * var(--cogenta-font-scale, 1.25));
|
|
117
|
+
--cg-text-5xl: calc(var(--cg-text-4xl) * var(--cogenta-font-scale, 1.25));
|
|
118
|
+
--cg-text-6xl: calc(var(--cg-text-5xl) * var(--cogenta-font-scale, 1.25));
|
|
119
|
+
|
|
120
|
+
/* Labels sit between `xs` and `sm`: capitals at `sm` shout, at `xs` they
|
|
121
|
+
fade. Interface text sits between `sm` and `md`. */
|
|
122
|
+
--cg-text-label: calc((var(--cg-text-xs) + var(--cg-text-sm)) / 2);
|
|
123
|
+
--cg-text-ui: calc((var(--cg-text-sm) + var(--cg-text-md)) / 2);
|
|
124
|
+
/* The reading size: `md` on a phone, a little above it on a desk. */
|
|
125
|
+
--cg-text-reading: clamp(
|
|
126
|
+
var(--cg-text-md),
|
|
127
|
+
calc(0.94rem + 0.28vw),
|
|
128
|
+
calc((var(--cg-text-md) * 3 + var(--cg-text-lg)) / 4)
|
|
129
|
+
);
|
|
119
130
|
|
|
131
|
+
--cg-size-nameplate: clamp(var(--cg-text-3xl), calc(1rem + 5.4vw), var(--cg-text-6xl));
|
|
132
|
+
--cg-size-headline: clamp(var(--cg-text-2xl), calc(0.9rem + 3.6vw), var(--cg-text-5xl));
|
|
133
|
+
--cg-size-lead: clamp(var(--cg-text-xl), calc(0.9rem + 2.1vw), var(--cg-text-4xl));
|
|
134
|
+
--cg-size-rail: clamp(var(--cg-text-xl), calc(0.95rem + 1.1vw), var(--cg-text-2xl));
|
|
135
|
+
--cg-size-title: clamp(var(--cg-text-2xl), calc(1rem + 2.4vw), var(--cg-text-4xl));
|
|
136
|
+
--cg-size-heading: clamp(var(--cg-text-xl), calc(0.95rem + 1.2vw), var(--cg-text-2xl));
|
|
137
|
+
--cg-size-brief: clamp(
|
|
138
|
+
var(--cg-text-lg),
|
|
139
|
+
calc(0.95rem + 0.5vw),
|
|
140
|
+
calc((var(--cg-text-lg) + var(--cg-text-xl)) / 2)
|
|
141
|
+
);
|
|
142
|
+
--cg-size-story: calc((var(--cg-text-md) + var(--cg-text-lg)) / 2);
|
|
143
|
+
--cg-size-standfirst: clamp(var(--cg-text-lg), calc(1rem + 0.55vw), var(--cg-text-xl));
|
|
144
|
+
--cg-size-quote: clamp(var(--cg-text-xl), calc(1rem + 1.2vw), var(--cg-text-2xl));
|
|
145
|
+
--cg-size-figure: clamp(var(--cg-text-2xl), calc(1rem + 2.2vw), var(--cg-text-4xl));
|
|
146
|
+
|
|
147
|
+
--cg-leading-display: 1.02;
|
|
148
|
+
--cg-leading-heading: 1.1;
|
|
149
|
+
--cg-leading-snug: 1.3;
|
|
150
|
+
--cg-leading-text: 1.6;
|
|
151
|
+
--cg-leading-ui: 1.4;
|
|
152
|
+
|
|
153
|
+
--cg-tracking-display: -0.012em;
|
|
154
|
+
--cg-tracking-heading: -0.006em;
|
|
155
|
+
--cg-tracking-caps: 0.1em;
|
|
156
|
+
--cg-tracking-nav: 0.14em;
|
|
157
|
+
|
|
158
|
+
--cg-weight-light: 300;
|
|
120
159
|
--cg-weight-regular: 400;
|
|
121
160
|
--cg-weight-medium: 500;
|
|
122
161
|
--cg-weight-semibold: 600;
|
|
123
162
|
--cg-weight-bold: 700;
|
|
124
|
-
--cg-weight-
|
|
163
|
+
--cg-weight-heavy: 800;
|
|
125
164
|
}
|
|
126
165
|
|
|
127
166
|
/* --------------------------------------------------------------------------
|
|
128
|
-
|
|
129
|
-
and this theme's own `tokens.json` already ships tight radii, so nothing
|
|
130
|
-
here inflates them into the pill-shaped, card-heavy vocabulary a generic
|
|
131
|
-
admin dashboard uses.
|
|
167
|
+
Shape and motion: square corners, motion is a colour change.
|
|
132
168
|
-------------------------------------------------------------------------- */
|
|
133
169
|
|
|
134
170
|
:where(:root) {
|
|
135
|
-
--cg-radius
|
|
136
|
-
--cg-radius-
|
|
137
|
-
--cg-radius-lg: var(--cogenta-radius-lg);
|
|
138
|
-
}
|
|
171
|
+
--cg-radius: var(--cogenta-radius-sm);
|
|
172
|
+
--cg-radius-control: var(--cogenta-radius-md);
|
|
139
173
|
|
|
140
|
-
|
|
141
|
-
Motion
|
|
142
|
-
-------------------------------------------------------------------------- */
|
|
143
|
-
|
|
144
|
-
:where(:root) {
|
|
145
|
-
--cg-duration-fast: calc(var(--cogenta-motion-duration) * 0.6);
|
|
146
|
-
--cg-duration: var(--cogenta-motion-duration);
|
|
147
|
-
--cg-duration-slow: calc(var(--cogenta-motion-duration) * 2.4);
|
|
174
|
+
--cg-duration: min(var(--cogenta-motion-duration), 150ms);
|
|
148
175
|
--cg-ease: var(--cogenta-motion-easing);
|
|
176
|
+
|
|
177
|
+
--cg-rule: 1px;
|
|
178
|
+
--cg-rule-strong: 2px;
|
|
179
|
+
--cg-rule-heavy: 4px;
|
|
149
180
|
}
|
|
150
181
|
|
|
151
182
|
/* --------------------------------------------------------------------------
|
|
152
|
-
Colour
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
The block
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
sheet of paper and a real drop shadow does the separating.
|
|
173
|
-
2. *The accent is lifted*, from an oklch lightness around 0.49 in daylight
|
|
174
|
-
to about 0.72 at night — a brick red that reads correctly on cream
|
|
175
|
-
goes muddy on near-black ink, so night mode pushes it toward a warm
|
|
176
|
-
ember rather than keeping the daylight value.
|
|
177
|
-
3. *Its foreground flips to ink*, because a light ember needs a dark label
|
|
178
|
-
the way the daylight accent needed a cream one — the clearest single
|
|
179
|
-
break from a mechanical `bg`/`fg` swap.
|
|
180
|
-
4. *Text stays off pure white* — a warm, slightly toned paper-white, not
|
|
181
|
-
`#fff`, which halates against a near-black canvas.
|
|
182
|
-
5. *Rules become light overlays* — a rule one step **up** from the
|
|
183
|
-
surface it sits on, never a step down, or it disappears.
|
|
183
|
+
Colour: one palette per scheme, both derived from the same seven tokens.
|
|
184
|
+
--------------------------------------------------------------------------
|
|
185
|
+
|
|
186
|
+
The first block declares the light palette plainly; the scheme-aware
|
|
187
|
+
values follow behind a feature query, so a browser that cannot parse
|
|
188
|
+
`light-dark()` still gets a complete light palette.
|
|
189
|
+
|
|
190
|
+
The dark palette is designed, not inverted:
|
|
191
|
+
|
|
192
|
+
1. The ground is ink: the skin's own `fg` at a low lightness, the colour
|
|
193
|
+
of a page of newsprint photographed at night. Surfaces step up in
|
|
194
|
+
lightness (sunken, canvas, raised).
|
|
195
|
+
2. Text is the paper lowered to an off-white, so a long article on ink
|
|
196
|
+
stays calm, and the rules that divide the page step down with it.
|
|
197
|
+
3. The red is lifted and desaturated until it reads as red on ink rather
|
|
198
|
+
than as a glow, and its foreground flips to ink.
|
|
199
|
+
4. Hairlines are a step up in lightness from the surface they sit on.
|
|
200
|
+
|
|
201
|
+
Every ratio is computed from this file by `test/design-system.test.ts`,
|
|
202
|
+
in both schemes.
|
|
184
203
|
-------------------------------------------------------------------------- */
|
|
185
204
|
|
|
186
205
|
:where(:root) {
|
|
187
|
-
--cg-
|
|
188
|
-
--cg-
|
|
189
|
-
--cg-
|
|
190
|
-
--cg-
|
|
206
|
+
--cg-canvas: var(--cogenta-color-bg);
|
|
207
|
+
--cg-surface: var(--cogenta-color-bg);
|
|
208
|
+
--cg-surface-raised: var(--cogenta-color-bg);
|
|
209
|
+
--cg-surface-sunken: var(--cogenta-color-muted);
|
|
191
210
|
|
|
192
211
|
--cg-ink: var(--cogenta-color-fg);
|
|
193
|
-
--cg-ink-
|
|
194
|
-
--cg-ink-
|
|
212
|
+
--cg-ink-muted: var(--cogenta-color-muted-fg);
|
|
213
|
+
--cg-ink-subtle: color-mix(in oklab, var(--cogenta-color-muted-fg) 82%, var(--cogenta-color-bg));
|
|
195
214
|
|
|
196
215
|
--cg-accent: var(--cogenta-color-accent);
|
|
197
|
-
--cg-accent-
|
|
198
|
-
--cg-accent-hover: color-mix(in oklab, var(--cogenta-color-accent)
|
|
199
|
-
--cg-accent-
|
|
200
|
-
--cg-accent-tint-ink: color-mix(
|
|
201
|
-
in oklab,
|
|
202
|
-
var(--cogenta-color-accent) 70%,
|
|
203
|
-
var(--cogenta-color-fg)
|
|
204
|
-
);
|
|
216
|
+
--cg-accent-fg: var(--cogenta-color-accent-fg);
|
|
217
|
+
--cg-accent-hover: color-mix(in oklab, var(--cogenta-color-accent) 68%, var(--cogenta-color-fg));
|
|
218
|
+
--cg-accent-line: color-mix(in oklab, var(--cogenta-color-accent) 42%, var(--cogenta-color-bg));
|
|
205
219
|
|
|
206
|
-
--cg-
|
|
207
|
-
--cg-
|
|
208
|
-
--cg-
|
|
220
|
+
--cg-line: var(--cogenta-color-border);
|
|
221
|
+
--cg-line-soft: color-mix(in oklab, var(--cogenta-color-border) 55%, var(--cogenta-color-bg));
|
|
222
|
+
--cg-line-strong: color-mix(in oklab, var(--cogenta-color-border) 38%, var(--cogenta-color-fg));
|
|
223
|
+
--cg-line-ink: var(--cogenta-color-fg);
|
|
209
224
|
|
|
210
|
-
--cg-
|
|
225
|
+
--cg-action: var(--cogenta-color-fg);
|
|
226
|
+
--cg-action-fg: var(--cogenta-color-bg);
|
|
227
|
+
--cg-action-hover: var(--cogenta-color-accent);
|
|
228
|
+
--cg-action-hover-fg: var(--cogenta-color-accent-fg);
|
|
229
|
+
|
|
230
|
+
--cg-image-brightness: 1;
|
|
211
231
|
}
|
|
212
232
|
|
|
213
233
|
@supports (color: light-dark(currentColor, currentColor)) and
|
|
214
234
|
(color: oklch(from currentColor l c h)) {
|
|
215
235
|
:where(:root) {
|
|
216
|
-
--cg-
|
|
236
|
+
--cg-canvas: light-dark(var(--cogenta-color-bg), oklch(from var(--cogenta-color-fg) 0.185 c h));
|
|
237
|
+
--cg-surface: light-dark(
|
|
217
238
|
var(--cogenta-color-bg),
|
|
218
|
-
oklch(from var(--cogenta-color-fg) 0.
|
|
239
|
+
oklch(from var(--cogenta-color-fg) 0.185 c h)
|
|
219
240
|
);
|
|
220
|
-
--cg-
|
|
241
|
+
--cg-surface-raised: light-dark(
|
|
221
242
|
var(--cogenta-color-bg),
|
|
222
|
-
oklch(from var(--cogenta-color-fg) 0.
|
|
243
|
+
oklch(from var(--cogenta-color-fg) 0.235 c h)
|
|
223
244
|
);
|
|
224
|
-
--cg-
|
|
245
|
+
--cg-surface-sunken: light-dark(
|
|
225
246
|
var(--cogenta-color-muted),
|
|
226
|
-
oklch(from var(--cogenta-color-fg) 0.
|
|
227
|
-
);
|
|
228
|
-
--cg-paper-tint: light-dark(
|
|
229
|
-
color-mix(in oklab, var(--cogenta-color-accent) 9%, var(--cogenta-color-bg)),
|
|
230
|
-
oklch(from var(--cogenta-color-accent) 0.26 calc(c * 0.45) h)
|
|
247
|
+
oklch(from var(--cogenta-color-fg) 0.15 c h)
|
|
231
248
|
);
|
|
232
249
|
|
|
233
|
-
--cg-ink: light-dark(
|
|
234
|
-
|
|
235
|
-
oklch(from var(--cogenta-color-accent) 0.92 0.014 h)
|
|
236
|
-
);
|
|
237
|
-
--cg-ink-soft: light-dark(
|
|
250
|
+
--cg-ink: light-dark(var(--cogenta-color-fg), oklch(from var(--cogenta-color-muted) 0.93 c h));
|
|
251
|
+
--cg-ink-muted: light-dark(
|
|
238
252
|
var(--cogenta-color-muted-fg),
|
|
239
|
-
oklch(from var(--cogenta-color-
|
|
253
|
+
oklch(from var(--cogenta-color-muted) 0.8 c h)
|
|
240
254
|
);
|
|
241
|
-
--cg-ink-
|
|
242
|
-
color-mix(in oklab, var(--cogenta-color-muted-fg)
|
|
243
|
-
oklch(from var(--cogenta-color-
|
|
255
|
+
--cg-ink-subtle: light-dark(
|
|
256
|
+
color-mix(in oklab, var(--cogenta-color-muted-fg) 82%, var(--cogenta-color-bg)),
|
|
257
|
+
oklch(from var(--cogenta-color-muted) 0.71 c h)
|
|
244
258
|
);
|
|
245
259
|
|
|
246
260
|
--cg-accent: light-dark(
|
|
247
261
|
var(--cogenta-color-accent),
|
|
248
|
-
oklch(from var(--cogenta-color-accent) 0.
|
|
262
|
+
oklch(from var(--cogenta-color-accent) 0.66 calc(c * 0.92) h)
|
|
249
263
|
);
|
|
250
|
-
--cg-accent-
|
|
264
|
+
--cg-accent-fg: light-dark(
|
|
251
265
|
var(--cogenta-color-accent-fg),
|
|
252
|
-
oklch(from var(--cogenta-color-accent) 0.
|
|
266
|
+
oklch(from var(--cogenta-color-accent) 0.16 calc(c * 0.3) h)
|
|
253
267
|
);
|
|
254
268
|
--cg-accent-hover: light-dark(
|
|
255
|
-
color-mix(in oklab, var(--cogenta-color-accent)
|
|
256
|
-
oklch(from var(--cogenta-color-accent) 0.8 calc(c * 0.
|
|
269
|
+
color-mix(in oklab, var(--cogenta-color-accent) 68%, var(--cogenta-color-fg)),
|
|
270
|
+
oklch(from var(--cogenta-color-accent) 0.8 calc(c * 0.6) h)
|
|
257
271
|
);
|
|
258
|
-
--cg-accent-
|
|
259
|
-
color-mix(in oklab, var(--cogenta-color-accent)
|
|
260
|
-
oklch(from var(--cogenta-color-accent) 0.
|
|
261
|
-
);
|
|
262
|
-
--cg-accent-tint-ink: light-dark(
|
|
263
|
-
color-mix(in oklab, var(--cogenta-color-accent) 70%, var(--cogenta-color-fg)),
|
|
264
|
-
oklch(from var(--cogenta-color-accent) 0.88 calc(c * 0.4) h)
|
|
272
|
+
--cg-accent-line: light-dark(
|
|
273
|
+
color-mix(in oklab, var(--cogenta-color-accent) 42%, var(--cogenta-color-bg)),
|
|
274
|
+
oklch(from var(--cogenta-color-accent) 0.46 calc(c * 0.6) h)
|
|
265
275
|
);
|
|
266
276
|
|
|
267
|
-
--cg-
|
|
277
|
+
--cg-line: light-dark(
|
|
268
278
|
var(--cogenta-color-border),
|
|
269
|
-
oklch(from var(--cogenta-color-
|
|
279
|
+
oklch(from var(--cogenta-color-fg) 0.32 c h)
|
|
270
280
|
);
|
|
271
|
-
--cg-
|
|
272
|
-
color-mix(in oklab, var(--cogenta-color-border)
|
|
273
|
-
oklch(from var(--cogenta-color-
|
|
281
|
+
--cg-line-soft: light-dark(
|
|
282
|
+
color-mix(in oklab, var(--cogenta-color-border) 55%, var(--cogenta-color-bg)),
|
|
283
|
+
oklch(from var(--cogenta-color-fg) 0.26 c h)
|
|
274
284
|
);
|
|
275
|
-
--cg-
|
|
276
|
-
color-mix(in oklab, var(--cogenta-color-border)
|
|
277
|
-
oklch(from var(--cogenta-color-
|
|
285
|
+
--cg-line-strong: light-dark(
|
|
286
|
+
color-mix(in oklab, var(--cogenta-color-border) 38%, var(--cogenta-color-fg)),
|
|
287
|
+
oklch(from var(--cogenta-color-fg) 0.54 c h)
|
|
288
|
+
);
|
|
289
|
+
--cg-line-ink: light-dark(
|
|
290
|
+
var(--cogenta-color-fg),
|
|
291
|
+
oklch(from var(--cogenta-color-muted) 0.84 c h)
|
|
278
292
|
);
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
/* --------------------------------------------------------------------------
|
|
283
|
-
Elevation — a real drop shadow in daylight, a hairline rule at night
|
|
284
|
-
-------------------------------------------------------------------------- */
|
|
285
|
-
|
|
286
|
-
:where(:root) {
|
|
287
|
-
--cg-ring: inset 0 0 0 1px var(--cg-rule);
|
|
288
|
-
--cg-ring-accent: inset 0 0 0 1px var(--cg-accent);
|
|
289
293
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
+
--cg-action: light-dark(
|
|
295
|
+
var(--cogenta-color-fg),
|
|
296
|
+
oklch(from var(--cogenta-color-muted) 0.93 c h)
|
|
297
|
+
);
|
|
298
|
+
--cg-action-fg: light-dark(
|
|
299
|
+
var(--cogenta-color-bg),
|
|
300
|
+
oklch(from var(--cogenta-color-fg) 0.185 c h)
|
|
301
|
+
);
|
|
302
|
+
--cg-action-hover: light-dark(
|
|
303
|
+
var(--cogenta-color-accent),
|
|
304
|
+
oklch(from var(--cogenta-color-accent) 0.66 calc(c * 0.92) h)
|
|
305
|
+
);
|
|
306
|
+
--cg-action-hover-fg: light-dark(
|
|
307
|
+
var(--cogenta-color-accent-fg),
|
|
308
|
+
oklch(from var(--cogenta-color-accent) 0.16 calc(c * 0.3) h)
|
|
309
|
+
);
|
|
310
|
+
}
|
|
294
311
|
}
|
|
295
312
|
|
|
313
|
+
/* Photographs are dimmed a little on ink, so a white sky in a picture does
|
|
314
|
+
not glare in a dark room. A brightness step, not a blur. */
|
|
296
315
|
@media (prefers-color-scheme: dark) {
|
|
297
316
|
:where(:root:not([data-theme="light"])) {
|
|
298
|
-
--cg-
|
|
299
|
-
--cg-elevation-2: var(--cg-ring);
|
|
300
|
-
--cg-elevation-3: var(--cg-ring), var(--cogenta-shadow-md);
|
|
317
|
+
--cg-image-brightness: 0.88;
|
|
301
318
|
}
|
|
302
319
|
}
|
|
303
320
|
|
|
304
321
|
:where(:root[data-theme="dark"]) {
|
|
305
|
-
--cg-
|
|
306
|
-
--cg-elevation-2: var(--cg-ring);
|
|
307
|
-
--cg-elevation-3: var(--cg-ring), var(--cogenta-shadow-md);
|
|
322
|
+
--cg-image-brightness: 0.88;
|
|
308
323
|
}
|