@master/internal-site 0.0.0-stage → 0.1.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 (687) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +66 -2
  3. package/dist/astro.d.mts +3 -0
  4. package/dist/astro.mjs +510 -0
  5. package/dist/config.d.mts +64 -0
  6. package/dist/config.mjs +10 -0
  7. package/package.json +384 -4
  8. package/src/astro/Page.astro +12 -0
  9. package/src/astro/content-pages.ts +75 -0
  10. package/src/astro/index.ts +124 -0
  11. package/src/astro/module-id.ts +4 -0
  12. package/src/astro/propagated-assets.ts +29 -0
  13. package/src/astro/route-paths.ts +78 -0
  14. package/src/astro/routes.template.ts +110 -0
  15. package/src/astro/server-styles.ts +26 -0
  16. package/src/astro/site-context.ts +27 -0
  17. package/src/astro/source-url.ts +22 -0
  18. package/src/astro/svelte-renderer.ts +45 -0
  19. package/src/astro/svg-markup.ts +23 -0
  20. package/src/benchmarks/BenchmarkBarRows.astro +34 -0
  21. package/src/benchmarks/BenchmarkBars.astro +14 -0
  22. package/src/benchmarks/BenchmarkChart.astro +53 -0
  23. package/src/benchmarks/BenchmarkChartGroup.astro +24 -0
  24. package/src/benchmarks/BenchmarkDataTable.astro +24 -0
  25. package/src/benchmarks/BenchmarkDelta.astro +23 -0
  26. package/src/benchmarks/BenchmarkFigure.astro +30 -0
  27. package/src/benchmarks/BenchmarkMetricTable.astro +38 -0
  28. package/src/benchmarks/BenchmarkMetrics.astro +23 -0
  29. package/src/benchmarks/BenchmarkSampleSummary.astro +30 -0
  30. package/src/benchmarks/BenchmarkScrollRegion.svelte +27 -0
  31. package/src/benchmarks/BenchmarkSource.astro +20 -0
  32. package/src/benchmarks/BenchmarkStackedBars.astro +54 -0
  33. package/src/benchmarks/BenchmarkStatus.astro +16 -0
  34. package/src/benchmarks/types.ts +98 -0
  35. package/src/benchmarks/utils.ts +42 -0
  36. package/src/blog/BlogAuthors.astro +25 -0
  37. package/src/blog/article/BlogArticleContents.svelte +24 -0
  38. package/src/blog/article/BlogArticleEnd.astro +55 -0
  39. package/src/blog/article/BlogArticleMasthead.astro +61 -0
  40. package/src/blog/article/language.ts +29 -0
  41. package/src/blog/article/neighbors.ts +27 -0
  42. package/src/blog/article/title-lines.astro +14 -0
  43. package/src/blog/article/title-parts.ts +9 -0
  44. package/src/components.d.ts +5 -0
  45. package/src/config.ts +66 -0
  46. package/src/css/ButtonPreview.astro +22 -0
  47. package/src/css/ConfiguredExample.astro +15 -0
  48. package/src/css/NamespaceUtilityTable.astro +50 -0
  49. package/src/css/StylesheetExample.astro +15 -0
  50. package/src/css/ThemeNumberVariableTable.astro +57 -0
  51. package/src/css/configured-example.ts +53 -0
  52. package/src/css/foundation-data/elevation/shadow-data.ts +52 -0
  53. package/src/css/foundation-data/sizing/scale-data.ts +37 -0
  54. package/src/css/foundation-data/specimen-content.ts +10 -0
  55. package/src/css/foundation-data/specimens.ts +96 -0
  56. package/src/css/foundation-data/tokens.ts +32 -0
  57. package/src/css/generate-preset-css.ts +12 -0
  58. package/src/css/highlight.ts +34 -0
  59. package/src/css/manifest-utilities.ts +29 -0
  60. package/src/css/markdown.ts +279 -0
  61. package/src/css/preset-css.ts +15 -0
  62. package/src/css/preset-manifest.ts +3 -0
  63. package/src/css/stylesheet-example.ts +26 -0
  64. package/src/css/theme-variables.ts +74 -0
  65. package/src/css/variable-namespace-sources.ts +20 -0
  66. package/src/demo/Demo.svelte +55 -0
  67. package/src/demo/DemoAsset.astro +38 -0
  68. package/src/demo/DemoAxes.svelte +22 -0
  69. package/src/demo/DemoBadge.svelte +18 -0
  70. package/src/demo/DemoCatalog.astro +36 -0
  71. package/src/demo/DemoComparison.svelte +36 -0
  72. package/src/demo/DemoConfiguredExample.astro +48 -0
  73. package/src/demo/DemoContainer.svelte +48 -0
  74. package/src/demo/DemoControls.svelte +16 -0
  75. package/src/demo/DemoCopyButton.svelte +50 -0
  76. package/src/demo/DemoCopyGroup.svelte +15 -0
  77. package/src/demo/DemoExample.astro +27 -0
  78. package/src/demo/DemoFeatureSupport.svelte +18 -0
  79. package/src/demo/DemoGeneratedCSS.svelte +8 -0
  80. package/src/demo/DemoIndex.astro +23 -0
  81. package/src/demo/DemoInstallation.astro +17 -0
  82. package/src/demo/DemoItem.svelte +17 -0
  83. package/src/demo/DemoLabel.svelte +15 -0
  84. package/src/demo/DemoLegend.svelte +15 -0
  85. package/src/demo/DemoMeasure.svelte +28 -0
  86. package/src/demo/DemoMedia.svelte +43 -0
  87. package/src/demo/DemoMotion.svelte +41 -0
  88. package/src/demo/DemoPageViewport.astro +17 -0
  89. package/src/demo/DemoPalette.astro +29 -0
  90. package/src/demo/DemoPaletteGroups.svelte +15 -0
  91. package/src/demo/DemoScrollArea.svelte +15 -0
  92. package/src/demo/DemoStyleComparison.astro +25 -0
  93. package/src/demo/DemoSurface.svelte +15 -0
  94. package/src/demo/DemoSwatch.svelte +19 -0
  95. package/src/demo/DemoThemeComparison.astro +30 -0
  96. package/src/demo/DemoTokenTable.astro +34 -0
  97. package/src/demo/DemoViewTransition.astro +18 -0
  98. package/src/demo/DemoViewport.svelte +324 -0
  99. package/src/demo/DemoWaterfall.astro +30 -0
  100. package/src/demo/FoundationBreakpoint.astro +12 -0
  101. package/src/demo/ProjectStyleExample.astro +13 -0
  102. package/src/demo/copy-feedback.ts +10 -0
  103. package/src/demo/demo-waterfall.ts +17 -0
  104. package/src/demo/drag-readings.ts +20 -0
  105. package/src/demo/foundations/FoundationAxes.astro +12 -0
  106. package/src/demo/foundations/FoundationColorRoles.astro +5 -0
  107. package/src/demo/foundations/FoundationContainerGrid.astro +24 -0
  108. package/src/demo/foundations/FoundationDialog.astro +14 -0
  109. package/src/demo/foundations/FoundationElevation.astro +5 -0
  110. package/src/demo/foundations/FoundationElevationState.astro +5 -0
  111. package/src/demo/foundations/FoundationHue.astro +5 -0
  112. package/src/demo/foundations/FoundationLines.astro +5 -0
  113. package/src/demo/foundations/FoundationMedia.astro +28 -0
  114. package/src/demo/foundations/FoundationMotion.astro +5 -0
  115. package/src/demo/foundations/FoundationPalette.astro +8 -0
  116. package/src/demo/foundations/FoundationRadius.astro +13 -0
  117. package/src/demo/foundations/FoundationShapes.astro +12 -0
  118. package/src/demo/foundations/FoundationShrink.astro +14 -0
  119. package/src/demo/foundations/FoundationSizing.astro +19 -0
  120. package/src/demo/foundations/FoundationSpecimen.astro +20 -0
  121. package/src/demo/foundations/FoundationSurfaces.astro +5 -0
  122. package/src/demo/foundations/FoundationTextHue.astro +5 -0
  123. package/src/demo/foundations/FoundationTextRoles.astro +5 -0
  124. package/src/demo/foundations/FoundationTokens.astro +22 -0
  125. package/src/demo/foundations/FoundationTokensView.astro +65 -0
  126. package/src/demo/foundations/FoundationTransition.astro +5 -0
  127. package/src/demo/foundations/FoundationTypeComparison.astro +12 -0
  128. package/src/demo/foundations/FoundationTypography.astro +5 -0
  129. package/src/demo/foundations/Palette.svelte +37 -0
  130. package/src/demo/foundations/ShadowScaleDemo.astro +22 -0
  131. package/src/demo/illustration-materials.ts +180 -0
  132. package/src/demo/maintenance-example.ts +62 -0
  133. package/src/demo/playback.ts +75 -0
  134. package/src/demo/project-style-examples.ts +128 -0
  135. package/src/demo/reference/alignment.ts +42 -0
  136. package/src/demo/reference/animations.ts +30 -0
  137. package/src/demo/reference/backgrounds.ts +39 -0
  138. package/src/demo/reference/border-paint.ts +31 -0
  139. package/src/demo/reference/clipping.ts +26 -0
  140. package/src/demo/reference/document.ts +55 -0
  141. package/src/demo/reference/edges.ts +40 -0
  142. package/src/demo/reference/effects.ts +27 -0
  143. package/src/demo/reference/flexbox.ts +33 -0
  144. package/src/demo/reference/frame.css +118 -0
  145. package/src/demo/reference/grid.ts +42 -0
  146. package/src/demo/reference/html.ts +40 -0
  147. package/src/demo/reference/interaction.ts +42 -0
  148. package/src/demo/reference/layout-html.ts +10 -0
  149. package/src/demo/reference/layout.ts +102 -0
  150. package/src/demo/reference/media.ts +29 -0
  151. package/src/demo/reference/positioning.ts +90 -0
  152. package/src/demo/reference/scenes.ts +197 -0
  153. package/src/demo/reference/scrolling.ts +66 -0
  154. package/src/demo/reference/shapes.ts +22 -0
  155. package/src/demo/reference/sizing.ts +43 -0
  156. package/src/demo/reference/source.ts +8 -0
  157. package/src/demo/reference/text-effects.ts +37 -0
  158. package/src/demo/reference/text-flow.ts +41 -0
  159. package/src/demo/reference/transforms.ts +26 -0
  160. package/src/demo/reference/transitions.ts +24 -0
  161. package/src/demo/reference/type-specimens.ts +56 -0
  162. package/src/demo/reference/types.ts +30 -0
  163. package/src/demo/reference/typography.ts +32 -0
  164. package/src/demo/specimens/accent-color.json +50 -0
  165. package/src/demo/specimens/align-items.json +56 -0
  166. package/src/demo/specimens/animation-delay.json +55 -0
  167. package/src/demo/specimens/animation-direction.json +49 -0
  168. package/src/demo/specimens/animation-fill-mode.json +55 -0
  169. package/src/demo/specimens/animation-iteration-count.json +55 -0
  170. package/src/demo/specimens/animation-play-state.json +83 -0
  171. package/src/demo/specimens/animation-timing-function.json +48 -0
  172. package/src/demo/specimens/appearance.json +44 -0
  173. package/src/demo/specimens/aspect-ratio.json +28 -0
  174. package/src/demo/specimens/backdrop-filter.json +44 -0
  175. package/src/demo/specimens/background-attachment.json +49 -0
  176. package/src/demo/specimens/background-image.json +25 -0
  177. package/src/demo/specimens/background-origin.json +36 -0
  178. package/src/demo/specimens/background-size.json +29 -0
  179. package/src/demo/specimens/border-collapse.json +45 -0
  180. package/src/demo/specimens/border-color.json +35 -0
  181. package/src/demo/specimens/border-image-repeat.json +50 -0
  182. package/src/demo/specimens/border-image-slice.json +45 -0
  183. package/src/demo/specimens/border-radius.json +30 -0
  184. package/src/demo/specimens/box-decoration-break.json +35 -0
  185. package/src/demo/specimens/box-shadow.json +33 -0
  186. package/src/demo/specimens/clear.json +77 -0
  187. package/src/demo/specimens/clip-path.json +38 -0
  188. package/src/demo/specimens/content.json +27 -0
  189. package/src/demo/specimens/counter-set.json +31 -0
  190. package/src/demo/specimens/fill.json +23 -0
  191. package/src/demo/specimens/filter.json +23 -0
  192. package/src/demo/specimens/flex-direction.json +27 -0
  193. package/src/demo/specimens/flex-grow.json +27 -0
  194. package/src/demo/specimens/font-style.json +23 -0
  195. package/src/demo/specimens/font-variant-numeric.json +28 -0
  196. package/src/demo/specimens/grid-auto-columns.json +29 -0
  197. package/src/demo/specimens/grid-auto-flow.json +37 -0
  198. package/src/demo/specimens/grid-template-areas.json +34 -0
  199. package/src/demo/specimens/grid-template-columns.json +36 -0
  200. package/src/demo/specimens/isolation.json +25 -0
  201. package/src/demo/specimens/justify-content.json +36 -0
  202. package/src/demo/specimens/line-height.json +28 -0
  203. package/src/demo/specimens/list-style-position.json +36 -0
  204. package/src/demo/specimens/mask-image.json +54 -0
  205. package/src/demo/specimens/min-width.json +39 -0
  206. package/src/demo/specimens/mix-blend-mode.json +43 -0
  207. package/src/demo/specimens/object-fit.json +27 -0
  208. package/src/demo/specimens/object-position.json +27 -0
  209. package/src/demo/specimens/opacity.json +37 -0
  210. package/src/demo/specimens/order.json +28 -0
  211. package/src/demo/specimens/overflow-wrap.json +26 -0
  212. package/src/demo/specimens/overflow.json +53 -0
  213. package/src/demo/specimens/overscroll-behavior.json +29 -0
  214. package/src/demo/specimens/padding.json +84 -0
  215. package/src/demo/specimens/place-content.json +31 -0
  216. package/src/demo/specimens/pointer-events.json +46 -0
  217. package/src/demo/specimens/position.json +29 -0
  218. package/src/demo/specimens/resize.json +32 -0
  219. package/src/demo/specimens/screen-readers.json +37 -0
  220. package/src/demo/specimens/scroll-padding.json +29 -0
  221. package/src/demo/specimens/scroll-snap-stop.json +33 -0
  222. package/src/demo/specimens/shape-image-threshold.json +37 -0
  223. package/src/demo/specimens/shape-margin.json +40 -0
  224. package/src/demo/specimens/shape-outside.json +37 -0
  225. package/src/demo/specimens/stroke-width.json +27 -0
  226. package/src/demo/specimens/text-fill-color.json +23 -0
  227. package/src/demo/specimens/text-stroke-width.json +32 -0
  228. package/src/demo/specimens/touch-action.json +45 -0
  229. package/src/demo/specimens/transform-box.json +37 -0
  230. package/src/demo/specimens/transform-origin.json +56 -0
  231. package/src/demo/specimens/transform-style.json +55 -0
  232. package/src/demo/specimens/transform.json +47 -0
  233. package/src/demo/specimens/transition-delay.json +57 -0
  234. package/src/demo/specimens/transition-duration.json +60 -0
  235. package/src/demo/specimens/transition-property.json +60 -0
  236. package/src/demo/specimens/transition-timing-function.json +65 -0
  237. package/src/demo/specimens/user-drag.json +28 -0
  238. package/src/demo/specimens/user-select.json +25 -0
  239. package/src/demo/specimens/vertical-align.json +28 -0
  240. package/src/demo/specimens/width.json +56 -0
  241. package/src/demo/specimens/will-change.json +50 -0
  242. package/src/demo/specimens/writing-mode.json +26 -0
  243. package/src/demo/specimens/z-index.json +35 -0
  244. package/src/demo/style.ts +15 -0
  245. package/src/demo/tone.ts +4 -0
  246. package/src/demo/useDemoViewTransition.svelte.ts +71 -0
  247. package/src/docs-shell/common/i18n.config.d.ts +2 -0
  248. package/src/docs-shell/common/i18n.config.js +13 -0
  249. package/src/docs-shell/common/svgo.config.d.ts +2 -0
  250. package/src/docs-shell/common/svgo.config.js +11 -0
  251. package/src/docs-shell/components/ArticleHeader.astro +65 -0
  252. package/src/docs-shell/components/ArticleTOC.astro +18 -0
  253. package/src/docs-shell/components/Callout.astro +26 -0
  254. package/src/docs-shell/components/Code.astro +25 -0
  255. package/src/docs-shell/components/CodeCopyButton.astro +25 -0
  256. package/src/docs-shell/components/CodeTabBar.astro +40 -0
  257. package/src/docs-shell/components/CodeTabs.astro +53 -0
  258. package/src/docs-shell/components/CodeView.astro +23 -0
  259. package/src/docs-shell/components/Do.astro +5 -0
  260. package/src/docs-shell/components/DoNot.astro +5 -0
  261. package/src/docs-shell/components/DocArticle.astro +14 -0
  262. package/src/docs-shell/components/DocHeader.svelte +87 -0
  263. package/src/docs-shell/components/DocHeading.astro +28 -0
  264. package/src/docs-shell/components/DocMain.astro +19 -0
  265. package/src/docs-shell/components/DocMenuButton.svelte +95 -0
  266. package/src/docs-shell/components/DocSidebar.svelte +62 -0
  267. package/src/docs-shell/components/DocVersionSelect.svelte +22 -0
  268. package/src/docs-shell/components/DocWrapper.astro +11 -0
  269. package/src/docs-shell/components/DocumentAPIIndex.astro +24 -0
  270. package/src/docs-shell/components/DocumentChoices.astro +24 -0
  271. package/src/docs-shell/components/DocumentCodeExample.astro +20 -0
  272. package/src/docs-shell/components/DocumentCodeExampleView.astro +35 -0
  273. package/src/docs-shell/components/DocumentCodeTable.astro +19 -0
  274. package/src/docs-shell/components/DocumentComparison.astro +7 -0
  275. package/src/docs-shell/components/DocumentCopyButton.svelte +41 -0
  276. package/src/docs-shell/components/DocumentDeclaration.astro +17 -0
  277. package/src/docs-shell/components/DocumentDeclarationView.astro +12 -0
  278. package/src/docs-shell/components/DocumentDisclosure.astro +14 -0
  279. package/src/docs-shell/components/DocumentFileTree.astro +34 -0
  280. package/src/docs-shell/components/DocumentFlow.astro +27 -0
  281. package/src/docs-shell/components/DocumentIdentifier.astro +14 -0
  282. package/src/docs-shell/components/DocumentIllustration.astro +46 -0
  283. package/src/docs-shell/components/DocumentKeyList.astro +22 -0
  284. package/src/docs-shell/components/DocumentNamespaceTable.astro +20 -0
  285. package/src/docs-shell/components/DocumentOptionEntry.astro +15 -0
  286. package/src/docs-shell/components/DocumentOptionList.astro +11 -0
  287. package/src/docs-shell/components/DocumentOptions.astro +23 -0
  288. package/src/docs-shell/components/DocumentParameters.astro +30 -0
  289. package/src/docs-shell/components/DocumentPrompt.astro +16 -0
  290. package/src/docs-shell/components/DocumentValueList.astro +25 -0
  291. package/src/docs-shell/components/DocumentationIndex.svelte +144 -0
  292. package/src/docs-shell/components/Dropped.astro +21 -0
  293. package/src/docs-shell/components/ExpandContent.svelte +21 -0
  294. package/src/docs-shell/components/ExplorerView.astro +37 -0
  295. package/src/docs-shell/components/FileIcon.astro +123 -0
  296. package/src/docs-shell/components/Footer.svelte +80 -0
  297. package/src/docs-shell/components/GeneratedCSS.astro +8 -0
  298. package/src/docs-shell/components/Header.svelte +121 -0
  299. package/src/docs-shell/components/HeaderIcon.astro +14 -0
  300. package/src/docs-shell/components/HeaderNav.svelte +18 -0
  301. package/src/docs-shell/components/Image.svelte +56 -0
  302. package/src/docs-shell/components/Info.astro +5 -0
  303. package/src/docs-shell/components/InlineCode.astro +30 -0
  304. package/src/docs-shell/components/InteractingIndicator.astro +19 -0
  305. package/src/docs-shell/components/LanguageButton.svelte +18 -0
  306. package/src/docs-shell/components/LanguageSelect.svelte +44 -0
  307. package/src/docs-shell/components/Link.svelte +127 -0
  308. package/src/docs-shell/components/ModeImg.astro +11 -0
  309. package/src/docs-shell/components/NotFound.astro +21 -0
  310. package/src/docs-shell/components/OverviewButtons.astro +36 -0
  311. package/src/docs-shell/components/PMAction.astro +25 -0
  312. package/src/docs-shell/components/PackageBadges.astro +39 -0
  313. package/src/docs-shell/components/PageContent.svelte +38 -0
  314. package/src/docs-shell/components/PageContentBootstrap.astro +13 -0
  315. package/src/docs-shell/components/PageContentDisclosure.astro +25 -0
  316. package/src/docs-shell/components/PageContentList.svelte +70 -0
  317. package/src/docs-shell/components/PageContentProvider.svelte +15 -0
  318. package/src/docs-shell/components/PageContentTitle.svelte +16 -0
  319. package/src/docs-shell/components/PageNavs.astro +40 -0
  320. package/src/docs-shell/components/PreparedCodeView.astro +12 -0
  321. package/src/docs-shell/components/RenderNode.astro +16 -0
  322. package/src/docs-shell/components/RouteLayers.astro +17 -0
  323. package/src/docs-shell/components/SearchButton.svelte +31 -0
  324. package/src/docs-shell/components/SearchDialog.svelte +174 -0
  325. package/src/docs-shell/components/Segments.svelte +62 -0
  326. package/src/docs-shell/components/Step.astro +13 -0
  327. package/src/docs-shell/components/StepL.astro +10 -0
  328. package/src/docs-shell/components/StepR.astro +10 -0
  329. package/src/docs-shell/components/StepSection.astro +12 -0
  330. package/src/docs-shell/components/Tab.astro +8 -0
  331. package/src/docs-shell/components/Tabs.astro +10 -0
  332. package/src/docs-shell/components/ThemeIcon.astro +19 -0
  333. package/src/docs-shell/components/ThemeSelect.svelte +20 -0
  334. package/src/docs-shell/components/TimeAgo.svelte +32 -0
  335. package/src/docs-shell/components/Translate.astro +14 -0
  336. package/src/docs-shell/components/Warn.astro +5 -0
  337. package/src/docs-shell/components/code-props.ts +28 -0
  338. package/src/docs-shell/components/document-types.ts +119 -0
  339. package/src/docs-shell/components/markdown/Anchor.astro +5 -0
  340. package/src/docs-shell/components/markdown/Heading2.astro +5 -0
  341. package/src/docs-shell/components/markdown/Heading3.astro +5 -0
  342. package/src/docs-shell/components/markdown/Table.astro +6 -0
  343. package/src/docs-shell/components/markdown-components.ts +36 -0
  344. package/src/docs-shell/components/page-content-bootstrap.ts +115 -0
  345. package/src/docs-shell/components/page-content.svelte.ts +125 -0
  346. package/src/docs-shell/contexts/search.ts +18 -0
  347. package/src/docs-shell/contexts/theme-mode.svelte.ts +61 -0
  348. package/src/docs-shell/data/authors.ts +17 -0
  349. package/src/docs-shell/data/base-colors.ts +29 -0
  350. package/src/docs-shell/data/brands.ts +79 -0
  351. package/src/docs-shell/data/color-names.ts +1 -0
  352. package/src/docs-shell/data/color-palette.ts +50 -0
  353. package/src/docs-shell/data/colors.ts +1 -0
  354. package/src/docs-shell/factories/Page.astro +35 -0
  355. package/src/docs-shell/factories/create-page.ts +31 -0
  356. package/src/docs-shell/layouts/BlogArticle.astro +53 -0
  357. package/src/docs-shell/layouts/Doc.astro +41 -0
  358. package/src/docs-shell/remark/markdown-components.d.ts +2 -0
  359. package/src/docs-shell/remark/markdown-components.js +101 -0
  360. package/src/docs-shell/remark/slug-and-toc.d.ts +2 -0
  361. package/src/docs-shell/remark/slug-and-toc.js +53 -0
  362. package/src/docs-shell/scripts/code-tabs-bootstrap.ts +34 -0
  363. package/src/docs-shell/scripts/code.ts +124 -0
  364. package/src/docs-shell/scripts/document-anchor.ts +57 -0
  365. package/src/docs-shell/scripts/document.ts +47 -0
  366. package/src/docs-shell/site.ts +67 -0
  367. package/src/docs-shell/types/IllustrationImages.ts +2 -0
  368. package/src/docs-shell/types/Metadata.ts +17 -0
  369. package/src/docs-shell/types/Props.ts +9 -0
  370. package/src/docs-shell/types/StaticImage.ts +6 -0
  371. package/src/docs-shell/uses/use-selected-preview-syntax.svelte.ts +16 -0
  372. package/src/docs-shell/utils/anchor.ts +24 -0
  373. package/src/docs-shell/utils/beautify-css.ts +14 -0
  374. package/src/docs-shell/utils/beautify-html.ts +12 -0
  375. package/src/docs-shell/utils/beautify-js.ts +9 -0
  376. package/src/docs-shell/utils/create-highlighter.ts +50 -0
  377. package/src/docs-shell/utils/css-modern-grammar.ts +339 -0
  378. package/src/docs-shell/utils/documentation-search.ts +68 -0
  379. package/src/docs-shell/utils/generate-metadata.ts +60 -0
  380. package/src/docs-shell/utils/group-page-content.ts +10 -0
  381. package/src/docs-shell/utils/head.ts +72 -0
  382. package/src/docs-shell/utils/highlight-code-core.ts +146 -0
  383. package/src/docs-shell/utils/highlight-code.ts +1 -0
  384. package/src/docs-shell/utils/highlighted-code-text.ts +27 -0
  385. package/src/docs-shell/utils/i18n-pathname.ts +98 -0
  386. package/src/docs-shell/utils/i18n.ts +12 -0
  387. package/src/docs-shell/utils/is-date-within-seven-days.ts +16 -0
  388. package/src/docs-shell/utils/isBrowser.ts +1 -0
  389. package/src/docs-shell/utils/isInteractOutside.ts +16 -0
  390. package/src/docs-shell/utils/markdown-tree.ts +22 -0
  391. package/src/docs-shell/utils/metadata.ts +25 -0
  392. package/src/docs-shell/utils/prepared-code.ts +21 -0
  393. package/src/docs-shell/utils/resolve-heading.d.ts +1 -0
  394. package/src/docs-shell/utils/resolve-heading.js +19 -0
  395. package/src/docs-shell/utils/search-pages.ts +271 -0
  396. package/src/docs-shell/utils/slot-text.ts +15 -0
  397. package/src/docs-shell/utils/snackbar.ts +39 -0
  398. package/src/docs-shell/utils/syntax-theme.ts +53 -0
  399. package/src/docs-shell/utils/transformer-notation-word-mark.ts +146 -0
  400. package/src/docs-shell/utils/unique-id.ts +11 -0
  401. package/src/examples/article-transitions/page.astro +7 -0
  402. package/src/examples/article-transitions/transitions.css +10 -0
  403. package/src/examples/components/ArticleTransitionScene.svelte +83 -0
  404. package/src/examples/components/ViewTransitionScene.svelte +31 -0
  405. package/src/examples/images/article-aurora.jpg +0 -0
  406. package/src/examples/images/article-coast.jpg +0 -0
  407. package/src/examples/images/article-grid.jpg +0 -0
  408. package/src/examples/images/article-studio.jpg +0 -0
  409. package/src/examples/layout-system/page.astro +59 -0
  410. package/src/examples/scene.css +3 -0
  411. package/src/examples/view-transitions/page.astro +7 -0
  412. package/src/examples/view-transitions/transitions.css +9 -0
  413. package/src/home/HeroCanvas.svelte +617 -0
  414. package/src/home/HomeAction.astro +17 -0
  415. package/src/home/HomeBentoFrame.astro +9 -0
  416. package/src/home/HomeBentoGrid.astro +9 -0
  417. package/src/home/HomeCompactIcon.astro +15 -0
  418. package/src/home/HomeFooter.svelte +63 -0
  419. package/src/home/HomeIllustration.astro +17 -0
  420. package/src/home/HomeIllustrationArt.svelte +15 -0
  421. package/src/home/HomeLamp.svelte +18 -0
  422. package/src/home/design.css +532 -0
  423. package/src/home/footer.css +225 -0
  424. package/src/home/hero-shaders.ts +460 -0
  425. package/src/home/hero-title-mask.ts +175 -0
  426. package/src/home/hero.css +547 -0
  427. package/src/home/home-illustration.ts +5 -0
  428. package/src/home/home-lamp.ts +225 -0
  429. package/src/home/home.css +1077 -0
  430. package/src/home/icons/agent-check-preview-apply.svg +24 -0
  431. package/src/home/icons/agent-clients.svg +26 -0
  432. package/src/home/icons/agent-project-tools.svg +23 -0
  433. package/src/home/icons/artwork/agent-check-preview-apply-dark.webp +0 -0
  434. package/src/home/icons/artwork/agent-check-preview-apply-light.webp +0 -0
  435. package/src/home/icons/artwork/agent-clients-dark.webp +0 -0
  436. package/src/home/icons/artwork/agent-clients-light.webp +0 -0
  437. package/src/home/icons/artwork/agent-edit-file-dark.webp +0 -0
  438. package/src/home/icons/artwork/agent-edit-file-light.webp +0 -0
  439. package/src/home/icons/artwork/agent-project-tools-dark.webp +0 -0
  440. package/src/home/icons/artwork/agent-project-tools-light.webp +0 -0
  441. package/src/home/icons/artwork/design-cascade-layers-dark.webp +0 -0
  442. package/src/home/icons/artwork/design-cascade-layers-light.webp +0 -0
  443. package/src/home/icons/artwork/design-layout-motion-dark.webp +0 -0
  444. package/src/home/icons/artwork/design-layout-motion-light.webp +0 -0
  445. package/src/home/icons/artwork/design-p3-gamut-dark.webp +0 -0
  446. package/src/home/icons/artwork/design-p3-gamut-light.webp +0 -0
  447. package/src/home/icons/artwork/design-theme-modes-dark.webp +0 -0
  448. package/src/home/icons/artwork/design-theme-modes-light.webp +0 -0
  449. package/src/home/icons/artwork/design-theme-tokens-dark.webp +0 -0
  450. package/src/home/icons/artwork/design-theme-tokens-light.webp +0 -0
  451. package/src/home/icons/artwork/editor-color-tools-dark.webp +0 -0
  452. package/src/home/icons/artwork/editor-color-tools-light.webp +0 -0
  453. package/src/home/icons/artwork/editor-focused-highlighting-dark.webp +0 -0
  454. package/src/home/icons/artwork/editor-focused-highlighting-light.webp +0 -0
  455. package/src/home/icons/artwork/editor-hover-inspection-dark.webp +0 -0
  456. package/src/home/icons/artwork/editor-hover-inspection-light.webp +0 -0
  457. package/src/home/icons/artwork/editor-manifest-completions-dark.webp +0 -0
  458. package/src/home/icons/artwork/editor-manifest-completions-light.webp +0 -0
  459. package/src/home/icons/artwork/lint-class-order-dark.webp +0 -0
  460. package/src/home/icons/artwork/lint-class-order-light.webp +0 -0
  461. package/src/home/icons/artwork/lint-conflicting-classes-dark.webp +0 -0
  462. package/src/home/icons/artwork/lint-conflicting-classes-light.webp +0 -0
  463. package/src/home/icons/artwork/lint-fix-previews-dark.webp +0 -0
  464. package/src/home/icons/artwork/lint-fix-previews-light.webp +0 -0
  465. package/src/home/icons/artwork/lint-invalid-classes-dark.webp +0 -0
  466. package/src/home/icons/artwork/lint-invalid-classes-light.webp +0 -0
  467. package/src/home/icons/artwork/lint-strict-vocabulary-dark.webp +0 -0
  468. package/src/home/icons/artwork/lint-strict-vocabulary-light.webp +0 -0
  469. package/src/home/icons/artwork/lint-theme-tokens-dark.webp +0 -0
  470. package/src/home/icons/artwork/lint-theme-tokens-light.webp +0 -0
  471. package/src/home/icons/artwork/mcp-apply-preview-dark.webp +0 -0
  472. package/src/home/icons/artwork/mcp-apply-preview-light.webp +0 -0
  473. package/src/home/icons/artwork/mcp-css-compare-dark.webp +0 -0
  474. package/src/home/icons/artwork/mcp-css-compare-light.webp +0 -0
  475. package/src/home/icons/artwork/mcp-inspect-class-dark.webp +0 -0
  476. package/src/home/icons/artwork/mcp-inspect-class-light.webp +0 -0
  477. package/src/home/icons/artwork/mcp-lint-project-dark.webp +0 -0
  478. package/src/home/icons/artwork/mcp-lint-project-light.webp +0 -0
  479. package/src/home/icons/artwork/mcp-manifest-query-dark.webp +0 -0
  480. package/src/home/icons/artwork/mcp-manifest-query-light.webp +0 -0
  481. package/src/home/icons/artwork/mcp-preview-fixes-dark.webp +0 -0
  482. package/src/home/icons/artwork/mcp-preview-fixes-light.webp +0 -0
  483. package/src/home/icons/artwork/mcp-render-css-dark.webp +0 -0
  484. package/src/home/icons/artwork/mcp-render-css-light.webp +0 -0
  485. package/src/home/icons/artwork/mcp-scan-project-dark.webp +0 -0
  486. package/src/home/icons/artwork/mcp-scan-project-light.webp +0 -0
  487. package/src/home/icons/artwork/mcp-trace-class-dark.webp +0 -0
  488. package/src/home/icons/artwork/mcp-trace-class-light.webp +0 -0
  489. package/src/home/icons/artwork/render-progressive-dark.webp +0 -0
  490. package/src/home/icons/artwork/render-progressive-light.webp +0 -0
  491. package/src/home/icons/artwork/render-runtime-dark.webp +0 -0
  492. package/src/home/icons/artwork/render-runtime-light.webp +0 -0
  493. package/src/home/icons/artwork/render-static-dark.webp +0 -0
  494. package/src/home/icons/artwork/render-static-light.webp +0 -0
  495. package/src/home/icons/artwork/section-ai-agents-dark.webp +0 -0
  496. package/src/home/icons/artwork/section-ai-agents-light.webp +0 -0
  497. package/src/home/icons/artwork/section-css-size-dark.webp +0 -0
  498. package/src/home/icons/artwork/section-css-size-light.webp +0 -0
  499. package/src/home/icons/artwork/section-design-system-dark.webp +0 -0
  500. package/src/home/icons/artwork/section-design-system-light.webp +0 -0
  501. package/src/home/icons/artwork/section-editor-dark.webp +0 -0
  502. package/src/home/icons/artwork/section-editor-light.webp +0 -0
  503. package/src/home/icons/artwork/section-lint-dark.webp +0 -0
  504. package/src/home/icons/artwork/section-lint-light.webp +0 -0
  505. package/src/home/icons/artwork/section-rendering-dark.webp +0 -0
  506. package/src/home/icons/artwork/section-rendering-light.webp +0 -0
  507. package/src/home/icons/artwork/section-workflow-dark.webp +0 -0
  508. package/src/home/icons/artwork/section-workflow-light.webp +0 -0
  509. package/src/home/icons/artwork/source.json +303 -0
  510. package/src/home/icons/artwork/workflow-integrations-dark.webp +0 -0
  511. package/src/home/icons/artwork/workflow-integrations-light.webp +0 -0
  512. package/src/home/icons/artwork/workflow-monorepo-dark.webp +0 -0
  513. package/src/home/icons/artwork/workflow-monorepo-light.webp +0 -0
  514. package/src/home/icons/artwork/workflow-route-styles-dark.webp +0 -0
  515. package/src/home/icons/artwork/workflow-route-styles-light.webp +0 -0
  516. package/src/home/icons/artwork/workflow-trace-change-dark.webp +0 -0
  517. package/src/home/icons/artwork/workflow-trace-change-light.webp +0 -0
  518. package/src/home/icons/artwork.css +4 -0
  519. package/src/home/icons/artwork.ts +131 -0
  520. package/src/home/icons/catalog.ts +381 -0
  521. package/src/home/icons/design-cascade-layers.svg +32 -0
  522. package/src/home/icons/design-layout-motion.svg +16 -0
  523. package/src/home/icons/design-p3-gamut.svg +12 -0
  524. package/src/home/icons/design-theme-modes.svg +12 -0
  525. package/src/home/icons/design-theme-tokens.svg +20 -0
  526. package/src/home/icons/editor-color-tools.svg +18 -0
  527. package/src/home/icons/editor-focused-highlighting.svg +15 -0
  528. package/src/home/icons/editor-hover-inspection.svg +19 -0
  529. package/src/home/icons/editor-manifest-completions.svg +24 -0
  530. package/src/home/icons/lint-class-order-compact.svg +15 -0
  531. package/src/home/icons/lint-class-order.svg +28 -0
  532. package/src/home/icons/lint-conflicting-classes-compact.svg +11 -0
  533. package/src/home/icons/lint-conflicting-classes.svg +24 -0
  534. package/src/home/icons/lint-fix-previews-compact.svg +9 -0
  535. package/src/home/icons/lint-fix-previews.svg +19 -0
  536. package/src/home/icons/lint-invalid-classes-compact.svg +7 -0
  537. package/src/home/icons/lint-invalid-classes.svg +17 -0
  538. package/src/home/icons/lint-strict-vocabulary-compact.svg +8 -0
  539. package/src/home/icons/lint-strict-vocabulary.svg +16 -0
  540. package/src/home/icons/lint-theme-tokens-compact.svg +7 -0
  541. package/src/home/icons/lint-theme-tokens.svg +14 -0
  542. package/src/home/icons/mcp-apply-preview-compact.svg +9 -0
  543. package/src/home/icons/mcp-apply-preview.svg +18 -0
  544. package/src/home/icons/mcp-css-compare-compact.svg +9 -0
  545. package/src/home/icons/mcp-css-compare.svg +20 -0
  546. package/src/home/icons/mcp-inspect-class-compact.svg +9 -0
  547. package/src/home/icons/mcp-inspect-class.svg +18 -0
  548. package/src/home/icons/mcp-lint-project-compact.svg +14 -0
  549. package/src/home/icons/mcp-lint-project.svg +30 -0
  550. package/src/home/icons/mcp-manifest-query-compact.svg +14 -0
  551. package/src/home/icons/mcp-manifest-query.svg +27 -0
  552. package/src/home/icons/mcp-preview-fixes-compact.svg +9 -0
  553. package/src/home/icons/mcp-preview-fixes.svg +15 -0
  554. package/src/home/icons/mcp-render-css-compact.svg +13 -0
  555. package/src/home/icons/mcp-render-css.svg +30 -0
  556. package/src/home/icons/mcp-scan-project-compact.svg +7 -0
  557. package/src/home/icons/mcp-scan-project.svg +13 -0
  558. package/src/home/icons/mcp-trace-class-compact.svg +11 -0
  559. package/src/home/icons/mcp-trace-class.svg +24 -0
  560. package/src/home/icons/render-progressive.svg +17 -0
  561. package/src/home/icons/render-runtime.svg +23 -0
  562. package/src/home/icons/render-static.svg +29 -0
  563. package/src/home/icons/section-ai-agents.svg +24 -0
  564. package/src/home/icons/section-css-size.svg +13 -0
  565. package/src/home/icons/section-design-system.svg +24 -0
  566. package/src/home/icons/section-editor.svg +14 -0
  567. package/src/home/icons/section-lint.svg +14 -0
  568. package/src/home/icons/section-rendering.svg +30 -0
  569. package/src/home/icons/section-workflow.svg +22 -0
  570. package/src/home/icons/workflow-integrations.svg +15 -0
  571. package/src/home/icons/workflow-monorepo.svg +27 -0
  572. package/src/home/icons/workflow-route-styles.svg +24 -0
  573. package/src/home/icons/workflow-trace-change.svg +21 -0
  574. package/src/layouts/Document.astro +71 -0
  575. package/src/public/brand/v2/logo/mark/master-mark-small-on-dark.svg +1 -0
  576. package/src/public/brand/v2/logo/master-css/master-css-horizontal-on-dark.svg +1 -0
  577. package/src/public/brand/v2/logo/master-css/master-css-horizontal-on-light.svg +1 -0
  578. package/src/public/demo/border-grid.svg +7 -0
  579. package/src/public/demo/landscape.svg +1 -0
  580. package/src/public/demo/marker.svg +1 -0
  581. package/src/public/demo/mask.svg +1 -0
  582. package/src/public/fonts/Geist-Medium.ttf +0 -0
  583. package/src/public/fonts/Geist-Regular.ttf +0 -0
  584. package/src/public/fonts/GeistVariable.woff2 +0 -0
  585. package/src/public/fonts/IBMPlexMono-Bold.woff2 +0 -0
  586. package/src/public/fonts/IBMPlexMono-Medium.woff2 +0 -0
  587. package/src/public/fonts/IBMPlexMono-Regular.woff2 +0 -0
  588. package/src/public/fonts/IBMPlexMono-SemiBold.woff2 +0 -0
  589. package/src/public/fonts/index.css +40 -0
  590. package/src/public/icons/csharp.svg +1 -0
  591. package/src/public/icons/css.svg +1 -0
  592. package/src/public/icons/eslint.svg +1 -0
  593. package/src/public/icons/folder.svg +12 -0
  594. package/src/public/icons/html.svg +1 -0
  595. package/src/public/icons/php.svg +1 -0
  596. package/src/public/icons/sass.svg +1 -0
  597. package/src/public/icons/storybook.svg +1 -0
  598. package/src/public/icons/visualstudiocode.svg +41 -0
  599. package/src/public/images/authors/aron.jpg +0 -0
  600. package/src/public/images/authors/benseage.jpg +0 -0
  601. package/src/public/images/authors/joy.jpg +0 -0
  602. package/src/public/images/authors/lola.jpg +0 -0
  603. package/src/public/images/authors/miles.jpg +0 -0
  604. package/src/public/images/bootstrap.svg +23 -0
  605. package/src/public/images/build-tools/rsbuild.svg +1 -0
  606. package/src/public/images/build-tools/rspack.svg +1 -0
  607. package/src/public/images/build-tools/vite.svg +15 -0
  608. package/src/public/images/build-tools/webpack.svg +10 -0
  609. package/src/public/images/cdns/esm-sh.svg +1 -0
  610. package/src/public/images/chevron-left.svg +4 -0
  611. package/src/public/images/cover-bg.jpg +0 -0
  612. package/src/public/images/emotion.svg +1 -0
  613. package/src/public/images/frameworks/angular.svg +29 -0
  614. package/src/public/images/frameworks/astro.svg +4 -0
  615. package/src/public/images/frameworks/blazor.svg +22 -0
  616. package/src/public/images/frameworks/express.svg +1 -0
  617. package/src/public/images/frameworks/laravel.svg +8 -0
  618. package/src/public/images/frameworks/line-liff.svg +1 -0
  619. package/src/public/images/frameworks/lit.svg +1 -0
  620. package/src/public/images/frameworks/nextjs.svg +16 -0
  621. package/src/public/images/frameworks/nuxtjs.svg +3 -0
  622. package/src/public/images/frameworks/rails.svg +1 -0
  623. package/src/public/images/frameworks/react.svg +8 -0
  624. package/src/public/images/frameworks/remix.svg +5 -0
  625. package/src/public/images/frameworks/shopify.svg +1 -0
  626. package/src/public/images/frameworks/svelte.svg +6 -0
  627. package/src/public/images/frameworks/tanstack.svg +1 -0
  628. package/src/public/images/frameworks/vuejs.svg +11 -0
  629. package/src/public/images/frameworks/wordpress.svg +1 -0
  630. package/src/public/images/mui.svg +1 -0
  631. package/src/public/images/styled-components.svg +4 -0
  632. package/src/public/images/tailwindcss.svg +1 -0
  633. package/src/scripts/bundler-imports.ts +25 -0
  634. package/src/scripts/static-social.ts +333 -0
  635. package/src/scripts/write-if-changed.ts +26 -0
  636. package/src/sections/blog.astro +11 -0
  637. package/src/sections/design-system.astro +14 -0
  638. package/src/sections/document.astro +8 -0
  639. package/src/sections/examples.astro +6 -0
  640. package/src/sections/guide.astro +26 -0
  641. package/src/sections/home.astro +7 -0
  642. package/src/sections/page.astro +12 -0
  643. package/src/styles/base.css +57 -0
  644. package/src/styles/benchmarks.css +20 -0
  645. package/src/styles/blog-article.css +670 -0
  646. package/src/styles/blog-materials.css +399 -0
  647. package/src/styles/blog.css +568 -0
  648. package/src/styles/demo.css +30 -0
  649. package/src/styles/design-system.css +15 -0
  650. package/src/styles/docs-shell/code.css +61 -0
  651. package/src/styles/docs-shell/docs.css +79 -0
  652. package/src/styles/docs-shell/documentation-search.css +42 -0
  653. package/src/styles/docs-shell/footer.css +38 -0
  654. package/src/styles/docs-shell/header.css +69 -0
  655. package/src/styles/docs-shell/materials.css +25 -0
  656. package/src/styles/docs-shell/menu.css +19 -0
  657. package/src/styles/docs-shell/not-found.css +10 -0
  658. package/src/styles/docs-shell/page-content.css +37 -0
  659. package/src/styles/docs-shell/prose.css +89 -0
  660. package/src/styles/docs-shell/segments.css +13 -0
  661. package/src/styles/docs-shell/steps.css +39 -0
  662. package/src/styles/docs-shell/syntax-theme.css +18 -0
  663. package/src/styles/docs-shell/theme.css +68 -0
  664. package/src/styles/docs-shell/wrapper.css +10 -0
  665. package/src/styles/document-comparison.css +7 -0
  666. package/src/styles/documentation-illustration.css +34 -0
  667. package/src/styles/documentation-index.css +100 -0
  668. package/src/styles/documents.css +4 -0
  669. package/src/styles/documents.ts +2 -0
  670. package/src/styles/foundation.css +4 -0
  671. package/src/styles/globals.css +2 -0
  672. package/src/styles/interface.css +3 -0
  673. package/src/styles/interface.ts +2 -0
  674. package/src/styles/site.ts +2 -0
  675. package/src/styles/system/DESIGN.md +108 -0
  676. package/src/styles/system/buttons.css +51 -0
  677. package/src/styles/system/code.css +85 -0
  678. package/src/styles/system/controls.css +110 -0
  679. package/src/styles/system/data.css +134 -0
  680. package/src/styles/system/mixins.css +7 -0
  681. package/src/styles/system/prose.css +75 -0
  682. package/src/styles/system/shell.css +102 -0
  683. package/src/styles/system/specimens.css +98 -0
  684. package/src/styles/system/surfaces.css +104 -0
  685. package/src/styles/system/tokens.css +136 -0
  686. package/src/utils/cloudflare-image-loader.js +85 -0
  687. package/src/virtual.d.ts +36 -0
@@ -0,0 +1,670 @@
1
+ /*
2
+ * Blog post pages: what is a post's own. The text itself reads with the documentation's typography
3
+ * (`docs-shell/prose.css`, code wells in `docs-shell/code.css`) and its contents with the shared contents ruler
4
+ * (`ui-toc`, `docs-shell/page-content.css`); this sheet places them and draws the post's header and close.
5
+ *
6
+ * - The article is a framed drawing, as the homepage frames its sections (`.blog-rails`, `.blog-rails-rule` from
7
+ * blog-materials.css): the frame is the reading column and the room its wells bleed into; rails with rulers run just
8
+ * outside it, and a rule crossed at the rails opens the text and the close, the long ticks restarting at each.
9
+ * - The contents ruler stands outside the drawing, in the page's left margin; narrower screens get the documentation's
10
+ * contents disclosure in the text instead.
11
+ * - One fixed, soft light falls from above and to the left, felt in a faint lift of the ground at the top of the page.
12
+ * - The title carries a trace of stone (`.blog-stone-text`): obsidian in light mode, moonstone in dark mode.
13
+ * - No gold of its own: the contents' live mark is ink, like the documentation's.
14
+ */
15
+
16
+ @layer components {
17
+ .blog-article-page {
18
+ /* The page's margin outside the frame; the frame itself carries the room the wells bleed into. */
19
+ --blog-article-gutter: 0rem;
20
+ /* The room the frame keeps on each side of the text, which code, examples, media and the next read bleed into. */
21
+ --blog-article-bleed: 1.25rem;
22
+ /* The documentation's reading measure (`--docs-text`): the text keeps it while the frame around it widens. */
23
+ --blog-article-measure: 41rem;
24
+ /* How far wide surfaces hang past the text: the documentation's 2rem, never past the frame; none on phones. */
25
+ --blog-article-hang: 0rem;
26
+ /* Strong ink is the shared title tone (soft obsidian / moonstone), so nothing on the page is pure black or white. */
27
+ --blog-article-text: var(--blog-title, var(--color-text-strong));
28
+ --blog-article-body: var(--color-text-body);
29
+ --blog-article-quiet: var(--color-text-muted);
30
+ --blog-article-faint: color-mix(in oklab, var(--color-text-muted) 72%, var(--color-text-subtle));
31
+ --blog-article-rule: var(--color-line-divider);
32
+ /* Motion follows the shared layer, so a hover settles at the same unhurried pace as on the blog index. */
33
+ --blog-article-ease: var(--blog-ease, cubic-bezier(0.25, 0.1, 0.25, 1));
34
+ --blog-article-base: var(--blog-base, 360ms);
35
+ --blog-article-slow: var(--blog-slow, 720ms);
36
+ /* The light from above-left, felt as a faint lift of the ground at the top of the page. */
37
+ background-image: radial-gradient(ellipse 130% 100% at 0% -25%, light-dark(rgb(255 255 255 / 0.7), rgb(255 255 255 / 0.025)), transparent 80%);
38
+ background-size: 100% min(110vh, 64rem);
39
+ background-repeat: no-repeat;
40
+
41
+ /* From 40rem the text keeps 2.5rem from the screen's edge, as on the index, and the wells stop short of it. */
42
+ @media (width >= 40rem) {
43
+ --blog-article-gutter: calc(2.5rem - var(--blog-article-bleed));
44
+ --blog-article-hang: min(2rem, var(--blog-article-bleed));
45
+ }
46
+
47
+ @media (--sm) {
48
+ --blog-article-bleed: 1.5rem;
49
+ }
50
+
51
+ /* Room for a rail and its ruler (2rem) outside the frame, and air beyond them, as on the index. The frame opens
52
+ wide around the measure, so surfaces hang well past the text while the text keeps its width. */
53
+ @media (--md) {
54
+ --blog-article-bleed: 5rem;
55
+ --blog-article-gutter: 3.5rem;
56
+ }
57
+ }
58
+
59
+ /* ───────────────────────── Frame ───────────────────────── */
60
+
61
+ /*
62
+ * The frame is the reading column and the room its wells bleed into, centred on a whole pixel so the rails and
63
+ * rules never straddle two. The article is a grid across the page: the frame in the middle, the contents ruler in
64
+ * the outer left margin beside the text. The container is the page's own room, in rem, so enlarged text keeps one
65
+ * column.
66
+ */
67
+ .blog-article-main {
68
+ --frame: min(100%, var(--blog-article-measure) + var(--blog-article-bleed) * 2);
69
+ container: blog-article / inline-size;
70
+ padding-inline: var(--blog-article-gutter);
71
+
72
+ & > .blog-article-end {
73
+ max-width: var(--frame);
74
+ margin-inline-start: max(0px, round(down, (100% - var(--frame)) / 2, 1px));
75
+ }
76
+ }
77
+
78
+ .blog-article {
79
+ display: grid;
80
+ grid-template-columns: max(0px, round(down, (100% - var(--frame)) / 2, 1px)) var(--frame) minmax(0, 1fr);
81
+
82
+ & > :is(.blog-article-masthead, .blog-article-body) {
83
+ grid-column: 2;
84
+ }
85
+ }
86
+
87
+ .blog-article-body,
88
+ .blog-article-end {
89
+ padding-inline: var(--blog-article-bleed);
90
+ }
91
+
92
+ /* ───────────────────────── Masthead ───────────────────────── */
93
+
94
+ .blog-article-masthead {
95
+ position: relative;
96
+ min-width: 0;
97
+ /* The post's first lines still sit in the first screen. The header steps out of the text column to the wide
98
+ surfaces' edge, so it opens the drawing closer to the rails than the reading does. */
99
+ padding: calc(3.75rem + round(clamp(3rem, 1.5rem + 4vw, 5rem), 1rem)) calc(var(--blog-article-bleed) - var(--blog-article-hang)) round(clamp(2.5rem, 1.75rem + 2vw, 3.5rem), 1rem);
100
+ grid-row: 1;
101
+
102
+ @media (width >= 48rem) and (height < 50rem) {
103
+ padding-top: 7.5rem;
104
+ }
105
+ }
106
+
107
+ /* As in the homepage hero and on the index, the rails start below the fixed header and fade in. They start at 4rem
108
+ rather than the header's 60px, so the ruler's ticks fall on whole rem from the page's top and the last tick above
109
+ each crossed rule meets the cross instead of doubling it 4px higher. */
110
+ @media (--md) {
111
+ .blog-article-masthead.blog-rails::after {
112
+ top: 4rem;
113
+ mask-image: linear-gradient(transparent, black 6rem);
114
+ }
115
+ }
116
+
117
+ /* The category and date are the post's kicker: an eyebrow, as the documentation's page head opens. */
118
+ .blog-article-meta {
119
+ display: flex;
120
+ flex-wrap: wrap;
121
+ align-items: baseline;
122
+ gap: 0.25rem 0.75rem;
123
+ margin: 0;
124
+ color: var(--blog-article-quiet);
125
+ @apply --ui-eyebrow-type;
126
+
127
+ & > * + *::before {
128
+ margin-right: 0.75rem;
129
+ color: var(--blog-article-faint);
130
+ content: '·' / '';
131
+ }
132
+
133
+ & time {
134
+ font-variant-numeric: tabular-nums;
135
+ }
136
+ }
137
+
138
+ /*
139
+ * The title, regular weight in the shared title tone, nearly twice the section titles' size (54px on desktops, 48px
140
+ * before; at 54px "choose when to generate CSS" still holds one line). A "Subject: question" title breaks at its
141
+ * colon; a half longer than the column wraps evenly.
142
+ */
143
+ .blog-article-title {
144
+ min-width: 0;
145
+ margin: 1.25rem 0 0;
146
+ font-size: clamp(1.75rem, 1.25rem + 2vw, 2.75rem);
147
+ font-weight: 400;
148
+ line-height: 1.12;
149
+ letter-spacing: -0.034em;
150
+ color: var(--blog-article-text);
151
+ text-wrap: balance;
152
+ overflow-wrap: anywhere;
153
+
154
+ /* Display tracking opens a little at phone sizes, where it starts to crowd the letters. */
155
+ @media (width < 40rem) {
156
+ letter-spacing: -0.024em;
157
+ }
158
+
159
+ &:lang(zh) {
160
+ letter-spacing: -0.01em;
161
+ word-break: keep-all;
162
+ /* Full-width punctuation that opens a line, or meets another, is set half-width, so it leaves no gap. */
163
+ text-spacing-trim: trim-start;
164
+ text-autospace: normal;
165
+ }
166
+ }
167
+
168
+ .blog-article-title-line {
169
+ display: block;
170
+ }
171
+
172
+ .blog-article-dek {
173
+ max-width: 34em;
174
+ margin: 1.5rem 0 0;
175
+ font-size: clamp(1.0625rem, 1rem + 0.25vw, 1.125rem);
176
+ /* Supporting text in italic (Geist has no italic face; the browser slants the roman), a step quieter than the
177
+ reading. Han text stays upright. */
178
+ font-style: italic;
179
+ line-height: 1.9;
180
+ color: var(--blog-article-quiet);
181
+ /* Balanced, so a last pair of words never hangs alone; on a phone balancing four lines would only narrow them. */
182
+ text-wrap: balance;
183
+
184
+ @media (width < 40rem) {
185
+ text-wrap: pretty;
186
+ }
187
+
188
+ &:lang(zh) {
189
+ font-style: normal;
190
+ line-height: 1.95;
191
+ }
192
+ }
193
+
194
+ .blog-article-byline {
195
+ margin-top: 1.75rem;
196
+ }
197
+
198
+ /* Portraits and names already say who wrote the post; the label stays for assistive technology. */
199
+ .blog-article-byline-label {
200
+ position: absolute;
201
+ width: 1px;
202
+ height: 1px;
203
+ overflow: hidden;
204
+ clip-path: inset(50%);
205
+ white-space: nowrap;
206
+ }
207
+
208
+ .blog-article-authors {
209
+ display: flex;
210
+ flex-wrap: wrap;
211
+ gap: 0.25rem 1.25rem;
212
+ margin: 0;
213
+ padding: 0;
214
+ list-style: none;
215
+ }
216
+
217
+ .blog-article-author {
218
+ display: inline-flex;
219
+ align-items: center;
220
+ gap: 0.625rem;
221
+ min-height: 2.75rem;
222
+ font-size: 0.875rem;
223
+ /* Names are quiet links, a step under the title; they take full ink only under the pointer. */
224
+ color: var(--blog-article-body);
225
+ text-decoration: none;
226
+ transition: color var(--blog-article-base) var(--blog-article-ease);
227
+
228
+ &[href]:hover {
229
+ color: var(--blog-article-text);
230
+ }
231
+
232
+ & span {
233
+ text-decoration: underline;
234
+ text-decoration-thickness: 1px;
235
+ text-decoration-color: transparent;
236
+ text-underline-offset: 0.24em;
237
+ transition: text-decoration-color var(--blog-article-base) var(--blog-article-ease);
238
+ }
239
+
240
+ &[href]:hover span {
241
+ text-decoration-color: color-mix(in oklab, currentColor 40%, transparent);
242
+ }
243
+
244
+ &:focus-visible {
245
+ border-radius: 0.375rem;
246
+ outline: 2px solid var(--color-focus);
247
+ outline-offset: 2px;
248
+ }
249
+ }
250
+
251
+ .blog-article-avatar {
252
+ display: block;
253
+ width: 1.75rem;
254
+ height: 1.75rem;
255
+ margin: 0;
256
+ border-radius: 50%;
257
+ object-fit: cover;
258
+ box-shadow: 0 0 0 1px var(--color-line-contour), 0 1px 2px light-dark(oklch(0.18 0 none / 0.08), rgb(0 0 0 / 0.35));
259
+ }
260
+
261
+ /* ───────────────────────── Reading column ───────────────────────── */
262
+
263
+ /* Each section is a whole number of rem tall where the browser can say so, so the 16px ruler ticks run on
264
+ unbroken across the crossed rules; only the long ticks restart at each section, as a ruler set to a new origin. */
265
+ @supports (height: calc-size(auto, size)) {
266
+ .blog-article-masthead,
267
+ .blog-article-body {
268
+ height: calc-size(auto, round(up, size, 1rem));
269
+ }
270
+ }
271
+
272
+ /* The bottom room belongs to the section, so the contents ruler comes to rest above the closing rule. Below md the
273
+ rails are not drawn; a hairline across the frame still closes the header. */
274
+ .blog-article-body {
275
+ grid-row: 2;
276
+ padding-block: round(clamp(2.5rem, 1.75rem + 2vw, 3.5rem), 1rem) round(clamp(3rem, 2rem + 3vw, 5rem), 1rem);
277
+
278
+ @media (width < 64rem) {
279
+ border-top: 1px solid var(--blog-guide, var(--color-line-subtle));
280
+ }
281
+ }
282
+
283
+ /* Surfaces hang past the text as in the documentation, short of the frame, and keep their own padding; on phones
284
+ they stay on the text. (0,2,0)
285
+ outranks the shared prose's own bleed. */
286
+ .blog-article-prose.ui-prose {
287
+ --prose-bleed: 0rem;
288
+ min-width: 0;
289
+
290
+ @media (width >= 40rem) {
291
+ --prose-bleed: var(--blog-article-hang);
292
+ }
293
+
294
+ & > :first-child {
295
+ margin-top: 0;
296
+ }
297
+ }
298
+
299
+ /* ───────────────────────── Contents ───────────────────────── */
300
+
301
+ /*
302
+ * In the outer left margin the contents ruler hangs on the header logo's edge and stays beside the text being read,
303
+ * clear of the rails and their rulers. Narrower (below a 1392px window), the contents disclosure the post places in
304
+ * its text stands in.
305
+ */
306
+ .blog-article-contents {
307
+ display: none;
308
+ }
309
+
310
+ @container blog-article (width >= 80rem) {
311
+ .blog-article-contents {
312
+ /* Its ticks start on the header logo's edge, without the documentation rail's inset, so the titles keep their
313
+ room beside the wide frame; air is kept before the left ruler (2rem outside the frame). The caption sits on
314
+ the first line of text. */
315
+ --edge: 2rem;
316
+ --air: 1.5rem;
317
+ grid-column: 1;
318
+ grid-row: 2;
319
+ position: sticky;
320
+ top: 6.5rem;
321
+ display: block;
322
+ align-self: start;
323
+ justify-self: start;
324
+ width: min(17rem, 100% - (var(--edge) - var(--blog-article-gutter)) - 2rem - var(--air));
325
+ max-height: calc(100dvh - 8.5rem);
326
+ margin: round(clamp(2.5rem, 1.75rem + 2vw, 3.5rem), 1rem) 0 0 calc(var(--edge) - var(--blog-article-gutter));
327
+ padding: 0.5rem 0 var(--ui-space-xl);
328
+ overflow-y: auto;
329
+ overscroll-behavior: contain;
330
+ }
331
+
332
+ /* Beside the margin contents, the post's own contents disclosure would only repeat them. */
333
+ .blog-article-prose [data-contents-disclosure] {
334
+ display: none;
335
+ }
336
+
337
+ /* With the disclosure hidden, the section after it takes its own hairline again. */
338
+ .blog-article-prose > [data-contents-disclosure] + hr + a[id]:empty + h2,
339
+ .blog-article-prose > [data-contents-disclosure] + hr + h2,
340
+ .blog-article-prose > [data-contents-disclosure] + h2 {
341
+ --section-rule: block;
342
+ }
343
+ }
344
+
345
+ /* Below the margin contents, the post's contents disclosure stands in (whatever the documentation's own switch
346
+ width); it is already a row between two hairlines, so the section rule the post sets right after it would make a
347
+ third line. */
348
+ @container blog-article (width < 80rem) {
349
+ .blog-article-prose [data-contents-disclosure] {
350
+ display: block;
351
+ }
352
+
353
+ .blog-article-prose > [data-contents-disclosure] + hr {
354
+ display: none;
355
+ }
356
+ }
357
+
358
+ @container blog-article (width >= 88rem) {
359
+ .blog-article-contents {
360
+ --air: 2.5rem;
361
+ }
362
+ }
363
+
364
+ /* ───────────────────────── End of post ───────────────────────── */
365
+
366
+ /* The close mirrors the header: it steps out to the wide surfaces' edge, as the masthead does. */
367
+ .blog-article-end {
368
+ padding-top: round(clamp(3rem, 2rem + 2.5vw, 4.5rem), 1rem);
369
+ padding-bottom: round(clamp(5rem, 3rem + 6vw, 8rem), 1rem);
370
+
371
+ @media (width >= 40rem) {
372
+ padding-inline: calc(var(--blog-article-bleed) - var(--blog-article-hang));
373
+ }
374
+
375
+ @media (width < 64rem) {
376
+ border-top: 1px solid var(--blog-guide, var(--color-line-subtle));
377
+ }
378
+ }
379
+
380
+ /* The post's guides fade out above the footer rather than running into it. */
381
+ @media (--md) {
382
+ .blog-article-end.blog-rails::after {
383
+ mask-image: linear-gradient(black calc(100% - 7rem), transparent);
384
+ }
385
+ }
386
+
387
+ .blog-article-end-title {
388
+ margin: 0 0 2.5rem;
389
+ color: var(--blog-article-quiet);
390
+ @apply --ui-eyebrow-type;
391
+ }
392
+
393
+ /*
394
+ * The next read is an open title, not a card: the meta as the header's kicker, the title in the post's own tone a
395
+ * step under the post's title, the description in the dek's italic. Under the pointer the index's artboard corners
396
+ * draw around it and the arrow steps on; keyboard focus closes the corners into a frame.
397
+ */
398
+ .blog-article-next {
399
+ --blog-marks-inset: 1rem;
400
+ display: grid;
401
+ width: fit-content;
402
+ max-width: min(100%, 38rem);
403
+ color: var(--blog-article-text);
404
+ text-decoration: none;
405
+
406
+ &::before {
407
+ opacity: 0;
408
+ transition: opacity var(--blog-article-slow) var(--blog-article-ease), inset var(--blog-article-base) var(--blog-article-ease);
409
+ }
410
+
411
+ &:is(:hover, :focus-visible)::before {
412
+ opacity: 1;
413
+ transition-duration: var(--blog-article-base);
414
+ }
415
+
416
+ &:active {
417
+ --blog-marks-inset: calc(1rem - 2px);
418
+ }
419
+
420
+ &:is(:hover, :focus-visible) .blog-article-next-arrow {
421
+ color: var(--blog-article-text);
422
+ translate: 4px 0;
423
+ transition-duration: var(--blog-article-base);
424
+ }
425
+
426
+ &:focus-visible {
427
+ outline: 2px solid transparent;
428
+
429
+ &::before {
430
+ background: none;
431
+ outline: 2px solid var(--blog-article-faint);
432
+ outline-offset: -2px;
433
+ }
434
+ }
435
+ }
436
+
437
+ .blog-article-next-meta {
438
+ display: flex;
439
+ flex-wrap: wrap;
440
+ gap: 0.25rem 0.75rem;
441
+ color: var(--blog-article-quiet);
442
+ @apply --ui-eyebrow-type;
443
+
444
+ & > * + *::before {
445
+ margin-right: 0.75rem;
446
+ color: var(--blog-article-faint);
447
+ content: '·' / '';
448
+ }
449
+
450
+ & time {
451
+ font-variant-numeric: tabular-nums;
452
+ }
453
+ }
454
+
455
+ .blog-article-next-title {
456
+ margin-top: 1rem;
457
+ color: var(--blog-article-text);
458
+ font-size: clamp(1.5rem, 1.25rem + 1vw, 2rem);
459
+ font-weight: 400;
460
+ line-height: 1.2;
461
+ letter-spacing: -0.026em;
462
+ text-wrap: balance;
463
+
464
+ &:lang(zh) {
465
+ letter-spacing: -0.01em;
466
+ word-break: keep-all;
467
+ }
468
+ }
469
+
470
+ /* The first half of a "Subject: question" title takes its own line; the arrow follows the last word. */
471
+ .blog-article-next-title-line:first-child:not(:last-of-type) {
472
+ display: block;
473
+ }
474
+
475
+ .blog-article-next-arrow {
476
+ display: inline-block;
477
+ margin-left: 0.3em;
478
+ vertical-align: -0.12em;
479
+ color: var(--blog-article-faint);
480
+ transition: translate var(--blog-article-slow) var(--blog-article-ease), color var(--blog-article-slow) var(--blog-article-ease);
481
+ }
482
+
483
+ /* As the header's dek: supporting text in the same italic, a step smaller. */
484
+ .blog-article-next-description {
485
+ max-width: 34em;
486
+ margin-top: 0.875rem;
487
+ color: var(--blog-article-quiet);
488
+ font-size: 0.9375rem;
489
+ font-style: italic;
490
+ line-height: 1.85;
491
+ text-wrap: pretty;
492
+
493
+ &:lang(zh) {
494
+ font-style: normal;
495
+ line-height: 1.9;
496
+ }
497
+ }
498
+
499
+ /* The way back and the other neighbour close the drawing under one hairline. */
500
+ .blog-article-end-links {
501
+ display: flex;
502
+ flex-wrap: wrap;
503
+ justify-content: space-between;
504
+ gap: var(--spacing-sm) var(--spacing-lg);
505
+ margin-top: 3.5rem;
506
+ padding-top: 0.5rem;
507
+ box-shadow: inset 0 1px 0 var(--blog-guide, var(--color-line-subtle));
508
+ }
509
+
510
+ .blog-article-end-link {
511
+ display: inline-flex;
512
+ align-items: center;
513
+ gap: var(--spacing-xs);
514
+ min-height: 2.75rem;
515
+ min-width: 0;
516
+ font-size: 0.875rem;
517
+ color: var(--blog-article-quiet);
518
+ transition: color var(--blog-article-base) var(--blog-article-ease);
519
+
520
+ & svg {
521
+ flex: none;
522
+ transition: translate var(--blog-article-base) var(--blog-article-ease);
523
+ }
524
+
525
+ &:hover {
526
+ color: var(--blog-article-text);
527
+
528
+ & svg:first-child {
529
+ translate: -2px 0;
530
+ }
531
+
532
+ & svg:last-child:not(:first-child) {
533
+ translate: 2px 0;
534
+ }
535
+ }
536
+
537
+ &:focus-visible {
538
+ border-radius: 2px;
539
+ outline: 2px solid var(--color-focus);
540
+ outline-offset: 2px;
541
+ }
542
+ }
543
+
544
+ .blog-article-end-link-label {
545
+ flex: none;
546
+ color: var(--blog-article-quiet);
547
+ }
548
+
549
+ .blog-article-end-link-title {
550
+ min-width: 0;
551
+ overflow: hidden;
552
+ text-overflow: ellipsis;
553
+ white-space: nowrap;
554
+ }
555
+
556
+ /* ───────────────────────── Preferences, contrast and print ───────────────────────── */
557
+
558
+ /* Every transition here is timed by these two tokens, so asking for less motion stills them all at once. */
559
+ @media (prefers-reduced-motion: reduce) {
560
+ .blog-article-page {
561
+ --blog-article-base: 0s;
562
+ --blog-article-slow: 0s;
563
+ }
564
+ }
565
+
566
+ /* Asked for more contrast, annotations take the body's gray. */
567
+ @media (prefers-contrast: more) {
568
+ .blog-article-page {
569
+ --blog-article-text: var(--color-text-strong);
570
+ --blog-article-faint: var(--color-text-body);
571
+ --blog-article-quiet: var(--color-text-body);
572
+ }
573
+
574
+ /* Plain ink; the shared title tone is outranked from the masthead, whatever order the stylesheets load in. */
575
+ .blog-article-masthead .blog-article-title {
576
+ background-image: none;
577
+ -webkit-text-fill-color: currentColor;
578
+ }
579
+ }
580
+
581
+ @media (forced-colors: active) {
582
+ .blog-article-masthead .blog-article-title {
583
+ color: CanvasText;
584
+ background-image: none;
585
+ -webkit-text-fill-color: currentColor;
586
+ }
587
+
588
+ /* The corners are hidden here: the next read keeps an outline under the pointer and on focus. */
589
+ .blog-article-page .blog-article-next:is(:hover, :focus-visible) {
590
+ outline: 1px solid CanvasText;
591
+ outline-offset: 0.75rem;
592
+ }
593
+
594
+ .blog-article-body,
595
+ .blog-article-end {
596
+ border-top: 1px solid CanvasText;
597
+ }
598
+ }
599
+
600
+ @media print {
601
+ .blog-article-page {
602
+ color-scheme: light;
603
+ background: none;
604
+ }
605
+
606
+ .blog-article-contents,
607
+ .blog-article-end,
608
+ .blog-article-footer {
609
+ display: none;
610
+ }
611
+
612
+ .blog-article-main {
613
+ padding: 0;
614
+ }
615
+
616
+ .blog-article {
617
+ display: block;
618
+ }
619
+
620
+ .blog-article-body {
621
+ height: auto;
622
+ padding: 1.5rem 0 0;
623
+ border-top: 1px solid #ccc;
624
+ }
625
+
626
+ .blog-article-masthead {
627
+ height: auto;
628
+ padding: 0 0 1.25rem;
629
+ }
630
+
631
+ .blog-article-masthead .blog-article-title {
632
+ margin-right: 0;
633
+ font-size: 2rem;
634
+ color: #000;
635
+ background: none;
636
+ -webkit-text-fill-color: currentColor;
637
+ }
638
+
639
+ .blog-article-byline {
640
+ margin-top: 0.75rem;
641
+ }
642
+
643
+ .blog-article-prose {
644
+ color: #222;
645
+
646
+ & a {
647
+ color: inherit;
648
+ }
649
+ }
650
+ }
651
+ }
652
+
653
+ /* The page ground runs under the overscroll and behind the footer. */
654
+ :root:has(.blog-article-page),
655
+ :root:has(.blog-article-page) > body {
656
+ background-color: light-dark(var(--color-zinc-0), var(--color-zinc-95));
657
+ background-image: none;
658
+ }
659
+
660
+ /* Paper is white whatever the screen's scheme: every token resolves its light value. */
661
+ @media print {
662
+ :root:has(.blog-article-page) {
663
+ color-scheme: light;
664
+ }
665
+
666
+ :root:has(.blog-article-page),
667
+ :root:has(.blog-article-page) > body {
668
+ background-color: #fff;
669
+ }
670
+ }