@master/internal-site 0.1.1 → 0.1.3

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 (187) hide show
  1. package/README.md +17 -0
  2. package/dist/astro.mjs +145 -10
  3. package/package.json +1 -1
  4. package/src/astro/index.ts +2 -0
  5. package/src/astro/routes.template.ts +1 -0
  6. package/src/astro/style-assets.ts +107 -0
  7. package/src/benchmarks/BenchmarkBarRows.astro +3 -2
  8. package/src/benchmarks/BenchmarkBars.astro +1 -1
  9. package/src/benchmarks/BenchmarkChart.astro +1 -0
  10. package/src/benchmarks/BenchmarkChartGroup.astro +1 -1
  11. package/src/benchmarks/BenchmarkDataTable.astro +1 -1
  12. package/src/benchmarks/BenchmarkFigure.astro +2 -1
  13. package/src/benchmarks/BenchmarkMetricTable.astro +1 -1
  14. package/src/benchmarks/BenchmarkMetrics.astro +1 -1
  15. package/src/benchmarks/BenchmarkSampleSummary.astro +1 -1
  16. package/src/benchmarks/BenchmarkScrollRegion.svelte +2 -1
  17. package/src/benchmarks/BenchmarkSource.astro +1 -1
  18. package/src/benchmarks/BenchmarkStackedBars.astro +2 -1
  19. package/src/benchmarks/types.ts +2 -0
  20. package/src/blog/article/BlogArticleContents.svelte +1 -1
  21. package/src/blog/article/BlogArticleMasthead.astro +12 -1
  22. package/src/css/NamespaceUtilityTable.astro +1 -1
  23. package/src/css/ThemeNumberVariableTable.astro +1 -1
  24. package/src/css/markdown.ts +14 -5
  25. package/src/demo/Demo.svelte +4 -0
  26. package/src/demo/DemoAsset.astro +1 -0
  27. package/src/demo/DemoCatalog.astro +1 -0
  28. package/src/demo/DemoComparison.svelte +3 -0
  29. package/src/demo/DemoContainer.svelte +3 -0
  30. package/src/demo/DemoControls.svelte +2 -0
  31. package/src/demo/DemoCopyButton.svelte +3 -0
  32. package/src/demo/DemoCopyGroup.svelte +2 -0
  33. package/src/demo/DemoFeatureSupport.svelte +2 -0
  34. package/src/demo/DemoGeneratedCSS.svelte +2 -0
  35. package/src/demo/DemoIndex.astro +1 -0
  36. package/src/demo/DemoMotion.svelte +1 -0
  37. package/src/demo/DemoScrollArea.svelte +2 -0
  38. package/src/demo/DemoStyleComparison.astro +1 -0
  39. package/src/demo/DemoSurface.svelte +2 -0
  40. package/src/demo/DemoThemeComparison.astro +1 -0
  41. package/src/demo/DemoTokenTable.astro +1 -1
  42. package/src/demo/DemoViewport.svelte +5 -0
  43. package/src/demo/DemoWaterfall.astro +1 -1
  44. package/src/demo/foundations/FoundationDialog.astro +1 -0
  45. package/src/demo/foundations/FoundationMedia.astro +1 -0
  46. package/src/demo/foundations/FoundationShrink.astro +1 -0
  47. package/src/demo/foundations/Palette.svelte +2 -0
  48. package/src/demo/illustration-materials.ts +1 -1
  49. package/src/demo/illustration.css +218 -0
  50. package/src/docs-shell/components/ArticleHeader.astro +2 -0
  51. package/src/docs-shell/components/Callout.astro +1 -0
  52. package/src/docs-shell/components/CodeCopyButton.astro +2 -0
  53. package/src/docs-shell/components/CodeTabBar.astro +2 -0
  54. package/src/docs-shell/components/CodeTabs.astro +2 -1
  55. package/src/docs-shell/components/CodeView.astro +1 -1
  56. package/src/docs-shell/components/DocHeader.svelte +10 -13
  57. package/src/docs-shell/components/DocMenuButton.svelte +126 -60
  58. package/src/docs-shell/components/DocSidebar.svelte +2 -0
  59. package/src/docs-shell/components/DocVersionSelect.svelte +2 -0
  60. package/src/docs-shell/components/DocumentAPIIndex.astro +1 -1
  61. package/src/docs-shell/components/DocumentChoices.astro +1 -1
  62. package/src/docs-shell/components/DocumentCodeExampleView.astro +3 -1
  63. package/src/docs-shell/components/DocumentCodeTable.astro +1 -1
  64. package/src/docs-shell/components/DocumentCopyButton.svelte +3 -0
  65. package/src/docs-shell/components/DocumentDisclosure.astro +2 -0
  66. package/src/docs-shell/components/DocumentFileTree.astro +3 -0
  67. package/src/docs-shell/components/DocumentFlow.astro +4 -1
  68. package/src/docs-shell/components/DocumentIllustration.astro +5 -11
  69. package/src/docs-shell/components/DocumentKeyList.astro +1 -1
  70. package/src/docs-shell/components/DocumentNamespaceTable.astro +1 -1
  71. package/src/docs-shell/components/DocumentOptionEntry.astro +0 -1
  72. package/src/docs-shell/components/DocumentOptionList.astro +1 -1
  73. package/src/docs-shell/components/DocumentOptions.astro +0 -1
  74. package/src/docs-shell/components/DocumentParameters.astro +1 -1
  75. package/src/docs-shell/components/DocumentPrompt.astro +2 -0
  76. package/src/docs-shell/components/DocumentValueList.astro +1 -1
  77. package/src/docs-shell/components/DocumentationIndex.svelte +2 -0
  78. package/src/docs-shell/components/ExpandContent.svelte +3 -0
  79. package/src/docs-shell/components/ExplorerView.astro +1 -0
  80. package/src/docs-shell/components/Footer.svelte +2 -2
  81. package/src/docs-shell/components/FooterLink.svelte +17 -0
  82. package/src/docs-shell/components/GeneratedCSS.astro +1 -0
  83. package/src/docs-shell/components/Header.svelte +1 -1
  84. package/src/docs-shell/components/InlineCode.astro +1 -0
  85. package/src/docs-shell/components/InteractingIndicator.astro +1 -0
  86. package/src/docs-shell/components/LanguageButton.svelte +1 -0
  87. package/src/docs-shell/components/LanguageSelect.svelte +2 -0
  88. package/src/docs-shell/components/NotFound.astro +3 -0
  89. package/src/docs-shell/components/PMAction.astro +1 -0
  90. package/src/docs-shell/components/PageContent.svelte +1 -1
  91. package/src/docs-shell/components/PageContentDisclosure.astro +2 -1
  92. package/src/docs-shell/components/PageContentList.svelte +2 -0
  93. package/src/docs-shell/components/PageNavs.astro +1 -0
  94. package/src/docs-shell/components/SearchButton.svelte +3 -0
  95. package/src/docs-shell/components/SearchDialog.svelte +6 -1
  96. package/src/docs-shell/components/Segments.svelte +2 -0
  97. package/src/docs-shell/components/StepSection.astro +1 -2
  98. package/src/docs-shell/components/Tabs.astro +1 -0
  99. package/src/docs-shell/components/ThemeSelect.svelte +2 -0
  100. package/src/docs-shell/components/markdown/Table.astro +1 -0
  101. package/src/docs-shell/components/markdown-components.ts +0 -1
  102. package/src/docs-shell/remark/markdown-components.js +28 -7
  103. package/src/docs-shell/scripts/document.ts +1 -1
  104. package/src/docs-shell/types/Metadata.ts +11 -0
  105. package/src/docs-shell/utils/generate-metadata.ts +3 -1
  106. package/src/docs-shell/utils/head.ts +5 -2
  107. package/src/examples/components/ArticleTransitionScene.svelte +4 -0
  108. package/src/examples/layout-system/page.astro +0 -1
  109. package/src/home/HomeBentoFrame.astro +1 -0
  110. package/src/home/HomeBentoGrid.astro +1 -0
  111. package/src/home/HomeFooter.svelte +2 -2
  112. package/src/home/bento.css +167 -0
  113. package/src/home/design.css +1 -1
  114. package/src/home/home.css +4 -576
  115. package/src/home/segmented-control.css +94 -0
  116. package/src/layouts/Document.astro +3 -1
  117. package/src/public/icons/json.svg +1 -0
  118. package/src/scripts/atomic-class-authoring.ts +98 -0
  119. package/src/scripts/style-delivery.mjs +110 -0
  120. package/src/sections/blog.astro +1 -1
  121. package/src/sections/guide.astro +1 -2
  122. package/src/styles/blog-article.css +10 -7
  123. package/src/styles/blog-materials.css +13 -0
  124. package/src/styles/demo.css +0 -1
  125. package/src/styles/docs-shell/code.css +5 -61
  126. package/src/styles/docs-shell/documentation-search.css +1 -0
  127. package/src/styles/docs-shell/footer-link.css +5 -0
  128. package/src/styles/docs-shell/header.css +2 -73
  129. package/src/styles/docs-shell/menu.css +37 -17
  130. package/src/styles/docs-shell/page-content.css +2 -37
  131. package/src/styles/docs-shell/prose.css +18 -9
  132. package/src/styles/docs-shell/steps.css +2 -39
  133. package/src/styles/document-comparison.css +5 -2
  134. package/src/styles/documentation-illustration.css +1 -9
  135. package/src/styles/documentation-index.css +2 -1
  136. package/src/styles/documents.css +2 -4
  137. package/src/styles/interface.css +5 -3
  138. package/src/styles/system/DESIGN.md +34 -14
  139. package/src/styles/system/browser.css +21 -0
  140. package/src/styles/system/button-feedback.css +13 -0
  141. package/src/styles/system/callout.css +14 -0
  142. package/src/styles/system/chart.css +18 -0
  143. package/src/styles/system/checks.css +18 -0
  144. package/src/styles/system/code-panel.css +82 -0
  145. package/src/styles/system/code-tabs.css +40 -0
  146. package/src/styles/system/code.css +8 -85
  147. package/src/styles/system/compare.css +7 -0
  148. package/src/styles/system/controls.css +10 -109
  149. package/src/styles/system/copy.css +32 -0
  150. package/src/styles/system/data.css +10 -134
  151. package/src/styles/system/dialog.css +16 -0
  152. package/src/styles/system/disclosure.css +19 -0
  153. package/src/styles/system/expand.css +11 -0
  154. package/src/styles/system/fields.css +25 -0
  155. package/src/styles/system/header-core.css +101 -0
  156. package/src/styles/system/hint.css +5 -0
  157. package/src/styles/system/index.css +13 -0
  158. package/src/styles/system/inline-code.css +4 -0
  159. package/src/styles/system/kbd.css +4 -0
  160. package/src/styles/system/logos.css +10 -0
  161. package/src/styles/system/menu.css +14 -0
  162. package/src/styles/system/metrics.css +22 -0
  163. package/src/styles/system/pagehead.css +13 -0
  164. package/src/styles/system/pager.css +13 -0
  165. package/src/styles/system/parameters.css +17 -0
  166. package/src/styles/system/prompt.css +7 -0
  167. package/src/styles/system/prose.css +4 -75
  168. package/src/styles/system/range.css +12 -0
  169. package/src/styles/system/reading.css +44 -0
  170. package/src/styles/system/scroll.css +6 -0
  171. package/src/styles/system/search-trigger.css +10 -0
  172. package/src/styles/system/segmented.css +22 -0
  173. package/src/styles/system/sheet.css +8 -0
  174. package/src/styles/system/shell.css +8 -102
  175. package/src/styles/system/sidebar.css +14 -0
  176. package/src/styles/system/source.css +5 -0
  177. package/src/styles/system/specimens.css +3 -0
  178. package/src/styles/system/stage.css +18 -0
  179. package/src/styles/system/steps.css +51 -0
  180. package/src/styles/system/surfaces.css +8 -104
  181. package/src/styles/system/table.css +23 -0
  182. package/src/styles/system/toc.css +59 -0
  183. package/src/styles/system/tooltip.css +6 -0
  184. package/src/styles/system/tray-code.css +6 -0
  185. package/src/styles/system/tray.css +20 -0
  186. package/src/styles/system/tree.css +15 -0
  187. package/src/styles/system/waterfall.css +14 -0
@@ -0,0 +1,5 @@
1
+ /* source: owned component styles; shared definitions come from the foundation. */
2
+ @layer components {
3
+ .ui-source { display: flex; flex-wrap: wrap; align-items: center; gap: 4px var(--ui-space-md); padding: var(--ui-space-sm) var(--ui-space-sm) 2px; color: var(--ui-text-muted); font: var(--ui-weight-regular) .71875rem/1.5 var(--font-family-mono); }
4
+ .ui-source a { color: var(--ui-text-body); text-decoration: underline; text-decoration-color: var(--ui-line-mark); text-underline-offset: .2em; }
5
+ }
@@ -1,5 +1,8 @@
1
1
  /* Specimens and annotations: the vocabulary inside a stage. Hue appears only here, always named by a legend or label. */
2
2
  @layer components {
3
+ /* Let the measured container shrink below a specimen's intrinsic content width. */
4
+ .ui-stage > [data-demo-container] { min-width: 0; }
5
+
3
6
  /* Item: a tile that stands for content. tone × variant */
4
7
  .ui-item {
5
8
  --tone: var(--ui-tone-neutral);
@@ -0,0 +1,18 @@
1
+ /* stage: owned component styles; shared definitions come from the foundation. */
2
+ @layer components {
3
+ .ui-stage {
4
+ position: relative; isolation: isolate; container: stage / inline-size; display: grid; place-items: center;
5
+ min-height: 10rem; padding: 3rem 2.5rem; border-radius: var(--ui-radius-xl); overflow: hidden;
6
+ background: var(--ui-stage-light), var(--ui-surface-stage);
7
+ box-shadow: inset 0 0 0 1px var(--ui-line-contour), inset 0 1px 2px light-dark(oklch(18% 0 none / .04), oklch(0% 0 none / .45)), 0 1px 0 var(--ui-lip);
8
+ }
9
+ .ui-stage[data-padding="none"] { padding: 0; place-items: stretch; }
10
+ .ui-stage[data-padding="sm"] { min-height: 0; padding: var(--ui-space-md); }
11
+ .ui-stage[data-align="start"] { place-items: start; }
12
+ .ui-stage[data-background="grid"] { background: linear-gradient(var(--ui-line-hair) 1px, transparent 1px) 0 0 / 20px 20px, linear-gradient(90deg, var(--ui-line-hair) 1px, transparent 1px) 0 0 / 20px 20px, var(--ui-stage-light), var(--ui-surface-stage); }
13
+ .ui-stage[data-background="dots"] { background: radial-gradient(var(--ui-line-divider) .8px, transparent 1.1px) 0 0 / 14px 14px, var(--ui-stage-light), var(--ui-surface-stage); }
14
+ .ui-stage[data-background="hatch"] { background: var(--ui-hatch), var(--ui-surface-stage); }
15
+ .ui-stage[data-background="checkerboard"] { background: conic-gradient(var(--ui-line-hair) 25%, transparent 0 50%, var(--ui-line-hair) 0 75%, transparent 0) 0 0 / 16px 16px, var(--ui-surface-stage); }
16
+ @media (width < 35rem) { .ui-stage { min-height: 8rem; padding: 2.25rem 1.125rem; } }
17
+ .ui-stage[data-standalone] { border-radius: var(--ui-radius-2xl); }
18
+ }
@@ -0,0 +1,51 @@
1
+ /* steps: owned component styles; shared definitions come from the foundation. */
2
+ @layer components {
3
+ .ui-steps { counter-reset: step; display: grid; gap: 0; margin: 0; padding: 0; list-style: none; }
4
+ .ui-steps > li { counter-increment: step; position: relative; display: grid; grid-template-columns: 1.75rem minmax(0, 1fr); gap: var(--ui-space-lg); padding-bottom: var(--ui-space-2xl); }
5
+ .ui-steps > li::before { content: counter(step, decimal-leading-zero); display: grid; place-items: center; width: 1.75rem; height: 1.75rem; color: var(--ui-text-muted); font: var(--ui-weight-regular) .875rem/1 var(--font-family-sans); font-variant-numeric: tabular-nums; }
6
+ .ui-steps > li::after { content: ""; position: absolute; top: 2.25rem; bottom: .5rem; left: .875rem; width: 1px; background: var(--ui-line-divider); }
7
+ .ui-steps > li:last-child { padding-bottom: 0; }
8
+ .ui-steps > li:last-child::after { display: none; }
9
+ .ui-steps > li > div > h4 { margin: .125rem 0 var(--ui-space-xs); color: var(--ui-text-strong); font-size: var(--ui-text-base); font-weight: var(--ui-weight-medium); line-height: 1.5rem; }
10
+ .ui-steps > li > div > p { margin: 0 0 var(--ui-space-sm); }
11
+ }
12
+
13
+ /*
14
+ * Document steps (`StepSection`) on `ui-steps` (styles/system/data.css): a step's content holds an authored heading,
15
+ * its text and, in a row step, the code beside it once the column has room.
16
+ */
17
+ @layer components {
18
+ .ui-steps[data-variant="document"] { container-type: inline-size; margin-block: var(--ui-space-xl) var(--line, var(--ui-space-xl)); }
19
+ .ui-steps-content, .ui-steps-text, .ui-steps-source { min-width: 0; }
20
+ .ui-steps-content { display: grid; align-content: start; gap: var(--ui-space-md); }
21
+ .ui-steps-content[data-columns] { gap: var(--ui-space-md) var(--ui-space-xl); }
22
+ .ui-steps-content :is(h2, h3, h4) {
23
+ position: static; width: auto; margin: .125rem 0 var(--ui-space-2xs);
24
+ color: var(--ui-text-strong); font-size: var(--ui-text-base); font-weight: var(--ui-weight-medium); line-height: 1.5rem; letter-spacing: -.006em;
25
+ }
26
+ .ui-steps-content :is(h2, h3, h4) > .ui-anchor { display: none; }
27
+ .ui-steps-content > :is(h2, h3, h4), .ui-steps-text > :is(h2, h3, h4) { margin-bottom: calc(var(--ui-space-md) * -1 + var(--ui-space-2xs)); }
28
+ .ui-steps-content :is(h2, h3, h4) + p { margin-top: 0; }
29
+ .ui-steps-content :is(p, li) { font-size: var(--ui-text-small); line-height: var(--ui-leading-small); }
30
+ .ui-steps-content :is(p, ul, ol) { margin-block: 0; }
31
+ .ui-steps-text { display: grid; align-content: start; gap: var(--ui-space-md); }
32
+ /* Several files under one step part by a small gap, never contour against contour. */
33
+ .ui-steps-source { display: grid; align-content: start; gap: var(--ui-space-sm); }
34
+ /* A note inside a step is part of its text: the icon leads a muted paragraph, without a frame of its own in the narrow column. */
35
+ .ui-steps-content .ui-callout { padding: 0; background: none; box-shadow: none; color: var(--ui-text-muted); }
36
+ /* Only reset panels placed by the step grid; nested trays own their internal spacing. */
37
+ :is(.ui-steps-content, .ui-steps-text, .ui-steps-source) > :is(.ui-code, .ui-tray) { margin: 0; }
38
+ :is(.ui-steps-content, .ui-steps-text, .ui-steps-source) > :is(.ui-code, p):first-child { margin-top: 0; }
39
+ :is(.ui-steps-content, .ui-steps-text, .ui-steps-source) > :is(.ui-code, p):last-child { margin-bottom: 0; }
40
+
41
+ @container (width < 20rem) {
42
+ .ui-steps[data-variant="document"] > li { grid-template-columns: minmax(0, 1fr); }
43
+ .ui-steps[data-variant="document"] > li::before, .ui-steps[data-variant="document"] > li::after { display: none; }
44
+ }
45
+
46
+ /* A row step reads beside its code once the list has room for both (46rem): the text on two fifths, the code on three.
47
+ Narrower, the code stacks under its text at full width rather than scrolling in a sliver. */
48
+ @container (min-width: 46rem) {
49
+ .ui-steps-content[data-columns] { grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); }
50
+ }
51
+ }
@@ -1,104 +1,8 @@
1
- /* Surfaces and the example frame. tray (14) → 4px inset → stage / code / sheet (10) */
2
- @layer components {
3
- .ui-sheet { position: relative; border-radius: var(--ui-radius-xl); @apply --ui-sheet-face; color: var(--ui-text-body); box-shadow: var(--ui-elevation-rise-2); }
4
- .ui-sheet[data-elevation="1"] { box-shadow: var(--ui-elevation-rise-1); }
5
- .ui-sheet[data-elevation="3"] { box-shadow: var(--ui-elevation-rise-3); }
6
- .ui-sheet[data-elevation="flat"] { background: var(--ui-surface-sheet); box-shadow: var(--ui-elevation-flat); }
7
- .ui-well { border-radius: var(--ui-radius-md); background: var(--ui-surface-well); box-shadow: var(--ui-elevation-sink); }
8
-
9
- /* The tray holds one complete example: head, stage, source, caption */
10
- .ui-tray { position: relative; min-width: 0; margin: 0; padding: var(--ui-inset); border-radius: var(--ui-radius-2xl); background: var(--ui-surface-tray); color: var(--ui-text-body); box-shadow: inset 0 0 0 1px var(--ui-line-hair), 0 1px 0 var(--ui-lip); }
11
- .ui-tray-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--ui-space-xs) var(--ui-space-md); min-height: 2.75rem; padding: 2px var(--ui-inset) var(--ui-space-xs) var(--ui-space-sm); }
12
- .ui-tray-title { min-width: 0; margin: 0; color: var(--ui-text-strong); font-size: .8125rem; font-weight: var(--ui-weight-medium); line-height: 1.4; letter-spacing: 0; }
13
- .ui-tray-description { margin: 2px 0 0; color: var(--ui-text-muted); font-size: .75rem; line-height: 1.5; }
14
- .ui-tray-tools { display: flex; flex-wrap: wrap; align-items: center; gap: var(--ui-space-xs); }
15
- .ui-tray-caption { margin: 0; padding: var(--ui-space-sm) var(--ui-space-sm) var(--ui-space-xs); color: var(--ui-text-muted); font-size: .78125rem; line-height: 1.6; text-wrap: pretty; overflow-wrap: anywhere; }
16
- .ui-tray-caption code { color: var(--ui-text-body); }
17
- .ui-tray > * + :is(.ui-stage, .ui-code, .ui-browser, .ui-compare) { margin-top: var(--ui-inset); }
18
- .ui-tray > .ui-tray-head + :is(.ui-stage, .ui-code, .ui-browser, .ui-compare) { margin-top: 0; }
19
- /* Concentric with the tray like every panel in it: 14 less the 4px inset. */
20
- .ui-tray > .ui-callout { margin-top: var(--ui-inset); border-radius: var(--ui-radius-xl); }
21
- .ui-tray > .ui-disclosure > summary { padding-inline: var(--ui-space-sm); }
22
-
23
- /* The stage: a lit, slightly recessed well where the specimen stands. It holds a small specimen in a modest frame
24
- (10rem) and otherwise follows its content, so a single row never floats in an empty well. */
25
- .ui-stage {
26
- position: relative; isolation: isolate; container: stage / inline-size; display: grid; place-items: center;
27
- min-height: 10rem; padding: 3rem 2.5rem; border-radius: var(--ui-radius-xl); overflow: hidden;
28
- background: var(--ui-stage-light), var(--ui-surface-stage);
29
- box-shadow: inset 0 0 0 1px var(--ui-line-contour), inset 0 1px 2px light-dark(oklch(18% 0 none / .04), oklch(0% 0 none / .45)), 0 1px 0 var(--ui-lip);
30
- }
31
- .ui-stage[data-padding="none"] { padding: 0; place-items: stretch; }
32
- .ui-stage[data-padding="sm"] { min-height: 0; padding: var(--ui-space-md); }
33
- .ui-stage[data-align="start"] { place-items: start; }
34
- .ui-stage[data-background="grid"] { background: linear-gradient(var(--ui-line-hair) 1px, transparent 1px) 0 0 / 20px 20px, linear-gradient(90deg, var(--ui-line-hair) 1px, transparent 1px) 0 0 / 20px 20px, var(--ui-stage-light), var(--ui-surface-stage); }
35
- .ui-stage[data-background="dots"] { background: radial-gradient(var(--ui-line-divider) .8px, transparent 1.1px) 0 0 / 14px 14px, var(--ui-stage-light), var(--ui-surface-stage); }
36
- .ui-stage[data-background="hatch"] { background: var(--ui-hatch), var(--ui-surface-stage); }
37
- .ui-stage[data-background="checkerboard"] { background: conic-gradient(var(--ui-line-hair) 25%, transparent 0 50%, var(--ui-line-hair) 0 75%, transparent 0) 0 0 / 16px 16px, var(--ui-surface-stage); }
38
- @media (width < 35rem) { .ui-stage { min-height: 8rem; padding: 2.25rem 1.125rem; } }
39
-
40
- /* Inside a tray the stage is told apart by its tone alone: the tray's ring is the example's one edge, so a framed
41
- subject on the stage (a card, a form, a window) is the only line within it. */
42
- .ui-tray .ui-stage { box-shadow: none; }
43
-
44
- /* Standalone stage without a tray (embedded in prose for very small specimens) */
45
- .ui-stage[data-standalone] { border-radius: var(--ui-radius-2xl); }
46
-
47
- /* Comparison: the same subject under two conditions */
48
- .ui-compare { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr)); gap: var(--ui-inset); }
49
- .ui-compare > figure { display: grid; grid-template-rows: auto 1fr; gap: 0; min-width: 0; margin: 0; }
50
- .ui-compare > figure > figcaption { padding: var(--ui-space-xs) var(--ui-space-sm); color: var(--ui-text-muted); @apply --ui-label-type; }
51
- .ui-compare .ui-stage { min-height: 11rem; padding: var(--ui-space-xl) var(--ui-space-lg); }
52
-
53
- /* Browser chrome for a real document in an iframe: one contour drawn over the whole window, the toolbar a tray tone
54
- above the page with its dots only — the tray head names the document. Tone, not rules, parts them. */
55
- .ui-browser { position: relative; overflow: hidden; border-radius: var(--ui-radius-xl); background: var(--ui-surface-stage); box-shadow: 0 1px 0 var(--ui-lip); }
56
- .ui-browser::after { content: ""; position: absolute; inset: 0; z-index: 2; border-radius: inherit; box-shadow: inset 0 0 0 1px var(--ui-line-contour); pointer-events: none; }
57
- /* A tray that holds only a browser lends it its place in the flow, not another frame. */
58
- .ui-tray:has(> .ui-browser:only-child) { padding: 0; border-radius: var(--ui-radius-xl); background: none; box-shadow: none; }
59
- /* Plain: a preview without chrome, where the window is not the lesson. It is a stage: inside a tray its tone sets it
60
- apart and the contour goes; alone, or in a tray that lends it only its place, it keeps the contour as its edge.
61
- A client viewport sits in its island's wrapper, so the tray is an ancestor, not a parent. */
62
- .ui-tray .ui-browser[data-variant="plain"]::after { content: none; }
63
- .ui-tray > .ui-browser[data-variant="plain"]:only-child::after { content: ""; }
64
- .ui-browser-bar { display: flex; align-items: center; gap: var(--ui-space-sm); height: 2rem; padding: 0 var(--ui-space-sm); background: var(--ui-surface-tray); }
65
- .ui-browser-dots { display: flex; gap: 6px; }
66
- .ui-browser-dots > i { width: 9px; height: 9px; border-radius: 50%; background: var(--ui-line-divider); }
67
- .ui-browser-body { position: relative; min-height: 12rem; }
68
- /* A real document: the tools set the viewport width, the handle follows its edge */
69
- .ui-browser-body:has(> .ui-browser-viewport) { min-height: 0; overflow-x: auto; scrollbar-width: thin; }
70
- .ui-browser-viewport { position: relative; max-width: none; margin-inline: auto; }
71
- .ui-browser-viewport > iframe { display: block; width: 100%; border: 0; background: transparent; }
72
- /* The example's controls: a row on the tray itself, between the stage and the source, aligned with the tray head. No
73
- surface of their own, so the stage stays the document and nothing inside it reads as part of the page shown. */
74
- .ui-browser-tools { display: flex; flex-wrap: wrap; align-items: center; gap: var(--ui-space-xs) var(--ui-space-sm); padding: var(--ui-space-sm) var(--ui-space-sm) var(--ui-space-xs); }
75
- /* One rhythm around the row: 12px to the stage above and to the source below (its 8px plus the tray's 4px inset), or to the first line of
76
- a caption; its ends 16px in from the tray's edge, on the tray head's start; every control in it one 32px height. */
77
- .ui-tray > :has(> .ui-browser-tools:last-child) + .ui-tray-caption, .ui-tray > .ui-browser-tools + .ui-tray-caption { padding-top: 0; }
78
- .ui-browser-tools > .ui-segmented > :is(button, a) { min-height: 1.625rem; }
79
- /* The range, its caption and its live reading stay one group, so a phone never parts the width from its slider. */
80
- .ui-browser-range { display: flex; flex: 1 1 14rem; align-items: center; gap: var(--ui-space-sm); min-width: 0; }
81
- /* Enlarged text must leave room for the label and reading in a narrow article. */
82
- .ui-browser-range > .ui-range { flex: 1 1 6rem; min-width: 0; max-width: 12rem; }
83
- /* The range's caption is a label in the tools' own type, whether or not the specimen parts are loaded. */
84
- .ui-browser-range > label { color: var(--ui-text-muted); @apply --ui-label-type; }
85
- .ui-browser-tools > output, .ui-browser-range > output { flex: 1 1 100%; color: var(--ui-text-muted); font: var(--ui-weight-regular) .6875rem/1.5 var(--font-family-mono); overflow-wrap: anywhere; }
86
- /* The live viewport width stays beside the range that sets it. */
87
- .ui-browser-range > .ui-browser-size { flex: none; font: var(--ui-weight-regular) .75rem/1.5 var(--font-family-sans); font-variant-numeric: tabular-nums; }
88
- .ui-resize { position: absolute; top: 0; right: 0; bottom: 0; display: grid; place-items: center; width: 1rem; cursor: ew-resize; touch-action: none; }
89
- .ui-resize::before { content: ""; width: 4px; height: 2.5rem; border-radius: var(--ui-radius-pill); background: var(--ui-line-strong); }
90
-
91
- /* Local scroll region, keyboard reachable */
92
- .ui-scroll { overflow: auto; overscroll-behavior: contain; max-height: 16rem; border-radius: var(--ui-radius-lg); background: var(--ui-surface-well); box-shadow: var(--ui-elevation-sink); }
93
- .ui-scroll:focus-visible { @apply --ui-focus-ring; outline-offset: 2px; }
94
-
95
- /* Expand: a long surface clamps under a canvas fade, with one quiet control to show the rest */
96
- .ui-expand { position: relative; min-width: 0; }
97
- .ui-expand[data-expanded="false"] > :first-child { max-height: 30rem; overflow: hidden; }
98
- .ui-expand-control { display: flex; justify-content: center; padding-top: var(--ui-space-sm); }
99
- .ui-expand[data-expanded="false"] > .ui-expand-control { position: absolute; inset-inline: 0; bottom: 0; padding-top: 6rem; background: linear-gradient(to bottom, transparent, var(--ui-surface-canvas) 72%); }
100
- .ui-expand[data-expanded="true"] > .ui-expand-control { position: sticky; bottom: var(--ui-space-sm); pointer-events: none; }
101
- .ui-expand-control > .ui-button { pointer-events: auto; }
102
- .ui-expand-control > .ui-button > svg { transition: rotate var(--ui-duration-quick) var(--ui-ease); }
103
- .ui-expand[data-expanded="true"] > .ui-expand-control > .ui-button > svg { rotate: 180deg; }
104
- }
1
+ /* Explicit full surfaces collection. Components import their own leaf stylesheet. */
2
+ @import './sheet.css';
3
+ @import './tray.css';
4
+ @import './stage.css';
5
+ @import './compare.css';
6
+ @import './browser.css';
7
+ @import './scroll.css';
8
+ @import './expand.css';
@@ -0,0 +1,23 @@
1
+ /* table: owned component styles; shared definitions come from the foundation. */
2
+ @layer components {
3
+ .ui-table { min-width: 0; overflow: auto; border: 1px solid var(--ui-line-contour); border-radius: var(--ui-radius-xl); background: var(--ui-surface-sheet); scrollbar-width: thin; }
4
+ .ui-table:focus-visible { @apply --ui-focus-ring; outline-offset: 2px; }
5
+ .ui-table table { width: 100%; border-collapse: separate; border-spacing: 0; font-size: var(--ui-text-small); line-height: 1.5; }
6
+ .ui-table thead th { position: sticky; top: 0; z-index: 1; padding: .625rem var(--ui-space-md); background: var(--ui-surface-sheet-lo); color: var(--ui-text-muted); @apply --ui-label-type; text-align: start; white-space: nowrap; box-shadow: inset 0 -1px 0 var(--ui-line-divider); }
7
+ .ui-table :is(td, tbody th) { padding: .6875rem var(--ui-space-md); color: var(--ui-text-body); font-weight: var(--ui-weight-regular); text-align: start; vertical-align: top; border-top: 1px solid var(--ui-line-hair); }
8
+ .ui-table tr:first-child > :is(td, th) { border-top: 0; }
9
+ .ui-table tbody tr { transition: background-color var(--ui-duration-quick); }
10
+ .ui-table tbody tr:hover { background: light-dark(oklch(22% .002 265 / .022), oklch(100% 0 none / .025)); }
11
+ .ui-table tbody tr > :first-child { color: var(--ui-text-strong); }
12
+ .ui-table :is(td, th)[data-align="end"] { text-align: end; font-variant-numeric: tabular-nums; white-space: nowrap; }
13
+ .ui-table thead th code { padding: 0; border-radius: 0; background: none; color: inherit; box-shadow: none; font: inherit; font-family: var(--font-family-mono); font-size: .75rem; letter-spacing: 0; }
14
+ .ui-table :is(td, tbody th) code { padding: .125em .375em; border-radius: var(--ui-radius-xs); background: var(--ui-surface-chip); color: var(--ui-text-strong); box-shadow: none; font: var(--ui-weight-regular) .8125rem/1.6 var(--font-family-mono); overflow-wrap: anywhere; -webkit-box-decoration-break: clone; box-decoration-break: clone; }
15
+ .ui-table :is(td:first-child, tbody th) code { white-space: normal; overflow-wrap: normal; }
16
+ .ui-table :is(td, tbody th) .ui-preview { display: inline-block; width: 1.25rem; height: 1.25rem; margin-right: var(--ui-space-xs); border-radius: var(--ui-radius-sm); vertical-align: -.3em; box-shadow: inset 0 0 0 1px var(--ui-line-contour); }
17
+ .ui-table[data-density="compact"] :is(th, td) { padding-block: .4375rem; }
18
+ .ui-table[data-variant="lookup"] tbody th { width: 1%; white-space: nowrap; }
19
+ .ui-table[data-variant="lookup"] td code { white-space: normal; line-height: 1.5; }
20
+ .ui-table :is(td, tbody th) ul { display: flex; flex-wrap: wrap; gap: 6px; margin: 0; padding: 0; list-style: none; }
21
+ .ui-table :is(td, tbody th) .ui-disclosure > summary { min-height: 2.25rem; }
22
+ .ui-table-caption { display: flex; justify-content: space-between; gap: var(--ui-space-md); padding: var(--ui-space-sm) var(--ui-space-md); color: var(--ui-text-muted); font-size: .75rem; box-shadow: inset 0 1px 0 var(--ui-line-hair); }
23
+ }
@@ -0,0 +1,59 @@
1
+ /* toc: owned component styles; shared definitions come from the foundation. */
2
+ @layer components {
3
+ .ui-toc { --toc-tick: 1.5rem; --toc-tick-subsection: .75rem; --toc-gap: .75rem; --toc-gutter: calc(var(--toc-tick) + var(--toc-gap)); --toc-row-padding: .5rem;
4
+ display: grid; align-content: start; gap: var(--ui-space-xs); padding: var(--ui-space-xl) var(--ui-space-lg); font-size: var(--ui-text-caption); }
5
+ .ui-toc > h4 { margin: 0 0 var(--ui-space-2xs); padding-left: var(--toc-gutter); color: var(--ui-text-muted); @apply --ui-eyebrow-type; }
6
+ .ui-toc ol { display: grid; margin: 0; padding: 0; list-style: none; }
7
+ .ui-toc a { position: relative; display: block; padding: var(--toc-row-padding) 0 var(--toc-row-padding) var(--toc-gutter); color: var(--ui-text-muted); line-height: 1.125rem; text-decoration: none; transition: color var(--ui-duration-quick); }
8
+ .ui-toc a::before { content: ""; position: absolute; top: calc(var(--toc-row-padding) + .5lh - 1px); right: calc(100% - var(--toc-tick)); width: var(--toc-tick); height: 2px; border-radius: 1px; background: var(--ui-line-divider); pointer-events: none; transition: background-color var(--ui-duration-quick); }
9
+ .ui-toc :is(ol ol a, a[data-level="3"])::before { width: var(--toc-tick-subsection); }
10
+ .ui-toc a:hover { color: var(--ui-text-strong); }
11
+ .ui-toc a:hover::before { background: var(--ui-line-mark); }
12
+ .ui-toc a[aria-current="location"] { color: var(--ui-text-strong); font-weight: var(--ui-weight-medium); }
13
+ .ui-toc a[aria-current="location"]::before { background: var(--ui-text-strong); }
14
+ .ui-toc a:focus-visible { @apply --ui-focus-ring; outline-offset: 1px; border-radius: var(--ui-radius-xs); }
15
+ .ui-toc ol ol a:not([aria-current]) { color: color-mix(in oklab, var(--ui-text-muted) 72%, var(--ui-text-disabled)); }
16
+ .ui-toc ol ol a:not([aria-current])::before { background: var(--ui-line-hair); }
17
+ .ui-toc ol ol a:not([aria-current]):hover { color: var(--ui-text-strong); }
18
+ .ui-toc-actions { display: grid; padding: var(--ui-space-sm) 0 0 var(--toc-gutter); }
19
+ .ui-toc-actions a { padding: .3125rem 0; color: var(--ui-text-muted); font-size: .75rem; line-height: 1.5; }
20
+ .ui-toc-actions a::before { content: none; }
21
+ }
22
+
23
+ /*
24
+ * The page's contents (`ui-toc`, styles/system/shell.css) as the site uses them: the documentation rail (docs.css
25
+ * places it), the narrow-screen disclosure under the page head, and a blog post's margin contents. Sections nest
26
+ * their subsections; the entry being read carries `aria-current="location"`.
27
+ */
28
+ @layer components {
29
+ .ui-toc a { overflow-wrap: anywhere; text-wrap: pretty; }
30
+ .ui-toc a code { font-family: var(--font-family-mono); font-size: .9em; }
31
+ /* A section whose subsection is being read keeps a step of ink. */
32
+ .ui-toc li:has(> ol [aria-current="location"]) > a { color: var(--ui-text-body); }
33
+ /* A long list folds: every section stays listed, only the one being read opens its subsections. */
34
+ .ui-toc ol[data-fold] > li:not(:has([aria-current="location"])) > ol { display: none; }
35
+ .ui-toc-actions > a:focus-visible { @apply --ui-focus-ring; outline-offset: 2px; border-radius: var(--ui-radius-xs); }
36
+ .ui-toc-actions > a { text-decoration: none; transition: color var(--ui-duration-quick); }
37
+ .ui-toc-actions > a:hover { color: var(--ui-text-strong); }
38
+ /* The rail scrolls and clips, so its rings sit inside the entry. */
39
+ .ui-toc[data-rail] a:focus-visible { outline-offset: -2px; }
40
+ @media (pointer: coarse) {
41
+ .ui-toc { --toc-row-padding: .8125rem; }
42
+ .ui-toc a { min-height: 2.75rem; }
43
+ .ui-toc-actions > a { min-height: 2.75rem; }
44
+ }
45
+ @media (forced-colors: active) { .ui-toc a[aria-current="location"] { text-decoration: underline; } }
46
+ @media print { .ui-toc { display: none; } }
47
+
48
+ /* Narrow screens: the same contents, closed between hairlines under the page head. */
49
+ [data-contents-disclosure] { margin-block: 0 var(--ui-space-xl); }
50
+ [data-contents-disclosure] > .ui-toc { padding: 0 0 var(--ui-space-md); }
51
+ @media (width >= 80rem) { [data-contents-disclosure] { display: none; } }
52
+ /* Hidden beside the rail, the disclosure no longer closes the text before the next section, so that heading takes its own hairline again. The page head
53
+ already parts the page from its first section, and the blog switches its disclosure by its own width. */
54
+ @media (width >= 80rem) {
55
+ .ui-docs-article > [data-contents-disclosure]:not(:first-child, .ui-pagehead + *) + h2, .ui-docs-article > [data-contents-disclosure]:not(:first-child, .ui-pagehead + *) + a[id]:empty + h2,
56
+ .ui-docs-article > [data-contents-disclosure]:not(:first-child, .ui-pagehead + *) + hr + h2, .ui-docs-article > [data-contents-disclosure]:not(:first-child, .ui-pagehead + *) + hr + a[id]:empty + h2 { --section-rule: block; }
57
+ }
58
+ @media print { [data-contents-disclosure] { display: none; } }
59
+ }
@@ -0,0 +1,6 @@
1
+ /* tooltip: owned component styles; shared definitions come from the foundation. */
2
+ @layer components {
3
+ .ui-tooltip { position: absolute; z-index: 60; padding: .3125rem .5rem; border-radius: var(--ui-radius-sm); background: var(--ui-surface-ink); color: var(--ui-text-inverse); box-shadow: 0 1px 2px var(--ui-shade-1), 0 4px 10px -4px var(--ui-shade-2); font: var(--ui-weight-regular) .71875rem/1.2 var(--font-family-sans); white-space: nowrap; pointer-events: none; }
4
+ .ui-tooltip[data-side="bottom"]::before { content: ""; position: absolute; bottom: 100%; left: 50%; translate: -50% 0; border: 4px solid transparent; border-bottom-color: var(--ui-surface-ink); }
5
+ .ui-tooltip > .ui-kbd { height: 1.125rem; min-width: 1.125rem; margin-left: 6px; background: color-mix(in oklab, var(--ui-text-inverse) 14%, transparent); color: var(--ui-text-inverse); box-shadow: none; }
6
+ }
@@ -0,0 +1,6 @@
1
+ /* tray-code: owned component styles; shared definitions come from the foundation. */
2
+ @layer components {
3
+ .ui-tray > :is(.ui-code, .ui-tree), .ui-tray > .ui-disclosure > .ui-code { box-shadow: none; }
4
+ /* Generated output closes the source panel after the tray's frame reset. */
5
+ .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); }
6
+ }
@@ -0,0 +1,20 @@
1
+ /* tray: owned component styles; shared definitions come from the foundation. */
2
+ @layer components {
3
+ .ui-tray { position: relative; min-width: 0; margin: 0; padding: var(--ui-inset); border-radius: var(--ui-radius-2xl); background: var(--ui-surface-tray); color: var(--ui-text-body); box-shadow: inset 0 0 0 1px var(--ui-line-hair), 0 1px 0 var(--ui-lip); }
4
+ .ui-tray-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--ui-space-xs) var(--ui-space-md); min-height: 2.75rem; padding: var(--ui-space-sm) var(--ui-space-md); }
5
+ .ui-tray-title { min-width: 0; margin: 0; color: var(--ui-text-strong); font-size: .8125rem; font-weight: var(--ui-weight-medium); line-height: 1.4; letter-spacing: 0; }
6
+ .ui-tray-description { margin: 2px 0 0; color: var(--ui-text-muted); font-size: .75rem; line-height: 1.5; }
7
+ .ui-tray-tools { display: flex; flex-wrap: wrap; align-items: center; gap: var(--ui-space-xs); }
8
+ .ui-tray-head > :is(.ui-button, .ui-tray-tools) { margin-block: calc(-1 * var(--ui-space-sm)); }
9
+ .ui-tray-caption { margin: 0; padding: var(--ui-space-sm) var(--ui-space-md); color: var(--ui-text-muted); font-size: .78125rem; line-height: 1.6; text-wrap: pretty; overflow-wrap: anywhere; }
10
+ .ui-tray-caption code { color: var(--ui-text-body); }
11
+ .ui-tray > * + :is(.ui-stage, .ui-code, .ui-browser, .ui-compare) { margin-top: var(--ui-inset); }
12
+ .ui-tray > .ui-tray-head + :is(.ui-stage, .ui-code, .ui-browser, .ui-compare) { margin-top: 0; }
13
+ .ui-tray > .ui-callout { margin-top: var(--ui-inset); border-radius: var(--ui-radius-xl); }
14
+ .ui-tray > .ui-disclosure > summary { padding-inline: var(--ui-space-sm); }
15
+ .ui-tray .ui-stage { box-shadow: none; }
16
+ .ui-tray:has(> .ui-browser:only-child) { padding: 0; border-radius: var(--ui-radius-xl); background: none; box-shadow: none; }
17
+ .ui-tray .ui-browser[data-variant="plain"]::after { content: none; }
18
+ .ui-tray > .ui-browser[data-variant="plain"]:only-child::after { content: ""; }
19
+ .ui-tray > :has(> .ui-browser-tools:last-child) + .ui-tray-caption, .ui-tray > .ui-browser-tools + .ui-tray-caption { padding-top: 0; }
20
+ }
@@ -0,0 +1,15 @@
1
+ /* tree: owned component styles; shared definitions come from the foundation. */
2
+ @layer components {
3
+ .ui-tree img { flex: none; align-self: center; width: 14px; height: 14px; }
4
+ .ui-tree { margin: 0; overflow-x: auto; overflow-wrap: anywhere; padding: var(--ui-space-sm) 0; border-radius: var(--ui-radius-xl); background: var(--ui-surface-code); box-shadow: inset 0 0 0 1px var(--ui-line-contour), 0 1px 0 var(--ui-lip); }
5
+ .ui-tree ul { margin: 0; padding: 0; list-style: none; }
6
+ .ui-tree ul ul { margin-left: 1.375rem; box-shadow: inset 1px 0 0 var(--ui-line-hair); }
7
+ .ui-tree li > div > * { min-width: 0; }
8
+ .ui-tree li > div { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px var(--ui-space-sm); padding: .3125rem var(--ui-space-md); }
9
+ .ui-tree ul ul li > div { padding-left: var(--ui-space-sm); }
10
+ .ui-tree svg { flex: none; align-self: center; width: 14px; height: 14px; color: var(--ui-text-muted); }
11
+ .ui-tree b { color: var(--ui-text-strong); font: var(--ui-weight-regular) var(--ui-text-code)/1.5 var(--font-family-mono); }
12
+ .ui-tree span { color: var(--ui-text-muted); font-size: .78125rem; }
13
+ .ui-tree [data-mark="added"] > div { background: var(--ui-code-added); }
14
+ .ui-tree [data-mark="added"] > div > b::after { content: " +"; color: var(--ui-status-success); }
15
+ }
@@ -0,0 +1,14 @@
1
+ /* waterfall: owned component styles; shared definitions come from the foundation. */
2
+ @layer components {
3
+ .ui-waterfall { display: grid; gap: 2px; padding: var(--ui-space-md) var(--ui-space-lg) var(--ui-space-lg); border-radius: var(--ui-radius-xl); @apply --ui-sheet-face; box-shadow: var(--ui-elevation-rise-1); }
4
+ .ui-waterfall-axis { display: grid; grid-template-columns: 7.5rem 1fr; margin-bottom: var(--ui-space-xs); color: var(--ui-text-muted); font: var(--ui-weight-regular) .65625rem/1 var(--font-family-mono); }
5
+ .ui-waterfall-axis > div { display: flex; justify-content: space-between; }
6
+ .ui-waterfall-row { display: grid; grid-template-columns: 7.5rem 1fr; align-items: center; min-height: 1.75rem; font-size: .78125rem; }
7
+ .ui-waterfall-row > span { overflow: hidden; color: var(--ui-text-strong); font-family: var(--font-family-mono); font-size: .71875rem; text-overflow: ellipsis; white-space: nowrap; }
8
+ .ui-waterfall-track { position: relative; height: 100%; background: repeating-linear-gradient(90deg, var(--ui-line-hair) 0 1px, transparent 1px 25%); }
9
+ .ui-waterfall-track > i { position: absolute; top: 50%; height: 8px; translate: 0 -50%; border-radius: 3px; background: var(--ui-text-strong); }
10
+ @media (forced-colors: active) { .ui-waterfall-track > i { box-sizing: border-box; border: 1px solid CanvasText; } }
11
+ .ui-waterfall-track > i[data-tone="muted"] { background: var(--ui-line-mark); }
12
+ .ui-waterfall-track > i[data-tone="blocking"] { background: var(--ui-tone-amber); }
13
+ .ui-waterfall-mark { position: absolute; top: 2px; bottom: 2px; width: 2px; margin-left: -1px; border-radius: 1px; background: var(--ui-status-danger); }
14
+ }