@cogenta/theme-docs 0.3.3 → 0.5.4

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 (148) hide show
  1. package/dist/src/index.d.ts +2 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +2 -0
  4. package/dist/src/index.js.map +1 -1
  5. package/dist/src/render/blocks/accordion.d.ts +8 -0
  6. package/dist/src/render/blocks/accordion.d.ts.map +1 -1
  7. package/dist/src/render/blocks/accordion.js +10 -10
  8. package/dist/src/render/blocks/accordion.js.map +1 -1
  9. package/dist/src/render/blocks/collection-list.d.ts +3 -11
  10. package/dist/src/render/blocks/collection-list.d.ts.map +1 -1
  11. package/dist/src/render/blocks/collection-list.js +69 -68
  12. package/dist/src/render/blocks/collection-list.js.map +1 -1
  13. package/dist/src/render/blocks/cta.d.ts +6 -0
  14. package/dist/src/render/blocks/cta.d.ts.map +1 -1
  15. package/dist/src/render/blocks/cta.js +9 -4
  16. package/dist/src/render/blocks/cta.js.map +1 -1
  17. package/dist/src/render/blocks/embed.d.ts.map +1 -1
  18. package/dist/src/render/blocks/embed.js +14 -13
  19. package/dist/src/render/blocks/embed.js.map +1 -1
  20. package/dist/src/render/blocks/faq.d.ts +7 -0
  21. package/dist/src/render/blocks/faq.d.ts.map +1 -1
  22. package/dist/src/render/blocks/faq.js +10 -10
  23. package/dist/src/render/blocks/faq.js.map +1 -1
  24. package/dist/src/render/blocks/feature-grid.d.ts.map +1 -1
  25. package/dist/src/render/blocks/feature-grid.js +19 -19
  26. package/dist/src/render/blocks/feature-grid.js.map +1 -1
  27. package/dist/src/render/blocks/gallery.d.ts +8 -4
  28. package/dist/src/render/blocks/gallery.d.ts.map +1 -1
  29. package/dist/src/render/blocks/gallery.js +19 -13
  30. package/dist/src/render/blocks/gallery.js.map +1 -1
  31. package/dist/src/render/blocks/hero.d.ts +12 -9
  32. package/dist/src/render/blocks/hero.d.ts.map +1 -1
  33. package/dist/src/render/blocks/hero.js +22 -20
  34. package/dist/src/render/blocks/hero.js.map +1 -1
  35. package/dist/src/render/blocks/logo-strip.d.ts +6 -0
  36. package/dist/src/render/blocks/logo-strip.d.ts.map +1 -1
  37. package/dist/src/render/blocks/logo-strip.js +6 -10
  38. package/dist/src/render/blocks/logo-strip.js.map +1 -1
  39. package/dist/src/render/blocks/logos.d.ts +10 -0
  40. package/dist/src/render/blocks/logos.d.ts.map +1 -1
  41. package/dist/src/render/blocks/logos.js +20 -17
  42. package/dist/src/render/blocks/logos.js.map +1 -1
  43. package/dist/src/render/blocks/media-figure.d.ts +0 -6
  44. package/dist/src/render/blocks/media-figure.d.ts.map +1 -1
  45. package/dist/src/render/blocks/media-figure.js +28 -16
  46. package/dist/src/render/blocks/media-figure.js.map +1 -1
  47. package/dist/src/render/blocks/pricing-table.d.ts.map +1 -1
  48. package/dist/src/render/blocks/pricing-table.js +16 -20
  49. package/dist/src/render/blocks/pricing-table.js.map +1 -1
  50. package/dist/src/render/blocks/prose.d.ts +13 -1
  51. package/dist/src/render/blocks/prose.d.ts.map +1 -1
  52. package/dist/src/render/blocks/prose.js +12 -31
  53. package/dist/src/render/blocks/prose.js.map +1 -1
  54. package/dist/src/render/blocks/quote.d.ts +5 -3
  55. package/dist/src/render/blocks/quote.d.ts.map +1 -1
  56. package/dist/src/render/blocks/quote.js +10 -14
  57. package/dist/src/render/blocks/quote.js.map +1 -1
  58. package/dist/src/render/blocks/stat-counter.d.ts +5 -0
  59. package/dist/src/render/blocks/stat-counter.d.ts.map +1 -1
  60. package/dist/src/render/blocks/stat-counter.js +6 -10
  61. package/dist/src/render/blocks/stat-counter.js.map +1 -1
  62. package/dist/src/render/blocks/stats.d.ts +10 -0
  63. package/dist/src/render/blocks/stats.d.ts.map +1 -1
  64. package/dist/src/render/blocks/stats.js +13 -8
  65. package/dist/src/render/blocks/stats.js.map +1 -1
  66. package/dist/src/render/blocks/testimonial.d.ts +4 -5
  67. package/dist/src/render/blocks/testimonial.d.ts.map +1 -1
  68. package/dist/src/render/blocks/testimonial.js +9 -13
  69. package/dist/src/render/blocks/testimonial.js.map +1 -1
  70. package/dist/src/render/chrome.d.ts +36 -1
  71. package/dist/src/render/chrome.d.ts.map +1 -1
  72. package/dist/src/render/chrome.js +122 -80
  73. package/dist/src/render/chrome.js.map +1 -1
  74. package/dist/src/render/doc-index.d.ts +25 -0
  75. package/dist/src/render/doc-index.d.ts.map +1 -0
  76. package/dist/src/render/doc-index.js +49 -0
  77. package/dist/src/render/doc-index.js.map +1 -0
  78. package/dist/src/render/doc-page.d.ts +6 -0
  79. package/dist/src/render/doc-page.d.ts.map +1 -0
  80. package/dist/src/render/doc-page.js +127 -0
  81. package/dist/src/render/doc-page.js.map +1 -0
  82. package/dist/src/render/layout.d.ts +23 -0
  83. package/dist/src/render/layout.d.ts.map +1 -0
  84. package/dist/src/render/layout.js +40 -0
  85. package/dist/src/render/layout.js.map +1 -0
  86. package/dist/src/render/render-block.d.ts +9 -6
  87. package/dist/src/render/render-block.d.ts.map +1 -1
  88. package/dist/src/render/render-block.js +47 -100
  89. package/dist/src/render/render-block.js.map +1 -1
  90. package/dist/src/render/rich-text.d.ts +26 -0
  91. package/dist/src/render/rich-text.d.ts.map +1 -0
  92. package/dist/src/render/rich-text.js +325 -0
  93. package/dist/src/render/rich-text.js.map +1 -0
  94. package/dist/src/render/search.d.ts +15 -0
  95. package/dist/src/render/search.d.ts.map +1 -0
  96. package/dist/src/render/search.js +31 -0
  97. package/dist/src/render/search.js.map +1 -0
  98. package/dist/src/render/strings.d.ts +51 -0
  99. package/dist/src/render/strings.d.ts.map +1 -0
  100. package/dist/src/render/strings.js +60 -0
  101. package/dist/src/render/strings.js.map +1 -0
  102. package/dist/src/render/term-archive.d.ts +5 -5
  103. package/dist/src/render/term-archive.d.ts.map +1 -1
  104. package/dist/src/render/term-archive.js +27 -16
  105. package/dist/src/render/term-archive.js.map +1 -1
  106. package/dist/src/render/widget-areas.d.ts +22 -0
  107. package/dist/src/render/widget-areas.d.ts.map +1 -0
  108. package/dist/src/render/widget-areas.js +29 -0
  109. package/dist/src/render/widget-areas.js.map +1 -0
  110. package/package.json +4 -4
  111. package/src/index.ts +2 -0
  112. package/src/render/blocks/accordion.ts +31 -42
  113. package/src/render/blocks/collection-list.ts +132 -123
  114. package/src/render/blocks/cta.ts +23 -18
  115. package/src/render/blocks/embed.ts +37 -28
  116. package/src/render/blocks/faq.ts +26 -37
  117. package/src/render/blocks/feature-grid.ts +34 -42
  118. package/src/render/blocks/gallery.ts +33 -29
  119. package/src/render/blocks/hero.ts +41 -45
  120. package/src/render/blocks/logo-strip.ts +21 -21
  121. package/src/render/blocks/logos.ts +32 -42
  122. package/src/render/blocks/media-figure.ts +47 -25
  123. package/src/render/blocks/pricing-table.ts +34 -41
  124. package/src/render/blocks/prose.ts +25 -40
  125. package/src/render/blocks/quote.ts +25 -19
  126. package/src/render/blocks/stat-counter.ts +27 -29
  127. package/src/render/blocks/stats.ts +35 -32
  128. package/src/render/blocks/testimonial.ts +18 -19
  129. package/src/render/chrome.ts +170 -83
  130. package/src/render/doc-index.ts +65 -0
  131. package/src/render/doc-page.ts +303 -0
  132. package/src/render/layout.ts +73 -0
  133. package/src/render/render-block.ts +67 -191
  134. package/src/render/rich-text.ts +446 -0
  135. package/src/render/search.ts +41 -0
  136. package/src/render/strings.ts +67 -0
  137. package/src/render/term-archive.ts +62 -38
  138. package/src/render/widget-areas.ts +33 -0
  139. package/src/styles/archive.css +21 -27
  140. package/src/styles/base.css +438 -838
  141. package/src/styles/blocks.css +658 -916
  142. package/src/styles/chrome.css +439 -0
  143. package/src/styles/docs.css +404 -0
  144. package/src/styles/rich.css +337 -0
  145. package/src/styles/theme.css +28 -23
  146. package/src/styles/tokens.css +209 -215
  147. package/src/styles/widgets.css +890 -0
  148. package/tokens.json +15 -15
@@ -0,0 +1,890 @@
1
+ /*
2
+ * Widgets (contract D `theme@1.6`): the page rail, the bands before and
3
+ * after the content, and the footer columns.
4
+ *
5
+ * The host draws one markup for every theme (`cg-sidebar-layout`: a content
6
+ * column and an `<aside>`); this file sets it on this theme's own grids.
7
+ *
8
+ * On a documentation page the content column already holds a layout of its
9
+ * own: the navigation, the article and "On this page". Adding the sidebar as
10
+ * a fourth column would squeeze the article between three rails, and wrapping
11
+ * the documentation layout in a second two-column grid would push "On this
12
+ * page" away from the right edge. So on a documentation page the wrappers
13
+ * step aside (`display: contents`: they are plain `div`s, no role is lost)
14
+ * and every part is placed on one grid:
15
+ *
16
+ * navigation | article | rail
17
+ *
18
+ * The rail is shared. "On this page" takes its upper, flexible row and stays
19
+ * held in view while the page is read; the widgets take its last row, level
20
+ * with the end of the article, next to "Last updated" and previous/next,
21
+ * which is where a reader who reached the end looks for help and for where
22
+ * to go next. The flexible row absorbs the article's height, so the contents
23
+ * stop being sticky exactly where the widgets begin: the two never overlap,
24
+ * without a script and without guessing either one's height. A page with no
25
+ * contents to list gives the whole rail to the widgets, held in view like the
26
+ * navigation. Between 64rem and 80rem, where this theme has no rail, the
27
+ * widgets follow the article in its column; on a phone they follow the page.
28
+ *
29
+ * Beside search results and an archive the aside is the same rail at the
30
+ * same place, the right edge of the page, so it never moves from one page of
31
+ * the site to another.
32
+ *
33
+ * A widget is set the way the rest of the documentation is: a label in the
34
+ * weight of "On this page", links in muted ink that darken on hover, rows on
35
+ * hairlines, a call as the theme's note, controls as its own search field and
36
+ * buttons. No card, no shadow, no capitals.
37
+ */
38
+
39
+ /* --------------------------------------------------------------------------
40
+ A widget
41
+ -------------------------------------------------------------------------- */
42
+
43
+ .cg-widget-area {
44
+ display: grid;
45
+ row-gap: var(--cd-s8);
46
+ align-content: start;
47
+ }
48
+
49
+ .cg-widget {
50
+ min-inline-size: 0;
51
+ color: var(--cd-ink);
52
+ }
53
+
54
+ .cg-widget__title {
55
+ margin: 0 0 var(--cd-s3);
56
+ color: var(--cd-ink);
57
+ font-family: var(--cd-font-sans);
58
+ font-size: var(--cd-text-label);
59
+ font-weight: var(--cd-weight-semibold);
60
+ line-height: var(--cd-leading-ui);
61
+ letter-spacing: normal;
62
+ text-transform: none;
63
+ }
64
+
65
+ .cg-widget__body {
66
+ color: var(--cd-ink-soft);
67
+ font-size: var(--cd-text-ui);
68
+ line-height: var(--cd-leading-ui);
69
+ }
70
+
71
+ .cg-widget__body :is(ul, ol) {
72
+ margin: 0;
73
+ padding: 0;
74
+ list-style: none;
75
+ }
76
+
77
+ .cg-widget__body p {
78
+ margin: 0;
79
+ }
80
+
81
+ .cg-widget a {
82
+ color: var(--cd-ink-muted);
83
+ text-decoration-line: none;
84
+ text-decoration-thickness: var(--cd-rule);
85
+ text-underline-offset: 0.22em;
86
+ }
87
+
88
+ .cg-widget a:hover {
89
+ color: var(--cd-ink);
90
+ text-decoration-line: underline;
91
+ }
92
+
93
+ .cg-widget [aria-current="page"],
94
+ .cg-widget [aria-current="page"] > a {
95
+ color: var(--cd-link);
96
+ font-weight: var(--cd-weight-medium);
97
+ }
98
+
99
+ .cg-widget__empty {
100
+ color: var(--cd-ink-muted);
101
+ }
102
+
103
+ /* --- lists of links: set like "On this page" -------------------------------- */
104
+
105
+ .cg-widget__links,
106
+ .cg-widget__toc {
107
+ display: grid;
108
+ gap: var(--cd-s1);
109
+ }
110
+
111
+ .cg-widget__links-item,
112
+ .cg-widget__toc-item {
113
+ padding: 0;
114
+ border: 0;
115
+ }
116
+
117
+ .cg-widget__links a,
118
+ .cg-widget__toc a {
119
+ display: block;
120
+ padding-block: calc(var(--cd-s1) * 0.5);
121
+ font-size: var(--cd-text-label);
122
+ line-height: var(--cd-leading-ui);
123
+ }
124
+
125
+ /* On a touch screen, where "On this page" is not shown, the same links get
126
+ a finger's height. */
127
+ @media (max-width: 63.99rem) {
128
+ .cg-widget__links a,
129
+ .cg-widget__toc a {
130
+ padding-block: var(--cd-s2);
131
+ }
132
+ }
133
+
134
+ .cg-widget__links a[target="_blank"]::after {
135
+ content: "\2197" / "";
136
+ display: inline-block;
137
+ margin-inline-start: 0.3em;
138
+ color: var(--cd-ink-muted);
139
+ }
140
+
141
+ .cg-widget__toc-item[data-depth="1"] {
142
+ padding-inline-start: var(--cd-s3);
143
+ }
144
+
145
+ .cg-widget__toc-item[data-depth="2"] {
146
+ padding-inline-start: var(--cd-s6);
147
+ }
148
+
149
+ /* --- rows: entries, terms, archives, comments ------------------------------- */
150
+
151
+ .cg-widget__entry,
152
+ .cg-widget__comment,
153
+ .cg-widget__terms-item,
154
+ .cg-widget__archives-item {
155
+ padding-block: var(--cd-s2);
156
+ border-block-end: var(--cd-rule) solid var(--cd-line);
157
+ }
158
+
159
+ :is(.cg-widget__entries, .cg-widget__comments, .cg-widget__terms, .cg-widget__archives) {
160
+ border-block-start: var(--cd-rule) solid var(--cd-line);
161
+ }
162
+
163
+ .cg-widget__entry {
164
+ display: grid;
165
+ grid-template-columns: minmax(0, 1fr);
166
+ column-gap: var(--cd-s3);
167
+ align-items: start;
168
+ }
169
+
170
+ .cg-widget__entry[data-image="image"] {
171
+ grid-template-columns: 3.5rem minmax(0, 1fr);
172
+ }
173
+
174
+ .cg-widget__entry-image {
175
+ inline-size: 100%;
176
+ aspect-ratio: 1;
177
+ border: var(--cd-rule) solid var(--cd-line);
178
+ border-radius: var(--cd-radius-control);
179
+ background: var(--cd-raised);
180
+ }
181
+
182
+ .cg-widget__entry-text {
183
+ display: grid;
184
+ gap: calc(var(--cd-s1) * 0.5);
185
+ }
186
+
187
+ .cg-widget a.cg-widget__entry-title,
188
+ .cg-widget a.cg-widget__comment-entry,
189
+ .cg-widget span.cg-widget__entry-title {
190
+ color: var(--cd-ink);
191
+ font-weight: var(--cd-weight-medium);
192
+ }
193
+
194
+ .cg-widget a.cg-widget__entry-title:hover,
195
+ .cg-widget a.cg-widget__comment-entry:hover {
196
+ color: var(--cd-link);
197
+ }
198
+
199
+ .cg-widget__entry-date,
200
+ .cg-widget__comment-date,
201
+ .cg-widget__terms-count,
202
+ .cg-widget__archives-count,
203
+ .cg-widget__cloud-count {
204
+ color: var(--cd-ink-muted);
205
+ font-size: var(--cd-text-label);
206
+ font-variant-numeric: tabular-nums;
207
+ }
208
+
209
+ .cg-widget__entry-excerpt,
210
+ .cg-widget__comment-excerpt {
211
+ color: var(--cd-ink-muted);
212
+ font-size: var(--cd-text-label);
213
+ }
214
+
215
+ .cg-widget__comment-author {
216
+ color: var(--cd-ink);
217
+ font-weight: var(--cd-weight-semibold);
218
+ }
219
+
220
+ .cg-widget__comment-excerpt {
221
+ margin-block: var(--cd-s1);
222
+ }
223
+
224
+ .cg-widget__terms-item,
225
+ .cg-widget__archives-item {
226
+ display: flex;
227
+ justify-content: space-between;
228
+ align-items: baseline;
229
+ gap: var(--cd-s3);
230
+ }
231
+
232
+ .cg-widget__terms-item[data-depth="1"] {
233
+ padding-inline-start: var(--cd-s3);
234
+ }
235
+
236
+ .cg-widget__terms-item[data-depth="2"] {
237
+ padding-inline-start: var(--cd-s6);
238
+ }
239
+
240
+ /* --- tags: a run of words, the most used in ink ---------------------------- */
241
+
242
+ .cg-widget__cloud {
243
+ display: flex;
244
+ flex-wrap: wrap;
245
+ gap: var(--cd-s1) var(--cd-s3);
246
+ line-height: var(--cd-leading-ui);
247
+ }
248
+
249
+ .cg-widget__cloud-item {
250
+ display: inline-flex;
251
+ align-items: baseline;
252
+ gap: var(--cd-s1);
253
+ font-size: var(--cd-text-label);
254
+ }
255
+
256
+ .cg-widget__cloud-item:is([data-weight="3"], [data-weight="4"], [data-weight="5"]) a {
257
+ color: var(--cd-ink);
258
+ }
259
+
260
+ .cg-widget__cloud-item:is([data-weight="4"], [data-weight="5"]) {
261
+ font-size: var(--cd-text-ui);
262
+ font-weight: var(--cd-weight-medium);
263
+ }
264
+
265
+ /* --- search, a jump menu, a form: the theme's own controls ----------------- */
266
+
267
+ .cg-widget__search,
268
+ .cg-widget__jump {
269
+ display: flex;
270
+ flex-wrap: wrap;
271
+ gap: var(--cd-s2);
272
+ }
273
+
274
+ .cg-widget__search-input,
275
+ .cg-widget__jump select,
276
+ .cg-widget__form :is(input:not([type="checkbox"]), select, textarea) {
277
+ flex: 1 1 8rem;
278
+ inline-size: 100%;
279
+ min-inline-size: 0;
280
+ min-block-size: 2.375rem;
281
+ padding: var(--cd-s2) var(--cd-s3);
282
+ border: var(--cd-rule) solid var(--cd-line);
283
+ border-radius: var(--cd-radius-control);
284
+ background: var(--cd-surface);
285
+ color: var(--cd-ink);
286
+ font-family: var(--cd-font-sans);
287
+ font-size: var(--cd-text-ui);
288
+ line-height: var(--cd-leading-ui);
289
+ transition:
290
+ border-color var(--cd-duration) var(--cd-ease),
291
+ background-color var(--cd-duration) var(--cd-ease);
292
+ }
293
+
294
+ .cg-widget__search-input {
295
+ appearance: none;
296
+ }
297
+
298
+ .cg-widget__search-input::placeholder {
299
+ color: var(--cd-ink-muted);
300
+ opacity: 1;
301
+ }
302
+
303
+ .cg-widget__search-input:hover,
304
+ .cg-widget__jump select:hover,
305
+ .cg-widget__form :is(input, select, textarea):hover {
306
+ border-color: var(--cd-line-strong);
307
+ }
308
+
309
+ .cg-widget__search-input:focus-visible,
310
+ .cg-widget__jump select:focus-visible,
311
+ .cg-widget__form :is(input, select, textarea):focus-visible {
312
+ border-color: var(--cd-accent);
313
+ outline: var(--cd-rule) solid var(--cd-accent);
314
+ outline-offset: 0;
315
+ background-color: var(--cd-canvas);
316
+ }
317
+
318
+ .cg-widget__form textarea {
319
+ resize: vertical;
320
+ }
321
+
322
+ .cg-widget__search-button,
323
+ .cg-widget__jump-button,
324
+ .cg-widget__form-submit {
325
+ display: inline-flex;
326
+ flex: none;
327
+ align-items: center;
328
+ justify-content: center;
329
+ min-block-size: 2.375rem;
330
+ padding: var(--cd-s2) var(--cd-s4);
331
+ border: 0;
332
+ border-radius: var(--cd-radius-control);
333
+ background: var(--cd-accent);
334
+ color: var(--cd-accent-fg);
335
+ font-family: var(--cd-font-sans);
336
+ font-size: var(--cd-text-ui);
337
+ font-weight: var(--cd-weight-medium);
338
+ line-height: 1.2;
339
+ cursor: pointer;
340
+ transition: background-color var(--cd-duration) var(--cd-ease);
341
+ }
342
+
343
+ .cg-widget__search-button:hover,
344
+ .cg-widget__jump-button:hover,
345
+ .cg-widget__form-submit:hover {
346
+ background: var(--cd-accent-hover);
347
+ }
348
+
349
+ .cg-widget__form {
350
+ display: grid;
351
+ gap: var(--cd-s4);
352
+ }
353
+
354
+ .cg-widget__form .cg-form__field {
355
+ margin: 0;
356
+ }
357
+
358
+ .cg-widget__form label {
359
+ display: block;
360
+ margin-block-end: var(--cd-s1);
361
+ color: var(--cd-ink);
362
+ font-size: var(--cd-text-label);
363
+ font-weight: var(--cd-weight-medium);
364
+ }
365
+
366
+ .cg-widget__form .cg-form__field[data-kind="checkbox"] label {
367
+ display: flex;
368
+ align-items: baseline;
369
+ gap: var(--cd-s2);
370
+ font-weight: var(--cd-weight-regular);
371
+ }
372
+
373
+ .cg-widget__form .cg-form__help {
374
+ margin: var(--cd-s1) 0 0;
375
+ font-size: var(--cd-text-label);
376
+ }
377
+
378
+ .cg-widget__form-submit {
379
+ justify-self: start;
380
+ }
381
+
382
+ /* --- words: a call, about, a quotation ------------------------------------- */
383
+
384
+ /* A call is the theme's note: a rule on the left in the accent, the grey of
385
+ a band behind, the action as the theme's arrow link. */
386
+ .cg-widget__cta {
387
+ display: grid;
388
+ gap: var(--cd-s2);
389
+ justify-items: start;
390
+ padding: var(--cd-s4);
391
+ border-inline-start: var(--cd-rule-strong) solid var(--cd-line-ink);
392
+ border-inline-start-color: var(--cd-accent);
393
+ background: var(--cd-surface);
394
+ }
395
+
396
+ .cg-widget__cta-heading,
397
+ .cg-widget__about-heading {
398
+ margin: 0;
399
+ color: var(--cd-ink);
400
+ font-family: var(--cd-font-sans);
401
+ font-size: var(--cd-text-ui);
402
+ font-weight: var(--cd-weight-semibold);
403
+ line-height: var(--cd-leading-ui);
404
+ text-wrap: balance;
405
+ }
406
+
407
+ .cg-widget__cta-body,
408
+ .cg-widget__about-body {
409
+ color: var(--cd-ink-soft);
410
+ font-size: var(--cd-text-label);
411
+ line-height: var(--cd-leading-lead);
412
+ }
413
+
414
+ .cg-widget__about {
415
+ display: grid;
416
+ gap: var(--cd-s2);
417
+ justify-items: start;
418
+ }
419
+
420
+ .cg-widget__about-image {
421
+ inline-size: 100%;
422
+ aspect-ratio: 3 / 2;
423
+ margin-block-end: var(--cd-s1);
424
+ border: var(--cd-rule) solid var(--cd-line);
425
+ border-radius: var(--cd-radius-frame);
426
+ background: var(--cd-raised);
427
+ }
428
+
429
+ /* Every link out of a widget that names an action is the theme's arrow link:
430
+ the words underlined, the arrow after them, never a lone arrow. */
431
+ .cg-widget a:is(.cg-widget__cta-action, .cg-widget__about-link, .cg-widget__form-link) {
432
+ display: inline-block;
433
+ margin-block-start: var(--cd-s1);
434
+ padding: 0;
435
+ border: 0;
436
+ background: transparent;
437
+ color: var(--cd-ink);
438
+ font-size: var(--cd-text-label);
439
+ font-weight: var(--cd-weight-medium);
440
+ text-decoration-line: underline;
441
+ text-decoration-color: var(--cd-line-strong);
442
+ text-decoration-skip-ink: auto;
443
+ text-underline-offset: 0.3em;
444
+ }
445
+
446
+ .cg-widget a:is(.cg-widget__cta-action, .cg-widget__about-link, .cg-widget__form-link)::after {
447
+ content: "\2192" / "";
448
+ display: inline-block;
449
+ margin-inline-start: 0.35em;
450
+ }
451
+
452
+ .cg-widget a:is(.cg-widget__cta-action, .cg-widget__about-link, .cg-widget__form-link):hover {
453
+ color: var(--cd-ink);
454
+ text-decoration-color: currentColor;
455
+ }
456
+
457
+ .cg-widget__quote {
458
+ margin: 0;
459
+ padding-inline-start: var(--cd-s4);
460
+ border-inline-start: var(--cd-rule-strong) solid var(--cd-line-ink);
461
+ }
462
+
463
+ .cg-widget__quote-text {
464
+ margin: 0;
465
+ font-family: var(--cd-font-sans);
466
+ color: var(--cd-ink);
467
+ font-size: var(--cd-text-ui);
468
+ line-height: var(--cd-leading-lead);
469
+ }
470
+
471
+ .cg-widget__quote-source {
472
+ display: flex;
473
+ flex-wrap: wrap;
474
+ gap: 0 var(--cd-s2);
475
+ margin-block-start: var(--cd-s2);
476
+ font-size: var(--cd-text-label);
477
+ }
478
+
479
+ .cg-widget__quote-name {
480
+ color: var(--cd-ink);
481
+ font-weight: var(--cd-weight-medium);
482
+ }
483
+
484
+ .cg-widget__quote-role {
485
+ color: var(--cd-ink-muted);
486
+ }
487
+
488
+ /* --- pictures: the theme's hairline frame ---------------------------------- */
489
+
490
+ .cg-widget__figure,
491
+ .cg-widget__embed {
492
+ margin: 0;
493
+ }
494
+
495
+ .cg-widget__image,
496
+ .cg-widget__gallery-image,
497
+ .cg-widget__frame {
498
+ inline-size: 100%;
499
+ border: var(--cd-rule) solid var(--cd-line);
500
+ border-radius: var(--cd-radius-frame);
501
+ background: var(--cd-raised);
502
+ }
503
+
504
+ .cg-widget__frame {
505
+ aspect-ratio: 16 / 9;
506
+ }
507
+
508
+ .cg-widget__caption {
509
+ margin-block-start: var(--cd-s2);
510
+ color: var(--cd-ink-muted);
511
+ font-size: var(--cd-text-label);
512
+ line-height: var(--cd-leading-ui);
513
+ }
514
+
515
+ .cg-widget__gallery {
516
+ display: grid;
517
+ grid-template-columns: repeat(3, minmax(0, 1fr));
518
+ gap: var(--cd-s2);
519
+ }
520
+
521
+ .cg-widget__gallery[data-columns="2"] {
522
+ grid-template-columns: repeat(2, minmax(0, 1fr));
523
+ }
524
+
525
+ .cg-widget__gallery[data-columns="4"] {
526
+ grid-template-columns: repeat(4, minmax(0, 1fr));
527
+ }
528
+
529
+ .cg-widget__gallery-image {
530
+ aspect-ratio: 1;
531
+ }
532
+
533
+ /* --- contact, social, calendar --------------------------------------------- */
534
+
535
+ .cg-widget__contact {
536
+ display: grid;
537
+ gap: var(--cd-s2);
538
+ }
539
+
540
+ .cg-widget__contact-line {
541
+ display: flex;
542
+ align-items: start;
543
+ gap: var(--cd-s2);
544
+ overflow-wrap: anywhere;
545
+ }
546
+
547
+ .cg-widget__icon {
548
+ flex: none;
549
+ inline-size: 1rem;
550
+ block-size: 1rem;
551
+ margin-block-start: 0.15em;
552
+ color: var(--cd-ink-muted);
553
+ }
554
+
555
+ .cg-widget__hours {
556
+ display: grid;
557
+ grid-template-columns: auto minmax(0, 1fr);
558
+ gap: var(--cd-s1) var(--cd-s4);
559
+ margin: var(--cd-s2) 0 0;
560
+ font-size: var(--cd-text-label);
561
+ font-variant-numeric: tabular-nums;
562
+ }
563
+
564
+ .cg-widget__hours dt {
565
+ color: var(--cd-ink-muted);
566
+ }
567
+
568
+ .cg-widget__hours dd {
569
+ margin: 0;
570
+ }
571
+
572
+ .cg-widget__social {
573
+ display: flex;
574
+ flex-wrap: wrap;
575
+ gap: var(--cd-s1);
576
+ margin: 0 0 0 calc(var(--cd-s2) * -1);
577
+ }
578
+
579
+ .cg-widget__social a {
580
+ display: inline-grid;
581
+ place-items: center;
582
+ inline-size: 44px;
583
+ block-size: 44px;
584
+ }
585
+
586
+ .cg-widget__social .cg-social__icon {
587
+ inline-size: 1.25rem;
588
+ block-size: 1.25rem;
589
+ }
590
+
591
+ .cg-widget__calendar-table {
592
+ inline-size: 100%;
593
+ border-collapse: collapse;
594
+ font-size: var(--cd-text-label);
595
+ font-variant-numeric: tabular-nums;
596
+ text-align: center;
597
+ }
598
+
599
+ .cg-widget__calendar-table caption {
600
+ padding-block-end: var(--cd-s2);
601
+ color: var(--cd-ink);
602
+ font-weight: var(--cd-weight-medium);
603
+ text-align: start;
604
+ }
605
+
606
+ .cg-widget__calendar-table th {
607
+ padding-block: var(--cd-s1);
608
+ border-block-end: var(--cd-rule) solid var(--cd-line);
609
+ color: var(--cd-ink-muted);
610
+ font-weight: var(--cd-weight-medium);
611
+ }
612
+
613
+ .cg-widget__calendar-table td {
614
+ padding-block: var(--cd-s1);
615
+ color: var(--cd-ink-muted);
616
+ }
617
+
618
+ .cg-widget__calendar-table td[data-posts] a {
619
+ color: var(--cd-link);
620
+ font-weight: var(--cd-weight-semibold);
621
+ }
622
+
623
+ .cg-widget__calendar-nav {
624
+ display: flex;
625
+ justify-content: space-between;
626
+ margin-block-start: var(--cd-s2);
627
+ font-size: var(--cd-text-label);
628
+ }
629
+
630
+ /* --------------------------------------------------------------------------
631
+ The layout beside search results, an archive, a form or a plain page
632
+ -------------------------------------------------------------------------- */
633
+
634
+ .cg-sidebar-layout {
635
+ display: grid;
636
+ grid-template-columns: minmax(0, 1fr);
637
+ gap: 0;
638
+ inline-size: 100%;
639
+ max-inline-size: calc(var(--cd-page) + var(--cd-gutter) * 2);
640
+ margin-inline: auto;
641
+ padding-block: 0;
642
+ padding-inline: var(--cd-gutter);
643
+ }
644
+
645
+ .cg-sidebar-layout__content {
646
+ min-inline-size: 0;
647
+ padding-block-end: calc(var(--cd-section) / 2);
648
+ }
649
+
650
+ .cg-sidebar-layout__content > .cg-search__results {
651
+ margin-block-end: 0;
652
+ }
653
+
654
+ /* Inside the content column the layout already holds the page's edges and
655
+ gutters: a block's container, an archive, the comments and the host's own
656
+ pages drop theirs, so nothing is inset twice. */
657
+ .cg-sidebar-layout__content :is(.cd-container, .cd-archive__inner, .cg-comments) {
658
+ max-inline-size: none;
659
+ padding-inline: 0;
660
+ }
661
+
662
+ .cg-sidebar-layout__content .cd-archive__inner,
663
+ .cg-sidebar-layout__content > .cg-comments {
664
+ max-inline-size: 52rem;
665
+ margin-inline: 0;
666
+ }
667
+
668
+ .cg-sidebar-layout__content
669
+ > :is(
670
+ .cg-page__title,
671
+ .cg-search__form,
672
+ .cg-search__results,
673
+ .cg-search__empty,
674
+ .cg-search__error,
675
+ .cg-form,
676
+ .cg-form__confirmation,
677
+ .cg-form__error
678
+ ) {
679
+ max-inline-size: 52rem;
680
+ margin-inline: 0;
681
+ padding-inline: 0;
682
+ }
683
+
684
+ /* Below the wide breakpoint the rail follows the page, under a hairline, its
685
+ widgets in as many columns as the width holds. */
686
+ .cg-sidebar-layout__aside {
687
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr));
688
+ gap: var(--cd-s8) var(--cd-col-gap);
689
+ padding-block: var(--cd-s8) calc(var(--cd-section) / 2);
690
+ border: 0;
691
+ border-block-start: var(--cd-rule) solid var(--cd-line);
692
+ }
693
+
694
+ @media (min-width: 64rem) {
695
+ .cg-sidebar-layout {
696
+ grid-template-columns: minmax(0, 1fr) var(--cd-toc);
697
+ column-gap: var(--cd-s16);
698
+ }
699
+
700
+ .cg-sidebar-layout__aside {
701
+ grid-template-columns: minmax(0, 1fr);
702
+ align-self: start;
703
+ position: sticky;
704
+ inset-block-start: var(--cd-header-height);
705
+ padding-block: calc(var(--cd-section) * 0.5 + var(--cd-s2)) var(--cd-s12);
706
+ border-block-start: 0;
707
+ }
708
+ }
709
+
710
+ /* --------------------------------------------------------------------------
711
+ The layout on a documentation page: one grid, a shared rail
712
+ -------------------------------------------------------------------------- */
713
+
714
+ /* The rows, named once for every width:
715
+ 1 content-before 2 the article, flexible
716
+ 3 the rail's widgets (level with the end of the article)
717
+ 4 content-after 5 comments 6 the widgets, where there is no rail */
718
+ .cd-doc .cg-sidebar-layout {
719
+ grid-template-columns: minmax(0, 1fr);
720
+ align-items: start;
721
+ max-inline-size: calc(var(--cd-doc-page) + var(--cd-gutter) * 2);
722
+ }
723
+
724
+ .cd-doc .cg-sidebar-layout__content,
725
+ .cd-doc .cg-sidebar-layout .cd-doc__layout {
726
+ display: contents;
727
+ }
728
+
729
+ .cd-doc .cg-sidebar-layout__content > .cg-widget-area:is([data-area="content-before"]) {
730
+ padding-block: var(--cd-s8) 0;
731
+ }
732
+
733
+ .cd-doc .cg-sidebar-layout__content > .cg-widget-area:is([data-area="content-after"]),
734
+ .cd-doc .cg-sidebar-layout__content > .cg-comments {
735
+ max-inline-size: var(--cd-article);
736
+ padding-block: 0 var(--cd-s12);
737
+ }
738
+
739
+ /* On a phone the widgets follow the page, closer to its end than to the
740
+ section rhythm: they are about this page. */
741
+ .cd-doc .cg-sidebar-layout__aside {
742
+ padding-block: var(--cd-s8) var(--cd-s12);
743
+ }
744
+
745
+ .cd-doc .cg-sidebar-layout .cd-doc__article {
746
+ padding-block-end: var(--cd-s12);
747
+ }
748
+
749
+ @media (min-width: 64rem) {
750
+ .cd-doc .cg-sidebar-layout {
751
+ grid-template-columns: var(--cd-sidebar) minmax(0, 1fr);
752
+ grid-template-rows: auto minmax(0, 1fr) auto auto auto auto;
753
+ column-gap: var(--cd-s12);
754
+ }
755
+
756
+ .cd-doc .cg-sidebar-layout .cd-doc__sidebar {
757
+ grid-column: 1;
758
+ grid-row: 1 / -1;
759
+ }
760
+
761
+ .cd-doc .cg-sidebar-layout__content > .cg-widget-area[data-area="content-before"] {
762
+ grid-column: 2;
763
+ grid-row: 1;
764
+ padding-block-start: var(--cd-s10);
765
+ }
766
+
767
+ .cd-doc .cg-sidebar-layout .cd-doc__article {
768
+ grid-column: 2;
769
+ grid-row: 2 / 4;
770
+ padding-block-end: var(--cd-s10);
771
+ }
772
+
773
+ .cd-doc .cg-sidebar-layout__content > .cg-widget-area[data-area="content-after"] {
774
+ grid-column: 2;
775
+ grid-row: 4;
776
+ }
777
+
778
+ .cd-doc .cg-sidebar-layout__content > .cg-comments {
779
+ grid-column: 2;
780
+ grid-row: 5;
781
+ }
782
+
783
+ /* No rail yet: the widgets close the article's column, on its measure. */
784
+ .cd-doc .cg-sidebar-layout__aside {
785
+ position: static;
786
+ grid-column: 2;
787
+ grid-row: 6;
788
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr));
789
+ max-inline-size: var(--cd-article);
790
+ padding-block: var(--cd-s8) var(--cd-s16);
791
+ border-block-start: var(--cd-rule) solid var(--cd-line);
792
+ }
793
+ }
794
+
795
+ @media (min-width: 80rem) {
796
+ .cd-doc .cg-sidebar-layout {
797
+ grid-template-columns: var(--cd-sidebar) minmax(0, 1fr) var(--cd-toc);
798
+ column-gap: var(--cd-s16);
799
+ }
800
+
801
+ .cd-doc .cg-sidebar-layout .cd-doc__article {
802
+ padding-block-end: var(--cd-s20);
803
+ }
804
+
805
+ /* "On this page": the rail's upper rows, down to the widgets. */
806
+ .cd-doc .cg-sidebar-layout .cd-doc__toc {
807
+ grid-column: 3;
808
+ grid-row: 1 / 3;
809
+ }
810
+
811
+ /* The widgets: the rail's last row, their foot level with the end of the
812
+ article. No hairline over them: the rail reads as one column of labels
813
+ and links, like "On this page" above. */
814
+ .cd-doc .cg-sidebar-layout__aside {
815
+ grid-column: 3;
816
+ grid-row: 3;
817
+ grid-template-columns: minmax(0, 1fr);
818
+ align-self: end;
819
+ max-inline-size: none;
820
+ padding-block: var(--cd-s10) var(--cd-s20);
821
+ border-block-start: 0;
822
+ }
823
+
824
+ /* No contents to list: the widgets are the rail, held in view like the
825
+ navigation. */
826
+ .cd-doc[data-toc="false"] .cg-sidebar-layout__aside {
827
+ position: sticky;
828
+ inset-block-start: var(--cd-header-height);
829
+ grid-row: 1 / -1;
830
+ align-self: start;
831
+ padding-block: var(--cd-s10) var(--cd-s12);
832
+ border-block-start: 0;
833
+ }
834
+ }
835
+
836
+ /* --------------------------------------------------------------------------
837
+ A band the host places outside the layout (the home page, a page opening
838
+ on its hero), and the bands before and after the content
839
+ -------------------------------------------------------------------------- */
840
+
841
+ /* Columns of a fixed minimum filled from the start: one widget keeps the
842
+ width of a column instead of stretching a note across the page. */
843
+ .cg-widget-area--placed {
844
+ box-sizing: border-box;
845
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 18rem), 1fr));
846
+ gap: var(--cd-s8) var(--cd-col-gap);
847
+ inline-size: 100%;
848
+ max-inline-size: calc(var(--cd-page) + var(--cd-gutter) * 2);
849
+ margin-inline: auto;
850
+ padding-block: var(--cd-s10);
851
+ padding-inline: var(--cd-gutter);
852
+ border: 0;
853
+ }
854
+
855
+ .cg-sidebar-layout__content > .cg-widget-area--placed {
856
+ grid-template-columns: minmax(0, 1fr);
857
+ max-inline-size: 52rem;
858
+ margin-inline: 0;
859
+ padding-inline: 0;
860
+ }
861
+
862
+ /* --------------------------------------------------------------------------
863
+ The footer's widget columns: between the navigation and the legal line,
864
+ in the footer navigation's own register.
865
+ -------------------------------------------------------------------------- */
866
+
867
+ .cd-footer__widgets {
868
+ display: grid;
869
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr));
870
+ gap: var(--cd-s8) var(--cd-col-gap);
871
+ padding-block-start: var(--cd-s8);
872
+ border-block-start: var(--cd-rule) solid var(--cd-line);
873
+ }
874
+
875
+ .cd-footer__widgets .cg-widget-area {
876
+ row-gap: var(--cd-s6);
877
+ }
878
+
879
+ .cd-footer__widgets .cg-widget__title {
880
+ font-size: var(--cd-text-ui);
881
+ }
882
+
883
+ .cd-footer__widgets .cg-widget__links a {
884
+ padding-block: var(--cd-s1);
885
+ font-size: var(--cd-text-ui);
886
+ }
887
+
888
+ .cd-footer__widgets .cg-widget__cta {
889
+ background: var(--cd-canvas);
890
+ }