@rtkelly-labs/design-system 0.0.0-bootstrap.0 → 0.16.0-dev.0.37dedac
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/CHANGELOG.md +347 -0
- package/LICENSE +21 -0
- package/README.md +317 -2
- package/dist/components/AlertDialog.js +95 -0
- package/dist/components/AlertDialog.js.map +1 -0
- package/dist/components/AppShell.js +261 -0
- package/dist/components/AppShell.js.map +1 -0
- package/dist/components/AsciiDivider.js +8 -0
- package/dist/components/AsciiDivider.js.map +1 -0
- package/dist/components/AsciiGauge.js +130 -0
- package/dist/components/AsciiGauge.js.map +1 -0
- package/dist/components/Avatar.js +87 -0
- package/dist/components/Avatar.js.map +1 -0
- package/dist/components/Badge.js +25 -0
- package/dist/components/Badge.js.map +1 -0
- package/dist/components/BarChart.js +288 -0
- package/dist/components/BarChart.js.map +1 -0
- package/dist/components/BracketText.js +23 -0
- package/dist/components/BracketText.js.map +1 -0
- package/dist/components/BulletChart.js +50 -0
- package/dist/components/BulletChart.js.map +1 -0
- package/dist/components/Button.js +130 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/Card.js +181 -0
- package/dist/components/Card.js.map +1 -0
- package/dist/components/ChartTooltip.js +54 -0
- package/dist/components/ChartTooltip.js.map +1 -0
- package/dist/components/Checkbox.js +55 -0
- package/dist/components/Checkbox.js.map +1 -0
- package/dist/components/ColophonCard.js +122 -0
- package/dist/components/ColophonCard.js.map +1 -0
- package/dist/components/DataTable.js +299 -0
- package/dist/components/DataTable.js.map +1 -0
- package/dist/components/Divider.js +42 -0
- package/dist/components/Divider.js.map +1 -0
- package/dist/components/Drawer.js +81 -0
- package/dist/components/Drawer.js.map +1 -0
- package/dist/components/EmptyState.js +39 -0
- package/dist/components/EmptyState.js.map +1 -0
- package/dist/components/ErrorSummary.js +122 -0
- package/dist/components/ErrorSummary.js.map +1 -0
- package/dist/components/Fieldset.js +37 -0
- package/dist/components/Fieldset.js.map +1 -0
- package/dist/components/Glyph.js +60 -0
- package/dist/components/Glyph.js.map +1 -0
- package/dist/components/Input.js +111 -0
- package/dist/components/Input.js.map +1 -0
- package/dist/components/LinkProvider.js +76 -0
- package/dist/components/LinkProvider.js.map +1 -0
- package/dist/components/Menu.js +144 -0
- package/dist/components/Menu.js.map +1 -0
- package/dist/components/MetadataGrid.js +184 -0
- package/dist/components/MetadataGrid.js.map +1 -0
- package/dist/components/MobileNav.js +120 -0
- package/dist/components/MobileNav.js.map +1 -0
- package/dist/components/Modal.js +79 -0
- package/dist/components/Modal.js.map +1 -0
- package/dist/components/NerdIcon.js +177 -0
- package/dist/components/NerdIcon.js.map +1 -0
- package/dist/components/NoteBlock.js +84 -0
- package/dist/components/NoteBlock.js.map +1 -0
- package/dist/components/PageHeader.js +34 -0
- package/dist/components/PageHeader.js.map +1 -0
- package/dist/components/PageTitle.js +21 -0
- package/dist/components/PageTitle.js.map +1 -0
- package/dist/components/Pagination.js +96 -0
- package/dist/components/Pagination.js.map +1 -0
- package/dist/components/Popover.js +87 -0
- package/dist/components/Popover.js.map +1 -0
- package/dist/components/Progress.js +83 -0
- package/dist/components/Progress.js.map +1 -0
- package/dist/components/RadioGroup.js +74 -0
- package/dist/components/RadioGroup.js.map +1 -0
- package/dist/components/ReportDocument.js +75 -0
- package/dist/components/ReportDocument.js.map +1 -0
- package/dist/components/SectionContainer.js +18 -0
- package/dist/components/SectionContainer.js.map +1 -0
- package/dist/components/Select.js +199 -0
- package/dist/components/Select.js.map +1 -0
- package/dist/components/SiteFooter.js +29 -0
- package/dist/components/SiteFooter.js.map +1 -0
- package/dist/components/SiteHeader.js +59 -0
- package/dist/components/SiteHeader.js.map +1 -0
- package/dist/components/SiteNav.js +141 -0
- package/dist/components/SiteNav.js.map +1 -0
- package/dist/components/Skeleton.js +51 -0
- package/dist/components/Skeleton.js.map +1 -0
- package/dist/components/SocialIcon.js +77 -0
- package/dist/components/SocialIcon.js.map +1 -0
- package/dist/components/Sparkline.js +104 -0
- package/dist/components/Sparkline.js.map +1 -0
- package/dist/components/Spinner.js +65 -0
- package/dist/components/Spinner.js.map +1 -0
- package/dist/components/StatCard.js +53 -0
- package/dist/components/StatCard.js.map +1 -0
- package/dist/components/StatusPage.js +99 -0
- package/dist/components/StatusPage.js.map +1 -0
- package/dist/components/Swatch.js +55 -0
- package/dist/components/Swatch.js.map +1 -0
- package/dist/components/Switch.js +53 -0
- package/dist/components/Switch.js.map +1 -0
- package/dist/components/TLDR.js +53 -0
- package/dist/components/TLDR.js.map +1 -0
- package/dist/components/Table.js +155 -0
- package/dist/components/Table.js.map +1 -0
- package/dist/components/Tabs.js +325 -0
- package/dist/components/Tabs.js.map +1 -0
- package/dist/components/Tag.js +19 -0
- package/dist/components/Tag.js.map +1 -0
- package/dist/components/TelemetryGauge.js +112 -0
- package/dist/components/TelemetryGauge.js.map +1 -0
- package/dist/components/ThemeProvider.js +87 -0
- package/dist/components/ThemeProvider.js.map +1 -0
- package/dist/components/TickerTape.js +196 -0
- package/dist/components/TickerTape.js.map +1 -0
- package/dist/components/Toast.js +200 -0
- package/dist/components/Toast.js.map +1 -0
- package/dist/components/Tooltip.js +69 -0
- package/dist/components/Tooltip.js.map +1 -0
- package/dist/components/TrackCard.js +206 -0
- package/dist/components/TrackCard.js.map +1 -0
- package/dist/components/blog/BlogPost.js +116 -0
- package/dist/components/blog/BlogPost.js.map +1 -0
- package/dist/components/blog/LoremIpsumPost.js +62 -0
- package/dist/components/blog/LoremIpsumPost.js.map +1 -0
- package/dist/components/blog/author.js +25 -0
- package/dist/components/blog/author.js.map +1 -0
- package/dist/components/booleanControl.js +50 -0
- package/dist/components/booleanControl.js.map +1 -0
- package/dist/components/dialogPopupRef.js +28 -0
- package/dist/components/dialogPopupRef.js.map +1 -0
- package/dist/components/dialogSurface.js +75 -0
- package/dist/components/dialogSurface.js.map +1 -0
- package/dist/components/docs/AnchorHeading.js +80 -0
- package/dist/components/docs/AnchorHeading.js.map +1 -0
- package/dist/components/docs/Breadcrumbs.js +26 -0
- package/dist/components/docs/Breadcrumbs.js.map +1 -0
- package/dist/components/docs/CodeBlock.js +63 -0
- package/dist/components/docs/CodeBlock.js.map +1 -0
- package/dist/components/docs/CodeTabs.js +71 -0
- package/dist/components/docs/CodeTabs.js.map +1 -0
- package/dist/components/docs/DocPager.js +28 -0
- package/dist/components/docs/DocPager.js.map +1 -0
- package/dist/components/docs/DocsHeader.js +124 -0
- package/dist/components/docs/DocsHeader.js.map +1 -0
- package/dist/components/docs/DocsLayout.js +61 -0
- package/dist/components/docs/DocsLayout.js.map +1 -0
- package/dist/components/docs/DocsLinkProvider.js +25 -0
- package/dist/components/docs/DocsLinkProvider.js.map +1 -0
- package/dist/components/docs/DocsSidebar.js +147 -0
- package/dist/components/docs/DocsSidebar.js.map +1 -0
- package/dist/components/docs/Prose.js +56 -0
- package/dist/components/docs/Prose.js.map +1 -0
- package/dist/components/docs/TableOfContents.js +71 -0
- package/dist/components/docs/TableOfContents.js.map +1 -0
- package/dist/components/docs/codeTabsStore.js +75 -0
- package/dist/components/docs/codeTabsStore.js.map +1 -0
- package/dist/components/docs/figures/ActivityGrid.js +116 -0
- package/dist/components/docs/figures/ActivityGrid.js.map +1 -0
- package/dist/components/docs/figures/BeforeAfter.js +64 -0
- package/dist/components/docs/figures/BeforeAfter.js.map +1 -0
- package/dist/components/docs/figures/ChangeSummary.js +74 -0
- package/dist/components/docs/figures/ChangeSummary.js.map +1 -0
- package/dist/components/docs/figures/Decision.js +34 -0
- package/dist/components/docs/figures/Decision.js.map +1 -0
- package/dist/components/docs/figures/DrawingSheet.js +37 -0
- package/dist/components/docs/figures/DrawingSheet.js.map +1 -0
- package/dist/components/docs/figures/FigureFrame.js +226 -0
- package/dist/components/docs/figures/FigureFrame.js.map +1 -0
- package/dist/components/docs/figures/FileChangeTree.js +134 -0
- package/dist/components/docs/figures/FileChangeTree.js.map +1 -0
- package/dist/components/docs/figures/FlowDiagram.js +82 -0
- package/dist/components/docs/figures/FlowDiagram.js.map +1 -0
- package/dist/components/docs/figures/GanttChart.js +79 -0
- package/dist/components/docs/figures/GanttChart.js.map +1 -0
- package/dist/components/docs/figures/IndexedSection.js +45 -0
- package/dist/components/docs/figures/IndexedSection.js.map +1 -0
- package/dist/components/docs/figures/MetricStrip.js +23 -0
- package/dist/components/docs/figures/MetricStrip.js.map +1 -0
- package/dist/components/docs/figures/Steps.js +58 -0
- package/dist/components/docs/figures/Steps.js.map +1 -0
- package/dist/components/docs/figures/SwatchCompare.js +42 -0
- package/dist/components/docs/figures/SwatchCompare.js.map +1 -0
- package/dist/components/docs/figures/TermGrid.js +22 -0
- package/dist/components/docs/figures/TermGrid.js.map +1 -0
- package/dist/components/docs/figures/Terminal.js +37 -0
- package/dist/components/docs/figures/Terminal.js.map +1 -0
- package/dist/components/docs/figures/Timeline.js +61 -0
- package/dist/components/docs/figures/Timeline.js.map +1 -0
- package/dist/components/docs/figures/TokenTable.js +42 -0
- package/dist/components/docs/figures/TokenTable.js.map +1 -0
- package/dist/components/docs/figures/TreeDiagram.js +76 -0
- package/dist/components/docs/figures/TreeDiagram.js.map +1 -0
- package/dist/components/docs/figures/UptimeStrip.js +68 -0
- package/dist/components/docs/figures/UptimeStrip.js.map +1 -0
- package/dist/components/docs/figures/index.js +24 -0
- package/dist/components/docs/figures/index.js.map +1 -0
- package/dist/components/docs/index.js +15 -0
- package/dist/components/docs/index.js.map +1 -0
- package/dist/components/docs/mdxComponents.js +108 -0
- package/dist/components/docs/mdxComponents.js.map +1 -0
- package/dist/components/experiments/DesignSandbox.js +206 -0
- package/dist/components/experiments/DesignSandbox.js.map +1 -0
- package/dist/components/experiments/ExperimentsView.js +138 -0
- package/dist/components/experiments/ExperimentsView.js.map +1 -0
- package/dist/components/fieldFrame.js +200 -0
- package/dist/components/fieldFrame.js.map +1 -0
- package/dist/components/floatingSurface.js +35 -0
- package/dist/components/floatingSurface.js.map +1 -0
- package/dist/components/marketing/CTASection.js +47 -0
- package/dist/components/marketing/CTASection.js.map +1 -0
- package/dist/components/marketing/FeatureGrid.js +49 -0
- package/dist/components/marketing/FeatureGrid.js.map +1 -0
- package/dist/components/marketing/Hero.js +44 -0
- package/dist/components/marketing/Hero.js.map +1 -0
- package/dist/components/marketing/PricingGrid.js +65 -0
- package/dist/components/marketing/PricingGrid.js.map +1 -0
- package/dist/components/marketing/SectionGrid.js +51 -0
- package/dist/components/marketing/SectionGrid.js.map +1 -0
- package/dist/components/paginationRange.js +28 -0
- package/dist/components/paginationRange.js.map +1 -0
- package/dist/components/portalTheme.js +14 -0
- package/dist/components/portalTheme.js.map +1 -0
- package/dist/components/saas/SaasLandingPage.js +201 -0
- package/dist/components/saas/SaasLandingPage.js.map +1 -0
- package/dist/components/siteNavContext.js +24 -0
- package/dist/components/siteNavContext.js.map +1 -0
- package/dist/components/slides/Slide.js +84 -0
- package/dist/components/slides/Slide.js.map +1 -0
- package/dist/components/slides/SlideDeck.js +228 -0
- package/dist/components/slides/SlideDeck.js.map +1 -0
- package/dist/components/themeInitScript.js +16 -0
- package/dist/components/themeInitScript.js.map +1 -0
- package/dist/components/themeScope.js +9 -0
- package/dist/components/themeScope.js.map +1 -0
- package/dist/components/toastLifetime.js +21 -0
- package/dist/components/toastLifetime.js.map +1 -0
- package/dist/fonts/DSSymbols-OFL.txt +98 -0
- package/dist/fonts/DSSymbols-Regular.woff2 +0 -0
- package/dist/fonts/SymbolsNerdFontMono-Regular.woff2 +0 -0
- package/dist/hooks/useActiveHeading.js +59 -0
- package/dist/hooks/useActiveHeading.js.map +1 -0
- package/dist/hooks/useCopyToClipboard.js +58 -0
- package/dist/hooks/useCopyToClipboard.js.map +1 -0
- package/dist/index.d.ts +6394 -0
- package/dist/index.js +117 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/accentClasses.js +87 -0
- package/dist/lib/accentClasses.js.map +1 -0
- package/dist/lib/recipe.js +33 -0
- package/dist/lib/recipe.js.map +1 -0
- package/dist/lib/slug.js +39 -0
- package/dist/lib/slug.js.map +1 -0
- package/dist/lib/theme.js +76 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/lib/tokenRules.js +51 -0
- package/dist/lib/tokenRules.js.map +1 -0
- package/dist/prose.css +766 -0
- package/dist/styles.css +203 -0
- package/dist/theme/ansi.js +77 -0
- package/dist/theme/ansi.js.map +1 -0
- package/dist/theme/contrast.js +342 -0
- package/dist/theme/contrast.js.map +1 -0
- package/dist/theme/levels.js +234 -0
- package/dist/theme/levels.js.map +1 -0
- package/dist/theme/media.js +115 -0
- package/dist/theme/media.js.map +1 -0
- package/dist/theme/recommended.js +105 -0
- package/dist/theme/recommended.js.map +1 -0
- package/dist/theme.css +538 -0
- package/dist/tokens.js +1 -0
- package/dist/tokens.js.map +1 -0
- package/package.json +209 -6
- package/skills/design-system-usage/SKILL.md +75 -0
- package/terminal/rtk-midnight.alacritty.toml +33 -0
- package/terminal/rtk-midnight.ghostty.conf +24 -0
- package/terminal/rtk-midnight.itermcolors +167 -0
- package/terminal/rtk-midnight.windows-terminal.json +23 -0
- package/terminal/rtk-sketch.alacritty.toml +33 -0
- package/terminal/rtk-sketch.ghostty.conf +24 -0
- package/terminal/rtk-sketch.itermcolors +167 -0
- package/terminal/rtk-sketch.windows-terminal.json +23 -0
- package/tokens/palette.midnight.tokens.json +477 -0
- package/tokens/palette.sketch.tokens.json +477 -0
package/dist/prose.css
ADDED
|
@@ -0,0 +1,766 @@
|
|
|
1
|
+
/* @rtkelly-labs/design-system — documentation & prose layer.
|
|
2
|
+
*
|
|
3
|
+
* @import "@rtkelly-labs/design-system/theme.css"; (tokens)
|
|
4
|
+
* @import "@rtkelly-labs/design-system/prose.css"; (this file)
|
|
5
|
+
*
|
|
6
|
+
* Deliberately plain CSS. The docs chrome is layout-critical, and Tailwind v4
|
|
7
|
+
* skips node_modules during automatic content detection — a consumer whose
|
|
8
|
+
* `@source` is wrong would otherwise get a half-styled sidebar rather than an
|
|
9
|
+
* obvious failure. Everything here works with the tokens alone.
|
|
10
|
+
*
|
|
11
|
+
* Two responsibilities:
|
|
12
|
+
* 1. `prose-ladder` — maps @tailwindcss/typography's variables onto the
|
|
13
|
+
* ladder's role tokens. Variables only; the deltas live in `Prose.tsx`.
|
|
14
|
+
* 2. `.docs-*` — the documentation chrome components, not yet migrated.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/* This file promises to work with the tokens alone, so it cannot assume a
|
|
18
|
+
* reset. Without `border-box`, every fixed-width chrome element blows out by
|
|
19
|
+
* its own padding — the contents rail is `width: 15rem` plus 2rem of padding
|
|
20
|
+
* and a 2px rule, so it renders 34px wider than its grid column and pushes the
|
|
21
|
+
* page sideways. `styles.css` consumers get this from Tailwind's preflight;
|
|
22
|
+
* `theme.css` + `prose.css` consumers previously got nothing.
|
|
23
|
+
*
|
|
24
|
+
* Scoped to the docs subtree rather than `*` so importing this file does not
|
|
25
|
+
* silently restyle the rest of a host application. */
|
|
26
|
+
.docs-layout,
|
|
27
|
+
.docs-layout *,
|
|
28
|
+
.docs-layout *::before,
|
|
29
|
+
.docs-layout *::after {
|
|
30
|
+
box-sizing: border-box;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
:root {
|
|
34
|
+
/* Republished by DocsHeader from its measured height. The fallback keeps
|
|
35
|
+
* anchor offsets sane when no header is mounted (Storybook, tests). */
|
|
36
|
+
--docs-header-height: 0px;
|
|
37
|
+
--docs-sidebar-width: 17rem;
|
|
38
|
+
--docs-toc-width: 15rem;
|
|
39
|
+
--docs-content-max: 48rem;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* Anchor jumps must clear the sticky header. `scroll-padding-top` covers
|
|
43
|
+
* browser-driven scrolls (hash on load, in-page link clicks); the
|
|
44
|
+
* `scroll-margin-top` on headings covers programmatic scrollIntoView. */
|
|
45
|
+
html {
|
|
46
|
+
scroll-behavior: smooth;
|
|
47
|
+
scroll-padding-top: calc(var(--docs-header-height) + 1.5rem);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@media (prefers-reduced-motion: reduce) {
|
|
51
|
+
html {
|
|
52
|
+
scroll-behavior: auto;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* ==========================================================================
|
|
57
|
+
Anchored headings
|
|
58
|
+
========================================================================== */
|
|
59
|
+
|
|
60
|
+
.docs-anchor-heading {
|
|
61
|
+
position: relative;
|
|
62
|
+
scroll-margin-top: calc(var(--docs-header-height) + 1.5rem);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* The heading itself is the focus target after a TOC jump; it gets tabindex
|
|
66
|
+
*="-1" at runtime, and the default focus ring on a block heading is ugly. */
|
|
67
|
+
.docs-anchor-heading:focus {
|
|
68
|
+
outline: none;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.docs-anchor-heading:focus-visible {
|
|
72
|
+
outline: 2px solid var(--ds-accent-primary);
|
|
73
|
+
outline-offset: 4px;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.docs-anchor-link {
|
|
77
|
+
display: inline-flex;
|
|
78
|
+
align-items: center;
|
|
79
|
+
gap: 0.3rem;
|
|
80
|
+
margin-left: 0.6rem;
|
|
81
|
+
padding: 0.1rem 0.4rem;
|
|
82
|
+
border: 2px solid currentColor;
|
|
83
|
+
font-family: var(--ds-font-mono);
|
|
84
|
+
font-size: 0.6rem;
|
|
85
|
+
font-weight: 700;
|
|
86
|
+
letter-spacing: 0.08em;
|
|
87
|
+
text-transform: uppercase;
|
|
88
|
+
text-decoration: none;
|
|
89
|
+
vertical-align: middle;
|
|
90
|
+
white-space: nowrap;
|
|
91
|
+
opacity: 0;
|
|
92
|
+
transition: opacity 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* Revealed on hover, but never hidden from keyboard users. */
|
|
96
|
+
.docs-anchor-heading:hover .docs-anchor-link,
|
|
97
|
+
.docs-anchor-link:focus-visible {
|
|
98
|
+
opacity: 1;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.docs-anchor-link:hover {
|
|
102
|
+
transform: translate(-1px, -1px);
|
|
103
|
+
box-shadow: 2px 2px 0 0 currentColor;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/*
|
|
107
|
+
* Touch devices have no hover state, so the affordance would be unreachable.
|
|
108
|
+
*
|
|
109
|
+
* Shown at full opacity in a *declared* role rather than dimmed. `opacity`
|
|
110
|
+
* changes the foreground after `check:contrast` has read it, so a dimmed
|
|
111
|
+
* `text.primary` is invisible to the gate: this rule was 0.55, which composites
|
|
112
|
+
* to 3.45:1 on `sketch` and fails AA on every touch device permanently.
|
|
113
|
+
* `text.muted` is a Role the gate measures — 5.90 on midnight, 5.43 on sketch.
|
|
114
|
+
*/
|
|
115
|
+
@media (hover: none) {
|
|
116
|
+
.docs-anchor-link {
|
|
117
|
+
opacity: 1;
|
|
118
|
+
color: var(--ds-text-muted);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* ==========================================================================
|
|
123
|
+
Prose — compiled Markdown output
|
|
124
|
+
==========================================================================
|
|
125
|
+
|
|
126
|
+
`@tailwindcss/typography` does this job, and it is built for exactly this
|
|
127
|
+
case: "typographic defaults for HTML you don't control". A Markdown pipeline
|
|
128
|
+
emits bare tags with no class names, so there is nothing for a utility to
|
|
129
|
+
attach to — and hand-writing ~150 descendant declarations here, or the same
|
|
130
|
+
number as `[&_h2]:…` arbitrary variants on the container, is reimplementing a
|
|
131
|
+
plugin badly either way.
|
|
132
|
+
|
|
133
|
+
What stays in CSS is the part the styling-lives-in-TSX rule already sanctions:
|
|
134
|
+
variables. `prose-ladder` maps the plugin's `--tw-prose-*` knobs onto this
|
|
135
|
+
system's role tokens. The brutalist deltas — the double rule under an h1, the
|
|
136
|
+
uppercase display headings, the mono tables — are `prose-h1:` / `prose-table:`
|
|
137
|
+
modifiers on the element, in `Prose.tsx`.
|
|
138
|
+
|
|
139
|
+
Note there is no `--tw-prose-invert-*` block. The plugin needs one because it
|
|
140
|
+
models theming as a light/dark flip; the ladder does not — `--ds-*` already
|
|
141
|
+
resolves per level, so one mapping is correct on all four rungs and would be
|
|
142
|
+
correct on a fifth.
|
|
143
|
+
========================================================================== */
|
|
144
|
+
|
|
145
|
+
@plugin "@tailwindcss/typography";
|
|
146
|
+
|
|
147
|
+
@utility prose-ladder {
|
|
148
|
+
--tw-prose-body: var(--ds-text-primary);
|
|
149
|
+
--tw-prose-headings: var(--ds-text-primary);
|
|
150
|
+
--tw-prose-lead: var(--ds-text-secondary);
|
|
151
|
+
--tw-prose-links: var(--ds-accent-primary);
|
|
152
|
+
--tw-prose-bold: var(--ds-text-primary);
|
|
153
|
+
--tw-prose-counters: var(--ds-accent-secondary);
|
|
154
|
+
--tw-prose-bullets: var(--ds-accent-primary);
|
|
155
|
+
--tw-prose-hr: var(--ds-border-strong);
|
|
156
|
+
--tw-prose-quotes: var(--ds-text-primary);
|
|
157
|
+
--tw-prose-quote-borders: var(--ds-accent-tertiary);
|
|
158
|
+
--tw-prose-captions: var(--ds-text-muted);
|
|
159
|
+
--tw-prose-kbd: var(--ds-text-primary);
|
|
160
|
+
--tw-prose-code: var(--ds-accent-secondary);
|
|
161
|
+
--tw-prose-pre-code: var(--ds-text-primary);
|
|
162
|
+
--tw-prose-pre-bg: var(--ds-surface-sunken);
|
|
163
|
+
--tw-prose-th-borders: var(--ds-border-strong);
|
|
164
|
+
--tw-prose-td-borders: var(--ds-border-default);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/* ==========================================================================
|
|
168
|
+
Code block
|
|
169
|
+
========================================================================== */
|
|
170
|
+
|
|
171
|
+
.docs-codeblock {
|
|
172
|
+
margin: 1.5rem 0;
|
|
173
|
+
border: 2px solid var(--ds-border-strong);
|
|
174
|
+
background-color: var(--ds-surface-base);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.docs-codeblock-bar {
|
|
178
|
+
display: flex;
|
|
179
|
+
align-items: center;
|
|
180
|
+
justify-content: space-between;
|
|
181
|
+
gap: 1rem;
|
|
182
|
+
padding: 0.4rem 0.85rem;
|
|
183
|
+
border-bottom: 2px solid var(--ds-border-strong);
|
|
184
|
+
font-family: var(--ds-font-mono);
|
|
185
|
+
font-size: 0.75rem;
|
|
186
|
+
font-weight: 700;
|
|
187
|
+
text-transform: uppercase;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.docs-codeblock-title {
|
|
191
|
+
color: var(--ds-accent-secondary);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.docs-codeblock-lang {
|
|
195
|
+
color: var(--ds-accent-tertiary);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.docs-codeblock-body {
|
|
199
|
+
position: relative;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.docs-codeblock-body pre {
|
|
203
|
+
margin: 0;
|
|
204
|
+
padding: 1rem;
|
|
205
|
+
overflow-x: auto;
|
|
206
|
+
font-family: var(--ds-font-mono);
|
|
207
|
+
font-size: 0.85rem;
|
|
208
|
+
line-height: 1.6;
|
|
209
|
+
/*
|
|
210
|
+
* `text.primary`, not `intent.success`. This rendered every code block in the
|
|
211
|
+
* success green — a Role that means "this worked", used as body ink — and
|
|
212
|
+
* contradicted the mapping eleven lines up, which already declares
|
|
213
|
+
* `--tw-prose-pre-code: var(--ds-text-primary)`. Set explicitly rather than
|
|
214
|
+
* inherited because `.docs-codeblock` is also used outside `.prose`, where
|
|
215
|
+
* the `--tw-prose-*` variables are not in scope.
|
|
216
|
+
*/
|
|
217
|
+
color: var(--ds-text-primary);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.docs-codeblock-body pre code {
|
|
221
|
+
font-family: inherit;
|
|
222
|
+
background: none;
|
|
223
|
+
border: 0;
|
|
224
|
+
padding: 0;
|
|
225
|
+
color: inherit;
|
|
226
|
+
white-space: pre;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.docs-codeblock-copy {
|
|
230
|
+
position: absolute;
|
|
231
|
+
top: 0.5rem;
|
|
232
|
+
right: 0.5rem;
|
|
233
|
+
/* Above the code it sits on. */
|
|
234
|
+
z-index: var(--ds-layer-raised);
|
|
235
|
+
display: inline-flex;
|
|
236
|
+
align-items: center;
|
|
237
|
+
justify-content: center;
|
|
238
|
+
width: 1.9rem;
|
|
239
|
+
height: 1.9rem;
|
|
240
|
+
border: 2px solid var(--ds-border-strong);
|
|
241
|
+
background-color: var(--ds-surface-base);
|
|
242
|
+
color: var(--ds-text-primary);
|
|
243
|
+
cursor: pointer;
|
|
244
|
+
opacity: 0;
|
|
245
|
+
transition: opacity 0.15s ease, background-color 0.15s ease, color 0.15s ease;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
.docs-codeblock:hover .docs-codeblock-copy,
|
|
249
|
+
.docs-codeblock-copy:focus-visible {
|
|
250
|
+
opacity: 1;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.docs-codeblock-copy:hover {
|
|
254
|
+
background-color: var(--ds-text-primary);
|
|
255
|
+
color: var(--ds-surface-base);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
.docs-codeblock-copy[data-copied='true'] {
|
|
259
|
+
opacity: 1;
|
|
260
|
+
border-color: var(--ds-intent-success);
|
|
261
|
+
color: var(--ds-intent-success);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/* Same reasoning as `.docs-anchor-link` above: 0.6 composited to 2.64:1 on
|
|
265
|
+
* `sketch`, so the copy button failed AA on every touch device. */
|
|
266
|
+
@media (hover: none) {
|
|
267
|
+
.docs-codeblock-copy {
|
|
268
|
+
opacity: 1;
|
|
269
|
+
color: var(--ds-text-muted);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/* ==========================================================================
|
|
274
|
+
Layout shell
|
|
275
|
+
========================================================================== */
|
|
276
|
+
|
|
277
|
+
.docs-layout {
|
|
278
|
+
min-height: 100vh;
|
|
279
|
+
background-color: var(--ds-surface-base);
|
|
280
|
+
color: var(--ds-text-primary);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
.docs-layout-body {
|
|
284
|
+
display: grid;
|
|
285
|
+
grid-template-columns: 1fr;
|
|
286
|
+
align-items: start;
|
|
287
|
+
max-width: 100rem;
|
|
288
|
+
margin: 0 auto;
|
|
289
|
+
width: 100%;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
.docs-layout-main {
|
|
293
|
+
min-width: 0; /* lets long code blocks scroll instead of stretching the grid */
|
|
294
|
+
padding: 2rem 1.25rem 4rem;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.docs-layout-sidebar,
|
|
298
|
+
.docs-layout-toc {
|
|
299
|
+
position: sticky;
|
|
300
|
+
top: var(--docs-header-height);
|
|
301
|
+
max-height: calc(100vh - var(--docs-header-height));
|
|
302
|
+
overflow-y: auto;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
.docs-layout-sidebar {
|
|
306
|
+
width: var(--docs-sidebar-width);
|
|
307
|
+
padding: 1.5rem 1rem;
|
|
308
|
+
border-right: 2px solid var(--ds-border-strong);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
.docs-layout-toc {
|
|
312
|
+
width: var(--docs-toc-width);
|
|
313
|
+
padding: 1.5rem 1rem;
|
|
314
|
+
border-left: 2px solid var(--ds-border-strong);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
.docs-layout-scrim {
|
|
318
|
+
position: fixed;
|
|
319
|
+
inset: 0;
|
|
320
|
+
z-index: var(--ds-layer-overlay);
|
|
321
|
+
background-color: var(--ds-surface-overlay);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/* Mobile: the sidebar is an off-canvas drawer. */
|
|
325
|
+
@media (max-width: 1023px) {
|
|
326
|
+
.docs-layout-sidebar {
|
|
327
|
+
position: fixed;
|
|
328
|
+
top: var(--docs-header-height);
|
|
329
|
+
left: 0;
|
|
330
|
+
bottom: 0;
|
|
331
|
+
/*
|
|
332
|
+
* One above the scrim it covers. The layer scale has four rungs and this
|
|
333
|
+
* chrome needs five — scrim, then sidebar, then header — so the extra step
|
|
334
|
+
* is expressed as an offset from the token rather than as a new literal.
|
|
335
|
+
*/
|
|
336
|
+
z-index: calc(var(--ds-layer-overlay) + 1);
|
|
337
|
+
max-height: none;
|
|
338
|
+
background-color: var(--ds-surface-base);
|
|
339
|
+
transform: translateX(-100%);
|
|
340
|
+
transition: transform 0.2s ease;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
.docs-layout-sidebar[data-open='true'] {
|
|
344
|
+
transform: translateX(0);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
@media (min-width: 1024px) {
|
|
349
|
+
.docs-layout-body {
|
|
350
|
+
grid-template-columns: var(--docs-sidebar-width) minmax(0, 1fr);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
.docs-layout-main {
|
|
354
|
+
padding: 2.5rem 2.5rem 5rem;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
.docs-layout-scrim {
|
|
358
|
+
display: none;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
@media (min-width: 1280px) {
|
|
363
|
+
.docs-layout-body {
|
|
364
|
+
grid-template-columns: var(--docs-sidebar-width) minmax(0, 1fr) var(--docs-toc-width);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/* Below xl there is no third column to put the contents rail in. */
|
|
369
|
+
@media (max-width: 1279px) {
|
|
370
|
+
.docs-layout-toc {
|
|
371
|
+
display: none;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/* ==========================================================================
|
|
376
|
+
Header
|
|
377
|
+
========================================================================== */
|
|
378
|
+
|
|
379
|
+
.docs-header {
|
|
380
|
+
position: sticky;
|
|
381
|
+
top: 0;
|
|
382
|
+
z-index: var(--ds-layer-top);
|
|
383
|
+
display: flex;
|
|
384
|
+
align-items: center;
|
|
385
|
+
gap: 1rem;
|
|
386
|
+
padding: 0.75rem 1.25rem;
|
|
387
|
+
border-bottom: 2px solid var(--ds-border-strong);
|
|
388
|
+
background-color: var(--ds-surface-base);
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
.docs-header-left {
|
|
392
|
+
display: flex;
|
|
393
|
+
align-items: center;
|
|
394
|
+
gap: 0.75rem;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
.docs-header-right {
|
|
398
|
+
display: flex;
|
|
399
|
+
align-items: center;
|
|
400
|
+
gap: 0.5rem;
|
|
401
|
+
margin-left: auto;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
.docs-header-brand {
|
|
405
|
+
display: inline-flex;
|
|
406
|
+
align-items: center;
|
|
407
|
+
gap: 0.5rem;
|
|
408
|
+
font-family: var(--ds-font-display);
|
|
409
|
+
font-size: 1rem;
|
|
410
|
+
font-weight: 800;
|
|
411
|
+
letter-spacing: 0.04em;
|
|
412
|
+
text-transform: uppercase;
|
|
413
|
+
text-decoration: none;
|
|
414
|
+
color: var(--ds-text-primary);
|
|
415
|
+
white-space: nowrap;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
.docs-header-brand:hover {
|
|
419
|
+
color: var(--ds-accent-primary);
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
.docs-header-brand-icon {
|
|
423
|
+
width: 1.15rem;
|
|
424
|
+
height: 1.15rem;
|
|
425
|
+
color: var(--ds-accent-primary);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
.docs-header-nav {
|
|
429
|
+
display: flex;
|
|
430
|
+
align-items: center;
|
|
431
|
+
gap: 1.25rem;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
.docs-header-nav-link {
|
|
435
|
+
font-family: var(--ds-font-mono);
|
|
436
|
+
font-size: 0.8rem;
|
|
437
|
+
font-weight: 700;
|
|
438
|
+
text-transform: uppercase;
|
|
439
|
+
letter-spacing: 0.04em;
|
|
440
|
+
text-decoration: none;
|
|
441
|
+
color: var(--ds-text-primary);
|
|
442
|
+
opacity: 0.75;
|
|
443
|
+
padding-bottom: 2px;
|
|
444
|
+
border-bottom: 2px solid transparent;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
.docs-header-nav-link:hover {
|
|
448
|
+
opacity: 1;
|
|
449
|
+
color: var(--ds-accent-primary);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
.docs-header-nav-link[aria-current='page'] {
|
|
453
|
+
opacity: 1;
|
|
454
|
+
color: var(--ds-accent-primary);
|
|
455
|
+
border-bottom-color: var(--ds-accent-primary);
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
.docs-header-icon-btn {
|
|
459
|
+
display: inline-flex;
|
|
460
|
+
align-items: center;
|
|
461
|
+
justify-content: center;
|
|
462
|
+
width: 2rem;
|
|
463
|
+
height: 2rem;
|
|
464
|
+
border: 2px solid var(--ds-border-strong);
|
|
465
|
+
background-color: var(--ds-surface-base);
|
|
466
|
+
color: var(--ds-text-primary);
|
|
467
|
+
cursor: pointer;
|
|
468
|
+
transition: background-color 0.15s ease, color 0.15s ease;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
.docs-header-icon-btn:hover {
|
|
472
|
+
background-color: var(--ds-accent-primary);
|
|
473
|
+
color: var(--ds-surface-base);
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
.docs-header-search {
|
|
477
|
+
display: inline-flex;
|
|
478
|
+
align-items: center;
|
|
479
|
+
gap: 0.5rem;
|
|
480
|
+
height: 2rem;
|
|
481
|
+
padding: 0 0.6rem;
|
|
482
|
+
border: 2px solid var(--ds-border-strong);
|
|
483
|
+
background-color: var(--ds-surface-base);
|
|
484
|
+
color: var(--ds-text-primary);
|
|
485
|
+
font-family: var(--ds-font-mono);
|
|
486
|
+
font-size: 0.7rem;
|
|
487
|
+
font-weight: 700;
|
|
488
|
+
letter-spacing: 0.06em;
|
|
489
|
+
cursor: pointer;
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
.docs-header-search:hover {
|
|
493
|
+
background-color: var(--ds-accent-primary);
|
|
494
|
+
color: var(--ds-surface-base);
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
.docs-header-kbd {
|
|
498
|
+
padding: 0 0.3rem;
|
|
499
|
+
border: 1px solid currentColor;
|
|
500
|
+
font-size: 0.65rem;
|
|
501
|
+
opacity: 0.8;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
/* The sidebar toggle only exists below lg, where the rail is a drawer. */
|
|
505
|
+
@media (min-width: 1024px) {
|
|
506
|
+
.docs-header-sidebar-toggle {
|
|
507
|
+
display: none;
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
@media (max-width: 1023px) {
|
|
512
|
+
.docs-header-nav {
|
|
513
|
+
display: none;
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
@media (max-width: 639px) {
|
|
518
|
+
.docs-header-search-label,
|
|
519
|
+
.docs-header-kbd {
|
|
520
|
+
display: none;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
/* ==========================================================================
|
|
525
|
+
Sidebar
|
|
526
|
+
========================================================================== */
|
|
527
|
+
|
|
528
|
+
.docs-sidebar-label,
|
|
529
|
+
.docs-toc-label {
|
|
530
|
+
margin: 0 0 0.75rem;
|
|
531
|
+
font-family: var(--ds-font-display);
|
|
532
|
+
font-size: 0.7rem;
|
|
533
|
+
font-weight: 800;
|
|
534
|
+
letter-spacing: 0.12em;
|
|
535
|
+
text-transform: uppercase;
|
|
536
|
+
color: var(--ds-accent-secondary);
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
.docs-sidebar-list {
|
|
540
|
+
list-style: none;
|
|
541
|
+
margin: 0;
|
|
542
|
+
padding: 0;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
/* Nested levels indent and gain a rule to make the hierarchy legible. */
|
|
546
|
+
.docs-sidebar-list[data-depth='1'],
|
|
547
|
+
.docs-sidebar-list[data-depth='2'],
|
|
548
|
+
.docs-sidebar-list[data-depth='3'] {
|
|
549
|
+
margin-left: 0.55rem;
|
|
550
|
+
padding-left: 0.55rem;
|
|
551
|
+
border-left: 2px solid var(--ds-border-subtle);
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
.docs-sidebar-group {
|
|
555
|
+
display: flex;
|
|
556
|
+
align-items: center;
|
|
557
|
+
gap: 0.25rem;
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
.docs-sidebar-toggle {
|
|
561
|
+
display: inline-flex;
|
|
562
|
+
align-items: center;
|
|
563
|
+
justify-content: center;
|
|
564
|
+
width: 1.1rem;
|
|
565
|
+
height: 1.1rem;
|
|
566
|
+
flex: none;
|
|
567
|
+
border: 0;
|
|
568
|
+
background: none;
|
|
569
|
+
color: var(--ds-accent-primary);
|
|
570
|
+
cursor: pointer;
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
.docs-sidebar-link {
|
|
574
|
+
display: block;
|
|
575
|
+
width: 100%;
|
|
576
|
+
padding: 0.3rem 0.4rem;
|
|
577
|
+
border: 0;
|
|
578
|
+
border-left: 2px solid transparent;
|
|
579
|
+
background: none;
|
|
580
|
+
font-family: var(--ds-font-mono);
|
|
581
|
+
font-size: 0.8rem;
|
|
582
|
+
line-height: 1.4;
|
|
583
|
+
text-align: left;
|
|
584
|
+
text-decoration: none;
|
|
585
|
+
color: var(--ds-text-primary);
|
|
586
|
+
opacity: 0.72;
|
|
587
|
+
cursor: pointer;
|
|
588
|
+
transition: opacity 0.12s ease, color 0.12s ease, border-color 0.12s ease;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
.docs-sidebar-link:hover {
|
|
592
|
+
opacity: 1;
|
|
593
|
+
color: var(--ds-accent-primary);
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
.docs-sidebar-link[data-active='true'] {
|
|
597
|
+
opacity: 1;
|
|
598
|
+
font-weight: 700;
|
|
599
|
+
color: var(--ds-accent-primary);
|
|
600
|
+
border-left-color: var(--ds-accent-primary);
|
|
601
|
+
background-color: color-mix(in oklab, var(--ds-accent-primary) 12%, transparent);
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
.docs-sidebar-group-label {
|
|
605
|
+
font-weight: 700;
|
|
606
|
+
text-transform: uppercase;
|
|
607
|
+
letter-spacing: 0.04em;
|
|
608
|
+
opacity: 0.9;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
/*
|
|
612
|
+
* Muted by Role, not by opacity. At 0.55 this composited to 3.45:1 on `sketch`
|
|
613
|
+
* — readable text below AA, and invisible to `check:contrast`, which reads the
|
|
614
|
+
* declared foreground before `opacity` is applied. `text.muted` is measured.
|
|
615
|
+
*/
|
|
616
|
+
.docs-sidebar-link-static {
|
|
617
|
+
cursor: default;
|
|
618
|
+
color: var(--ds-text-muted);
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
/* ==========================================================================
|
|
622
|
+
Table of contents
|
|
623
|
+
========================================================================== */
|
|
624
|
+
|
|
625
|
+
.docs-toc-list {
|
|
626
|
+
list-style: none;
|
|
627
|
+
margin: 0;
|
|
628
|
+
padding: 0;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
.docs-toc-link {
|
|
632
|
+
display: block;
|
|
633
|
+
padding: 0.22rem 0.5rem;
|
|
634
|
+
border-left: 2px solid var(--ds-border-subtle);
|
|
635
|
+
font-family: var(--ds-font-mono);
|
|
636
|
+
font-size: 0.75rem;
|
|
637
|
+
line-height: 1.45;
|
|
638
|
+
text-decoration: none;
|
|
639
|
+
color: var(--ds-text-primary);
|
|
640
|
+
opacity: 0.65;
|
|
641
|
+
transition: opacity 0.12s ease, color 0.12s ease, border-color 0.12s ease;
|
|
642
|
+
/* Heading text is arbitrary and often long — `tvs metadata --readonly-only`
|
|
643
|
+
* has no break opportunity the rail can use on its own. */
|
|
644
|
+
overflow-wrap: anywhere;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
.docs-toc-link:hover {
|
|
648
|
+
opacity: 1;
|
|
649
|
+
color: var(--ds-accent-primary);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
.docs-toc-link[data-active='true'] {
|
|
653
|
+
opacity: 1;
|
|
654
|
+
font-weight: 700;
|
|
655
|
+
color: var(--ds-accent-primary);
|
|
656
|
+
border-left-color: var(--ds-accent-primary);
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
/* ==========================================================================
|
|
660
|
+
Breadcrumbs
|
|
661
|
+
========================================================================== */
|
|
662
|
+
|
|
663
|
+
.docs-breadcrumbs-list {
|
|
664
|
+
display: flex;
|
|
665
|
+
flex-wrap: wrap;
|
|
666
|
+
align-items: center;
|
|
667
|
+
gap: 0.4rem;
|
|
668
|
+
list-style: none;
|
|
669
|
+
margin: 0 0 1.25rem;
|
|
670
|
+
padding: 0;
|
|
671
|
+
font-family: var(--ds-font-mono);
|
|
672
|
+
font-size: 0.72rem;
|
|
673
|
+
text-transform: uppercase;
|
|
674
|
+
letter-spacing: 0.06em;
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
.docs-breadcrumbs-link {
|
|
678
|
+
color: var(--ds-text-primary);
|
|
679
|
+
opacity: 0.65;
|
|
680
|
+
text-decoration: none;
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
.docs-breadcrumbs-link:hover {
|
|
684
|
+
opacity: 1;
|
|
685
|
+
color: var(--ds-accent-primary);
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
.docs-breadcrumbs-sep {
|
|
689
|
+
color: var(--ds-accent-tertiary);
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
.docs-breadcrumbs-current {
|
|
693
|
+
color: var(--ds-accent-secondary);
|
|
694
|
+
font-weight: 700;
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
/* ==========================================================================
|
|
698
|
+
Prev/next pager
|
|
699
|
+
========================================================================== */
|
|
700
|
+
|
|
701
|
+
.docs-pager {
|
|
702
|
+
display: grid;
|
|
703
|
+
grid-template-columns: 1fr 1fr;
|
|
704
|
+
gap: 1rem;
|
|
705
|
+
margin-top: 3.5rem;
|
|
706
|
+
padding-top: 1.5rem;
|
|
707
|
+
border-top: 2px solid var(--ds-border-strong);
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
.docs-pager-link {
|
|
711
|
+
display: flex;
|
|
712
|
+
flex-direction: column;
|
|
713
|
+
gap: 0.35rem;
|
|
714
|
+
padding: 0.85rem 1rem;
|
|
715
|
+
border: 2px solid var(--ds-border-strong);
|
|
716
|
+
text-decoration: none;
|
|
717
|
+
color: var(--ds-text-primary);
|
|
718
|
+
transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease;
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
.docs-pager-link:hover {
|
|
722
|
+
transform: translate(-2px, -2px);
|
|
723
|
+
border-color: var(--ds-accent-primary);
|
|
724
|
+
box-shadow: 4px 4px 0 0 var(--ds-accent-primary);
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
.docs-pager-next {
|
|
728
|
+
text-align: right;
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
.docs-pager-dir {
|
|
732
|
+
display: inline-flex;
|
|
733
|
+
align-items: center;
|
|
734
|
+
gap: 0.3rem;
|
|
735
|
+
font-family: var(--ds-font-mono);
|
|
736
|
+
font-size: 0.65rem;
|
|
737
|
+
font-weight: 700;
|
|
738
|
+
letter-spacing: 0.1em;
|
|
739
|
+
color: var(--ds-accent-tertiary);
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
.docs-pager-next .docs-pager-dir {
|
|
743
|
+
justify-content: flex-end;
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
.docs-pager-label {
|
|
747
|
+
font-family: var(--ds-font-display);
|
|
748
|
+
font-size: 0.95rem;
|
|
749
|
+
font-weight: 800;
|
|
750
|
+
text-transform: uppercase;
|
|
751
|
+
line-height: 1.25;
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
@media (max-width: 639px) {
|
|
755
|
+
.docs-pager {
|
|
756
|
+
grid-template-columns: 1fr;
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
.docs-pager-next {
|
|
760
|
+
text-align: left;
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
.docs-pager-next .docs-pager-dir {
|
|
764
|
+
justify-content: flex-start;
|
|
765
|
+
}
|
|
766
|
+
}
|