@master/internal-site 0.1.2 → 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 (183) hide show
  1. package/README.md +6 -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/GeneratedCSS.astro +1 -0
  81. package/src/docs-shell/components/Header.svelte +1 -1
  82. package/src/docs-shell/components/InlineCode.astro +1 -0
  83. package/src/docs-shell/components/InteractingIndicator.astro +1 -0
  84. package/src/docs-shell/components/LanguageButton.svelte +1 -0
  85. package/src/docs-shell/components/LanguageSelect.svelte +2 -0
  86. package/src/docs-shell/components/NotFound.astro +3 -0
  87. package/src/docs-shell/components/PMAction.astro +1 -0
  88. package/src/docs-shell/components/PageContent.svelte +1 -1
  89. package/src/docs-shell/components/PageContentDisclosure.astro +2 -1
  90. package/src/docs-shell/components/PageContentList.svelte +2 -0
  91. package/src/docs-shell/components/PageNavs.astro +1 -0
  92. package/src/docs-shell/components/SearchButton.svelte +3 -0
  93. package/src/docs-shell/components/SearchDialog.svelte +6 -1
  94. package/src/docs-shell/components/Segments.svelte +2 -0
  95. package/src/docs-shell/components/StepSection.astro +1 -2
  96. package/src/docs-shell/components/Tabs.astro +1 -0
  97. package/src/docs-shell/components/ThemeSelect.svelte +2 -0
  98. package/src/docs-shell/components/markdown/Table.astro +1 -0
  99. package/src/docs-shell/components/markdown-components.ts +0 -1
  100. package/src/docs-shell/remark/markdown-components.js +28 -7
  101. package/src/docs-shell/scripts/document.ts +1 -1
  102. package/src/docs-shell/types/Metadata.ts +11 -0
  103. package/src/docs-shell/utils/generate-metadata.ts +3 -1
  104. package/src/docs-shell/utils/head.ts +5 -2
  105. package/src/examples/components/ArticleTransitionScene.svelte +4 -0
  106. package/src/examples/layout-system/page.astro +0 -1
  107. package/src/home/HomeBentoFrame.astro +1 -0
  108. package/src/home/HomeBentoGrid.astro +1 -0
  109. package/src/home/bento.css +167 -0
  110. package/src/home/design.css +1 -1
  111. package/src/home/home.css +4 -576
  112. package/src/home/segmented-control.css +94 -0
  113. package/src/layouts/Document.astro +3 -1
  114. package/src/public/icons/json.svg +1 -0
  115. package/src/scripts/atomic-class-authoring.ts +98 -0
  116. package/src/scripts/style-delivery.mjs +110 -0
  117. package/src/sections/blog.astro +1 -1
  118. package/src/sections/guide.astro +1 -2
  119. package/src/styles/blog-article.css +10 -7
  120. package/src/styles/blog-materials.css +13 -0
  121. package/src/styles/demo.css +0 -1
  122. package/src/styles/docs-shell/code.css +5 -61
  123. package/src/styles/docs-shell/documentation-search.css +1 -0
  124. package/src/styles/docs-shell/header.css +2 -73
  125. package/src/styles/docs-shell/menu.css +37 -17
  126. package/src/styles/docs-shell/page-content.css +2 -37
  127. package/src/styles/docs-shell/prose.css +18 -9
  128. package/src/styles/docs-shell/steps.css +2 -39
  129. package/src/styles/document-comparison.css +5 -2
  130. package/src/styles/documentation-illustration.css +1 -9
  131. package/src/styles/documentation-index.css +2 -1
  132. package/src/styles/documents.css +2 -4
  133. package/src/styles/interface.css +5 -3
  134. package/src/styles/system/DESIGN.md +34 -14
  135. package/src/styles/system/browser.css +21 -0
  136. package/src/styles/system/button-feedback.css +13 -0
  137. package/src/styles/system/callout.css +14 -0
  138. package/src/styles/system/chart.css +18 -0
  139. package/src/styles/system/checks.css +18 -0
  140. package/src/styles/system/code-panel.css +82 -0
  141. package/src/styles/system/code-tabs.css +40 -0
  142. package/src/styles/system/code.css +8 -85
  143. package/src/styles/system/compare.css +7 -0
  144. package/src/styles/system/controls.css +10 -109
  145. package/src/styles/system/copy.css +32 -0
  146. package/src/styles/system/data.css +10 -134
  147. package/src/styles/system/dialog.css +16 -0
  148. package/src/styles/system/disclosure.css +19 -0
  149. package/src/styles/system/expand.css +11 -0
  150. package/src/styles/system/fields.css +25 -0
  151. package/src/styles/system/header-core.css +101 -0
  152. package/src/styles/system/hint.css +5 -0
  153. package/src/styles/system/index.css +13 -0
  154. package/src/styles/system/inline-code.css +4 -0
  155. package/src/styles/system/kbd.css +4 -0
  156. package/src/styles/system/logos.css +10 -0
  157. package/src/styles/system/menu.css +14 -0
  158. package/src/styles/system/metrics.css +22 -0
  159. package/src/styles/system/pagehead.css +13 -0
  160. package/src/styles/system/pager.css +13 -0
  161. package/src/styles/system/parameters.css +17 -0
  162. package/src/styles/system/prompt.css +7 -0
  163. package/src/styles/system/prose.css +4 -75
  164. package/src/styles/system/range.css +12 -0
  165. package/src/styles/system/reading.css +44 -0
  166. package/src/styles/system/scroll.css +6 -0
  167. package/src/styles/system/search-trigger.css +10 -0
  168. package/src/styles/system/segmented.css +22 -0
  169. package/src/styles/system/sheet.css +8 -0
  170. package/src/styles/system/shell.css +8 -102
  171. package/src/styles/system/sidebar.css +14 -0
  172. package/src/styles/system/source.css +5 -0
  173. package/src/styles/system/specimens.css +3 -0
  174. package/src/styles/system/stage.css +18 -0
  175. package/src/styles/system/steps.css +51 -0
  176. package/src/styles/system/surfaces.css +8 -104
  177. package/src/styles/system/table.css +23 -0
  178. package/src/styles/system/toc.css +59 -0
  179. package/src/styles/system/tooltip.css +6 -0
  180. package/src/styles/system/tray-code.css +6 -0
  181. package/src/styles/system/tray.css +20 -0
  182. package/src/styles/system/tree.css +15 -0
  183. package/src/styles/system/waterfall.css +14 -0
@@ -1,85 +1,8 @@
1
- /* Code: a quiet panel that owns its frame. Inside a tray it shares the tray's 10px inner radius and 4px inset. */
2
- @layer components {
3
- .ui-code { position: relative; min-width: 0; overflow: hidden; border-radius: var(--ui-radius-xl); background: var(--ui-surface-code); color: var(--ui-code-text); box-shadow: inset 0 0 0 1px var(--ui-line-contour), 0 1px 0 var(--ui-lip); }
4
- /* One corner for every panel: the copy action is centred on the first line of text (a bar's row or the code's first line)
5
- and set in from the end by the same distance. A file name starts where the code's lines start; a tab chip, as tall as
6
- the copy button, takes the corner's distance from the start and the top. */
7
- .ui-code, .ui-prompt { --code-corner: calc(var(--ui-space-md) + var(--ui-text-code) * var(--ui-leading-code) / 2 - 1rem); }
8
- .ui-code-bar { display: flex; align-items: center; gap: var(--ui-space-xs); min-height: calc(var(--code-corner) + 2rem); padding: var(--code-corner) var(--code-corner) 0 var(--ui-space-md); }
9
- .ui-code-bar > .ui-tabs { flex: 1; min-width: 0; margin-left: calc(var(--code-corner) - var(--ui-space-md)); }
10
- .ui-code-file { display: inline-flex; align-items: center; gap: var(--ui-space-xs); flex: 1; min-width: 0; color: var(--ui-text-muted); font: var(--ui-weight-regular) .75rem/1 var(--font-family-mono); }
11
- .ui-code-file svg { flex: none; width: 14px; height: 14px; }
12
- /* Without a bar the code sits in equal space above and below, the same 16px that sets its lines in from the edge. */
13
- .ui-code pre { margin: 0; padding: var(--ui-space-md) 0; overflow-x: auto; font: var(--ui-weight-regular) var(--ui-text-code)/var(--ui-leading-code) var(--font-family-mono); tab-size: 2; scrollbar-width: thin; }
14
- .ui-code pre:focus-visible { @apply --ui-focus-ring; outline-offset: -4px; border-radius: var(--ui-radius-md); }
15
- /* Under a bar the code starts a short step down, so the file name reads as its caption. */
16
- .ui-code:has(> .ui-code-bar) pre { padding-top: var(--ui-space-2xs); }
17
- .ui-code-line { display: block; padding: 0 var(--ui-space-lg) 0 var(--ui-space-md); }
18
- /* A blank source line keeps one line of height, even when the highlighter leaves an empty token in it. */
19
- .ui-code-line { min-height: 1lh; }
20
- .ui-code[data-numbers] { counter-reset: line; }
21
- .ui-code[data-numbers] .ui-code-line::before { counter-increment: line; content: counter(line); display: inline-block; width: 1.75rem; margin-right: var(--ui-space-sm); color: var(--ui-text-disabled); text-align: right; user-select: none; }
22
- .ui-code-line[data-mark="active"] { background: var(--ui-code-active); box-shadow: inset 2px 0 0 var(--ui-line-mark); }
23
- .ui-code-line[data-mark="added"] { background: var(--ui-code-added); box-shadow: inset 2px 0 0 color-mix(in oklab, var(--ui-status-success) 70%, transparent); }
24
- .ui-code-line[data-mark="removed"] { background: var(--ui-code-removed); box-shadow: inset 2px 0 0 color-mix(in oklab, var(--ui-status-danger) 70%, transparent); }
25
- .ui-code-line[data-mark="added"]::after, .ui-code-line[data-mark="removed"]::after { float: right; color: var(--ui-text-disabled); }
26
- .ui-code-line[data-mark="added"]::after { content: "+"; }
27
- .ui-code-line[data-mark="removed"]::after { content: "−"; }
28
- .ui-code-line mark { padding: 1px 2px; border-radius: 3px; background: light-dark(oklch(22% .002 265 / .08), oklch(100% 0 none / .1)); color: inherit; box-shadow: inset 0 -1px 0 var(--ui-line-mark); }
29
- .ui-code .t { color: var(--ui-code-function); } .ui-code .a { color: var(--ui-code-property); } .ui-code .s { color: var(--ui-code-string); }
30
- .ui-code .p { color: var(--ui-code-punctuation); } .ui-code .k { color: var(--ui-code-keyword); } .ui-code .c { color: var(--ui-code-comment); font-style: italic; } .ui-code .n { color: var(--ui-code-number); }
31
- .ui-code > .ui-disclosure { border-top: 1px solid var(--ui-line-hair); }
32
- .ui-code > .ui-disclosure > summary { padding-inline: var(--ui-space-md); }
33
- .ui-code > .ui-disclosure > pre { padding-top: 0; }
34
- /* In a tray, source code (a file tree, a disclosed result) is a lighter field like the stage beside it: tone, not another ring. */
35
- .ui-tray > :is(.ui-code, .ui-tree), .ui-tray > .ui-disclosure > .ui-code { box-shadow: none; }
36
-
37
- /* Tabs: a row of quiet chips; the selected one is filled. The row scrolls and so clips any outer shadow, and a raised
38
- sheet face is the code panel's own tone: the chip's fill and inset hairline keep it legible in both schemes. */
39
- .ui-tabs { display: flex; gap: 2px; min-width: 0; overflow-x: auto; scrollbar-width: none; }
40
- .ui-tabs::-webkit-scrollbar { display: none; }
41
- .ui-tabs > [role="tab"] {
42
- appearance: none; display: inline-flex; flex: none; align-items: center; gap: 6px; min-height: 2rem; padding: 0 .625rem; border: 0; border-radius: var(--ui-radius-md);
43
- background: transparent; color: var(--ui-text-muted); font: var(--ui-weight-regular) .75rem/1 var(--font-family-mono); cursor: pointer; transition: color var(--ui-duration-quick), background-color var(--ui-duration-quick), box-shadow var(--ui-duration-quick);
44
- }
45
- .ui-tabs > [role="tab"] svg { width: 14px; height: 14px; }
46
- .ui-tabs > [role="tab"]:hover { color: var(--ui-text-strong); }
47
- .ui-tabs > [role="tab"][aria-selected="true"] { background: var(--ui-surface-chip); color: var(--ui-text-strong); box-shadow: inset 0 0 0 1px var(--ui-line-hair); }
48
- .ui-tabs > [role="tab"]:focus-visible { @apply --ui-focus-ring; outline-offset: -2px; }
49
-
50
- /* Inline code and file references */
51
- .ui-inline-code { padding: .125em .375em; border-radius: var(--ui-radius-xs); background: var(--ui-surface-chip); color: var(--ui-text-strong); box-shadow: inset 0 0 0 1px var(--ui-line-hair); font: var(--ui-weight-regular) .84em/1 var(--font-family-mono); overflow-wrap: anywhere; }
52
-
53
- /* Disclosure: native details, one chevron, calm motion */
54
- .ui-disclosure { min-width: 0; }
55
- .ui-disclosure > summary { display: flex; flex-wrap: wrap; align-items: center; gap: var(--ui-space-xs); min-height: 2.75rem; color: var(--ui-text-body); font: var(--ui-weight-medium) .8125rem/1.3 var(--font-family-sans); list-style: none; cursor: pointer; }
56
- .ui-disclosure > summary::-webkit-details-marker { display: none; }
57
- .ui-disclosure > summary::before { content: ""; flex: none; width: 14px; height: 14px; background: currentColor; opacity: .6; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='m6 3.5 4.5 4.5L6 12.5' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; transition: rotate var(--ui-duration-base) var(--ui-ease); }
58
- .ui-disclosure[open] > summary::before { rotate: 90deg; }
59
- .ui-disclosure > summary:hover { color: var(--ui-text-strong); }
60
- .ui-disclosure > summary:focus-visible { @apply --ui-focus-ring; outline-offset: 2px; border-radius: var(--ui-radius-md); }
61
- .ui-disclosure > summary .ui-disclosure-meta { margin-left: auto; color: var(--ui-text-muted); font: var(--ui-weight-regular) .75rem/1 var(--font-family-sans); }
62
- .ui-disclosure[data-variant="rule"] { border-block: 1px solid var(--ui-line-hair); }
63
- .ui-disclosure[data-variant="rule"] + .ui-disclosure[data-variant="rule"] { border-top: 0; }
64
- .ui-disclosure-body { padding-bottom: var(--ui-space-md); }
65
- .ui-disclosure > .ui-disclosure-body > :first-child { margin-top: 0; }
66
- .ui-disclosure > .ui-disclosure-body > :last-child { margin-bottom: 0; }
67
-
68
- /* Prompt: copyable prose for agents — reads as text, copies as text */
69
- .ui-prompt { display: grid; gap: 0; min-width: 0; overflow: hidden; 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); }
70
- .ui-prompt-body { margin: 0; padding: var(--ui-space-xs) var(--ui-space-md) var(--ui-space-md); color: var(--ui-text-strong); font: var(--ui-weight-regular) .9375rem/1.7 var(--font-family-sans); white-space: pre-wrap; }
71
- .ui-prompt-body var { padding: 0 .25em; border-radius: var(--ui-radius-xs); background: var(--ui-surface-chip); color: var(--ui-text-body); box-shadow: inset 0 0 0 1px var(--ui-line-hair); font: var(--ui-weight-regular) .8125rem/1 var(--font-family-mono); font-style: normal; }
72
-
73
- /* File tree: names in mono, descriptions in the reading face, guides as hairlines */
74
- .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); }
75
- .ui-tree ul { margin: 0; padding: 0; list-style: none; }
76
- .ui-tree ul ul { margin-left: 1.375rem; box-shadow: inset 1px 0 0 var(--ui-line-hair); }
77
- .ui-tree li > div > * { min-width: 0; }
78
- .ui-tree li > div { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px var(--ui-space-sm); padding: .3125rem var(--ui-space-md); }
79
- .ui-tree ul ul li > div { padding-left: var(--ui-space-sm); }
80
- .ui-tree svg { flex: none; align-self: center; width: 14px; height: 14px; color: var(--ui-text-muted); }
81
- .ui-tree b { color: var(--ui-text-strong); font: var(--ui-weight-regular) var(--ui-text-code)/1.5 var(--font-family-mono); }
82
- .ui-tree span { color: var(--ui-text-muted); font-size: .78125rem; }
83
- .ui-tree [data-mark="added"] > div { background: var(--ui-code-added); }
84
- .ui-tree [data-mark="added"] > div > b::after { content: " +"; color: var(--ui-status-success); }
85
- }
1
+ /* Explicit full code collection. Components import their own leaf stylesheet. */
2
+ @import './code-panel.css';
3
+ @import './prompt.css';
4
+ @import './tray-code.css';
5
+ @import './code-tabs.css';
6
+ @import './inline-code.css';
7
+ @import './disclosure.css';
8
+ @import './tree.css';
@@ -0,0 +1,7 @@
1
+ /* compare: owned component styles; shared definitions come from the foundation. */
2
+ @layer components {
3
+ .ui-compare { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr)); gap: var(--ui-inset); }
4
+ .ui-compare > figure { display: grid; grid-template-rows: auto 1fr; gap: 0; min-width: 0; margin: 0; }
5
+ .ui-compare > figure > figcaption { padding: var(--ui-space-xs) var(--ui-space-sm); color: var(--ui-text-muted); @apply --ui-label-type; }
6
+ .ui-compare .ui-stage { min-height: 11rem; padding: var(--ui-space-xl) var(--ui-space-lg); }
7
+ }
@@ -1,110 +1,11 @@
1
+ /* Explicit full controls collection. Components import their own leaf stylesheet. */
1
2
  @import './buttons.css';
2
-
3
- @layer components {
4
- /* Segmented control: a sunken track, a raised thumb */
5
- .ui-segmented { display: inline-flex; flex-wrap: wrap; gap: 2px; max-width: 100%; padding: 3px; border-radius: calc(var(--ui-radius-md) + 3px); background: var(--ui-surface-well); box-shadow: var(--ui-elevation-sink); }
6
- /* Links to sibling pages use the same control; the page being read carries aria-current="page". */
7
- .ui-segmented > :is(button, a) {
8
- appearance: none; display: inline-flex; align-items: center; justify-content: center; min-height: 1.875rem; min-width: 3.5rem; padding: 0 .75rem; border: 0; border-radius: var(--ui-radius-md); background: transparent;
9
- color: var(--ui-text-muted); font: var(--ui-weight-medium) .78125rem/1 var(--font-family-sans); text-decoration: none; white-space: nowrap; cursor: pointer; transition: color var(--ui-duration-quick), background-color var(--ui-duration-quick), box-shadow var(--ui-duration-quick);
10
- }
11
- .ui-segmented > :is(button, a):hover:not(:disabled) { color: var(--ui-text-strong); }
12
- .ui-segmented > :is(button, a):is([aria-pressed="true"], [aria-selected="true"], [aria-checked="true"], [aria-current="page"]) { color: var(--ui-text-strong); @apply --ui-sheet-face; box-shadow: var(--ui-elevation-rise-1); }
13
- .ui-segmented > :is(button, a):focus-visible { @apply --ui-focus-ring; outline-offset: 2px; }
14
- .ui-segmented > button:disabled { color: var(--ui-text-disabled); cursor: not-allowed; }
15
- /* Underline: page-level tabs between sibling documents — words on one hairline, the current one underlined in ink. */
16
- .ui-segmented[data-variant="underline"] { display: flex; gap: 0 var(--ui-space-lg); padding: 0; border-radius: 0; background: none; box-shadow: inset 0 -1px 0 var(--ui-line-divider); }
17
- .ui-segmented[data-variant="underline"] > :is(button, a) { min-width: 0; min-height: 2.75rem; padding: 0; border-radius: 0; color: var(--ui-text-muted); font: var(--ui-weight-regular) var(--ui-text-small)/1.4 var(--font-family-sans); }
18
- .ui-segmented[data-variant="underline"] > :is(button, a):is([aria-pressed="true"], [aria-selected="true"], [aria-checked="true"], [aria-current="page"]) { color: var(--ui-text-strong); background: none; box-shadow: inset 0 -2px 0 var(--ui-text-strong); }
19
- .ui-segmented[data-variant="underline"] > :is(button, a):focus-visible { outline-offset: -2px; border-radius: var(--ui-radius-xs); }
20
- .ui-segmented[data-size="lg"] { padding: 4px; border-radius: calc(var(--ui-radius-md) + 4px); }
21
- .ui-segmented[data-size="lg"] > :is(button, a) { min-height: 2.25rem; border-radius: var(--ui-radius-md); font-size: .8125rem; }
22
-
23
- /* Fields: a well that floats back to the sheet on focus */
24
- .ui-field { display: grid; gap: var(--ui-space-xs); color: var(--ui-text-strong); font-size: var(--ui-text-small); font-weight: var(--ui-weight-medium); }
25
- .ui-field-hint { color: var(--ui-text-muted); font-size: .75rem; font-weight: var(--ui-weight-regular); }
26
- .ui-input, .ui-select {
27
- width: 100%; min-height: 2.5rem; padding: .5625rem .75rem; border: 0; border-radius: var(--ui-radius-md);
28
- background: var(--ui-surface-well); color: var(--ui-text-strong); box-shadow: var(--ui-elevation-sink);
29
- font: var(--ui-weight-regular) var(--ui-text-small)/1.45 var(--font-family-sans); resize: vertical;
30
- transition: box-shadow var(--ui-duration-quick), background-color var(--ui-duration-quick);
31
- }
32
- .ui-input::placeholder { color: var(--ui-text-muted); }
33
- .ui-input:hover:not(:focus, :disabled), .ui-select:hover:not(:focus, :disabled) { background: var(--ui-surface-well-hover); }
34
- .ui-input:focus, .ui-select:focus-visible { outline: none; background: var(--ui-surface-sheet); box-shadow: inset 0 0 0 1px var(--ui-line-mark), 0 0 0 3px light-dark(oklch(22% .002 265 / .1), oklch(100% 0 none / .12)); }
35
- .ui-input:disabled, .ui-select:disabled { color: var(--ui-text-disabled); cursor: not-allowed; }
36
- .ui-select { appearance: none; padding-right: 2rem; cursor: pointer;
37
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23888' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m4.5 6.5 3.5 3.5 3.5-3.5'/%3E%3C/svg%3E");
38
- background-repeat: no-repeat; background-position: right .625rem center; background-size: 14px; }
39
- .ui-select[data-variant="raised"] { background-color: transparent; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23888' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m4.5 6.5 3.5 3.5 3.5-3.5'/%3E%3C/svg%3E"), linear-gradient(180deg, var(--ui-surface-sheet), var(--ui-surface-sheet-lo)); background-position: right .625rem center, 0 0; background-size: 14px, auto; box-shadow: var(--ui-elevation-rise-1); font-weight: var(--ui-weight-medium); }
40
- /* Overlay: an invisible native select over a positioned label that shows the value (version, language, appearance) */
41
- .ui-select[data-variant="overlay"] { position: absolute; inset: 0; width: 100%; height: 100%; min-height: 0; padding: 0; opacity: 0; cursor: pointer; }
42
- :has(> .ui-select[data-variant="overlay"]:focus-visible) { @apply --ui-focus-ring; outline-offset: 2px; }
43
-
44
- /* Range: hairline track, filled to value, raised thumb */
45
- .ui-range { --value: 50%; appearance: none; width: 100%; min-width: 6rem; height: 1.75rem; margin: 0; background: transparent; cursor: ew-resize; }
46
- .ui-range::-webkit-slider-runnable-track { height: 4px; border-radius: var(--ui-radius-pill); background: linear-gradient(90deg, var(--ui-text-strong) var(--value), var(--ui-line-divider) var(--value)); }
47
- .ui-range::-moz-range-track { height: 4px; border-radius: var(--ui-radius-pill); background: var(--ui-line-divider); }
48
- .ui-range::-moz-range-progress { height: 4px; border-radius: var(--ui-radius-pill); background: var(--ui-text-strong); }
49
- .ui-range::-webkit-slider-thumb { appearance: none; width: 16px; height: 16px; margin-top: -6px; border: 0; border-radius: 50%; background: linear-gradient(180deg, oklch(100% 0 none), oklch(96.5% .0011 265)); box-shadow: 0 0 0 1px var(--ui-line-strong), 0 1px 1px var(--ui-shade-1), 0 2px 4px -1px var(--ui-shade-2); }
50
- .ui-range::-moz-range-thumb { width: 16px; height: 16px; border: 0; border-radius: 50%; background: linear-gradient(180deg, oklch(100% 0 none), oklch(96.5% .0011 265)); box-shadow: 0 0 0 1px var(--ui-line-strong), 0 1px 1px var(--ui-shade-1), 0 2px 4px -1px var(--ui-shade-2); }
51
- .ui-range:focus-visible { outline: none; }
52
- .ui-range:focus-visible::-webkit-slider-thumb { box-shadow: 0 0 0 1px var(--ui-line-strong), 0 0 0 2px var(--ui-surface-stage), 0 0 0 4px var(--ui-focus); }
53
- .ui-range:focus-visible::-moz-range-thumb { box-shadow: 0 0 0 1px var(--ui-line-strong), 0 0 0 2px var(--ui-surface-stage), 0 0 0 4px var(--ui-focus); }
54
-
55
- /* Check and switch */
56
- .ui-check { display: inline-flex; align-items: center; gap: var(--ui-space-xs); color: var(--ui-text-strong); font-size: var(--ui-text-small); cursor: pointer; }
57
- .ui-check > input:not(.ui-switch) { appearance: none; display: grid; place-items: center; flex: none; width: 1.125rem; height: 1.125rem; margin: 0; border-radius: var(--ui-radius-sm); background: var(--ui-surface-well); box-shadow: var(--ui-elevation-sink); cursor: pointer; transition: background-color var(--ui-duration-quick), box-shadow var(--ui-duration-quick); }
58
- /* An empty box is a small target on a stage of nearly its own tone: a firmer ring keeps it visible in both schemes. */
59
- .ui-check > input:not(.ui-switch):not(:checked) { box-shadow: var(--ui-elevation-sink), inset 0 0 0 1px var(--ui-line-divider); }
60
- .ui-check > input:not(.ui-switch)::after { content: ""; width: 10px; height: 10px; opacity: 0; background: var(--ui-text-inverse); mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10'%3E%3Cpath d='M2 5.2 4.1 7.3 8 2.8' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; }
61
- .ui-check > input:not(.ui-switch):checked { background: var(--ui-surface-ink); box-shadow: inset 0 1px 0 light-dark(oklch(100% 0 none / .16), oklch(100% 0 none)), 0 0 0 1px light-dark(oklch(14% .003 265), oklch(0% 0 none / .5)); }
62
- .ui-check > input:not(.ui-switch):checked::after { opacity: 1; }
63
- .ui-check > input[type="radio"] { border-radius: 50%; }
64
- .ui-check > input[type="radio"]::after { width: 6px; height: 6px; border-radius: 50%; mask: none; }
65
- .ui-check > input:focus-visible { @apply --ui-focus-ring; outline-offset: 2px; }
66
- .ui-switch { position: relative; appearance: none; flex: none; width: 2.25rem; height: 1.375rem; margin: 0; border-radius: var(--ui-radius-pill); background: var(--ui-surface-well); box-shadow: var(--ui-elevation-sink); cursor: pointer; transition: background-color var(--ui-duration-base) var(--ui-ease); }
67
- .ui-switch::before { content: ""; position: absolute; top: 3px; left: 3px; width: 1rem; height: 1rem; border-radius: 50%; background: linear-gradient(180deg, oklch(100% 0 none), oklch(96.5% .0011 265)); box-shadow: 0 0 0 1px var(--ui-line-contour), 0 1px 1px var(--ui-shade-1), 0 2px 3px -1px var(--ui-shade-2); transition: translate var(--ui-duration-base) var(--ui-ease); }
68
- .ui-switch:checked { background: var(--ui-surface-ink); box-shadow: inset 0 1px 2px oklch(0% 0 none / .3); }
69
- .ui-switch:checked::before { translate: .875rem 0; background: light-dark(linear-gradient(180deg, oklch(100% 0 none), oklch(96.5% .0011 265)), linear-gradient(180deg, oklch(26% .0024 265), oklch(20% .002 265))); }
70
- .ui-switch:focus-visible { @apply --ui-focus-ring; outline-offset: 2px; }
71
-
72
- /* Copy: an honest result next to the action */
73
- .ui-copy { display: inline-flex; align-items: center; gap: var(--ui-space-xs); }
74
- .ui-copy-status { color: var(--ui-text-muted); font: var(--ui-weight-regular) .75rem/1 var(--font-family-mono); }
75
- .ui-copy-status[data-result="success"] { color: var(--ui-status-success); }
76
- .ui-copy-status[data-result="error"] { color: var(--ui-status-danger); }
77
-
78
- /* Keyboard key */
79
- .ui-kbd { display: inline-grid; place-items: center; min-width: 1.375rem; height: 1.375rem; padding: 0 .3125rem; border-radius: var(--ui-radius-xs); background: transparent; color: var(--ui-text-muted); box-shadow: inset 0 0 0 1px var(--ui-line-contour); font: var(--ui-weight-regular) .6875rem/1 var(--font-family-mono); }
80
-
81
- @media (pointer: coarse) {
82
- .ui-button, .ui-input, .ui-select { min-height: 2.75rem; }
83
- .ui-segmented > button { min-height: 2.5rem; }
84
- }
85
-
86
- /* Tooltip: a small ink chip; names icon-only controls */
87
- .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; }
88
- .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); }
89
- .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; }
90
-
91
- /* Menu: a floating sheet of choices (version, language, appearance) */
92
- .ui-menu { display: grid; gap: 1px; min-width: 12rem; margin: 0; padding: var(--ui-inset); border-radius: var(--ui-radius-lg); background: var(--ui-surface-float); box-shadow: var(--ui-elevation-rise-3); list-style: none; }
93
- .ui-menu-label { padding: .375rem .625rem .25rem; color: var(--ui-text-muted); @apply --ui-label-type; }
94
- .ui-menu-item { appearance: none; display: flex; align-items: center; gap: var(--ui-space-xs); width: 100%; min-height: 2rem; padding: 0 .625rem; border: 0; border-radius: var(--ui-radius-sm); background: transparent; color: var(--ui-text-body); font: var(--ui-weight-regular) var(--ui-text-small)/1 var(--font-family-sans); text-align: start; text-decoration: none; cursor: pointer; }
95
- .ui-menu-item > svg { flex: none; width: 15px; height: 15px; color: var(--ui-text-muted); }
96
- .ui-menu-item > small { margin-left: auto; color: var(--ui-text-muted); font: var(--ui-weight-regular) .6875rem/1 var(--font-family-mono); }
97
- .ui-menu-item:is(:hover, [data-highlighted]) { color: var(--ui-text-strong); background: light-dark(oklch(22% .002 265 / .05), oklch(100% 0 none / .06)); }
98
- .ui-menu-item[aria-checked="true"] { color: var(--ui-text-strong); font-weight: var(--ui-weight-medium); }
99
- .ui-menu-item[aria-checked="true"]::after { content: ""; width: 14px; height: 14px; margin-left: auto; background: currentColor; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='m3.5 8.5 3 3 6-7' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; }
100
- .ui-menu-item:focus-visible { @apply --ui-focus-ring; outline-offset: -2px; }
101
- .ui-menu-separator { height: 1px; margin: var(--ui-space-3xs) .375rem; background: var(--ui-line-hair); }
102
-
103
- /* Result feedback on an icon action: the glyph swaps, the label says what happened */
104
- .ui-button[data-result] > svg:first-of-type { display: none; }
105
- .ui-button:not([data-result]) > .ui-result-icon { display: none; }
106
- .ui-button[data-result="success"] { color: var(--ui-status-success); }
107
- .ui-button[data-result="error"] { color: var(--ui-status-danger); }
108
- .ui-button[data-result="error"] > svg:first-of-type { display: block; }
109
- .ui-button[data-result="error"] > .ui-result-icon { display: none; }
110
- }
3
+ @import './segmented.css';
4
+ @import './fields.css';
5
+ @import './range.css';
6
+ @import './checks.css';
7
+ @import './copy.css';
8
+ @import './kbd.css';
9
+ @import './button-feedback.css';
10
+ @import './tooltip.css';
11
+ @import './menu.css';
@@ -0,0 +1,32 @@
1
+ /* copy: owned component styles; shared definitions come from the foundation. */
2
+ @layer components {
3
+ .ui-copy { display: inline-flex; align-items: center; gap: var(--ui-space-xs); }
4
+ .ui-copy-status { color: var(--ui-text-muted); font: var(--ui-weight-regular) .75rem/1 var(--font-family-mono); }
5
+ .ui-copy-status[data-result="success"] { color: var(--ui-status-success); }
6
+ .ui-copy-status[data-result="error"] { color: var(--ui-status-danger); }
7
+ }
8
+
9
+
10
+ /*
11
+ * Code panels (`ui-code`, styles/system/code.css) as the site renders them: Shiki lines are `ui-code-line` parts, the
12
+ * copy action sits in the bar or, without one, in the corner, and tab panels all show on paper and without scripts.
13
+ */
14
+ @layer components {
15
+ /* The file's name keeps its width; a long result wraps in the room left beside the copy button. */
16
+ /* 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. */
17
+ /* A shell command is read whole: it wraps under a hanging indent instead of hiding its flags behind the copy button. */
18
+ /* Flags wrap whole: a token never breaks at its own hyphen, so `--yes` cannot split into `-` and `-yes`. */
19
+ /* Plain text, such as a prompt for an agent, is prose set in mono: it wraps at the panel like prose. */
20
+ .ui-copy-status:empty { display: none; }
21
+
22
+ /* A Generated CSS disclosure right after its source closes the same panel: one frame, the output under a hairline,
23
+ as in a demo tray. Alone (after a table or a paragraph) it stays a quiet disclosure. */
24
+ .ui-copy > .ui-copy-status { min-width: 0; max-width: 16rem; text-align: end; line-height: 1.3; }
25
+
26
+ /* @WARN and @ERROR marks: a wavy underline in the status tone instead of a wash. */
27
+ /* [!code focus] blurs the other lines until the pointer reaches the code. */
28
+ @media (scripting: none), print {
29
+ .ui-copy { display: none; }
30
+ }
31
+
32
+ }
@@ -1,134 +1,10 @@
1
- /* Data and documents: tables own their frame, numbers align, sources stay in view. */
2
- @layer components {
3
- /* The contour is a border: an inset shadow would sit under the sticky header cells. */
4
- .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; }
5
- .ui-table:focus-visible { @apply --ui-focus-ring; outline-offset: 2px; }
6
- .ui-table table { width: 100%; border-collapse: separate; border-spacing: 0; font-size: var(--ui-text-small); line-height: 1.5; }
7
- .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); }
8
- .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); }
9
- .ui-table tr:first-child > :is(td, th) { border-top: 0; }
10
- .ui-table tbody tr { transition: background-color var(--ui-duration-quick); }
11
- .ui-table tbody tr:hover { background: light-dark(oklch(22% .002 265 / .022), oklch(100% 0 none / .025)); }
12
- .ui-table tbody tr > :first-child { color: var(--ui-text-strong); }
13
- .ui-table :is(td, th)[data-align="end"] { text-align: end; font-variant-numeric: tabular-nums; white-space: nowrap; }
14
- /* In a cell code is a fill only: several hairline chips to a cell read as a grid inside the grid. A long value may wrap
15
- when the table runs out of room, so the prose column beside it keeps a readable measure. */
16
- /* A code name in a column head reads as part of the caption: the head's ink and size in mono, without a chip. */
17
- .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; }
18
- .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; }
19
- /* The row's key reads whole: the first column's names break only where the text allows (a space, a slash marked
20
- with <wbr>), never inside a name. */
21
- .ui-table :is(td:first-child, tbody th) code { white-space: normal; overflow-wrap: normal; }
22
- .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); }
23
- .ui-table[data-density="compact"] :is(th, td) { padding-block: .4375rem; }
24
- /* Lookup: the key column fits its longest key; values wrap at their spaces */
25
- .ui-table[data-variant="lookup"] tbody th { width: 1%; white-space: nowrap; }
26
- .ui-table[data-variant="lookup"] td code { white-space: normal; line-height: 1.5; }
27
- .ui-table :is(td, tbody th) ul { display: flex; flex-wrap: wrap; gap: 6px; margin: 0; padding: 0; list-style: none; }
28
- .ui-table :is(td, tbody th) .ui-disclosure > summary { min-height: 2.25rem; }
29
- .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); }
30
-
31
- /* Metrics: aligned values with their caveats */
32
- .ui-metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 10rem), 1fr)); gap: var(--ui-inset); }
33
- .ui-metric { display: grid; align-content: start; min-width: 0; gap: 6px; overflow-wrap: anywhere; padding: var(--ui-space-md); border-radius: var(--ui-radius-lg); @apply --ui-sheet-face; box-shadow: var(--ui-elevation-rise-1); }
34
- .ui-metric > small { color: var(--ui-text-muted); @apply --ui-label-type; }
35
- .ui-metric > b { color: var(--ui-text-strong); font-size: 1.625rem; font-weight: var(--ui-weight-heading); letter-spacing: -.03em; line-height: 1.1; font-variant-numeric: tabular-nums; }
36
- .ui-metric > b > span { color: var(--ui-text-muted); font-size: .875rem; font-weight: var(--ui-weight-medium); letter-spacing: 0; }
37
- .ui-metric > p { margin: 0; color: var(--ui-text-muted); font-size: .75rem; line-height: 1.5; }
38
- .ui-bar { height: 6px; border-radius: var(--ui-radius-pill); background: var(--ui-surface-well); box-shadow: var(--ui-elevation-sink); overflow: hidden; }
39
- .ui-bar > i { display: block; height: 100%; border-radius: inherit; background: var(--ui-text-strong); }
40
- .ui-bar > i[data-tone="muted"] { background: var(--ui-line-mark); }
41
- /* Series tones appear only where a legend names them */
42
- .ui-bar > i[data-tone="blue"] { background: var(--ui-tone-blue); }
43
- .ui-bar > i[data-tone="violet"] { background: var(--ui-tone-violet); }
44
- .ui-bar > i[data-tone="amber"] { background: var(--ui-tone-amber); }
45
- .ui-bar > i[data-tone="green"] { background: var(--ui-tone-green); }
46
- .ui-bar > i[data-tone="red"] { background: var(--ui-tone-red); }
47
- .ui-bar > i[data-tone="neutral"] { background: var(--ui-tone-neutral); }
48
- .ui-bar[data-variant="stacked"] { display: flex; gap: 1px; }
49
- .ui-bar[data-variant="stacked"] > i { flex: none; border-radius: 0; }
50
- .ui-bar[data-variant="stacked"] > i:first-child { border-start-start-radius: inherit; border-end-start-radius: inherit; }
51
- .ui-bar[data-variant="stacked"] > i:last-child { border-start-end-radius: inherit; border-end-end-radius: inherit; }
52
-
53
- /* Evidence footer: the source and its date, always beside the claim */
54
- .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); }
55
- .ui-source a { color: var(--ui-text-body); text-decoration: underline; text-decoration-color: var(--ui-line-mark); text-underline-offset: .2em; }
56
-
57
- /* Parameters / contracts: a definition list that reads like a table */
58
- .ui-params { display: grid; margin: 0; border-radius: var(--ui-radius-xl); background: var(--ui-surface-sheet); box-shadow: inset 0 0 0 1px var(--ui-line-contour); }
59
- .ui-params > div { display: grid; grid-template-columns: minmax(8rem, 13rem) minmax(0, 1fr); gap: var(--ui-space-xs) var(--ui-space-lg); padding: var(--ui-space-sm) var(--ui-space-md); border-top: 1px solid var(--ui-line-hair); }
60
- .ui-params > div:first-child { border-top: 0; }
61
- .ui-params dt { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px; min-width: 0; overflow-wrap: anywhere; color: var(--ui-text-strong); font: var(--ui-weight-medium) .8125rem/1.5 var(--font-family-mono); }
62
- .ui-params dt small { color: var(--ui-text-muted); font-weight: var(--ui-weight-regular); }
63
- .ui-params dd { margin: 0; color: var(--ui-text-body); font-size: var(--ui-text-small); line-height: 1.6; overflow-wrap: anywhere; }
64
- .ui-params dd > * { margin: 0; }
65
- .ui-params dd > * + * { margin-top: var(--ui-space-xs); }
66
- .ui-params dd small { color: var(--ui-text-muted); font-size: .75rem; }
67
- /* A link in a description reads as the prose's own links do. */
68
- .ui-params dd a:not([class]) { color: var(--ui-text-strong); text-decoration: underline 1px var(--ui-line-strong); text-underline-offset: .24em; }
69
- .ui-params dd a:not([class]):hover { text-decoration-color: currentColor; }
70
- .ui-params :is(dt, dd) :is(h3, h4) { margin: 0; font: inherit; color: inherit; letter-spacing: inherit; }
71
- .ui-params dd code { padding: .125em .375em; border-radius: var(--ui-radius-xs); background: var(--ui-surface-chip); color: var(--ui-text-strong); box-shadow: inset 0 0 0 1px var(--ui-line-hair); font: var(--ui-weight-regular) .8125rem/1 var(--font-family-mono); }
72
- @media (width < 35rem) { .ui-params > div { grid-template-columns: 1fr; } }
73
-
74
- /* Steps: numbered sequence on one hairline rail; code stays in the reading flow */
75
- .ui-steps { counter-reset: step; display: grid; gap: 0; margin: 0; padding: 0; list-style: none; }
76
- .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); }
77
- .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; }
78
- .ui-steps > li::after { content: ""; position: absolute; top: 2.25rem; bottom: .5rem; left: .875rem; width: 1px; background: var(--ui-line-divider); }
79
- .ui-steps > li:last-child { padding-bottom: 0; }
80
- .ui-steps > li:last-child::after { display: none; }
81
- .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; }
82
- .ui-steps > li > div > p { margin: 0 0 var(--ui-space-sm); }
83
-
84
- /* Index: grouped links with a useful start — free-standing hairline sheets, so a short last row leaves only canvas */
85
- .ui-index { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 14rem), 1fr)); gap: var(--ui-space-sm); }
86
- .ui-index > a { display: grid; align-content: start; gap: var(--ui-space-2xs); padding: var(--ui-space-md) var(--ui-space-md) 1.125rem; border-radius: var(--ui-radius-xl); background: var(--ui-surface-sheet); color: var(--ui-text-body); box-shadow: inset 0 0 0 1px var(--ui-line-contour), 0 1px 0 var(--ui-lip); text-decoration: none; transition: box-shadow var(--ui-duration-quick) var(--ui-ease), translate var(--ui-duration-quick) var(--ui-ease); }
87
- .ui-index > a:hover { translate: 0 -.5px; box-shadow: var(--ui-elevation-rise-1h); }
88
- .ui-index > a:focus-visible { @apply --ui-focus-ring; outline-offset: 2px; }
89
- .ui-index > a > svg { width: 18px; height: 18px; margin-bottom: var(--ui-space-2xs); color: var(--ui-text-strong); stroke-width: 1.5; }
90
- .ui-index > a > b { color: var(--ui-text-strong); font-size: .9375rem; font-weight: var(--ui-weight-medium); line-height: 1.4; letter-spacing: -.006em; }
91
- .ui-index > a > span { font-size: .8125rem; line-height: 1.6; color: var(--ui-text-muted); }
92
- .ui-index > a > b code { font: var(--ui-weight-medium) .875rem/1.45 var(--font-family-mono); letter-spacing: 0; overflow-wrap: anywhere; }
93
- .ui-index[data-density="compact"] { grid-template-columns: repeat(auto-fill, minmax(min(100%, 12rem), 1fr)); gap: var(--ui-space-xs); }
94
- .ui-index[data-density="compact"] > a { gap: 2px; padding: var(--ui-space-sm) var(--ui-space-md); }
95
-
96
- /* Logo directory: compact, open rows; the surrounding group owns the section rule. */
97
- .ui-logos { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 9rem), 1fr)); gap: var(--ui-space-2xs) var(--ui-space-md); }
98
- .ui-logos > a { display: flex; align-items: center; gap: var(--ui-space-sm); min-width: 0; min-height: 2.75rem; padding: .5rem var(--ui-space-xs); border-radius: var(--ui-radius-sm); color: var(--ui-text-body); font-size: .8125rem; line-height: 1.5; text-decoration: none; transition: background var(--ui-duration-quick) var(--ui-ease), color var(--ui-duration-quick) var(--ui-ease); }
99
- .ui-logos > a:hover { color: var(--ui-text-strong); background: var(--ui-surface-chip); }
100
- .ui-logos > a:focus-visible { @apply --ui-focus-ring; outline-offset: 2px; }
101
- .ui-logos > a > svg { flex: none; width: 1.25rem; height: 1.25rem; }
102
- .ui-logos > a > span { min-width: 0; overflow-wrap: anywhere; }
103
-
104
- /* Chart frame: units, series and sample context together. Captions and readings are small sans with tabular figures. */
105
- .ui-chart { display: grid; gap: var(--ui-space-md); padding: var(--ui-space-lg); border-radius: var(--ui-radius-xl); @apply --ui-sheet-face; box-shadow: var(--ui-elevation-rise-1); }
106
- .ui-chart-head { display: flex; flex-wrap: wrap; justify-content: space-between; gap: var(--ui-space-xs) var(--ui-space-md); }
107
- .ui-chart-head b { color: var(--ui-text-strong); font-size: var(--ui-text-small); font-weight: var(--ui-weight-strong); }
108
- .ui-chart-head small { display: block; color: var(--ui-text-muted); font: var(--ui-weight-regular) var(--ui-text-caption)/1.5 var(--font-family-sans); font-variant-numeric: tabular-nums; }
109
- .ui-chart-row { display: grid; grid-template-columns: minmax(6.5rem, 12rem) minmax(0, 1fr) minmax(4.5rem, auto); align-items: center; gap: var(--ui-space-xs) var(--ui-space-sm); font-size: .8125rem; }
110
- .ui-chart-row > span:first-child { display: flex; flex-wrap: wrap; align-items: center; gap: 2px var(--ui-space-xs); min-width: 0; color: var(--ui-text-strong); overflow-wrap: anywhere; }
111
- .ui-chart-row > span:first-child > small { flex-basis: 100%; color: var(--ui-text-muted); font: var(--ui-weight-regular) .75rem/1.4 var(--font-family-sans); font-variant-numeric: tabular-nums; }
112
- .ui-chart-row > output { color: var(--ui-text-body); font: var(--ui-weight-regular) .8125rem/1 var(--font-family-sans); text-align: end; white-space: nowrap; font-variant-numeric: tabular-nums; }
113
- /* A stacked row names its segments under the bar */
114
- .ui-chart-row > .ui-legend { grid-column: 2 / -1; gap: 2px var(--ui-space-md); font-size: .75rem; }
115
- .ui-chart-row > .ui-legend b { color: var(--ui-text-strong); font-weight: var(--ui-weight-medium); }
116
- @media (width < 35rem) {
117
- .ui-chart-row { grid-template-columns: minmax(0, 1fr) auto; }
118
- .ui-chart-row > .ui-bar { grid-column: 1 / -1; grid-row: 2; }
119
- .ui-chart-row > .ui-legend { grid-column: 1 / -1; }
120
- }
121
-
122
- /* Waterfall: resource order on one time axis */
123
- .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); }
124
- .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); }
125
- .ui-waterfall-axis > div { display: flex; justify-content: space-between; }
126
- .ui-waterfall-row { display: grid; grid-template-columns: 7.5rem 1fr; align-items: center; min-height: 1.75rem; font-size: .78125rem; }
127
- .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; }
128
- .ui-waterfall-track { position: relative; height: 100%; background: repeating-linear-gradient(90deg, var(--ui-line-hair) 0 1px, transparent 1px 25%); }
129
- .ui-waterfall-track > i { position: absolute; top: 50%; height: 8px; translate: 0 -50%; border-radius: 3px; background: var(--ui-text-strong); }
130
- @media (forced-colors: active) { .ui-waterfall-track > i { box-sizing: border-box; border: 1px solid CanvasText; } }
131
- .ui-waterfall-track > i[data-tone="muted"] { background: var(--ui-line-mark); }
132
- .ui-waterfall-track > i[data-tone="blocking"] { background: var(--ui-tone-amber); }
133
- .ui-waterfall-mark { position: absolute; top: 2px; bottom: 2px; width: 2px; margin-left: -1px; border-radius: 1px; background: var(--ui-status-danger); }
134
- }
1
+ /* Explicit full data collection. Components import their own leaf stylesheet. */
2
+ @import './table.css';
3
+ @import './metrics.css';
4
+ @import './source.css';
5
+ @import './parameters.css';
6
+ @import './steps.css';
7
+ @import './index.css';
8
+ @import './logos.css';
9
+ @import './chart.css';
10
+ @import './waterfall.css';
@@ -0,0 +1,16 @@
1
+ /* dialog: owned component styles; shared definitions come from the foundation. */
2
+ @layer components {
3
+ .ui-dialog { width: min(40rem, calc(100vw - 2rem)); max-height: min(36rem, calc(100dvh - 4rem)); padding: 0; overflow: hidden; border: 0; border-radius: var(--ui-radius-2xl); background: var(--ui-surface-float); color: var(--ui-text-body); box-shadow: var(--ui-elevation-overlay); }
4
+ .ui-dialog::backdrop { background: var(--ui-surface-scrim); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); }
5
+ .ui-dialog-search { display: flex; flex-wrap: wrap; align-items: center; gap: var(--ui-space-sm); min-height: 3.5rem; padding: 0 var(--ui-space-md); box-shadow: inset 0 -1px 0 var(--ui-line-hair); }
6
+ .ui-dialog-search input { flex: 1 1 8rem; min-width: 0; border: 0; background: transparent; color: var(--ui-text-strong); font: var(--ui-weight-regular) 1rem/1 var(--font-family-sans); }
7
+ .ui-dialog-search input:focus { outline: none; }
8
+ @media (forced-colors: active) { .ui-dialog-search input:focus-visible { outline: 2px solid Highlight; outline-offset: 2px; } }
9
+ .ui-results { display: grid; gap: 2px; margin: 0; padding: var(--ui-inset); list-style: none; }
10
+ .ui-results > li > a { display: grid; gap: 2px; padding: .625rem .75rem; border-radius: var(--ui-radius-md); color: var(--ui-text-body); text-decoration: none; }
11
+ .ui-results > li > a small { color: var(--ui-text-muted); font: var(--ui-weight-regular) .75rem/1.4 var(--font-family-sans); }
12
+ .ui-results > li > a b { color: var(--ui-text-strong); font-weight: var(--ui-weight-medium); font-size: var(--ui-text-small); }
13
+ .ui-results > li > a[aria-selected="true"], .ui-results > li > a:hover { background: var(--ui-surface-chip); box-shadow: inset 0 0 0 1px var(--ui-line-hair); }
14
+ .ui-dialog-foot { display: flex; flex-wrap: wrap; gap: var(--ui-space-md); padding: var(--ui-space-sm) var(--ui-space-md); box-shadow: inset 0 1px 0 var(--ui-line-hair); color: var(--ui-text-muted); font-size: .71875rem; }
15
+ .ui-dialog-foot span { display: inline-flex; align-items: center; gap: 6px; }
16
+ }
@@ -0,0 +1,19 @@
1
+ /* disclosure: owned component styles; shared definitions come from the foundation. */
2
+ @layer components {
3
+ .ui-disclosure { min-width: 0; }
4
+ .ui-disclosure > summary { display: flex; flex-wrap: wrap; align-items: center; gap: var(--ui-space-xs); min-height: 2.75rem; color: var(--ui-text-body); font: var(--ui-weight-medium) .8125rem/1.3 var(--font-family-sans); list-style: none; cursor: pointer; }
5
+ .ui-disclosure > summary::-webkit-details-marker { display: none; }
6
+ .ui-disclosure > summary::before { content: ""; flex: none; width: 14px; height: 14px; background: currentColor; opacity: .6; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='m6 3.5 4.5 4.5L6 12.5' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; transition: rotate var(--ui-duration-base) var(--ui-ease); }
7
+ .ui-disclosure[open] > summary::before { rotate: 90deg; }
8
+ .ui-disclosure > summary:hover { color: var(--ui-text-strong); }
9
+ .ui-disclosure > summary:focus-visible { @apply --ui-focus-ring; outline-offset: 2px; border-radius: var(--ui-radius-md); }
10
+ .ui-disclosure > summary .ui-disclosure-meta { margin-left: auto; color: var(--ui-text-muted); font: var(--ui-weight-regular) .75rem/1 var(--font-family-sans); }
11
+ .ui-disclosure[data-variant="rule"] { border-block: 1px solid var(--ui-line-hair); }
12
+ .ui-disclosure[data-variant="rule"] + .ui-disclosure[data-variant="rule"] { border-top: 0; }
13
+ .ui-disclosure-body { padding-bottom: var(--ui-space-md); }
14
+ /* Preserve the disclosure's bottom inset when its body is also a tray caption,
15
+ independent of which component stylesheet is shared by the build. */
16
+ .ui-disclosure-body.ui-tray-caption { padding-bottom: var(--ui-space-md); }
17
+ .ui-disclosure > .ui-disclosure-body > :first-child { margin-top: 0; }
18
+ .ui-disclosure > .ui-disclosure-body > :last-child { margin-bottom: 0; }
19
+ }
@@ -0,0 +1,11 @@
1
+ /* expand: owned component styles; shared definitions come from the foundation. */
2
+ @layer components {
3
+ .ui-expand { position: relative; min-width: 0; }
4
+ .ui-expand[data-expanded="false"] > :first-child { max-height: 30rem; overflow: hidden; }
5
+ .ui-expand-control { display: flex; justify-content: center; padding-top: var(--ui-space-sm); }
6
+ .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%); }
7
+ .ui-expand[data-expanded="true"] > .ui-expand-control { position: sticky; bottom: var(--ui-space-sm); pointer-events: none; }
8
+ .ui-expand-control > .ui-button { pointer-events: auto; }
9
+ .ui-expand-control > .ui-button > svg { transition: rotate var(--ui-duration-quick) var(--ui-ease); }
10
+ .ui-expand[data-expanded="true"] > .ui-expand-control > .ui-button > svg { rotate: 180deg; }
11
+ }
@@ -0,0 +1,25 @@
1
+ /* fields: owned component styles; shared definitions come from the foundation. */
2
+ @layer components {
3
+ .ui-field { display: grid; gap: var(--ui-space-xs); color: var(--ui-text-strong); font-size: var(--ui-text-small); font-weight: var(--ui-weight-medium); }
4
+ .ui-field-hint { color: var(--ui-text-muted); font-size: .75rem; font-weight: var(--ui-weight-regular); }
5
+ .ui-input, .ui-select {
6
+ width: 100%; min-height: 2.5rem; padding: .5625rem .75rem; border: 0; border-radius: var(--ui-radius-md);
7
+ background: var(--ui-surface-well); color: var(--ui-text-strong); box-shadow: var(--ui-elevation-sink);
8
+ font: var(--ui-weight-regular) var(--ui-text-small)/1.45 var(--font-family-sans); resize: vertical;
9
+ transition: box-shadow var(--ui-duration-quick), background-color var(--ui-duration-quick);
10
+ }
11
+ .ui-input::placeholder { color: var(--ui-text-muted); }
12
+ .ui-input:hover:not(:focus, :disabled), .ui-select:hover:not(:focus, :disabled) { background: var(--ui-surface-well-hover); }
13
+ .ui-input:focus, .ui-select:focus-visible { outline: none; background: var(--ui-surface-sheet); box-shadow: inset 0 0 0 1px var(--ui-line-mark), 0 0 0 3px light-dark(oklch(22% .002 265 / .1), oklch(100% 0 none / .12)); }
14
+ .ui-input:disabled, .ui-select:disabled { color: var(--ui-text-disabled); cursor: not-allowed; }
15
+ .ui-select { appearance: none; padding-right: 2rem; cursor: pointer;
16
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23888' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m4.5 6.5 3.5 3.5 3.5-3.5'/%3E%3C/svg%3E");
17
+ background-repeat: no-repeat; background-position: right .625rem center; background-size: 14px; }
18
+ .ui-select[data-variant="raised"] { background-color: transparent; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23888' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m4.5 6.5 3.5 3.5 3.5-3.5'/%3E%3C/svg%3E"), linear-gradient(180deg, var(--ui-surface-sheet), var(--ui-surface-sheet-lo)); background-position: right .625rem center, 0 0; background-size: 14px, auto; box-shadow: var(--ui-elevation-rise-1); font-weight: var(--ui-weight-medium); }
19
+ .ui-select[data-variant="overlay"] { position: absolute; inset: 0; width: 100%; height: 100%; min-height: 0; padding: 0; opacity: 0; cursor: pointer; }
20
+ :has(> .ui-select[data-variant="overlay"]:focus-visible) { @apply --ui-focus-ring; outline-offset: 2px; }
21
+
22
+ @media (pointer: coarse) {
23
+ .ui-input, .ui-select { min-height: 2.75rem; }
24
+ }
25
+ }