@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.
Files changed (126) hide show
  1. package/dist/src/index.d.ts +3 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +3 -0
  4. package/dist/src/index.js.map +1 -1
  5. package/dist/src/render/article.d.ts +32 -0
  6. package/dist/src/render/article.d.ts.map +1 -0
  7. package/dist/src/render/article.js +137 -0
  8. package/dist/src/render/article.js.map +1 -0
  9. package/dist/src/render/blocks/accordion.d.ts.map +1 -1
  10. package/dist/src/render/blocks/accordion.js +9 -13
  11. package/dist/src/render/blocks/accordion.js.map +1 -1
  12. package/dist/src/render/blocks/collection-list.d.ts.map +1 -1
  13. package/dist/src/render/blocks/collection-list.js +91 -118
  14. package/dist/src/render/blocks/collection-list.js.map +1 -1
  15. package/dist/src/render/blocks/cta.d.ts +4 -4
  16. package/dist/src/render/blocks/cta.d.ts.map +1 -1
  17. package/dist/src/render/blocks/cta.js +7 -9
  18. package/dist/src/render/blocks/cta.js.map +1 -1
  19. package/dist/src/render/blocks/embed.d.ts.map +1 -1
  20. package/dist/src/render/blocks/embed.js +17 -20
  21. package/dist/src/render/blocks/embed.js.map +1 -1
  22. package/dist/src/render/blocks/faq.d.ts.map +1 -1
  23. package/dist/src/render/blocks/faq.js +12 -11
  24. package/dist/src/render/blocks/faq.js.map +1 -1
  25. package/dist/src/render/blocks/feature-grid.d.ts.map +1 -1
  26. package/dist/src/render/blocks/feature-grid.js +13 -20
  27. package/dist/src/render/blocks/feature-grid.js.map +1 -1
  28. package/dist/src/render/blocks/gallery.d.ts +6 -6
  29. package/dist/src/render/blocks/gallery.d.ts.map +1 -1
  30. package/dist/src/render/blocks/gallery.js +15 -13
  31. package/dist/src/render/blocks/gallery.js.map +1 -1
  32. package/dist/src/render/blocks/hero.d.ts +6 -5
  33. package/dist/src/render/blocks/hero.d.ts.map +1 -1
  34. package/dist/src/render/blocks/hero.js +15 -14
  35. package/dist/src/render/blocks/hero.js.map +1 -1
  36. package/dist/src/render/blocks/logo-strip.d.ts.map +1 -1
  37. package/dist/src/render/blocks/logo-strip.js +8 -11
  38. package/dist/src/render/blocks/logo-strip.js.map +1 -1
  39. package/dist/src/render/blocks/logos.d.ts.map +1 -1
  40. package/dist/src/render/blocks/logos.js +16 -16
  41. package/dist/src/render/blocks/logos.js.map +1 -1
  42. package/dist/src/render/blocks/media-figure.d.ts +8 -8
  43. package/dist/src/render/blocks/media-figure.d.ts.map +1 -1
  44. package/dist/src/render/blocks/media-figure.js +23 -19
  45. package/dist/src/render/blocks/media-figure.js.map +1 -1
  46. package/dist/src/render/blocks/pricing-table.d.ts.map +1 -1
  47. package/dist/src/render/blocks/pricing-table.js +19 -22
  48. package/dist/src/render/blocks/pricing-table.js.map +1 -1
  49. package/dist/src/render/blocks/prose.d.ts +6 -10
  50. package/dist/src/render/blocks/prose.d.ts.map +1 -1
  51. package/dist/src/render/blocks/prose.js +8 -11
  52. package/dist/src/render/blocks/prose.js.map +1 -1
  53. package/dist/src/render/blocks/quote.d.ts +6 -9
  54. package/dist/src/render/blocks/quote.d.ts.map +1 -1
  55. package/dist/src/render/blocks/quote.js +11 -13
  56. package/dist/src/render/blocks/quote.js.map +1 -1
  57. package/dist/src/render/blocks/stat-counter.d.ts.map +1 -1
  58. package/dist/src/render/blocks/stat-counter.js +9 -10
  59. package/dist/src/render/blocks/stat-counter.js.map +1 -1
  60. package/dist/src/render/blocks/stats.d.ts.map +1 -1
  61. package/dist/src/render/blocks/stats.js +9 -12
  62. package/dist/src/render/blocks/stats.js.map +1 -1
  63. package/dist/src/render/blocks/testimonial.d.ts +4 -13
  64. package/dist/src/render/blocks/testimonial.d.ts.map +1 -1
  65. package/dist/src/render/blocks/testimonial.js +7 -15
  66. package/dist/src/render/blocks/testimonial.js.map +1 -1
  67. package/dist/src/render/chrome.d.ts.map +1 -1
  68. package/dist/src/render/chrome.js +109 -97
  69. package/dist/src/render/chrome.js.map +1 -1
  70. package/dist/src/render/layout.d.ts +28 -0
  71. package/dist/src/render/layout.d.ts.map +1 -0
  72. package/dist/src/render/layout.js +72 -0
  73. package/dist/src/render/layout.js.map +1 -0
  74. package/dist/src/render/render-block.d.ts +15 -13
  75. package/dist/src/render/render-block.d.ts.map +1 -1
  76. package/dist/src/render/render-block.js +53 -29
  77. package/dist/src/render/render-block.js.map +1 -1
  78. package/dist/src/render/story.d.ts +41 -0
  79. package/dist/src/render/story.d.ts.map +1 -0
  80. package/dist/src/render/story.js +65 -0
  81. package/dist/src/render/story.js.map +1 -0
  82. package/dist/src/render/term-archive.d.ts +0 -10
  83. package/dist/src/render/term-archive.d.ts.map +1 -1
  84. package/dist/src/render/term-archive.js +42 -19
  85. package/dist/src/render/term-archive.js.map +1 -1
  86. package/dist/src/render/widget-areas.d.ts +12 -0
  87. package/dist/src/render/widget-areas.d.ts.map +1 -0
  88. package/dist/src/render/widget-areas.js +19 -0
  89. package/dist/src/render/widget-areas.js.map +1 -0
  90. package/dist/theme.config.js +2 -2
  91. package/dist/theme.config.js.map +1 -1
  92. package/package.json +5 -5
  93. package/src/index.ts +3 -0
  94. package/src/render/article.ts +239 -0
  95. package/src/render/blocks/accordion.ts +23 -30
  96. package/src/render/blocks/collection-list.ts +161 -225
  97. package/src/render/blocks/cta.ts +19 -13
  98. package/src/render/blocks/embed.ts +40 -36
  99. package/src/render/blocks/faq.ts +31 -36
  100. package/src/render/blocks/feature-grid.ts +26 -36
  101. package/src/render/blocks/gallery.ts +24 -18
  102. package/src/render/blocks/hero.ts +32 -32
  103. package/src/render/blocks/logo-strip.ts +17 -17
  104. package/src/render/blocks/logos.ts +23 -31
  105. package/src/render/blocks/media-figure.ts +36 -20
  106. package/src/render/blocks/pricing-table.ts +29 -34
  107. package/src/render/blocks/prose.ts +13 -13
  108. package/src/render/blocks/quote.ts +24 -24
  109. package/src/render/blocks/stat-counter.ts +16 -24
  110. package/src/render/blocks/stats.ts +14 -24
  111. package/src/render/blocks/testimonial.ts +12 -17
  112. package/src/render/chrome.ts +123 -104
  113. package/src/render/layout.ts +105 -0
  114. package/src/render/render-block.ts +61 -33
  115. package/src/render/story.ts +139 -0
  116. package/src/render/term-archive.ts +111 -58
  117. package/src/render/widget-areas.ts +22 -0
  118. package/src/styles/archive.css +114 -17
  119. package/src/styles/article.css +237 -0
  120. package/src/styles/base.css +848 -591
  121. package/src/styles/blocks.css +903 -921
  122. package/src/styles/stories.css +593 -0
  123. package/src/styles/theme.css +28 -9
  124. package/src/styles/tokens.css +200 -185
  125. package/src/styles/widgets.css +614 -0
  126. package/tokens.json +18 -18
@@ -1,248 +1,170 @@
1
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`.
2
+ * The vocabulary blocks, other than the listings (`stories.css`). Every one of
3
+ * them sits on the twelve columns of `.cg-container`; below 64rem each child
4
+ * takes the whole row and the block arranges itself from there.
5
5
  */
6
6
 
7
7
  /* --------------------------------------------------------------------------
8
- Shared block furniture
8
+ hero: a cover story
9
9
  -------------------------------------------------------------------------- */
10
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 {
11
+ .cg-cover__inner {
12
+ row-gap: var(--cg-s6);
13
+ }
14
+
15
+ .cg-cover__copy {
16
+ display: flex;
17
+ flex-direction: column;
18
+ gap: var(--cg-s4);
19
+ }
20
+
21
+ .cg-cover__kicker {
34
22
  margin: 0;
35
- padding: 0;
36
- list-style: none;
23
+ color: var(--cg-accent);
24
+ font-family: var(--cg-font-ui);
25
+ font-size: var(--cg-text-label);
26
+ font-weight: var(--cg-weight-bold);
27
+ letter-spacing: var(--cg-tracking-caps);
28
+ text-transform: uppercase;
37
29
  }
38
30
 
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);
31
+ .cg-cover__title {
32
+ font-size: var(--cg-size-headline);
33
+ font-weight: var(--cg-weight-semibold);
34
+ line-height: var(--cg-leading-display);
35
+ letter-spacing: var(--cg-tracking-display);
52
36
  }
53
37
 
54
- /* --- hero -------------------------------------------------------------- */
38
+ .cg-cover__standfirst {
39
+ margin: 0;
40
+ max-inline-size: 52ch;
41
+ font-family: var(--cg-font-text);
42
+ font-size: var(--cg-size-standfirst);
43
+ font-style: italic;
44
+ line-height: var(--cg-leading-snug);
45
+ }
55
46
 
56
- .cg-hero {
57
- padding-block-start: var(--cg-s6);
58
- border-block-start: 1px solid var(--cg-rule-soft);
47
+ .cg-cover__copy .cg-actions {
48
+ margin-block-start: var(--cg-s2);
59
49
  }
60
50
 
61
- .cg-hero__grid {
62
- display: grid;
63
- gap: var(--cg-gap-loose);
51
+ .cg-cover__image {
52
+ inline-size: 100%;
53
+ aspect-ratio: 4 / 3;
54
+ object-fit: cover;
64
55
  }
65
56
 
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);
57
+ .cg-cover[data-media="none"] .cg-cover__copy {
58
+ padding-block-end: var(--cg-s6);
59
+ border-block-end: var(--cg-rule) solid var(--cg-line-ink);
60
+ }
61
+
62
+ @media (min-width: 64rem) {
63
+ .cg-cover[data-media="image"] .cg-cover__copy {
64
+ grid-column: 1 / span 5;
65
+ align-self: end;
75
66
  }
76
67
 
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);
68
+ .cg-cover[data-media="image"] .cg-cover__media {
69
+ grid-column: 6 / -1;
83
70
  }
84
71
 
85
- .cg-hero__copy {
86
- grid-column: 1;
72
+ /* Without a picture the cover takes the whole width, so its rule runs the
73
+ page's width like every other rule; the headline keeps its own measure. */
74
+ .cg-cover[data-media="none"] .cg-cover__copy {
75
+ grid-column: 1 / -1;
87
76
  }
88
77
 
89
- .cg-hero__media {
90
- grid-column: 3;
78
+ .cg-cover[data-media="none"] .cg-cover__title {
79
+ max-inline-size: 24ch;
91
80
  }
92
81
  }
93
82
 
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
- }
83
+ /* --------------------------------------------------------------------------
84
+ prose: the reading column, on any page
85
+ -------------------------------------------------------------------------- */
103
86
 
104
- .cg-hero__title {
105
- font-size: var(--cg-text-3xl);
87
+ .cg-prose__body {
88
+ max-inline-size: var(--cg-measure);
89
+ font-size: var(--cg-text-reading);
90
+ line-height: var(--cg-leading-text);
106
91
  }
107
92
 
108
- @media (min-width: 62rem) {
109
- .cg-hero__title {
110
- font-size: calc(var(--cg-text-3xl) * 1.2);
93
+ @media (min-width: 64rem) {
94
+ .cg-prose__body {
95
+ grid-column: var(--cg-col-reading);
111
96
  }
112
97
  }
113
98
 
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);
99
+ .cg-prose__body > * {
100
+ margin-block: 0;
130
101
  }
131
102
 
132
- /* --- prose --------------------------------------------------------------- */
133
-
134
- .cg-prose {
135
- max-inline-size: var(--cg-measure);
136
- margin-inline: auto;
137
- line-height: var(--cg-leading-relaxed);
103
+ .cg-prose__body > * + * {
104
+ margin-block-start: 0.95em;
138
105
  }
139
106
 
140
- .cg-prose > :first-child {
141
- margin-block-start: 0;
107
+ .cg-prose__body :is(h2, h3, h4) {
108
+ font-family: var(--cg-font-display);
109
+ font-weight: var(--cg-weight-bold);
110
+ line-height: var(--cg-leading-heading);
142
111
  }
143
112
 
144
- .cg-prose > :last-child {
145
- margin-block-end: 0;
113
+ .cg-prose__body > :is(h2, h3, h4) {
114
+ margin-block-start: 1.9em;
146
115
  }
147
116
 
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);
117
+ .cg-prose__body > :is(h2, h3, h4) + * {
118
+ margin-block-start: 0.6em;
156
119
  }
157
120
 
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;
121
+ .cg-prose__body > :first-child {
122
+ margin-block-start: 0;
166
123
  }
167
124
 
168
- .cg-prose h2 {
169
- margin-block: var(--cg-s12) var(--cg-s4);
125
+ .cg-prose__body h2 {
170
126
  font-size: var(--cg-text-xl);
171
127
  }
172
128
 
173
- .cg-prose h3 {
174
- margin-block: var(--cg-s10) var(--cg-s3);
129
+ .cg-prose__body h3 {
175
130
  font-size: var(--cg-text-lg);
176
131
  }
177
132
 
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);
133
+ .cg-prose__body h4 {
134
+ font-family: var(--cg-font-ui);
135
+ font-size: var(--cg-text-label);
136
+ letter-spacing: var(--cg-tracking-caps);
182
137
  text-transform: uppercase;
183
138
  }
184
139
 
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);
140
+ .cg-prose__body :is(ul, ol) {
141
+ padding-inline-start: 1.25em;
194
142
  }
195
143
 
196
- .cg-prose li {
197
- margin-block: var(--cg-s2);
198
- padding-inline-start: var(--cg-s1);
144
+ .cg-prose__body li + li {
145
+ margin-block-start: 0.35em;
199
146
  }
200
147
 
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);
148
+ .cg-prose__body li::marker {
149
+ color: var(--cg-ink-subtle);
208
150
  }
209
151
 
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);
152
+ .cg-prose__body blockquote {
214
153
  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;
154
+ padding-block: var(--cg-s2);
155
+ padding-inline-start: var(--cg-s5);
156
+ border-inline-start: var(--cg-rule-heavy) solid var(--cg-accent);
157
+ font-family: var(--cg-font-display);
158
+ font-size: var(--cg-text-xl);
159
+ font-weight: var(--cg-weight-regular);
160
+ line-height: var(--cg-leading-snug);
230
161
  }
231
162
 
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;
163
+ .cg-prose__body :where(blockquote p) {
164
+ margin: 0;
239
165
  }
240
166
 
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
167
  .cg-prose__figure {
245
- margin-block: var(--cg-s8);
246
168
  margin-inline: 0;
247
169
  }
248
170
 
@@ -251,1085 +173,1145 @@
251
173
  }
252
174
 
253
175
  .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);
176
+ margin-block-start: var(--cg-s2);
177
+ color: var(--cg-ink-muted);
178
+ font-family: var(--cg-font-ui);
259
179
  font-size: var(--cg-text-sm);
180
+ line-height: var(--cg-leading-ui);
181
+ }
182
+
183
+ .cg-prose__rule {
184
+ margin-block: 2em;
260
185
  }
261
186
 
262
- /* --- mediaFigure: a plate ------------------------------------------------- */
187
+ /* --------------------------------------------------------------------------
188
+ mediaFigure: a captioned photograph
189
+ -------------------------------------------------------------------------- */
263
190
 
264
- .cg-plate {
265
- margin-inline: auto;
191
+ .cg-figure__inner {
192
+ row-gap: 0;
266
193
  }
267
194
 
268
- .cg-plate[data-align="start"],
269
- .cg-plate[data-align="end"] {
270
- max-inline-size: calc(var(--cg-measure) / 2);
195
+ .cg-figure__frame {
196
+ margin: 0;
271
197
  }
272
198
 
273
- .cg-plate[data-align="start"] {
274
- float: inline-start;
275
- margin-inline-end: var(--cg-s6);
199
+ .cg-figure__image {
200
+ inline-size: 100%;
201
+ aspect-ratio: var(--cg-ratio, auto);
202
+ object-fit: cover;
276
203
  }
277
204
 
278
- .cg-plate[data-align="end"] {
279
- float: inline-end;
280
- margin-inline-start: var(--cg-s6);
205
+ .cg-figure__caption {
206
+ display: block;
207
+ margin-block-start: var(--cg-s3);
208
+ max-inline-size: 72ch;
209
+ color: var(--cg-ink-muted);
210
+ font-family: var(--cg-font-ui);
211
+ font-size: var(--cg-text-sm);
212
+ line-height: var(--cg-leading-ui);
281
213
  }
282
214
 
283
- .cg-plate[data-align="full"] {
284
- max-inline-size: none;
285
- padding-inline: 0;
215
+ .cg-figure__caption-text {
216
+ color: var(--cg-ink);
286
217
  }
287
218
 
288
- .cg-plate__media {
289
- inline-size: 100%;
290
- aspect-ratio: var(--cg-ratio, auto);
219
+ .cg-figure__caption-text + .cg-figure__credit::before {
220
+ content: "\00a0\00a0";
291
221
  }
292
222
 
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);
223
+ .cg-figure__credit {
224
+ color: var(--cg-ink-muted);
302
225
  font-size: var(--cg-text-xs);
303
- letter-spacing: var(--cg-tracking-wide);
304
- text-transform: uppercase;
226
+ letter-spacing: 0.02em;
305
227
  }
306
228
 
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);
229
+ .cg-figure[data-align="full"] > .cg-figure__inner {
230
+ max-inline-size: none;
231
+ padding-inline: 0;
311
232
  }
312
233
 
313
- .cg-plate__credit::before {
314
- content: "\2014";
315
- margin-inline-end: var(--cg-s2);
234
+ .cg-figure[data-align="full"] .cg-figure__caption {
235
+ padding-inline: var(--cg-gutter);
316
236
  }
317
237
 
318
- /* --- featureGrid: a contents index ---------------------------------------- */
238
+ @media (min-width: 64rem) {
239
+ .cg-figure[data-align="center"] .cg-figure__frame,
240
+ .cg-figure[data-align="center"] .cg-figure__caption {
241
+ grid-column: var(--cg-col-reading);
242
+ }
319
243
 
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;
244
+ .cg-figure[data-align="wide"] .cg-figure__frame,
245
+ .cg-figure[data-align="wide"] .cg-figure__caption {
246
+ grid-column: var(--cg-col-wide);
247
+ }
248
+
249
+ .cg-figure[data-align="start"] .cg-figure__frame,
250
+ .cg-figure[data-align="start"] .cg-figure__caption {
251
+ grid-column: 1 / span 6;
252
+ }
253
+
254
+ .cg-figure[data-align="end"] .cg-figure__frame,
255
+ .cg-figure[data-align="end"] .cg-figure__caption {
256
+ grid-column: 7 / span 6;
257
+ }
327
258
  }
328
259
 
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);
260
+ /* --------------------------------------------------------------------------
261
+ featureGrid: a contents panel
262
+ -------------------------------------------------------------------------- */
263
+
264
+ .cg-contents__items {
265
+ display: grid;
266
+ gap: 0;
267
+ margin: 0;
268
+ padding: 0;
269
+ list-style: none;
334
270
  }
335
271
 
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);
272
+ .cg-contents__item {
273
+ position: relative;
274
+ padding-block: var(--cg-s5);
275
+ border-block-start: var(--cg-rule) solid var(--cg-line);
344
276
  }
345
277
 
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);
278
+ .cg-contents__item:first-child {
279
+ padding-block-start: 0;
280
+ border-block-start: 0;
350
281
  }
351
282
 
352
- .cg-index__link {
353
- color: inherit;
354
- text-decoration: none;
283
+ .cg-contents__title {
284
+ font-size: var(--cg-size-story);
285
+ font-weight: var(--cg-weight-semibold);
355
286
  }
356
287
 
357
- .cg-index__link:hover {
358
- color: var(--cg-accent);
359
- text-decoration: underline;
288
+ .cg-contents__title .cg-arrow-link {
289
+ text-decoration-color: var(--cg-line-strong);
360
290
  }
361
291
 
362
- .cg-index__text {
363
- margin: 0;
364
- color: var(--cg-ink-soft);
365
- font-family: var(--cogenta-font-sans);
292
+ .cg-contents__text {
293
+ margin: var(--cg-s2) 0 0;
294
+ max-inline-size: 40ch;
295
+ color: var(--cg-ink-muted);
366
296
  font-size: var(--cg-text-sm);
367
- line-height: var(--cg-leading-relaxed);
368
- text-wrap: pretty;
297
+ line-height: var(--cg-leading-snug);
369
298
  }
370
299
 
371
- /* --- cta: the subscription page ------------------------------------------- */
300
+ @media (min-width: 48rem) {
301
+ .cg-contents__items {
302
+ grid-template-columns: repeat(2, minmax(0, 1fr));
303
+ column-gap: var(--cg-col-gap);
304
+ row-gap: var(--cg-s8);
305
+ }
306
+
307
+ .cg-contents__item,
308
+ .cg-contents__item:first-child {
309
+ padding-block: 0;
310
+ border-block-start: 0;
311
+ }
372
312
 
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;
313
+ .cg-contents__item:nth-child(2n)::before {
314
+ content: "";
315
+ position: absolute;
316
+ inset-block: 0;
317
+ inset-inline-start: calc(var(--cg-col-gap) / -2);
318
+ inline-size: var(--cg-rule);
319
+ background: var(--cg-line);
320
+ }
378
321
  }
379
322
 
380
- .cg-subscribe__title {
381
- font-size: var(--cg-text-2xl);
323
+ @media (min-width: 64rem) {
324
+ .cg-contents__items {
325
+ grid-template-columns: repeat(var(--cg-contents-columns, 4), minmax(0, 1fr));
326
+ }
327
+
328
+ .cg-contents[data-count="1"] {
329
+ --cg-contents-columns: 1;
330
+ }
331
+
332
+ .cg-contents[data-count="2"] {
333
+ --cg-contents-columns: 2;
334
+ }
335
+
336
+ .cg-contents[data-count="3"] {
337
+ --cg-contents-columns: 3;
338
+ }
339
+
340
+ .cg-contents__item::before {
341
+ content: "";
342
+ position: absolute;
343
+ inset-block: 0;
344
+ inset-inline-start: calc(var(--cg-col-gap) / -2);
345
+ inline-size: var(--cg-rule);
346
+ background: var(--cg-line);
347
+ }
348
+
349
+ .cg-contents__item:nth-child(4n + 1)::before {
350
+ content: none;
351
+ }
382
352
  }
383
353
 
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;
354
+ /* --------------------------------------------------------------------------
355
+ cta: an appeal between two sections
356
+ -------------------------------------------------------------------------- */
357
+
358
+ .cg-appeal__inner {
359
+ position: relative;
360
+ row-gap: var(--cg-s5);
361
+ padding-block-start: var(--cg-s6);
392
362
  }
393
363
 
394
- .cg-subscribe .cg-actions {
395
- justify-content: center;
364
+ /* The double rule over the appeal: heavy, then a hairline. */
365
+ .cg-appeal__inner::before {
366
+ content: "";
367
+ position: absolute;
368
+ inset-inline: var(--cg-gutter);
369
+ inset-block-start: 0;
370
+ block-size: calc(var(--cg-rule-heavy) + var(--cg-rule-strong) + var(--cg-rule));
371
+ border-block-start: var(--cg-rule-heavy) solid var(--cg-line-ink);
372
+ border-block-end: var(--cg-rule) solid var(--cg-line-ink);
396
373
  }
397
374
 
398
- /* --- gallery: a contact sheet ---------------------------------------------- */
375
+ .cg-appeal__title {
376
+ font-size: var(--cg-size-title);
377
+ font-weight: var(--cg-weight-semibold);
378
+ line-height: var(--cg-leading-display);
379
+ letter-spacing: var(--cg-tracking-display);
380
+ }
399
381
 
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));
382
+ .cg-appeal__body {
383
+ display: flex;
384
+ flex-direction: column;
385
+ gap: var(--cg-s5);
405
386
  }
406
387
 
407
- .cg-contactsheet__item {
408
- position: relative;
409
- background: var(--cg-paper);
410
- counter-increment: cg-frame;
388
+ .cg-appeal__text {
389
+ margin: 0;
390
+ max-inline-size: 48ch;
391
+ color: var(--cg-ink);
392
+ font-size: var(--cg-text-reading);
393
+ line-height: var(--cg-leading-snug);
411
394
  }
412
395
 
413
- .cg-contactsheet:not([data-layout="masonry"]) {
414
- counter-reset: cg-frame;
396
+ @media (min-width: 64rem) {
397
+ .cg-appeal__title {
398
+ grid-column: 1 / span 7;
399
+ }
400
+
401
+ .cg-appeal__body {
402
+ grid-column: 8 / -1;
403
+ padding-block-start: var(--cg-s2);
404
+ }
415
405
  }
416
406
 
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;
407
+ /* --------------------------------------------------------------------------
408
+ gallery: a picture page
409
+ -------------------------------------------------------------------------- */
410
+
411
+ .cg-pictures__items {
412
+ display: grid;
413
+ grid-template-columns: repeat(2, minmax(0, 1fr));
414
+ gap: var(--cg-s3);
415
+ margin: 0;
416
+ padding: 0;
417
+ list-style: none;
429
418
  }
430
419
 
431
- .cg-contactsheet__item img {
420
+ .cg-pictures__image {
432
421
  inline-size: 100%;
433
422
  block-size: 100%;
434
- filter: grayscale(0.15) contrast(1.05);
435
- transition: filter var(--cg-duration-slow) var(--cg-ease);
423
+ aspect-ratio: 3 / 2;
424
+ object-fit: cover;
436
425
  }
437
426
 
438
- .cg-contactsheet__item:hover img {
439
- filter: none;
427
+ .cg-pictures[data-layout="grid"] .cg-pictures__item:first-child {
428
+ grid-column: 1 / -1;
440
429
  }
441
430
 
442
- .cg-contactsheet:not([data-layout="masonry"]) .cg-contactsheet__item img {
443
- aspect-ratio: 1;
431
+ @media (min-width: 64rem) {
432
+ .cg-pictures[data-layout="grid"] .cg-pictures__items {
433
+ grid-template-columns: repeat(12, minmax(0, 1fr));
434
+ gap: var(--cg-col-gap);
435
+ }
436
+
437
+ .cg-pictures[data-layout="grid"] .cg-pictures__item {
438
+ grid-column: span 4;
439
+ }
440
+
441
+ .cg-pictures[data-layout="grid"]
442
+ .cg-pictures__items:not([data-count="1"])
443
+ .cg-pictures__item:first-child {
444
+ grid-column: 1 / span 8;
445
+ grid-row: span 2;
446
+ }
447
+
448
+ .cg-pictures[data-layout="grid"] .cg-pictures__item:first-child .cg-pictures__image {
449
+ aspect-ratio: auto;
450
+ }
451
+
452
+ /* After the spread the pictures run in rows of three; a row left with two
453
+ pictures shares the width between them, and a lone last picture takes
454
+ the row, so no row ends on an empty slot. */
455
+ .cg-pictures[data-layout="grid"] .cg-pictures__item:nth-child(3n + 4):nth-last-child(2),
456
+ .cg-pictures[data-layout="grid"]
457
+ .cg-pictures__item:nth-child(3n + 4):nth-last-child(2)
458
+ + .cg-pictures__item {
459
+ grid-column: span 6;
460
+ }
461
+
462
+ .cg-pictures[data-layout="grid"] .cg-pictures__item:nth-child(3n + 4):last-child {
463
+ grid-column: 1 / -1;
464
+ }
465
+
466
+ .cg-pictures[data-layout="grid"] .cg-pictures__items[data-count="1"] .cg-pictures__item {
467
+ grid-column: 1 / -1;
468
+ }
444
469
  }
445
470
 
446
- .cg-contactsheet[data-layout="masonry"] .cg-contactsheet__items {
471
+ .cg-pictures[data-layout="masonry"] .cg-pictures__items {
447
472
  display: block;
448
- columns: 3 12rem;
449
- column-gap: 2px;
450
- background: none;
473
+ columns: 2;
474
+ column-gap: var(--cg-s3);
451
475
  }
452
476
 
453
- .cg-contactsheet[data-layout="masonry"] .cg-contactsheet__item {
477
+ .cg-pictures[data-layout="masonry"] .cg-pictures__item {
454
478
  break-inside: avoid;
455
- margin-block-end: 2px;
479
+ margin-block-end: var(--cg-s3);
480
+ }
481
+
482
+ .cg-pictures[data-layout="masonry"] .cg-pictures__image {
483
+ aspect-ratio: auto;
484
+ }
485
+
486
+ @media (min-width: 64rem) {
487
+ .cg-pictures[data-layout="masonry"] .cg-pictures__items {
488
+ columns: 3;
489
+ column-gap: var(--cg-col-gap);
490
+ }
491
+
492
+ .cg-pictures[data-layout="masonry"] .cg-pictures__item {
493
+ margin-block-end: var(--cg-col-gap);
494
+ }
495
+ }
496
+
497
+ .cg-pictures__viewport {
498
+ overflow-x: auto;
499
+ overscroll-behavior-x: contain;
500
+ scroll-snap-type: x mandatory;
501
+ scrollbar-width: thin;
502
+ }
503
+
504
+ .cg-pictures__viewport:focus-visible {
505
+ outline-offset: -2px;
456
506
  }
457
507
 
458
- .cg-contactsheet[data-layout="carousel"] .cg-contactsheet__items {
508
+ .cg-pictures[data-layout="carousel"] .cg-pictures__items {
459
509
  display: grid;
460
510
  grid-auto-flow: column;
461
- grid-auto-columns: minmax(13rem, 34%);
511
+ grid-auto-columns: min(82vw, 36rem);
512
+ grid-template-columns: none;
513
+ gap: var(--cg-col-gap);
514
+ padding-block-end: var(--cg-s3);
462
515
  }
463
516
 
464
- .cg-contactsheet[data-layout="carousel"] .cg-contactsheet__item {
517
+ .cg-pictures[data-layout="carousel"] .cg-pictures__item {
465
518
  scroll-snap-align: start;
466
519
  }
467
520
 
468
- /* --- quote: the pull quote --------------------------------------------- */
521
+ /* --------------------------------------------------------------------------
522
+ quote: a pull quote
523
+ -------------------------------------------------------------------------- */
469
524
 
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;
525
+ .cg-pullquote__inner {
526
+ row-gap: var(--cg-s4);
527
+ margin-block: 0;
476
528
  }
477
529
 
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;
530
+ .cg-pullquote__quote {
531
+ margin: 0;
532
+ }
533
+
534
+ .cg-pullquote__quote::before {
535
+ content: "";
536
+ display: block;
537
+ inline-size: var(--cg-s12);
538
+ block-size: var(--cg-rule-heavy);
539
+ margin-block-end: var(--cg-s5);
540
+ background: var(--cg-accent);
487
541
  }
488
542
 
489
543
  .cg-pullquote__text {
490
544
  margin: 0;
491
- font-family: var(--cogenta-font-serif);
492
- font-size: var(--cg-text-2xl);
545
+ font-family: var(--cg-font-display);
546
+ font-size: var(--cg-size-quote);
547
+ font-weight: var(--cg-weight-regular);
493
548
  line-height: var(--cg-leading-snug);
494
- letter-spacing: var(--cg-tracking-snug);
495
- text-wrap: balance;
549
+ letter-spacing: -0.01em;
550
+ quotes: "\201C" "\201D";
551
+ }
552
+
553
+ .cg-pullquote__text::before {
554
+ content: open-quote;
555
+ }
556
+
557
+ .cg-pullquote__text::after {
558
+ content: close-quote;
496
559
  }
497
560
 
498
561
  .cg-pullquote__attribution {
499
562
  display: flex;
563
+ flex-wrap: wrap;
500
564
  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);
565
+ gap: var(--cg-s1) var(--cg-s3);
566
+ font-family: var(--cg-font-ui);
505
567
  font-size: var(--cg-text-sm);
568
+ line-height: var(--cg-leading-ui);
506
569
  }
507
570
 
508
571
  .cg-pullquote__avatar {
509
- inline-size: var(--cg-s10);
510
- block-size: var(--cg-s10);
572
+ inline-size: 2.5rem;
573
+ block-size: 2.5rem;
574
+ border-radius: 50%;
511
575
  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
576
  }
521
577
 
522
578
  .cg-pullquote__author {
523
- font-weight: var(--cg-weight-bold);
524
579
  color: var(--cg-ink);
525
- letter-spacing: var(--cg-tracking-wide);
580
+ font-weight: var(--cg-weight-bold);
581
+ letter-spacing: var(--cg-tracking-caps);
526
582
  text-transform: uppercase;
527
- font-size: var(--cg-text-xs);
583
+ font-size: var(--cg-text-label);
528
584
  }
529
585
 
530
- .cg-pullquote__role::before {
531
- content: "\2014";
532
- margin-inline-end: var(--cg-s2);
586
+ .cg-pullquote__role {
587
+ color: var(--cg-ink-muted);
533
588
  }
534
589
 
535
- /* --- faq: the reader mailbag --------------------------------------------- */
590
+ @media (min-width: 64rem) {
591
+ .cg-pullquote__quote,
592
+ .cg-pullquote__attribution {
593
+ grid-column: 3 / span 8;
594
+ }
595
+ }
596
+
597
+ /* --------------------------------------------------------------------------
598
+ faq: a reader's guide, set open
599
+ -------------------------------------------------------------------------- */
536
600
 
537
- .cg-mailbag {
538
- max-inline-size: var(--cg-page-narrow);
539
- margin-inline: auto;
601
+ .cg-guide__inner {
602
+ row-gap: var(--cg-s6);
540
603
  }
541
604
 
542
- .cg-mailbag__item {
543
- border-block-start: 1px solid var(--cg-rule);
605
+ .cg-guide__head {
606
+ padding-block-start: var(--cg-s3);
607
+ border-block-start: var(--cg-rule-heavy) solid var(--cg-line-ink);
544
608
  }
545
609
 
546
- .cg-mailbag__item:last-child {
547
- border-block-end: 1px solid var(--cg-rule);
610
+ .cg-guide__title {
611
+ font-size: var(--cg-size-heading);
612
+ font-weight: var(--cg-weight-bold);
548
613
  }
549
614
 
550
- .cg-mailbag__question {
551
- display: flex;
552
- align-items: baseline;
553
- gap: var(--cg-s4);
615
+ .cg-guide__item {
554
616
  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);
617
+ border-block-start: var(--cg-rule) solid var(--cg-line);
561
618
  }
562
619
 
563
- .cg-mailbag__question::-webkit-details-marker {
564
- display: none;
620
+ .cg-guide__item:last-child {
621
+ padding-block-end: 0;
565
622
  }
566
623
 
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;
624
+ .cg-guide__question {
625
+ font-size: var(--cg-size-story);
626
+ font-weight: var(--cg-weight-semibold);
572
627
  }
573
628
 
574
- .cg-mailbag__question-text {
575
- flex: 1;
629
+ .cg-guide__answer {
630
+ margin-block-start: var(--cg-s2);
631
+ max-inline-size: var(--cg-measure);
632
+ color: var(--cg-ink);
633
+ font-size: var(--cg-text-md);
634
+ line-height: var(--cg-leading-text);
576
635
  }
577
636
 
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);
637
+ .cg-guide__answer p {
638
+ margin: 0;
587
639
  }
588
640
 
589
- .cg-mailbag__details[open] .cg-mailbag__question::after {
590
- transform: rotate(45deg);
641
+ .cg-guide__answer p + p {
642
+ margin-block-start: var(--cg-s3);
591
643
  }
592
644
 
593
- .cg-mailbag__question:hover {
594
- color: var(--cg-accent);
595
- }
645
+ @media (min-width: 64rem) {
646
+ .cg-guide[data-titled="true"] .cg-guide__head {
647
+ grid-column: 1 / span 4;
648
+ }
596
649
 
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
- }
650
+ .cg-guide[data-titled="true"] .cg-guide__items {
651
+ grid-column: 5 / -1;
652
+ border-block-start: var(--cg-rule-heavy) solid var(--cg-line-ink);
653
+ }
604
654
 
605
- .cg-mailbag__answer > :first-child {
606
- margin-block-start: 0;
607
- }
655
+ .cg-guide[data-titled="true"] .cg-guide__item:first-child {
656
+ border-block-start: 0;
657
+ }
608
658
 
609
- .cg-mailbag__answer > :last-child {
610
- margin-block-end: 0;
659
+ .cg-guide[data-titled="false"] .cg-guide__items {
660
+ grid-column: var(--cg-col-reading);
661
+ }
611
662
  }
612
663
 
613
- /* --- stats: by the numbers ------------------------------------------------ */
664
+ /* --------------------------------------------------------------------------
665
+ accordion: collapsible notes on a ruled list
666
+ -------------------------------------------------------------------------- */
614
667
 
615
- .cg-figures__items {
616
- display: grid;
617
- gap: 0 var(--cg-s10);
618
- grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
668
+ .cg-notes__items {
619
669
  margin: 0;
620
- padding-block: var(--cg-s8);
621
- border-block: 3px double var(--cg-rule-heavy);
670
+ padding: 0;
671
+ list-style: none;
672
+ border-block-end: var(--cg-rule) solid var(--cg-line);
622
673
  }
623
674
 
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);
675
+ .cg-notes__item {
676
+ border-block-start: var(--cg-rule) solid var(--cg-line);
630
677
  }
631
678
 
632
- .cg-figures__item:first-child {
633
- border-inline-start: 0;
634
- padding-inline-start: 0;
679
+ .cg-notes__item:first-child {
680
+ border-block-start: 0;
635
681
  }
636
682
 
637
- .cg-figures__value {
683
+ .cg-notes__question {
638
684
  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;
685
+ align-items: center;
686
+ justify-content: space-between;
687
+ gap: var(--cg-s4);
688
+ padding-block: var(--cg-s4);
689
+ color: var(--cg-ink);
690
+ font-family: var(--cg-font-ui);
691
+ font-size: var(--cg-text-ui);
692
+ font-weight: var(--cg-weight-semibold);
693
+ line-height: var(--cg-leading-ui);
694
+ list-style: none;
695
+ cursor: pointer;
696
+ transition: color var(--cg-duration) var(--cg-ease);
648
697
  }
649
698
 
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);
699
+ .cg-notes__question::-webkit-details-marker {
700
+ display: none;
655
701
  }
656
702
 
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;
703
+ .cg-notes__question:hover {
704
+ color: var(--cg-accent);
664
705
  }
665
706
 
666
- /* --- logos: the press strip ------------------------------------------------ */
667
-
668
- .cg-press__title {
669
- text-align: center;
707
+ .cg-notes__mark {
708
+ position: relative;
709
+ flex: none;
710
+ inline-size: 0.8rem;
711
+ block-size: 0.8rem;
670
712
  }
671
713
 
672
- .cg-press__items {
673
- display: flex;
674
- flex-wrap: wrap;
675
- justify-content: center;
676
- align-items: center;
714
+ .cg-notes__mark::before,
715
+ .cg-notes__mark::after {
716
+ content: "";
717
+ position: absolute;
718
+ inset-inline: 0;
719
+ inset-block-start: calc(50% - 1px);
720
+ block-size: var(--cg-rule-strong);
721
+ background: currentColor;
677
722
  }
678
723
 
679
- .cg-press__item {
680
- padding-inline: var(--cg-s8);
681
- border-inline-start: 1px solid var(--cg-rule-soft);
724
+ .cg-notes__mark::after {
725
+ transform: rotate(90deg);
682
726
  }
683
727
 
684
- .cg-press__item:first-child {
685
- border-inline-start: 0;
728
+ .cg-notes__details[open] .cg-notes__mark::after {
729
+ transform: none;
686
730
  }
687
731
 
688
- .cg-press__link,
689
- .cg-press__item > img {
690
- display: inline-flex;
732
+ .cg-notes__answer {
733
+ max-inline-size: var(--cg-measure);
734
+ padding-block-end: var(--cg-s5);
735
+ font-size: var(--cg-text-md);
736
+ line-height: var(--cg-leading-text);
691
737
  }
692
738
 
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);
739
+ .cg-notes__answer p {
740
+ margin: 0;
703
741
  }
704
742
 
705
- .cg-press__item:hover .cg-press__image,
706
- .cg-press__link:focus-visible .cg-press__image {
707
- filter: none;
708
- opacity: 1;
743
+ .cg-notes__answer p + p {
744
+ margin-block-start: var(--cg-s3);
709
745
  }
710
746
 
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
- }
747
+ /* Titled, the notes sit beside their head the way the reader's guide does;
748
+ untitled, they take the reading column. */
749
+ @media (min-width: 64rem) {
750
+ .cg-notes__items {
751
+ grid-column: var(--cg-col-reading);
752
+ }
723
753
 
724
- .cg-issue__link:hover {
725
- color: var(--cg-accent);
726
- }
754
+ .cg-notes__inner > .cg-head {
755
+ grid-column: 1 / span 4;
756
+ }
727
757
 
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;
758
+ .cg-notes__inner > .cg-head + .cg-notes__items {
759
+ grid-column: 5 / -1;
760
+ border-block-start: var(--cg-rule-heavy) solid var(--cg-line-ink);
761
+ }
737
762
  }
738
763
 
739
- /* --- grid: the lead + a 3-column card grid --------------------------------- */
764
+ /* --------------------------------------------------------------------------
765
+ stats: figures in a row between two rules
766
+ -------------------------------------------------------------------------- */
740
767
 
741
- .cg-issue__spread {
768
+ .cg-figures__items {
742
769
  display: grid;
743
- gap: var(--cg-s12);
770
+ grid-template-columns: repeat(2, minmax(0, 1fr));
771
+ column-gap: var(--cg-col-gap);
772
+ row-gap: var(--cg-s6);
773
+ margin: 0;
774
+ padding-block: var(--cg-s5);
775
+ border-block-end: var(--cg-rule) solid var(--cg-line);
744
776
  }
745
777
 
746
- .cg-issue__lead {
747
- display: block;
778
+ .cg-figures__item {
779
+ position: relative;
780
+ display: flex;
781
+ flex-direction: column-reverse;
782
+ justify-content: flex-end;
783
+ gap: var(--cg-s2);
748
784
  }
749
785
 
750
- .cg-issue__lead-cover-link {
751
- display: block;
786
+ .cg-figures__item:nth-child(2n)::before {
787
+ content: "";
788
+ position: absolute;
789
+ inset-block: 0;
790
+ inset-inline-start: calc(var(--cg-col-gap) / -2);
791
+ inline-size: var(--cg-rule);
792
+ background: var(--cg-line);
752
793
  }
753
794
 
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);
795
+ .cg-figures__value {
796
+ display: flex;
797
+ align-items: baseline;
798
+ gap: 0.1em;
799
+ margin: 0;
800
+ font-family: var(--cg-font-display);
801
+ font-size: var(--cg-size-figure);
802
+ font-weight: var(--cg-weight-semibold);
803
+ line-height: 1;
804
+ letter-spacing: -0.01em;
805
+ font-variant-numeric: lining-nums tabular-nums;
759
806
  }
760
807
 
761
- .cg-issue__lead-body {
762
- margin-block-start: var(--cg-s6);
763
- max-inline-size: var(--cg-page-narrow);
808
+ .cg-figures__unit {
809
+ font-size: 0.55em;
810
+ font-weight: var(--cg-weight-regular);
764
811
  }
765
812
 
766
- .cg-issue__lead-title {
767
- font-size: var(--cg-text-2xl);
813
+ .cg-figures__label {
814
+ max-inline-size: 24ch;
815
+ color: var(--cg-ink-muted);
816
+ font-family: var(--cg-font-ui);
817
+ font-size: var(--cg-text-sm);
818
+ line-height: var(--cg-leading-ui);
768
819
  }
769
820
 
770
- @media (min-width: 48rem) {
771
- .cg-issue__lead-title {
772
- font-size: var(--cg-text-3xl);
821
+ @media (min-width: 64rem) {
822
+ .cg-figures__items {
823
+ grid-template-columns: repeat(var(--cg-figures-columns, 4), minmax(0, 1fr));
773
824
  }
774
- }
775
825
 
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
- }
826
+ .cg-figures[data-count="1"] {
827
+ --cg-figures-columns: 1;
828
+ }
785
829
 
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;
830
+ .cg-figures[data-count="2"] {
831
+ --cg-figures-columns: 2;
832
+ }
833
+
834
+ .cg-figures[data-count="3"] {
835
+ --cg-figures-columns: 3;
836
+ }
837
+
838
+ .cg-figures__item::before {
839
+ content: "";
840
+ position: absolute;
841
+ inset-block: 0;
842
+ inset-inline-start: calc(var(--cg-col-gap) / -2);
843
+ inline-size: var(--cg-rule);
844
+ background: var(--cg-line);
845
+ }
846
+
847
+ .cg-figures__item:nth-child(4n + 1)::before {
848
+ content: none;
849
+ }
795
850
  }
796
851
 
797
- .cg-issue__cards {
852
+ /* --------------------------------------------------------------------------
853
+ statCounter: a ruled table of figures
854
+ -------------------------------------------------------------------------- */
855
+
856
+ .cg-tally__rows {
798
857
  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
858
  }
806
859
 
807
- .cg-issue__card {
808
- display: flex;
809
- flex-direction: column;
860
+ .cg-tally__row {
861
+ display: grid;
862
+ grid-template-columns: minmax(0, 2fr) minmax(0, 3fr);
863
+ column-gap: var(--cg-col-gap);
864
+ align-items: baseline;
865
+ padding-block: var(--cg-s4);
866
+ border-block-start: var(--cg-rule) solid var(--cg-line);
810
867
  }
811
868
 
812
- .cg-issue__card-cover-link {
813
- display: block;
814
- margin-block-end: var(--cg-s4);
869
+ .cg-tally__row:first-child {
870
+ padding-block-start: 0;
871
+ border-block-start: 0;
815
872
  }
816
873
 
817
- .cg-issue__card-cover {
818
- inline-size: 100%;
819
- aspect-ratio: 4 / 3;
820
- object-fit: cover;
874
+ .cg-tally__value {
875
+ grid-column: 1;
876
+ grid-row: 1;
877
+ margin: 0;
878
+ font-family: var(--cg-font-display);
879
+ font-size: var(--cg-text-2xl);
880
+ font-weight: var(--cg-weight-semibold);
881
+ line-height: 1;
882
+ letter-spacing: -0.01em;
883
+ font-variant-numeric: lining-nums tabular-nums;
821
884
  }
822
885
 
823
- .cg-issue__card-title {
886
+ .cg-tally__label {
887
+ grid-column: 2;
888
+ grid-row: 1;
889
+ color: var(--cg-ink);
890
+ font-family: var(--cg-font-text);
824
891
  font-size: var(--cg-text-md);
825
892
  line-height: var(--cg-leading-snug);
826
893
  }
827
894
 
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;
895
+ @media (min-width: 64rem) {
896
+ .cg-tally__rows {
897
+ grid-column: 1 / span 8;
898
+ }
899
+
900
+ .cg-tally__row {
901
+ grid-template-columns: repeat(8, minmax(0, 1fr));
902
+ }
903
+
904
+ .cg-tally__value {
905
+ grid-column: 1 / span 3;
906
+ }
907
+
908
+ .cg-tally__label {
909
+ grid-column: 4 / -1;
910
+ }
836
911
  }
837
912
 
838
- /* --- list: the rubric rail -------------------------------------------------- */
913
+ /* --------------------------------------------------------------------------
914
+ logos and logoStrip: marks in one tone
915
+ -------------------------------------------------------------------------- */
839
916
 
840
- .cg-issue__rows {
917
+ .cg-marks__items,
918
+ .cg-credits__items {
919
+ display: grid;
920
+ grid-template-columns: repeat(2, minmax(0, 1fr));
841
921
  margin: 0;
842
922
  padding: 0;
843
923
  list-style: none;
844
924
  }
845
925
 
846
- .cg-issue__row {
926
+ .cg-marks__items {
927
+ border-block: var(--cg-rule) solid var(--cg-line);
928
+ }
929
+
930
+ .cg-marks__item {
847
931
  display: flex;
848
932
  align-items: center;
849
- gap: var(--cg-s4);
850
- padding-block: var(--cg-s4);
851
- border-block-end: 1px solid var(--cg-rule-soft);
933
+ justify-content: center;
934
+ min-block-size: 6rem;
935
+ padding: var(--cg-s4);
936
+ border-block-start: var(--cg-rule) solid var(--cg-line);
852
937
  }
853
938
 
854
- .cg-issue__row:first-child {
855
- padding-block-start: 0;
939
+ .cg-marks__item:nth-child(-n + 2) {
940
+ border-block-start: 0;
856
941
  }
857
942
 
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);
943
+ .cg-marks__item:nth-child(2n) {
944
+ border-inline-start: var(--cg-rule) solid var(--cg-line);
864
945
  }
865
946
 
866
- .cg-issue__row-thumb-link {
867
- flex: none;
868
- display: block;
947
+ .cg-marks__link {
948
+ display: flex;
949
+ align-items: center;
950
+ justify-content: center;
869
951
  }
870
952
 
871
- .cg-issue__row-thumb {
872
- inline-size: 3.5rem;
873
- block-size: 3.5rem;
874
- object-fit: cover;
953
+ .cg-marks__image,
954
+ .cg-credits__image {
955
+ inline-size: auto;
956
+ max-inline-size: 100%;
957
+ block-size: 2.5rem;
958
+ object-fit: contain;
959
+ filter: grayscale(1) brightness(var(--cg-image-brightness));
875
960
  }
876
961
 
877
- .cg-issue__row-body {
878
- min-inline-size: 0;
879
- }
962
+ @media (min-width: 64rem) {
963
+ .cg-marks__items {
964
+ grid-template-columns: repeat(var(--cg-marks-columns, 6), minmax(0, 1fr));
965
+ }
880
966
 
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
- }
967
+ .cg-marks[data-count="3"] {
968
+ --cg-marks-columns: 3;
969
+ }
886
970
 
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
- }
971
+ .cg-marks[data-count="4"] {
972
+ --cg-marks-columns: 4;
973
+ }
894
974
 
895
- /* --- carousel: a horizontal-scroll row of uniform, image-led frames ------- */
975
+ .cg-marks[data-count="5"] {
976
+ --cg-marks-columns: 5;
977
+ }
896
978
 
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%);
979
+ .cg-marks__item,
980
+ .cg-marks__item:nth-child(-n + 2) {
981
+ border-block-start: 0;
982
+ border-inline-start: var(--cg-rule) solid var(--cg-line);
983
+ }
984
+
985
+ .cg-marks__item:first-child {
986
+ border-inline-start: 0;
987
+ }
988
+
989
+ .cg-marks[data-count="6"] .cg-marks__item:nth-child(6n + 1) {
990
+ border-inline-start: 0;
991
+ }
992
+
993
+ .cg-marks[data-count="6"] .cg-marks__item:nth-child(n + 7) {
994
+ border-block-start: var(--cg-rule) solid var(--cg-line);
995
+ }
905
996
  }
906
997
 
907
- .cg-issue__frame {
908
- scroll-snap-align: start;
998
+ .cg-credits__inner {
999
+ position: relative;
1000
+ row-gap: var(--cg-s4);
1001
+ padding-block: var(--cg-s5);
909
1002
  }
910
1003
 
911
- .cg-issue__frame-cover-link {
912
- display: block;
913
- margin-block-end: var(--cg-s4);
1004
+ /* The hairlines above and below the line of credits, on the grid's own
1005
+ edges rather than across its gutters. */
1006
+ .cg-credits__inner::before,
1007
+ .cg-credits__inner::after {
1008
+ content: "";
1009
+ position: absolute;
1010
+ inset-inline: var(--cg-gutter);
1011
+ block-size: var(--cg-rule);
1012
+ background: var(--cg-line);
914
1013
  }
915
1014
 
916
- .cg-issue__frame-cover {
917
- inline-size: 100%;
918
- aspect-ratio: 3 / 2;
919
- object-fit: cover;
1015
+ .cg-credits__inner::before {
1016
+ inset-block-start: 0;
920
1017
  }
921
1018
 
922
- .cg-issue__frame-title {
923
- font-size: var(--cg-text-lg);
1019
+ .cg-credits__inner::after {
1020
+ inset-block-end: 0;
924
1021
  }
925
1022
 
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);
1023
+ .cg-credits__caption {
1024
+ margin: 0;
1025
+ color: var(--cg-ink-muted);
1026
+ font-family: var(--cg-font-ui);
1027
+ font-size: var(--cg-text-label);
1028
+ font-weight: var(--cg-weight-bold);
1029
+ letter-spacing: var(--cg-tracking-caps);
933
1030
  text-transform: uppercase;
934
1031
  }
935
1032
 
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;
1033
+ .cg-credits__items {
1034
+ grid-template-columns: repeat(auto-fit, minmax(7rem, 1fr));
1035
+ align-items: center;
1036
+ gap: var(--cg-s5) var(--cg-col-gap);
954
1037
  }
955
1038
 
956
- /* --- embed: the sidebar note ------------------------------------------------ */
957
-
958
- .cg-sidenote {
959
- max-inline-size: var(--cg-measure);
960
- margin-inline: auto;
1039
+ .cg-credits__item {
1040
+ display: flex;
1041
+ align-items: center;
961
1042
  }
962
1043
 
963
- .cg-sidenote[data-consent="required"],
964
- .cg-sidenote:has(.cg-sidenote__box) {
965
- aspect-ratio: auto;
1044
+ @media (min-width: 64rem) {
1045
+ .cg-credits__inner {
1046
+ align-items: center;
1047
+ }
1048
+
1049
+ .cg-credits__caption {
1050
+ grid-column: 1 / span 3;
1051
+ }
1052
+
1053
+ .cg-credits__items {
1054
+ grid-column: 4 / -1;
1055
+ }
1056
+
1057
+ .cg-credits__inner:not(:has(.cg-credits__caption)) .cg-credits__items {
1058
+ grid-column: 1 / -1;
1059
+ }
966
1060
  }
967
1061
 
968
- .cg-sidenote:not(:has(.cg-sidenote__box)) {
1062
+ /* --------------------------------------------------------------------------
1063
+ embed
1064
+ -------------------------------------------------------------------------- */
1065
+
1066
+ .cg-embed__frame {
1067
+ position: relative;
969
1068
  aspect-ratio: var(--cg-ratio, 16 / 9);
1069
+ max-inline-size: 100%;
970
1070
  }
971
1071
 
972
- .cg-sidenote__frame {
1072
+ .cg-embed__player {
973
1073
  inline-size: 100%;
974
1074
  block-size: 100%;
975
1075
  border: 0;
976
1076
  }
977
1077
 
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;
1078
+ .cg-embed__notice {
1079
+ display: flex;
1080
+ flex-direction: column;
1081
+ justify-content: center;
1082
+ align-items: flex-start;
1083
+ gap: var(--cg-s3);
1084
+ block-size: 100%;
1085
+ padding: var(--cg-s6);
1086
+ border: var(--cg-rule) solid var(--cg-line-strong);
1087
+ border-radius: var(--cg-radius);
983
1088
  }
984
1089
 
985
- .cg-sidenote__label {
986
- margin: 0 0 var(--cg-s2);
1090
+ .cg-embed__label {
1091
+ margin: 0;
987
1092
  color: var(--cg-accent);
988
- font-family: var(--cogenta-font-sans);
989
- font-size: var(--cg-text-xs);
1093
+ font-family: var(--cg-font-ui);
1094
+ font-size: var(--cg-text-label);
990
1095
  font-weight: var(--cg-weight-bold);
991
- letter-spacing: var(--cg-tracking-wider);
1096
+ letter-spacing: var(--cg-tracking-caps);
992
1097
  text-transform: uppercase;
993
1098
  }
994
1099
 
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;
1100
+ .cg-embed__reason {
1101
+ margin: 0;
1102
+ max-inline-size: 44ch;
1103
+ font-family: var(--cg-font-display);
1104
+ font-size: var(--cg-text-lg);
1105
+ font-weight: var(--cg-weight-medium);
1106
+ line-height: var(--cg-leading-snug);
1003
1107
  }
1004
1108
 
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);
1109
+ .cg-embed__link {
1110
+ font-family: var(--cg-font-ui);
1111
+ font-size: var(--cg-text-ui);
1112
+ font-weight: var(--cg-weight-semibold);
1019
1113
  }
1020
1114
 
1021
- .cg-sidenote__link:hover {
1022
- color: var(--cg-accent-hover);
1023
- border-block-end-color: var(--cg-accent-hover);
1115
+ @media (min-width: 64rem) {
1116
+ .cg-embed__frame {
1117
+ grid-column: var(--cg-col-reading);
1118
+ }
1024
1119
  }
1025
1120
 
1026
- /* --- testimonial: the reader's letter (blocks@2.0, RFC 0001) --------------- */
1121
+ /* --------------------------------------------------------------------------
1122
+ testimonial: a reader's letter
1123
+ -------------------------------------------------------------------------- */
1027
1124
 
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);
1125
+ .cg-letter__inner {
1126
+ row-gap: var(--cg-s4);
1127
+ margin-block: 0;
1040
1128
  }
1041
1129
 
1042
1130
  .cg-letter__quote {
1043
1131
  margin: 0;
1044
- color: var(--cg-ink);
1045
- font-family: var(--cogenta-font-serif);
1132
+ padding-block-start: var(--cg-s5);
1133
+ border-block-start: var(--cg-rule) solid var(--cg-line-ink);
1134
+ font-family: var(--cg-font-text);
1135
+ font-size: var(--cg-size-standfirst);
1046
1136
  font-style: italic;
1047
- font-size: var(--cg-text-lg);
1048
- line-height: var(--cg-leading-relaxed);
1049
- text-wrap: pretty;
1137
+ line-height: var(--cg-leading-snug);
1050
1138
  }
1051
1139
 
1052
- .cg-letter__quote > :first-child {
1053
- margin-block-start: 0;
1140
+ .cg-letter__quote p {
1141
+ margin: 0;
1054
1142
  }
1055
1143
 
1056
- .cg-letter__quote > :last-child {
1057
- margin-block-end: 0;
1144
+ .cg-letter__quote p + p {
1145
+ margin-block-start: var(--cg-s3);
1058
1146
  }
1059
1147
 
1060
- .cg-letter__byline {
1148
+ .cg-letter__attribution {
1061
1149
  display: flex;
1062
1150
  align-items: center;
1063
1151
  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);
1152
+ font-family: var(--cg-font-ui);
1068
1153
  font-size: var(--cg-text-sm);
1154
+ line-height: var(--cg-leading-ui);
1069
1155
  }
1070
1156
 
1071
1157
  .cg-letter__avatar {
1072
- inline-size: var(--cg-s10);
1073
- block-size: var(--cg-s10);
1158
+ inline-size: 2.5rem;
1159
+ block-size: 2.5rem;
1160
+ border-radius: 50%;
1074
1161
  object-fit: cover;
1075
- box-shadow: var(--cg-ring);
1076
1162
  }
1077
1163
 
1078
- .cg-letter__names {
1164
+ .cg-letter__who {
1079
1165
  display: flex;
1080
- align-items: baseline;
1081
- gap: var(--cg-s2);
1082
1166
  flex-wrap: wrap;
1167
+ gap: 0 var(--cg-s3);
1083
1168
  }
1084
1169
 
1085
1170
  .cg-letter__name {
1086
1171
  color: var(--cg-ink);
1172
+ font-size: var(--cg-text-label);
1087
1173
  font-weight: var(--cg-weight-bold);
1088
- font-size: var(--cg-text-xs);
1089
- letter-spacing: var(--cg-tracking-wide);
1174
+ letter-spacing: var(--cg-tracking-caps);
1090
1175
  text-transform: uppercase;
1091
1176
  }
1092
1177
 
1093
1178
  .cg-letter__role {
1094
- color: var(--cg-ink-faint);
1179
+ color: var(--cg-ink-muted);
1095
1180
  }
1096
1181
 
1097
- .cg-letter__role::before {
1098
- content: "\2014";
1099
- margin-inline-end: var(--cg-s2);
1182
+ @media (min-width: 64rem) {
1183
+ .cg-letter__quote,
1184
+ .cg-letter__attribution {
1185
+ grid-column: var(--cg-col-reading);
1186
+ }
1100
1187
  }
1101
1188
 
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
- }
1189
+ /* --------------------------------------------------------------------------
1190
+ pricingTable: subscription rates as a ruled table
1191
+ -------------------------------------------------------------------------- */
1111
1192
 
1112
- .cg-ratecard__tiers {
1193
+ .cg-rates__tiers {
1113
1194
  display: grid;
1114
- gap: var(--cg-s10);
1115
- padding-block: var(--cg-s8);
1116
- border-block: 3px double var(--cg-rule-heavy);
1195
+ gap: var(--cg-s8);
1196
+ margin: 0;
1197
+ padding: 0;
1198
+ list-style: none;
1117
1199
  }
1118
1200
 
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
- }
1201
+ .cg-rates__tier {
1202
+ position: relative;
1203
+ display: flex;
1204
+ flex-direction: column;
1205
+ gap: var(--cg-s3);
1206
+ padding-block-start: var(--cg-s4);
1207
+ border-block-start: var(--cg-rule) solid var(--cg-line-ink);
1133
1208
  }
1134
1209
 
1135
- .cg-ratecard__tier {
1136
- padding-block: var(--cg-s2);
1137
- text-align: center;
1210
+ .cg-rates__tier[data-highlighted="true"] {
1211
+ border-block-start: var(--cg-rule-heavy) solid var(--cg-accent);
1212
+ padding-block-start: calc(var(--cg-s4) - var(--cg-rule-heavy) + var(--cg-rule));
1138
1213
  }
1139
1214
 
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);
1215
+ .cg-rates__name {
1216
+ color: var(--cg-ink);
1217
+ font-family: var(--cg-font-ui);
1218
+ font-size: var(--cg-text-label);
1219
+ font-weight: var(--cg-weight-bold);
1220
+ letter-spacing: var(--cg-tracking-caps);
1221
+ text-transform: uppercase;
1146
1222
  }
1147
1223
 
1148
- .cg-ratecard__name {
1149
- margin: 0 0 var(--cg-s2);
1150
- font-size: var(--cg-text-lg);
1224
+ .cg-rates__tier[data-highlighted="true"] .cg-rates__name {
1225
+ color: var(--cg-accent);
1151
1226
  }
1152
1227
 
1153
- .cg-ratecard__price {
1228
+ .cg-rates__price {
1154
1229
  display: flex;
1155
1230
  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);
1231
+ flex-wrap: wrap;
1232
+ gap: 0 var(--cg-s2);
1233
+ margin: 0;
1160
1234
  }
1161
1235
 
1162
- .cg-ratecard__amount {
1163
- color: var(--cg-accent);
1164
- font-weight: var(--cg-weight-black);
1165
- font-size: var(--cg-text-2xl);
1236
+ .cg-rates__amount {
1237
+ font-family: var(--cg-font-display);
1238
+ font-size: var(--cg-size-figure);
1239
+ font-weight: var(--cg-weight-semibold);
1240
+ line-height: 1;
1241
+ letter-spacing: -0.01em;
1242
+ font-variant-numeric: lining-nums tabular-nums;
1166
1243
  }
1167
1244
 
1168
- .cg-ratecard__interval {
1169
- color: var(--cg-ink-faint);
1170
- font-family: var(--cogenta-font-sans);
1245
+ .cg-rates__interval {
1246
+ color: var(--cg-ink-muted);
1247
+ font-family: var(--cg-font-ui);
1171
1248
  font-size: var(--cg-text-sm);
1172
1249
  }
1173
1250
 
1174
- .cg-ratecard__features {
1175
- margin: 0 0 var(--cg-s6);
1251
+ .cg-rates__features {
1252
+ flex: 1;
1253
+ margin: var(--cg-s2) 0 0;
1176
1254
  padding: 0;
1177
1255
  list-style: none;
1178
- color: var(--cg-ink-soft);
1179
- font-family: var(--cogenta-font-sans);
1256
+ font-family: var(--cg-font-text);
1180
1257
  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;
1258
+ line-height: var(--cg-leading-snug);
1201
1259
  }
1202
1260
 
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);
1261
+ .cg-rates__feature {
1262
+ padding-block: var(--cg-s2);
1263
+ border-block-start: var(--cg-rule) solid var(--cg-line);
1208
1264
  }
1209
1265
 
1210
- .cg-dossier__entry:has(.cg-dossier__details[open]) {
1211
- border-inline-start-color: var(--cg-accent);
1266
+ .cg-rates__action {
1267
+ margin-block-start: var(--cg-s4);
1212
1268
  }
1213
1269
 
1214
- .cg-dossier__term {
1270
+ .cg-rates__action .cg-action {
1215
1271
  display: flex;
1216
1272
  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;
1273
+ justify-content: center;
1274
+ inline-size: 100%;
1275
+ padding: var(--cg-s3) var(--cg-s4);
1276
+ text-align: center;
1260
1277
  }
1261
1278
 
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);
1279
+ .cg-rates__action .cg-action[data-emphasis="secondary"] {
1280
+ border: var(--cg-rule) solid var(--cg-line-strong);
1281
+ border-radius: var(--cg-radius-control);
1282
+ text-decoration: none;
1274
1283
  }
1275
1284
 
1276
- .cg-tally__item {
1277
- display: flex;
1278
- align-items: baseline;
1279
- gap: var(--cg-s3);
1285
+ .cg-rates__action .cg-action[data-emphasis="secondary"]::after {
1286
+ content: none;
1280
1287
  }
1281
1288
 
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;
1289
+ .cg-rates__action .cg-action[data-emphasis="secondary"]:hover {
1290
+ border-color: var(--cg-ink);
1291
+ color: var(--cg-ink);
1290
1292
  }
1291
1293
 
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;
1294
+ @media (min-width: 48rem) {
1295
+ .cg-rates__tiers {
1296
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1297
+ column-gap: var(--cg-col-gap);
1298
+ }
1299
1299
  }
1300
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
- }
1301
+ @media (min-width: 64rem) {
1302
+ .cg-rates__tiers {
1303
+ grid-template-columns: repeat(var(--cg-rates-columns, 4), minmax(0, 1fr));
1304
+ }
1310
1305
 
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
- }
1306
+ .cg-rates[data-count="1"] {
1307
+ --cg-rates-columns: 1;
1308
+ }
1318
1309
 
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
- }
1310
+ .cg-rates[data-count="2"] {
1311
+ --cg-rates-columns: 2;
1312
+ }
1327
1313
 
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);
1314
+ .cg-rates[data-count="3"] {
1315
+ --cg-rates-columns: 3;
1316
+ }
1335
1317
  }