@master/internal-site 0.2.8 → 0.2.10
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.
- package/dist/astro.mjs +2 -1
- package/package.json +2 -2
- package/src/benchmarks/BenchmarkBars.astro +2 -1
- package/src/benchmarks/BenchmarkChart.astro +1 -1
- package/src/benchmarks/BenchmarkChartGroup.astro +2 -1
- package/src/benchmarks/BenchmarkDataTable.astro +3 -3
- package/src/benchmarks/BenchmarkFigure.astro +1 -1
- package/src/benchmarks/BenchmarkMetrics.astro +2 -1
- package/src/benchmarks/BenchmarkSampleSummary.astro +2 -1
- package/src/benchmarks/BenchmarkStackedBars.astro +2 -1
- package/src/demo/Demo.svelte +2 -2
- package/src/demo/DemoAsset.astro +1 -1
- package/src/demo/DemoCatalog.astro +3 -3
- package/src/demo/DemoComparison.svelte +2 -2
- package/src/demo/DemoContainer.svelte +1 -1
- package/src/demo/DemoCopyButton.svelte +2 -2
- package/src/demo/DemoFeatureSupport.svelte +2 -2
- package/src/demo/DemoGeneratedCSS.svelte +2 -2
- package/src/demo/DemoIndex.astro +1 -1
- package/src/demo/DemoMotion.svelte +1 -1
- package/src/demo/DemoViewport.svelte +5 -5
- package/src/demo/DemoWaterfall.astro +2 -1
- package/src/demo/foundations/FoundationDialog.astro +1 -1
- package/src/docs-shell/components/ArticleHeader.astro +2 -2
- package/src/docs-shell/components/Callout.astro +5 -4
- package/src/docs-shell/components/CodeCopyButton.astro +3 -3
- package/src/docs-shell/components/CodeTabBar.astro +7 -6
- package/src/docs-shell/components/CodeTabs.astro +4 -4
- package/src/docs-shell/components/CodeView.astro +2 -2
- package/src/docs-shell/components/DocHeader.svelte +5 -4
- package/src/docs-shell/components/DocMenuButton.svelte +1 -1
- package/src/docs-shell/components/DocumentAPIIndex.astro +4 -4
- package/src/docs-shell/components/DocumentChoices.astro +4 -4
- package/src/docs-shell/components/DocumentCodeExampleView.astro +5 -5
- package/src/docs-shell/components/DocumentCopyButton.svelte +2 -2
- package/src/docs-shell/components/DocumentDisclosure.astro +3 -3
- package/src/docs-shell/components/DocumentFileTree.astro +2 -1
- package/src/docs-shell/components/DocumentFlow.astro +2 -2
- package/src/docs-shell/components/DocumentIllustration.astro +4 -4
- package/src/docs-shell/components/DocumentKeyList.astro +3 -3
- package/src/docs-shell/components/DocumentOptionList.astro +2 -2
- package/src/docs-shell/components/DocumentParameters.astro +2 -2
- package/src/docs-shell/components/DocumentPrompt.astro +3 -3
- package/src/docs-shell/components/DocumentValueList.astro +3 -3
- package/src/docs-shell/components/DocumentationIndex.svelte +3 -3
- package/src/docs-shell/components/ExpandContent.svelte +2 -2
- package/src/docs-shell/components/ExplorerView.astro +3 -2
- package/src/docs-shell/components/GeneratedCSS.astro +3 -3
- package/src/docs-shell/components/InlineCode.astro +4 -3
- package/src/docs-shell/components/LanguageButton.svelte +1 -1
- package/src/docs-shell/components/NotFound.astro +1 -1
- package/src/docs-shell/components/PMAction.astro +1 -1
- package/src/docs-shell/components/PageContentDisclosure.astro +3 -3
- package/src/docs-shell/components/SearchButton.svelte +4 -5
- package/src/docs-shell/components/SearchDialogPanel.svelte +15 -14
- package/src/docs-shell/components/Tab.astro +2 -2
- package/src/docs-shell/components/Tabs.astro +2 -2
- package/src/docs-shell/remark/markdown-components.js +1 -1
- package/src/docs-shell/utils/documentation-search.ts +11 -1
- package/src/docs-shell/utils/highlight-code-core.ts +2 -2
- package/src/examples/components/ArticleTransitionScene.svelte +3 -3
- package/src/scripts/legacy-design-routes.ts +2 -1
- package/src/styles/blog-article.css +3 -1
- package/src/styles/demo.css +0 -3
- package/src/styles/docs-shell/documentation-search.css +4 -11
- package/src/styles/docs-shell/footer.css +2 -2
- package/src/styles/docs-shell/menu.css +1 -1
- package/src/styles/docs-shell/prose.css +0 -1
- package/src/styles/documentation-illustration.css +3 -3
- package/src/styles/documentation-index.css +0 -2
- package/src/styles/interface.css +0 -1
- package/src/styles/interface.ts +2 -1
- package/src/styles/site-contract.md +3 -3
- package/src/styles/system/browser.css +0 -1
- package/src/styles/system/buttons.ts +2 -0
- package/src/styles/system/callout.css +4 -12
- package/src/styles/system/callout.ts +4 -0
- package/src/styles/system/chart.css +1 -1
- package/src/styles/system/code-panel.css +23 -65
- package/src/styles/system/code-panel.ts +2 -0
- package/src/styles/system/code-tabs.css +4 -32
- package/src/styles/system/code-tabs.ts +2 -0
- package/src/styles/system/code-ui.ts +2 -0
- package/src/styles/system/copy.css +2 -24
- package/src/styles/system/dialog.css +10 -11
- package/src/styles/system/disclosure.css +3 -13
- package/src/styles/system/disclosure.ts +2 -0
- package/src/styles/system/header-core.css +8 -17
- package/src/styles/system/index.css +3 -7
- package/src/styles/system/index.ts +3 -0
- package/src/styles/system/inline-code.css +2 -2
- package/src/styles/system/inline-code.ts +2 -0
- package/src/styles/system/logos.css +1 -1
- package/src/styles/system/metrics.css +1 -1
- package/src/styles/system/parameters.css +2 -3
- package/src/styles/system/parameters.ts +4 -0
- package/src/styles/system/prompt.css +3 -5
- package/src/styles/system/reading.css +2 -4
- package/src/styles/system/search-trigger.css +2 -7
- package/src/styles/system/segmented.css +0 -6
- package/src/styles/system/sidebar.css +1 -1
- package/src/styles/system/stage.css +6 -12
- package/src/styles/system/stage.ts +2 -0
- package/src/styles/system/steps.css +1 -2
- package/src/styles/system/tabs.ts +1 -0
- package/src/styles/system/toc.css +3 -3
- package/src/styles/system/tray-code.css +2 -4
- package/src/styles/system/tray-layout.css +5 -5
- package/src/styles/system/tree.css +1 -1
- package/src/styles/system/waterfall.css +1 -1
- package/src/styles/docs-shell/code.css +0 -5
- package/src/styles/system/buttons.css +0 -1
- package/src/styles/system/code.css +0 -8
- package/src/styles/system/controls.css +0 -10
- package/src/styles/system/data.css +0 -10
- package/src/styles/system/sheet.css +0 -1
- package/src/styles/system/shell.css +0 -8
- package/src/styles/system/surfaces.css +0 -7
- package/src/styles/system/table.css +0 -3
- package/src/styles/system/tray.css +0 -2
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
.ui-mobile-menu-community > a { position: relative; display: inline-flex; align-items: center; justify-content: center; min-width: 2.75rem; min-height: 2.75rem; padding: .5rem .75rem; color: var(--ui-text-muted); text-decoration: none; transition: color var(--ui-duration-quick); }
|
|
27
27
|
.ui-mobile-menu-community > a > .ui-menu-external { position: absolute; top: calc(50% - .875rem); right: calc(50% - 1rem); width: .625rem; height: .625rem; pointer-events: none; }
|
|
28
28
|
.ui-mobile-menu-preferences { display: flex; flex-wrap: wrap; align-items: center; gap: .25rem .75rem; padding-top: 1rem; border-top: 1px solid var(--ui-line-hair); }
|
|
29
|
-
.ui-mobile-menu-preferences > .select { width: auto; max-width: 100%; min-height: 2.75rem; padding-left: 0; padding-right: 1.5rem; background-color: transparent; background-position: right .125rem center;
|
|
29
|
+
.ui-mobile-menu-preferences > .select { width: auto; max-width: 100%; min-height: 2.75rem; padding-left: 0; padding-right: 1.5rem; background-color: transparent; background-position: right .125rem center; box-shadow: none; color: var(--ui-text-muted); font-size: .8125rem; }
|
|
30
30
|
.ui-mobile-menu-preferences > .select:focus-visible { @apply --ui-focus-ring; outline-offset: 3px; }
|
|
31
31
|
@media (hover: hover) {
|
|
32
32
|
.ui-mobile-menu-link:hover, .ui-mobile-menu-community > a:hover { color: var(--ui-text-body); }
|
|
@@ -55,7 +55,6 @@
|
|
|
55
55
|
.ui-prose > :is(p, ul, ol) code[data-token],
|
|
56
56
|
.ui-prose > details:not([class]) > :is(p, ul, ol) code[data-token] { display: inline-block; max-width: 100%; line-height: 1.5; vertical-align: baseline; }
|
|
57
57
|
/* A run of inline code that wraps keeps its chip on both lines instead of an open cut. */
|
|
58
|
-
.ui-inline-code { -webkit-box-decoration-break: clone; box-decoration-break: clone; }
|
|
59
58
|
.ui-prose > :is(p, ul, ol) del { text-decoration-color: var(--ui-status-danger); }
|
|
60
59
|
.ui-prose > details:not([class]) { max-width: var(--measure); margin-block: var(--ui-space-xl); border-block: 1px solid var(--ui-line-hair); }
|
|
61
60
|
.ui-prose > details:not([class]) > summary { padding: var(--ui-space-sm) 0; color: var(--ui-text-strong); font-weight: var(--ui-weight-strong); font-size: var(--ui-text-small); cursor: pointer; }
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/* One accessible illustration: the bitmap for the current scheme fills the tray's 18px frame. */
|
|
2
2
|
@layer components {
|
|
3
|
-
.document-illustration { overflow: hidden;
|
|
3
|
+
.document-illustration { overflow: hidden; }
|
|
4
4
|
.document-illustration img { display: block; width: 100%; height: auto; margin: 0; }
|
|
5
5
|
.document-illustration img[data-scheme="dark"] { display: none; }
|
|
6
6
|
/* A quiet caption-level entry, independent of the demo's generated-code panel. */
|
|
7
|
-
.ui-tray > .ui-disclosure[data-variant="text-description"] { margin-top: 0; padding: 0;
|
|
7
|
+
.ui-tray > .ui-disclosure[data-variant="text-description"] { margin-top: 0; padding: 0; }
|
|
8
8
|
.ui-tray > .ui-disclosure[data-variant="text-description"] > summary { width: fit-content; max-width: calc(100% - 2 * var(--ui-space-md)); min-height: 2rem; margin-inline: var(--ui-space-md); padding: 0; gap: var(--ui-space-2xs); color: var(--ui-text-muted); font-size: var(--ui-text-label); font-weight: var(--ui-weight-regular); }
|
|
9
|
-
.ui-tray > .ui-disclosure[data-variant="text-description"] > summary::
|
|
9
|
+
.ui-tray > .ui-disclosure[data-variant="text-description"] > summary::after { width: 12px; height: 12px; }
|
|
10
10
|
.ui-tray > .ui-disclosure[data-variant="text-description"] > summary:hover { color: var(--ui-text-strong); }
|
|
11
11
|
.ui-tray > .ui-disclosure[data-variant="text-description"] > .ui-disclosure-body { margin-inline: 0; padding-top: var(--ui-space-xs); }
|
|
12
12
|
/* The text description reads at caption size inside the tray. */
|
|
@@ -27,8 +27,6 @@
|
|
|
27
27
|
.documentation-index-toolbar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0 var(--ui-space-md); margin-top: var(--ui-space-3xl); box-shadow: inset 0 -1px 0 var(--ui-line-divider); }
|
|
28
28
|
.documentation-index-toolbar > p { color: var(--ui-text-muted); @apply --ui-eyebrow-type; }
|
|
29
29
|
.documentation-index-toolbar > p > .documentation-index-count { letter-spacing: .02em; }
|
|
30
|
-
.documentation-index-toolbar > .ui-segmented,
|
|
31
|
-
.documentation-index-toolbar > .ui-segmented[data-variant="underline"] { box-shadow: none; }
|
|
32
30
|
|
|
33
31
|
/* Section: a ruled spread. Below 44rem the head sits over its entries. */
|
|
34
32
|
.documentation-index-section { display: grid; gap: var(--ui-space-lg); padding-block: var(--ui-space-xl) var(--ui-space-2xl); }
|
package/src/styles/interface.css
CHANGED
package/src/styles/interface.ts
CHANGED
|
@@ -6,7 +6,7 @@ Import the UI theme through foundation and component styles through their narrow
|
|
|
6
6
|
|
|
7
7
|
Keep header, sidebar, reading measure, contents rail, breakpoints and homepage composition stable. UI controls retain their public internal geometry. Site adapters retain link navigation semantics, overlay native preferences, table scrolling, preview isolation and code-copy orchestration. Never attach a second behavior controller to a node already owned by a site island.
|
|
8
8
|
|
|
9
|
-
Import `styles/
|
|
9
|
+
Import `styles/interface.ts` and the narrow `styles/system/*.ts` entries (table, tray, sheet, stage, code-panel, inline-code, code-tabs, disclosure, callout, index and parameters) from site components. These entries share canonical UI styles as module dependencies and add only their site composition CSS. Their local CSS files contain composition only; consumers must use the TS entry to load the corresponding canonical UI component. Retired full code/controls/surfaces/data/shell collections and duplicate table/tray/sheet CSS wrappers are removed after first-party migration. Bare examples import the styles of their actual components rather than the full controls or surfaces collections.
|
|
10
10
|
|
|
11
11
|
Foundation, interface, documents and component styles retain separate route boundaries. Every class needed after hydration must be visible to prerender. Build tools stay server-only. Request context and initial HTML must remain isolated and deterministic.
|
|
12
12
|
|
|
@@ -14,13 +14,13 @@ Foundation, interface, documents and component styles retain separate route boun
|
|
|
14
14
|
|
|
15
15
|
The shell follows the original documentation layout, refined:
|
|
16
16
|
|
|
17
|
-
- **Header** 60px, 32px gutters. Community and language actions share square 36px desktop / 44px compact targets, centred 18px Tabler icons at 1.5 stroke, and an 8px gap. Desktop search retains its 30px
|
|
17
|
+
- **Header** 60px, 32px gutters. Community and language actions share square 36px desktop / 44px compact targets, centred 18px Tabler icons at 1.5 stroke, and an 8px gap. Desktop search retains its 30px quiet UI pill, 16px glass and visible ⌘K; compact search uses the same 44px target and 18px icon as its neighbours; the homepage's wide header leaves it out. Section links are plain words (body ink, current one in strong ink at medium weight), no pill. The version is plain text with a chevron. Version chevrons retain their original muted 12px size; external-link indicators remain small raised 10px marks. Text links/version controls share the target height with content-sized widths. Action hover, focus, pressed and disabled states come from the UI button contract. The separator has 4px margins plus the 8px control gap on each side.
|
|
18
18
|
- **Sidebar** 276px with a 32px start gutter aligned with the logo; it starts with its first group, whose caption stands level with the page kicker and the contents caption (y = header + 56px). Group captions are muted eyebrows; entries are 14px muted on one hairline guide, 32px rows; the current entry inks a short 2px bar on the guide and takes medium weight.
|
|
19
19
|
- **Contents rail** (252px) is a ruler: h2 entries have 24px ticks and h3 entries have 12px ticks with their right ends aligned before the text; titles share a second edge without indentation. The current entry takes strong ink and medium weight without changing its tick length. 13px entries in 34px rows (44px touch targets); "On this page" is a muted eyebrow on the title edge, level with the page kicker. Long lists fold inactive subsections without adding icons; following the section opens them.
|
|
20
20
|
- **Page head** a muted eyebrow kicker, a regular-weight title (fluid 30–38px), an 18px lead (a second lead line, such as a layout's subtitle, at reading size), then 48px of space — no rule — before the reading starts.
|
|
21
21
|
- **Page tabs** between sibling documents (`Tabs`, `ui-segmented[data-variant="underline"]`) are words on one hairline, the current one underlined in ink — the original's tabs, not a raised segmented thumb.
|
|
22
22
|
- **Compact menu** below 64rem is a full-height modal: Tabler’s two-line menu at 18px / 1.5 stroke becomes a small close glyph in a 44px target, brand stays centred, search sits opposite. Primary links use fluid 36–56px medium-weight type and generous space; chapters belong to the section indexes. Community icons and native preferences sit beneath the navigation, at the bottom when space permits. External community icons carry the same raised 10px marker as header actions, anchored 11px right / 9px above the icon centre. The surface enters over 320ms, links follow at 40ms intervals, and closing takes 180ms; reduced motion removes transitions.
|
|
23
|
-
- **Search trigger** (`ui-search-trigger`, on the 404) is a quiet
|
|
23
|
+
- **Search trigger** (`ui-search-trigger`, on the 404) is a full-width quiet UI button with a key hint; the search dialog uses UI command, listbox, and keycap parts. The desktop dialog footer teaches “Search anytime” with ⌘ + K keycaps on Apple devices or Ctrl + K elsewhere.
|
|
24
24
|
- **Pager** is one hairline over two links, 80px below the article: an eyebrow (Previous / Next) over a 16px title with a muted arrow; ink on hover, no boxes.
|
|
25
25
|
- **Steps** hang on one hairline rail from flat 28px numbered rings (canvas face, strong contour, sans tabular figures) and take the wide column. A step title is 16px medium; its text is 14/1.8. A row step puts its text on two fifths and its code on three once the list is 46rem wide (narrower, the code stacks under its text). A preview after the steps hangs like any surface and the rail runs into it.
|
|
26
26
|
- **Footer** in the documentation takes the article's wide column from the text's edge; elsewhere it is 72rem. Groups keep 11rem columns from the start (`auto-fill`), so a wide footer leaves the rest to the canvas. Link groups (Docs, Resources, Community, Legal — the license and the trademark policy) under strong-ink eyebrows, 14px links on a 32px pitch. One quiet base row under a hairline, every word 12px tracked .04em: the notice at the start, the theme and language preferences at the end, each an icon and its value with no "Theme:" or "Language:" label (the selects keep those names for assistive technology). No search field — the header carries search.
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
.ui-browser-viewport { position: relative; max-width: none; margin-inline: auto; }
|
|
8
8
|
.ui-browser-viewport > iframe { display: block; width: 100%; border: 0; background: transparent; }
|
|
9
9
|
.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); }
|
|
10
|
-
.ui-browser-tools > .ui-segmented > :is(button, a) { min-height: 1.625rem; }
|
|
11
10
|
.ui-browser-range { display: flex; flex: 1 1 14rem; align-items: center; gap: var(--ui-space-sm); min-width: 0; }
|
|
12
11
|
.ui-browser-range > .slider { flex: 1 1 6rem; min-width: 0; max-width: 12rem; }
|
|
13
12
|
.ui-browser-range > label { color: var(--ui-text-muted); @apply --ui-label-type; }
|
|
@@ -1,14 +1,6 @@
|
|
|
1
|
-
/*
|
|
1
|
+
/* Documentation prose spacing; alert material, geometry and status belong to Master UI. */
|
|
2
2
|
@layer components {
|
|
3
|
-
.ui-callout
|
|
4
|
-
.ui-callout
|
|
5
|
-
|
|
6
|
-
.ui-callout > svg { width: 1rem; height: 1rem; margin-top: .21875rem; color: color-mix(in oklab, var(--tone) 80%, var(--ui-text-strong)); }
|
|
7
|
-
.ui-callout > div { min-width: 0; overflow-wrap: anywhere; }
|
|
8
|
-
.ui-callout > div > :first-child { margin-top: 0; } .ui-callout > div > :last-child { margin-bottom: 0; }
|
|
9
|
-
.ui-callout b { color: var(--ui-text-strong); font-weight: var(--ui-weight-strong); }
|
|
10
|
-
.ui-callout[data-tone="info"] { --tone: var(--ui-status-info); }
|
|
11
|
-
.ui-callout[data-tone="success"], .ui-callout[data-tone="do"] { --tone: var(--ui-status-success); }
|
|
12
|
-
.ui-callout[data-tone="warning"] { --tone: var(--ui-status-warning); }
|
|
13
|
-
.ui-callout[data-tone="danger"], .ui-callout[data-tone="dont"] { --tone: var(--ui-status-danger); }
|
|
3
|
+
.ui-callout .alert-body { overflow-wrap: anywhere; }
|
|
4
|
+
.ui-callout .alert-body > :first-child { margin-top: 0; }
|
|
5
|
+
.ui-callout .alert-body > :last-child { margin-bottom: 0; }
|
|
14
6
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* chart: owned component styles; shared definitions come from the foundation. */
|
|
2
2
|
@layer components {
|
|
3
|
-
.ui-chart { display: grid; gap: var(--ui-space-md); padding: var(--ui-space-lg);
|
|
3
|
+
.ui-chart { display: grid; gap: var(--ui-space-md); padding: var(--ui-space-lg); }
|
|
4
4
|
.ui-chart-head { display: flex; flex-wrap: wrap; justify-content: space-between; gap: var(--ui-space-xs) var(--ui-space-md); }
|
|
5
5
|
.ui-chart-head b { color: var(--ui-text-strong); font-size: var(--ui-text-small); font-weight: var(--ui-weight-strong); }
|
|
6
6
|
.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; }
|
|
@@ -1,82 +1,40 @@
|
|
|
1
|
-
/* code-panel
|
|
1
|
+
/* UI code-panel/code-block/code-line own every well, corner, type and state material.
|
|
2
|
+
* This adapter owns Shiki markup, copy placement, wrapping and document annotations. */
|
|
2
3
|
@layer components {
|
|
3
|
-
.ui-code { position: relative;
|
|
4
|
-
.ui-code
|
|
5
|
-
.ui-code-bar
|
|
6
|
-
.ui-code-bar > .ui-
|
|
7
|
-
.ui-code-
|
|
8
|
-
.ui-code-
|
|
9
|
-
|
|
10
|
-
.ui-code
|
|
11
|
-
.ui-code
|
|
12
|
-
.ui-code-line { display: block; padding: 0 var(--ui-space-lg) 0 calc(var(--ui-space-md) + var(--code-diff-gutter, 0px)); }
|
|
13
|
-
.ui-code-line { min-height: 1lh; }
|
|
14
|
-
.ui-code[data-numbers] { counter-reset: line; }
|
|
15
|
-
.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; }
|
|
16
|
-
.ui-code-line[data-mark="active"] { background: var(--ui-code-active); box-shadow: inset 2px 0 0 var(--ui-line-mark); }
|
|
17
|
-
.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); }
|
|
18
|
-
.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); }
|
|
19
|
-
.ui-code pre:has(.ui-code-line:is([data-mark="added"], [data-mark="removed"])) { --code-diff-gutter: calc(1ch + var(--ui-space-sm)); }
|
|
4
|
+
.ui-code { position: relative; }
|
|
5
|
+
.ui-code .code-block > code { display: contents; }
|
|
6
|
+
.ui-code-bar > .ui-code-file { flex: 1 1 auto; }
|
|
7
|
+
.ui-code-bar > .ui-copy { flex: 0 1 auto; min-width: 0; margin-left: auto; }
|
|
8
|
+
.ui-code > .ui-copy { position: absolute; z-index: 1; top: var(--ui-inset); right: 0; padding-inline: var(--ui-space-sm) var(--ui-inset); background: linear-gradient(90deg, transparent, var(--color-surface-inset) var(--ui-space-sm)); }
|
|
9
|
+
.ui-code:has(> .ui-copy) .code-line { padding-inline-end: 3rem; }
|
|
10
|
+
/* Shiki removes notation comments from copied text. A visual sign supplements the UI diff tint. */
|
|
11
|
+
.ui-code .code-block:has(.code-line-added, .code-line-removed) { --code-diff-gutter: calc(1ch + var(--ui-space-sm)); }
|
|
12
|
+
.ui-code .code-line { padding-inline-start: calc(var(--code-padding-x) + var(--code-diff-gutter, 0px)); }
|
|
20
13
|
.ui-code-line:is([data-mark="added"], [data-mark="removed"]) { position: relative; min-width: min-content; }
|
|
21
|
-
.ui-code-line[data-mark="added"]
|
|
14
|
+
.ui-code-line:is([data-mark="added"], [data-mark="removed"])::after { position: absolute; top: 0; inset-inline-start: var(--code-padding-x); width: 1ch; text-indent: 0; text-align: center; color: var(--color-text-muted); user-select: none; }
|
|
22
15
|
.ui-code-line[data-mark="added"]::after { content: "+"; }
|
|
23
16
|
.ui-code-line[data-mark="removed"]::after { content: "−"; }
|
|
24
|
-
.ui-code-line mark { padding: 1px 2px; border-radius:
|
|
17
|
+
.ui-code-line mark { padding: 1px 2px; border-radius: calc((var(--radius-chip) - 2px) * var(--corner-scale)); corner-shape: var(--corner-shape); background: color-mix(in oklab, var(--color-text-strong) 8%, transparent); color: inherit; }
|
|
25
18
|
.ui-code .t { color: var(--ui-code-function); } .ui-code .a { color: var(--ui-code-property); } .ui-code .s { color: var(--ui-code-string); }
|
|
26
19
|
.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); }
|
|
27
|
-
.ui-code > .ui-
|
|
28
|
-
.ui-code > .ui-
|
|
29
|
-
.ui-code > .ui-disclosure > pre { padding-top: 0; }
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
/*
|
|
34
|
-
* Code panels (`ui-code`, styles/system/code.css) as the site renders them: Shiki lines are `ui-code-line` parts, the
|
|
35
|
-
* copy action sits in the bar or, without one, in the corner, and tab panels all show on paper and without scripts.
|
|
36
|
-
*/
|
|
37
|
-
@layer components {
|
|
38
|
-
/* The file's name keeps its width; a long result wraps in the room left beside the copy button. */
|
|
39
|
-
.ui-code-bar > .ui-code-file { flex: 1 0 auto; }
|
|
40
|
-
.ui-code-bar > .ui-copy { flex: 0 1 auto; min-width: 0; margin-left: auto; }
|
|
41
|
-
/* 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. */
|
|
42
|
-
.ui-code > .ui-copy { position: absolute; z-index: 1; top: var(--code-corner); right: var(--code-corner); padding-left: var(--ui-space-sm); border-radius: var(--ui-radius-md); background: linear-gradient(90deg, transparent, var(--ui-surface-code) var(--ui-space-sm));
|
|
43
|
-
/* The face runs on to the panel's contour (1px short of the edge), so a scrolled line never shows again past the button. */
|
|
44
|
-
box-shadow: calc(var(--code-corner) - 1px) 0 0 var(--ui-surface-code); }
|
|
45
|
-
.ui-code:has(> .ui-copy) .ui-code-line { padding-right: 3rem; }
|
|
46
|
-
/* A shell command is read whole: it wraps under a hanging indent instead of hiding its flags behind the copy button. */
|
|
47
|
-
:is(.ui-code, [role="tabpanel"])[data-lang="bash"] > pre, .ui-code[data-lang="sh"] > pre, .ui-code[data-lang="shell"] > pre { white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
48
|
-
:is(.ui-code, [role="tabpanel"])[data-lang="bash"] > pre .ui-code-line, .ui-code:is([data-lang="sh"], [data-lang="shell"]) > pre .ui-code-line { padding-left: calc(var(--ui-space-md) + var(--code-diff-gutter, 0px) + 2ch); text-indent: -2ch; }
|
|
49
|
-
/* Flags wrap whole: a token never breaks at its own hyphen, so `--yes` cannot split into `-` and `-yes`. */
|
|
20
|
+
:is(.ui-code, [role="tabpanel"])[data-lang="bash"] > pre, .ui-code:is([data-lang="sh"], [data-lang="shell"]) > pre { white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
21
|
+
:is(.ui-code, [role="tabpanel"])[data-lang="bash"] > pre .ui-code-line, .ui-code:is([data-lang="sh"], [data-lang="shell"]) > pre .ui-code-line { padding-inline-start: calc(var(--code-padding-x) + var(--code-diff-gutter, 0px) + 2ch); text-indent: -2ch; }
|
|
50
22
|
:is(.ui-code, [role="tabpanel"])[data-lang="bash"] > pre .ui-code-line > span, .ui-code:is([data-lang="sh"], [data-lang="shell"]) > pre .ui-code-line > span { display: inline-block; text-indent: 0; }
|
|
51
|
-
/* Plain text, such as a prompt for an agent, is prose set in mono: it wraps at the panel like prose. */
|
|
52
23
|
:is(.ui-code, [role="tabpanel"])[data-lang="text"] > pre { white-space: pre-wrap; overflow-wrap: break-word; }
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
.ui-prose > .ui-code
|
|
57
|
-
.ui-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
.ui-prose > .ui-code + .ui-disclosure[data-generated] > summary { margin-inline: calc(var(--ui-space-md) * -1); padding-inline: var(--ui-space-md); box-shadow: inset 0 1px 0 var(--ui-line-hair); }
|
|
63
|
-
.ui-prose > .ui-code + .ui-disclosure[data-generated] > .ui-code { margin-inline: calc(var(--ui-space-md) * -1); border-radius: 0 0 var(--ui-radius-xl) var(--ui-radius-xl); background: transparent; box-shadow: inset 0 1px 0 var(--ui-line-hair); }
|
|
64
|
-
|
|
65
|
-
/* @WARN and @ERROR marks: a wavy underline in the status tone instead of a wash. */
|
|
66
|
-
.ui-code-line mark[data-tone] { padding: 0; background: none; box-shadow: none; text-decoration: underline wavy 1px; text-underline-offset: 3px; }
|
|
67
|
-
.ui-code-line mark[data-tone="warning"] { text-decoration-color: var(--ui-status-warning); }
|
|
68
|
-
.ui-code-line mark[data-tone="danger"] { text-decoration-color: var(--ui-status-danger); }
|
|
69
|
-
/* [!code focus] blurs the other lines until the pointer reaches the code. */
|
|
70
|
-
.ui-code pre.has-focused .ui-code-line { transition: filter var(--ui-duration-base) var(--ui-ease); }
|
|
24
|
+
/* A generated output is a quiet native disclosure, not a second border drawn over the source well. */
|
|
25
|
+
.ui-prose > .ui-code:has(+ .ui-disclosure[data-generated]) { margin-bottom: 0; }
|
|
26
|
+
.ui-prose > .ui-code + .ui-disclosure[data-generated] { max-width: none; margin-top: 0; margin-inline: calc(var(--bleed) * -1); }
|
|
27
|
+
.ui-prose > .ui-code + .ui-disclosure[data-generated] > summary { padding-inline: var(--ui-space-md); }
|
|
28
|
+
.ui-code-line mark[data-tone] { padding: 0; background: none; text-decoration: underline wavy 1px; text-underline-offset: 3px; }
|
|
29
|
+
.ui-code-line mark[data-tone="warning"] { text-decoration-color: var(--color-warning); }
|
|
30
|
+
.ui-code-line mark[data-tone="danger"] { text-decoration-color: var(--color-danger); }
|
|
31
|
+
.ui-code pre.has-focused .ui-code-line { transition: filter var(--duration-base) var(--easing-glide); }
|
|
71
32
|
.ui-code pre.has-focused:not(:hover, :focus-visible) .ui-code-line:not(.focus) { filter: blur(3px); }
|
|
72
33
|
.ui-code ::selection { background: color-mix(in oklab, var(--ui-code-function) 22%, transparent); }
|
|
73
34
|
@media print {
|
|
74
35
|
.ui-code { break-inside: avoid; }
|
|
75
|
-
/* Paper cannot scroll: keep complete commands and long source lines readable. */
|
|
76
36
|
.ui-code pre { overflow: visible; white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
77
37
|
.ui-code pre.has-focused .ui-code-line { filter: none; }
|
|
78
38
|
}
|
|
79
39
|
@media (prefers-reduced-motion: reduce) { .ui-code pre.has-focused .ui-code-line { transition: none; } }
|
|
80
|
-
@media (forced-colors: active) { .ui-code { border: 1px solid CanvasText; } }
|
|
81
|
-
|
|
82
40
|
}
|
|
@@ -1,40 +1,12 @@
|
|
|
1
|
-
/*
|
|
1
|
+
/* File names are a site convention; UI tabs own their geometry, states and ink. */
|
|
2
2
|
@layer components {
|
|
3
|
-
.ui-tabs {
|
|
4
|
-
|
|
5
|
-
.ui-
|
|
6
|
-
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);
|
|
7
|
-
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);
|
|
8
|
-
}
|
|
9
|
-
.ui-tabs > [role="tab"] svg { width: 14px; height: 14px; }
|
|
10
|
-
.ui-tabs > [role="tab"]:hover { color: var(--ui-text-strong); }
|
|
11
|
-
.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); }
|
|
12
|
-
.ui-tabs > [role="tab"]:focus-visible { @apply --ui-focus-ring; outline-offset: -2px; }
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
/*
|
|
17
|
-
* Code panels (`ui-code`, styles/system/code.css) as the site renders them: Shiki lines are `ui-code-line` parts, the
|
|
18
|
-
* copy action sits in the bar or, without one, in the corner, and tab panels all show on paper and without scripts.
|
|
19
|
-
*/
|
|
20
|
-
@layer components {
|
|
21
|
-
/* The file's name keeps its width; a long result wraps in the room left beside the copy button. */
|
|
22
|
-
/* 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. */
|
|
23
|
-
/* A shell command is read whole: it wraps under a hanging indent instead of hiding its flags behind the copy button. */
|
|
24
|
-
/* Flags wrap whole: a token never breaks at its own hyphen, so `--yes` cannot split into `-` and `-yes`. */
|
|
25
|
-
/* Plain text, such as a prompt for an agent, is prose set in mono: it wraps at the panel like prose. */
|
|
26
|
-
|
|
27
|
-
/* A Generated CSS disclosure right after its source closes the same panel: one frame, the output under a hairline,
|
|
28
|
-
as in a demo tray. Alone (after a table or a paragraph) it stays a quiet disclosure. */
|
|
29
|
-
|
|
30
|
-
/* @WARN and @ERROR marks: a wavy underline in the status tone instead of a wash. */
|
|
31
|
-
/* [!code focus] blurs the other lines until the pointer reaches the code. */
|
|
32
|
-
|
|
3
|
+
.ui-tabs { min-width: 0; --font-family-sans: var(--font-family-mono); }
|
|
4
|
+
/* Align the tab underline with the header separator, including its 1px border. */
|
|
5
|
+
.ui-code-bar > .ui-tabs { flex: 1; align-self: stretch; margin-bottom: -1px; }
|
|
33
6
|
[data-code-tabs] > [role="tabpanel"] > .ui-code-file { display: none; }
|
|
34
7
|
@media (scripting: none), print {
|
|
35
8
|
[data-code-tabs] > .ui-code-bar { display: none; }
|
|
36
9
|
[data-code-tabs] > [role="tabpanel"][hidden] { display: block; }
|
|
37
10
|
[data-code-tabs] > [role="tabpanel"] > .ui-code-file { display: flex; padding: var(--ui-space-sm) var(--ui-space-md) 0; }
|
|
38
11
|
}
|
|
39
|
-
|
|
40
12
|
}
|
|
@@ -1,32 +1,10 @@
|
|
|
1
|
-
/*
|
|
1
|
+
/* Copy feedback and its placement inside document code headers. */
|
|
2
2
|
@layer components {
|
|
3
3
|
.ui-copy { display: inline-flex; align-items: center; gap: var(--ui-space-xs); }
|
|
4
4
|
.ui-copy-status { color: var(--ui-text-muted); font: var(--ui-weight-regular) .75rem/1 var(--font-family-mono); }
|
|
5
5
|
.ui-copy-status[data-result="success"] { color: var(--ui-status-success); }
|
|
6
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
7
|
.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
8
|
.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
|
-
|
|
9
|
+
@media (scripting: none), print { .ui-copy { display: none; } }
|
|
32
10
|
}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
@import '@master/ui/components/dialog.css';
|
|
2
|
-
|
|
2
|
+
@import '@master/ui/components/command.css';
|
|
3
|
+
@import '@master/ui/components/listbox.css';
|
|
4
|
+
@import '@master/ui/components/icon.css';
|
|
5
|
+
/* Search composition. UI owns the dialog, field, option states and key hints. */
|
|
3
6
|
@layer components {
|
|
4
7
|
.ui-dialog { --dialog-padding: 0; gap: 0; }
|
|
5
|
-
.ui-dialog-search {
|
|
6
|
-
.ui-dialog-search input { flex:
|
|
7
|
-
.ui-
|
|
8
|
-
|
|
9
|
-
.ui-results
|
|
10
|
-
.ui-
|
|
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; }
|
|
8
|
+
.ui-dialog-search { flex-wrap: wrap; min-height: 3.5rem; }
|
|
9
|
+
.ui-dialog-search .command-input { flex-basis: 8rem; }
|
|
10
|
+
.ui-results { display: grid; gap: 2px; overflow: visible; }
|
|
11
|
+
.ui-results .listbox-option { padding: .625rem .75rem; text-decoration: none; }
|
|
12
|
+
.ui-results .listbox-option b { font-weight: var(--font-weight-control); }
|
|
13
|
+
.ui-dialog-foot { gap: var(--ui-space-md); }
|
|
15
14
|
.ui-dialog-foot span { display: inline-flex; align-items: center; gap: 6px; }
|
|
16
15
|
}
|
|
@@ -1,18 +1,8 @@
|
|
|
1
|
-
/*
|
|
1
|
+
/* Native accordion parts own toggle geometry, focus and state feedback. */
|
|
2
2
|
@layer components {
|
|
3
|
-
.ui-disclosure {
|
|
4
|
-
.ui-disclosure > summary
|
|
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; }
|
|
3
|
+
.ui-disclosure > summary { flex-wrap: wrap; }
|
|
4
|
+
.ui-disclosure > summary .ui-disclosure-meta { margin-inline-start: auto; color: var(--color-text-muted); font: var(--ui-weight-regular) .75rem/1 var(--font-family-sans); }
|
|
13
5
|
.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
6
|
.ui-disclosure-body.ui-tray-caption { padding-bottom: var(--ui-space-md); }
|
|
17
7
|
.ui-disclosure > .ui-disclosure-body > :first-child { margin-top: 0; }
|
|
18
8
|
.ui-disclosure > .ui-disclosure-body > :last-child { margin-bottom: 0; }
|
|
@@ -9,18 +9,17 @@
|
|
|
9
9
|
box-shadow: inset 0 -1px 0 var(--ui-line-hair); }
|
|
10
10
|
.ui-header-brand { display: inline-flex; align-items: center; gap: var(--ui-space-xs); color: var(--ui-text-strong); font-weight: var(--ui-weight-medium); font-size: 1.0625rem; letter-spacing: -.02em; text-decoration: none; white-space: nowrap; }
|
|
11
11
|
.ui-header-nav { display: flex; align-items: center; gap: var(--ui-space-3xs); }
|
|
12
|
-
.ui-header-nav > a { display: inline-flex; align-items: center; height: 2.25rem; padding: 0 .75rem; border-radius: var(--
|
|
12
|
+
.ui-header-nav > a { display: inline-flex; align-items: center; height: 2.25rem; padding: 0 .75rem; border-radius: calc(var(--radius-control) * var(--corner-scale)); corner-shape: var(--corner-shape); color: var(--ui-text-body); font-size: var(--ui-text-small); font-weight: var(--ui-weight-regular); text-decoration: none; transition: color var(--ui-duration-quick); }
|
|
13
13
|
.ui-header-nav > a:hover { color: var(--ui-text-strong); }
|
|
14
14
|
.ui-header-nav > a:is([aria-current="page"], [aria-current="true"]) { color: var(--ui-text-strong); font-weight: var(--ui-weight-medium); }
|
|
15
15
|
.ui-header-nav > a:focus-visible { @apply --ui-focus-ring; outline-offset: 0; }
|
|
16
|
-
.ui-header-nav > a > small { margin-left: var(--ui-space-2xs); padding: 1px 5px; border-radius: var(--ui-radius-xs); background: var(--ui-surface-chip); color: var(--ui-text-muted); box-shadow: inset 0 0 0 1px var(--ui-line-hair); font: var(--ui-weight-medium) .6875rem/1.4 var(--font-family-sans); letter-spacing: .02em; }
|
|
17
16
|
.ui-header-end { display: flex; align-items: center; gap: var(--ui-space-3xs); margin-left: auto; }
|
|
18
17
|
.ui-header-divider { width: 1px; height: 1rem; margin-inline: var(--ui-space-xs); background: var(--ui-line-divider); }
|
|
19
|
-
.ui-version { display: inline-flex; align-items: center; gap: var(--ui-space-3xs); height: 2.25rem; padding: 0 .375rem; border-radius: var(--
|
|
18
|
+
.ui-version { display: inline-flex; align-items: center; gap: var(--ui-space-3xs); height: 2.25rem; padding: 0 .375rem; border-radius: calc(var(--radius-control) * var(--corner-scale)); corner-shape: var(--corner-shape); color: var(--ui-text-body); font: var(--ui-weight-regular) var(--ui-text-small)/1 var(--font-family-sans); font-variant-numeric: tabular-nums; }
|
|
20
19
|
}
|
|
21
20
|
|
|
22
21
|
/*
|
|
23
|
-
* The site header (`ui-header`, styles/system/
|
|
22
|
+
* The site header (`ui-header`, styles/system/header-core.css) placed for the site: it sticks above documentation pages and
|
|
24
23
|
* overlays the homepage and blog as a stickable header that slides away while reading down (`data-tucked`) and is
|
|
25
24
|
* transparent at the top of the page (`data-background="transparent"`).
|
|
26
25
|
*/
|
|
@@ -28,10 +27,8 @@
|
|
|
28
27
|
/* A single rhythm for the page header and the modal's matching top bar. */
|
|
29
28
|
.ui-header, .ui-mobile-menu-bar { --ui-header-target: 2.25rem; --ui-header-icon: 1.125rem; --ui-header-control-gap: .5rem; }
|
|
30
29
|
.ui-header .btn.ui-header-control[data-shape="icon"], .ui-mobile-menu-bar .btn.ui-header-control[data-shape="icon"] {
|
|
31
|
-
position: relative; box-sizing: border-box; flex: 0 0 var(--ui-header-target); width: var(--ui-header-target); min-width: var(--ui-header-target); height: var(--ui-header-target); min-height: var(--ui-header-target); margin: 0; padding: 0; align-items: center; justify-content: center;
|
|
30
|
+
position: relative; box-sizing: border-box; flex: 0 0 var(--ui-header-target); width: var(--ui-header-target); min-width: var(--ui-header-target); height: var(--ui-header-target); min-height: var(--ui-header-target); margin: 0; padding: 0; align-items: center; justify-content: center; line-height: 1;
|
|
32
31
|
}
|
|
33
|
-
.ui-header-control.btn[data-variant="quiet"]:not(:disabled) { background: transparent; box-shadow: none; translate: none; color: var(--ui-text-muted); }
|
|
34
|
-
.ui-header-control.btn[data-variant="quiet"]:where(:hover, :active, :focus-visible, :has(select:focus-visible)):not(:disabled) { color: var(--ui-text-strong); }
|
|
35
32
|
.ui-header-control.btn > svg:not(.ui-header-external) { flex: none; width: var(--ui-header-icon); height: var(--ui-header-icon); }
|
|
36
33
|
.ui-header .ui-header-end, .ui-header .ui-header-nav { align-items: center; gap: var(--ui-header-control-gap); }
|
|
37
34
|
.ui-header .ui-header-divider { flex: none; margin: 0 .25rem; height: var(--ui-header-icon); }
|
|
@@ -47,7 +44,7 @@
|
|
|
47
44
|
@media (prefers-reduced-motion: reduce) { .ui-header, .ui-header[data-variant="stickable"] { transition: none; } }
|
|
48
45
|
@media print { .ui-header { display: none; } }
|
|
49
46
|
|
|
50
|
-
.ui-header-brand { display: inline-flex; align-items: center; min-height: var(--ui-header-target); border-radius: var(--
|
|
47
|
+
.ui-header-brand { display: inline-flex; align-items: center; min-height: var(--ui-header-target); border-radius: calc(var(--radius-control-sm) * var(--corner-scale)); corner-shape: var(--corner-shape); }
|
|
51
48
|
.ui-header-brand:focus-visible { @apply --ui-focus-ring; outline-offset: 2px; }
|
|
52
49
|
/* The version chip opens the native version list laid over it. */
|
|
53
50
|
.ui-header .ui-version { position: relative; cursor: pointer; }
|
|
@@ -68,14 +65,9 @@
|
|
|
68
65
|
.ui-header-end > :last-child > .ui-tooltip::before { left: auto; right: calc(1rem - 4px); translate: none; }
|
|
69
66
|
@media (hover: none) { .ui-header-end > * > .ui-tooltip { display: none; } }
|
|
70
67
|
|
|
71
|
-
/*
|
|
72
|
-
.ui-header-search {
|
|
73
|
-
background: transparent; color: var(--ui-text-muted); box-shadow: inset 0 0 0 1px var(--ui-line-contour); font: var(--ui-weight-regular) .75rem/1 var(--font-family-sans); cursor: pointer;
|
|
74
|
-
transition: color var(--ui-duration-quick), box-shadow var(--ui-duration-quick), background-color var(--ui-duration-quick); }
|
|
75
|
-
.ui-header-search:hover { color: var(--ui-text-strong); background: var(--ui-surface-chip); box-shadow: inset 0 0 0 1px var(--ui-line-strong); }
|
|
76
|
-
.ui-header-search:focus-visible { @apply --ui-focus-ring; outline-offset: 2px; }
|
|
68
|
+
/* The header controls retain their placement; UI owns their material and feedback. */
|
|
69
|
+
.ui-header-search.btn { --btn-height: 1.875rem; --btn-radius: 999px; --btn-font-size: .75rem; --btn-gap: .4375rem; --btn-padding-x: .6875rem; corner-shape: round; }
|
|
77
70
|
.ui-header-search > svg { flex: none; width: 1rem; height: 1rem; }
|
|
78
|
-
.ui-header-search > .kbd { min-width: 0; height: auto; padding: 0; background: none; color: inherit; box-shadow: none; font: var(--ui-weight-regular) .6875rem/1 var(--font-family-sans); letter-spacing: .04em; }
|
|
79
71
|
|
|
80
72
|
/* The compact header: the menu at the start, the brand centred, search at the end. */
|
|
81
73
|
.ui-header .ui-header-menu { display: none; }
|
|
@@ -86,8 +78,7 @@
|
|
|
86
78
|
.ui-header-brand { margin-inline: auto; }
|
|
87
79
|
.ui-header > :is(.ui-version, .ui-header-nav), .ui-header-end > :not(.ui-header-search) { display: none; }
|
|
88
80
|
.ui-header-end { margin-left: 0; }
|
|
89
|
-
.ui-header-search {
|
|
90
|
-
.ui-header-search:hover { background: transparent; box-shadow: none; }
|
|
81
|
+
.ui-header-search.btn { --btn-height: var(--ui-header-target); --btn-radius: var(--radius-control); --btn-padding-x: 0; width: var(--ui-header-target); corner-shape: var(--corner-shape); }
|
|
91
82
|
.ui-header-search > svg { width: var(--ui-header-icon); height: var(--ui-header-icon); }
|
|
92
83
|
.ui-header-search > .kbd { display: none; }
|
|
93
84
|
/* Search can be the last visible action while hidden siblings still follow it. */
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
/*
|
|
1
|
+
/* Reading-column navigation layout; card material and interaction belong to Master UI. */
|
|
2
2
|
@layer components {
|
|
3
3
|
.ui-index { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 14rem), 1fr)); gap: var(--ui-space-sm); }
|
|
4
|
-
.ui-index >
|
|
5
|
-
.ui-index > a:hover { translate: 0 -.5px; box-shadow: var(--ui-elevation-rise-1h); }
|
|
6
|
-
.ui-index > a:focus-visible { @apply --ui-focus-ring; outline-offset: 2px; }
|
|
4
|
+
.ui-index > .card { --card-padding: var(--ui-space-md); display: grid; align-content: start; gap: var(--ui-space-2xs); }
|
|
7
5
|
.ui-index > a > svg { width: 18px; height: 18px; margin-bottom: var(--ui-space-2xs); color: var(--ui-text-strong); stroke-width: 1.5; }
|
|
8
|
-
.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; }
|
|
9
|
-
.ui-index > a > span { font-size: .8125rem; line-height: 1.6; color: var(--ui-text-muted); }
|
|
10
6
|
.ui-index > a > b code { font: var(--ui-weight-medium) .875rem/1.45 var(--font-family-mono); letter-spacing: 0; overflow-wrap: anywhere; }
|
|
11
7
|
.ui-index[data-density="compact"] { grid-template-columns: repeat(auto-fill, minmax(min(100%, 12rem), 1fr)); gap: var(--ui-space-xs); }
|
|
12
|
-
.ui-index[data-density="compact"] >
|
|
8
|
+
.ui-index[data-density="compact"] > .card { --card-padding: var(--ui-space-sm); gap: 2px; }
|
|
13
9
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*
|
|
1
|
+
/* Only text-flow behavior belongs to the prose adapter; UI .code owns its face. */
|
|
2
2
|
@layer components {
|
|
3
|
-
.ui-inline-code {
|
|
3
|
+
.ui-inline-code { -webkit-box-decoration-break: clone; box-decoration-break: clone; }
|
|
4
4
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/* logos: owned component styles; shared definitions come from the foundation. */
|
|
3
3
|
@layer components {
|
|
4
4
|
.ui-logos { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 9rem), 1fr)); gap: var(--ui-space-2xs) var(--ui-space-md); }
|
|
5
|
-
.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(--
|
|
5
|
+
.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: calc(var(--radius-control-sm) * var(--corner-scale)); corner-shape: var(--corner-shape); 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); }
|
|
6
6
|
.ui-logos > a:hover { color: var(--ui-text-strong); background: var(--ui-surface-chip); }
|
|
7
7
|
.ui-logos > a:focus-visible { @apply --ui-focus-ring; outline-offset: 2px; }
|
|
8
8
|
.ui-logos > a > svg { flex: none; width: 1.25rem; height: 1.25rem; }
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* metrics: owned component styles; shared definitions come from the foundation. */
|
|
2
2
|
@layer components {
|
|
3
3
|
.ui-metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 10rem), 1fr)); gap: var(--ui-inset); }
|
|
4
|
-
.ui-metric { display: grid; align-content: start; min-width: 0; gap: 6px; overflow-wrap: anywhere; padding: var(--ui-space-md);
|
|
4
|
+
.ui-metric { display: grid; align-content: start; min-width: 0; gap: 6px; overflow-wrap: anywhere; padding: var(--ui-space-md); }
|
|
5
5
|
.ui-metric > small { color: var(--ui-text-muted); @apply --ui-label-type; }
|
|
6
6
|
.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; }
|
|
7
7
|
.ui-metric > b > span { color: var(--ui-text-muted); font-size: .875rem; font-weight: var(--ui-weight-medium); letter-spacing: 0; }
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/*
|
|
1
|
+
/* Reference row composition; surface and inline-code materials belong to Master UI. */
|
|
2
2
|
@layer components {
|
|
3
|
-
.ui-params { display: grid; margin: 0;
|
|
3
|
+
.ui-params { display: grid; margin: 0; }
|
|
4
4
|
.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); }
|
|
5
5
|
.ui-params > div:first-child { border-top: 0; }
|
|
6
6
|
.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); }
|
|
@@ -12,6 +12,5 @@
|
|
|
12
12
|
.ui-params dd a:not([class]) { color: var(--ui-text-strong); text-decoration: underline 1px var(--ui-line-strong); text-underline-offset: .24em; }
|
|
13
13
|
.ui-params dd a:not([class]):hover { text-decoration-color: currentColor; }
|
|
14
14
|
.ui-params :is(dt, dd) :is(h3, h4) { margin: 0; font: inherit; color: inherit; letter-spacing: inherit; }
|
|
15
|
-
.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); }
|
|
16
15
|
@media (width < 35rem) { .ui-params > div { grid-template-columns: 1fr; } }
|
|
17
16
|
}
|