@cogenta/theme-magazine 1.1.2

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.
Files changed (117) hide show
  1. package/LICENSE +373 -0
  2. package/dist/src/index.d.ts +21 -0
  3. package/dist/src/index.d.ts.map +1 -0
  4. package/dist/src/index.js +21 -0
  5. package/dist/src/index.js.map +1 -0
  6. package/dist/src/render/blocks/accordion.d.ts +4 -0
  7. package/dist/src/render/blocks/accordion.d.ts.map +1 -0
  8. package/dist/src/render/blocks/accordion.js +20 -0
  9. package/dist/src/render/blocks/accordion.js.map +1 -0
  10. package/dist/src/render/blocks/collection-list.d.ts +5 -0
  11. package/dist/src/render/blocks/collection-list.d.ts.map +1 -0
  12. package/dist/src/render/blocks/collection-list.js +134 -0
  13. package/dist/src/render/blocks/collection-list.js.map +1 -0
  14. package/dist/src/render/blocks/cta.d.ts +10 -0
  15. package/dist/src/render/blocks/cta.d.ts.map +1 -0
  16. package/dist/src/render/blocks/cta.js +16 -0
  17. package/dist/src/render/blocks/cta.js.map +1 -0
  18. package/dist/src/render/blocks/embed.d.ts +4 -0
  19. package/dist/src/render/blocks/embed.d.ts.map +1 -0
  20. package/dist/src/render/blocks/embed.js +76 -0
  21. package/dist/src/render/blocks/embed.js.map +1 -0
  22. package/dist/src/render/blocks/faq.d.ts +4 -0
  23. package/dist/src/render/blocks/faq.d.ts.map +1 -0
  24. package/dist/src/render/blocks/faq.js +18 -0
  25. package/dist/src/render/blocks/faq.js.map +1 -0
  26. package/dist/src/render/blocks/feature-grid.d.ts +4 -0
  27. package/dist/src/render/blocks/feature-grid.d.ts.map +1 -0
  28. package/dist/src/render/blocks/feature-grid.js +27 -0
  29. package/dist/src/render/blocks/feature-grid.js.map +1 -0
  30. package/dist/src/render/blocks/gallery.d.ts +13 -0
  31. package/dist/src/render/blocks/gallery.d.ts.map +1 -0
  32. package/dist/src/render/blocks/gallery.js +26 -0
  33. package/dist/src/render/blocks/gallery.js.map +1 -0
  34. package/dist/src/render/blocks/hero.d.ts +11 -0
  35. package/dist/src/render/blocks/hero.d.ts.map +1 -0
  36. package/dist/src/render/blocks/hero.js +26 -0
  37. package/dist/src/render/blocks/hero.js.map +1 -0
  38. package/dist/src/render/blocks/logo-strip.d.ts +4 -0
  39. package/dist/src/render/blocks/logo-strip.d.ts.map +1 -0
  40. package/dist/src/render/blocks/logo-strip.js +20 -0
  41. package/dist/src/render/blocks/logo-strip.js.map +1 -0
  42. package/dist/src/render/blocks/logos.d.ts +4 -0
  43. package/dist/src/render/blocks/logos.d.ts.map +1 -0
  44. package/dist/src/render/blocks/logos.js +27 -0
  45. package/dist/src/render/blocks/logos.js.map +1 -0
  46. package/dist/src/render/blocks/media-figure.d.ts +15 -0
  47. package/dist/src/render/blocks/media-figure.d.ts.map +1 -0
  48. package/dist/src/render/blocks/media-figure.js +32 -0
  49. package/dist/src/render/blocks/media-figure.js.map +1 -0
  50. package/dist/src/render/blocks/pricing-table.d.ts +4 -0
  51. package/dist/src/render/blocks/pricing-table.d.ts.map +1 -0
  52. package/dist/src/render/blocks/pricing-table.js +32 -0
  53. package/dist/src/render/blocks/pricing-table.js.map +1 -0
  54. package/dist/src/render/blocks/prose.d.ts +16 -0
  55. package/dist/src/render/blocks/prose.d.ts.map +1 -0
  56. package/dist/src/render/blocks/prose.js +17 -0
  57. package/dist/src/render/blocks/prose.js.map +1 -0
  58. package/dist/src/render/blocks/quote.d.ts +16 -0
  59. package/dist/src/render/blocks/quote.d.ts.map +1 -0
  60. package/dist/src/render/blocks/quote.js +29 -0
  61. package/dist/src/render/blocks/quote.js.map +1 -0
  62. package/dist/src/render/blocks/stat-counter.d.ts +4 -0
  63. package/dist/src/render/blocks/stat-counter.d.ts.map +1 -0
  64. package/dist/src/render/blocks/stat-counter.js +17 -0
  65. package/dist/src/render/blocks/stat-counter.js.map +1 -0
  66. package/dist/src/render/blocks/stats.d.ts +4 -0
  67. package/dist/src/render/blocks/stats.d.ts.map +1 -0
  68. package/dist/src/render/blocks/stats.js +19 -0
  69. package/dist/src/render/blocks/stats.js.map +1 -0
  70. package/dist/src/render/blocks/testimonial.d.ts +19 -0
  71. package/dist/src/render/blocks/testimonial.d.ts.map +1 -0
  72. package/dist/src/render/blocks/testimonial.js +28 -0
  73. package/dist/src/render/blocks/testimonial.js.map +1 -0
  74. package/dist/src/render/chrome.d.ts +3 -0
  75. package/dist/src/render/chrome.d.ts.map +1 -0
  76. package/dist/src/render/chrome.js +136 -0
  77. package/dist/src/render/chrome.js.map +1 -0
  78. package/dist/src/render/render-block.d.ts +21 -0
  79. package/dist/src/render/render-block.d.ts.map +1 -0
  80. package/dist/src/render/render-block.js +104 -0
  81. package/dist/src/render/render-block.js.map +1 -0
  82. package/dist/src/render/term-archive.d.ts +13 -0
  83. package/dist/src/render/term-archive.d.ts.map +1 -0
  84. package/dist/src/render/term-archive.js +35 -0
  85. package/dist/src/render/term-archive.js.map +1 -0
  86. package/dist/theme.config.d.ts +12 -0
  87. package/dist/theme.config.d.ts.map +1 -0
  88. package/dist/theme.config.js +42 -0
  89. package/dist/theme.config.js.map +1 -0
  90. package/package.json +57 -0
  91. package/src/index.ts +20 -0
  92. package/src/render/blocks/accordion.ts +51 -0
  93. package/src/render/blocks/collection-list.ts +286 -0
  94. package/src/render/blocks/cta.ts +33 -0
  95. package/src/render/blocks/embed.ts +99 -0
  96. package/src/render/blocks/faq.ts +58 -0
  97. package/src/render/blocks/feature-grid.ts +61 -0
  98. package/src/render/blocks/gallery.ts +46 -0
  99. package/src/render/blocks/hero.ts +54 -0
  100. package/src/render/blocks/logo-strip.ts +35 -0
  101. package/src/render/blocks/logos.ts +57 -0
  102. package/src/render/blocks/media-figure.ts +43 -0
  103. package/src/render/blocks/pricing-table.ts +76 -0
  104. package/src/render/blocks/prose.ts +22 -0
  105. package/src/render/blocks/quote.ts +46 -0
  106. package/src/render/blocks/stat-counter.ts +39 -0
  107. package/src/render/blocks/stats.ts +46 -0
  108. package/src/render/blocks/testimonial.ts +44 -0
  109. package/src/render/chrome.ts +162 -0
  110. package/src/render/render-block.ts +137 -0
  111. package/src/render/term-archive.ts +87 -0
  112. package/src/styles/archive.css +40 -0
  113. package/src/styles/base.css +1037 -0
  114. package/src/styles/blocks.css +1335 -0
  115. package/src/styles/theme.css +18 -0
  116. package/src/styles/tokens.css +308 -0
  117. package/tokens.json +36 -0
@@ -0,0 +1,1335 @@
1
+ /*
2
+ * The seventeen vocabulary blocks (`blocks@2.0`, RFC 0001), in contract-B
3
+ * order. Nothing here declares a colour, a size or a duration of its own —
4
+ * every block composes the design system from `tokens.css`.
5
+ */
6
+
7
+ /* --------------------------------------------------------------------------
8
+ Shared block furniture
9
+ -------------------------------------------------------------------------- */
10
+
11
+ .cg-index__heading,
12
+ .cg-subscribe__title,
13
+ .cg-mailbag__title,
14
+ .cg-figures__title,
15
+ .cg-press__title,
16
+ .cg-issue__title,
17
+ .cg-dossier__title,
18
+ .cg-tally__title,
19
+ .cg-ratecard__title {
20
+ margin: 0 0 var(--cg-s8);
21
+ font-size: var(--cg-text-xl);
22
+ text-wrap: balance;
23
+ }
24
+
25
+ .cg-index__items,
26
+ .cg-press__items,
27
+ .cg-mailbag__items,
28
+ .cg-contactsheet__items,
29
+ .cg-issue__rest,
30
+ .cg-issue__frames,
31
+ .cg-dossier__entries,
32
+ .cg-ratecard__tiers,
33
+ .cg-imprint__items {
34
+ margin: 0;
35
+ padding: 0;
36
+ list-style: none;
37
+ }
38
+
39
+ /* A scroll-snapping row, shared by `gallery` and `collectionList` — focusable
40
+ and labelled, so it is operable from the keyboard at zero bytes of
41
+ JavaScript. */
42
+ .cg-contactsheet__viewport,
43
+ .cg-issue__viewport {
44
+ overflow-x: auto;
45
+ scroll-snap-type: x mandatory;
46
+ scroll-behavior: smooth;
47
+ overscroll-behavior-inline: contain;
48
+ scrollbar-width: thin;
49
+ scrollbar-color: var(--cg-rule-heavy) transparent;
50
+ padding-block: var(--cg-s2);
51
+ margin-block: calc(var(--cg-s2) * -1);
52
+ }
53
+
54
+ /* --- hero -------------------------------------------------------------- */
55
+
56
+ .cg-hero {
57
+ padding-block-start: var(--cg-s6);
58
+ border-block-start: 1px solid var(--cg-rule-soft);
59
+ }
60
+
61
+ .cg-hero__grid {
62
+ display: grid;
63
+ gap: var(--cg-gap-loose);
64
+ }
65
+
66
+ @media (min-width: 62rem) {
67
+ .cg-hero__grid {
68
+ grid-template-columns: 1fr 1px 0.85fr;
69
+ align-items: center;
70
+ /* The one visible column rule of the whole page — the print device this
71
+ theme leans on hardest, drawn as a real element rather than a border
72
+ so it can be centred between two grid tracks that are not adjacent
73
+ siblings. */
74
+ column-gap: var(--cg-gap-loose);
75
+ }
76
+
77
+ .cg-hero__grid::before {
78
+ content: "";
79
+ grid-column: 2;
80
+ grid-row: 1;
81
+ align-self: stretch;
82
+ background: var(--cg-rule-heavy);
83
+ }
84
+
85
+ .cg-hero__copy {
86
+ grid-column: 1;
87
+ }
88
+
89
+ .cg-hero__media {
90
+ grid-column: 3;
91
+ }
92
+ }
93
+
94
+ .cg-hero__eyebrow {
95
+ margin: 0 0 var(--cg-s4);
96
+ color: var(--cg-accent);
97
+ font-family: var(--cogenta-font-sans);
98
+ font-size: var(--cg-text-sm);
99
+ font-weight: var(--cg-weight-bold);
100
+ letter-spacing: var(--cg-tracking-wider);
101
+ text-transform: uppercase;
102
+ }
103
+
104
+ .cg-hero__title {
105
+ font-size: var(--cg-text-3xl);
106
+ }
107
+
108
+ @media (min-width: 62rem) {
109
+ .cg-hero__title {
110
+ font-size: calc(var(--cg-text-3xl) * 1.2);
111
+ }
112
+ }
113
+
114
+ .cg-hero__subtitle {
115
+ margin: var(--cg-s5) 0 0;
116
+ max-inline-size: var(--cg-measure-narrow);
117
+ color: var(--cg-ink-soft);
118
+ font-family: var(--cogenta-font-serif);
119
+ font-style: italic;
120
+ font-size: var(--cg-text-lg);
121
+ line-height: var(--cg-leading-relaxed);
122
+ text-wrap: pretty;
123
+ }
124
+
125
+ .cg-hero__image {
126
+ inline-size: 100%;
127
+ aspect-ratio: 4 / 5;
128
+ object-fit: cover;
129
+ box-shadow: var(--cg-elevation-2);
130
+ }
131
+
132
+ /* --- prose --------------------------------------------------------------- */
133
+
134
+ .cg-prose {
135
+ max-inline-size: var(--cg-measure);
136
+ margin-inline: auto;
137
+ line-height: var(--cg-leading-relaxed);
138
+ }
139
+
140
+ .cg-prose > :first-child {
141
+ margin-block-start: 0;
142
+ }
143
+
144
+ .cg-prose > :last-child {
145
+ margin-block-end: 0;
146
+ }
147
+
148
+ /* The lede: the opening paragraph runs a size larger, in the sans, the way
149
+ a feature's first lines are set apart from the body that follows — and it
150
+ is the one paragraph that gets the drop cap. */
151
+ .cg-prose > p:first-child {
152
+ font-family: var(--cogenta-font-sans);
153
+ font-size: var(--cg-text-lg);
154
+ line-height: var(--cg-leading-relaxed);
155
+ color: var(--cg-ink-soft);
156
+ }
157
+
158
+ .cg-prose > p:first-child::first-letter {
159
+ float: inline-start;
160
+ margin: 0.03em var(--cg-s2) 0 0;
161
+ color: var(--cg-accent);
162
+ font-family: var(--cogenta-font-serif);
163
+ font-weight: var(--cg-weight-black);
164
+ font-size: 3.6em;
165
+ line-height: 0.82;
166
+ }
167
+
168
+ .cg-prose h2 {
169
+ margin-block: var(--cg-s12) var(--cg-s4);
170
+ font-size: var(--cg-text-xl);
171
+ }
172
+
173
+ .cg-prose h3 {
174
+ margin-block: var(--cg-s10) var(--cg-s3);
175
+ font-size: var(--cg-text-lg);
176
+ }
177
+
178
+ .cg-prose h4 {
179
+ margin-block: var(--cg-s8) var(--cg-s2);
180
+ font-size: var(--cg-text-md);
181
+ letter-spacing: var(--cg-tracking-wide);
182
+ text-transform: uppercase;
183
+ }
184
+
185
+ .cg-prose p {
186
+ margin-block: var(--cg-s5);
187
+ text-wrap: pretty;
188
+ }
189
+
190
+ .cg-prose ul,
191
+ .cg-prose ol {
192
+ margin-block: var(--cg-s5);
193
+ padding-inline-start: var(--cg-s6);
194
+ }
195
+
196
+ .cg-prose li {
197
+ margin-block: var(--cg-s2);
198
+ padding-inline-start: var(--cg-s1);
199
+ }
200
+
201
+ .cg-prose li::marker {
202
+ color: var(--cg-accent);
203
+ }
204
+
205
+ .cg-prose strong {
206
+ font-weight: var(--cg-weight-semibold);
207
+ color: var(--cg-ink);
208
+ }
209
+
210
+ /* An in-article quotation, sized down from the `quote` block's pull
211
+ treatment so the two never compete on the same page. */
212
+ .cg-prose blockquote {
213
+ margin-block: var(--cg-s10);
214
+ margin-inline: 0;
215
+ padding-inline-start: var(--cg-s6);
216
+ border-inline-start: 3px solid var(--cg-accent);
217
+ color: var(--cg-ink-soft);
218
+ font-family: var(--cogenta-font-serif);
219
+ font-style: italic;
220
+ font-size: var(--cg-text-lg);
221
+ line-height: var(--cg-leading-normal);
222
+ }
223
+
224
+ .cg-prose blockquote > :first-child {
225
+ margin-block-start: 0;
226
+ }
227
+
228
+ .cg-prose blockquote > :last-child {
229
+ margin-block-end: 0;
230
+ }
231
+
232
+ .cg-prose code {
233
+ font-family: var(--cogenta-font-mono);
234
+ font-size: 0.875em;
235
+ background: var(--cg-paper-panel);
236
+ border-radius: var(--cg-radius-sm);
237
+ box-shadow: var(--cg-ring);
238
+ padding: 0.15em 0.4em;
239
+ }
240
+
241
+ /* `.cg-prose__figure` is a fixed class name — `@cogenta/theme-kit`'s
242
+ `renderRichText` emits it for an inline media node, so this theme styles
243
+ it rather than renaming it. */
244
+ .cg-prose__figure {
245
+ margin-block: var(--cg-s8);
246
+ margin-inline: 0;
247
+ }
248
+
249
+ .cg-prose__figure img {
250
+ inline-size: 100%;
251
+ }
252
+
253
+ .cg-prose__figure figcaption {
254
+ margin-block-start: var(--cg-s3);
255
+ padding-inline-start: var(--cg-s3);
256
+ border-inline-start: 2px solid var(--cg-rule-heavy);
257
+ color: var(--cg-ink-faint);
258
+ font-family: var(--cogenta-font-sans);
259
+ font-size: var(--cg-text-sm);
260
+ }
261
+
262
+ /* --- mediaFigure: a plate ------------------------------------------------- */
263
+
264
+ .cg-plate {
265
+ margin-inline: auto;
266
+ }
267
+
268
+ .cg-plate[data-align="start"],
269
+ .cg-plate[data-align="end"] {
270
+ max-inline-size: calc(var(--cg-measure) / 2);
271
+ }
272
+
273
+ .cg-plate[data-align="start"] {
274
+ float: inline-start;
275
+ margin-inline-end: var(--cg-s6);
276
+ }
277
+
278
+ .cg-plate[data-align="end"] {
279
+ float: inline-end;
280
+ margin-inline-start: var(--cg-s6);
281
+ }
282
+
283
+ .cg-plate[data-align="full"] {
284
+ max-inline-size: none;
285
+ padding-inline: 0;
286
+ }
287
+
288
+ .cg-plate__media {
289
+ inline-size: 100%;
290
+ aspect-ratio: var(--cg-ratio, auto);
291
+ }
292
+
293
+ .cg-plate__caption {
294
+ display: flex;
295
+ flex-wrap: wrap;
296
+ gap: var(--cg-s2) var(--cg-s4);
297
+ margin-block-start: var(--cg-s3);
298
+ padding-block-start: var(--cg-s3);
299
+ border-block-start: 1px solid var(--cg-rule);
300
+ color: var(--cg-ink-faint);
301
+ font-family: var(--cogenta-font-sans);
302
+ font-size: var(--cg-text-xs);
303
+ letter-spacing: var(--cg-tracking-wide);
304
+ text-transform: uppercase;
305
+ }
306
+
307
+ .cg-plate[data-align="full"] .cg-plate__caption {
308
+ max-inline-size: var(--cg-measure);
309
+ margin-inline: auto;
310
+ padding-inline: var(--cg-gutter);
311
+ }
312
+
313
+ .cg-plate__credit::before {
314
+ content: "\2014";
315
+ margin-inline-end: var(--cg-s2);
316
+ }
317
+
318
+ /* --- featureGrid: a contents index ---------------------------------------- */
319
+
320
+ .cg-index__items {
321
+ border-block: 3px double var(--cg-rule-heavy);
322
+ padding-block: var(--cg-s2);
323
+ columns: 2 18rem;
324
+ column-gap: var(--cg-s10);
325
+ column-rule: 1px solid var(--cg-rule-soft);
326
+ counter-reset: cg-index;
327
+ }
328
+
329
+ .cg-index__item {
330
+ counter-increment: cg-index;
331
+ break-inside: avoid;
332
+ padding-block: var(--cg-s4);
333
+ border-block-end: 1px solid var(--cg-rule-soft);
334
+ }
335
+
336
+ .cg-index__item::before {
337
+ content: counter(cg-index, decimal-leading-zero);
338
+ display: block;
339
+ margin-block-end: var(--cg-s1);
340
+ color: var(--cg-accent);
341
+ font-family: var(--cogenta-font-serif);
342
+ font-weight: var(--cg-weight-bold);
343
+ font-size: var(--cg-text-sm);
344
+ }
345
+
346
+ .cg-index__title {
347
+ margin: 0 0 var(--cg-s1);
348
+ font-size: var(--cg-text-md);
349
+ line-height: var(--cg-leading-snug);
350
+ }
351
+
352
+ .cg-index__link {
353
+ color: inherit;
354
+ text-decoration: none;
355
+ }
356
+
357
+ .cg-index__link:hover {
358
+ color: var(--cg-accent);
359
+ text-decoration: underline;
360
+ }
361
+
362
+ .cg-index__text {
363
+ margin: 0;
364
+ color: var(--cg-ink-soft);
365
+ font-family: var(--cogenta-font-sans);
366
+ font-size: var(--cg-text-sm);
367
+ line-height: var(--cg-leading-relaxed);
368
+ text-wrap: pretty;
369
+ }
370
+
371
+ /* --- cta: the subscription page ------------------------------------------- */
372
+
373
+ .cg-subscribe {
374
+ padding-block: var(--cg-s12);
375
+ border-block: 4px double var(--cg-rule-heavy);
376
+ background: var(--cg-paper-tint);
377
+ text-align: center;
378
+ }
379
+
380
+ .cg-subscribe__title {
381
+ font-size: var(--cg-text-2xl);
382
+ }
383
+
384
+ .cg-subscribe__text {
385
+ margin: var(--cg-s4) auto 0;
386
+ max-inline-size: var(--cg-measure-narrow);
387
+ color: var(--cg-ink-soft);
388
+ font-family: var(--cogenta-font-sans);
389
+ font-size: var(--cg-text-lg);
390
+ line-height: var(--cg-leading-relaxed);
391
+ text-wrap: pretty;
392
+ }
393
+
394
+ .cg-subscribe .cg-actions {
395
+ justify-content: center;
396
+ }
397
+
398
+ /* --- gallery: a contact sheet ---------------------------------------------- */
399
+
400
+ .cg-contactsheet__items {
401
+ display: grid;
402
+ gap: 2px;
403
+ background: var(--cg-rule);
404
+ grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr));
405
+ }
406
+
407
+ .cg-contactsheet__item {
408
+ position: relative;
409
+ background: var(--cg-paper);
410
+ counter-increment: cg-frame;
411
+ }
412
+
413
+ .cg-contactsheet:not([data-layout="masonry"]) {
414
+ counter-reset: cg-frame;
415
+ }
416
+
417
+ .cg-contactsheet:not([data-layout="masonry"]) .cg-contactsheet__item::before {
418
+ content: counter(cg-frame, decimal-leading-zero);
419
+ position: absolute;
420
+ inset-block-start: var(--cg-s2);
421
+ inset-inline-start: var(--cg-s2);
422
+ z-index: 1;
423
+ padding: 0.15em 0.5em;
424
+ background: color-mix(in oklab, var(--cg-ink) 78%, transparent);
425
+ color: var(--cg-paper);
426
+ font-family: var(--cogenta-font-sans);
427
+ font-size: var(--cg-text-xs);
428
+ font-variant-numeric: tabular-nums;
429
+ }
430
+
431
+ .cg-contactsheet__item img {
432
+ inline-size: 100%;
433
+ block-size: 100%;
434
+ filter: grayscale(0.15) contrast(1.05);
435
+ transition: filter var(--cg-duration-slow) var(--cg-ease);
436
+ }
437
+
438
+ .cg-contactsheet__item:hover img {
439
+ filter: none;
440
+ }
441
+
442
+ .cg-contactsheet:not([data-layout="masonry"]) .cg-contactsheet__item img {
443
+ aspect-ratio: 1;
444
+ }
445
+
446
+ .cg-contactsheet[data-layout="masonry"] .cg-contactsheet__items {
447
+ display: block;
448
+ columns: 3 12rem;
449
+ column-gap: 2px;
450
+ background: none;
451
+ }
452
+
453
+ .cg-contactsheet[data-layout="masonry"] .cg-contactsheet__item {
454
+ break-inside: avoid;
455
+ margin-block-end: 2px;
456
+ }
457
+
458
+ .cg-contactsheet[data-layout="carousel"] .cg-contactsheet__items {
459
+ display: grid;
460
+ grid-auto-flow: column;
461
+ grid-auto-columns: minmax(13rem, 34%);
462
+ }
463
+
464
+ .cg-contactsheet[data-layout="carousel"] .cg-contactsheet__item {
465
+ scroll-snap-align: start;
466
+ }
467
+
468
+ /* --- quote: the pull quote --------------------------------------------- */
469
+
470
+ .cg-pullquote {
471
+ max-inline-size: var(--cg-page-narrow);
472
+ margin-inline: auto;
473
+ padding-inline-start: var(--cg-s10);
474
+ border-inline-start: 4px solid var(--cg-accent);
475
+ position: relative;
476
+ }
477
+
478
+ .cg-pullquote::before {
479
+ content: "\201C" / "";
480
+ position: absolute;
481
+ inset-inline-start: calc(var(--cg-s10) * -0.15);
482
+ inset-block-start: calc(var(--cg-s6) * -1);
483
+ color: var(--cg-accent-tint);
484
+ font-family: var(--cogenta-font-serif);
485
+ font-size: calc(var(--cg-text-3xl) * 2.2);
486
+ line-height: 1;
487
+ }
488
+
489
+ .cg-pullquote__text {
490
+ margin: 0;
491
+ font-family: var(--cogenta-font-serif);
492
+ font-size: var(--cg-text-2xl);
493
+ line-height: var(--cg-leading-snug);
494
+ letter-spacing: var(--cg-tracking-snug);
495
+ text-wrap: balance;
496
+ }
497
+
498
+ .cg-pullquote__attribution {
499
+ display: flex;
500
+ align-items: center;
501
+ gap: var(--cg-s3);
502
+ margin-block-start: var(--cg-s6);
503
+ color: var(--cg-ink-faint);
504
+ font-family: var(--cogenta-font-sans);
505
+ font-size: var(--cg-text-sm);
506
+ }
507
+
508
+ .cg-pullquote__avatar {
509
+ inline-size: var(--cg-s10);
510
+ block-size: var(--cg-s10);
511
+ object-fit: cover;
512
+ box-shadow: var(--cg-ring);
513
+ }
514
+
515
+ .cg-pullquote__names {
516
+ display: flex;
517
+ align-items: baseline;
518
+ gap: var(--cg-s2);
519
+ flex-wrap: wrap;
520
+ }
521
+
522
+ .cg-pullquote__author {
523
+ font-weight: var(--cg-weight-bold);
524
+ color: var(--cg-ink);
525
+ letter-spacing: var(--cg-tracking-wide);
526
+ text-transform: uppercase;
527
+ font-size: var(--cg-text-xs);
528
+ }
529
+
530
+ .cg-pullquote__role::before {
531
+ content: "\2014";
532
+ margin-inline-end: var(--cg-s2);
533
+ }
534
+
535
+ /* --- faq: the reader mailbag --------------------------------------------- */
536
+
537
+ .cg-mailbag {
538
+ max-inline-size: var(--cg-page-narrow);
539
+ margin-inline: auto;
540
+ }
541
+
542
+ .cg-mailbag__item {
543
+ border-block-start: 1px solid var(--cg-rule);
544
+ }
545
+
546
+ .cg-mailbag__item:last-child {
547
+ border-block-end: 1px solid var(--cg-rule);
548
+ }
549
+
550
+ .cg-mailbag__question {
551
+ display: flex;
552
+ align-items: baseline;
553
+ gap: var(--cg-s4);
554
+ padding-block: var(--cg-s5);
555
+ font-family: var(--cogenta-font-serif);
556
+ font-weight: var(--cg-weight-semibold);
557
+ font-size: var(--cg-text-lg);
558
+ cursor: pointer;
559
+ list-style: none;
560
+ transition: color var(--cg-duration) var(--cg-ease);
561
+ }
562
+
563
+ .cg-mailbag__question::-webkit-details-marker {
564
+ display: none;
565
+ }
566
+
567
+ .cg-mailbag__number {
568
+ flex: none;
569
+ color: var(--cg-accent);
570
+ font-size: var(--cg-text-sm);
571
+ font-variant-numeric: tabular-nums;
572
+ }
573
+
574
+ .cg-mailbag__question-text {
575
+ flex: 1;
576
+ }
577
+
578
+ .cg-mailbag__question::after {
579
+ content: "+";
580
+ flex: none;
581
+ margin-inline-start: auto;
582
+ color: var(--cg-accent);
583
+ font-family: var(--cogenta-font-serif);
584
+ font-size: var(--cg-text-xl);
585
+ line-height: 1;
586
+ transition: transform var(--cg-duration) var(--cg-ease);
587
+ }
588
+
589
+ .cg-mailbag__details[open] .cg-mailbag__question::after {
590
+ transform: rotate(45deg);
591
+ }
592
+
593
+ .cg-mailbag__question:hover {
594
+ color: var(--cg-accent);
595
+ }
596
+
597
+ .cg-mailbag__answer {
598
+ padding: 0 0 var(--cg-s6) calc(var(--cg-s4) + var(--cg-s4));
599
+ max-inline-size: var(--cg-measure);
600
+ color: var(--cg-ink-soft);
601
+ font-family: var(--cogenta-font-sans);
602
+ line-height: var(--cg-leading-relaxed);
603
+ }
604
+
605
+ .cg-mailbag__answer > :first-child {
606
+ margin-block-start: 0;
607
+ }
608
+
609
+ .cg-mailbag__answer > :last-child {
610
+ margin-block-end: 0;
611
+ }
612
+
613
+ /* --- stats: by the numbers ------------------------------------------------ */
614
+
615
+ .cg-figures__items {
616
+ display: grid;
617
+ gap: 0 var(--cg-s10);
618
+ grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
619
+ margin: 0;
620
+ padding-block: var(--cg-s8);
621
+ border-block: 3px double var(--cg-rule-heavy);
622
+ }
623
+
624
+ .cg-figures__item {
625
+ display: flex;
626
+ flex-direction: column-reverse;
627
+ gap: var(--cg-s2);
628
+ padding-inline-start: var(--cg-s6);
629
+ border-inline-start: 1px solid var(--cg-rule-soft);
630
+ }
631
+
632
+ .cg-figures__item:first-child {
633
+ border-inline-start: 0;
634
+ padding-inline-start: 0;
635
+ }
636
+
637
+ .cg-figures__value {
638
+ display: flex;
639
+ align-items: baseline;
640
+ gap: var(--cg-s1);
641
+ margin: 0;
642
+ color: var(--cg-accent);
643
+ font-family: var(--cogenta-font-serif);
644
+ font-size: var(--cg-text-3xl);
645
+ font-weight: var(--cg-weight-black);
646
+ line-height: var(--cg-leading-tight);
647
+ font-variant-numeric: tabular-nums;
648
+ }
649
+
650
+ .cg-figures__unit {
651
+ font-family: var(--cogenta-font-sans);
652
+ font-size: var(--cg-text-lg);
653
+ font-weight: var(--cg-weight-medium);
654
+ color: var(--cg-ink-soft);
655
+ }
656
+
657
+ .cg-figures__label {
658
+ color: var(--cg-ink-faint);
659
+ font-family: var(--cogenta-font-sans);
660
+ font-size: var(--cg-text-xs);
661
+ font-weight: var(--cg-weight-semibold);
662
+ letter-spacing: var(--cg-tracking-wide);
663
+ text-transform: uppercase;
664
+ }
665
+
666
+ /* --- logos: the press strip ------------------------------------------------ */
667
+
668
+ .cg-press__title {
669
+ text-align: center;
670
+ }
671
+
672
+ .cg-press__items {
673
+ display: flex;
674
+ flex-wrap: wrap;
675
+ justify-content: center;
676
+ align-items: center;
677
+ }
678
+
679
+ .cg-press__item {
680
+ padding-inline: var(--cg-s8);
681
+ border-inline-start: 1px solid var(--cg-rule-soft);
682
+ }
683
+
684
+ .cg-press__item:first-child {
685
+ border-inline-start: 0;
686
+ }
687
+
688
+ .cg-press__link,
689
+ .cg-press__item > img {
690
+ display: inline-flex;
691
+ }
692
+
693
+ .cg-press__image {
694
+ block-size: var(--cg-s10);
695
+ inline-size: auto;
696
+ max-inline-size: 100%;
697
+ object-fit: contain;
698
+ filter: grayscale(1);
699
+ opacity: 0.65;
700
+ transition:
701
+ opacity var(--cg-duration) var(--cg-ease),
702
+ filter var(--cg-duration) var(--cg-ease);
703
+ }
704
+
705
+ .cg-press__item:hover .cg-press__image,
706
+ .cg-press__link:focus-visible .cg-press__image {
707
+ filter: none;
708
+ opacity: 1;
709
+ }
710
+
711
+ /* --- collectionList: the issue's front page --------------------------------
712
+ L25 pro pass: `layout: 'grid'` ("Top stories") is a full-width lead — big
713
+ 16:9 cover, kicker, headline, excerpt — followed by the rest of the
714
+ entries as a 3-column card grid; `layout: 'list'` is a rubric rail of
715
+ compact rows, each with a small square thumbnail when the entry has a
716
+ cover and a numbered index otherwise; `layout: 'carousel'` stays a
717
+ horizontal-scroll row of uniform, image-led frames. */
718
+
719
+ .cg-issue__link {
720
+ color: inherit;
721
+ text-decoration: none;
722
+ }
723
+
724
+ .cg-issue__link:hover {
725
+ color: var(--cg-accent);
726
+ }
727
+
728
+ .cg-issue__kicker,
729
+ .cg-issue__card-eyebrow {
730
+ margin: 0 0 var(--cg-s3);
731
+ color: var(--cg-accent);
732
+ font-family: var(--cogenta-font-sans);
733
+ font-size: var(--cg-text-sm);
734
+ font-weight: var(--cg-weight-bold);
735
+ letter-spacing: var(--cg-tracking-wider);
736
+ text-transform: uppercase;
737
+ }
738
+
739
+ /* --- grid: the lead + a 3-column card grid --------------------------------- */
740
+
741
+ .cg-issue__spread {
742
+ display: grid;
743
+ gap: var(--cg-s12);
744
+ }
745
+
746
+ .cg-issue__lead {
747
+ display: block;
748
+ }
749
+
750
+ .cg-issue__lead-cover-link {
751
+ display: block;
752
+ }
753
+
754
+ .cg-issue__lead-cover {
755
+ inline-size: 100%;
756
+ aspect-ratio: 16 / 9;
757
+ object-fit: cover;
758
+ box-shadow: var(--cg-elevation-2);
759
+ }
760
+
761
+ .cg-issue__lead-body {
762
+ margin-block-start: var(--cg-s6);
763
+ max-inline-size: var(--cg-page-narrow);
764
+ }
765
+
766
+ .cg-issue__lead-title {
767
+ font-size: var(--cg-text-2xl);
768
+ }
769
+
770
+ @media (min-width: 48rem) {
771
+ .cg-issue__lead-title {
772
+ font-size: var(--cg-text-3xl);
773
+ }
774
+ }
775
+
776
+ .cg-issue__lead-excerpt {
777
+ margin: var(--cg-s4) 0 0;
778
+ max-inline-size: var(--cg-measure);
779
+ color: var(--cg-ink-soft);
780
+ font-family: var(--cogenta-font-sans);
781
+ font-size: var(--cg-text-lg);
782
+ line-height: var(--cg-leading-relaxed);
783
+ text-wrap: pretty;
784
+ }
785
+
786
+ .cg-issue__lead-date {
787
+ display: block;
788
+ margin-block-start: var(--cg-s4);
789
+ color: var(--cg-ink-faint);
790
+ font-family: var(--cogenta-font-sans);
791
+ font-size: var(--cg-text-xs);
792
+ font-weight: var(--cg-weight-semibold);
793
+ letter-spacing: var(--cg-tracking-wide);
794
+ text-transform: uppercase;
795
+ }
796
+
797
+ .cg-issue__cards {
798
+ margin: 0;
799
+ padding: var(--cg-s8) 0 0;
800
+ border-block-start: 3px double var(--cg-rule-heavy);
801
+ list-style: none;
802
+ display: grid;
803
+ gap: var(--cg-s8);
804
+ grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));
805
+ }
806
+
807
+ .cg-issue__card {
808
+ display: flex;
809
+ flex-direction: column;
810
+ }
811
+
812
+ .cg-issue__card-cover-link {
813
+ display: block;
814
+ margin-block-end: var(--cg-s4);
815
+ }
816
+
817
+ .cg-issue__card-cover {
818
+ inline-size: 100%;
819
+ aspect-ratio: 4 / 3;
820
+ object-fit: cover;
821
+ }
822
+
823
+ .cg-issue__card-title {
824
+ font-size: var(--cg-text-md);
825
+ line-height: var(--cg-leading-snug);
826
+ }
827
+
828
+ .cg-issue__card-date {
829
+ display: block;
830
+ margin-block-start: var(--cg-s2);
831
+ color: var(--cg-ink-faint);
832
+ font-family: var(--cogenta-font-sans);
833
+ font-size: var(--cg-text-xs);
834
+ letter-spacing: var(--cg-tracking-wide);
835
+ text-transform: uppercase;
836
+ }
837
+
838
+ /* --- list: the rubric rail -------------------------------------------------- */
839
+
840
+ .cg-issue__rows {
841
+ margin: 0;
842
+ padding: 0;
843
+ list-style: none;
844
+ }
845
+
846
+ .cg-issue__row {
847
+ display: flex;
848
+ align-items: center;
849
+ gap: var(--cg-s4);
850
+ padding-block: var(--cg-s4);
851
+ border-block-end: 1px solid var(--cg-rule-soft);
852
+ }
853
+
854
+ .cg-issue__row:first-child {
855
+ padding-block-start: 0;
856
+ }
857
+
858
+ .cg-issue__row-number {
859
+ flex: none;
860
+ color: var(--cg-accent);
861
+ font-family: var(--cogenta-font-serif);
862
+ font-weight: var(--cg-weight-bold);
863
+ font-size: var(--cg-text-sm);
864
+ }
865
+
866
+ .cg-issue__row-thumb-link {
867
+ flex: none;
868
+ display: block;
869
+ }
870
+
871
+ .cg-issue__row-thumb {
872
+ inline-size: 3.5rem;
873
+ block-size: 3.5rem;
874
+ object-fit: cover;
875
+ }
876
+
877
+ .cg-issue__row-body {
878
+ min-inline-size: 0;
879
+ }
880
+
881
+ .cg-issue__row-title {
882
+ margin: 0 0 var(--cg-s1);
883
+ font-size: var(--cg-text-md);
884
+ line-height: var(--cg-leading-snug);
885
+ }
886
+
887
+ .cg-issue__row-date {
888
+ color: var(--cg-ink-faint);
889
+ font-family: var(--cogenta-font-sans);
890
+ font-size: var(--cg-text-xs);
891
+ letter-spacing: var(--cg-tracking-wide);
892
+ text-transform: uppercase;
893
+ }
894
+
895
+ /* --- carousel: a horizontal-scroll row of uniform, image-led frames ------- */
896
+
897
+ .cg-issue__frames {
898
+ margin: 0;
899
+ padding: 0;
900
+ list-style: none;
901
+ display: grid;
902
+ gap: var(--cg-s8);
903
+ grid-auto-flow: column;
904
+ grid-auto-columns: minmax(16rem, 40%);
905
+ }
906
+
907
+ .cg-issue__frame {
908
+ scroll-snap-align: start;
909
+ }
910
+
911
+ .cg-issue__frame-cover-link {
912
+ display: block;
913
+ margin-block-end: var(--cg-s4);
914
+ }
915
+
916
+ .cg-issue__frame-cover {
917
+ inline-size: 100%;
918
+ aspect-ratio: 3 / 2;
919
+ object-fit: cover;
920
+ }
921
+
922
+ .cg-issue__frame-title {
923
+ font-size: var(--cg-text-lg);
924
+ }
925
+
926
+ .cg-issue__frame-date {
927
+ display: block;
928
+ margin-block-start: var(--cg-s2);
929
+ color: var(--cg-ink-faint);
930
+ font-family: var(--cogenta-font-sans);
931
+ font-size: var(--cg-text-xs);
932
+ letter-spacing: var(--cg-tracking-wide);
933
+ text-transform: uppercase;
934
+ }
935
+
936
+ .cg-issue__frame-excerpt {
937
+ margin: var(--cg-s3) 0 0;
938
+ color: var(--cg-ink-soft);
939
+ font-family: var(--cogenta-font-sans);
940
+ font-size: var(--cg-text-sm);
941
+ line-height: var(--cg-leading-relaxed);
942
+ display: -webkit-box;
943
+ -webkit-box-orient: vertical;
944
+ -webkit-line-clamp: 3;
945
+ line-clamp: 3;
946
+ overflow: hidden;
947
+ }
948
+
949
+ .cg-issue__empty {
950
+ padding: var(--cg-s8);
951
+ border: 1px dashed var(--cg-rule-heavy);
952
+ color: var(--cg-ink-faint);
953
+ text-align: center;
954
+ }
955
+
956
+ /* --- embed: the sidebar note ------------------------------------------------ */
957
+
958
+ .cg-sidenote {
959
+ max-inline-size: var(--cg-measure);
960
+ margin-inline: auto;
961
+ }
962
+
963
+ .cg-sidenote[data-consent="required"],
964
+ .cg-sidenote:has(.cg-sidenote__box) {
965
+ aspect-ratio: auto;
966
+ }
967
+
968
+ .cg-sidenote:not(:has(.cg-sidenote__box)) {
969
+ aspect-ratio: var(--cg-ratio, 16 / 9);
970
+ }
971
+
972
+ .cg-sidenote__frame {
973
+ inline-size: 100%;
974
+ block-size: 100%;
975
+ border: 0;
976
+ }
977
+
978
+ .cg-sidenote__box {
979
+ padding: var(--cg-s8);
980
+ border: 1px dashed var(--cg-rule-heavy);
981
+ background: var(--cg-paper-panel);
982
+ text-align: center;
983
+ }
984
+
985
+ .cg-sidenote__label {
986
+ margin: 0 0 var(--cg-s2);
987
+ color: var(--cg-accent);
988
+ font-family: var(--cogenta-font-sans);
989
+ font-size: var(--cg-text-xs);
990
+ font-weight: var(--cg-weight-bold);
991
+ letter-spacing: var(--cg-tracking-wider);
992
+ text-transform: uppercase;
993
+ }
994
+
995
+ .cg-sidenote__notice {
996
+ margin: 0 0 var(--cg-s5);
997
+ max-inline-size: var(--cg-measure-narrow);
998
+ margin-inline: auto;
999
+ color: var(--cg-ink-soft);
1000
+ font-family: var(--cogenta-font-sans);
1001
+ line-height: var(--cg-leading-relaxed);
1002
+ text-wrap: pretty;
1003
+ }
1004
+
1005
+ .cg-sidenote__link {
1006
+ display: inline-flex;
1007
+ align-items: center;
1008
+ min-block-size: 44px;
1009
+ padding-inline: var(--cg-s2);
1010
+ border-block-end: 2px solid var(--cg-accent);
1011
+ color: var(--cg-accent);
1012
+ font-family: var(--cogenta-font-sans);
1013
+ font-size: var(--cg-text-sm);
1014
+ font-weight: var(--cg-weight-bold);
1015
+ letter-spacing: var(--cg-tracking-wide);
1016
+ text-transform: uppercase;
1017
+ text-decoration: none;
1018
+ transition: color var(--cg-duration) var(--cg-ease);
1019
+ }
1020
+
1021
+ .cg-sidenote__link:hover {
1022
+ color: var(--cg-accent-hover);
1023
+ border-block-end-color: var(--cg-accent-hover);
1024
+ }
1025
+
1026
+ /* --- testimonial: the reader's letter (blocks@2.0, RFC 0001) --------------- */
1027
+
1028
+ /* A boxed letter to the editor, not a second pull quote: `quote` already owns
1029
+ this theme's one "loud" gesture (the giant mark and heavy rule of
1030
+ `cg-pullquote`), so a testimonial is set at body size inside a framed,
1031
+ tinted panel instead — the way a magazine runs its reader-mail column. */
1032
+ .cg-letter {
1033
+ max-inline-size: var(--cg-page-narrow);
1034
+ margin-inline: auto;
1035
+ padding: var(--cg-s8);
1036
+ border: 1px solid var(--cg-rule);
1037
+ border-inline-start: 4px solid var(--cg-accent);
1038
+ background: var(--cg-paper-panel);
1039
+ box-shadow: var(--cg-elevation-1);
1040
+ }
1041
+
1042
+ .cg-letter__quote {
1043
+ margin: 0;
1044
+ color: var(--cg-ink);
1045
+ font-family: var(--cogenta-font-serif);
1046
+ font-style: italic;
1047
+ font-size: var(--cg-text-lg);
1048
+ line-height: var(--cg-leading-relaxed);
1049
+ text-wrap: pretty;
1050
+ }
1051
+
1052
+ .cg-letter__quote > :first-child {
1053
+ margin-block-start: 0;
1054
+ }
1055
+
1056
+ .cg-letter__quote > :last-child {
1057
+ margin-block-end: 0;
1058
+ }
1059
+
1060
+ .cg-letter__byline {
1061
+ display: flex;
1062
+ align-items: center;
1063
+ gap: var(--cg-s3);
1064
+ margin-block-start: var(--cg-s6);
1065
+ padding-block-start: var(--cg-s5);
1066
+ border-block-start: 1px solid var(--cg-rule-soft);
1067
+ font-family: var(--cogenta-font-sans);
1068
+ font-size: var(--cg-text-sm);
1069
+ }
1070
+
1071
+ .cg-letter__avatar {
1072
+ inline-size: var(--cg-s10);
1073
+ block-size: var(--cg-s10);
1074
+ object-fit: cover;
1075
+ box-shadow: var(--cg-ring);
1076
+ }
1077
+
1078
+ .cg-letter__names {
1079
+ display: flex;
1080
+ align-items: baseline;
1081
+ gap: var(--cg-s2);
1082
+ flex-wrap: wrap;
1083
+ }
1084
+
1085
+ .cg-letter__name {
1086
+ color: var(--cg-ink);
1087
+ font-weight: var(--cg-weight-bold);
1088
+ font-size: var(--cg-text-xs);
1089
+ letter-spacing: var(--cg-tracking-wide);
1090
+ text-transform: uppercase;
1091
+ }
1092
+
1093
+ .cg-letter__role {
1094
+ color: var(--cg-ink-faint);
1095
+ }
1096
+
1097
+ .cg-letter__role::before {
1098
+ content: "\2014";
1099
+ margin-inline-end: var(--cg-s2);
1100
+ }
1101
+
1102
+ /* --- pricingTable: the rate card (blocks@2.0, RFC 0001) --------------------- */
1103
+
1104
+ /* A classified-ads rate card: tiers set side by side, separated by the
1105
+ theme's one visible column rule (the same device `hero` and
1106
+ `collectionList` use), rather than a set of raised cards — a print page
1107
+ has no elevation to raise a card off of. */
1108
+ .cg-ratecard__title {
1109
+ text-align: center;
1110
+ }
1111
+
1112
+ .cg-ratecard__tiers {
1113
+ display: grid;
1114
+ gap: var(--cg-s10);
1115
+ padding-block: var(--cg-s8);
1116
+ border-block: 3px double var(--cg-rule-heavy);
1117
+ }
1118
+
1119
+ @media (min-width: 46rem) {
1120
+ .cg-ratecard__tiers {
1121
+ grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
1122
+ gap: 0;
1123
+ }
1124
+
1125
+ .cg-ratecard__tier {
1126
+ padding-inline: var(--cg-s8);
1127
+ border-inline-start: 1px solid var(--cg-rule-soft);
1128
+ }
1129
+
1130
+ .cg-ratecard__tier:first-child {
1131
+ border-inline-start: 0;
1132
+ }
1133
+ }
1134
+
1135
+ .cg-ratecard__tier {
1136
+ padding-block: var(--cg-s2);
1137
+ text-align: center;
1138
+ }
1139
+
1140
+ /* `highlighted` is an editorial signal, not a colour: `data-highlighted`
1141
+ picks up a tint and an inset top rule; `aria-current` (set by the renderer)
1142
+ is what actually announces it. */
1143
+ .cg-ratecard__tier[data-highlighted="true"] {
1144
+ background: var(--cg-accent-tint);
1145
+ box-shadow: inset 0 3px 0 var(--cg-accent);
1146
+ }
1147
+
1148
+ .cg-ratecard__name {
1149
+ margin: 0 0 var(--cg-s2);
1150
+ font-size: var(--cg-text-lg);
1151
+ }
1152
+
1153
+ .cg-ratecard__price {
1154
+ display: flex;
1155
+ align-items: baseline;
1156
+ justify-content: center;
1157
+ gap: var(--cg-s1);
1158
+ margin: 0 0 var(--cg-s5);
1159
+ font-family: var(--cogenta-font-serif);
1160
+ }
1161
+
1162
+ .cg-ratecard__amount {
1163
+ color: var(--cg-accent);
1164
+ font-weight: var(--cg-weight-black);
1165
+ font-size: var(--cg-text-2xl);
1166
+ }
1167
+
1168
+ .cg-ratecard__interval {
1169
+ color: var(--cg-ink-faint);
1170
+ font-family: var(--cogenta-font-sans);
1171
+ font-size: var(--cg-text-sm);
1172
+ }
1173
+
1174
+ .cg-ratecard__features {
1175
+ margin: 0 0 var(--cg-s6);
1176
+ padding: 0;
1177
+ list-style: none;
1178
+ color: var(--cg-ink-soft);
1179
+ font-family: var(--cogenta-font-sans);
1180
+ font-size: var(--cg-text-sm);
1181
+ line-height: var(--cg-leading-relaxed);
1182
+ }
1183
+
1184
+ .cg-ratecard__feature:not(:last-child) {
1185
+ padding-block-end: var(--cg-s1);
1186
+ margin-block-end: var(--cg-s1);
1187
+ border-block-end: 1px solid var(--cg-rule-soft);
1188
+ }
1189
+
1190
+ /* --- accordion: the reference dossier (blocks@2.0, RFC 0001) ---------------- */
1191
+
1192
+ /* Shares `faq`'s `<details>`/`<summary>` mechanics — expanding, keyboard
1193
+ operation and the announced expanded state all come from the browser, at
1194
+ zero bytes of JavaScript — but its own markup and typography, so the two
1195
+ blocks can diverge further later without one depending on the other: a
1196
+ coloured margin rule instead of a numeral, a rotating angle mark instead
1197
+ of a plus sign. */
1198
+ .cg-dossier {
1199
+ max-inline-size: var(--cg-page-narrow);
1200
+ margin-inline: auto;
1201
+ }
1202
+
1203
+ .cg-dossier__entry {
1204
+ border-inline-start: 3px solid var(--cg-rule-soft);
1205
+ padding-inline-start: var(--cg-s5);
1206
+ margin-block-end: var(--cg-s1);
1207
+ transition: border-color var(--cg-duration) var(--cg-ease);
1208
+ }
1209
+
1210
+ .cg-dossier__entry:has(.cg-dossier__details[open]) {
1211
+ border-inline-start-color: var(--cg-accent);
1212
+ }
1213
+
1214
+ .cg-dossier__term {
1215
+ display: flex;
1216
+ align-items: center;
1217
+ gap: var(--cg-s3);
1218
+ padding-block: var(--cg-s4);
1219
+ font-family: var(--cogenta-font-sans);
1220
+ font-weight: var(--cg-weight-semibold);
1221
+ font-size: var(--cg-text-md);
1222
+ letter-spacing: var(--cg-tracking-snug);
1223
+ cursor: pointer;
1224
+ list-style: none;
1225
+ }
1226
+
1227
+ .cg-dossier__term::-webkit-details-marker {
1228
+ display: none;
1229
+ }
1230
+
1231
+ .cg-dossier__term::after {
1232
+ content: "\203A";
1233
+ margin-inline-start: auto;
1234
+ color: var(--cg-accent);
1235
+ font-family: var(--cogenta-font-serif);
1236
+ font-size: var(--cg-text-lg);
1237
+ line-height: 1;
1238
+ transition: transform var(--cg-duration) var(--cg-ease);
1239
+ }
1240
+
1241
+ .cg-dossier__details[open] .cg-dossier__term::after {
1242
+ transform: rotate(90deg);
1243
+ }
1244
+
1245
+ .cg-dossier__definition {
1246
+ padding: 0 0 var(--cg-s5);
1247
+ max-inline-size: var(--cg-measure);
1248
+ color: var(--cg-ink-soft);
1249
+ font-family: var(--cogenta-font-sans);
1250
+ font-size: var(--cg-text-sm);
1251
+ line-height: var(--cg-leading-relaxed);
1252
+ }
1253
+
1254
+ .cg-dossier__definition > :first-child {
1255
+ margin-block-start: 0;
1256
+ }
1257
+
1258
+ .cg-dossier__definition > :last-child {
1259
+ margin-block-end: 0;
1260
+ }
1261
+
1262
+ /* --- statCounter: the circulation tally (blocks@2.0, RFC 0001) -------------- */
1263
+
1264
+ /* Narrower than `stats`'s own `cg-figures` (no `unit`, no column rules): a
1265
+ single running line of figures over a shared baseline rule, the way a
1266
+ masthead prints its circulation and edition counts along one strip. */
1267
+ .cg-tally__items {
1268
+ display: flex;
1269
+ flex-wrap: wrap;
1270
+ gap: var(--cg-s8) var(--cg-s10);
1271
+ margin: 0;
1272
+ padding-block: var(--cg-s5);
1273
+ border-block: 1px solid var(--cg-rule);
1274
+ }
1275
+
1276
+ .cg-tally__item {
1277
+ display: flex;
1278
+ align-items: baseline;
1279
+ gap: var(--cg-s3);
1280
+ }
1281
+
1282
+ .cg-tally__value {
1283
+ margin: 0;
1284
+ color: var(--cg-accent);
1285
+ font-family: var(--cogenta-font-serif);
1286
+ font-weight: var(--cg-weight-black);
1287
+ font-size: var(--cg-text-2xl);
1288
+ line-height: 1;
1289
+ font-variant-numeric: tabular-nums;
1290
+ }
1291
+
1292
+ .cg-tally__label {
1293
+ color: var(--cg-ink-faint);
1294
+ font-family: var(--cogenta-font-sans);
1295
+ font-size: var(--cg-text-xs);
1296
+ font-weight: var(--cg-weight-semibold);
1297
+ letter-spacing: var(--cg-tracking-wide);
1298
+ text-transform: uppercase;
1299
+ }
1300
+
1301
+ /* --- logoStrip: the imprint line (blocks@2.0, RFC 0001) --------------------- */
1302
+
1303
+ /* The lighter-weight "as used by" strip next to `logos`'s own titled, linked
1304
+ press row: no name, no url, no title — a plain band of marks with an
1305
+ optional caption underneath, the way a colophon credits its supporters
1306
+ along the bottom of a masthead page. */
1307
+ .cg-imprint {
1308
+ text-align: center;
1309
+ }
1310
+
1311
+ .cg-imprint__items {
1312
+ display: flex;
1313
+ flex-wrap: wrap;
1314
+ justify-content: center;
1315
+ align-items: center;
1316
+ gap: var(--cg-s8);
1317
+ }
1318
+
1319
+ .cg-imprint__image {
1320
+ block-size: var(--cg-s8);
1321
+ inline-size: auto;
1322
+ max-inline-size: 100%;
1323
+ object-fit: contain;
1324
+ filter: grayscale(1);
1325
+ opacity: 0.55;
1326
+ }
1327
+
1328
+ .cg-imprint__caption {
1329
+ margin-block-start: var(--cg-s4);
1330
+ color: var(--cg-ink-faint);
1331
+ font-family: var(--cogenta-font-sans);
1332
+ font-size: var(--cg-text-xs);
1333
+ font-style: italic;
1334
+ letter-spacing: var(--cg-tracking-wide);
1335
+ }