@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,568 @@
1
+ /*
2
+ * The blog index: a timeline drawn with the homepage's drafting guides. A masthead whose title is engraved like the
3
+ * homepage footer's wordmark, then one section per year, each opened like a homepage section: a rule across its
4
+ * top, crossed where it meets the rails, with the rulers restarting there. A vertical time line runs beside the
5
+ * years; each year's rule crosses it, and each post hangs from it on a tick, so the line reads as a ruler that
6
+ * measures time. The newest post's tick carries the page's one gold mark. Recipes and tokens come from
7
+ * blog-materials.css.
8
+ *
9
+ * Every vertical size is a whole number of pixels (rounded where it scales with the viewport), and the frame is
10
+ * placed on whole pixels, so 1px guides stay crisp at 1x.
11
+ */
12
+ @layer components {
13
+ .blog-index {
14
+ /*
15
+ * The drawing's width: the homepage's content column (its 100rem wrapper minus gutters), so the title and the
16
+ * years hang on the same left edge as the header's logo and the rails run where the homepage's do, 20px outside
17
+ * the content edges with their rulers beyond.
18
+ */
19
+ --blog-frame: 95rem;
20
+ --blog-gutter: 1.25rem;
21
+ /* From the time line to an entry's text; the node tick takes the first .75rem of it. */
22
+ --blog-indent: 1.25rem;
23
+ --blog-node-y: 0.5rem;
24
+ /*
25
+ * The years' column, the posts' column beside the time line, and open ground to the right: the line sits about a
26
+ * quarter in on wide screens, and the spare width goes to air on both sides of the posts, never into the measure.
27
+ */
28
+ --blog-timeline-columns: minmax(10rem, 1fr) minmax(0, 44rem) minmax(0, 1fr);
29
+ /* A cross on the time line, drawn in an 11px box centred on the crossing, as the rails' crosses are. */
30
+ --blog-cross-mark:
31
+ linear-gradient(var(--blog-cross), var(--blog-cross)) 0 5px / 11px 1px no-repeat,
32
+ linear-gradient(var(--blog-cross), var(--blog-cross)) 5px 0 / 1px 11px no-repeat;
33
+ position: relative;
34
+ isolation: isolate;
35
+ overflow-x: clip;
36
+ padding-inline: var(--blog-gutter);
37
+
38
+ @media (width >= 40rem) {
39
+ --blog-gutter: 2.5rem;
40
+ }
41
+
42
+ @media (width >= 48rem) {
43
+ --blog-indent: 1.5rem;
44
+ }
45
+
46
+ /* A Han date's ink ("6 月 15 日") centres a pixel higher than a Latin one's; the node follows it. */
47
+ &:lang(zh) {
48
+ --blog-node-y: calc(0.5rem - 1px);
49
+ }
50
+
51
+ /* Light falls from above and slightly left; on the ground it is felt more than seen. */
52
+ &::before {
53
+ position: absolute;
54
+ inset: 0 0 auto;
55
+ z-index: -1;
56
+ height: min(56rem, 100%);
57
+ background-image: radial-gradient(ellipse 60% 70% at 18% 0%, light-dark(oklch(1 0.006 85 / 0.9), oklch(0.3 0.006 80 / 0.2)), transparent 72%);
58
+ pointer-events: none;
59
+ content: '';
60
+ }
61
+
62
+ /* Centred on a whole pixel, so the rails, rules and time line never straddle two. */
63
+ & > * {
64
+ max-width: var(--blog-frame);
65
+ margin-inline: auto;
66
+ margin-inline-start: max(0px, round(down, (100% - var(--blog-frame)) / 2, 1px));
67
+ }
68
+ }
69
+
70
+ /* Selected text sits on a soft wash of its own ink, as selected prose does on the articles (the hatched title
71
+ sets its own: solid letters on the same wash). */
72
+ .blog-index :not(.blog-hatch-text)::selection {
73
+ color: inherit;
74
+ background-color: color-mix(in oklab, var(--blog-text) 16%, transparent);
75
+ }
76
+
77
+ /* ---------- Masthead ---------- */
78
+ /*
79
+ * The rulers here count from below the header, so a whole number of rems puts the title's cap height on a tick:
80
+ * on wide screens the long one, 128px down, as a section's first long tick meets its cross.
81
+ */
82
+ .blog-masthead {
83
+ padding-top: calc(3.75rem + round(clamp(4rem, 1rem + 8vw, 8rem), 1rem));
84
+ padding-bottom: round(clamp(3.5rem, 2rem + 4vw, 6rem), 1rem);
85
+ }
86
+
87
+ /* As in the homepage hero, the rails start below the fixed header (60px) and fade in. */
88
+ @media (--md) {
89
+ .blog-masthead.blog-rails::after {
90
+ top: 3.75rem;
91
+ mask-image: linear-gradient(transparent, black 6rem);
92
+ }
93
+ }
94
+
95
+ /*
96
+ * The footer wordmark's engraving (.blog-hatch-text), set as the page title: large and regular weight, a fine
97
+ * hatch over a tint that carries the letterforms. A real heading; the text stays selectable. On phones it keeps
98
+ * one line where it fits, as the Han title does.
99
+ */
100
+ .blog-masthead-title {
101
+ max-width: 12em;
102
+ margin: 0;
103
+ font-size: round(clamp(2.875rem, 1.5rem + 5.25vw, 7rem), 1px);
104
+ font-weight: var(--font-weight-regular);
105
+ line-height: round(1.04em, 1px);
106
+ letter-spacing: -0.03em;
107
+ text-wrap: balance;
108
+ word-break: keep-all;
109
+ overflow-wrap: anywhere;
110
+
111
+ /*
112
+ * Latin letters hang from their cap height, exactly on the ruler's tick, and stand on their baseline. The hatch
113
+ * is painted only inside the box, so padding opens it again past the trim (round overshoots and descenders
114
+ * keep their ink) and equal negative margins take the room back; the bottom padding also rounds the trimmed
115
+ * box back to whole pixels. The N's side bearing would set its stem inside the frame's edge, so it steps out.
116
+ */
117
+ &:not(:lang(zh)) {
118
+ margin-block: calc(round(0.25em, 1px) * -1);
119
+ margin-inline-start: -0.06em;
120
+ padding-block: round(0.25em, 1px) calc(round(0.25em, 1px) + round(up, 1cap, 1px) - 1cap);
121
+ text-box: trim-both cap alphabetic;
122
+ }
123
+
124
+ /*
125
+ * Han glyphs fill the em square: a smaller size, lightly tracked, carries the Latin title's weight. Their ink
126
+ * starts about 0.11em into the line and ends 0.18em above its foot, so the margins hang them from the same tick
127
+ * and leave the same air below as the Latin title (whole pixels, so the rules stay crisp).
128
+ */
129
+ &:lang(zh) {
130
+ margin-block: round(-0.11em, 1px) round(-0.18em, 1px);
131
+ font-size: round(calc(clamp(2.875rem, 1.5rem + 5.25vw, 7rem) * 0.84), 1px);
132
+ line-height: round(1.2em, 1px);
133
+ letter-spacing: 0.04em;
134
+ }
135
+ }
136
+
137
+ /* ---------- A year ---------- */
138
+ .blog-year {
139
+ display: grid;
140
+ grid-template-columns: var(--blog-timeline-columns);
141
+ align-items: start;
142
+ }
143
+
144
+ /*
145
+ * The year, named once beside its posts: large but well below the title (about 1.8 : 1), quiet, and hung level
146
+ * with its first date: the list's 3.5rem, then 13px Geist's cap top in its 16px line, then the digits' round
147
+ * overshoot, so their ink starts where the date's does.
148
+ */
149
+ .blog-year-label {
150
+ position: sticky;
151
+ top: 6rem;
152
+ grid-area: 1 / 1;
153
+ /* The bottom margin keeps a held year clear of the next year's rule as it is pushed along. */
154
+ margin: calc(3.5rem + 0.1725rem + 0.016em) 0 3.5rem;
155
+ font-size: round(clamp(2rem, 1rem + 2.75vw, 3.5rem), 1px);
156
+ font-weight: var(--font-weight-regular);
157
+ line-height: 1;
158
+ letter-spacing: -0.03em;
159
+ font-variant-numeric: tabular-nums;
160
+ /* Large, so the faintest text ink (still 4.5:1) keeps it from outweighing the posts beside it. */
161
+ color: var(--blog-text-faint);
162
+ text-box: trim-both cap alphabetic;
163
+ }
164
+
165
+ /* The time line runs the year's full height, so consecutive years join into one line. */
166
+ .blog-year-posts {
167
+ position: relative;
168
+ container: blog-posts / inline-size;
169
+ grid-area: 1 / 2;
170
+ margin: 0;
171
+ padding: 3.5rem 0 5rem var(--blog-indent);
172
+ list-style: none;
173
+
174
+ /* A border, so forced colors keep the line. */
175
+ &::before {
176
+ position: absolute;
177
+ inset: 0 auto 0 0;
178
+ border-inline-start: 1px solid var(--blog-guide);
179
+ content: '';
180
+ }
181
+
182
+ /* Where the year's rule meets the time line, a cross. */
183
+ &::after {
184
+ position: absolute;
185
+ top: -5px;
186
+ left: -5px;
187
+ width: 11px;
188
+ height: 11px;
189
+ background: var(--blog-cross-mark);
190
+ pointer-events: none;
191
+ content: '';
192
+ }
193
+ }
194
+
195
+ /* The year's rule, on tablets (from md the rails' rule draws it, crossed at the rails). */
196
+ @media (48rem <= width < 64rem) {
197
+ .blog-year {
198
+ border-top: 1px solid var(--blog-guide);
199
+ }
200
+
201
+ /* The border sits above the list, so the cross centres one pixel higher. */
202
+ .blog-year-posts::after {
203
+ top: -6px;
204
+ }
205
+ }
206
+
207
+ /*
208
+ * The drawing's lower edge is the footer's rule, reached with a year's usual air, so it reads as the next rule:
209
+ * crosses where it meets the rails (the rule recipe, drawn on the footer's line) and the time line. Decorative
210
+ * and empty; it adds no height.
211
+ */
212
+ .blog-timeline-end {
213
+ position: relative;
214
+ display: grid;
215
+ grid-template-columns: var(--blog-timeline-columns);
216
+ height: 0;
217
+
218
+ &::after {
219
+ position: absolute;
220
+ top: -5px;
221
+ left: -5px;
222
+ grid-column: 2;
223
+ width: 11px;
224
+ height: 11px;
225
+ background: var(--blog-cross-mark);
226
+ pointer-events: none;
227
+ content: '';
228
+ }
229
+ }
230
+
231
+ /* ---------- A post on the line ---------- */
232
+ .blog-entry {
233
+ position: relative;
234
+
235
+ & + & {
236
+ margin-top: 4rem;
237
+ }
238
+
239
+ /* Its node: a long ruler tick from the time line, level with the date. */
240
+ &::before {
241
+ position: absolute;
242
+ top: var(--blog-node-y);
243
+ left: calc(var(--blog-indent) * -1);
244
+ width: 0.75rem;
245
+ border-top: 1px solid var(--blog-tick-major);
246
+ transition: border-color var(--blog-slow) var(--blog-ease);
247
+ content: '';
248
+ }
249
+
250
+ /* The newest post: the one gold mark, on the line itself (above it, where the line is drawn later). */
251
+ & > .blog-entry-signal {
252
+ position: absolute;
253
+ z-index: 1;
254
+ top: calc(var(--blog-node-y) - 2px);
255
+ left: calc(var(--blog-indent) * -1 - 2px);
256
+ }
257
+
258
+ &:has(> .blog-entry-link:focus-visible)::before {
259
+ border-color: var(--blog-text-quiet);
260
+ transition-duration: var(--blog-base);
261
+ }
262
+
263
+ /* Only a real pointer hovers: a tap on a touch screen must not leave a selection drawn behind on return. */
264
+ @media (hover: hover) {
265
+ &:has(> .blog-entry-link:hover)::before {
266
+ border-color: var(--blog-text-quiet);
267
+ transition-duration: var(--blog-base);
268
+ }
269
+ }
270
+ }
271
+
272
+ /*
273
+ * The whole entry is the link, as wide as its text's measure. On arrival a design tool's selection appears
274
+ * around it: artboard marks at the corners, 12px from the ink above (the date's cap top), below (the last
275
+ * baseline) and on the left, where the node's tick ends; on the right they follow the measure. A press draws
276
+ * them in a step and darker; keyboard focus closes them into the whole frame.
277
+ */
278
+ .blog-entry-link {
279
+ --blog-marks-inset: 0.75rem;
280
+ display: block;
281
+ width: fit-content;
282
+ /* One measure for title and excerpt, so the selection frame is never wider than the text it holds. */
283
+ max-width: 36rem;
284
+ color: var(--blog-text-body);
285
+ text-decoration: none;
286
+ /* Focus scrolled into view keeps its ring clear of the fixed header (60px) and the screen's foot. */
287
+ scroll-margin-block: 5.5rem 2rem;
288
+
289
+ &::before {
290
+ /* The bottom follows the excerpt's last baseline in its 30px line. */
291
+ inset: calc(0.1725rem - var(--blog-marks-inset)) calc(var(--blog-marks-inset) * -1) calc(0.6rem - var(--blog-marks-inset));
292
+ opacity: 0;
293
+ transition: opacity var(--blog-slow) var(--blog-ease), inset var(--blog-quick) var(--blog-ease);
294
+ }
295
+
296
+ &:is(:focus-visible, :active)::before {
297
+ opacity: 1;
298
+ transition-duration: var(--blog-base), var(--blog-quick);
299
+ }
300
+
301
+ @media (hover: hover) {
302
+ &:hover::before {
303
+ opacity: 1;
304
+ transition-duration: var(--blog-base), var(--blog-quick);
305
+ }
306
+
307
+ /* Hover intent: a pointer passing over the list on its way elsewhere leaves no trail of half-drawn marks. */
308
+ &:hover:not(:focus-visible, :active)::before {
309
+ transition-delay: 80ms;
310
+ }
311
+ }
312
+
313
+ &:active {
314
+ --blog-mark: var(--blog-text-faint);
315
+ --blog-marks-inset: calc(0.75rem - 2px);
316
+ }
317
+
318
+ /*
319
+ * The ring is the marks' own frame, so it sits as evenly on the ink as they do. The link's transparent outline
320
+ * is what forced colors paint, where the marks are hidden.
321
+ */
322
+ &:focus-visible {
323
+ outline: 2px solid transparent;
324
+ outline-offset: 0.5rem;
325
+
326
+ &::before {
327
+ background: none;
328
+ outline: 2px solid var(--blog-text-faint);
329
+ outline-offset: -2px;
330
+ }
331
+ }
332
+ }
333
+
334
+ /* A Han excerpt's last baseline sits higher in its taller line. */
335
+ .blog-entry-link:has(> .blog-entry-description:lang(zh))::before {
336
+ inset-block-end: calc(0.625rem - var(--blog-marks-inset));
337
+ }
338
+
339
+ .blog-entry-meta {
340
+ display: flex;
341
+ flex-wrap: wrap;
342
+ column-gap: 0.5rem;
343
+ font-size: 0.8125rem;
344
+ line-height: 1rem;
345
+ color: var(--blog-text-quiet);
346
+
347
+ & > :nth-child(n + 2)::before {
348
+ margin-inline-end: 0.5rem;
349
+ color: var(--blog-text-faint);
350
+ content: '·';
351
+ }
352
+ }
353
+
354
+ /* Title and excerpt breathe like the articles' own text: a full step of air between them, double-leaded excerpts. */
355
+ .blog-entry-title {
356
+ margin: 1rem 0 0;
357
+ font-size: 1.5rem;
358
+ font-weight: var(--font-weight-regular);
359
+ line-height: 2.25rem;
360
+ letter-spacing: -0.015em;
361
+ color: var(--blog-title);
362
+ text-wrap: balance;
363
+ overflow-wrap: break-word;
364
+
365
+ /* Geist's stems stand 0.09em inside the glyph box: a Latin title steps out by about half of that, so its first
366
+ stem lines up with the date and the excerpt at 24px and 20px alike. */
367
+ &:not(:lang(zh)) {
368
+ margin-inline-start: -0.04em;
369
+ }
370
+
371
+ /*
372
+ * Han lines need a little more air than Latin ones (an untranslated title is marked lang="en"). Breaks fall at
373
+ * the spaces around Latin terms and after punctuation, never inside a phrase.
374
+ */
375
+ &:lang(zh) {
376
+ line-height: 2.5rem;
377
+ letter-spacing: 0;
378
+ word-break: keep-all;
379
+ text-autospace: normal;
380
+ }
381
+ }
382
+
383
+ /* A "Subject: question" title breaks at its colon, as the article does; a half that needs two lines wraps evenly. */
384
+ .blog-title-half {
385
+ display: block;
386
+ }
387
+
388
+ .blog-entry-description {
389
+ margin: 1rem 0 0;
390
+ font-size: 0.9375rem;
391
+ line-height: 1.875rem;
392
+ text-wrap: pretty;
393
+
394
+ /*
395
+ * Han body text reads best with a taller line. It has no spaces to break at, so it breaks between characters,
396
+ * with the strict rules that keep closing punctuation off a line's start (titles keep their phrases whole).
397
+ */
398
+ &:lang(zh) {
399
+ line-height: 2rem;
400
+ line-break: strict;
401
+ }
402
+ }
403
+
404
+ /*
405
+ * Only when the column is very narrow for its text (a small phone with enlarged text), Latin words hyphenate
406
+ * instead of breaking at an arbitrary letter; at normal sizes nothing is hyphenated.
407
+ */
408
+ @container blog-posts (width < 14em) {
409
+ .blog-entry :is(.blog-entry-title, .blog-entry-description):lang(en) {
410
+ hyphens: auto;
411
+ }
412
+ }
413
+
414
+ /* ---------- Phones ---------- */
415
+ /*
416
+ * One column: the time line keeps the column's left edge, the year sits above its posts on the line's right,
417
+ * and each year's rule crosses the line at the column's edge. A tap dims the entry for a moment.
418
+ */
419
+ @media (width < 48rem) {
420
+ .blog-year {
421
+ display: block;
422
+ padding-inline-start: var(--blog-indent);
423
+ border-top: 1px solid var(--blog-guide);
424
+
425
+ &::before {
426
+ position: absolute;
427
+ top: -6px;
428
+ left: -5px;
429
+ width: 11px;
430
+ height: 11px;
431
+ background: var(--blog-cross-mark);
432
+ pointer-events: none;
433
+ content: '';
434
+ }
435
+
436
+ &::after {
437
+ position: absolute;
438
+ inset: 0 auto 0 0;
439
+ border-inline-start: 1px solid var(--blog-guide);
440
+ content: '';
441
+ }
442
+ }
443
+
444
+ .blog-timeline-end {
445
+ display: block;
446
+ }
447
+
448
+ /* In the flow here, so its trimmed box is rounded back to whole pixels; its 2 steps out like the titles. */
449
+ .blog-year-label {
450
+ position: static;
451
+ height: round(up, 1cap, 1px);
452
+ margin-block: 2.5rem 0;
453
+ margin-inline-start: -0.02em;
454
+ }
455
+
456
+ /* The year sits closer to its posts than to the rule above it. */
457
+ .blog-year-posts {
458
+ position: static;
459
+ padding: 2rem 0 4rem;
460
+
461
+ &::before,
462
+ &::after {
463
+ display: none;
464
+ }
465
+ }
466
+
467
+ /* At 46px the hatch's smallest tile is coarser for the letters, so they get a little more room. */
468
+ .blog-masthead-title:not(:lang(zh)) {
469
+ letter-spacing: -0.02em;
470
+ }
471
+
472
+ .blog-entry-title {
473
+ font-size: 1.25rem;
474
+ line-height: 2rem;
475
+
476
+ &:lang(zh) {
477
+ line-height: 2.25rem;
478
+ }
479
+ }
480
+
481
+ .blog-entry-link {
482
+ --blog-marks-inset: 0.5rem;
483
+ width: auto;
484
+ transition: opacity var(--blog-base) var(--blog-ease);
485
+
486
+ &:active {
487
+ --blog-marks-inset: calc(0.5rem - 2px);
488
+ opacity: 0.64;
489
+ transition-duration: var(--blog-quick);
490
+ }
491
+ }
492
+ }
493
+
494
+ /* ---------- Preferences ---------- */
495
+ /* Same selectors as the rules they cancel, so specificity never lets a transition back in. */
496
+ @media (prefers-reduced-motion: reduce) {
497
+ .blog-entry::before,
498
+ .blog-entry:has(> .blog-entry-link:is(:hover, :focus-visible))::before,
499
+ .blog-entry-link,
500
+ .blog-entry-link::before,
501
+ .blog-entry-link:is(:hover, :focus-visible, :active)::before,
502
+ .blog-entry-link:hover:not(:focus-visible, :active)::before {
503
+ transition: none;
504
+ }
505
+ }
506
+
507
+ /* Paper is light: the index prints in light ink whatever the screen's scheme. */
508
+ @media print {
509
+ .blog-index {
510
+ color-scheme: light;
511
+ background-color: Canvas;
512
+ }
513
+
514
+ .blog-masthead {
515
+ padding-top: var(--spacing-xl);
516
+ }
517
+
518
+ .blog-year-label {
519
+ position: static;
520
+ }
521
+
522
+ /* A post is never split across two sheets of paper. */
523
+ .blog-entry {
524
+ break-inside: avoid;
525
+ }
526
+ }
527
+
528
+ @media (forced-colors: active), print {
529
+ .blog-index::before,
530
+ .blog-year-posts::after,
531
+ .blog-timeline-end::after {
532
+ display: none;
533
+ }
534
+
535
+ .blog-entry-link:hover:not(:focus-visible) {
536
+ outline: 1px solid CanvasText;
537
+ outline-offset: 0.375rem;
538
+ }
539
+ }
540
+
541
+ @media (forced-colors: active), print {
542
+ @media (width < 48rem) {
543
+ .blog-year::before {
544
+ display: none;
545
+ }
546
+ }
547
+
548
+ /* Without the drawn guides, each year keeps its rule as a border (on paper, as light as the time line). */
549
+ @media (--md) {
550
+ .blog-year {
551
+ border-top: 1px solid CanvasText;
552
+
553
+ @media print {
554
+ border-top-color: var(--blog-guide);
555
+ }
556
+ }
557
+ }
558
+ }
559
+ }
560
+
561
+ /*
562
+ * The header's and footer's rows share the drawing's column (--blog-frame), as the homepage's do, so the logo, the
563
+ * title, the years and the footer hang on one edge at every width, not only below 100rem. Unlayered: the footer
564
+ * rows carry a max-width utility, and utilities outrank the components layer.
565
+ */
566
+ :root:has(.blog-index) :is(.ui-header, .ui-footer) > :not(hr) {
567
+ max-width: 95rem;
568
+ }
@@ -0,0 +1,30 @@
1
+ /* Demo family: compositions the system surfaces leave to the examples. Trays, stages, browsers and specimens live in styles/system. */
2
+ @layer components {
3
+ /* Generated output closes the source panel: a native disclosure joined under the code window */
4
+ .ui-tray > .ui-disclosure { margin-top: var(--ui-inset); padding-inline: var(--ui-space-sm); border-radius: var(--ui-radius-xl); background: var(--ui-surface-code); }
5
+ .ui-tray > .ui-code:has(+ .ui-disclosure) { border-end-start-radius: 0; border-end-end-radius: 0; }
6
+ .ui-tray > .ui-code + .ui-disclosure { margin-top: 0; border-start-start-radius: 0; border-start-end-radius: 0; box-shadow: inset 0 1px 0 var(--ui-line-hair); }
7
+ .ui-tray > .ui-disclosure > :not(summary) { margin-inline: calc(var(--ui-space-sm) * -1); }
8
+ /* The panel's own padding is part of the summary's inset: its chevron starts where the code lines start. */
9
+ .ui-tray > details.ui-disclosure > summary { padding-inline: calc(var(--ui-space-md) - var(--ui-space-sm)); }
10
+ .ui-tray > .ui-disclosure .ui-code { border-radius: 0 0 var(--ui-radius-xl) var(--ui-radius-xl); background: transparent; box-shadow: inset 0 1px 0 var(--ui-line-hair); }
11
+
12
+ /* A copy group's instruction is a caption over its swatches, not a button's status: one start-aligned sans line. */
13
+ p.ui-copy > .ui-copy-status { max-width: none; color: var(--ui-text-muted); font: var(--ui-weight-regular) var(--ui-text-caption)/1.5 var(--font-family-sans); text-align: start; }
14
+
15
+ /* Playback starts paused before hydration; the player owns the native timelines afterwards */
16
+ [data-playback="paused"] * { animation-play-state: paused !important; }
17
+
18
+ /* Catalog: groups of closed recipes, each a complete example */
19
+ .ui-catalog > section { min-width: 0; margin-block: var(--ui-space-xl); }
20
+ .ui-catalog h3 { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--ui-space-sm); margin: 0 0 var(--ui-space-sm); color: var(--ui-text-strong); font-size: var(--ui-text-h3); font-weight: var(--ui-weight-heading); line-height: var(--ui-leading-h3); letter-spacing: var(--ui-tracking-h3); scroll-margin-top: 6rem; overflow-wrap: anywhere; }
21
+ .ui-catalog h3 > small { margin-left: auto; color: var(--ui-text-muted); font: var(--ui-weight-regular) .6875rem/1.5 var(--font-family-mono); letter-spacing: 0; }
22
+ .ui-catalog-entry { display: grid; gap: var(--ui-space-sm); min-width: 0; padding-bottom: var(--ui-space-md); }
23
+ .ui-catalog-entry > a { width: fit-content; color: var(--ui-text-body); font-size: .78125rem; text-decoration: underline; text-decoration-color: var(--ui-line-mark); text-underline-offset: .2em; }
24
+ .ui-catalog-entry > a:hover { color: var(--ui-text-strong); text-decoration-color: currentColor; }
25
+ .ui-catalog-entry > a:focus-visible { @apply --ui-focus-ring; outline-offset: 2px; border-radius: 3px; }
26
+
27
+ /* Skip link: hidden until focused, then a raised control */
28
+ .ui-skip:not(:focus) { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
29
+ .ui-skip:focus { display: inline-flex; align-items: center; min-height: 2rem; margin-bottom: var(--ui-space-sm); padding: 0 var(--ui-space-sm); border-radius: 8px; background: var(--ui-surface-sheet); color: var(--ui-text-strong); box-shadow: var(--ui-elevation-rise-1); font-size: .78125rem; @apply --ui-focus-ring; outline-offset: 2px; }
30
+ }
@@ -0,0 +1,15 @@
1
+ /* Design system handbook: wide reading pages whose sections hold complete trays and indexes. */
2
+ @layer components {
3
+ .ui-handbook { --measure: 46rem; width: min(100%, 64rem); min-width: 0; margin-inline: auto; padding: 5rem 1.25rem 4rem; }
4
+ @media (width >= 48rem) { .ui-handbook { padding: 6.5rem 2.5rem 5rem; } }
5
+ .ui-handbook > .ui-pagehead > h1 { font-size: clamp(var(--ui-text-title), 4vw, var(--ui-text-display)); line-height: var(--ui-leading-display); letter-spacing: var(--ui-tracking-display); }
6
+ .ui-handbook-section { display: grid; gap: var(--ui-space-md); min-width: 0; margin-block: var(--ui-space-lg) var(--ui-space-2xl); }
7
+ .ui-handbook-section[data-columns="2"] { grid-template-columns: repeat(auto-fit, minmax(min(100%, 22rem), 1fr)); align-items: start; }
8
+ /* A section's framed surfaces hang like the article's own (prose.css), so specimens and usage code share both edges.
9
+ Two columns hang as one grid. */
10
+ .ui-prose > .ui-handbook-section:not([data-columns]) > :is(.ui-tray, .ui-code, .ui-table, .ui-params),
11
+ .ui-prose > .ui-handbook-section[data-columns="2"] { margin-inline: calc(var(--bleed) * -1); }
12
+ .ui-handbook-section > h3 { margin: var(--ui-space-md) 0 0; color: var(--ui-text-strong); font-size: var(--ui-text-base); font-weight: var(--ui-weight-heading); }
13
+ .ui-handbook-section > :is(h3, p):first-child { margin-top: 0; }
14
+ .ui-handbook-section > p { max-width: var(--measure); margin: 0; color: var(--ui-text-muted); font-size: var(--ui-text-small); line-height: var(--ui-leading-small); }
15
+ }
@@ -0,0 +1,61 @@
1
+ /*
2
+ * Code panels (`ui-code`, styles/system/code.css) as the site renders them: Shiki lines are `ui-code-line` parts, the
3
+ * copy action sits in the bar or, without one, in the corner, and tab panels all show on paper and without scripts.
4
+ */
5
+ @layer components {
6
+ /* The file's name keeps its width; a long result wraps in the room left beside the copy button. */
7
+ .ui-code-bar > .ui-code-file { flex: 1 0 auto; }
8
+ .ui-code-bar > .ui-copy { flex: 0 1 auto; min-width: 0; margin-left: auto; }
9
+ /* Without a bar the copy takes the panel's corner (`--code-corner`, code.css). A long line scrolls under it: the panel's own face fades in behind the button and runs to the edge, so code never runs through it. */
10
+ .ui-code > .ui-copy { position: absolute; z-index: 1; top: var(--code-corner); right: var(--code-corner); padding-left: var(--ui-space-sm); border-radius: var(--ui-radius-md); background: linear-gradient(90deg, transparent, var(--ui-surface-code) var(--ui-space-sm));
11
+ /* The face runs on to the panel's contour (1px short of the edge), so a scrolled line never shows again past the button. */
12
+ box-shadow: calc(var(--code-corner) - 1px) 0 0 var(--ui-surface-code); }
13
+ .ui-code:has(> .ui-copy) .ui-code-line { padding-right: 3rem; }
14
+ /* A shell command is read whole: it wraps under a hanging indent instead of hiding its flags behind the copy button. */
15
+ :is(.ui-code, [role="tabpanel"])[data-lang="bash"] > pre, .ui-code[data-lang="sh"] > pre, .ui-code[data-lang="shell"] > pre { white-space: pre-wrap; overflow-wrap: anywhere; }
16
+ :is(.ui-code, [role="tabpanel"])[data-lang="bash"] > pre .ui-code-line, .ui-code:is([data-lang="sh"], [data-lang="shell"]) > pre .ui-code-line { padding-left: calc(var(--ui-space-md) + 2ch); text-indent: -2ch; }
17
+ /* Flags wrap whole: a token never breaks at its own hyphen, so `--yes` cannot split into `-` and `-yes`. */
18
+ :is(.ui-code, [role="tabpanel"])[data-lang="bash"] > pre .ui-code-line > span, .ui-code:is([data-lang="sh"], [data-lang="shell"]) > pre .ui-code-line > span { display: inline-block; text-indent: 0; }
19
+ /* Plain text, such as a prompt for an agent, is prose set in mono: it wraps at the panel like prose. */
20
+ :is(.ui-code, [role="tabpanel"])[data-lang="text"] > pre { white-space: pre-wrap; overflow-wrap: break-word; }
21
+ .ui-copy-status:empty { display: none; }
22
+
23
+ /* A Generated CSS disclosure right after its source closes the same panel: one frame, the output under a hairline,
24
+ as in a demo tray. Alone (after a table or a paragraph) it stays a quiet disclosure. */
25
+ .ui-prose > .ui-code:has(+ .ui-disclosure[data-generated]) { margin-bottom: 0; border-end-start-radius: 0; border-end-end-radius: 0; box-shadow: inset 1px 0 0 var(--ui-line-contour), inset -1px 0 0 var(--ui-line-contour), inset 0 1px 0 var(--ui-line-contour); }
26
+ .ui-prose > .ui-code + .ui-disclosure[data-generated] {
27
+ max-width: none; margin-top: 0; margin-inline: calc(var(--bleed) * -1); padding-inline: var(--ui-space-md);
28
+ border-radius: 0 0 var(--ui-radius-xl) var(--ui-radius-xl); background: var(--ui-surface-code);
29
+ box-shadow: inset 0 0 0 1px var(--ui-line-contour), 0 1px 0 var(--ui-lip);
30
+ }
31
+ .ui-prose > .ui-code + .ui-disclosure[data-generated] > summary { margin-inline: calc(var(--ui-space-md) * -1); padding-inline: var(--ui-space-md); box-shadow: inset 0 1px 0 var(--ui-line-hair); }
32
+ .ui-prose > .ui-code + .ui-disclosure[data-generated] > .ui-code { margin-inline: calc(var(--ui-space-md) * -1); border-radius: 0 0 var(--ui-radius-xl) var(--ui-radius-xl); background: transparent; box-shadow: inset 0 1px 0 var(--ui-line-hair); }
33
+ .ui-copy > .ui-copy-status { min-width: 0; max-width: 16rem; text-align: end; line-height: 1.3; }
34
+
35
+ /* @WARN and @ERROR marks: a wavy underline in the status tone instead of a wash. */
36
+ .ui-code-line mark[data-tone] { padding: 0; background: none; box-shadow: none; text-decoration: underline wavy 1px; text-underline-offset: 3px; }
37
+ .ui-code-line mark[data-tone="warning"] { text-decoration-color: var(--ui-status-warning); }
38
+ .ui-code-line mark[data-tone="danger"] { text-decoration-color: var(--ui-status-danger); }
39
+ /* [!code focus] blurs the other lines until the pointer reaches the code. */
40
+ .ui-code pre.has-focused .ui-code-line { transition: filter var(--ui-duration-base) var(--ui-ease); }
41
+ .ui-code pre.has-focused:not(:hover, :focus-visible) .ui-code-line:not(.focus) { filter: blur(3px); }
42
+ .ui-code ::selection { background: color-mix(in oklab, var(--ui-code-function) 22%, transparent); }
43
+
44
+ [data-code-tabs] > [role="tabpanel"] > .ui-code-file { display: none; }
45
+ @media (scripting: none), print {
46
+ [data-code-tabs] > .ui-code-bar { display: none; }
47
+ [data-code-tabs] > [role="tabpanel"][hidden] { display: block; }
48
+ [data-code-tabs] > [role="tabpanel"] > .ui-code-file { display: flex; padding: var(--ui-space-sm) var(--ui-space-md) 0; }
49
+ .ui-copy { display: none; }
50
+ }
51
+ @media print {
52
+ .ui-code { break-inside: avoid; }
53
+ /* Paper cannot scroll: keep complete commands and long source lines readable. */
54
+ .ui-code pre { overflow: visible; white-space: pre-wrap; overflow-wrap: anywhere; }
55
+ .ui-code pre.has-focused .ui-code-line { filter: none; }
56
+ }
57
+ @media (prefers-reduced-motion: reduce) { .ui-code pre.has-focused .ui-code-line { transition: none; } }
58
+ @media (forced-colors: active) { .ui-code { border: 1px solid CanvasText; } }
59
+
60
+ .ui-tree img { flex: none; align-self: center; width: 14px; height: 14px; }
61
+ }