@lupinum/ginko-docs 0.4.0-rc.9 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/LICENSE +1 -1
  3. package/README.md +206 -54
  4. package/app/app.config.ts +42 -55
  5. package/app/assets/docs.css +555 -0
  6. package/app/components/DocsBanner.vue +29 -0
  7. package/app/components/DocsExample.vue +43 -0
  8. package/app/components/DocsFooter.vue +19 -0
  9. package/app/components/DocsHeader.vue +112 -0
  10. package/app/components/DocsLanding.vue +55 -0
  11. package/app/components/DocsLanguage.vue +29 -0
  12. package/app/components/DocsNavTree.vue +38 -0
  13. package/app/components/DocsPage.vue +84 -0
  14. package/app/components/DocsPageActions.vue +47 -0
  15. package/app/components/DocsPost.vue +58 -0
  16. package/app/components/DocsSearch.vue +134 -0
  17. package/app/components/DocsShell.vue +20 -0
  18. package/app/components/DocsSidebar.vue +18 -0
  19. package/app/components/DocsTable.vue +11 -0
  20. package/app/components/DocsThemeToggle.vue +45 -0
  21. package/app/components/DocsToc.vue +73 -0
  22. package/app/composables/useDocs.ts +52 -0
  23. package/app/composables/useDocsBlog.ts +32 -0
  24. package/app/composables/useDocsCopy.ts +17 -0
  25. package/app/composables/useDocsPopover.ts +36 -0
  26. package/app/composables/useDocsSite.ts +10 -0
  27. package/app/docs-pages/blog.vue +47 -0
  28. package/app/docs-pages/changelog.vue +27 -0
  29. package/app/docs-pages/doc.vue +14 -0
  30. package/app/docs-pages/docs.vue +9 -0
  31. package/app/docs-pages/index.vue +12 -0
  32. package/app/docs-pages/post.vue +8 -0
  33. package/app/error.vue +23 -115
  34. package/app/layouts/default.vue +25 -7
  35. package/app/lib/blogTypes.ts +8 -0
  36. package/app/lib/docsFirst.ts +11 -0
  37. package/app/lib/docsInit.ts +18 -0
  38. package/app/lib/docsNav.ts +36 -0
  39. package/app/lib/docsPage.ts +44 -0
  40. package/app/lib/markdownComponents.ts +16 -0
  41. package/app/lib/previewToc.ts +18 -0
  42. package/dist/config.d.mts +232 -0
  43. package/dist/config.d.ts +232 -0
  44. package/dist/config.mjs +114 -0
  45. package/dist/pages.d.mts +5 -0
  46. package/dist/pages.d.ts +5 -0
  47. package/dist/pages.mjs +36 -0
  48. package/dist/shared/ginko-docs.BwbF7JBR.mjs +4 -0
  49. package/i18n/de.json +1 -0
  50. package/i18n/en.json +1 -0
  51. package/icons/README.md +2 -0
  52. package/icons/bluesky.svg +1 -0
  53. package/icons/claude.svg +1 -0
  54. package/icons/discord.svg +1 -0
  55. package/icons/github.svg +1 -0
  56. package/icons/linkedin.svg +1 -0
  57. package/icons/mastodon.svg +1 -0
  58. package/icons/openai.svg +1 -0
  59. package/icons/x.svg +1 -0
  60. package/icons/youtube.svg +1 -0
  61. package/nuxt.config.ts +34 -209
  62. package/package.json +43 -76
  63. package/public/_docs/fonts/LICENSE +188 -0
  64. package/public/_docs/fonts/inter-latin-wght-normal.woff2 +0 -0
  65. package/public/_docs/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
  66. package/public/_docs/fonts/jetbrains-mono-latin-500-normal.woff2 +0 -0
  67. package/server/feeds/blog-locale.get.ts +9 -0
  68. package/server/feeds/blog.get.ts +4 -0
  69. package/server/lib/blogFeed.ts +35 -0
  70. package/server/lib/rss.ts +57 -0
  71. package/server/mcp/handler.ts +108 -0
  72. package/server/routes/__ginko/docs-mcp.ts +35 -0
  73. package/shared/paths.ts +4 -0
  74. package/app/app.vue +0 -98
  75. package/app/assets/css/prose.css +0 -3240
  76. package/app/assets/css/tailwind.css +0 -394
  77. package/app/assets/css/theme-palettes.css +0 -309
  78. package/app/assets/css/theme-presets.css +0 -141
  79. package/app/components/OgImage/GinkoDocs.satori.vue +0 -238
  80. package/app/components/content/DocumentPageShell.vue +0 -55
  81. package/app/components/content/Feedback.vue +0 -102
  82. package/app/components/content/ImageZoomDialog.vue +0 -84
  83. package/app/components/content/PageMarkdownCopy.vue +0 -104
  84. package/app/components/content/imageZoom.ts +0 -25
  85. package/app/components/mdc/MdcAccordion.vue +0 -67
  86. package/app/components/mdc/MdcAccordionItem.vue +0 -42
  87. package/app/components/mdc/MdcApi.vue +0 -159
  88. package/app/components/mdc/MdcAside.vue +0 -23
  89. package/app/components/mdc/MdcCallout.vue +0 -61
  90. package/app/components/mdc/MdcCard.vue +0 -175
  91. package/app/components/mdc/MdcCards.vue +0 -30
  92. package/app/components/mdc/MdcCenter.vue +0 -71
  93. package/app/components/mdc/MdcCodeGroup.vue +0 -197
  94. package/app/components/mdc/MdcCodeTree.vue +0 -234
  95. package/app/components/mdc/MdcCollapse.vue +0 -61
  96. package/app/components/mdc/MdcColumn.vue +0 -70
  97. package/app/components/mdc/MdcDropcap.vue +0 -84
  98. package/app/components/mdc/MdcError.vue +0 -23
  99. package/app/components/mdc/MdcExcerpt.vue +0 -26
  100. package/app/components/mdc/MdcFigure.vue +0 -85
  101. package/app/components/mdc/MdcFiles.vue +0 -120
  102. package/app/components/mdc/MdcIdea.vue +0 -17
  103. package/app/components/mdc/MdcInfo.vue +0 -17
  104. package/app/components/mdc/MdcInlineToc.vue +0 -51
  105. package/app/components/mdc/MdcKbd.vue +0 -10
  106. package/app/components/mdc/MdcLayout.vue +0 -57
  107. package/app/components/mdc/MdcNote.vue +0 -17
  108. package/app/components/mdc/MdcQuiz.vue +0 -241
  109. package/app/components/mdc/MdcQuizQuestion.vue +0 -221
  110. package/app/components/mdc/MdcReadMore.vue +0 -70
  111. package/app/components/mdc/MdcSteps.vue +0 -59
  112. package/app/components/mdc/MdcSuccess.vue +0 -23
  113. package/app/components/mdc/MdcTab.vue +0 -17
  114. package/app/components/mdc/MdcTabs.vue +0 -150
  115. package/app/components/mdc/MdcTimeline.vue +0 -17
  116. package/app/components/mdc/MdcTimelineItem.vue +0 -40
  117. package/app/components/mdc/MdcWarning.vue +0 -23
  118. package/app/components/mdc/api.utils.ts +0 -132
  119. package/app/components/mdc/code-tree.utils.ts +0 -22
  120. package/app/components/mdc/icons.ts +0 -10
  121. package/app/components/mdc/quiz.utils.ts +0 -38
  122. package/app/components/prose/ProseA.vue +0 -27
  123. package/app/components/prose/ProseBlockquote.vue +0 -30
  124. package/app/components/prose/ProseCode.vue +0 -14
  125. package/app/components/prose/ProseEm.vue +0 -14
  126. package/app/components/prose/ProseH1.vue +0 -18
  127. package/app/components/prose/ProseH2.vue +0 -29
  128. package/app/components/prose/ProseH3.vue +0 -29
  129. package/app/components/prose/ProseH4.vue +0 -29
  130. package/app/components/prose/ProseH5.vue +0 -15
  131. package/app/components/prose/ProseH6.vue +0 -15
  132. package/app/components/prose/ProseHr.vue +0 -12
  133. package/app/components/prose/ProseImg.vue +0 -55
  134. package/app/components/prose/ProseLi.vue +0 -14
  135. package/app/components/prose/ProseOl.vue +0 -14
  136. package/app/components/prose/ProseP.vue +0 -14
  137. package/app/components/prose/ProsePre.vue +0 -180
  138. package/app/components/prose/ProseStrong.vue +0 -14
  139. package/app/components/prose/ProseTable.vue +0 -18
  140. package/app/components/prose/ProseTbody.vue +0 -14
  141. package/app/components/prose/ProseTd.vue +0 -14
  142. package/app/components/prose/ProseTh.vue +0 -14
  143. package/app/components/prose/ProseThead.vue +0 -14
  144. package/app/components/prose/ProseTr.vue +0 -14
  145. package/app/components/prose/ProseUl.vue +0 -14
  146. package/app/components/site/ModeToggle.vue +0 -81
  147. package/app/components/site/SiteBanner.vue +0 -97
  148. package/app/components/site/SiteFooter.vue +0 -90
  149. package/app/components/site/SiteHeader.vue +0 -371
  150. package/app/components/site/SiteHeroCode.vue +0 -173
  151. package/app/components/site/SiteInteractionLayer.vue +0 -42
  152. package/app/components/site/SiteLocaleSwitcher.vue +0 -190
  153. package/app/components/site/SiteLogoMark.vue +0 -12
  154. package/app/components/site/SiteSkipLink.vue +0 -14
  155. package/app/components/site/SiteSocialLinks.vue +0 -33
  156. package/app/components/site/header-utils.ts +0 -3
  157. package/app/components/site/mode-toggle.utils.ts +0 -18
  158. package/app/components/ui/badge/Badge.vue +0 -28
  159. package/app/components/ui/badge/index.ts +0 -24
  160. package/app/components/ui/button/Button.vue +0 -31
  161. package/app/components/ui/button/index.ts +0 -35
  162. package/app/components/ui/collapsible/Collapsible.vue +0 -15
  163. package/app/components/ui/collapsible/CollapsibleContent.vue +0 -25
  164. package/app/components/ui/collapsible/CollapsibleTrigger.vue +0 -12
  165. package/app/components/ui/collapsible/index.ts +0 -3
  166. package/app/components/ui/dropdown-menu/DropdownMenu.vue +0 -15
  167. package/app/components/ui/dropdown-menu/DropdownMenuContent.vue +0 -50
  168. package/app/components/ui/dropdown-menu/DropdownMenuItem.vue +0 -41
  169. package/app/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +0 -15
  170. package/app/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +0 -37
  171. package/app/components/ui/dropdown-menu/DropdownMenuSeparator.vue +0 -23
  172. package/app/components/ui/dropdown-menu/DropdownMenuTrigger.vue +0 -14
  173. package/app/components/ui/dropdown-menu/index.ts +0 -7
  174. package/app/components/ui/kbd/Kbd.vue +0 -23
  175. package/app/components/ui/kbd/index.ts +0 -21
  176. package/app/components/ui/scroll-area/ScrollArea.vue +0 -39
  177. package/app/components/ui/scroll-area/ScrollBar.vue +0 -33
  178. package/app/components/ui/scroll-area/index.ts +0 -2
  179. package/app/components/ui/separator/Separator.vue +0 -27
  180. package/app/components/ui/separator/index.ts +0 -1
  181. package/app/components/ui/sheet/Sheet.vue +0 -15
  182. package/app/components/ui/sheet/SheetContent.vue +0 -59
  183. package/app/components/ui/sheet/SheetDescription.vue +0 -21
  184. package/app/components/ui/sheet/SheetOverlay.vue +0 -26
  185. package/app/components/ui/sheet/SheetTitle.vue +0 -21
  186. package/app/components/ui/sheet/SheetTrigger.vue +0 -12
  187. package/app/components/ui/sheet/index.ts +0 -5
  188. package/app/components/ui/tabs/Tabs.vue +0 -24
  189. package/app/components/ui/tabs/TabsList.vue +0 -26
  190. package/app/components/ui/tabs/TabsTrigger.vue +0 -28
  191. package/app/components/ui/tabs/index.ts +0 -3
  192. package/app/composables/site-navigation.utils.ts +0 -133
  193. package/app/composables/useCanonicalUrl.ts +0 -9
  194. package/app/composables/useContentRouteAlternates.ts +0 -35
  195. package/app/composables/useGinkoAnalytics.ts +0 -52
  196. package/app/composables/useGinkoDocsConfig.ts +0 -6
  197. package/app/composables/useGinkoOgImage.ts +0 -20
  198. package/app/composables/useLocalizedPath.ts +0 -12
  199. package/app/composables/useLocalizedRouteSwitch.ts +0 -31
  200. package/app/composables/useMetaKey.ts +0 -18
  201. package/app/composables/usePageMarkdownActions.ts +0 -79
  202. package/app/composables/useProseAppearance.ts +0 -24
  203. package/app/composables/useSchemaJsonLd.ts +0 -25
  204. package/app/composables/useSiteNavigation.ts +0 -64
  205. package/app/config/site.utils.ts +0 -36
  206. package/app/features/docs/components/DocsBreadcrumb.vue +0 -37
  207. package/app/features/docs/components/DocsContributeLinks.vue +0 -75
  208. package/app/features/docs/components/DocsMobileToc.vue +0 -108
  209. package/app/features/docs/components/DocsPageContent.vue +0 -234
  210. package/app/features/docs/components/DocsPageNav.vue +0 -57
  211. package/app/features/docs/components/DocsSidebar.vue +0 -145
  212. package/app/features/docs/components/DocsSidebarDropdown.vue +0 -70
  213. package/app/features/docs/components/DocsSidebarItem.vue +0 -122
  214. package/app/features/docs/components/DocsSidebarList.vue +0 -35
  215. package/app/features/docs/components/DocsSidebarRow.vue +0 -27
  216. package/app/features/docs/components/DocsSidebarTabs.vue +0 -59
  217. package/app/features/docs/components/DocsToc.vue +0 -106
  218. package/app/features/docs/composables/useDocsNavigation.ts +0 -29
  219. package/app/features/docs/composables/useDocsNavigationData.ts +0 -18
  220. package/app/features/docs/composables/useRevealActive.ts +0 -58
  221. package/app/features/docs/composables/useScrollspy.ts +0 -135
  222. package/app/features/docs/docs-navigation.ts +0 -157
  223. package/app/features/docs/toc-context.ts +0 -6
  224. package/app/features/search/command-center.ts +0 -110
  225. package/app/features/search/components/SiteCommandCenter.vue +0 -359
  226. package/app/features/search/components/SiteSearchPageHighlight.vue +0 -126
  227. package/app/features/search/useCommandCenter.ts +0 -292
  228. package/app/layouts/blog.vue +0 -15
  229. package/app/layouts/docs.vue +0 -20
  230. package/app/lib/errors.ts +0 -37
  231. package/app/lib/schema-org.ts +0 -38
  232. package/app/pages/blog/[slug].vue +0 -228
  233. package/app/pages/blog/index.vue +0 -130
  234. package/app/pages/docs/[...slug].vue +0 -10
  235. package/app/pages/docs/index.vue +0 -19
  236. package/app/pages/index.vue +0 -278
  237. package/app/plugins/ginko-docs-theme.ts +0 -14
  238. package/app/plugins/ssr-width.ts +0 -6
  239. package/app/utils/content.ts +0 -67
  240. package/app/utils/file-icons.ts +0 -90
  241. package/app/utils/index.ts +0 -7
  242. package/app/utils/repository.ts +0 -20
  243. package/components.ts +0 -9
  244. package/content-collections.ts +0 -89
  245. package/content.js +0 -200
  246. package/content.ts +0 -104
  247. package/i18n/i18n.config.ts +0 -10
  248. package/i18n/locales.ts +0 -81
  249. package/i18n/messages/global/banner.ts +0 -8
  250. package/i18n/messages/global/blog.ts +0 -18
  251. package/i18n/messages/global/command.ts +0 -49
  252. package/i18n/messages/global/docs.ts +0 -36
  253. package/i18n/messages/global/errors.ts +0 -36
  254. package/i18n/messages/global/feedback.ts +0 -11
  255. package/i18n/messages/global/index.ts +0 -21
  256. package/i18n/messages/global/nav.ts +0 -26
  257. package/i18n/messages/global/site.ts +0 -4
  258. package/i18n/messages/global/theme.ts +0 -9
  259. package/i18n/messages/index.ts +0 -20
  260. package/i18n/messages/localize.ts +0 -35
  261. package/i18n/routes.ts +0 -33
  262. package/icon-bundle.ts +0 -116
  263. package/index.d.ts +0 -37
  264. package/modules/analytics-boundary.ts +0 -23
  265. package/modules/feature-routing.ts +0 -68
  266. package/modules/syntax-highlighting.ts +0 -120
  267. package/public/fonts/public-sans/LICENSE +0 -93
  268. package/public/fonts/public-sans/README.md +0 -12
  269. package/public/fonts/public-sans/public-sans-400-normal-latin.woff +0 -0
  270. package/public/fonts/public-sans/public-sans-500-normal-latin.woff +0 -0
  271. package/public/fonts/public-sans/public-sans-600-normal-latin.woff +0 -0
  272. package/public/fonts/public-sans/public-sans-700-normal-latin.woff +0 -0
  273. package/runtime/generate-favicons.mjs +0 -124
  274. package/runtime/server/agent-markdown.ts +0 -19
  275. package/server/api/_ginko-docs/redirects.get.ts +0 -28
  276. package/server/mcp/tools/get-page.ts +0 -14
  277. package/server/mcp/tools/list-pages.ts +0 -10
  278. package/server/middleware/redirects.ts +0 -22
  279. package/server/plugins/agent-markdown.ts +0 -6
  280. package/server/plugins/sitemap-policy.ts +0 -12
  281. package/server/routes/.well-known/ai-catalog.json.get.ts +0 -10
  282. package/server/routes/[locale]/blog/rss.xml.get.ts +0 -13
  283. package/server/routes/blog/rss.xml.get.ts +0 -5
  284. package/server/routes/mcp/server-card.get.ts +0 -14
  285. package/server/utils/blog-feed.ts +0 -51
  286. package/server/utils/feed.ts +0 -70
  287. package/server/utils/mcp-server-card.ts +0 -45
  288. package/server/utils/redirects.ts +0 -38
  289. package/server/utils/redirects.utils.ts +0 -58
  290. package/server/utils/sitemap.ts +0 -45
  291. package/shared/route-slugs.ts +0 -5
  292. package/shared/theme-palettes.ts +0 -37
  293. package/shared/theme-presets.ts +0 -3
  294. package/shared/types/app-config.ts +0 -172
  295. package/shared/types/nuxt-config.ts +0 -14
  296. package/tags.ts +0 -192
@@ -1,3240 +0,0 @@
1
- .content-prose,
2
- .content-prose.content-prose,
3
- [data-fd-codeblock] {
4
- --content-prose-foreground: color-mix(in oklab, var(--foreground) 85%, transparent);
5
- --content-prose-heading-foreground: color-mix(in oklab, var(--foreground) 90%, transparent);
6
- /* Inline code belongs to its surrounding surface; monospace type carries
7
- the distinction without adding a nested chip background. */
8
- --content-prose-inline-code-background: var(--background);
9
- --content-prose-inline-code-foreground: var(--foreground);
10
- --content-prose-code-highlight-border: var(--code-border);
11
- /* Kept light enough that Shiki's light-plus tokens stay WCAG AA on top. */
12
- --content-prose-code-highlight-background: color-mix(in oklab, var(--primary) 5%, transparent);
13
- --content-prose-code-add-background: color-mix(in oklab, var(--chart-2) 22%, transparent);
14
- --content-prose-code-remove-background: color-mix(in oklab, var(--destructive) 18%, transparent);
15
- --content-media-bleed-md: 2rem;
16
- --content-media-bleed-lg: 6rem;
17
- --content-media-bleed-xl: 12rem;
18
- }
19
-
20
- .content-prose,
21
- .content-prose.content-prose {
22
- color: var(--content-prose-foreground);
23
- font-size: 0.9375rem;
24
- line-height: 1.65;
25
- text-wrap: pretty;
26
- }
27
-
28
- .content-prose.content-prose-docs {
29
- --content-media-bleed-md: 1rem;
30
- --content-media-bleed-lg: 1.5rem;
31
- --content-media-bleed-xl: 2rem;
32
- }
33
-
34
- .content-prose :where(h1, h2, h3, h4, h5, h6) {
35
- color: var(--content-prose-heading-foreground);
36
- }
37
-
38
- .content-prose :where(p) {
39
- margin-top: 0.95em;
40
- margin-bottom: 0.95em;
41
- }
42
-
43
- .content-prose p,
44
- .content-prose li {
45
- font-size: inherit;
46
- line-height: inherit;
47
- }
48
-
49
- .content-prose :where(h1) {
50
- margin-top: 2em;
51
- margin-bottom: 0.5em;
52
- }
53
-
54
- .content-prose h1 {
55
- font-size: 1.25rem;
56
- line-height: 1.35;
57
- font-weight: 600;
58
- letter-spacing: -0.02em;
59
- }
60
-
61
- .content-prose :where(h2) {
62
- margin-top: 2em;
63
- margin-bottom: 0.5em;
64
- }
65
-
66
- .content-prose h2 {
67
- font-size: 1.25rem;
68
- line-height: 1.35;
69
- font-weight: 600;
70
- letter-spacing: -0.02em;
71
- }
72
-
73
- .content-prose :where(h3) {
74
- margin-top: 1.6em;
75
- margin-bottom: 0.4em;
76
- }
77
-
78
- .content-prose h3 {
79
- font-size: 1.03125rem;
80
- line-height: 1.5;
81
- font-weight: 600;
82
- letter-spacing: -0.01em;
83
- }
84
-
85
- .content-prose :where(h4, h5, h6) {
86
- margin-top: 1.5rem;
87
- margin-bottom: 0.5rem;
88
- }
89
-
90
- .content-prose h4,
91
- .content-prose h5,
92
- .content-prose h6 {
93
- font-size: 0.875rem;
94
- line-height: 1.5rem;
95
- font-weight: 600;
96
- letter-spacing: 0;
97
- }
98
-
99
- .content-prose :where(h2, h3, h4, h5, h6) + :where(p, ul, ol, blockquote, table, .not-prose) {
100
- margin-top: 0;
101
- }
102
-
103
- .content-prose :where(ul, ol) {
104
- margin-top: 1rem;
105
- margin-bottom: 1rem;
106
- padding-left: 1.25rem;
107
- }
108
-
109
- .content-prose :where(ul) {
110
- list-style-type: disc;
111
- }
112
-
113
- .content-prose :where(ol) {
114
- list-style-type: decimal;
115
- }
116
-
117
- .content-prose :where(ul ul) {
118
- list-style-type: circle;
119
- }
120
-
121
- .content-prose :where(ul ul ul) {
122
- list-style-type: square;
123
- }
124
-
125
- .content-prose :where(ol ol) {
126
- list-style-type: lower-alpha;
127
- }
128
-
129
- .content-prose :where(ol ol ol) {
130
- list-style-type: lower-roman;
131
- }
132
-
133
- .content-prose :where(li) {
134
- margin-top: 0.375rem;
135
- margin-bottom: 0.375rem;
136
- }
137
-
138
- .content-prose :where(li > p) {
139
- margin-top: 0.5rem;
140
- margin-bottom: 0.5rem;
141
- }
142
-
143
- .content-prose :where(blockquote) {
144
- margin-top: 1.25rem;
145
- margin-bottom: 1.25rem;
146
- border-left: 2px solid color-mix(in oklab, var(--primary) 35%, var(--border));
147
- padding-left: 1rem;
148
- color: color-mix(in oklab, var(--foreground) 82%, transparent);
149
- font-size: 0.9375rem;
150
- font-style: italic;
151
- line-height: 1.75;
152
- }
153
-
154
- .content-prose :where(blockquote > p) {
155
- margin-top: 0.5rem;
156
- margin-bottom: 0.5rem;
157
- }
158
-
159
- .content-prose :where(blockquote > p:first-child) {
160
- margin-top: 0;
161
- }
162
-
163
- .content-prose :where(blockquote > p:last-child) {
164
- margin-bottom: 0;
165
- }
166
-
167
- .content-prose :where(hr) {
168
- margin-top: 2rem;
169
- margin-bottom: 2rem;
170
- border: 0;
171
- border-top: 1px solid var(--border);
172
- }
173
-
174
- .content-prose :where(figure, .not-prose) {
175
- margin-top: 1.25rem;
176
- margin-bottom: 1.25rem;
177
- }
178
-
179
- .content-prose :where(figcaption, .content-caption) {
180
- color: var(--muted-foreground);
181
- font-size: 0.875rem;
182
- line-height: 1.5rem;
183
- }
184
-
185
- .content-layout-row {
186
- display: flex;
187
- width: 100%;
188
- height: 100%;
189
- flex-direction: column;
190
- gap: 0.5rem;
191
- }
192
-
193
- .content-layout-row-border,
194
- .content-layout-row-border-dashed {
195
- border: 1px solid var(--border);
196
- border-radius: var(--radius);
197
- padding: 0.5rem;
198
- }
199
-
200
- .content-layout-row-border-dashed {
201
- border-style: dashed;
202
- }
203
-
204
- .content-layout-row-outline,
205
- .content-layout-row-outline-dashed {
206
- border-radius: var(--radius);
207
- padding: 0.5rem;
208
- outline: 1px solid var(--border);
209
- outline-offset: 2px;
210
- }
211
-
212
- .content-layout-row-outline-dashed {
213
- outline-style: dashed;
214
- }
215
-
216
- .content-layout-column {
217
- width: 100%;
218
- min-width: 0;
219
- }
220
-
221
- .content-layout-column-inner {
222
- height: 100%;
223
- padding-top: 0.5rem;
224
- padding-bottom: 0.5rem;
225
- }
226
-
227
- .content-layout-column-divider {
228
- border-bottom: 1px solid var(--border);
229
- }
230
-
231
- .content-layout-column-divider-dashed {
232
- border-bottom-style: dashed;
233
- }
234
-
235
- @media (min-width: 640px) {
236
- .content-layout-row {
237
- gap: 1rem;
238
- }
239
- }
240
-
241
- @media (min-width: 768px) {
242
- .content-layout-row {
243
- flex-direction: row;
244
- }
245
-
246
- .content-layout-column-sm {
247
- width: 33.333333%;
248
- }
249
-
250
- .content-layout-column-md {
251
- width: 50%;
252
- }
253
-
254
- .content-layout-column-lg {
255
- width: 66.666667%;
256
- }
257
-
258
- .content-layout-column-divider {
259
- border-right: 1px solid var(--border);
260
- border-bottom: 0;
261
- }
262
-
263
- .content-layout-column-divider-dashed {
264
- border-right-style: dashed;
265
- }
266
- }
267
-
268
- .content-prose :where(a) {
269
- color: var(--foreground);
270
- font-weight: 500;
271
- text-decoration-line: underline;
272
- text-underline-offset: 4px;
273
- }
274
-
275
- .content-prose :where(a:hover) {
276
- color: var(--primary);
277
- }
278
-
279
- .content-prose :where(a.not-prose) {
280
- color: inherit;
281
- font-weight: inherit;
282
- text-decoration-line: none;
283
- }
284
-
285
- .content-prose :where(a.not-prose:hover) {
286
- color: inherit;
287
- }
288
-
289
- .content-prose :where(h1, h2, h3, h4, h5, h6) :where(a) {
290
- color: inherit;
291
- text-decoration-line: none;
292
- }
293
-
294
- .content-prose :where(h1, h2, h3, h4, h5, h6) :where(a:hover) {
295
- color: inherit;
296
- }
297
-
298
- .content-code,
299
- .content-prose :where(code):not(:where(pre code, [class~="not-prose"], [class~="not-prose"] *)) {
300
- display: inline;
301
- position: relative;
302
- max-width: 100%;
303
- border-radius: max(0.3125rem, calc(var(--radius) - 5px));
304
- box-decoration-break: clone;
305
- -webkit-box-decoration-break: clone;
306
- border: 1px solid color-mix(in oklab, var(--foreground) 15%, transparent);
307
- background-color: var(--content-prose-inline-code-background, var(--muted));
308
- color: var(--content-prose-inline-code-foreground, var(--foreground));
309
- /* em-based so chips scale with tables, callouts, and body text alike */
310
- padding: 0.14em 0.38em;
311
- font-family: var(--font-mono);
312
- font-size: 0.855em !important;
313
- font-weight: 400;
314
- line-height: inherit;
315
- outline: none;
316
- overflow-wrap: anywhere;
317
- white-space: normal;
318
- word-break: normal;
319
- }
320
-
321
- .content-prose :where(code):not(:where(pre code, [class~="not-prose"], [class~="not-prose"] *)) {
322
- font-size: 0.855em !important;
323
- }
324
-
325
- .content-code.shiki,
326
- .content-prose
327
- :where(code.shiki):not(:where(pre code, [class~="not-prose"], [class~="not-prose"] *)) {
328
- white-space: break-spaces;
329
- }
330
-
331
- .shiki span {
332
- background-color: var(--shiki-default-bg, transparent);
333
- color: var(--shiki-default, var(--shiki-light, currentColor));
334
- font-style: var(--shiki-default-font-style, var(--shiki-light-font-style, inherit));
335
- font-weight: var(--shiki-default-font-weight, var(--shiki-light-font-weight, inherit));
336
- text-decoration: var(
337
- --shiki-default-text-decoration,
338
- var(--shiki-light-text-decoration, inherit)
339
- );
340
- }
341
-
342
- .content-prose :where(pre code) {
343
- border: 0;
344
- background-color: transparent;
345
- color: inherit;
346
- padding: 0;
347
- font-size: inherit;
348
- font-weight: inherit;
349
- }
350
-
351
- .content-prose :where(strong) {
352
- color: var(--foreground);
353
- font-weight: 600;
354
- }
355
-
356
- .content-prose :where(table) {
357
- width: 100%;
358
- margin: 0;
359
- }
360
-
361
- /* Tables share the codeblock chrome: a secondary frame around a background
362
- panel, so tables, codeblocks, and tabs read as one family. */
363
- .content-table {
364
- width: 100%;
365
- margin-top: 1.25rem;
366
- margin-bottom: 1.25rem;
367
- border-radius: var(--radius);
368
- background-color: var(--secondary);
369
- padding: 0.25rem;
370
- }
371
-
372
- .content-table-scroll {
373
- overflow-x: auto;
374
- border: 1px solid var(--code-border);
375
- border-radius: calc(var(--radius) - 2px);
376
- background-color: var(--background);
377
- }
378
-
379
- .content-table table {
380
- width: 100%;
381
- caption-side: bottom;
382
- font-size: 0.875rem;
383
- line-height: 1.5rem;
384
- }
385
-
386
- .content-table th {
387
- padding: 0.5rem 0.875rem;
388
- text-align: left;
389
- vertical-align: middle;
390
- /* Matches the codeblock caption tone. */
391
- color: color-mix(in oklab, var(--foreground) 80%, var(--muted-foreground));
392
- font-weight: 600;
393
- border-bottom: 1px solid var(--code-border);
394
- }
395
-
396
- .content-table td {
397
- padding: 0.5625rem 0.875rem;
398
- vertical-align: middle;
399
- color: color-mix(in oklab, var(--foreground) 88%, transparent);
400
- }
401
-
402
- .content-table tbody tr + tr td {
403
- border-top: 1px solid color-mix(in oklab, var(--border) 60%, transparent);
404
- }
405
-
406
- /* Keep short table code chips atomic so their cloned decoration cannot leave
407
- an empty fragment on the previous line. Oversized tokens can still wrap
408
- inside the chip instead of forcing unbounded horizontal overflow. */
409
- .content-table :where(th, td) :where(code, .content-code) {
410
- display: inline-block;
411
- max-width: min(100%, 48ch);
412
- overflow-wrap: break-word;
413
- white-space: normal;
414
- }
415
-
416
- html.dark .shiki span {
417
- background-color: var(--shiki-dark-bg, transparent);
418
- color: var(--shiki-dark) !important;
419
- font-style: var(--shiki-dark-font-style, inherit) !important;
420
- font-weight: var(--shiki-dark-font-weight, inherit) !important;
421
- text-decoration: var(--shiki-dark-text-decoration, inherit) !important;
422
- }
423
-
424
- /* Code blocks default to a stable dark presentation in either page theme.
425
- "adaptive" leaves these local tokens unset and follows the page tokens. */
426
- html[data-code-blocks="dark"] :where(.content-codeblock, .content-codegroup, .content-code-tree) {
427
- --background: var(--theme-neutral-950);
428
- --foreground: var(--theme-neutral-50);
429
- --card: var(--theme-neutral-900);
430
- --card-foreground: var(--theme-neutral-50);
431
- --primary: var(--theme-primary-dark);
432
- --primary-foreground: var(--theme-primary-dark-foreground);
433
- --secondary: var(--theme-neutral-800);
434
- --secondary-foreground: var(--theme-neutral-50);
435
- --muted: var(--theme-neutral-800);
436
- --muted-foreground: var(--theme-neutral-400);
437
- --accent: var(--theme-neutral-800);
438
- --accent-foreground: var(--theme-neutral-50);
439
- --code: var(--theme-neutral-900);
440
- --code-foreground: var(--theme-neutral-50);
441
- --code-border: var(--theme-neutral-800);
442
- --border: var(--theme-neutral-800);
443
- --input: var(--theme-neutral-700);
444
- --ring: var(--theme-primary-dark-ring);
445
- }
446
-
447
- html[data-code-blocks="dark"] .content-codeblock.shiki span {
448
- background-color: var(--shiki-dark-bg, transparent);
449
- color: var(--shiki-dark) !important;
450
- font-style: var(--shiki-dark-font-style, inherit) !important;
451
- font-weight: var(--shiki-dark-font-weight, inherit) !important;
452
- text-decoration: var(--shiki-dark-text-decoration, inherit) !important;
453
- }
454
-
455
- [data-fd-codeblock] {
456
- background-color: var(--secondary);
457
- color: var(--foreground);
458
- }
459
-
460
- .content-codeblock {
461
- min-width: 0;
462
- max-width: 100%;
463
- margin-top: 1.25rem;
464
- margin-bottom: 1.25rem;
465
- border-radius: var(--radius);
466
- color: var(--foreground);
467
- font-size: 0.8125rem;
468
- line-height: 1.5;
469
- }
470
-
471
- /* Consecutive codeblocks read as one run of examples; tighten the seam.
472
- Both sides shrink because adjacent margins collapse to the larger value. */
473
- .content-prose :where(.content-codeblock:has(+ .content-codeblock)) {
474
- margin-bottom: 0.5rem;
475
- }
476
-
477
- .content-prose :where(.content-codeblock + .content-codeblock) {
478
- margin-top: 0.5rem;
479
- }
480
-
481
- .content-codeblock-plain {
482
- padding: 0.25rem;
483
- }
484
-
485
- .content-codeblock-with-caption {
486
- padding: 0.125rem 0.25rem 0.25rem;
487
- }
488
-
489
- .content-codeblock [data-fd-caption] {
490
- display: flex;
491
- height: 1.75rem;
492
- align-items: center;
493
- justify-content: space-between;
494
- gap: 0.5rem;
495
- padding-right: 0.25rem;
496
- padding-left: 0.5rem;
497
- /* Strong enough against the caption's muted background for WCAG AA. */
498
- color: color-mix(in oklab, var(--foreground) 80%, var(--muted-foreground));
499
- font-size: 0.8125rem;
500
- font-weight: 500;
501
- line-height: 1rem;
502
- }
503
-
504
- .content-codeblock-caption-icon {
505
- width: 0.8125rem;
506
- height: 0.8125rem;
507
- flex-shrink: 0;
508
- }
509
-
510
- .content-codeblock .fd-scroll-container {
511
- width: 100%;
512
- max-width: 100%;
513
- overflow-x: auto;
514
- /* auto, not hidden: blocks taller than the max-height cap must scroll,
515
- otherwise their tail is unreachable. */
516
- overflow-y: auto;
517
- overscroll-behavior-x: none;
518
- border: 1px solid var(--code-border);
519
- border-radius: calc(var(--radius) - 2px);
520
- background-color: var(--background);
521
- }
522
-
523
- .content-codeblock-scroll-wrap {
524
- position: relative;
525
- min-width: 0;
526
- }
527
-
528
- /* Right-edge fade signals clipped horizontal content; hidden at scroll end. */
529
- .content-codeblock-overflow-fade {
530
- position: absolute;
531
- top: 1px;
532
- right: 1px;
533
- bottom: 1px;
534
- width: 2.5rem;
535
- border-radius: 0 calc(var(--radius) - 3px) calc(var(--radius) - 3px) 0;
536
- background: linear-gradient(to right, transparent, var(--background));
537
- pointer-events: none;
538
- transition: opacity 150ms ease;
539
- }
540
-
541
- .content-codeblock-overflow-fade[data-hidden="true"] {
542
- opacity: 0;
543
- }
544
-
545
- /* The `::collapse` component clips tall authored content until the reader
546
- expands it; expanding removes the cap so the page owns scrolling. */
547
- .content-collapse {
548
- position: relative;
549
- margin-top: 1.25rem;
550
- margin-bottom: 1.25rem;
551
- }
552
-
553
- .content-collapse-region[data-collapsed] {
554
- max-height: 480px;
555
- overflow: hidden;
556
- }
557
-
558
- .content-collapse-region > :first-child {
559
- margin-top: 0 !important;
560
- }
561
-
562
- .content-collapse-region > :last-child {
563
- margin-bottom: 0 !important;
564
- }
565
-
566
- /* Inside a collapse region the wrapper owns clipping; a nested codeblock
567
- scroll cap would create a second scroll area. */
568
- .content-collapse-region .content-codeblock .fd-scroll-container {
569
- max-height: none;
570
- }
571
-
572
- .content-collapse-fade {
573
- position: absolute;
574
- right: 0;
575
- bottom: 0;
576
- left: 0;
577
- display: flex;
578
- height: 5rem;
579
- align-items: flex-end;
580
- justify-content: center;
581
- padding-bottom: 0.625rem;
582
- background: linear-gradient(to bottom, transparent, var(--background) 82%);
583
- }
584
-
585
- .content-collapse-button {
586
- appearance: none;
587
- cursor: pointer;
588
- border: 1px solid var(--border);
589
- border-radius: 9999px;
590
- background-color: var(--secondary);
591
- padding: 0.2rem 0.75rem;
592
- color: var(--foreground);
593
- font-family: var(--font-body);
594
- font-size: 0.75rem;
595
- font-weight: 500;
596
- line-height: 1.25rem;
597
- white-space: nowrap;
598
- outline: none;
599
- transition: border-color 150ms ease;
600
- }
601
-
602
- .content-collapse-button:hover {
603
- border-color: color-mix(in oklab, var(--foreground) 25%, transparent);
604
- }
605
-
606
- .content-collapse-button:focus-visible {
607
- outline: 2px solid color-mix(in oklab, var(--ring) 50%, transparent);
608
- outline-offset: 2px;
609
- }
610
-
611
- .content-codeblock pre {
612
- min-width: 100%;
613
- padding-top: 0.75rem;
614
- padding-bottom: 0.75rem;
615
- color: var(--code-foreground);
616
- font-size: 0.8125rem;
617
- line-height: 1.5;
618
- outline: none;
619
- }
620
-
621
- .content-codeblock pre > code {
622
- display: flex;
623
- width: max-content;
624
- min-width: 100%;
625
- flex-direction: column;
626
- }
627
-
628
- .content-codeblock-copy-button {
629
- display: inline-flex;
630
- width: 1.5rem;
631
- height: 1.5rem;
632
- flex-shrink: 0;
633
- align-items: center;
634
- justify-content: center;
635
- border: 0;
636
- border-radius: var(--radius);
637
- background-color: transparent;
638
- color: var(--muted-foreground);
639
- font-size: 0.875rem;
640
- font-weight: 500;
641
- white-space: nowrap;
642
- outline: none;
643
- user-select: none;
644
- transition:
645
- color 150ms ease,
646
- background-color 150ms ease,
647
- opacity 150ms ease,
648
- transform 150ms ease;
649
- }
650
-
651
- .content-codeblock-copy-button:hover,
652
- .content-codeblock-copy-button:focus-visible {
653
- background-color: var(--muted);
654
- color: var(--foreground);
655
- }
656
-
657
- .content-codeblock-copy-button:focus-visible {
658
- opacity: 1;
659
- box-shadow: 0 0 0 3px color-mix(in oklab, var(--foreground) 25%, transparent);
660
- }
661
-
662
- .content-codeblock-copy-button:active {
663
- transform: scale(0.9);
664
- }
665
-
666
- .content-codeblock-copy-button-floating {
667
- opacity: 0;
668
- }
669
-
670
- .content-codeblock:hover .content-codeblock-copy-button-floating,
671
- .content-codeblock-copy-button-floating:focus,
672
- .content-codeblock-copy-button-floating:focus-visible {
673
- opacity: 1;
674
- }
675
-
676
- .content-codeblock-in-group {
677
- margin: 0;
678
- padding: 0;
679
- border-radius: 0;
680
- background-color: transparent;
681
- }
682
-
683
- .content-codeblock-in-group .fd-scroll-container {
684
- border: 0;
685
- border-radius: 0;
686
- }
687
-
688
- .content-codegroup {
689
- min-width: 0;
690
- max-width: 100%;
691
- margin-top: 1.25rem;
692
- margin-bottom: 1.25rem;
693
- border-radius: var(--radius);
694
- background-color: var(--secondary);
695
- padding: 0.125rem 0.25rem 0.25rem;
696
- }
697
-
698
- .content-codegroup-header {
699
- display: flex;
700
- min-width: 0;
701
- align-items: center;
702
- justify-content: space-between;
703
- gap: 0.5rem;
704
- padding: 0.25rem 0.25rem 0.25rem 0.5rem;
705
- }
706
-
707
- .content-tabs {
708
- min-width: 0;
709
- max-width: 100%;
710
- margin-top: 1.25rem;
711
- margin-bottom: 1.25rem;
712
- border-radius: var(--radius);
713
- background-color: var(--secondary);
714
- padding: 0.125rem 0.25rem 0.25rem;
715
- }
716
-
717
- .content-tabs-in-stack {
718
- margin-bottom: 0;
719
- border-radius: 0;
720
- padding: 0;
721
- }
722
-
723
- .content-tabs-header {
724
- display: flex;
725
- min-width: 0;
726
- align-items: center;
727
- gap: 0.5rem;
728
- padding: 0.25rem 0.25rem 0.25rem 0.5rem;
729
- }
730
-
731
- .content-tabs-list {
732
- display: flex;
733
- min-width: 0;
734
- align-items: flex-end;
735
- gap: 0.125rem;
736
- overflow-x: auto;
737
- overflow-y: hidden;
738
- }
739
-
740
- .content-tabs-tab {
741
- display: inline-flex;
742
- height: 1.75rem;
743
- flex-shrink: 0;
744
- appearance: none;
745
- cursor: pointer;
746
- align-items: center;
747
- justify-content: center;
748
- gap: 0.375rem;
749
- border: 1px solid transparent;
750
- border-radius: calc(var(--radius) - 2px);
751
- background-color: transparent;
752
- padding: 0 0.5rem;
753
- color: var(--muted-foreground);
754
- font-size: 0.875rem;
755
- font-weight: 500;
756
- line-height: 1rem;
757
- white-space: nowrap;
758
- outline: none;
759
- transition:
760
- color 150ms ease,
761
- border-color 150ms ease;
762
- }
763
-
764
- .content-tabs-tab-icon {
765
- width: 0.875rem;
766
- height: 0.875rem;
767
- flex-shrink: 0;
768
- }
769
-
770
- .content-tabs-tab:hover,
771
- .content-tabs-tab:focus-visible,
772
- .content-tabs-tab-active,
773
- .content-tabs-tab[aria-selected="true"] {
774
- color: var(--foreground);
775
- }
776
-
777
- .content-tabs-tab-active,
778
- .content-tabs-tab[aria-selected="true"] {
779
- border-color: color-mix(in oklab, var(--border) 80%, transparent);
780
- background-color: var(--background);
781
- box-shadow: var(--shadow-xs);
782
- }
783
-
784
- .content-tabs-tab:focus-visible {
785
- outline: 2px solid color-mix(in oklab, var(--ring) 50%, transparent);
786
- outline-offset: 2px;
787
- }
788
-
789
- .content-tabs-panels {
790
- overflow: hidden;
791
- border: 1px solid var(--code-border);
792
- border-radius: calc(var(--radius) - 2px);
793
- background-color: var(--background);
794
- }
795
-
796
- .content-tabs-content-area {
797
- margin: 0;
798
- }
799
-
800
- .content-tabs[data-padded="true"] .content-tabs-content-area {
801
- padding: 1rem;
802
- }
803
-
804
- .content-tabs[data-padded="false"] .content-tabs-content-area {
805
- padding: 0;
806
- }
807
-
808
- .content-tabs-content-area > .content-media:only-child {
809
- margin: -1rem;
810
- border: 0;
811
- }
812
-
813
- .content-codegroup-tabs {
814
- display: flex;
815
- min-width: 0;
816
- align-items: flex-end;
817
- gap: 0.125rem;
818
- overflow-x: auto;
819
- overflow-y: hidden;
820
- }
821
-
822
- .content-codegroup-tab {
823
- display: inline-flex;
824
- height: 1.625rem;
825
- flex-shrink: 0;
826
- appearance: none;
827
- cursor: pointer;
828
- align-items: center;
829
- justify-content: center;
830
- gap: 0.375rem;
831
- border: 0;
832
- border-bottom: 1px solid transparent;
833
- border-radius: 0;
834
- background-color: transparent;
835
- padding: 0 0.375rem 0.25rem;
836
- color: var(--muted-foreground);
837
- font-size: 0.8125rem;
838
- font-weight: 500;
839
- line-height: 1rem;
840
- white-space: nowrap;
841
- outline: none;
842
- transition:
843
- color 150ms ease,
844
- border-color 150ms ease;
845
- }
846
-
847
- .content-codegroup-tab:hover,
848
- .content-codegroup-tab:focus-visible,
849
- .content-codegroup-tab-active,
850
- .content-codegroup-tab[aria-selected="true"] {
851
- color: var(--primary);
852
- }
853
-
854
- .content-codegroup-tab-active,
855
- .content-codegroup-tab[aria-selected="true"] {
856
- border-bottom-color: var(--primary);
857
- }
858
-
859
- .content-codegroup-tab:focus-visible {
860
- outline: 2px solid color-mix(in oklab, var(--ring) 50%, transparent);
861
- outline-offset: 2px;
862
- }
863
-
864
- .content-codegroup-tab-icon {
865
- width: 0.8125rem;
866
- height: 0.8125rem;
867
- flex-shrink: 0;
868
- filter: grayscale(1);
869
- opacity: 0.7;
870
- transition:
871
- filter 150ms ease,
872
- opacity 150ms ease;
873
- }
874
-
875
- .content-codegroup-tab-active .content-codegroup-tab-icon,
876
- .content-codegroup-tab[aria-selected="true"] .content-codegroup-tab-icon {
877
- opacity: 1;
878
- }
879
-
880
- .content-codegroup-copy-button {
881
- opacity: 1;
882
- }
883
-
884
- .content-codegroup-panels {
885
- overflow: hidden;
886
- border: 1px solid var(--code-border);
887
- border-radius: calc(var(--radius) - 2px);
888
- background-color: var(--background);
889
- }
890
-
891
- [data-fd-codeblock] pre code .line {
892
- display: block;
893
- min-height: 1.25rem;
894
- padding-right: 0.75rem;
895
- padding-left: 0.75rem;
896
- }
897
-
898
- [data-fd-codeblock] .language-text {
899
- padding-right: 0.75rem;
900
- padding-left: 0.75rem;
901
- }
902
-
903
- [data-fd-codeblock] .content-codeblock-inline-copy .line {
904
- padding-right: 2.75rem;
905
- }
906
-
907
- [data-fd-codeblock] pre .line.highlight,
908
- [data-fd-codeblock] pre .line.highlighted {
909
- border-left: 2px solid var(--content-prose-code-highlight-border);
910
- background-color: var(--content-prose-code-highlight-background);
911
- padding-left: calc(0.75rem - 2px);
912
- }
913
-
914
- [data-fd-codeblock] pre .line.diff.add,
915
- [data-fd-codeblock] pre .line.diff.remove {
916
- position: relative;
917
- display: block;
918
- padding-left: 1.75rem;
919
- }
920
-
921
- [data-fd-codeblock] pre .line.diff.add::before,
922
- [data-fd-codeblock] pre .line.diff.remove::before {
923
- position: absolute;
924
- left: 0.75rem;
925
- font-weight: 700;
926
- }
927
-
928
- [data-fd-codeblock] pre .line.diff.add {
929
- background-color: var(--content-prose-code-add-background);
930
- }
931
-
932
- [data-fd-codeblock] pre .line.diff.add::before {
933
- color: var(--chart-2);
934
- content: "+";
935
- }
936
-
937
- [data-fd-codeblock] pre .line.diff.remove {
938
- background-color: var(--content-prose-code-remove-background);
939
- }
940
-
941
- [data-fd-codeblock] pre .line.diff.remove::before {
942
- color: var(--destructive);
943
- content: "-";
944
- }
945
-
946
- .content-prose :where(.footnote-ref) {
947
- font-size: 0.75em;
948
- line-height: 0;
949
- vertical-align: super;
950
- }
951
-
952
- .content-prose :where(.footnote-ref a) {
953
- color: var(--primary);
954
- font-weight: 600;
955
- scroll-margin-top: 7rem;
956
- text-decoration-line: none;
957
- }
958
-
959
- .content-prose :where(.footnotes) {
960
- margin-top: 2rem;
961
- color: var(--muted-foreground);
962
- font-size: 0.875rem;
963
- line-height: 1.6;
964
- }
965
-
966
- .content-prose :where(.footnotes > hr) {
967
- margin-top: 0;
968
- margin-bottom: 1rem;
969
- }
970
-
971
- .content-prose :where(.footnotes-list) {
972
- margin-top: 0;
973
- margin-bottom: 0;
974
- }
975
-
976
- .content-prose :where(.footnotes-list li) {
977
- margin-top: 0.375rem;
978
- margin-bottom: 0.375rem;
979
- scroll-margin-top: 7rem;
980
- }
981
-
982
- .content-prose :where(.footnote-backref) {
983
- color: var(--primary);
984
- font-weight: 600;
985
- text-decoration-line: none;
986
- }
987
-
988
- .content-alert-title {
989
- margin: 0;
990
- }
991
-
992
- .content-callout {
993
- --content-callout-accent: var(--muted-foreground);
994
- --content-callout-surface: color-mix(in oklab, var(--secondary) 90%, transparent);
995
- width: 100%;
996
- display: flex;
997
- gap: 0.5rem;
998
- border-radius: var(--radius);
999
- background-color: var(--secondary);
1000
- padding: 0.75rem 0.75rem 0.75rem 0.4rem;
1001
- color: var(--foreground);
1002
- font-size: 0.875rem;
1003
- line-height: 1.625;
1004
- }
1005
-
1006
- .content-callout-note {
1007
- --content-callout-accent: var(--muted-foreground);
1008
- --content-callout-surface: color-mix(in oklab, var(--secondary) 90%, transparent);
1009
- }
1010
-
1011
- .content-callout-info {
1012
- --content-callout-accent: var(--info);
1013
- --content-callout-surface: color-mix(in oklab, var(--secondary) 90%, transparent);
1014
- }
1015
-
1016
- .content-callout-warning {
1017
- --content-callout-accent: var(--warning);
1018
- --content-callout-surface: color-mix(in oklab, var(--secondary) 90%, transparent);
1019
- }
1020
-
1021
- .content-callout-error {
1022
- --content-callout-accent: var(--destructive);
1023
- --content-callout-surface: color-mix(in oklab, var(--secondary) 90%, transparent);
1024
- }
1025
-
1026
- .content-callout-success {
1027
- --content-callout-accent: var(--success);
1028
- --content-callout-surface: color-mix(in oklab, var(--secondary) 90%, transparent);
1029
- }
1030
-
1031
- .content-callout-idea {
1032
- --content-callout-accent: var(--primary);
1033
- --content-callout-surface: color-mix(in oklab, var(--secondary) 90%, transparent);
1034
- }
1035
-
1036
- .content-callout > .content-callout-bar {
1037
- width: 0.125rem;
1038
- flex-shrink: 0;
1039
- border-radius: var(--radius);
1040
- background-color: color-mix(in oklab, var(--content-callout-accent) 70%, transparent);
1041
- color: var(--content-callout-accent);
1042
- }
1043
-
1044
- .content-callout > .content-callout-icon {
1045
- display: inline-flex;
1046
- width: 1.25rem;
1047
- height: 1.25rem;
1048
- margin-top: 0.25rem;
1049
- align-items: center;
1050
- justify-content: center;
1051
- flex-shrink: 0;
1052
- border: 0;
1053
- border-radius: 0;
1054
- background-color: transparent;
1055
- color: var(--content-callout-accent);
1056
- }
1057
-
1058
- .content-callout > .content-callout-icon > :where(svg, span, .iconify) {
1059
- width: 1.15rem;
1060
- height: 1.15rem;
1061
- }
1062
-
1063
- .content-callout-body {
1064
- min-width: 0;
1065
- flex: 1;
1066
- }
1067
-
1068
- .content-callout .content-prose {
1069
- font-size: 0.875rem;
1070
- line-height: inherit;
1071
- }
1072
-
1073
- .content-callout .content-alert-title {
1074
- margin-bottom: 0.125rem;
1075
- color: var(--foreground);
1076
- font-size: 0.875rem;
1077
- font-weight: 600;
1078
- line-height: inherit;
1079
- }
1080
-
1081
- .content-media {
1082
- margin-top: 1.5rem;
1083
- margin-bottom: 1.5rem;
1084
- overflow: hidden;
1085
- border: 1px solid var(--border);
1086
- border-radius: var(--radius);
1087
- background-color: var(--card);
1088
- box-shadow: var(--shadow-xs);
1089
- }
1090
-
1091
- .content-media img {
1092
- display: block;
1093
- width: 100%;
1094
- }
1095
-
1096
- .content-media figcaption {
1097
- border-top: 1px solid var(--border);
1098
- background-color: color-mix(in oklab, var(--muted) 30%, transparent);
1099
- padding: 0.75rem 1rem;
1100
- }
1101
-
1102
- .content-media-description {
1103
- display: block;
1104
- margin-top: 0.25rem;
1105
- color: var(--muted-foreground);
1106
- }
1107
-
1108
- .content-media[data-bleed="true"] {
1109
- margin-right: 0;
1110
- margin-left: 0;
1111
- }
1112
-
1113
- @media (min-width: 768px) {
1114
- .content-media[data-bleed="true"] {
1115
- margin-right: calc(var(--content-media-bleed-md) * -1);
1116
- margin-left: calc(var(--content-media-bleed-md) * -1);
1117
- }
1118
- }
1119
-
1120
- @media (min-width: 1024px) {
1121
- .content-media[data-bleed="true"] {
1122
- margin-right: calc(var(--content-media-bleed-lg) * -1);
1123
- margin-left: calc(var(--content-media-bleed-lg) * -1);
1124
- }
1125
- }
1126
-
1127
- @media (min-width: 1280px) {
1128
- .content-media[data-bleed="true"] {
1129
- margin-right: calc(var(--content-media-bleed-xl) * -1);
1130
- margin-left: calc(var(--content-media-bleed-xl) * -1);
1131
- }
1132
- }
1133
-
1134
- .content-card-icon {
1135
- color: var(--content-card-icon-color, var(--muted-foreground));
1136
- }
1137
-
1138
- .content-prose > :where(.not-prose) + :where(.not-prose) {
1139
- margin-top: 1rem;
1140
- }
1141
-
1142
- .content-prose :where(p:has(> img:only-child)) {
1143
- margin: 1.5rem 0;
1144
- }
1145
-
1146
- .content-prose-image,
1147
- .content-prose :where(p > img:only-child) {
1148
- display: block;
1149
- max-width: 100%;
1150
- height: auto;
1151
- margin: 0;
1152
- border-radius: var(--radius);
1153
- }
1154
-
1155
- .content-prose-trim > :first-child {
1156
- margin-top: 0 !important;
1157
- }
1158
-
1159
- .content-prose-trim > :last-child {
1160
- margin-bottom: 0 !important;
1161
- }
1162
-
1163
- .content-steps {
1164
- counter-reset: step;
1165
- position: relative;
1166
- margin: 1rem 0 1.5rem 0.875rem;
1167
- border-inline-start: 1px solid var(--border);
1168
- padding-inline-start: 2rem;
1169
- }
1170
-
1171
- .content-step {
1172
- position: relative;
1173
- min-height: 2rem;
1174
- margin-block: 1.25rem;
1175
- }
1176
-
1177
- .content-step:first-child {
1178
- margin-top: 0;
1179
- }
1180
-
1181
- .content-step:last-child {
1182
- margin-bottom: 0;
1183
- }
1184
-
1185
- .content-step-marker {
1186
- position: absolute;
1187
- inset-block-start: 0.125rem;
1188
- inset-inline-start: -2.875rem;
1189
- display: flex;
1190
- width: 1.75rem;
1191
- height: 1.75rem;
1192
- align-items: center;
1193
- justify-content: center;
1194
- border: 1px solid var(--border);
1195
- border-radius: calc(var(--radius) - 2px);
1196
- background-color: var(--secondary);
1197
- color: var(--secondary-foreground);
1198
- font-size: 0.875rem;
1199
- font-weight: 500;
1200
- line-height: 1.25rem;
1201
- }
1202
-
1203
- .content-steps[data-mode="numbered"] .content-step-marker {
1204
- border-radius: 9999px;
1205
- }
1206
-
1207
- .content-step-body {
1208
- padding-block-start: 0.125rem;
1209
- }
1210
-
1211
- .content-step-title {
1212
- margin: 0 0 0.375rem !important;
1213
- color: var(--foreground);
1214
- font-size: 0.875rem;
1215
- line-height: 1.5rem;
1216
- font-weight: 600;
1217
- }
1218
-
1219
- .fd-scroll-container::-webkit-scrollbar,
1220
- .content-table-scroll::-webkit-scrollbar {
1221
- width: 5px;
1222
- height: 5px;
1223
- }
1224
-
1225
- .fd-scroll-container::-webkit-scrollbar-thumb,
1226
- .content-table-scroll::-webkit-scrollbar-thumb {
1227
- border-radius: 5px;
1228
- background: var(--border);
1229
- }
1230
-
1231
- .fd-scroll-container::-webkit-scrollbar-track,
1232
- .content-table-scroll::-webkit-scrollbar-track {
1233
- background: transparent;
1234
- }
1235
-
1236
- .fd-scroll-container::-webkit-scrollbar-corner,
1237
- .content-table-scroll::-webkit-scrollbar-corner {
1238
- display: none;
1239
- }
1240
-
1241
- /* The inline TOC (`::toc`) reuses the docs TOC component inside prose;
1242
- neutralize prose list and link styling for its own markup. */
1243
- .content-inline-toc :where(ul, ol) {
1244
- margin: 0;
1245
- padding: 0;
1246
- list-style: none;
1247
- }
1248
-
1249
- .content-inline-toc :where(li) {
1250
- margin: 0;
1251
- }
1252
-
1253
- .content-inline-toc :where(a) {
1254
- color: var(--muted-foreground);
1255
- font-weight: 400;
1256
- text-decoration-line: none;
1257
- }
1258
-
1259
- .content-inline-toc :where(a:hover) {
1260
- color: var(--foreground);
1261
- }
1262
-
1263
- /* Code tree (`::code-tree`) embeds full ProsePre blocks in its content pane;
1264
- strip their standalone chrome so they fill the pane. */
1265
- .content-code-tree-pane .content-codeblock {
1266
- margin: 0;
1267
- border: 0;
1268
- border-radius: 0;
1269
- }
1270
-
1271
- /* ProsePre wraps its scroll container for the overflow fade; the wrapper must
1272
- pass the pane's flex sizing through to the scroll container. */
1273
- .content-code-tree-pane .content-codeblock-scroll-wrap {
1274
- min-width: 0;
1275
- }
1276
-
1277
- .content-code-tree-pane .fd-scroll-container {
1278
- max-height: 28rem;
1279
- }
1280
-
1281
- /* The code tree list lives inside prose; neutralize prose list styling and
1282
- own the structural spacing here (utilities lose to these unlayered rules). */
1283
- .content-code-tree-list {
1284
- margin: 0;
1285
- padding: 0.375rem;
1286
- list-style: none;
1287
- }
1288
-
1289
- .content-code-tree-list :where(ul) {
1290
- margin: 0;
1291
- margin-inline-start: 1.0625rem;
1292
- padding: 0;
1293
- padding-inline-start: 0.5rem;
1294
- list-style: none;
1295
- }
1296
-
1297
- .content-code-tree-list :where(li) {
1298
- margin: 0;
1299
- }
1300
-
1301
- .content-code-tree {
1302
- display: grid;
1303
- min-width: 0;
1304
- max-width: 100%;
1305
- margin-block: 1.25rem;
1306
- overflow: hidden;
1307
- border-radius: var(--radius);
1308
- color: var(--card-foreground);
1309
- font-size: 0.8125rem;
1310
- }
1311
-
1312
- .content-code-tree[data-appearance="quiet"] {
1313
- border: 1px solid var(--border);
1314
- background-color: var(--card);
1315
- box-shadow: var(--shadow-xs);
1316
- }
1317
-
1318
- .content-code-tree[data-appearance="tint"] {
1319
- gap: 0.25rem;
1320
- background-color: var(--secondary);
1321
- padding: 0.25rem;
1322
- }
1323
-
1324
- .content-code-tree-list {
1325
- max-height: 15rem;
1326
- overflow-y: auto;
1327
- border-bottom: 1px solid var(--border);
1328
- background-color: var(--card);
1329
- }
1330
-
1331
- .content-code-tree[data-appearance="tint"] .content-code-tree-list,
1332
- .content-code-tree[data-appearance="tint"] .content-code-tree-pane {
1333
- overflow: hidden;
1334
- border: 1px solid color-mix(in oklab, var(--border) 80%, transparent);
1335
- border-radius: calc(var(--radius) - 2px);
1336
- background-color: var(--background);
1337
- box-shadow: var(--shadow-xs);
1338
- }
1339
-
1340
- .content-code-tree-pane,
1341
- .content-code-tree-panel {
1342
- min-width: 0;
1343
- }
1344
-
1345
- .content-code-tree-pane {
1346
- overflow: hidden;
1347
- }
1348
-
1349
- .content-code-tree-row {
1350
- display: flex;
1351
- width: 100%;
1352
- min-height: 2rem;
1353
- cursor: pointer;
1354
- align-items: center;
1355
- gap: 0.5rem;
1356
- border: 0;
1357
- border-radius: calc(var(--radius) - 3px);
1358
- background: transparent;
1359
- padding: 0.375rem 0.5rem;
1360
- color: inherit;
1361
- text-align: start;
1362
- transition:
1363
- color 150ms ease,
1364
- background-color 150ms ease;
1365
- }
1366
-
1367
- .content-code-tree-row:hover {
1368
- background-color: color-mix(in oklab, var(--secondary) 65%, transparent);
1369
- }
1370
-
1371
- .content-code-tree-row:focus-visible {
1372
- outline: 2px solid color-mix(in oklab, var(--ring) 50%, transparent);
1373
- outline-offset: -2px;
1374
- }
1375
-
1376
- .content-code-tree-row-active,
1377
- .content-code-tree-row-active:hover {
1378
- background-color: color-mix(in oklab, var(--primary) 10%, transparent);
1379
- color: var(--primary);
1380
- }
1381
-
1382
- .content-code-tree-chevron {
1383
- width: 0.875rem;
1384
- height: 0.875rem;
1385
- flex: none;
1386
- color: var(--muted-foreground);
1387
- transition: transform 180ms ease-out;
1388
- }
1389
-
1390
- .content-code-tree-chevron[data-open="true"] {
1391
- transform: rotate(90deg);
1392
- }
1393
-
1394
- [dir="rtl"] .content-code-tree-chevron:not([data-open="true"]) {
1395
- transform: rotate(180deg);
1396
- }
1397
-
1398
- .content-code-tree-icon {
1399
- width: 1rem;
1400
- height: 1rem;
1401
- flex: none;
1402
- color: var(--muted-foreground);
1403
- }
1404
-
1405
- .content-code-tree-row-active .content-code-tree-icon {
1406
- color: color-mix(in oklab, var(--primary) 80%, transparent);
1407
- }
1408
-
1409
- .content-code-tree-spacer {
1410
- width: 0.875rem;
1411
- height: 0.875rem;
1412
- flex: none;
1413
- }
1414
-
1415
- .content-code-tree-label {
1416
- min-width: 0;
1417
- overflow: hidden;
1418
- text-overflow: ellipsis;
1419
- white-space: nowrap;
1420
- }
1421
-
1422
- .content-code-tree-branch {
1423
- position: relative;
1424
- border-inline-start: 1px solid var(--border);
1425
- }
1426
-
1427
- @media (min-width: 1024px) {
1428
- .content-code-tree {
1429
- grid-template-columns: minmax(12rem, 0.85fr) minmax(0, 2fr);
1430
- }
1431
-
1432
- .content-code-tree-list {
1433
- max-height: 28rem;
1434
- border-right: 1px solid var(--border);
1435
- border-bottom: 0;
1436
- }
1437
-
1438
- [dir="rtl"] .content-code-tree-list {
1439
- border-right: 0;
1440
- border-left: 1px solid var(--border);
1441
- }
1442
-
1443
- .content-code-tree[data-appearance="tint"] .content-code-tree-list {
1444
- border: 1px solid color-mix(in oklab, var(--border) 80%, transparent);
1445
- }
1446
- }
1447
-
1448
- /* Prose appearance system ---------------------------------------------------
1449
- Two appearances, one grammar (RFC-001).
1450
-
1451
- quiet — the card family: var(--card) surface, 1px var(--border),
1452
- var(--radius), var(--shadow-xs). Structured blocks add a muted header
1453
- strip (the code-caption pattern generalized). Accent lives in icons and
1454
- text, never in fills or bars.
1455
-
1456
- tint — the tint & bar family: var(--secondary) surface, no outer border.
1457
- Voice blocks carry an inset 2px rail; object blocks become a 0.25rem tray
1458
- holding raised var(--background) panels. Raised = interactive or active.
1459
-
1460
- Shared primitives (identical in both appearances): eyebrow labels, mono
1461
- meta, one chip, marker tiles, 55%-muted affordances, content-prose bodies.
1462
- Families keep their own geometry on purpose — do not genericize. */
1463
-
1464
- /* --- Shared primitives --- */
1465
-
1466
- /* The p-based selectors match the specificity of `.content-prose p`
1467
- (0,1,1) so the eyebrow scale survives inside prose containers. */
1468
- .content-eyebrow,
1469
- p.content-aside-label,
1470
- p.content-excerpt-label,
1471
- p.content-read-more-title {
1472
- display: flex;
1473
- align-items: center;
1474
- gap: 0.4rem;
1475
- margin: 0 0 0.35rem;
1476
- color: var(--muted-foreground);
1477
- font-size: 0.6875rem;
1478
- font-weight: 600;
1479
- letter-spacing: 0.08em;
1480
- line-height: 1.4;
1481
- text-transform: uppercase;
1482
- }
1483
-
1484
- .content-meta,
1485
- .content-timeline-date,
1486
- .content-files-annotation,
1487
- .content-quiz-progress,
1488
- .content-excerpt-source {
1489
- color: var(--muted-foreground);
1490
- font-family: var(--font-mono);
1491
- font-size: 0.75rem;
1492
- font-weight: 400;
1493
- }
1494
-
1495
- .content-chip {
1496
- display: inline-flex;
1497
- align-items: center;
1498
- border: 1px solid var(--border);
1499
- border-radius: 0.375rem;
1500
- background: color-mix(in oklab, var(--muted) 50%, transparent);
1501
- padding: 0.05rem 0.5rem;
1502
- color: var(--muted-foreground);
1503
- font-size: 0.72rem;
1504
- font-weight: 500;
1505
- }
1506
-
1507
- /* --- Callout (voice) -------------------------------------------------------
1508
- Both appearances keep the canonical 2px semantic rail. Quiet changes only
1509
- the surface treatment, so intent remains visible without a tinted fill. */
1510
-
1511
- .content-callout {
1512
- margin-block: 1.25rem;
1513
- }
1514
-
1515
- .content-callout[data-appearance="quiet"] {
1516
- border: 1px solid var(--border);
1517
- background-color: var(--card);
1518
- box-shadow: var(--shadow-xs);
1519
- padding: 0.75rem 0.9rem 0.75rem 0.4rem;
1520
- }
1521
-
1522
- /* --- Aside + excerpt (voice) --- */
1523
-
1524
- .content-aside,
1525
- .content-excerpt {
1526
- position: relative;
1527
- margin-block: 1.25rem;
1528
- border-radius: var(--radius);
1529
- font-size: 0.875rem;
1530
- line-height: 1.625;
1531
- }
1532
-
1533
- .content-aside[data-appearance="quiet"],
1534
- .content-excerpt[data-appearance="quiet"] {
1535
- border: 1px solid var(--border);
1536
- background-color: var(--card);
1537
- box-shadow: var(--shadow-xs);
1538
- padding: 0.75rem 1rem;
1539
- }
1540
-
1541
- .content-aside[data-appearance="tint"],
1542
- .content-excerpt[data-appearance="tint"] {
1543
- background-color: var(--secondary);
1544
- padding: 0.75rem 1rem 0.75rem 1.15rem;
1545
- }
1546
-
1547
- /* The voice rail: an inset 2px bar, muted for asides, accent for excerpts. */
1548
- .content-aside[data-appearance="tint"]::before,
1549
- .content-excerpt[data-appearance="tint"]::before {
1550
- content: "";
1551
- position: absolute;
1552
- inset-block: 0.75rem;
1553
- inset-inline-start: 0.45rem;
1554
- width: 2px;
1555
- border-radius: 999px;
1556
- background-color: color-mix(in oklab, var(--muted-foreground) 45%, transparent);
1557
- }
1558
-
1559
- .content-excerpt[data-appearance="tint"]::before {
1560
- background-color: color-mix(in oklab, var(--info) 70%, transparent);
1561
- }
1562
-
1563
- .content-excerpt .content-excerpt-label {
1564
- color: var(--info);
1565
- }
1566
-
1567
- .content-aside-body,
1568
- .content-excerpt-body {
1569
- color: var(--muted-foreground);
1570
- }
1571
-
1572
- .content-excerpt-body {
1573
- margin: 0;
1574
- border: 0;
1575
- padding: 0;
1576
- font-size: 0.875rem;
1577
- font-style: normal;
1578
- line-height: 1.625;
1579
- }
1580
-
1581
- .content-excerpt-source {
1582
- display: block;
1583
- margin: 0.5rem 0 0;
1584
- }
1585
-
1586
- .content-excerpt-source::before {
1587
- content: "— ";
1588
- }
1589
-
1590
- /* --- Cards (object) --- */
1591
-
1592
- .content-cards {
1593
- display: grid;
1594
- grid-template-columns: 1fr;
1595
- gap: 0.75rem;
1596
- margin-block: 1.25rem;
1597
- }
1598
-
1599
- .content-cards > * {
1600
- margin: 0 !important;
1601
- }
1602
-
1603
- .content-cards[data-appearance="tint"] {
1604
- gap: 0.25rem;
1605
- border-radius: var(--radius);
1606
- background-color: var(--secondary);
1607
- padding: 0.25rem;
1608
- }
1609
-
1610
- @media (min-width: 640px) {
1611
- .content-cards[data-columns="2"],
1612
- .content-cards[data-columns="3"] {
1613
- grid-template-columns: repeat(2, minmax(0, 1fr));
1614
- }
1615
- }
1616
-
1617
- @media (min-width: 900px) {
1618
- .content-cards[data-columns="3"] {
1619
- grid-template-columns: repeat(3, minmax(0, 1fr));
1620
- }
1621
- }
1622
-
1623
- .content-card {
1624
- position: relative;
1625
- display: block;
1626
- height: auto;
1627
- border-radius: var(--radius);
1628
- }
1629
-
1630
- .content-card-standalone {
1631
- margin-block: 1.25rem;
1632
- }
1633
-
1634
- /* A lone tint card carries its own tray so the raised panel sits on tint. */
1635
- .content-card-standalone[data-appearance="tint"] {
1636
- background-color: var(--secondary);
1637
- padding: 0.25rem;
1638
- }
1639
-
1640
- .content-card-surface {
1641
- position: relative;
1642
- overflow: hidden;
1643
- border: 1px solid var(--border);
1644
- border-radius: var(--radius);
1645
- background-color: var(--card);
1646
- box-shadow: var(--shadow-xs);
1647
- color: var(--foreground);
1648
- transition:
1649
- border-color 180ms ease-out,
1650
- background-color 180ms ease-out;
1651
- }
1652
-
1653
- .content-card[data-appearance="tint"] .content-card-surface {
1654
- border-color: color-mix(in oklab, var(--border) 80%, transparent);
1655
- border-radius: calc(var(--radius) - 2px);
1656
- background-color: var(--background);
1657
- }
1658
-
1659
- .content-card:is(a, [href]) {
1660
- cursor: pointer;
1661
- text-decoration: none;
1662
- }
1663
-
1664
- .content-card:is(a, [href]):hover .content-card-surface {
1665
- border-color: color-mix(in oklab, var(--foreground) 18%, var(--border));
1666
- background-color: color-mix(in oklab, var(--secondary) 55%, var(--card));
1667
- }
1668
-
1669
- .content-card[data-appearance="tint"]:is(a, [href]):hover .content-card-surface {
1670
- border-color: color-mix(in oklab, var(--foreground) 14%, var(--border));
1671
- background-color: color-mix(in oklab, var(--secondary) 35%, var(--background));
1672
- }
1673
-
1674
- .content-card-media {
1675
- display: block;
1676
- width: 100%;
1677
- border-bottom: 1px solid var(--border);
1678
- object-fit: cover;
1679
- }
1680
-
1681
- .content-card-header {
1682
- padding: 1rem;
1683
- }
1684
-
1685
- .content-card-header[data-trailing="true"] {
1686
- padding-bottom: 0;
1687
- }
1688
-
1689
- .content-card-header[data-horizontal="true"] {
1690
- display: flex;
1691
- align-items: flex-start;
1692
- gap: 0.75rem;
1693
- }
1694
-
1695
- .content-card-header[data-reserve-link-icon="true"] {
1696
- padding-right: 2.5rem;
1697
- }
1698
-
1699
- /* Marker tile: same primitive as read-more tiles and step markers. */
1700
- .content-card-tile {
1701
- display: flex;
1702
- width: 2.5rem;
1703
- height: 2.5rem;
1704
- flex-shrink: 0;
1705
- align-items: center;
1706
- justify-content: center;
1707
- border: 1px solid var(--border);
1708
- border-radius: calc(var(--radius) - 2px);
1709
- background-color: var(--muted);
1710
- box-shadow: var(--shadow-xs);
1711
- color: var(--content-card-icon-color, var(--muted-foreground));
1712
- }
1713
-
1714
- .content-card-header:not([data-horizontal="true"]) .content-card-tile {
1715
- margin-bottom: 0.5rem;
1716
- }
1717
-
1718
- .content-card-tile :where(svg, .iconify) {
1719
- width: 1.25rem;
1720
- height: 1.25rem;
1721
- }
1722
-
1723
- .content-card-copy {
1724
- min-width: 0;
1725
- flex: 1;
1726
- }
1727
-
1728
- .content-card-title {
1729
- color: var(--foreground);
1730
- font-size: 0.875rem;
1731
- font-weight: 600;
1732
- line-height: 1.5;
1733
- }
1734
-
1735
- .content-card-description {
1736
- margin-top: 0.125rem;
1737
- color: var(--muted-foreground);
1738
- font-size: 0.875rem;
1739
- line-height: 1.4;
1740
- text-wrap: pretty;
1741
- }
1742
-
1743
- .content-card-body {
1744
- padding: 1rem;
1745
- color: var(--muted-foreground);
1746
- }
1747
-
1748
- .content-card-header + .content-card-body {
1749
- padding-top: 0.5rem;
1750
- }
1751
-
1752
- .content-card-body[data-reserve-link-icon="true"] {
1753
- padding-right: 2.5rem;
1754
- }
1755
-
1756
- .content-card-footer {
1757
- display: flex;
1758
- flex-direction: column;
1759
- align-items: stretch;
1760
- border-top: 1px solid var(--border);
1761
- padding: 0.65rem 1rem;
1762
- color: var(--muted-foreground);
1763
- font-size: 0.75rem;
1764
- }
1765
-
1766
- .content-card-footer :where(p) {
1767
- margin: 0;
1768
- line-height: 1.5;
1769
- }
1770
-
1771
- .content-card-arrow {
1772
- position: absolute;
1773
- top: 1rem;
1774
- right: 1rem;
1775
- width: 1rem;
1776
- height: 1rem;
1777
- pointer-events: none;
1778
- color: color-mix(in oklab, var(--muted-foreground) 55%, transparent);
1779
- transition: color 180ms ease-out;
1780
- }
1781
-
1782
- .content-card:is(a, [href]):hover .content-card-arrow {
1783
- color: var(--foreground);
1784
- }
1785
-
1786
- /* Cards stacked flush inside another surface (tabs, code trees). */
1787
- .content-card-in-stack .content-card-surface {
1788
- border-right: 0;
1789
- border-left: 0;
1790
- border-radius: 0;
1791
- box-shadow: none;
1792
- }
1793
-
1794
- .content-card-in-stack:first-child .content-card-surface {
1795
- border-top-left-radius: var(--radius);
1796
- border-top-right-radius: var(--radius);
1797
- }
1798
-
1799
- .content-card-in-stack:last-child .content-card-surface {
1800
- border-bottom-left-radius: var(--radius);
1801
- border-bottom-right-radius: var(--radius);
1802
- }
1803
-
1804
- /* --- Read more (object) --- */
1805
-
1806
- .content-read-more {
1807
- margin-block: 1.25rem;
1808
- }
1809
-
1810
- .content-read-more-list {
1811
- border-radius: var(--radius);
1812
- }
1813
-
1814
- .content-read-more[data-appearance="quiet"] .content-read-more-list {
1815
- overflow: hidden;
1816
- border: 1px solid var(--border);
1817
- background-color: var(--card);
1818
- box-shadow: var(--shadow-xs);
1819
- }
1820
-
1821
- .content-read-more[data-appearance="tint"] .content-read-more-list {
1822
- display: flex;
1823
- flex-direction: column;
1824
- gap: 0.25rem;
1825
- background-color: var(--secondary);
1826
- padding: 0.25rem;
1827
- }
1828
-
1829
- .content-read-more-link {
1830
- display: flex;
1831
- align-items: center;
1832
- gap: 0.75rem;
1833
- padding: 0.65rem 0.9rem;
1834
- color: var(--foreground);
1835
- text-decoration: none;
1836
- transition: background-color 180ms ease-out;
1837
- }
1838
-
1839
- .content-read-more[data-appearance="quiet"] .content-read-more-link + .content-read-more-link {
1840
- border-top: 1px solid var(--border);
1841
- }
1842
-
1843
- .content-read-more[data-appearance="quiet"] .content-read-more-link:hover {
1844
- background-color: color-mix(in oklab, var(--secondary) 50%, transparent);
1845
- }
1846
-
1847
- .content-read-more[data-appearance="tint"] .content-read-more-link {
1848
- border: 1px solid color-mix(in oklab, var(--border) 80%, transparent);
1849
- border-radius: calc(var(--radius) - 2px);
1850
- background-color: var(--background);
1851
- box-shadow: var(--shadow-xs);
1852
- padding: 0.6rem 0.85rem;
1853
- }
1854
-
1855
- .content-read-more[data-appearance="tint"] .content-read-more-link:hover {
1856
- background-color: color-mix(in oklab, var(--secondary) 35%, var(--background));
1857
- }
1858
-
1859
- .content-read-more-link:focus-visible {
1860
- outline: 2px solid color-mix(in oklab, var(--ring) 50%, transparent);
1861
- outline-offset: -2px;
1862
- }
1863
-
1864
- /* quiet: bordered marker tile — tint: bare inline icon on the raised panel */
1865
- .content-read-more-icon {
1866
- display: flex;
1867
- flex: none;
1868
- align-items: center;
1869
- justify-content: center;
1870
- color: var(--muted-foreground);
1871
- }
1872
-
1873
- .content-read-more[data-appearance="quiet"] .content-read-more-icon {
1874
- width: 2rem;
1875
- height: 2rem;
1876
- border: 1px solid var(--border);
1877
- border-radius: calc(var(--radius) - 2px);
1878
- background-color: var(--muted);
1879
- box-shadow: var(--shadow-xs);
1880
- }
1881
-
1882
- .content-read-more-icon :where(svg, .iconify) {
1883
- width: 1rem;
1884
- height: 1rem;
1885
- }
1886
-
1887
- .content-read-more-copy {
1888
- min-width: 0;
1889
- flex: 1;
1890
- }
1891
-
1892
- .content-read-more-label,
1893
- .content-read-more-description {
1894
- display: block;
1895
- }
1896
-
1897
- .content-read-more-label {
1898
- font-size: 0.875rem;
1899
- font-weight: 500;
1900
- }
1901
-
1902
- .content-read-more-description {
1903
- margin-top: 0.125rem;
1904
- color: var(--muted-foreground);
1905
- font-size: 0.8125rem;
1906
- }
1907
-
1908
- .content-read-more-arrow {
1909
- width: 1rem;
1910
- height: 1rem;
1911
- flex: none;
1912
- color: color-mix(in oklab, var(--muted-foreground) 55%, transparent);
1913
- transition: color 150ms ease;
1914
- }
1915
-
1916
- .content-read-more-link:hover .content-read-more-arrow {
1917
- color: var(--foreground);
1918
- }
1919
-
1920
- /* --- Accordion (object) --- */
1921
-
1922
- .content-accordion {
1923
- width: 100%;
1924
- margin-block: 1.25rem;
1925
- border-radius: var(--radius);
1926
- }
1927
-
1928
- .content-accordion[data-appearance="quiet"] {
1929
- overflow: hidden;
1930
- border: 1px solid var(--border);
1931
- background-color: var(--card);
1932
- box-shadow: var(--shadow-xs);
1933
- }
1934
-
1935
- .content-accordion[data-appearance="quiet"] .content-accordion-item + .content-accordion-item {
1936
- border-top: 1px solid var(--border);
1937
- }
1938
-
1939
- .content-accordion[data-appearance="tint"] {
1940
- display: flex;
1941
- flex-direction: column;
1942
- gap: 0.25rem;
1943
- background-color: var(--secondary);
1944
- padding: 0.25rem;
1945
- }
1946
-
1947
- .content-accordion[data-appearance="tint"] .content-accordion-item {
1948
- overflow: hidden;
1949
- border: 1px solid color-mix(in oklab, var(--border) 80%, transparent);
1950
- border-radius: calc(var(--radius) - 2px);
1951
- background-color: var(--background);
1952
- box-shadow: var(--shadow-xs);
1953
- }
1954
-
1955
- /* The header is an h3 for document structure; prose heading margins and
1956
- type must not leak into the trigger row (h3-prefixed to outrank
1957
- `.content-prose h3`). */
1958
- h3.content-accordion-header,
1959
- .content-accordion-header {
1960
- display: flex;
1961
- margin: 0;
1962
- font-size: 0.875rem;
1963
- line-height: 1.5;
1964
- }
1965
-
1966
- .content-accordion-trigger {
1967
- display: flex;
1968
- flex: 1;
1969
- align-items: center;
1970
- justify-content: space-between;
1971
- gap: 1rem;
1972
- padding: 0.65rem 0.9rem;
1973
- color: var(--foreground);
1974
- font-size: 0.875rem;
1975
- font-weight: 600;
1976
- line-height: 1.5;
1977
- text-align: start;
1978
- transition: background-color 180ms ease-out;
1979
- }
1980
-
1981
- .content-accordion-trigger:hover {
1982
- background-color: color-mix(in oklab, var(--secondary) 50%, transparent);
1983
- }
1984
-
1985
- .content-accordion[data-appearance="tint"] .content-accordion-trigger:hover {
1986
- background-color: color-mix(in oklab, var(--secondary) 35%, var(--background));
1987
- }
1988
-
1989
- .content-accordion-trigger:focus-visible {
1990
- outline: 2px solid color-mix(in oklab, var(--ring) 50%, transparent);
1991
- outline-offset: -2px;
1992
- }
1993
-
1994
- .content-accordion-chevron {
1995
- width: 1rem;
1996
- height: 1rem;
1997
- flex: none;
1998
- color: color-mix(in oklab, var(--muted-foreground) 55%, transparent);
1999
- transition: transform 200ms ease;
2000
- }
2001
-
2002
- .content-accordion-trigger:hover .content-accordion-chevron,
2003
- .content-accordion-trigger[data-state="open"] .content-accordion-chevron {
2004
- color: var(--muted-foreground);
2005
- }
2006
-
2007
- .content-accordion-trigger[data-state="open"] .content-accordion-chevron {
2008
- transform: rotate(180deg);
2009
- }
2010
-
2011
- .content-accordion-content {
2012
- overflow: hidden;
2013
- font-size: 0.875rem;
2014
- }
2015
-
2016
- .content-accordion-copy {
2017
- padding: 0 0.9rem 0.75rem;
2018
- color: var(--muted-foreground);
2019
- }
2020
-
2021
- /* Source disclosures in the component laboratory are intentionally flatter
2022
- than authored accordions. Their single code block is tooling, not content. */
2023
- .content-accordion:has(> .content-accordion-item:only-child .content-codeblock) {
2024
- border-color: color-mix(in oklab, var(--border) 70%, transparent);
2025
- background: transparent;
2026
- box-shadow: none;
2027
- padding: 0;
2028
- }
2029
-
2030
- .content-accordion:has(> .content-accordion-item:only-child .content-codeblock)
2031
- > .content-accordion-item {
2032
- border: 0;
2033
- background: transparent;
2034
- box-shadow: none;
2035
- }
2036
-
2037
- .content-accordion:has(> .content-accordion-item:only-child .content-codeblock)
2038
- .content-accordion-trigger {
2039
- min-height: 2.25rem;
2040
- padding: 0.45rem 0.75rem;
2041
- color: var(--muted-foreground);
2042
- font-size: 0.8125rem;
2043
- font-weight: 500;
2044
- }
2045
-
2046
- .content-accordion:has(> .content-accordion-item:only-child .content-codeblock)
2047
- .content-accordion-copy {
2048
- padding: 0 0 0.25rem;
2049
- }
2050
-
2051
- /* --- Tabs (object; canonical tint anatomy defined above) --- */
2052
-
2053
- .content-tabs[data-appearance="quiet"]:not(.content-tabs-in-stack) {
2054
- overflow: hidden;
2055
- border: 1px solid var(--border);
2056
- background-color: var(--card);
2057
- box-shadow: var(--shadow-xs);
2058
- padding: 0.125rem 0.25rem 0.25rem;
2059
- }
2060
-
2061
- .content-tabs[data-appearance="quiet"]:not(.content-tabs-in-stack) > .content-tabs-header {
2062
- padding: 0.25rem;
2063
- }
2064
-
2065
- .content-tabs[data-appearance="quiet"]:not(.content-tabs-in-stack) > .content-tabs-panels {
2066
- border-color: var(--border);
2067
- border-radius: calc(var(--radius) - 2px);
2068
- }
2069
-
2070
- .content-tabs[data-appearance="quiet"]:not(.content-tabs-in-stack) .content-tabs-tab-active,
2071
- .content-tabs[data-appearance="quiet"]:not(.content-tabs-in-stack)
2072
- .content-tabs-tab[aria-selected="true"] {
2073
- background-color: var(--muted);
2074
- box-shadow: none;
2075
- }
2076
-
2077
- /* layout="line": underline tabs, same anatomy as the code group header. */
2078
- .content-tabs[data-layout="line"] .content-tabs-tab {
2079
- height: 1.625rem;
2080
- border: 0;
2081
- border-bottom: 1px solid transparent;
2082
- border-radius: 0;
2083
- background-color: transparent;
2084
- box-shadow: none;
2085
- padding: 0 0.375rem 0.25rem;
2086
- }
2087
-
2088
- .content-tabs[data-layout="line"] .content-tabs-tab-active,
2089
- .content-tabs[data-layout="line"] .content-tabs-tab[aria-selected="true"] {
2090
- border-bottom-color: var(--primary);
2091
- color: var(--primary);
2092
- }
2093
-
2094
- /* --- Code blocks and code groups (object) --- */
2095
-
2096
- .content-codeblock[data-appearance="quiet"]:not(.content-codeblock-in-group) {
2097
- overflow: hidden;
2098
- border: 1px solid var(--border);
2099
- background-color: var(--card);
2100
- box-shadow: var(--shadow-xs);
2101
- padding: 0;
2102
- }
2103
-
2104
- .content-codeblock[data-appearance="quiet"]:not(.content-codeblock-in-group) [data-fd-caption] {
2105
- height: 2rem;
2106
- border-bottom: 1px solid var(--border);
2107
- background-color: color-mix(in oklab, var(--muted) 35%, transparent);
2108
- padding-right: 0.375rem;
2109
- padding-left: 0.75rem;
2110
- }
2111
-
2112
- .content-codeblock[data-appearance="quiet"]:not(.content-codeblock-in-group) .fd-scroll-container {
2113
- border: 0;
2114
- border-radius: 0;
2115
- background-color: transparent;
2116
- }
2117
-
2118
- .content-codeblock[data-appearance="quiet"]:not(.content-codeblock-in-group)
2119
- .content-codeblock-overflow-fade {
2120
- top: 0;
2121
- right: 0;
2122
- bottom: 0;
2123
- border-radius: 0;
2124
- background: linear-gradient(to right, transparent, var(--card));
2125
- }
2126
-
2127
- .content-codegroup[data-appearance="quiet"] {
2128
- overflow: hidden;
2129
- border: 1px solid var(--border);
2130
- background-color: var(--card);
2131
- box-shadow: var(--shadow-xs);
2132
- padding: 0;
2133
- }
2134
-
2135
- .content-codegroup[data-appearance="quiet"] .content-codegroup-header {
2136
- min-height: 2.25rem;
2137
- border-bottom: 1px solid var(--border);
2138
- background-color: color-mix(in oklab, var(--muted) 35%, transparent);
2139
- padding: 0.25rem 0.375rem 0.25rem 0.75rem;
2140
- }
2141
-
2142
- .content-codegroup[data-appearance="quiet"] .content-codegroup-panels {
2143
- border: 0;
2144
- border-radius: 0;
2145
- }
2146
-
2147
- /* Collapse fades to the local surface of the block it clips. */
2148
- .content-collapse:has(> .content-collapse-region [data-appearance="quiet"]) .content-collapse-fade {
2149
- background: linear-gradient(to bottom, transparent, var(--card) 82%);
2150
- }
2151
-
2152
- /* --- Files (object) --- */
2153
-
2154
- .content-files {
2155
- margin-block: 1.25rem;
2156
- border-radius: var(--radius);
2157
- padding: 0.375rem;
2158
- color: var(--foreground);
2159
- font-size: 0.8125rem;
2160
- }
2161
-
2162
- .content-files[data-appearance="quiet"] {
2163
- overflow: hidden;
2164
- border: 1px solid var(--border);
2165
- background-color: var(--card);
2166
- box-shadow: var(--shadow-xs);
2167
- }
2168
-
2169
- .content-files[data-appearance="tint"] {
2170
- background-color: var(--secondary);
2171
- }
2172
-
2173
- .content-files-list {
2174
- margin: 0;
2175
- padding: 0;
2176
- list-style: none;
2177
- }
2178
-
2179
- .content-files-list .content-files-list {
2180
- margin-inline-start: 1rem;
2181
- border-inline-start: 1px solid var(--border);
2182
- padding-inline-start: 0.5rem;
2183
- }
2184
-
2185
- .content-files[data-appearance="tint"] .content-files-list .content-files-list {
2186
- border-inline-start-color: color-mix(in oklab, var(--muted-foreground) 25%, transparent);
2187
- }
2188
-
2189
- .content-files-item {
2190
- margin: 0;
2191
- }
2192
-
2193
- .content-files-row {
2194
- display: flex;
2195
- min-height: 2rem;
2196
- align-items: center;
2197
- gap: 0.5rem;
2198
- border: 1px solid transparent;
2199
- border-radius: calc(var(--radius) - 2px);
2200
- padding: 0.3rem 0.5rem;
2201
- }
2202
-
2203
- /* quiet: the active file fills with secondary — tint: it raises as a panel. */
2204
- .content-files[data-appearance="quiet"] .content-files-row[data-active="true"] {
2205
- background-color: var(--secondary);
2206
- font-weight: 500;
2207
- }
2208
-
2209
- .content-files[data-appearance="tint"] .content-files-row[data-active="true"] {
2210
- border-color: color-mix(in oklab, var(--border) 80%, transparent);
2211
- background-color: var(--background);
2212
- box-shadow: var(--shadow-xs);
2213
- font-weight: 500;
2214
- }
2215
-
2216
- .content-files-icon {
2217
- width: 1rem;
2218
- height: 1rem;
2219
- flex: none;
2220
- color: var(--muted-foreground);
2221
- }
2222
-
2223
- .content-files-name {
2224
- min-width: 0;
2225
- overflow-wrap: anywhere;
2226
- }
2227
-
2228
- .content-files-annotation {
2229
- margin-inline-start: auto;
2230
- padding-inline-start: 0.75rem;
2231
- }
2232
-
2233
- /* --- Figure / media (object; canonical quiet anatomy defined above) --- */
2234
-
2235
- .content-media figcaption {
2236
- font-size: 0.8125rem;
2237
- text-align: start;
2238
- }
2239
-
2240
- .content-media[data-appearance="tint"] {
2241
- border: 0;
2242
- background-color: var(--secondary);
2243
- box-shadow: none;
2244
- padding: 0.25rem;
2245
- }
2246
-
2247
- .content-media[data-appearance="tint"] img {
2248
- border: 1px solid color-mix(in oklab, var(--border) 80%, transparent);
2249
- border-radius: calc(var(--radius) - 2px);
2250
- box-shadow: var(--shadow-xs);
2251
- }
2252
-
2253
- .content-media[data-appearance="tint"] figcaption {
2254
- border-top: 0;
2255
- background-color: transparent;
2256
- padding: 0.4rem 0.55rem 0.3rem;
2257
- }
2258
-
2259
- /* --- API (object) — inherits the tabs shell; owns its compact data grammar. */
2260
-
2261
- .content-api {
2262
- container-type: inline-size;
2263
- }
2264
-
2265
- .content-api-header {
2266
- display: grid;
2267
- grid-template-columns: minmax(0, 1fr) auto;
2268
- align-items: center;
2269
- }
2270
-
2271
- .content-api[data-stacked-header="true"] .content-api-header {
2272
- grid-template-columns: minmax(0, 1fr);
2273
- align-items: stretch;
2274
- }
2275
-
2276
- .content-api-identity {
2277
- display: flex;
2278
- min-width: 0;
2279
- align-items: center;
2280
- gap: 0.375rem;
2281
- padding-inline: 0.25rem;
2282
- white-space: nowrap;
2283
- }
2284
-
2285
- .content-api-method {
2286
- display: inline-flex;
2287
- height: 1.25rem;
2288
- flex: none;
2289
- align-items: center;
2290
- border-radius: calc(var(--radius) - 4px);
2291
- background-color: var(--accent-blue-muted);
2292
- padding-inline: 0.375rem;
2293
- color: var(--accent-blue);
2294
- font-family: var(--font-mono);
2295
- font-size: 0.6875rem;
2296
- font-weight: 600;
2297
- line-height: 1;
2298
- }
2299
-
2300
- .content-api-path {
2301
- min-width: 0;
2302
- overflow: hidden;
2303
- color: color-mix(in oklab, var(--foreground) 80%, transparent);
2304
- font-family: var(--font-mono);
2305
- font-size: 0.8125rem;
2306
- text-overflow: ellipsis;
2307
- white-space: nowrap;
2308
- }
2309
-
2310
- .content-api-title {
2311
- color: color-mix(in oklab, var(--foreground) 80%, transparent);
2312
- font-size: 0.8125rem;
2313
- font-weight: 500;
2314
- }
2315
-
2316
- .content-api-title-icon {
2317
- width: 0.875rem;
2318
- height: 0.875rem;
2319
- flex: none;
2320
- }
2321
-
2322
- .content-api-tabs {
2323
- max-width: 100%;
2324
- }
2325
-
2326
- .content-api[data-stacked-header="true"] .content-api-tabs {
2327
- width: 100%;
2328
- padding-top: 0.125rem;
2329
- }
2330
-
2331
- .content-api-count {
2332
- border-radius: 999px;
2333
- background-color: var(--muted);
2334
- padding: 1px 0.375rem;
2335
- color: var(--muted-foreground);
2336
- font-size: 0.6875rem;
2337
- }
2338
-
2339
- .content-api-row {
2340
- display: grid;
2341
- grid-template-columns: minmax(0, 1fr) auto;
2342
- align-items: start;
2343
- column-gap: 1rem;
2344
- row-gap: 0.125rem;
2345
- padding: 0.625rem 0.75rem;
2346
- }
2347
-
2348
- .content-api-signature {
2349
- min-width: 0;
2350
- overflow-x: auto;
2351
- font-family: var(--font-mono);
2352
- font-size: 0.8125rem;
2353
- line-height: 1.4;
2354
- white-space: nowrap;
2355
- }
2356
-
2357
- .content-api-name {
2358
- color: var(--accent-blue);
2359
- font-weight: 500;
2360
- }
2361
-
2362
- .content-api-name-deprecated {
2363
- opacity: 0.7;
2364
- text-decoration: line-through;
2365
- text-decoration-color: color-mix(in oklab, var(--foreground) 40%, transparent);
2366
- }
2367
-
2368
- .content-api-type {
2369
- color: var(--muted-foreground);
2370
- }
2371
-
2372
- .content-api-badges {
2373
- display: flex;
2374
- align-items: center;
2375
- gap: 0.25rem;
2376
- }
2377
-
2378
- .content-api-badge {
2379
- display: inline-flex;
2380
- height: 1.125rem;
2381
- align-items: center;
2382
- border-radius: 999px;
2383
- padding-inline: 0.4375rem;
2384
- font-size: 0.6875rem;
2385
- font-weight: 600;
2386
- letter-spacing: 0.015em;
2387
- line-height: 1;
2388
- }
2389
-
2390
- .content-api-badge[data-state="required"] {
2391
- background-color: var(--accent-coral-muted);
2392
- color: var(--accent-coral);
2393
- }
2394
-
2395
- .content-api-badge[data-state="deprecated"] {
2396
- background-color: var(--accent-yellow-muted);
2397
- color: var(--warning);
2398
- }
2399
-
2400
- .content-api-badge[data-state="since"] {
2401
- background-color: var(--accent-mint-muted);
2402
- color: var(--success);
2403
- }
2404
-
2405
- .content-api-description {
2406
- grid-column: 1 / -1;
2407
- color: var(--muted-foreground);
2408
- font-size: 0.8125rem;
2409
- line-height: 1.4;
2410
- }
2411
-
2412
- .content-api-inline-code {
2413
- border-radius: calc(var(--radius) - 4px);
2414
- background-color: var(--muted);
2415
- padding: 1px 0.25rem;
2416
- color: var(--foreground);
2417
- font-family: var(--font-mono);
2418
- font-size: 0.75rem;
2419
- }
2420
-
2421
- .content-api .content-tabs-panels [role="tabpanel"] > div + div {
2422
- border-top: 1px solid color-mix(in oklab, var(--border) 60%, transparent);
2423
- }
2424
-
2425
- @container (max-width: 34rem) {
2426
- .content-api-header {
2427
- grid-template-columns: minmax(0, 1fr);
2428
- align-items: stretch;
2429
- }
2430
-
2431
- .content-api-tabs {
2432
- width: 100%;
2433
- padding-top: 0.125rem;
2434
- }
2435
- }
2436
-
2437
- @container (max-width: 24rem) {
2438
- .content-api-row {
2439
- grid-template-columns: minmax(0, 1fr);
2440
- }
2441
-
2442
- .content-api-badges {
2443
- grid-row: 2;
2444
- }
2445
- }
2446
-
2447
- /* --- Quiz (object) --- */
2448
-
2449
- .content-quiz {
2450
- margin-block: 1.25rem;
2451
- border-radius: var(--radius);
2452
- color: var(--foreground);
2453
- }
2454
-
2455
- .content-quiz[data-appearance="quiet"] {
2456
- overflow: hidden;
2457
- border: 1px solid var(--border);
2458
- background-color: var(--card);
2459
- box-shadow: var(--shadow-xs);
2460
- }
2461
-
2462
- .content-quiz[data-appearance="tint"] {
2463
- display: flex;
2464
- flex-direction: column;
2465
- gap: 0.25rem;
2466
- background-color: var(--secondary);
2467
- padding: 0.25rem;
2468
- }
2469
-
2470
- .content-quiz-header {
2471
- display: flex;
2472
- align-items: center;
2473
- gap: 0.6rem;
2474
- min-height: 2.25rem;
2475
- padding: 0.4rem 0.9rem;
2476
- }
2477
-
2478
- .content-quiz[data-appearance="quiet"] .content-quiz-header {
2479
- border-bottom: 1px solid var(--border);
2480
- background-color: color-mix(in oklab, var(--muted) 35%, transparent);
2481
- }
2482
-
2483
- .content-quiz[data-appearance="tint"] .content-quiz-header {
2484
- padding: 0.3rem 0.65rem 0.15rem;
2485
- }
2486
-
2487
- .content-quiz-header-icon {
2488
- width: 1rem;
2489
- height: 1rem;
2490
- flex: none;
2491
- color: var(--muted-foreground);
2492
- }
2493
-
2494
- .content-quiz-heading {
2495
- min-width: 0;
2496
- flex: 1;
2497
- display: flex;
2498
- flex-wrap: wrap;
2499
- align-items: baseline;
2500
- column-gap: 0.6rem;
2501
- }
2502
-
2503
- .content-quiz-title {
2504
- color: var(--foreground);
2505
- font-size: 0.875rem;
2506
- font-weight: 600;
2507
- line-height: 1.5;
2508
- }
2509
-
2510
- .content-quiz-description {
2511
- color: var(--muted-foreground);
2512
- font-size: 0.8125rem;
2513
- }
2514
-
2515
- .content-quiz-body {
2516
- padding: 0.9rem;
2517
- }
2518
-
2519
- .content-quiz[data-appearance="tint"] .content-quiz-body {
2520
- border: 1px solid color-mix(in oklab, var(--border) 80%, transparent);
2521
- border-radius: calc(var(--radius) - 2px);
2522
- background-color: var(--background);
2523
- box-shadow: var(--shadow-xs);
2524
- }
2525
-
2526
- .content-quiz-footer {
2527
- display: flex;
2528
- flex-wrap: wrap;
2529
- align-items: center;
2530
- justify-content: space-between;
2531
- gap: 0.6rem;
2532
- padding: 0.5rem 0.9rem;
2533
- }
2534
-
2535
- .content-quiz[data-appearance="quiet"] .content-quiz-footer {
2536
- border-top: 1px solid var(--border);
2537
- }
2538
-
2539
- .content-quiz[data-appearance="tint"] .content-quiz-footer {
2540
- padding: 0.35rem 0.65rem;
2541
- }
2542
-
2543
- .content-quiz-dots {
2544
- display: flex;
2545
- align-items: center;
2546
- gap: 0.375rem;
2547
- }
2548
-
2549
- .content-quiz-dot {
2550
- width: 0.5rem;
2551
- height: 0.5rem;
2552
- flex: none;
2553
- appearance: none;
2554
- border: 0;
2555
- border-radius: 999px;
2556
- background-color: color-mix(in oklab, var(--muted-foreground) 30%, transparent);
2557
- padding: 0;
2558
- cursor: pointer;
2559
- transition:
2560
- background-color 150ms ease,
2561
- transform 150ms ease,
2562
- box-shadow 150ms ease;
2563
- }
2564
-
2565
- .content-quiz-dot[data-state="answered"] {
2566
- background-color: var(--primary);
2567
- }
2568
-
2569
- .content-quiz-dot[data-state="active"] {
2570
- background-color: var(--primary);
2571
- box-shadow: 0 0 0 3px color-mix(in oklab, var(--primary) 30%, transparent);
2572
- transform: scale(1.15);
2573
- }
2574
-
2575
- .content-quiz-dot:focus-visible {
2576
- outline: 2px solid color-mix(in oklab, var(--ring) 50%, transparent);
2577
- outline-offset: 2px;
2578
- }
2579
-
2580
- .content-quiz-nav {
2581
- display: flex;
2582
- align-items: center;
2583
- gap: 0.5rem;
2584
- }
2585
-
2586
- .content-quiz-button {
2587
- display: inline-flex;
2588
- height: 2rem;
2589
- align-items: center;
2590
- justify-content: center;
2591
- gap: 0.375rem;
2592
- appearance: none;
2593
- cursor: pointer;
2594
- border: 1px solid var(--border);
2595
- border-radius: 999px;
2596
- background-color: var(--secondary);
2597
- padding: 0 0.75rem;
2598
- color: var(--foreground);
2599
- font-family: var(--font-body);
2600
- font-size: 0.75rem;
2601
- font-weight: 500;
2602
- line-height: 1.25rem;
2603
- white-space: nowrap;
2604
- transition:
2605
- border-color 150ms ease,
2606
- background-color 150ms ease;
2607
- }
2608
-
2609
- .content-quiz-button :where(svg, .iconify) {
2610
- width: 0.875rem;
2611
- height: 0.875rem;
2612
- }
2613
-
2614
- .content-quiz-button:hover:not(:disabled) {
2615
- border-color: color-mix(in oklab, var(--foreground) 25%, transparent);
2616
- }
2617
-
2618
- .content-quiz-button:disabled {
2619
- pointer-events: none;
2620
- opacity: 0.5;
2621
- }
2622
-
2623
- .content-quiz-button:focus-visible {
2624
- outline: 2px solid color-mix(in oklab, var(--ring) 50%, transparent);
2625
- outline-offset: 2px;
2626
- }
2627
-
2628
- .content-quiz-button-ghost {
2629
- border-color: transparent;
2630
- background-color: transparent;
2631
- color: var(--muted-foreground);
2632
- }
2633
-
2634
- .content-quiz-button-ghost:hover:not(:disabled) {
2635
- border-color: transparent;
2636
- background-color: var(--secondary);
2637
- color: var(--foreground);
2638
- }
2639
-
2640
- .content-quiz-question {
2641
- display: grid;
2642
- gap: 0.9rem;
2643
- }
2644
-
2645
- /* A quiz-question used directly in prose, outside a ::quiz shell. */
2646
- .content-quiz-question-standalone {
2647
- margin-block: 1.25rem;
2648
- }
2649
-
2650
- .content-quiz-question-title {
2651
- margin: 0;
2652
- color: var(--foreground);
2653
- font-size: 0.875rem;
2654
- font-weight: 600;
2655
- line-height: 1.5;
2656
- }
2657
-
2658
- .content-quiz-question-hint {
2659
- margin-inline-start: 0.5rem;
2660
- color: var(--muted-foreground);
2661
- font-size: 0.75rem;
2662
- font-weight: 400;
2663
- }
2664
-
2665
- .content-quiz-options {
2666
- display: grid;
2667
- gap: 0.5rem;
2668
- }
2669
-
2670
- .content-quiz-option {
2671
- display: flex;
2672
- width: 100%;
2673
- align-items: center;
2674
- gap: 0.75rem;
2675
- appearance: none;
2676
- cursor: pointer;
2677
- border: 1px solid var(--border);
2678
- border-radius: calc(var(--radius) - 2px);
2679
- background-color: transparent;
2680
- padding: 0.5rem 0.75rem;
2681
- color: var(--foreground);
2682
- font-size: 0.875rem;
2683
- text-align: start;
2684
- transition:
2685
- border-color 180ms ease-out,
2686
- background-color 180ms ease-out;
2687
- }
2688
-
2689
- .content-quiz-option:not(:disabled):hover {
2690
- background-color: color-mix(in oklab, var(--secondary) 50%, transparent);
2691
- }
2692
-
2693
- .content-quiz-option:disabled {
2694
- cursor: default;
2695
- }
2696
-
2697
- .content-quiz-option:focus-visible {
2698
- outline: 2px solid color-mix(in oklab, var(--ring) 50%, transparent);
2699
- outline-offset: 2px;
2700
- }
2701
-
2702
- .content-quiz-option[data-state="selected"] {
2703
- border-color: color-mix(in oklab, var(--primary) 55%, var(--border));
2704
- background-color: color-mix(in oklab, var(--primary) 8%, transparent);
2705
- }
2706
-
2707
- .content-quiz-option[data-state="correct"] {
2708
- border-color: color-mix(in oklab, var(--success) 55%, var(--border));
2709
- background-color: color-mix(in oklab, var(--success) 8%, transparent);
2710
- }
2711
-
2712
- .content-quiz-option[data-state="incorrect"] {
2713
- border-color: color-mix(in oklab, var(--destructive) 55%, var(--border));
2714
- background-color: color-mix(in oklab, var(--destructive) 7%, transparent);
2715
- }
2716
-
2717
- .content-quiz-option-key {
2718
- display: grid;
2719
- width: 1.5rem;
2720
- height: 1.5rem;
2721
- flex: none;
2722
- place-items: center;
2723
- border-radius: calc(var(--radius) - 4px);
2724
- background-color: var(--muted);
2725
- color: var(--muted-foreground);
2726
- font-size: 0.75rem;
2727
- font-weight: 700;
2728
- }
2729
-
2730
- .content-quiz-option[data-state="selected"] .content-quiz-option-key {
2731
- background-color: var(--primary);
2732
- color: var(--primary-foreground);
2733
- }
2734
-
2735
- .content-quiz-option[data-state="correct"] .content-quiz-option-key {
2736
- background-color: var(--success);
2737
- color: var(--success-foreground);
2738
- }
2739
-
2740
- .content-quiz-option[data-state="incorrect"] .content-quiz-option-key {
2741
- background-color: var(--destructive);
2742
- color: var(--destructive-foreground);
2743
- }
2744
-
2745
- .content-quiz-option-label {
2746
- min-width: 0;
2747
- flex: 1;
2748
- }
2749
-
2750
- .content-quiz-option-result {
2751
- width: 1rem;
2752
- height: 1rem;
2753
- flex: none;
2754
- }
2755
-
2756
- .content-quiz-option[data-state="correct"] .content-quiz-option-result {
2757
- color: var(--success);
2758
- }
2759
-
2760
- .content-quiz-option[data-state="incorrect"] .content-quiz-option-result {
2761
- color: var(--destructive);
2762
- }
2763
-
2764
- .content-quiz-actions {
2765
- display: flex;
2766
- align-items: center;
2767
- gap: 0.75rem;
2768
- }
2769
-
2770
- .content-quiz-result {
2771
- font-size: 0.875rem;
2772
- font-weight: 500;
2773
- }
2774
-
2775
- .content-quiz-result[data-state="correct"] {
2776
- color: var(--success);
2777
- }
2778
-
2779
- .content-quiz-result[data-state="incorrect"] {
2780
- color: var(--destructive);
2781
- }
2782
-
2783
- .content-quiz-explanation {
2784
- display: flex;
2785
- gap: 0.6rem;
2786
- border: 1px solid color-mix(in oklab, var(--info) 25%, var(--border));
2787
- border-radius: calc(var(--radius) - 2px);
2788
- background-color: color-mix(in oklab, var(--info) 7%, transparent);
2789
- padding: 0.65rem 0.85rem;
2790
- color: var(--foreground);
2791
- font-size: 0.875rem;
2792
- }
2793
-
2794
- .content-quiz-explanation-icon {
2795
- width: 1rem;
2796
- height: 1rem;
2797
- flex: none;
2798
- margin-top: 0.15rem;
2799
- color: var(--info);
2800
- }
2801
-
2802
- .content-quiz-results {
2803
- display: flex;
2804
- flex-direction: column;
2805
- align-items: center;
2806
- gap: 1rem;
2807
- padding: 1.75rem 0.9rem;
2808
- text-align: center;
2809
- }
2810
-
2811
- .content-quiz-results-icon {
2812
- display: grid;
2813
- width: 3rem;
2814
- height: 3rem;
2815
- place-items: center;
2816
- border-radius: 999px;
2817
- background-color: var(--muted);
2818
- color: var(--muted-foreground);
2819
- }
2820
-
2821
- .content-quiz-results-icon[data-state="perfect"] {
2822
- background-color: color-mix(in oklab, var(--success) 12%, transparent);
2823
- color: var(--success);
2824
- }
2825
-
2826
- .content-quiz-results-icon :where(svg, .iconify) {
2827
- width: 1.5rem;
2828
- height: 1.5rem;
2829
- }
2830
-
2831
- .content-quiz-results-score {
2832
- margin: 0;
2833
- color: var(--foreground);
2834
- font-size: 1rem;
2835
- font-weight: 600;
2836
- }
2837
-
2838
- .content-quiz-results-note {
2839
- margin: 0.25rem 0 0;
2840
- color: var(--muted-foreground);
2841
- font-size: 0.875rem;
2842
- }
2843
-
2844
- /* --- Timeline (sequence) ---------------------------------------------------
2845
- quiet: the steps rail — 1px hairline, 1.75rem bordered tile markers,
2846
- title-first head row, accent chip for the phase.
2847
- tint: the RFC v2 rail — one continuous 2px bar, dot markers, tint date
2848
- chips, uppercase phase, and an accent segment only through the active
2849
- item. */
2850
-
2851
- .content-timeline {
2852
- position: relative;
2853
- margin: 1.5rem 0 1.75rem;
2854
- }
2855
-
2856
- .content-timeline-item {
2857
- position: relative;
2858
- padding-bottom: 1.5rem;
2859
- }
2860
-
2861
- .content-timeline-item:last-child {
2862
- padding-bottom: 0;
2863
- }
2864
-
2865
- .content-timeline-head {
2866
- display: flex;
2867
- flex-wrap: wrap;
2868
- align-items: center;
2869
- gap: 0.5rem;
2870
- margin-bottom: 0.25rem;
2871
- }
2872
-
2873
- .content-timeline-title {
2874
- order: 1;
2875
- margin: 0;
2876
- color: var(--foreground);
2877
- font-size: 0.875rem;
2878
- font-weight: 600;
2879
- line-height: 1.5;
2880
- }
2881
-
2882
- .content-timeline-date {
2883
- order: 2;
2884
- }
2885
-
2886
- .content-timeline-label {
2887
- order: 3;
2888
- }
2889
-
2890
- .content-timeline-body {
2891
- color: var(--muted-foreground);
2892
- font-size: 0.875rem;
2893
- }
2894
-
2895
- .content-timeline-marker {
2896
- position: absolute;
2897
- display: flex;
2898
- align-items: center;
2899
- justify-content: center;
2900
- }
2901
-
2902
- /* quiet */
2903
-
2904
- .content-timeline[data-appearance="quiet"] {
2905
- margin-inline-start: 0.875rem;
2906
- border-inline-start: 1px solid var(--border);
2907
- padding-inline-start: 2rem;
2908
- }
2909
-
2910
- .content-timeline[data-appearance="quiet"] .content-timeline-marker {
2911
- inset-block-start: 0.125rem;
2912
- inset-inline-start: -2.875rem;
2913
- width: 1.75rem;
2914
- height: 1.75rem;
2915
- border: 1px solid var(--border);
2916
- border-radius: calc(var(--radius) - 2px);
2917
- background-color: var(--secondary);
2918
- color: var(--muted-foreground);
2919
- }
2920
-
2921
- .content-timeline[data-appearance="quiet"] .content-timeline-marker-icon {
2922
- width: 0.85rem;
2923
- height: 0.85rem;
2924
- }
2925
-
2926
- .content-timeline[data-appearance="quiet"]
2927
- .content-timeline-marker-icon
2928
- + .content-timeline-marker-dot {
2929
- display: none;
2930
- }
2931
-
2932
- .content-timeline[data-appearance="quiet"] .content-timeline-marker-dot {
2933
- width: 0.375rem;
2934
- height: 0.375rem;
2935
- border-radius: 999px;
2936
- background-color: var(--muted-foreground);
2937
- }
2938
-
2939
- .content-timeline[data-appearance="quiet"] .content-timeline-date {
2940
- order: 2;
2941
- }
2942
-
2943
- .content-timeline[data-appearance="quiet"] .content-timeline-label {
2944
- display: inline-flex;
2945
- align-items: center;
2946
- border-radius: 0.375rem;
2947
- background-color: color-mix(in oklab, var(--info) 12%, transparent);
2948
- padding: 0.05rem 0.5rem;
2949
- color: var(--info);
2950
- font-size: 0.72rem;
2951
- font-weight: 500;
2952
- }
2953
-
2954
- /* tint (RFC v2: the bar IS the timeline) */
2955
-
2956
- .content-timeline[data-appearance="tint"] {
2957
- padding-inline-start: 1.75rem;
2958
- }
2959
-
2960
- .content-timeline[data-appearance="tint"]::before {
2961
- content: "";
2962
- position: absolute;
2963
- inset-block: 0.45rem;
2964
- inset-inline-start: 0.37rem;
2965
- width: 2px;
2966
- border-radius: 999px;
2967
- background-color: color-mix(in oklab, var(--muted-foreground) 22%, transparent);
2968
- }
2969
-
2970
- .content-timeline[data-appearance="tint"] .content-timeline-marker {
2971
- inset-block-start: 0.3rem;
2972
- inset-inline-start: -1.75rem;
2973
- width: 0.875rem;
2974
- height: 0.875rem;
2975
- border-radius: 999px;
2976
- background-color: var(--secondary);
2977
- outline: 3px solid var(--background);
2978
- }
2979
-
2980
- .content-timeline[data-appearance="tint"] .content-timeline-marker-icon {
2981
- display: none;
2982
- }
2983
-
2984
- .content-timeline[data-appearance="tint"] .content-timeline-marker-dot {
2985
- width: 0.375rem;
2986
- height: 0.375rem;
2987
- border-radius: 999px;
2988
- background-color: var(--muted-foreground);
2989
- }
2990
-
2991
- .content-timeline[data-appearance="tint"]
2992
- .content-timeline-item[data-active="true"]
2993
- .content-timeline-marker-dot {
2994
- background-color: var(--info);
2995
- }
2996
-
2997
- /* The accent segment runs only through the active item. */
2998
- .content-timeline[data-appearance="tint"] .content-timeline-item[data-active="true"]::before {
2999
- content: "";
3000
- position: absolute;
3001
- inset-block: 0.95rem 0;
3002
- inset-inline-start: calc(-1.75rem + 0.37rem);
3003
- width: 2px;
3004
- border-radius: 999px;
3005
- background-color: color-mix(in oklab, var(--info) 65%, transparent);
3006
- }
3007
-
3008
- .content-timeline[data-appearance="tint"] .content-timeline-title {
3009
- order: 4;
3010
- flex-basis: 100%;
3011
- }
3012
-
3013
- .content-timeline[data-appearance="tint"] .content-timeline-date {
3014
- border-radius: 0.375rem;
3015
- background-color: var(--secondary);
3016
- padding: 0.05rem 0.5rem;
3017
- font-size: 0.72rem;
3018
- }
3019
-
3020
- .content-timeline[data-appearance="tint"] .content-timeline-label {
3021
- color: var(--muted-foreground);
3022
- font-size: 0.6875rem;
3023
- font-weight: 600;
3024
- letter-spacing: 0.08em;
3025
- text-transform: uppercase;
3026
- }
3027
-
3028
- .content-timeline[data-appearance="tint"]
3029
- .content-timeline-item[data-active="true"]
3030
- .content-timeline-label {
3031
- color: var(--info);
3032
- }
3033
-
3034
- /* --- Steps (sequence; canonical quiet rail defined above) --- */
3035
-
3036
- .content-steps {
3037
- margin: 1.5rem 0 1.75rem 0.875rem;
3038
- }
3039
-
3040
- /* tint: no hairline rail — tint number chips with bar segments between. */
3041
- .content-steps[data-appearance="tint"] {
3042
- margin-inline-start: 0;
3043
- border-inline-start: 0;
3044
- padding-inline-start: 2.35rem;
3045
- }
3046
-
3047
- .content-steps[data-appearance="tint"] .content-step-marker {
3048
- inset-inline-start: -2.35rem;
3049
- width: 1.6rem;
3050
- height: 1.6rem;
3051
- border: 0;
3052
- border-radius: 999px;
3053
- background-color: var(--secondary);
3054
- color: var(--foreground);
3055
- font-size: 0.78rem;
3056
- font-weight: 600;
3057
- }
3058
-
3059
- .content-steps[data-appearance="tint"] .content-step:not(:last-child)::after {
3060
- content: "";
3061
- position: absolute;
3062
- inset-block-start: 2.1rem;
3063
- inset-block-end: calc(-1.25rem + 0.35rem);
3064
- inset-inline-start: calc(-2.35rem + 0.74rem);
3065
- width: 2px;
3066
- border-radius: 999px;
3067
- background-color: color-mix(in oklab, var(--muted-foreground) 30%, transparent);
3068
- }
3069
-
3070
- /* --- Inline TOC (structural, appearance-neutral card) --- */
3071
-
3072
- .content-inline-toc {
3073
- margin-block: 1.25rem;
3074
- border: 1px solid var(--border);
3075
- border-radius: var(--radius);
3076
- background-color: var(--card);
3077
- box-shadow: var(--shadow-xs);
3078
- color: var(--foreground);
3079
- }
3080
-
3081
- .content-inline-toc-trigger {
3082
- display: flex;
3083
- width: 100%;
3084
- align-items: center;
3085
- gap: 0.5rem;
3086
- appearance: none;
3087
- cursor: pointer;
3088
- border: 0;
3089
- border-radius: inherit;
3090
- background-color: transparent;
3091
- padding: 0.65rem 0.9rem;
3092
- color: var(--foreground);
3093
- font-family: var(--font-body);
3094
- font-size: 0.875rem;
3095
- font-weight: 500;
3096
- text-align: start;
3097
- transition: background-color 180ms ease-out;
3098
- }
3099
-
3100
- .content-inline-toc-trigger:hover {
3101
- background-color: color-mix(in oklab, var(--secondary) 50%, transparent);
3102
- }
3103
-
3104
- .content-inline-toc-trigger:focus-visible {
3105
- outline: 2px solid color-mix(in oklab, var(--ring) 50%, transparent);
3106
- outline-offset: -2px;
3107
- }
3108
-
3109
- .content-inline-toc-icon {
3110
- width: 1rem;
3111
- height: 1rem;
3112
- flex: none;
3113
- color: var(--muted-foreground);
3114
- }
3115
-
3116
- .content-inline-toc-title {
3117
- min-width: 0;
3118
- overflow: hidden;
3119
- text-overflow: ellipsis;
3120
- white-space: nowrap;
3121
- }
3122
-
3123
- .content-inline-toc-chevron {
3124
- width: 1rem;
3125
- height: 1rem;
3126
- flex: none;
3127
- margin-inline-start: auto;
3128
- color: color-mix(in oklab, var(--muted-foreground) 55%, transparent);
3129
- transition: transform 200ms ease;
3130
- }
3131
-
3132
- .content-inline-toc-trigger[data-state="open"] .content-inline-toc-chevron {
3133
- transform: rotate(180deg);
3134
- }
3135
-
3136
- .content-inline-toc-content {
3137
- padding: 0 0.9rem 0.9rem;
3138
- }
3139
-
3140
- /* --- Prose bodies inside components -----------------------------------------
3141
- These selectors match `.content-prose.content-prose` (0,2,0) and win by
3142
- order: component bodies read at the component scale, and annotation
3143
- bodies (aside, excerpt, timeline, accordion, card) read muted. */
3144
-
3145
- .content-aside-body.content-prose,
3146
- .content-excerpt-body.content-prose,
3147
- .content-timeline-body.content-prose,
3148
- .content-accordion-copy.content-prose,
3149
- .content-card-body.content-prose {
3150
- color: var(--muted-foreground);
3151
- font-size: 0.875rem;
3152
- line-height: 1.625;
3153
- }
3154
-
3155
- .content-tabs-content-area.content-prose,
3156
- .content-quiz-explanation .content-prose {
3157
- font-size: 0.875rem;
3158
- }
3159
-
3160
- .content-step-body.content-prose {
3161
- color: var(--muted-foreground);
3162
- font-size: 0.875rem;
3163
- line-height: 1.625;
3164
- }
3165
-
3166
- /* Component titles rendered as p elements: match `.content-prose p` (0,1,1). */
3167
- p.content-timeline-title,
3168
- p.content-quiz-question-title {
3169
- font-size: 0.875rem;
3170
- line-height: 1.5;
3171
- }
3172
-
3173
- p.content-quiz-results-score {
3174
- font-size: 1rem;
3175
- line-height: 1.5;
3176
- }
3177
-
3178
- p.content-quiz-results-note {
3179
- font-size: 0.875rem;
3180
- line-height: 1.5;
3181
- }
3182
-
3183
- /* --- Kbd (inline; a compact, lightly raised physical key) --- */
3184
-
3185
- .content-kbd {
3186
- display: inline-grid;
3187
- min-width: 1.625rem;
3188
- height: 1.625rem;
3189
- place-items: center;
3190
- border: 1px solid color-mix(in oklab, var(--foreground) 12%, var(--border));
3191
- border-bottom-color: color-mix(in oklab, var(--foreground) 24%, var(--border));
3192
- border-radius: calc(var(--radius) - 3px);
3193
- background: color-mix(in oklab, var(--muted) 78%, var(--background));
3194
- box-shadow:
3195
- 0 1px 1px color-mix(in oklab, var(--foreground) 10%, transparent),
3196
- inset 0 1px 0 color-mix(in oklab, var(--background) 80%, transparent);
3197
- padding-inline: 0.4rem;
3198
- color: var(--foreground);
3199
- font-family: inherit;
3200
- font-size: 0.75rem;
3201
- font-weight: 600;
3202
- line-height: 1;
3203
- vertical-align: 0.08em;
3204
- white-space: nowrap;
3205
- }
3206
-
3207
- @media (pointer: coarse) {
3208
- :where(
3209
- .content-tabs-tab,
3210
- .content-codegroup-tab,
3211
- .content-code-tree-row,
3212
- .content-accordion-trigger,
3213
- .content-inline-toc-trigger,
3214
- .content-collapse-button
3215
- ) {
3216
- min-height: 2.75rem;
3217
- }
3218
- }
3219
-
3220
- @media (prefers-reduced-motion: reduce) {
3221
- :where(
3222
- .content-card-surface,
3223
- .content-card-arrow,
3224
- .content-read-more-link,
3225
- .content-read-more-arrow,
3226
- .content-accordion-trigger,
3227
- .content-accordion-chevron,
3228
- .content-tabs-tab,
3229
- .content-codegroup-tab,
3230
- .content-code-tree-row,
3231
- .content-code-tree-chevron,
3232
- .content-inline-toc-trigger,
3233
- .content-inline-toc-chevron,
3234
- .content-quiz-option,
3235
- .content-quiz-button,
3236
- .content-quiz-dot
3237
- ) {
3238
- transition-duration: 0.01ms;
3239
- }
3240
- }