@cogenta/theme-canonical 0.1.2 → 0.2.0
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/render/blocks/collection-list.js +1 -1
- package/dist/src/render/blocks/collection-list.js.map +1 -1
- package/dist/src/render/blocks/cta.d.ts.map +1 -1
- package/dist/src/render/blocks/cta.js +3 -1
- package/dist/src/render/blocks/cta.js.map +1 -1
- package/dist/src/render/blocks/faq.d.ts.map +1 -1
- package/dist/src/render/blocks/faq.js +1 -1
- package/dist/src/render/blocks/faq.js.map +1 -1
- package/dist/src/render/blocks/feature-grid.js +1 -1
- package/dist/src/render/blocks/feature-grid.js.map +1 -1
- package/dist/src/render/blocks/hero.d.ts.map +1 -1
- package/dist/src/render/blocks/hero.js +5 -1
- package/dist/src/render/blocks/hero.js.map +1 -1
- package/dist/src/render/blocks/logos.d.ts.map +1 -1
- package/dist/src/render/blocks/logos.js +1 -1
- package/dist/src/render/blocks/logos.js.map +1 -1
- package/dist/src/render/blocks/media-figure.js +1 -1
- package/dist/src/render/blocks/media-figure.js.map +1 -1
- package/dist/src/render/blocks/quote.d.ts.map +1 -1
- package/dist/src/render/blocks/quote.js +4 -2
- package/dist/src/render/blocks/quote.js.map +1 -1
- package/dist/src/render/blocks/stats.d.ts.map +1 -1
- package/dist/src/render/blocks/stats.js +1 -1
- package/dist/src/render/blocks/stats.js.map +1 -1
- package/dist/src/render/render-block.d.ts.map +1 -1
- package/dist/src/render/render-block.js +34 -1
- package/dist/src/render/render-block.js.map +1 -1
- package/package.json +4 -3
- package/src/render/blocks/collection-list.ts +1 -1
- package/src/render/blocks/cta.ts +8 -2
- package/src/render/blocks/faq.ts +5 -1
- package/src/render/blocks/feature-grid.ts +1 -1
- package/src/render/blocks/hero.ts +7 -3
- package/src/render/blocks/logos.ts +5 -1
- package/src/render/blocks/media-figure.ts +1 -1
- package/src/render/blocks/quote.ts +5 -3
- package/src/render/blocks/stats.ts +5 -1
- package/src/render/render-block.ts +34 -1
- package/src/styles/base.css +341 -0
- package/src/styles/blocks.css +890 -0
- package/src/styles/theme.css +20 -601
- package/src/styles/tokens.css +339 -0
package/src/styles/theme.css
CHANGED
|
@@ -1,606 +1,25 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* The canonical theme's stylesheet.
|
|
2
|
+
* The canonical theme's stylesheet — the entry point, and nothing else.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* every value comes from a `--cogenta-<group>-<name>` custom property produced
|
|
6
|
-
* from the skin's tokens. That is what makes changing skin a rewrite of one
|
|
7
|
-
* generated file with no build (L3, "Skins et changement à chaud"). A single
|
|
8
|
-
* hard-coded hex in this file would be a colour no skin can change.
|
|
4
|
+
* Three layers, in the only order that works:
|
|
9
5
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
6
|
+
* tokens.css the design system, derived entirely from the skin's
|
|
7
|
+
* `--cogenta-*` custom properties (contract D)
|
|
8
|
+
* base.css document, accessibility floor, page frame, actions
|
|
9
|
+
* blocks.css the twelve vocabulary blocks
|
|
10
|
+
*
|
|
11
|
+
* Not one colour, font, radius, duration or shadow is written literally in any
|
|
12
|
+
* of the three: every value comes from a `--cogenta-<group>-<name>` property
|
|
13
|
+
* produced from the skin's tokens, or from a `--cg-*` property composed from
|
|
14
|
+
* those. That is what makes changing skin a rewrite of one generated file with
|
|
15
|
+
* no build (L3, "Skins et changement à chaud"). A single hard-coded hex would
|
|
16
|
+
* be a colour no skin can change.
|
|
17
|
+
*
|
|
18
|
+
* `@import` is resolved at build time by Astro, and by `@cogenta/cli`'s own
|
|
19
|
+
* inliner when `cogenta serve` renders without a build. Both flatten these
|
|
20
|
+
* three into one sheet, so no visitor ever pays for three round trips.
|
|
13
21
|
*/
|
|
14
22
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
--cg-s1: calc(var(--cogenta-space-unit) * 1 * var(--cg-density));
|
|
19
|
-
--cg-s2: calc(var(--cogenta-space-unit) * 2 * var(--cg-density));
|
|
20
|
-
--cg-s3: calc(var(--cogenta-space-unit) * 3 * var(--cg-density));
|
|
21
|
-
--cg-s4: calc(var(--cogenta-space-unit) * 4 * var(--cg-density));
|
|
22
|
-
--cg-s6: calc(var(--cogenta-space-unit) * 6 * var(--cg-density));
|
|
23
|
-
--cg-s8: calc(var(--cogenta-space-unit) * 8 * var(--cg-density));
|
|
24
|
-
--cg-s12: calc(var(--cogenta-space-unit) * 12 * var(--cg-density));
|
|
25
|
-
--cg-s16: calc(var(--cogenta-space-unit) * 16 * var(--cg-density));
|
|
26
|
-
|
|
27
|
-
/* A monotone increasing scale, by construction: each step multiplies the one
|
|
28
|
-
below it by `font.scale`, which the skin validator already checks is > 1. */
|
|
29
|
-
--cg-text-sm: calc(var(--cogenta-font-baseSize) / var(--cogenta-font-scale));
|
|
30
|
-
--cg-text-base: var(--cogenta-font-baseSize);
|
|
31
|
-
--cg-text-md: calc(var(--cogenta-font-baseSize) * var(--cogenta-font-scale));
|
|
32
|
-
--cg-text-lg: calc(var(--cg-text-md) * var(--cogenta-font-scale));
|
|
33
|
-
--cg-text-xl: calc(var(--cg-text-lg) * var(--cogenta-font-scale));
|
|
34
|
-
--cg-text-2xl: calc(var(--cg-text-xl) * var(--cogenta-font-scale));
|
|
35
|
-
|
|
36
|
-
--cg-measure: 68ch;
|
|
37
|
-
--cg-page: 76rem;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/* `space.density` is a token the render layer stamps as an attribute, because
|
|
41
|
-
CSS cannot branch on the *value* of a custom property portably yet. The
|
|
42
|
-
default above stands until it does. */
|
|
43
|
-
:where([data-density="compact"]) {
|
|
44
|
-
--cg-density: 0.75;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
:where([data-density="spacious"]) {
|
|
48
|
-
--cg-density: 1.35;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/* --------------------------------------------------------------------------
|
|
52
|
-
Document
|
|
53
|
-
-------------------------------------------------------------------------- */
|
|
54
|
-
|
|
55
|
-
*,
|
|
56
|
-
*::before,
|
|
57
|
-
*::after {
|
|
58
|
-
box-sizing: border-box;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
body {
|
|
62
|
-
margin: 0;
|
|
63
|
-
background: var(--cogenta-color-bg);
|
|
64
|
-
color: var(--cogenta-color-fg);
|
|
65
|
-
font-family: var(--cogenta-font-sans);
|
|
66
|
-
font-size: var(--cg-text-base);
|
|
67
|
-
/* Unitless, so it scales with each element's own font size instead of being
|
|
68
|
-
inherited as a fixed pixel height — the classic cause of clipped text at
|
|
69
|
-
200% zoom (WCAG 1.4.4). */
|
|
70
|
-
line-height: 1.6;
|
|
71
|
-
text-underline-offset: 0.15em;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
img,
|
|
75
|
-
video,
|
|
76
|
-
iframe {
|
|
77
|
-
max-width: 100%;
|
|
78
|
-
height: auto;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
img {
|
|
82
|
-
display: block;
|
|
83
|
-
object-fit: cover;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/* --------------------------------------------------------------------------
|
|
87
|
-
Focus, targets, motion — the three that decide whether AA holds
|
|
88
|
-
-------------------------------------------------------------------------- */
|
|
89
|
-
|
|
90
|
-
:where(a, button, summary, [tabindex]):focus-visible {
|
|
91
|
-
/* Two solid pixels against the page, offset so it never sits on the glyphs.
|
|
92
|
-
`outline`, not `box-shadow`: it survives forced-colors mode. */
|
|
93
|
-
outline: 2px solid var(--cogenta-color-accent);
|
|
94
|
-
outline-offset: 2px;
|
|
95
|
-
border-radius: var(--cogenta-radius-sm);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/* WCAG 2.2 asks 24×24 minimum (2.5.8); 44×44 is the comfortable target and
|
|
99
|
-
costs nothing here. Applied to the theme's own controls only — an inline link
|
|
100
|
-
inside a paragraph is exempt, and padding it would break the text flow. */
|
|
101
|
-
:where(.cg-action, .cg-faq__question, .cg-logo__link) {
|
|
102
|
-
min-block-size: 44px;
|
|
103
|
-
min-inline-size: 44px;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
@media (prefers-reduced-motion: reduce) {
|
|
107
|
-
/* The `motion.reduced` token says the skin's motion may be removed. Nothing
|
|
108
|
-
in this theme conveys meaning through movement, so removing all of it is
|
|
109
|
-
safe — including the smooth scroll of the carousel, which is the one people
|
|
110
|
-
forget and which triggers vestibular symptoms. */
|
|
111
|
-
*,
|
|
112
|
-
*::before,
|
|
113
|
-
*::after {
|
|
114
|
-
animation-duration: 1ms !important;
|
|
115
|
-
animation-iteration-count: 1 !important;
|
|
116
|
-
transition-duration: 1ms !important;
|
|
117
|
-
scroll-behavior: auto !important;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
.cg-skip-link {
|
|
122
|
-
position: absolute;
|
|
123
|
-
inset-inline-start: var(--cg-s2);
|
|
124
|
-
inset-block-start: calc(var(--cg-s2) * -8);
|
|
125
|
-
z-index: 10;
|
|
126
|
-
padding: var(--cg-s2) var(--cg-s4);
|
|
127
|
-
background: var(--cogenta-color-accent);
|
|
128
|
-
color: var(--cogenta-color-accentFg);
|
|
129
|
-
border-radius: var(--cogenta-radius-md);
|
|
130
|
-
/* Moved, never hidden: `display:none` would take it out of the tab order,
|
|
131
|
-
which is the whole point of a skip link (WCAG 2.4.1). */
|
|
132
|
-
transition: inset-block-start var(--cogenta-motion-duration) var(--cogenta-motion-easing);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
.cg-skip-link:focus-visible {
|
|
136
|
-
inset-block-start: var(--cg-s2);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/* --------------------------------------------------------------------------
|
|
140
|
-
Layout
|
|
141
|
-
-------------------------------------------------------------------------- */
|
|
142
|
-
|
|
143
|
-
.cg-main {
|
|
144
|
-
display: flow-root;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
.cg-block {
|
|
148
|
-
max-inline-size: var(--cg-page);
|
|
149
|
-
margin-inline: auto;
|
|
150
|
-
margin-block: var(--cg-s12);
|
|
151
|
-
padding-inline: var(--cg-s4);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
.cg-page__title {
|
|
155
|
-
max-inline-size: var(--cg-page);
|
|
156
|
-
margin-inline: auto;
|
|
157
|
-
margin-block: var(--cg-s12) var(--cg-s6);
|
|
158
|
-
padding-inline: var(--cg-s4);
|
|
159
|
-
font-size: var(--cg-text-2xl);
|
|
160
|
-
line-height: 1.15;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
.cg-site-header,
|
|
164
|
-
.cg-site-footer {
|
|
165
|
-
padding: var(--cg-s6) var(--cg-s4);
|
|
166
|
-
color: var(--cogenta-color-mutedFg);
|
|
167
|
-
background: var(--cogenta-color-muted);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
.cg-site-header__inner,
|
|
171
|
-
.cg-site-footer__inner {
|
|
172
|
-
max-inline-size: var(--cg-page);
|
|
173
|
-
margin-inline: auto;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
/* --------------------------------------------------------------------------
|
|
177
|
-
Actions
|
|
178
|
-
-------------------------------------------------------------------------- */
|
|
179
|
-
|
|
180
|
-
.cg-actions {
|
|
181
|
-
display: flex;
|
|
182
|
-
flex-wrap: wrap;
|
|
183
|
-
gap: var(--cg-s3);
|
|
184
|
-
margin: var(--cg-s6) 0 0;
|
|
185
|
-
padding: 0;
|
|
186
|
-
list-style: none;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
.cg-action {
|
|
190
|
-
display: inline-flex;
|
|
191
|
-
align-items: center;
|
|
192
|
-
justify-content: center;
|
|
193
|
-
padding: var(--cg-s2) var(--cg-s6);
|
|
194
|
-
border: 1px solid var(--cogenta-color-accent);
|
|
195
|
-
border-radius: var(--cogenta-radius-md);
|
|
196
|
-
font-weight: 600;
|
|
197
|
-
text-decoration: none;
|
|
198
|
-
transition: opacity var(--cogenta-motion-duration) var(--cogenta-motion-easing);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
.cg-action[data-emphasis="primary"] {
|
|
202
|
-
background: var(--cogenta-color-accent);
|
|
203
|
-
color: var(--cogenta-color-accentFg);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
.cg-action[data-emphasis="secondary"] {
|
|
207
|
-
background: transparent;
|
|
208
|
-
color: var(--cogenta-color-accent);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
.cg-action:hover {
|
|
212
|
-
opacity: 0.9;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
/* --------------------------------------------------------------------------
|
|
216
|
-
Blocks
|
|
217
|
-
-------------------------------------------------------------------------- */
|
|
218
|
-
|
|
219
|
-
.cg-hero {
|
|
220
|
-
display: grid;
|
|
221
|
-
gap: var(--cg-s8);
|
|
222
|
-
align-items: center;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
@media (min-width: 60rem) {
|
|
226
|
-
.cg-hero {
|
|
227
|
-
grid-template-columns: 1fr 1fr;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
.cg-hero__eyebrow {
|
|
232
|
-
margin: 0 0 var(--cg-s2);
|
|
233
|
-
color: var(--cogenta-color-mutedFg);
|
|
234
|
-
font-size: var(--cg-text-sm);
|
|
235
|
-
letter-spacing: 0.08em;
|
|
236
|
-
text-transform: uppercase;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
.cg-hero__title {
|
|
240
|
-
margin: 0;
|
|
241
|
-
font-size: var(--cg-text-2xl);
|
|
242
|
-
line-height: 1.1;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
.cg-hero__subtitle {
|
|
246
|
-
margin: var(--cg-s4) 0 0;
|
|
247
|
-
max-inline-size: var(--cg-measure);
|
|
248
|
-
font-size: var(--cg-text-md);
|
|
249
|
-
color: var(--cogenta-color-mutedFg);
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
.cg-hero__media img {
|
|
253
|
-
inline-size: 100%;
|
|
254
|
-
border-radius: var(--cogenta-radius-lg);
|
|
255
|
-
box-shadow: var(--cogenta-shadow-md);
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
.cg-prose {
|
|
259
|
-
max-inline-size: var(--cg-measure);
|
|
260
|
-
margin-inline: auto;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
.cg-prose h2 {
|
|
264
|
-
margin-block: var(--cg-s12) var(--cg-s3);
|
|
265
|
-
font-size: var(--cg-text-xl);
|
|
266
|
-
line-height: 1.2;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
.cg-prose h3 {
|
|
270
|
-
margin-block: var(--cg-s8) var(--cg-s2);
|
|
271
|
-
font-size: var(--cg-text-lg);
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
.cg-prose h4 {
|
|
275
|
-
margin-block: var(--cg-s6) var(--cg-s2);
|
|
276
|
-
font-size: var(--cg-text-md);
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
.cg-prose p,
|
|
280
|
-
.cg-prose ul,
|
|
281
|
-
.cg-prose ol {
|
|
282
|
-
margin-block: var(--cg-s4);
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
.cg-prose blockquote {
|
|
286
|
-
margin-inline: 0;
|
|
287
|
-
padding-inline-start: var(--cg-s4);
|
|
288
|
-
border-inline-start: 3px solid var(--cogenta-color-accent);
|
|
289
|
-
color: var(--cogenta-color-mutedFg);
|
|
290
|
-
font-family: var(--cogenta-font-serif);
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
.cg-prose code {
|
|
294
|
-
font-family: var(--cogenta-font-mono);
|
|
295
|
-
font-size: var(--cg-text-sm);
|
|
296
|
-
background: var(--cogenta-color-muted);
|
|
297
|
-
border-radius: var(--cogenta-radius-sm);
|
|
298
|
-
padding: 0.1em 0.3em;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
.cg-prose__figure {
|
|
302
|
-
margin-inline: 0;
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
.cg-figure {
|
|
306
|
-
margin-inline: auto;
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
.cg-figure[data-align="start"],
|
|
310
|
-
.cg-figure[data-align="end"] {
|
|
311
|
-
max-inline-size: calc(var(--cg-measure) / 2);
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
.cg-figure[data-align="start"] {
|
|
315
|
-
float: inline-start;
|
|
316
|
-
margin-inline-end: var(--cg-s6);
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
.cg-figure[data-align="end"] {
|
|
320
|
-
float: inline-end;
|
|
321
|
-
margin-inline-start: var(--cg-s6);
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
.cg-figure[data-align="full"] {
|
|
325
|
-
max-inline-size: none;
|
|
326
|
-
padding-inline: 0;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
.cg-figure__media {
|
|
330
|
-
inline-size: 100%;
|
|
331
|
-
aspect-ratio: var(--cg-ratio, auto);
|
|
332
|
-
border-radius: var(--cogenta-radius-md);
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
.cg-figure__caption {
|
|
336
|
-
margin-block-start: var(--cg-s2);
|
|
337
|
-
color: var(--cogenta-color-mutedFg);
|
|
338
|
-
font-size: var(--cg-text-sm);
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
.cg-figure__credit::before {
|
|
342
|
-
content: " — ";
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
.cg-features__items,
|
|
346
|
-
.cg-logos__items,
|
|
347
|
-
.cg-gallery__items,
|
|
348
|
-
.cg-collection__items,
|
|
349
|
-
.cg-faq__items {
|
|
350
|
-
margin: 0;
|
|
351
|
-
padding: 0;
|
|
352
|
-
list-style: none;
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
.cg-features__items {
|
|
356
|
-
display: grid;
|
|
357
|
-
gap: var(--cg-s8);
|
|
358
|
-
grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
.cg-feature__title {
|
|
362
|
-
margin: var(--cg-s2) 0;
|
|
363
|
-
font-size: var(--cg-text-md);
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
.cg-feature__text {
|
|
367
|
-
margin: 0;
|
|
368
|
-
color: var(--cogenta-color-mutedFg);
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
.cg-cta {
|
|
372
|
-
padding-block: var(--cg-s12);
|
|
373
|
-
background: var(--cogenta-color-muted);
|
|
374
|
-
border-radius: var(--cogenta-radius-lg);
|
|
375
|
-
text-align: center;
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
.cg-cta__title {
|
|
379
|
-
margin: 0;
|
|
380
|
-
font-size: var(--cg-text-xl);
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
.cg-cta__text {
|
|
384
|
-
margin: var(--cg-s3) auto 0;
|
|
385
|
-
max-inline-size: var(--cg-measure);
|
|
386
|
-
color: var(--cogenta-color-mutedFg);
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
.cg-cta .cg-actions {
|
|
390
|
-
justify-content: center;
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
.cg-gallery__items {
|
|
394
|
-
display: grid;
|
|
395
|
-
gap: var(--cg-s3);
|
|
396
|
-
grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr));
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
.cg-gallery[data-layout="masonry"] .cg-gallery__items {
|
|
400
|
-
display: block;
|
|
401
|
-
columns: 3 14rem;
|
|
402
|
-
column-gap: var(--cg-s3);
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
.cg-gallery[data-layout="masonry"] .cg-gallery__item {
|
|
406
|
-
break-inside: avoid;
|
|
407
|
-
margin-block-end: var(--cg-s3);
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
/* The whole carousel: a scroll-snapping row. No script, no auto-advance, and
|
|
411
|
-
the container is focusable so it can be scrolled from the keyboard. */
|
|
412
|
-
.cg-gallery__viewport {
|
|
413
|
-
overflow-x: auto;
|
|
414
|
-
scroll-snap-type: x mandatory;
|
|
415
|
-
scroll-behavior: smooth;
|
|
416
|
-
overscroll-behavior-inline: contain;
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
.cg-gallery[data-layout="carousel"] .cg-gallery__items {
|
|
420
|
-
display: grid;
|
|
421
|
-
grid-auto-flow: column;
|
|
422
|
-
grid-auto-columns: minmax(16rem, 40%);
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
.cg-gallery[data-layout="carousel"] .cg-gallery__item {
|
|
426
|
-
scroll-snap-align: start;
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
.cg-gallery__item img,
|
|
430
|
-
.cg-collection img {
|
|
431
|
-
inline-size: 100%;
|
|
432
|
-
border-radius: var(--cogenta-radius-md);
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
.cg-quote {
|
|
436
|
-
max-inline-size: var(--cg-measure);
|
|
437
|
-
margin-inline: auto;
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
.cg-quote__text {
|
|
441
|
-
margin: 0;
|
|
442
|
-
font-family: var(--cogenta-font-serif);
|
|
443
|
-
font-size: var(--cg-text-lg);
|
|
444
|
-
line-height: 1.35;
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
.cg-quote__attribution {
|
|
448
|
-
display: flex;
|
|
449
|
-
align-items: center;
|
|
450
|
-
gap: var(--cg-s3);
|
|
451
|
-
margin-block-start: var(--cg-s4);
|
|
452
|
-
color: var(--cogenta-color-mutedFg);
|
|
453
|
-
font-size: var(--cg-text-sm);
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
.cg-quote__avatar {
|
|
457
|
-
inline-size: 3rem;
|
|
458
|
-
block-size: 3rem;
|
|
459
|
-
border-radius: 50%;
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
.cg-quote__author {
|
|
463
|
-
font-weight: 600;
|
|
464
|
-
color: var(--cogenta-color-fg);
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
.cg-faq__items {
|
|
468
|
-
border-block-start: 1px solid var(--cogenta-color-border);
|
|
469
|
-
}
|
|
470
|
-
|
|
471
|
-
.cg-faq__item {
|
|
472
|
-
border-block-end: 1px solid var(--cogenta-color-border);
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
.cg-faq__question {
|
|
476
|
-
display: flex;
|
|
477
|
-
align-items: center;
|
|
478
|
-
padding-block: var(--cg-s3);
|
|
479
|
-
font-weight: 600;
|
|
480
|
-
cursor: pointer;
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
.cg-faq__answer {
|
|
484
|
-
padding-block-end: var(--cg-s3);
|
|
485
|
-
color: var(--cogenta-color-mutedFg);
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
.cg-stats__items {
|
|
489
|
-
display: grid;
|
|
490
|
-
gap: var(--cg-s8);
|
|
491
|
-
grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
|
|
492
|
-
margin: 0;
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
/* Reading order is label then figure; the skin shows the figure first. The
|
|
496
|
-
markup is what a screen reader follows, so the two must not be conflated. */
|
|
497
|
-
.cg-stat {
|
|
498
|
-
display: flex;
|
|
499
|
-
flex-direction: column-reverse;
|
|
500
|
-
gap: var(--cg-s1);
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
.cg-stat__value {
|
|
504
|
-
margin: 0;
|
|
505
|
-
font-size: var(--cg-text-2xl);
|
|
506
|
-
line-height: 1.1;
|
|
507
|
-
font-variant-numeric: tabular-nums;
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
.cg-stat__unit {
|
|
511
|
-
font-size: var(--cg-text-md);
|
|
512
|
-
color: var(--cogenta-color-mutedFg);
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
.cg-stat__label {
|
|
516
|
-
color: var(--cogenta-color-mutedFg);
|
|
517
|
-
font-size: var(--cg-text-sm);
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
.cg-logos__items {
|
|
521
|
-
display: flex;
|
|
522
|
-
flex-wrap: wrap;
|
|
523
|
-
align-items: center;
|
|
524
|
-
gap: var(--cg-s8);
|
|
525
|
-
}
|
|
526
|
-
|
|
527
|
-
.cg-logo__image {
|
|
528
|
-
block-size: 2.5rem;
|
|
529
|
-
inline-size: auto;
|
|
530
|
-
object-fit: contain;
|
|
531
|
-
}
|
|
532
|
-
|
|
533
|
-
.cg-logo__link {
|
|
534
|
-
display: inline-flex;
|
|
535
|
-
align-items: center;
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
.cg-collection__items {
|
|
539
|
-
display: grid;
|
|
540
|
-
gap: var(--cg-s8);
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
.cg-collection[data-layout="grid"] .cg-collection__items {
|
|
544
|
-
grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr));
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
.cg-collection[data-layout="carousel"] .cg-collection__items {
|
|
548
|
-
grid-auto-flow: column;
|
|
549
|
-
grid-auto-columns: minmax(18rem, 45%);
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
.cg-collection__viewport {
|
|
553
|
-
overflow-x: auto;
|
|
554
|
-
scroll-snap-type: x mandatory;
|
|
555
|
-
scroll-behavior: smooth;
|
|
556
|
-
overscroll-behavior-inline: contain;
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
.cg-entry__title {
|
|
560
|
-
margin: 0 0 var(--cg-s1);
|
|
561
|
-
font-size: var(--cg-text-md);
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
.cg-entry__date,
|
|
565
|
-
.cg-entry__excerpt {
|
|
566
|
-
color: var(--cogenta-color-mutedFg);
|
|
567
|
-
font-size: var(--cg-text-sm);
|
|
568
|
-
}
|
|
569
|
-
|
|
570
|
-
.cg-embed {
|
|
571
|
-
aspect-ratio: var(--cg-ratio, 16 / 9);
|
|
572
|
-
max-inline-size: var(--cg-measure);
|
|
573
|
-
margin-inline: auto;
|
|
574
|
-
}
|
|
575
|
-
|
|
576
|
-
.cg-embed__frame {
|
|
577
|
-
inline-size: 100%;
|
|
578
|
-
block-size: 100%;
|
|
579
|
-
border: 0;
|
|
580
|
-
border-radius: var(--cogenta-radius-md);
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
/* The consent placeholder is a real card, not a grey box: it says what would be
|
|
584
|
-
loaded and offers a way out to the source. It requests nothing third-party. */
|
|
585
|
-
.cg-embed__placeholder {
|
|
586
|
-
display: flex;
|
|
587
|
-
flex-direction: column;
|
|
588
|
-
align-items: center;
|
|
589
|
-
justify-content: center;
|
|
590
|
-
gap: var(--cg-s3);
|
|
591
|
-
block-size: 100%;
|
|
592
|
-
padding: var(--cg-s6);
|
|
593
|
-
background: var(--cogenta-color-muted);
|
|
594
|
-
color: var(--cogenta-color-mutedFg);
|
|
595
|
-
border: 1px dashed var(--cogenta-color-border);
|
|
596
|
-
border-radius: var(--cogenta-radius-md);
|
|
597
|
-
text-align: center;
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
.cg-embed__notice {
|
|
601
|
-
margin: 0;
|
|
602
|
-
}
|
|
603
|
-
|
|
604
|
-
.cg-embed__link {
|
|
605
|
-
color: var(--cogenta-color-accent);
|
|
606
|
-
}
|
|
23
|
+
@import "./tokens.css";
|
|
24
|
+
@import "./base.css";
|
|
25
|
+
@import "./blocks.css";
|