@lupinum/ginko-docs 0.4.0-rc.10 → 0.4.0-rc.11

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 (92) hide show
  1. package/README.md +25 -2
  2. package/app/assets/css/component-kit.css +669 -0
  3. package/app/assets/css/prose.css +1 -259
  4. package/app/components/content/ImageZoomDialog.vue +2 -2
  5. package/app/components/mdc/MdcColumn.vue +12 -50
  6. package/app/components/mdc/MdcDropcap.vue +6 -1
  7. package/app/components/mdc/MdcExcerpt.vue +6 -1
  8. package/app/components/mdc/MdcFigure.vue +15 -8
  9. package/app/components/mdc/MdcFlow.vue +23 -0
  10. package/app/components/mdc/MdcLayout.vue +15 -34
  11. package/app/components/mdc/MdcQuiz.vue +24 -21
  12. package/app/components/prose/ProseImg.vue +1 -1
  13. package/app/composables/useDocsText.ts +33 -0
  14. package/app/composables/useProseAppearance.ts +2 -2
  15. package/authoring.generated.ts +348 -0
  16. package/authoring.ts +261 -0
  17. package/component-kit.ts +22 -0
  18. package/dist/agent/AGENTS.md +89 -0
  19. package/dist/agent/manifest.json +502 -0
  20. package/dist/agent/pages/about.md +17 -0
  21. package/dist/agent/pages/blog/editorial-image-systems.md +50 -0
  22. package/dist/agent/pages/blog/navigation-quality.md +50 -0
  23. package/dist/agent/pages/blog/prerender-seo-search.md +48 -0
  24. package/dist/agent/pages/blog/static-docs-pipeline.md +56 -0
  25. package/dist/agent/pages/de/blog/navigationsqualitaet.md +50 -0
  26. package/dist/agent/pages/de/blog/prerender-seo-suche.md +48 -0
  27. package/dist/agent/pages/de/blog/redaktionelle-bildstrecken.md +50 -0
  28. package/dist/agent/pages/de/blog/statische-docs-pipeline.md +56 -0
  29. package/dist/agent/pages/de/dokumentation/anpassung/design-und-overrides.md +227 -0
  30. package/dist/agent/pages/de/dokumentation/anpassung/eigene-komponenten.md +123 -0
  31. package/dist/agent/pages/de/dokumentation/anpassung/startseite.md +156 -0
  32. package/dist/agent/pages/de/dokumentation/anpassung/website-konfigurieren.md +124 -0
  33. package/dist/agent/pages/de/dokumentation/betrieb/bereitstellung.md +152 -0
  34. package/dist/agent/pages/de/dokumentation/betrieb/fehlerbehebung.md +128 -0
  35. package/dist/agent/pages/de/dokumentation/erste-schritte/installation.md +103 -0
  36. package/dist/agent/pages/de/dokumentation/erste-schritte.md +137 -0
  37. package/dist/agent/pages/de/dokumentation/funktionen/agentenlesbare-ausgabe.md +78 -0
  38. package/dist/agent/pages/de/dokumentation/funktionen/blog.md +81 -0
  39. package/dist/agent/pages/de/dokumentation/funktionen/lokalisierung.md +145 -0
  40. package/dist/agent/pages/de/dokumentation/funktionen/seo-und-social-cards.md +128 -0
  41. package/dist/agent/pages/de/dokumentation/funktionen/suche.md +113 -0
  42. package/dist/agent/pages/de/dokumentation/inhalte/inhalte-schreiben.md +104 -0
  43. package/dist/agent/pages/de/dokumentation/inhalte/komponenten-verwenden.md +83 -0
  44. package/dist/agent/pages/de/dokumentation/inhalte/links.md +70 -0
  45. package/dist/agent/pages/de/dokumentation/inhalte/navigation.md +78 -0
  46. package/dist/agent/pages/de/dokumentation/komponenten/api-referenz.md +99 -0
  47. package/dist/agent/pages/de/dokumentation/komponenten/editoriale-layouts.md +139 -0
  48. package/dist/agent/pages/de/dokumentation/komponenten/komponenten-showcase.md +751 -0
  49. package/dist/agent/pages/de/dokumentation/komponenten/magazin-layouts.md +254 -0
  50. package/dist/agent/pages/de/dokumentation/komponenten/mdc-komponenten.md +1059 -0
  51. package/dist/agent/pages/de/dokumentation/konzepte/inhalte-und-routen.md +86 -0
  52. package/dist/agent/pages/de/dokumentation/konzepte/so-funktioniert-ginko-docs.md +74 -0
  53. package/dist/agent/pages/de/dokumentation/referenz/app-config.md +497 -0
  54. package/dist/agent/pages/de/dokumentation/referenz/content-config.md +162 -0
  55. package/dist/agent/pages/de/dokumentation/referenz/frontmatter.md +185 -0
  56. package/dist/agent/pages/de/dokumentation/ressourcen/anforderungen-und-upgrades.md +90 -0
  57. package/dist/agent/pages/de/dokumentation/ressourcen/oeffentliche-exporte.md +108 -0
  58. package/dist/agent/pages/de/ueber-ginko-docs.md +17 -0
  59. package/dist/agent/pages/de.md +17 -0
  60. package/dist/agent/pages/docs/authoring/links.md +70 -0
  61. package/dist/agent/pages/docs/authoring/navigation.md +78 -0
  62. package/dist/agent/pages/docs/authoring/use-components.md +83 -0
  63. package/dist/agent/pages/docs/authoring/write-content.md +104 -0
  64. package/dist/agent/pages/docs/components/api-reference.md +99 -0
  65. package/dist/agent/pages/docs/components/component-showcase.md +751 -0
  66. package/dist/agent/pages/docs/components/editorial-layouts.md +139 -0
  67. package/dist/agent/pages/docs/components/magazine-layouts.md +254 -0
  68. package/dist/agent/pages/docs/components/mdc-components.md +1059 -0
  69. package/dist/agent/pages/docs/concepts/content-and-routes.md +86 -0
  70. package/dist/agent/pages/docs/concepts/how-ginko-docs-works.md +74 -0
  71. package/dist/agent/pages/docs/customization/custom-components.md +123 -0
  72. package/dist/agent/pages/docs/customization/landing-page.md +156 -0
  73. package/dist/agent/pages/docs/customization/site-configuration.md +124 -0
  74. package/dist/agent/pages/docs/customization/theming-and-overrides.md +227 -0
  75. package/dist/agent/pages/docs/features/agent-readable-output.md +78 -0
  76. package/dist/agent/pages/docs/features/blog.md +81 -0
  77. package/dist/agent/pages/docs/features/localization.md +145 -0
  78. package/dist/agent/pages/docs/features/search.md +113 -0
  79. package/dist/agent/pages/docs/features/seo-and-social-cards.md +128 -0
  80. package/dist/agent/pages/docs/getting-started/installation.md +103 -0
  81. package/dist/agent/pages/docs/getting-started.md +137 -0
  82. package/dist/agent/pages/docs/operations/deployment.md +152 -0
  83. package/dist/agent/pages/docs/operations/troubleshooting.md +128 -0
  84. package/dist/agent/pages/docs/reference/app-config.md +497 -0
  85. package/dist/agent/pages/docs/reference/content-config.md +162 -0
  86. package/dist/agent/pages/docs/reference/frontmatter.md +185 -0
  87. package/dist/agent/pages/docs/resources/public-exports.md +108 -0
  88. package/dist/agent/pages/docs/resources/requirements-and-upgrades.md +90 -0
  89. package/dist/agent/pages/index.md +17 -0
  90. package/nuxt.config.ts +5 -1
  91. package/package.json +13 -6
  92. package/tags.ts +72 -10
package/README.md CHANGED
@@ -24,12 +24,12 @@ Use this package when a Nuxt application needs documentation routes, navigation,
24
24
  - Node.js 22.18, 24.11, or 26 and later maintenance releases
25
25
  - Nuxt 4.5.1 or later in the Nuxt 4 line
26
26
  - Vue 3.5.40 or later
27
- - Ginko Content 0.4 prerelease or later in the 0.4 line
27
+ - Ginko Content 1.0.0-beta.9 or later in the 1.x line
28
28
 
29
29
  ## Installation
30
30
 
31
31
  ```bash
32
- pnpm add -D @lupinum/ginko-docs@0.4.0-rc.10 @lupinum/ginko-content@1.0.0-beta.7
32
+ pnpm add -D @lupinum/ginko-docs@0.4.0-rc.11 @lupinum/ginko-content@1.0.0-beta.9
33
33
  ```
34
34
 
35
35
  ```ts
@@ -40,6 +40,29 @@ export default defineNuxtConfig({
40
40
  });
41
41
  ```
42
42
 
43
+ <!-- BEGIN:consumer-onboarding -->
44
+
45
+ ## Use a coding agent
46
+
47
+ A coding agent is a development tool that can inspect and change your project.
48
+
49
+ Copy this task prompt into your application agent:
50
+
51
+ ```text [Agent task]
52
+ Use the installed @lupinum/ginko-docs package to implement my requested feature.
53
+ Read the application's instructions first. Resolve @lupinum/ginko-docs/agent-docs
54
+ from this application directory and read the relevant local pages.
55
+ Preserve the existing AGENTS.md. If it has no equivalent guidance, append
56
+ one short note to resolve installed package docs before integration work
57
+ and after dependency changes. Do not install a consumer skill.
58
+ Check the completed feature using this project's normal commands.
59
+ ```
60
+
61
+ The installed documentation matches the package version. If an older version
62
+ has no documentation export, use its README, types and matching release docs.
63
+
64
+ <!-- END:consumer-onboarding -->
65
+
43
66
  ## Quick start
44
67
 
45
68
  ```ts
@@ -0,0 +1,669 @@
1
+ /* Reading flow owns its measure; figures can use the available track without
2
+ escaping the page or a nested column. Floats never escape this body. */
3
+ .content-flow {
4
+ min-width: 0;
5
+ margin-block: 2rem;
6
+ }
7
+ .content-flow[data-surface="muted"],
8
+ .content-flow[data-surface="tint"] {
9
+ padding: clamp(1.25rem, 4%, 3rem);
10
+ }
11
+ .content-flow[data-surface="muted"] {
12
+ background: var(--muted);
13
+ }
14
+ .content-flow[data-surface="tint"] {
15
+ background: color-mix(in oklab, var(--primary) 10%, var(--background));
16
+ }
17
+ .content-flow-track {
18
+ container: content-flow / inline-size;
19
+ min-width: 0;
20
+ }
21
+ .content-flow-body {
22
+ display: flow-root;
23
+ max-width: 65ch;
24
+ margin-inline: auto;
25
+ overflow-wrap: anywhere;
26
+ }
27
+ .content-flow-body[data-width="wide"] {
28
+ max-width: none;
29
+ }
30
+ .content-flow-body > :first-child {
31
+ margin-block-start: 0;
32
+ }
33
+ .content-flow-body > :last-child {
34
+ margin-block-end: 0;
35
+ }
36
+ .content-flow-body > .content-media[data-bleed="true"] {
37
+ width: 100cqi;
38
+ max-width: none;
39
+ margin-inline: calc((100% - 100cqi) / 2);
40
+ }
41
+ /* A figure inside a column stays inside that column, even on a wide screen. */
42
+ .content-layout-column-inner > .content-media[data-bleed="true"] {
43
+ margin-inline: 0;
44
+ }
45
+ .content-flow-body > :not(p):not(.content-media),
46
+ .content-flow-body > .content-media[data-placement="inline"] {
47
+ clear: both;
48
+ }
49
+ @container content-flow (min-width: 40rem) {
50
+ .content-flow-body > .content-media:is([data-placement="start"], [data-placement="end"]) {
51
+ width: 38%;
52
+ max-width: 20rem;
53
+ margin-block: 0.35rem 1rem;
54
+ }
55
+ .content-flow-body > .content-media[data-placement="start"] {
56
+ float: inline-start;
57
+ margin-inline: 0 1.5rem;
58
+ }
59
+ .content-flow-body > .content-media[data-placement="end"] {
60
+ float: inline-end;
61
+ margin-inline: 1.5rem 0;
62
+ }
63
+ }
64
+ .content-media[data-frame="none"][data-appearance] {
65
+ overflow: visible;
66
+ border: 0;
67
+ border-radius: 0;
68
+ background: transparent;
69
+ box-shadow: none;
70
+ padding: 0;
71
+ }
72
+ .content-media[data-frame="none"][data-appearance] img {
73
+ border: 0;
74
+ border-radius: var(--radius);
75
+ box-shadow: none;
76
+ }
77
+ .content-media[data-frame="none"][data-appearance] figcaption {
78
+ border: 0;
79
+ background: transparent;
80
+ padding: 0.65rem 0 0;
81
+ line-height: 1.5;
82
+ color: var(--muted-foreground);
83
+ }
84
+ .content-media[data-focus="top"] img {
85
+ object-position: top;
86
+ }
87
+ .content-media[data-focus="bottom"] img {
88
+ object-position: bottom;
89
+ }
90
+ .content-media[data-focus="left"] img {
91
+ object-position: left;
92
+ }
93
+ .content-media[data-focus="right"] img {
94
+ object-position: right;
95
+ }
96
+ .content-excerpt[data-size="display"][data-appearance] {
97
+ border: 0;
98
+ border-radius: 0;
99
+ box-shadow: none;
100
+ background: transparent;
101
+ padding: 1.5rem 0;
102
+ margin-block: 2rem;
103
+ }
104
+ .content-excerpt[data-size="display"][data-appearance]::before {
105
+ display: none;
106
+ }
107
+ .content-excerpt[data-size="display"][data-appearance] .content-excerpt-body,
108
+ .content-excerpt[data-size="display"][data-appearance] .content-excerpt-body p {
109
+ color: var(--foreground);
110
+ font-size: clamp(1.5rem, 1.1rem + 1.2vw, 2.25rem);
111
+ font-weight: 500;
112
+ line-height: 1.3;
113
+ letter-spacing: -0.02em;
114
+ text-wrap: pretty;
115
+ }
116
+
117
+ .content-layout {
118
+ container: content-layout / inline-size;
119
+ min-width: 0;
120
+ margin-block: 1.5rem;
121
+ }
122
+ .content-layout-row {
123
+ --layout-align: start;
124
+ --layout-gap: 1rem;
125
+ display: flex;
126
+ flex-direction: column;
127
+ gap: var(--layout-gap);
128
+ width: 100%;
129
+ }
130
+ .content-layout-row[data-align="center"] {
131
+ --layout-align: center;
132
+ }
133
+ .content-layout-row[data-align="end"] {
134
+ --layout-align: end;
135
+ }
136
+ .content-layout-row[data-gap="none"] {
137
+ --layout-gap: 0rem;
138
+ }
139
+ .content-layout-row[data-gap="sm"] {
140
+ --layout-gap: 0.5rem;
141
+ }
142
+ .content-layout-row[data-gap="lg"] {
143
+ --layout-gap: clamp(1.5rem, 4cqi, 3rem);
144
+ }
145
+ .content-layout-row[data-surface="muted"],
146
+ .content-layout-row[data-surface="tint"] {
147
+ padding: clamp(1rem, 3cqi, 2rem);
148
+ border-radius: var(--radius, 0.625rem);
149
+ color: var(--foreground, #171717);
150
+ }
151
+ .content-layout-row[data-surface="muted"] {
152
+ background: var(--muted, #f5f5f5);
153
+ }
154
+ .content-layout-row[data-surface="tint"] {
155
+ background: color-mix(in oklab, var(--primary, #555) 10%, var(--background, white));
156
+ }
157
+ .content-layout-row[data-type^="border"],
158
+ .content-layout-row[data-type^="outline"] {
159
+ border-radius: var(--radius, 0.625rem);
160
+ padding: 0.5rem;
161
+ }
162
+ .content-layout-row[data-type^="border"] {
163
+ border: 1px solid var(--border, #d4d4d4);
164
+ }
165
+ .content-layout-row[data-type="border-dashed"] {
166
+ border-style: dashed;
167
+ }
168
+ .content-layout-row[data-type^="outline"] {
169
+ outline: 1px solid var(--border, #d4d4d4);
170
+ outline-offset: 2px;
171
+ }
172
+ .content-layout-row[data-type="outline-dashed"] {
173
+ outline-style: dashed;
174
+ }
175
+ .content-layout-column {
176
+ --column-weight: 3;
177
+ min-width: 0;
178
+ width: 100%;
179
+ display: flex;
180
+ flex-direction: column;
181
+ justify-content: var(--layout-align);
182
+ }
183
+ .content-layout-column[data-size="xs"] {
184
+ --column-weight: 1.5;
185
+ }
186
+ .content-layout-column[data-size="sm"] {
187
+ --column-weight: 2;
188
+ }
189
+ .content-layout-column[data-size="lg"] {
190
+ --column-weight: 4;
191
+ }
192
+ .content-layout-column[data-size="xl"] {
193
+ --column-weight: 4.5;
194
+ }
195
+ .content-layout-column[data-align="start"] {
196
+ justify-content: start;
197
+ }
198
+ .content-layout-column[data-align="center"] {
199
+ justify-content: center;
200
+ }
201
+ .content-layout-column[data-align="end"] {
202
+ justify-content: end;
203
+ }
204
+ .content-layout-column-inner {
205
+ min-width: 0;
206
+ overflow-wrap: anywhere;
207
+ }
208
+ /* Trim only the column edges. Interior prose keeps its own reading rhythm. */
209
+ .content-layout-column-inner > :first-child {
210
+ margin-block-start: 0;
211
+ }
212
+ .content-layout-column-inner > :last-child {
213
+ margin-block-end: 0;
214
+ }
215
+ .content-layout-row[data-type^="border"] > .content-layout-column:not(:last-child) {
216
+ border-block-end: 1px solid var(--border, #d4d4d4);
217
+ padding-block-end: var(--layout-gap);
218
+ }
219
+ .content-layout-row[data-type="border-dashed"] > .content-layout-column:not(:last-child) {
220
+ border-style: dashed;
221
+ }
222
+
223
+ @container content-layout (min-width: 32rem) {
224
+ .content-layout-row[data-stack="sm"] {
225
+ flex-direction: row;
226
+ }
227
+ .content-layout-row[data-stack="sm"] > .content-layout-column {
228
+ flex: var(--column-weight) 1 0%;
229
+ width: 0;
230
+ }
231
+ .content-layout-row[data-stack="sm"][data-type^="border"]
232
+ > .content-layout-column:not(:last-child) {
233
+ border-block-end: 0;
234
+ border-inline-end: 1px solid var(--border, #d4d4d4);
235
+ padding-block-end: 0;
236
+ padding-inline-end: var(--layout-gap);
237
+ }
238
+ .content-layout-row[data-stack="sm"][data-type="border-dashed"]
239
+ > .content-layout-column:not(:last-child) {
240
+ border-inline-end-style: dashed;
241
+ }
242
+ .content-layout-row[data-stack="sm"]
243
+ > .content-layout-column:not([data-media="natural"])
244
+ > .content-layout-column-inner {
245
+ display: grid;
246
+ flex: 1;
247
+ min-height: 12rem;
248
+ }
249
+ .content-layout-row[data-stack="sm"]
250
+ > .content-layout-column:not([data-media="natural"])
251
+ > .content-layout-column-inner
252
+ > :is(p, button):only-child {
253
+ display: grid;
254
+ position: relative;
255
+ margin: 0;
256
+ }
257
+ .content-layout-row[data-stack="sm"]
258
+ > .content-layout-column:not([data-media="natural"])
259
+ > .content-layout-column-inner
260
+ > :is(p, button):only-child
261
+ img,
262
+ .content-layout-row[data-stack="sm"]
263
+ > .content-layout-column:not([data-media="natural"])
264
+ > .content-layout-column-inner
265
+ > img:only-child {
266
+ position: absolute;
267
+ inset: 0;
268
+ width: 100%;
269
+ height: 100%;
270
+ object-fit: var(--column-media-fit);
271
+ }
272
+ .content-layout-row[data-stack="sm"]
273
+ > .content-layout-column:not([data-media="natural"])
274
+ > .content-layout-column-inner {
275
+ position: relative;
276
+ }
277
+ }
278
+
279
+ @container content-layout (min-width: 40rem) {
280
+ .content-layout-row[data-stack="md"] {
281
+ flex-direction: row;
282
+ }
283
+ .content-layout-row[data-stack="md"] > .content-layout-column {
284
+ flex: var(--column-weight) 1 0%;
285
+ width: 0;
286
+ }
287
+ .content-layout-row[data-stack="md"][data-type^="border"]
288
+ > .content-layout-column:not(:last-child) {
289
+ border-block-end: 0;
290
+ border-inline-end: 1px solid var(--border, #d4d4d4);
291
+ padding-block-end: 0;
292
+ padding-inline-end: var(--layout-gap);
293
+ }
294
+ .content-layout-row[data-stack="md"][data-type="border-dashed"]
295
+ > .content-layout-column:not(:last-child) {
296
+ border-inline-end-style: dashed;
297
+ }
298
+ .content-layout-row[data-stack="md"]
299
+ > .content-layout-column:not([data-media="natural"])
300
+ > .content-layout-column-inner {
301
+ display: grid;
302
+ flex: 1;
303
+ min-height: 12rem;
304
+ }
305
+ .content-layout-row[data-stack="md"]
306
+ > .content-layout-column:not([data-media="natural"])
307
+ > .content-layout-column-inner
308
+ > :is(p, button):only-child {
309
+ display: grid;
310
+ position: relative;
311
+ margin: 0;
312
+ }
313
+ .content-layout-row[data-stack="md"]
314
+ > .content-layout-column:not([data-media="natural"])
315
+ > .content-layout-column-inner
316
+ > :is(p, button):only-child
317
+ img,
318
+ .content-layout-row[data-stack="md"]
319
+ > .content-layout-column:not([data-media="natural"])
320
+ > .content-layout-column-inner
321
+ > img:only-child {
322
+ position: absolute;
323
+ inset: 0;
324
+ width: 100%;
325
+ height: 100%;
326
+ object-fit: var(--column-media-fit);
327
+ }
328
+ .content-layout-row[data-stack="md"]
329
+ > .content-layout-column:not([data-media="natural"])
330
+ > .content-layout-column-inner {
331
+ position: relative;
332
+ }
333
+ }
334
+
335
+ @container content-layout (min-width: 48rem) {
336
+ .content-layout-row[data-stack="lg"] {
337
+ flex-direction: row;
338
+ }
339
+ .content-layout-row[data-stack="lg"] > .content-layout-column {
340
+ flex: var(--column-weight) 1 0%;
341
+ width: 0;
342
+ }
343
+ .content-layout-row[data-stack="lg"][data-type^="border"]
344
+ > .content-layout-column:not(:last-child) {
345
+ border-block-end: 0;
346
+ border-inline-end: 1px solid var(--border, #d4d4d4);
347
+ padding-block-end: 0;
348
+ padding-inline-end: var(--layout-gap);
349
+ }
350
+ .content-layout-row[data-stack="lg"][data-type="border-dashed"]
351
+ > .content-layout-column:not(:last-child) {
352
+ border-inline-end-style: dashed;
353
+ }
354
+ .content-layout-row[data-stack="lg"]
355
+ > .content-layout-column:not([data-media="natural"])
356
+ > .content-layout-column-inner {
357
+ display: grid;
358
+ flex: 1;
359
+ min-height: 12rem;
360
+ }
361
+ .content-layout-row[data-stack="lg"]
362
+ > .content-layout-column:not([data-media="natural"])
363
+ > .content-layout-column-inner
364
+ > :is(p, button):only-child {
365
+ display: grid;
366
+ position: relative;
367
+ margin: 0;
368
+ }
369
+ .content-layout-row[data-stack="lg"]
370
+ > .content-layout-column:not([data-media="natural"])
371
+ > .content-layout-column-inner
372
+ > :is(p, button):only-child
373
+ img,
374
+ .content-layout-row[data-stack="lg"]
375
+ > .content-layout-column:not([data-media="natural"])
376
+ > .content-layout-column-inner
377
+ > img:only-child {
378
+ position: absolute;
379
+ inset: 0;
380
+ width: 100%;
381
+ height: 100%;
382
+ object-fit: var(--column-media-fit);
383
+ }
384
+ .content-layout-row[data-stack="lg"]
385
+ > .content-layout-column:not([data-media="natural"])
386
+ > .content-layout-column-inner {
387
+ position: relative;
388
+ }
389
+ }
390
+ .content-layout-column[data-media="cover"] {
391
+ --column-media-fit: cover;
392
+ }
393
+ .content-layout-column[data-media="contain"] {
394
+ --column-media-fit: contain;
395
+ }
396
+
397
+ .content-alert-title {
398
+ margin: 0;
399
+ }
400
+ .content-callout {
401
+ --content-callout-accent: var(--muted-foreground, #666);
402
+ --content-callout-surface: color-mix(in oklab, var(--secondary, #f5f5f5) 90%, transparent);
403
+ width: 100%;
404
+ display: flex;
405
+ gap: 0.5rem;
406
+ margin: 1.25rem 0;
407
+ border-radius: var(--radius, 0.625rem);
408
+ background-color: var(--secondary, #f5f5f5);
409
+ padding: 0.75rem 0.75rem 0.75rem 0.4rem;
410
+ color: var(--foreground, #171717);
411
+ font-size: 0.875rem;
412
+ line-height: 1.625;
413
+ }
414
+ .content-callout-info {
415
+ --content-callout-accent: var(--info, #2563eb);
416
+ }
417
+ .content-callout[data-appearance="quiet"] {
418
+ border: 1px solid var(--border, #d4d4d4);
419
+ background-color: var(--card, #fff);
420
+ box-shadow: var(--shadow-xs, 0 1px 2px 0 rgb(0 0 0 / 5%));
421
+ padding: 0.75rem 0.9rem 0.75rem 0.4rem;
422
+ }
423
+ .content-callout-note {
424
+ --content-callout-accent: var(--muted-foreground, #666);
425
+ }
426
+ .content-callout-warning {
427
+ --content-callout-accent: var(--warning, #ca8a04);
428
+ }
429
+ .content-callout-error {
430
+ --content-callout-accent: var(--destructive, #dc2626);
431
+ }
432
+ .content-callout-success {
433
+ --content-callout-accent: var(--success, #16a34a);
434
+ }
435
+ .content-callout-idea {
436
+ --content-callout-accent: var(--primary, #2563eb);
437
+ }
438
+ .content-callout > .content-callout-bar {
439
+ width: 0.125rem;
440
+ flex-shrink: 0;
441
+ border-radius: var(--radius, 0.625rem);
442
+ background-color: color-mix(in oklab, var(--content-callout-accent) 70%, transparent);
443
+ }
444
+ .content-callout > .content-callout-icon {
445
+ display: inline-flex;
446
+ width: 1.25rem;
447
+ height: 1.25rem;
448
+ margin-top: 0.25rem;
449
+ align-items: center;
450
+ justify-content: center;
451
+ flex-shrink: 0;
452
+ border: 0;
453
+ background-color: transparent;
454
+ color: var(--content-callout-accent);
455
+ }
456
+ .content-callout > .content-callout-icon > :where(svg, span, .iconify) {
457
+ width: 1.15rem;
458
+ height: 1.15rem;
459
+ }
460
+ .content-callout-body {
461
+ min-width: 0;
462
+ flex: 1;
463
+ }
464
+ .content-callout .content-prose {
465
+ font-size: 0.875rem;
466
+ line-height: inherit;
467
+ }
468
+ .content-callout .content-alert-title {
469
+ margin-bottom: 0.125rem;
470
+ color: var(--foreground, #171717);
471
+ font-size: 0.875rem;
472
+ font-weight: 600;
473
+ line-height: inherit;
474
+ }
475
+
476
+ .content-aside p.content-aside-label,
477
+ .content-excerpt p.content-excerpt-label {
478
+ display: flex;
479
+ align-items: center;
480
+ gap: 0.4rem;
481
+ margin: 0 0 0.35rem;
482
+ color: var(--muted-foreground, #666);
483
+ font-size: 0.6875rem;
484
+ font-weight: 600;
485
+ letter-spacing: 0.08em;
486
+ line-height: 1.4;
487
+ text-transform: uppercase;
488
+ }
489
+ .content-excerpt-source {
490
+ color: var(--muted-foreground, #666);
491
+ font-family: var(--font-mono, monospace);
492
+ font-size: 0.75rem;
493
+ font-weight: 400;
494
+ }
495
+ /* --- Aside + excerpt (voice) --- */
496
+
497
+ .content-aside,
498
+ .content-excerpt {
499
+ position: relative;
500
+ margin-block: 1.25rem;
501
+ border-radius: var(--radius, 0.625rem);
502
+ font-size: 0.875rem;
503
+ line-height: 1.625;
504
+ }
505
+
506
+ .content-aside[data-appearance="quiet"],
507
+ .content-excerpt[data-appearance="quiet"] {
508
+ border: 1px solid var(--border, #d4d4d4);
509
+ background-color: var(--card, #fff);
510
+ box-shadow: var(--shadow-xs, 0 1px 2px rgb(0 0 0 / 0.05));
511
+ padding: 0.75rem 1rem;
512
+ }
513
+
514
+ .content-aside[data-appearance="tint"],
515
+ .content-excerpt[data-appearance="tint"] {
516
+ background-color: var(--secondary, #f5f5f5);
517
+ padding: 0.75rem 1rem 0.75rem 1.15rem;
518
+ }
519
+
520
+ /* The voice rail: an inset 2px bar, muted for asides, accent for excerpts. */
521
+ .content-aside[data-appearance="tint"]::before,
522
+ .content-excerpt[data-appearance="tint"]::before {
523
+ content: "";
524
+ position: absolute;
525
+ inset-block: 0.75rem;
526
+ inset-inline-start: 0.45rem;
527
+ width: 2px;
528
+ border-radius: 999px;
529
+ background-color: color-mix(in oklab, var(--muted-foreground, #666) 45%, transparent);
530
+ }
531
+
532
+ .content-excerpt[data-appearance="tint"]::before {
533
+ background-color: color-mix(in oklab, var(--info, #0284c7) 70%, transparent);
534
+ }
535
+
536
+ .content-excerpt .content-excerpt-label {
537
+ color: var(--info, #0284c7);
538
+ }
539
+
540
+ .content-aside-body,
541
+ .content-excerpt-body {
542
+ color: var(--muted-foreground, #666);
543
+ }
544
+
545
+ .content-excerpt-body {
546
+ margin: 0;
547
+ border: 0;
548
+ padding: 0;
549
+ font-size: 0.875rem;
550
+ font-style: normal;
551
+ line-height: 1.625;
552
+ }
553
+
554
+ .content-excerpt-source {
555
+ display: block;
556
+ margin: 0.5rem 0 0;
557
+ }
558
+
559
+ .content-excerpt-source::before {
560
+ content: "— ";
561
+ }
562
+
563
+ @container content-layout (min-width: 32rem) {
564
+ .content-layout-row[data-stack="sm"]
565
+ > .content-layout-column:not([data-media="natural"])
566
+ > .content-layout-column-inner
567
+ > .content-media:only-child {
568
+ display: grid;
569
+ grid-template-rows: minmax(12rem, 1fr) auto;
570
+ min-height: 0;
571
+ }
572
+ .content-layout-row[data-stack="sm"]
573
+ > .content-layout-column:not([data-media="natural"])
574
+ > .content-layout-column-inner
575
+ > .content-media:only-child
576
+ > .content-media-visual {
577
+ position: relative;
578
+ min-height: 0;
579
+ }
580
+ .content-layout-row[data-stack="sm"]
581
+ > .content-layout-column:not([data-media="natural"])
582
+ > .content-layout-column-inner
583
+ > .content-media:only-child
584
+ > .content-media-visual
585
+ img {
586
+ position: absolute;
587
+ inset: 0;
588
+ width: 100%;
589
+ height: 100%;
590
+ object-fit: var(--column-media-fit);
591
+ }
592
+ }
593
+
594
+ @container content-layout (min-width: 40rem) {
595
+ .content-layout-row[data-stack="md"]
596
+ > .content-layout-column:not([data-media="natural"])
597
+ > .content-layout-column-inner
598
+ > .content-media:only-child {
599
+ display: grid;
600
+ grid-template-rows: minmax(12rem, 1fr) auto;
601
+ min-height: 0;
602
+ }
603
+ .content-layout-row[data-stack="md"]
604
+ > .content-layout-column:not([data-media="natural"])
605
+ > .content-layout-column-inner
606
+ > .content-media:only-child
607
+ > .content-media-visual {
608
+ position: relative;
609
+ min-height: 0;
610
+ }
611
+ .content-layout-row[data-stack="md"]
612
+ > .content-layout-column:not([data-media="natural"])
613
+ > .content-layout-column-inner
614
+ > .content-media:only-child
615
+ > .content-media-visual
616
+ img {
617
+ position: absolute;
618
+ inset: 0;
619
+ width: 100%;
620
+ height: 100%;
621
+ object-fit: var(--column-media-fit);
622
+ }
623
+ }
624
+
625
+ @container content-layout (min-width: 48rem) {
626
+ .content-layout-row[data-stack="lg"]
627
+ > .content-layout-column:not([data-media="natural"])
628
+ > .content-layout-column-inner
629
+ > .content-media:only-child {
630
+ display: grid;
631
+ grid-template-rows: minmax(12rem, 1fr) auto;
632
+ min-height: 0;
633
+ }
634
+ .content-layout-row[data-stack="lg"]
635
+ > .content-layout-column:not([data-media="natural"])
636
+ > .content-layout-column-inner
637
+ > .content-media:only-child
638
+ > .content-media-visual {
639
+ position: relative;
640
+ min-height: 0;
641
+ }
642
+ .content-layout-row[data-stack="lg"]
643
+ > .content-layout-column:not([data-media="natural"])
644
+ > .content-layout-column-inner
645
+ > .content-media:only-child
646
+ > .content-media-visual
647
+ img {
648
+ position: absolute;
649
+ inset: 0;
650
+ width: 100%;
651
+ height: 100%;
652
+ object-fit: var(--column-media-fit);
653
+ }
654
+ }
655
+
656
+ .content-layout-row[data-type="card"] {
657
+ border: 1px solid var(--border);
658
+ border-radius: var(--radius);
659
+ box-shadow: var(--shadow-xs);
660
+ padding: 1.5rem;
661
+ }
662
+
663
+ .content-media-visual > button {
664
+ height: 100%;
665
+ }
666
+
667
+ .content-layout-row[data-type="card"][data-surface="default"] {
668
+ background: var(--card);
669
+ }