@misoto22/folio 0.0.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +88 -0
- package/CLAUDE.md +1 -0
- package/LICENSE +21 -0
- package/README.md +208 -2
- package/bin/folio-design.mjs +277 -0
- package/bin/migrate-legacy.mjs +81 -0
- package/dist/agent/Accordion.md +65 -0
- package/dist/agent/Actions.md +49 -0
- package/dist/agent/Alert.md +65 -0
- package/dist/agent/AppShell.md +69 -0
- package/dist/agent/ArchitectureFigure.md +72 -0
- package/dist/agent/AreaChart.md +94 -0
- package/dist/agent/Article.md +65 -0
- package/dist/agent/AspectRatio.md +58 -0
- package/dist/agent/Avatar.md +53 -0
- package/dist/agent/Badge.md +62 -0
- package/dist/agent/BarChart.md +93 -0
- package/dist/agent/BarList.md +67 -0
- package/dist/agent/BigNumber.md +70 -0
- package/dist/agent/BoxPlot.md +82 -0
- package/dist/agent/Breadcrumb.md +55 -0
- package/dist/agent/BulletChart.md +71 -0
- package/dist/agent/Button.md +81 -0
- package/dist/agent/Calendar.md +77 -0
- package/dist/agent/CalendarHeatmap.md +75 -0
- package/dist/agent/Card.md +72 -0
- package/dist/agent/Checkbox.md +57 -0
- package/dist/agent/Code.md +51 -0
- package/dist/agent/CodeBlock.md +77 -0
- package/dist/agent/Collapsible.md +68 -0
- package/dist/agent/Collection.md +169 -0
- package/dist/agent/ColorPicker.md +76 -0
- package/dist/agent/Combobox.md +77 -0
- package/dist/agent/Command.md +122 -0
- package/dist/agent/ComposedChart.md +82 -0
- package/dist/agent/Contact.md +90 -0
- package/dist/agent/Content.md +70 -0
- package/dist/agent/ContextMenu.md +93 -0
- package/dist/agent/Conversation.md +247 -0
- package/dist/agent/DataflowFigure.md +49 -0
- package/dist/agent/DatePicker.md +104 -0
- package/dist/agent/DescriptionList.md +69 -0
- package/dist/agent/Diagram.md +71 -0
- package/dist/agent/DiagramCanvas.md +71 -0
- package/dist/agent/DiagramExportMenu.md +65 -0
- package/dist/agent/DiagramInspector.md +73 -0
- package/dist/agent/DiagramLegend.md +56 -0
- package/dist/agent/DiagramMinimap.md +69 -0
- package/dist/agent/DiagramToolbar.md +70 -0
- package/dist/agent/Dialog.md +76 -0
- package/dist/agent/DropdownMenu.md +110 -0
- package/dist/agent/EmptyState.md +63 -0
- package/dist/agent/ErrorState.md +67 -0
- package/dist/agent/Evidence.md +165 -0
- package/dist/agent/Facet.md +107 -0
- package/dist/agent/Field.md +79 -0
- package/dist/agent/FigureBand.md +49 -0
- package/dist/agent/FloatingIconButton.md +61 -0
- package/dist/agent/FunnelChart.md +75 -0
- package/dist/agent/Heading.md +65 -0
- package/dist/agent/Heatmap.md +78 -0
- package/dist/agent/Histogram.md +88 -0
- package/dist/agent/Input.md +52 -0
- package/dist/agent/Kbd.md +48 -0
- package/dist/agent/LifecycleFigure.md +50 -0
- package/dist/agent/LineChart.md +85 -0
- package/dist/agent/LinkArrow.md +49 -0
- package/dist/agent/Markdown.md +69 -0
- package/dist/agent/Media.md +261 -0
- package/dist/agent/Metric.md +70 -0
- package/dist/agent/Metrics.md +114 -0
- package/dist/agent/Music.md +86 -0
- package/dist/agent/NativeSelect.md +62 -0
- package/dist/agent/NavItem.md +56 -0
- package/dist/agent/NumberField.md +73 -0
- package/dist/agent/PageHeader.md +69 -0
- package/dist/agent/Pagination.md +70 -0
- package/dist/agent/PieChart.md +80 -0
- package/dist/agent/Popover.md +80 -0
- package/dist/agent/Portfolio.md +93 -0
- package/dist/agent/PortfolioIndex.md +34 -0
- package/dist/agent/Progress.md +58 -0
- package/dist/agent/RadarChart.md +79 -0
- package/dist/agent/RadialChart.md +81 -0
- package/dist/agent/RadioGroup.md +66 -0
- package/dist/agent/Reading.md +233 -0
- package/dist/agent/Recovery.md +72 -0
- package/dist/agent/SankeyChart.md +85 -0
- package/dist/agent/ScatterChart.md +80 -0
- package/dist/agent/ScrollArea.md +62 -0
- package/dist/agent/SearchPalette.md +51 -0
- package/dist/agent/SearchableMenu.md +69 -0
- package/dist/agent/Select.md +102 -0
- package/dist/agent/Separator.md +60 -0
- package/dist/agent/SequenceFigure.md +51 -0
- package/dist/agent/Sheet.md +82 -0
- package/dist/agent/Sidebar.md +194 -0
- package/dist/agent/SiteNavigation.md +62 -0
- package/dist/agent/SiteShell.md +67 -0
- package/dist/agent/Skeleton.md +96 -0
- package/dist/agent/Slider.md +67 -0
- package/dist/agent/Sparkline.md +68 -0
- package/dist/agent/Spinner.md +62 -0
- package/dist/agent/StatusDot.md +56 -0
- package/dist/agent/StatusPill.md +55 -0
- package/dist/agent/Steps.md +68 -0
- package/dist/agent/Switch.md +50 -0
- package/dist/agent/Table.md +111 -0
- package/dist/agent/Tabs.md +71 -0
- package/dist/agent/Tag.md +67 -0
- package/dist/agent/Text.md +66 -0
- package/dist/agent/Textarea.md +46 -0
- package/dist/agent/Timeline.md +114 -0
- package/dist/agent/Timestamp.md +65 -0
- package/dist/agent/Toast.md +51 -0
- package/dist/agent/ToggleGroup.md +67 -0
- package/dist/agent/Toolbar.md +72 -0
- package/dist/agent/Tooltip.md +74 -0
- package/dist/agent/TreemapChart.md +76 -0
- package/dist/agent/WaterfallChart.md +86 -0
- package/dist/agent/Workbench.md +142 -0
- package/dist/agent/WorkflowFigure.md +51 -0
- package/dist/agent/catalog.json +8055 -0
- package/dist/agent/index.md +185 -0
- package/dist/article.css +407 -0
- package/dist/charts/AreaChart/AreaChart.d.ts +198 -0
- package/dist/charts/AreaChart/AreaChart.js +479 -0
- package/dist/charts/AreaChart/AreaChart.js.map +1 -0
- package/dist/charts/BarChart/BarChart.d.ts +190 -0
- package/dist/charts/BarChart/BarChart.js +599 -0
- package/dist/charts/BarChart/BarChart.js.map +1 -0
- package/dist/charts/BarList/BarList.d.ts +65 -0
- package/dist/charts/BarList/BarList.js +79 -0
- package/dist/charts/BarList/BarList.js.map +1 -0
- package/dist/charts/BigNumber/BigNumber.d.ts +72 -0
- package/dist/charts/BigNumber/BigNumber.js +51 -0
- package/dist/charts/BigNumber/BigNumber.js.map +1 -0
- package/dist/charts/BoxPlot/BoxPlot.d.ts +177 -0
- package/dist/charts/BoxPlot/BoxPlot.js +497 -0
- package/dist/charts/BoxPlot/BoxPlot.js.map +1 -0
- package/dist/charts/BulletChart/BulletChart.d.ts +100 -0
- package/dist/charts/BulletChart/BulletChart.js +197 -0
- package/dist/charts/BulletChart/BulletChart.js.map +1 -0
- package/dist/charts/CalendarHeatmap/CalendarHeatmap.d.ts +106 -0
- package/dist/charts/CalendarHeatmap/CalendarHeatmap.js +103 -0
- package/dist/charts/CalendarHeatmap/CalendarHeatmap.js.map +1 -0
- package/dist/charts/ComposedChart/ComposedChart.d.ts +178 -0
- package/dist/charts/ComposedChart/ComposedChart.js +667 -0
- package/dist/charts/ComposedChart/ComposedChart.js.map +1 -0
- package/dist/charts/Facet/Facet.d.ts +240 -0
- package/dist/charts/Facet/Facet.js +133 -0
- package/dist/charts/Facet/Facet.js.map +1 -0
- package/dist/charts/Facet/panels.d.ts +187 -0
- package/dist/charts/Facet/panels.js +203 -0
- package/dist/charts/Facet/panels.js.map +1 -0
- package/dist/charts/FunnelChart/FunnelChart.d.ts +106 -0
- package/dist/charts/FunnelChart/FunnelChart.js +137 -0
- package/dist/charts/FunnelChart/FunnelChart.js.map +1 -0
- package/dist/charts/Heatmap/Heatmap.d.ts +101 -0
- package/dist/charts/Heatmap/Heatmap.js +125 -0
- package/dist/charts/Heatmap/Heatmap.js.map +1 -0
- package/dist/charts/Histogram/Histogram.d.ts +188 -0
- package/dist/charts/Histogram/Histogram.js +382 -0
- package/dist/charts/Histogram/Histogram.js.map +1 -0
- package/dist/charts/LineChart/LineChart.d.ts +174 -0
- package/dist/charts/LineChart/LineChart.js +485 -0
- package/dist/charts/LineChart/LineChart.js.map +1 -0
- package/dist/charts/PieChart/PieChart.d.ts +140 -0
- package/dist/charts/PieChart/PieChart.js +317 -0
- package/dist/charts/PieChart/PieChart.js.map +1 -0
- package/dist/charts/RadarChart/RadarChart.d.ts +135 -0
- package/dist/charts/RadarChart/RadarChart.js +303 -0
- package/dist/charts/RadarChart/RadarChart.js.map +1 -0
- package/dist/charts/RadialChart/RadialChart.d.ts +142 -0
- package/dist/charts/RadialChart/RadialChart.js +279 -0
- package/dist/charts/RadialChart/RadialChart.js.map +1 -0
- package/dist/charts/SankeyChart/SankeyChart.d.ts +149 -0
- package/dist/charts/SankeyChart/SankeyChart.js +509 -0
- package/dist/charts/SankeyChart/SankeyChart.js.map +1 -0
- package/dist/charts/ScatterChart/ScatterChart.d.ts +149 -0
- package/dist/charts/ScatterChart/ScatterChart.js +275 -0
- package/dist/charts/ScatterChart/ScatterChart.js.map +1 -0
- package/dist/charts/Sparkline/Sparkline.d.ts +53 -0
- package/dist/charts/Sparkline/Sparkline.js +95 -0
- package/dist/charts/Sparkline/Sparkline.js.map +1 -0
- package/dist/charts/TreemapChart/TreemapChart.d.ts +98 -0
- package/dist/charts/TreemapChart/TreemapChart.js +127 -0
- package/dist/charts/TreemapChart/TreemapChart.js.map +1 -0
- package/dist/charts/WaterfallChart/WaterfallChart.d.ts +164 -0
- package/dist/charts/WaterfallChart/WaterfallChart.js +321 -0
- package/dist/charts/WaterfallChart/WaterfallChart.js.map +1 -0
- package/dist/charts/index.d.ts +43 -0
- package/dist/charts/index.js +130 -0
- package/dist/charts/index.js.map +1 -0
- package/dist/charts/lib/annotations.d.ts +103 -0
- package/dist/charts/lib/annotations.js +99 -0
- package/dist/charts/lib/annotations.js.map +1 -0
- package/dist/charts/lib/axis.d.ts +18 -0
- package/dist/charts/lib/axis.js +21 -0
- package/dist/charts/lib/axis.js.map +1 -0
- package/dist/charts/lib/background.d.ts +33 -0
- package/dist/charts/lib/background.js +173 -0
- package/dist/charts/lib/background.js.map +1 -0
- package/dist/charts/lib/brush.d.ts +94 -0
- package/dist/charts/lib/brush.js +535 -0
- package/dist/charts/lib/brush.js.map +1 -0
- package/dist/charts/lib/chart.d.ts +94 -0
- package/dist/charts/lib/chart.js +149 -0
- package/dist/charts/lib/chart.js.map +1 -0
- package/dist/charts/lib/dot.d.ts +29 -0
- package/dist/charts/lib/dot.js +78 -0
- package/dist/charts/lib/dot.js.map +1 -0
- package/dist/charts/lib/empty.d.ts +31 -0
- package/dist/charts/lib/empty.js +24 -0
- package/dist/charts/lib/empty.js.map +1 -0
- package/dist/charts/lib/export.d.ts +94 -0
- package/dist/charts/lib/export.js +62 -0
- package/dist/charts/lib/export.js.map +1 -0
- package/dist/charts/lib/figure.d.ts +81 -0
- package/dist/charts/lib/figure.js +62 -0
- package/dist/charts/lib/figure.js.map +1 -0
- package/dist/charts/lib/format.d.ts +46 -0
- package/dist/charts/lib/format.js +56 -0
- package/dist/charts/lib/format.js.map +1 -0
- package/dist/charts/lib/legend.d.ts +45 -0
- package/dist/charts/lib/legend.js +117 -0
- package/dist/charts/lib/legend.js.map +1 -0
- package/dist/charts/lib/loading.d.ts +48 -0
- package/dist/charts/lib/loading.js +105 -0
- package/dist/charts/lib/loading.js.map +1 -0
- package/dist/charts/lib/paint.d.ts +154 -0
- package/dist/charts/lib/paint.js +551 -0
- package/dist/charts/lib/paint.js.map +1 -0
- package/dist/charts/lib/scale.d.ts +23 -0
- package/dist/charts/lib/scale.js +13 -0
- package/dist/charts/lib/scale.js.map +1 -0
- package/dist/charts/lib/selection.d.ts +20 -0
- package/dist/charts/lib/selection.js +18 -0
- package/dist/charts/lib/selection.js.map +1 -0
- package/dist/charts/lib/sonify-control.d.ts +163 -0
- package/dist/charts/lib/sonify-control.js +172 -0
- package/dist/charts/lib/sonify-control.js.map +1 -0
- package/dist/charts/lib/sonify.d.ts +248 -0
- package/dist/charts/lib/sonify.js +262 -0
- package/dist/charts/lib/sonify.js.map +1 -0
- package/dist/charts/lib/toolbar.d.ts +144 -0
- package/dist/charts/lib/toolbar.js +156 -0
- package/dist/charts/lib/toolbar.js.map +1 -0
- package/dist/charts/lib/tooltip.d.ts +59 -0
- package/dist/charts/lib/tooltip.js +135 -0
- package/dist/charts/lib/tooltip.js.map +1 -0
- package/dist/charts/lib/values.d.ts +56 -0
- package/dist/charts/lib/values.js +71 -0
- package/dist/charts/lib/values.js.map +1 -0
- package/dist/charts/lib/zoom.d.ts +139 -0
- package/dist/charts/lib/zoom.js +314 -0
- package/dist/charts/lib/zoom.js.map +1 -0
- package/dist/components/Accordion/Accordion.d.ts +34 -0
- package/dist/components/Accordion/Accordion.js +43 -0
- package/dist/components/Accordion/Accordion.js.map +1 -0
- package/dist/components/Alert/Alert.d.ts +32 -0
- package/dist/components/Alert/Alert.js +49 -0
- package/dist/components/Alert/Alert.js.map +1 -0
- package/dist/components/AppShell/AppShell.d.ts +58 -0
- package/dist/components/AppShell/AppShell.js +126 -0
- package/dist/components/AppShell/AppShell.js.map +1 -0
- package/dist/components/Article/Article.d.ts +58 -0
- package/dist/components/Article/Article.js +34 -0
- package/dist/components/Article/Article.js.map +1 -0
- package/dist/components/AspectRatio/AspectRatio.d.ts +46 -0
- package/dist/components/AspectRatio/AspectRatio.js +33 -0
- package/dist/components/AspectRatio/AspectRatio.js.map +1 -0
- package/dist/components/Avatar/Avatar.d.ts +38 -0
- package/dist/components/Avatar/Avatar.js +44 -0
- package/dist/components/Avatar/Avatar.js.map +1 -0
- package/dist/components/Badge/Badge.d.ts +30 -0
- package/dist/components/Badge/Badge.js +29 -0
- package/dist/components/Badge/Badge.js.map +1 -0
- package/dist/components/Breadcrumb/Breadcrumb.d.ts +37 -0
- package/dist/components/Breadcrumb/Breadcrumb.js +46 -0
- package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/components/Button/Button.d.ts +70 -0
- package/dist/components/Button/Button.js +95 -0
- package/dist/components/Button/Button.js.map +1 -0
- package/dist/components/Calendar/Calendar.d.ts +54 -0
- package/dist/components/Calendar/Calendar.js +369 -0
- package/dist/components/Calendar/Calendar.js.map +1 -0
- package/dist/components/Card/Card.d.ts +55 -0
- package/dist/components/Card/Card.js +64 -0
- package/dist/components/Card/Card.js.map +1 -0
- package/dist/components/Checkbox/Checkbox.d.ts +26 -0
- package/dist/components/Checkbox/Checkbox.js +34 -0
- package/dist/components/Checkbox/Checkbox.js.map +1 -0
- package/dist/components/Code/Code.d.ts +30 -0
- package/dist/components/Code/Code.js +21 -0
- package/dist/components/Code/Code.js.map +1 -0
- package/dist/components/CodeBlock/CodeBlock.d.ts +145 -0
- package/dist/components/CodeBlock/CodeBlock.js +114 -0
- package/dist/components/CodeBlock/CodeBlock.js.map +1 -0
- package/dist/components/Collapsible/Collapsible.d.ts +45 -0
- package/dist/components/Collapsible/Collapsible.js +60 -0
- package/dist/components/Collapsible/Collapsible.js.map +1 -0
- package/dist/components/ColorPicker/ColorPicker.d.ts +67 -0
- package/dist/components/ColorPicker/ColorPicker.js +334 -0
- package/dist/components/ColorPicker/ColorPicker.js.map +1 -0
- package/dist/components/Combobox/Combobox.d.ts +77 -0
- package/dist/components/Combobox/Combobox.js +170 -0
- package/dist/components/Combobox/Combobox.js.map +1 -0
- package/dist/components/Command/Command.d.ts +125 -0
- package/dist/components/Command/Command.js +204 -0
- package/dist/components/Command/Command.js.map +1 -0
- package/dist/components/ContextMenu/ContextMenu.d.ts +63 -0
- package/dist/components/ContextMenu/ContextMenu.js +109 -0
- package/dist/components/ContextMenu/ContextMenu.js.map +1 -0
- package/dist/components/DatePicker/DatePicker.d.ts +130 -0
- package/dist/components/DatePicker/DatePicker.js +257 -0
- package/dist/components/DatePicker/DatePicker.js.map +1 -0
- package/dist/components/DescriptionList/DescriptionList.d.ts +73 -0
- package/dist/components/DescriptionList/DescriptionList.js +35 -0
- package/dist/components/DescriptionList/DescriptionList.js.map +1 -0
- package/dist/components/Diagram/Diagram.d.ts +86 -0
- package/dist/components/Diagram/Diagram.js +211 -0
- package/dist/components/Diagram/Diagram.js.map +1 -0
- package/dist/components/Dialog/Dialog.d.ts +63 -0
- package/dist/components/Dialog/Dialog.js +90 -0
- package/dist/components/Dialog/Dialog.js.map +1 -0
- package/dist/components/DropdownMenu/DropdownMenu.d.ts +87 -0
- package/dist/components/DropdownMenu/DropdownMenu.js +120 -0
- package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -0
- package/dist/components/EmptyState/EmptyState.d.ts +55 -0
- package/dist/components/EmptyState/EmptyState.js +32 -0
- package/dist/components/EmptyState/EmptyState.js.map +1 -0
- package/dist/components/ErrorState/ErrorState.d.ts +55 -0
- package/dist/components/ErrorState/ErrorState.js +41 -0
- package/dist/components/ErrorState/ErrorState.js.map +1 -0
- package/dist/components/Field/Field.d.ts +111 -0
- package/dist/components/Field/Field.js +95 -0
- package/dist/components/Field/Field.js.map +1 -0
- package/dist/components/Field/field-control.d.ts +31 -0
- package/dist/components/Field/field-control.js +12 -0
- package/dist/components/Field/field-control.js.map +1 -0
- package/dist/components/FigureBand/FigureBand.d.ts +31 -0
- package/dist/components/FigureBand/FigureBand.js +51 -0
- package/dist/components/FigureBand/FigureBand.js.map +1 -0
- package/dist/components/FloatingIconButton/FloatingIconButton.d.ts +29 -0
- package/dist/components/FloatingIconButton/FloatingIconButton.js +34 -0
- package/dist/components/FloatingIconButton/FloatingIconButton.js.map +1 -0
- package/dist/components/Heading/Heading.d.ts +62 -0
- package/dist/components/Heading/Heading.js +44 -0
- package/dist/components/Heading/Heading.js.map +1 -0
- package/dist/components/Input/Input.d.ts +22 -0
- package/dist/components/Input/Input.js +21 -0
- package/dist/components/Input/Input.js.map +1 -0
- package/dist/components/Kbd/Kbd.d.ts +27 -0
- package/dist/components/Kbd/Kbd.js +21 -0
- package/dist/components/Kbd/Kbd.js.map +1 -0
- package/dist/components/LinkArrow/LinkArrow.d.ts +24 -0
- package/dist/components/LinkArrow/LinkArrow.js +24 -0
- package/dist/components/LinkArrow/LinkArrow.js.map +1 -0
- package/dist/components/Markdown/Markdown.d.ts +139 -0
- package/dist/components/Markdown/Markdown.js +135 -0
- package/dist/components/Markdown/Markdown.js.map +1 -0
- package/dist/components/Markdown/inline.d.ts +29 -0
- package/dist/components/Markdown/inline.js +74 -0
- package/dist/components/Markdown/inline.js.map +1 -0
- package/dist/components/Markdown/nodes.d.ts +65 -0
- package/dist/components/Markdown/nodes.js +1 -0
- package/dist/components/Markdown/nodes.js.map +1 -0
- package/dist/components/Markdown/parse.d.ts +24 -0
- package/dist/components/Markdown/parse.js +110 -0
- package/dist/components/Markdown/parse.js.map +1 -0
- package/dist/components/Markdown/slug.d.ts +15 -0
- package/dist/components/Markdown/slug.js +7 -0
- package/dist/components/Markdown/slug.js.map +1 -0
- package/dist/components/Metric/Metric.d.ts +61 -0
- package/dist/components/Metric/Metric.js +51 -0
- package/dist/components/Metric/Metric.js.map +1 -0
- package/dist/components/NativeSelect/NativeSelect.d.ts +33 -0
- package/dist/components/NativeSelect/NativeSelect.js +44 -0
- package/dist/components/NativeSelect/NativeSelect.js.map +1 -0
- package/dist/components/NavItem/NavItem.d.ts +39 -0
- package/dist/components/NavItem/NavItem.js +31 -0
- package/dist/components/NavItem/NavItem.js.map +1 -0
- package/dist/components/NumberField/NumberField.d.ts +69 -0
- package/dist/components/NumberField/NumberField.js +162 -0
- package/dist/components/NumberField/NumberField.js.map +1 -0
- package/dist/components/PageHeader/PageHeader.d.ts +92 -0
- package/dist/components/PageHeader/PageHeader.js +37 -0
- package/dist/components/PageHeader/PageHeader.js.map +1 -0
- package/dist/components/Pagination/Pagination.d.ts +67 -0
- package/dist/components/Pagination/Pagination.js +112 -0
- package/dist/components/Pagination/Pagination.js.map +1 -0
- package/dist/components/Popover/Popover.d.ts +39 -0
- package/dist/components/Popover/Popover.js +57 -0
- package/dist/components/Popover/Popover.js.map +1 -0
- package/dist/components/Progress/Progress.d.ts +43 -0
- package/dist/components/Progress/Progress.js +57 -0
- package/dist/components/Progress/Progress.js.map +1 -0
- package/dist/components/RadioGroup/RadioGroup.d.ts +49 -0
- package/dist/components/RadioGroup/RadioGroup.js +53 -0
- package/dist/components/RadioGroup/RadioGroup.js.map +1 -0
- package/dist/components/ScrollArea/ScrollArea.d.ts +46 -0
- package/dist/components/ScrollArea/ScrollArea.js +54 -0
- package/dist/components/ScrollArea/ScrollArea.js.map +1 -0
- package/dist/components/SearchableMenu/SearchableMenu.d.ts +68 -0
- package/dist/components/SearchableMenu/SearchableMenu.js +101 -0
- package/dist/components/SearchableMenu/SearchableMenu.js.map +1 -0
- package/dist/components/Select/Select.d.ts +87 -0
- package/dist/components/Select/Select.js +130 -0
- package/dist/components/Select/Select.js.map +1 -0
- package/dist/components/Separator/Separator.d.ts +48 -0
- package/dist/components/Separator/Separator.js +43 -0
- package/dist/components/Separator/Separator.js.map +1 -0
- package/dist/components/Sheet/Sheet.d.ts +43 -0
- package/dist/components/Sheet/Sheet.js +79 -0
- package/dist/components/Sheet/Sheet.js.map +1 -0
- package/dist/components/Sidebar/Sidebar.d.ts +357 -0
- package/dist/components/Sidebar/Sidebar.js +447 -0
- package/dist/components/Sidebar/Sidebar.js.map +1 -0
- package/dist/components/Skeleton/Skeleton.d.ts +70 -0
- package/dist/components/Skeleton/Skeleton.js +44 -0
- package/dist/components/Skeleton/Skeleton.js.map +1 -0
- package/dist/components/Slider/Slider.d.ts +74 -0
- package/dist/components/Slider/Slider.js +143 -0
- package/dist/components/Slider/Slider.js.map +1 -0
- package/dist/components/Spinner/Spinner.d.ts +58 -0
- package/dist/components/Spinner/Spinner.js +49 -0
- package/dist/components/Spinner/Spinner.js.map +1 -0
- package/dist/components/StatusDot/StatusDot.d.ts +29 -0
- package/dist/components/StatusDot/StatusDot.js +44 -0
- package/dist/components/StatusDot/StatusDot.js.map +1 -0
- package/dist/components/StatusPill/StatusPill.d.ts +30 -0
- package/dist/components/StatusPill/StatusPill.js +37 -0
- package/dist/components/StatusPill/StatusPill.js.map +1 -0
- package/dist/components/Steps/Steps.d.ts +65 -0
- package/dist/components/Steps/Steps.js +25 -0
- package/dist/components/Steps/Steps.js.map +1 -0
- package/dist/components/Switch/Switch.d.ts +23 -0
- package/dist/components/Switch/Switch.js +23 -0
- package/dist/components/Switch/Switch.js.map +1 -0
- package/dist/components/Table/Table.d.ts +116 -0
- package/dist/components/Table/Table.js +137 -0
- package/dist/components/Table/Table.js.map +1 -0
- package/dist/components/Tabs/Tabs.d.ts +37 -0
- package/dist/components/Tabs/Tabs.js +205 -0
- package/dist/components/Tabs/Tabs.js.map +1 -0
- package/dist/components/Tag/Tag.d.ts +87 -0
- package/dist/components/Tag/Tag.js +62 -0
- package/dist/components/Tag/Tag.js.map +1 -0
- package/dist/components/Text/Text.d.ts +62 -0
- package/dist/components/Text/Text.js +30 -0
- package/dist/components/Text/Text.js.map +1 -0
- package/dist/components/Textarea/Textarea.d.ts +20 -0
- package/dist/components/Textarea/Textarea.js +32 -0
- package/dist/components/Textarea/Textarea.js.map +1 -0
- package/dist/components/Timestamp/Timestamp.d.ts +59 -0
- package/dist/components/Timestamp/Timestamp.js +56 -0
- package/dist/components/Timestamp/Timestamp.js.map +1 -0
- package/dist/components/Toast/Toast.d.ts +32 -0
- package/dist/components/Toast/Toast.js +64 -0
- package/dist/components/Toast/Toast.js.map +1 -0
- package/dist/components/ToggleGroup/ToggleGroup.d.ts +46 -0
- package/dist/components/ToggleGroup/ToggleGroup.js +88 -0
- package/dist/components/ToggleGroup/ToggleGroup.js.map +1 -0
- package/dist/components/Toolbar/Toolbar.d.ts +55 -0
- package/dist/components/Toolbar/Toolbar.js +43 -0
- package/dist/components/Toolbar/Toolbar.js.map +1 -0
- package/dist/components/Tooltip/Tooltip.d.ts +43 -0
- package/dist/components/Tooltip/Tooltip.js +40 -0
- package/dist/components/Tooltip/Tooltip.js.map +1 -0
- package/dist/diagrams/ArchitectureFigure/ArchitectureFigure.d.ts +55 -0
- package/dist/diagrams/ArchitectureFigure/ArchitectureFigure.js +175 -0
- package/dist/diagrams/ArchitectureFigure/ArchitectureFigure.js.map +1 -0
- package/dist/diagrams/DataflowFigure/DataflowFigure.d.ts +28 -0
- package/dist/diagrams/DataflowFigure/DataflowFigure.js +148 -0
- package/dist/diagrams/DataflowFigure/DataflowFigure.js.map +1 -0
- package/dist/diagrams/DiagramCanvas/DiagramCanvas.d.ts +78 -0
- package/dist/diagrams/DiagramCanvas/DiagramCanvas.js +229 -0
- package/dist/diagrams/DiagramCanvas/DiagramCanvas.js.map +1 -0
- package/dist/diagrams/DiagramExportMenu/DiagramExportMenu.d.ts +106 -0
- package/dist/diagrams/DiagramExportMenu/DiagramExportMenu.js +123 -0
- package/dist/diagrams/DiagramExportMenu/DiagramExportMenu.js.map +1 -0
- package/dist/diagrams/DiagramInspector/DiagramInspector.d.ts +70 -0
- package/dist/diagrams/DiagramInspector/DiagramInspector.js +94 -0
- package/dist/diagrams/DiagramInspector/DiagramInspector.js.map +1 -0
- package/dist/diagrams/DiagramLegend/DiagramLegend.d.ts +42 -0
- package/dist/diagrams/DiagramLegend/DiagramLegend.js +35 -0
- package/dist/diagrams/DiagramLegend/DiagramLegend.js.map +1 -0
- package/dist/diagrams/DiagramMinimap/DiagramMinimap.d.ts +77 -0
- package/dist/diagrams/DiagramMinimap/DiagramMinimap.js +106 -0
- package/dist/diagrams/DiagramMinimap/DiagramMinimap.js.map +1 -0
- package/dist/diagrams/DiagramToolbar/DiagramToolbar.d.ts +48 -0
- package/dist/diagrams/DiagramToolbar/DiagramToolbar.js +53 -0
- package/dist/diagrams/DiagramToolbar/DiagramToolbar.js.map +1 -0
- package/dist/diagrams/LifecycleFigure/LifecycleFigure.d.ts +31 -0
- package/dist/diagrams/LifecycleFigure/LifecycleFigure.js +234 -0
- package/dist/diagrams/LifecycleFigure/LifecycleFigure.js.map +1 -0
- package/dist/diagrams/SequenceFigure/SequenceFigure.d.ts +38 -0
- package/dist/diagrams/SequenceFigure/SequenceFigure.js +261 -0
- package/dist/diagrams/SequenceFigure/SequenceFigure.js.map +1 -0
- package/dist/diagrams/WorkflowFigure/WorkflowFigure.d.ts +36 -0
- package/dist/diagrams/WorkflowFigure/WorkflowFigure.js +259 -0
- package/dist/diagrams/WorkflowFigure/WorkflowFigure.js.map +1 -0
- package/dist/diagrams/index.d.ts +17 -0
- package/dist/diagrams/index.js +29 -0
- package/dist/diagrams/index.js.map +1 -0
- package/dist/diagrams/lib/dev.d.ts +61 -0
- package/dist/diagrams/lib/dev.js +96 -0
- package/dist/diagrams/lib/dev.js.map +1 -0
- package/dist/diagrams/lib/frame.d.ts +138 -0
- package/dist/diagrams/lib/frame.js +131 -0
- package/dist/diagrams/lib/frame.js.map +1 -0
- package/dist/diagrams/lib/geometry.d.ts +114 -0
- package/dist/diagrams/lib/geometry.js +113 -0
- package/dist/diagrams/lib/geometry.js.map +1 -0
- package/dist/diagrams/lib/legend.d.ts +32 -0
- package/dist/diagrams/lib/legend.js +84 -0
- package/dist/diagrams/lib/legend.js.map +1 -0
- package/dist/diagrams/lib/marks.d.ts +207 -0
- package/dist/diagrams/lib/marks.js +480 -0
- package/dist/diagrams/lib/marks.js.map +1 -0
- package/dist/diagrams/lib/route.d.ts +106 -0
- package/dist/diagrams/lib/route.js +201 -0
- package/dist/diagrams/lib/route.js.map +1 -0
- package/dist/diagrams/lib/wires.d.ts +59 -0
- package/dist/diagrams/lib/wires.js +94 -0
- package/dist/diagrams/lib/wires.js.map +1 -0
- package/dist/diagrams/spec.d.ts +405 -0
- package/dist/diagrams/spec.js +1 -0
- package/dist/diagrams/spec.js.map +1 -0
- package/dist/fonts/hanken-grotesk-300.woff2 +0 -0
- package/dist/fonts/hanken-grotesk-400.woff2 +0 -0
- package/dist/fonts/hanken-grotesk-500.woff2 +0 -0
- package/dist/fonts/hanken-grotesk-600.woff2 +0 -0
- package/dist/fonts/hanken-grotesk-700.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-400.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-500.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-600.woff2 +0 -0
- package/dist/fonts/newsreader-300.woff2 +0 -0
- package/dist/fonts/newsreader-400.woff2 +0 -0
- package/dist/fonts/newsreader-500.woff2 +0 -0
- package/dist/fonts/newsreader-600.woff2 +0 -0
- package/dist/fonts.css +96 -0
- package/dist/index.d.ts +97 -0
- package/dist/index.js +80 -0
- package/dist/index.js.map +1 -0
- package/dist/keyframes.css +300 -0
- package/dist/lib/cn.d.ts +21 -0
- package/dist/lib/cn.js +9 -0
- package/dist/lib/cn.js.map +1 -0
- package/dist/lib/color.d.ts +80 -0
- package/dist/lib/color.js +189 -0
- package/dist/lib/color.js.map +1 -0
- package/dist/lib/control.d.ts +32 -0
- package/dist/lib/control.js +14 -0
- package/dist/lib/control.js.map +1 -0
- package/dist/lib/index.d.ts +4 -0
- package/dist/lib/index.js +11 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/numeric.d.ts +35 -0
- package/dist/lib/numeric.js +29 -0
- package/dist/lib/numeric.js.map +1 -0
- package/dist/lib/overlay-container.d.ts +48 -0
- package/dist/lib/overlay-container.js +15 -0
- package/dist/lib/overlay-container.js.map +1 -0
- package/dist/lib/slot-content.d.ts +8 -0
- package/dist/lib/slot-content.js +17 -0
- package/dist/lib/slot-content.js.map +1 -0
- package/dist/lib/step-rail.d.ts +45 -0
- package/dist/lib/step-rail.js +47 -0
- package/dist/lib/step-rail.js.map +1 -0
- package/dist/lib/svg-export.d.ts +138 -0
- package/dist/lib/svg-export.js +198 -0
- package/dist/lib/svg-export.js.map +1 -0
- package/dist/lib/useClipboardCopy.d.ts +30 -0
- package/dist/lib/useClipboardCopy.js +37 -0
- package/dist/lib/useClipboardCopy.js.map +1 -0
- package/dist/lib/useSelectionIndicator.d.ts +29 -0
- package/dist/lib/useSelectionIndicator.js +49 -0
- package/dist/lib/useSelectionIndicator.js.map +1 -0
- package/dist/lib/warn.d.ts +73 -0
- package/dist/lib/warn.js +38 -0
- package/dist/lib/warn.js.map +1 -0
- package/dist/semantic.css +200 -0
- package/dist/styles.css +98 -0
- package/dist/themes.css +607 -0
- package/dist/tokens/brand.d.ts +47 -0
- package/dist/tokens/brand.js +38 -0
- package/dist/tokens/brand.js.map +1 -0
- package/dist/tokens.css +666 -0
- package/dist/tokens.d.ts +205 -0
- package/dist/tokens.js +1056 -0
- package/dist/tokens.json +1055 -0
- package/dist/website/Actions/Actions.d.ts +34 -0
- package/dist/website/Actions/Actions.js +29 -0
- package/dist/website/Actions/Actions.js.map +1 -0
- package/dist/website/Collection/Collection.d.ts +128 -0
- package/dist/website/Collection/Collection.js +162 -0
- package/dist/website/Collection/Collection.js.map +1 -0
- package/dist/website/Contact/Contact.d.ts +87 -0
- package/dist/website/Contact/Contact.js +94 -0
- package/dist/website/Contact/Contact.js.map +1 -0
- package/dist/website/Content/CodePanel.d.ts +27 -0
- package/dist/website/Content/CodePanel.js +30 -0
- package/dist/website/Content/CodePanel.js.map +1 -0
- package/dist/website/Content/Content.d.ts +29 -0
- package/dist/website/Content/Content.js +38 -0
- package/dist/website/Content/Content.js.map +1 -0
- package/dist/website/Conversation/Conversation.d.ts +193 -0
- package/dist/website/Conversation/Conversation.js +252 -0
- package/dist/website/Conversation/Conversation.js.map +1 -0
- package/dist/website/Evidence/Evidence.d.ts +116 -0
- package/dist/website/Evidence/Evidence.js +142 -0
- package/dist/website/Evidence/Evidence.js.map +1 -0
- package/dist/website/Media/Media.d.ts +173 -0
- package/dist/website/Media/Media.js +225 -0
- package/dist/website/Media/Media.js.map +1 -0
- package/dist/website/Media/MediaLightbox.d.ts +18 -0
- package/dist/website/Media/MediaLightbox.js +38 -0
- package/dist/website/Media/MediaLightbox.js.map +1 -0
- package/dist/website/Metrics/Metrics.d.ts +74 -0
- package/dist/website/Metrics/Metrics.js +96 -0
- package/dist/website/Metrics/Metrics.js.map +1 -0
- package/dist/website/Music/Music.d.ts +60 -0
- package/dist/website/Music/Music.js +80 -0
- package/dist/website/Music/Music.js.map +1 -0
- package/dist/website/Portfolio/FrameLayout.d.ts +9 -0
- package/dist/website/Portfolio/FrameLayout.js +42 -0
- package/dist/website/Portfolio/FrameLayout.js.map +1 -0
- package/dist/website/Portfolio/Portfolio.d.ts +49 -0
- package/dist/website/Portfolio/Portfolio.js +66 -0
- package/dist/website/Portfolio/Portfolio.js.map +1 -0
- package/dist/website/Portfolio/QuestionCard.d.ts +22 -0
- package/dist/website/Portfolio/QuestionCard.js +33 -0
- package/dist/website/Portfolio/QuestionCard.js.map +1 -0
- package/dist/website/PortfolioIndex/PortfolioIndex.d.ts +21 -0
- package/dist/website/PortfolioIndex/PortfolioIndex.js +31 -0
- package/dist/website/PortfolioIndex/PortfolioIndex.js.map +1 -0
- package/dist/website/Reading/Reading.d.ts +203 -0
- package/dist/website/Reading/Reading.js +357 -0
- package/dist/website/Reading/Reading.js.map +1 -0
- package/dist/website/Recovery/Recovery.d.ts +39 -0
- package/dist/website/Recovery/Recovery.js +96 -0
- package/dist/website/Recovery/Recovery.js.map +1 -0
- package/dist/website/SearchPalette/SearchPalette.d.ts +59 -0
- package/dist/website/SearchPalette/SearchPalette.js +120 -0
- package/dist/website/SearchPalette/SearchPalette.js.map +1 -0
- package/dist/website/SiteNavigation/SiteNavigation.d.ts +46 -0
- package/dist/website/SiteNavigation/SiteNavigation.js +101 -0
- package/dist/website/SiteNavigation/SiteNavigation.js.map +1 -0
- package/dist/website/SiteShell/SiteShell.d.ts +45 -0
- package/dist/website/SiteShell/SiteShell.js +46 -0
- package/dist/website/SiteShell/SiteShell.js.map +1 -0
- package/dist/website/Timeline/Timeline.d.ts +80 -0
- package/dist/website/Timeline/Timeline.js +99 -0
- package/dist/website/Timeline/Timeline.js.map +1 -0
- package/dist/website/Workbench/Chronology.d.ts +32 -0
- package/dist/website/Workbench/Chronology.js +32 -0
- package/dist/website/Workbench/Chronology.js.map +1 -0
- package/dist/website/Workbench/ContactRow.d.ts +13 -0
- package/dist/website/Workbench/ContactRow.js +11 -0
- package/dist/website/Workbench/ContactRow.js.map +1 -0
- package/dist/website/Workbench/PhotoMosaic.d.ts +13 -0
- package/dist/website/Workbench/PhotoMosaic.js +15 -0
- package/dist/website/Workbench/PhotoMosaic.js.map +1 -0
- package/dist/website/Workbench/Reveal.d.ts +19 -0
- package/dist/website/Workbench/Reveal.js +29 -0
- package/dist/website/Workbench/Reveal.js.map +1 -0
- package/dist/website/Workbench/ToolStrip.d.ts +18 -0
- package/dist/website/Workbench/ToolStrip.js +15 -0
- package/dist/website/Workbench/ToolStrip.js.map +1 -0
- package/dist/website/Workbench/Workbench.d.ts +23 -0
- package/dist/website/Workbench/Workbench.js +22 -0
- package/dist/website/Workbench/Workbench.js.map +1 -0
- package/dist/website/Workbench/WorkbenchCard.d.ts +29 -0
- package/dist/website/Workbench/WorkbenchCard.js +21 -0
- package/dist/website/Workbench/WorkbenchCard.js.map +1 -0
- package/dist/website/Workbench/WorkbenchEntries.d.ts +22 -0
- package/dist/website/Workbench/WorkbenchEntries.js +24 -0
- package/dist/website/Workbench/WorkbenchEntries.js.map +1 -0
- package/dist/website/Workbench/WorkbenchFigure.d.ts +20 -0
- package/dist/website/Workbench/WorkbenchFigure.js +15 -0
- package/dist/website/Workbench/WorkbenchFigure.js.map +1 -0
- package/dist/website/Workbench/WorkbenchHero.d.ts +24 -0
- package/dist/website/Workbench/WorkbenchHero.js +24 -0
- package/dist/website/Workbench/WorkbenchHero.js.map +1 -0
- package/dist/website/Workbench/theme.d.ts +22 -0
- package/dist/website/Workbench/theme.js +12 -0
- package/dist/website/Workbench/theme.js.map +1 -0
- package/dist/website/index.d.ts +38 -0
- package/dist/website/index.js +32 -0
- package/dist/website/index.js.map +1 -0
- package/dist/website-actions.css +6 -0
- package/dist/website-base.css +46 -0
- package/dist/website-collection.css +89 -0
- package/dist/website-contact.css +29 -0
- package/dist/website-content.css +20 -0
- package/dist/website-controls.css +91 -0
- package/dist/website-conversation.css +115 -0
- package/dist/website-evidence.css +56 -0
- package/dist/website-media.css +227 -0
- package/dist/website-metrics.css +15 -0
- package/dist/website-music.css +27 -0
- package/dist/website-portfolio.css +94 -0
- package/dist/website-reading.css +159 -0
- package/dist/website-recovery.css +28 -0
- package/dist/website-search.css +26 -0
- package/dist/website-shell.css +89 -0
- package/dist/website-timeline.css +43 -0
- package/dist/website-workbench.css +162 -0
- package/dist/website.css +26 -0
- package/llms.txt +35 -0
- package/package.json +163 -5
- package/skills/folio-design/SKILL.md +228 -0
- package/skills/folio-design/evals/claims.json +95 -0
- package/skills/folio-design/evals/evals.json +84 -0
- package/skills/folio-design/rules/a11y.md +167 -0
- package/skills/folio-design/rules/composition.md +108 -0
- package/skills/folio-design/rules/forms.md +135 -0
- package/skills/folio-design/rules/naming.md +155 -0
- package/skills/folio-design/rules/tokens.md +135 -0
package/dist/themes.css
ADDED
|
@@ -0,0 +1,607 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The theming axes.
|
|
3
|
+
*
|
|
4
|
+
* Seven of them, each an attribute, each re-pointing tokens that already
|
|
5
|
+
* exist. No component is touched by any of it, and nothing here introduces a
|
|
6
|
+
* token — a theme that needed a new token would be a second design system
|
|
7
|
+
* wearing the first one's name.
|
|
8
|
+
*
|
|
9
|
+
* The axes are independent on purpose. A named preset is a combination, not a
|
|
10
|
+
* block of its own, so "warm surface with sharp corners" is reachable even
|
|
11
|
+
* though nobody shipped it as a preset.
|
|
12
|
+
*
|
|
13
|
+
* Every axis has an unset default: the White Reset is what you get by writing
|
|
14
|
+
* no attribute at all.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/* ─── Accent ───────────────────────────────────────────────────────────────
|
|
18
|
+
The one token every other axis was written to prove could move.
|
|
19
|
+
|
|
20
|
+
Law 7 says the accent IS ink, and this does not walk that back — `ink` is
|
|
21
|
+
the default and it is the system as it ships. What this axis demonstrates is
|
|
22
|
+
the thing underneath the law: every component reads `--accent`, which points
|
|
23
|
+
at `--red`, which points at `--clay`. ONE token. A consumer whose brand is
|
|
24
|
+
not monochrome re-points it and the whole system follows without a component
|
|
25
|
+
being touched.
|
|
26
|
+
|
|
27
|
+
This lived in the documentation site's own stylesheet for four releases,
|
|
28
|
+
which meant the site could show it and no consumer could have it — and the
|
|
29
|
+
package meanwhile said in three places that no such attribute existed. It
|
|
30
|
+
does now, and it is derived from these selectors like every other axis.
|
|
31
|
+
|
|
32
|
+
Two values per accent, not one. `--clay` is the MARK — a fill, a rule, a
|
|
33
|
+
pill — and `--clay-ink` is the same colour set as TEXT, which has to clear
|
|
34
|
+
AA against paper and therefore cannot always be the same hex. That
|
|
35
|
+
distinction already existed in the token layer for exactly this reason;
|
|
36
|
+
these are the first accents to need it.
|
|
37
|
+
|
|
38
|
+
Measured with the WCAG 2.x relative-luminance formula, against the White
|
|
39
|
+
Reset's own grounds (`--paper` #ffffff light, #0d0d0d dark). AA is 4.5:1 for
|
|
40
|
+
text and 3:1 for a UI mark; the third column is `--clay-ink` over the 10% /
|
|
41
|
+
14% wash `--accent-on-muted` is printed on.
|
|
42
|
+
|
|
43
|
+
accent light: mark / ink / on wash dark: mark / ink / on wash
|
|
44
|
+
ink 19.03 19.03 15.39 17.65 17.65 12.51
|
|
45
|
+
clay 7.45 8.77 7.51 7.41 9.13 7.51
|
|
46
|
+
forest 7.59 8.66 7.44 8.91 10.52 8.42
|
|
47
|
+
cobalt 8.05 9.21 7.86 8.41 10.23 8.27
|
|
48
|
+
plum 8.49 9.55 8.12 8.74 10.43 8.41
|
|
49
|
+
moss 5.80 8.30 7.24 8.76 11.32 9.06
|
|
50
|
+
ember 5.46 6.34 5.47 7.81 8.86 7.31
|
|
51
|
+
|
|
52
|
+
`--accent-foreground` resolves to `--paper`, so paper printed ON the accent
|
|
53
|
+
fill is the mark column read the other way up. */
|
|
54
|
+
|
|
55
|
+
/* The default, NAMED. "Ink" used to be spelled "write no attribute", which
|
|
56
|
+
works exactly once, at the root: inside an element that already carries an
|
|
57
|
+
accent, an unset accent is not ink, it is whatever the ancestor said. */
|
|
58
|
+
[data-accent='ink'] {
|
|
59
|
+
--clay: var(--ink);
|
|
60
|
+
--clay-ink: var(--ink);
|
|
61
|
+
--red-soft: rgba(16, 16, 16, 0.07);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/* The warm editorial red the site carried before the White Reset. */
|
|
65
|
+
[data-accent='clay'] {
|
|
66
|
+
--clay: #8a3f24;
|
|
67
|
+
--clay-ink: #7a3720;
|
|
68
|
+
--red-soft: rgba(138, 63, 36, 0.1);
|
|
69
|
+
}
|
|
70
|
+
/* A cool neutral green — quiet enough to sit under a lot of type. */
|
|
71
|
+
[data-accent='forest'] {
|
|
72
|
+
--clay: #2f5d42;
|
|
73
|
+
--clay-ink: #2a5439;
|
|
74
|
+
--red-soft: rgba(47, 93, 66, 0.1);
|
|
75
|
+
}
|
|
76
|
+
/* The most conventional software blue that still clears AA on paper. */
|
|
77
|
+
[data-accent='cobalt'] {
|
|
78
|
+
--clay: #2b4c9b;
|
|
79
|
+
--clay-ink: #27448a;
|
|
80
|
+
--red-soft: rgba(43, 76, 155, 0.1);
|
|
81
|
+
}
|
|
82
|
+
/* A darker chroma for a brand that wants presence without heat. */
|
|
83
|
+
[data-accent='plum'] {
|
|
84
|
+
--clay: #6b3a72;
|
|
85
|
+
--clay-ink: #613468;
|
|
86
|
+
--red-soft: rgba(107, 58, 114, 0.1);
|
|
87
|
+
}
|
|
88
|
+
/* A green-grey with almost no chroma left in it, for a dense working screen
|
|
89
|
+
where the accent has to mark a choice without becoming the loudest thing on
|
|
90
|
+
the page. The lowest-contrast mark of the six on paper, and deliberately so:
|
|
91
|
+
it is a rule and a fill more often than it is a word. */
|
|
92
|
+
[data-accent='moss'] {
|
|
93
|
+
--clay: #566b52;
|
|
94
|
+
--clay-ink: #41533e;
|
|
95
|
+
--red-soft: rgba(86, 107, 82, 0.1);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* A burnt orange for the Workbench preset: it marks a link or the current
|
|
99
|
+
state and nothing else, so it can carry heat without competing with the
|
|
100
|
+
photographs it sits beside. The lowest-contrast mark after moss; its
|
|
101
|
+
ink is a step darker so a link on a stone panel still clears AA. */
|
|
102
|
+
[data-accent='ember'] {
|
|
103
|
+
--clay: #b8430a;
|
|
104
|
+
--clay-ink: #a83c08;
|
|
105
|
+
--red-soft: rgba(184, 67, 10, 0.1);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/* Re-derives the chain, on any element that names an accent.
|
|
109
|
+
|
|
110
|
+
A `var()` is substituted where it is DECLARED, not where it is read:
|
|
111
|
+
`--accent: var(--red)` is written on `:root` in `semantic.css`, so it
|
|
112
|
+
computes THERE — against the root's `--clay` — and what inherits down is the
|
|
113
|
+
answer, not the question. Re-pointing `--clay` on a descendant therefore
|
|
114
|
+
changed nothing at all, and every accent swatch, preview and thumbnail on a
|
|
115
|
+
themes rail painted the accent of the page rather than its own.
|
|
116
|
+
|
|
117
|
+
`--on-red` is here for the same reason: it resolves to `--paper`, so an
|
|
118
|
+
element naming its own surface needs the foreground re-derived against that
|
|
119
|
+
surface rather than against the document's. */
|
|
120
|
+
[data-accent] {
|
|
121
|
+
--red: var(--clay);
|
|
122
|
+
--red-ink: var(--clay);
|
|
123
|
+
--on-red: var(--paper);
|
|
124
|
+
--accent: var(--red);
|
|
125
|
+
--accent-hover: var(--red-ink);
|
|
126
|
+
--accent-muted: var(--red-soft);
|
|
127
|
+
--accent-wash: var(--red-soft);
|
|
128
|
+
--accent-foreground: var(--on-red);
|
|
129
|
+
--accent-on-dark: var(--red);
|
|
130
|
+
--accent-on-muted: var(--red-ink);
|
|
131
|
+
--action: var(--red);
|
|
132
|
+
--action-foreground: var(--on-red);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/* On the dark ground the same hues have to come UP to clear AA, not down. An
|
|
136
|
+
accent with only a light value fails contrast the moment someone switches
|
|
137
|
+
mode — which is why the token layer swaps by value rather than by block. */
|
|
138
|
+
|
|
139
|
+
[data-mode='dark'][data-accent='ink'],
|
|
140
|
+
[data-mode='dark'] [data-accent='ink'] {
|
|
141
|
+
--clay: var(--ink);
|
|
142
|
+
--clay-ink: var(--ink);
|
|
143
|
+
--red-soft: rgba(244, 244, 242, 0.12);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
[data-mode='dark'][data-accent='clay'],
|
|
147
|
+
[data-mode='dark'] [data-accent='clay'] {
|
|
148
|
+
--clay: #e08a68;
|
|
149
|
+
--clay-ink: #e8a184;
|
|
150
|
+
--red-soft: rgba(224, 138, 104, 0.14);
|
|
151
|
+
}
|
|
152
|
+
[data-mode='dark'][data-accent='forest'],
|
|
153
|
+
[data-mode='dark'] [data-accent='forest'] {
|
|
154
|
+
--clay: #7fbd97;
|
|
155
|
+
--clay-ink: #98caab;
|
|
156
|
+
--red-soft: rgba(127, 189, 151, 0.14);
|
|
157
|
+
}
|
|
158
|
+
[data-mode='dark'][data-accent='cobalt'],
|
|
159
|
+
[data-mode='dark'] [data-accent='cobalt'] {
|
|
160
|
+
--clay: #8aaaf0;
|
|
161
|
+
--clay-ink: #a3bcf4;
|
|
162
|
+
--red-soft: rgba(138, 170, 240, 0.14);
|
|
163
|
+
}
|
|
164
|
+
[data-mode='dark'][data-accent='plum'],
|
|
165
|
+
[data-mode='dark'] [data-accent='plum'] {
|
|
166
|
+
--clay: #cf9dd6;
|
|
167
|
+
--clay-ink: #dab0e0;
|
|
168
|
+
--red-soft: rgba(207, 157, 214, 0.14);
|
|
169
|
+
}
|
|
170
|
+
[data-mode='dark'][data-accent='moss'],
|
|
171
|
+
[data-mode='dark'] [data-accent='moss'] {
|
|
172
|
+
--clay: #9cb597;
|
|
173
|
+
--clay-ink: #b8cbb3;
|
|
174
|
+
--red-soft: rgba(156, 181, 151, 0.14);
|
|
175
|
+
}
|
|
176
|
+
[data-mode='dark'][data-accent='ember'],
|
|
177
|
+
[data-mode='dark'] [data-accent='ember'] {
|
|
178
|
+
--clay: #f08a4b;
|
|
179
|
+
--clay-ink: #f29a62;
|
|
180
|
+
--red-soft: rgba(240, 138, 75, 0.14);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/* ─── Action ───────────────────────────────────────────────────────────────
|
|
184
|
+
What the primary button is filled with. By default it is the accent, which
|
|
185
|
+
is what law 7 asks for. `ink` takes the primary action back to the page's
|
|
186
|
+
own ink while the accent keeps marking links and the current state — the
|
|
187
|
+
Workbench preset's split, where a burnt-orange button would be the loudest
|
|
188
|
+
thing on a page of photographs. Declared after the accent block so it wins
|
|
189
|
+
on the same element, and re-derived on it for the same reason that block
|
|
190
|
+
is: a `var()` resolves where it is written. Ink and paper already swap in
|
|
191
|
+
dark mode, so this axis needs no dark block of its own. */
|
|
192
|
+
[data-action='accent'] {
|
|
193
|
+
--action: var(--accent);
|
|
194
|
+
--action-foreground: var(--accent-foreground);
|
|
195
|
+
}
|
|
196
|
+
[data-action='ink'] {
|
|
197
|
+
--action: var(--ink);
|
|
198
|
+
--action-foreground: var(--paper);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/* ─── Surface ──────────────────────────────────────────────────────────────
|
|
202
|
+
The ground and its two steps. Law 8 still holds — dark is a value swap, so
|
|
203
|
+
each surface defines both and neither is a separate palette.
|
|
204
|
+
|
|
205
|
+
THE RULES ARE PART OF THE SURFACE, and for four releases only half of them
|
|
206
|
+
swapped. `warm` and `cool` set `--rule` and `--rule-2` unqualified by mode
|
|
207
|
+
and then restated only the three grounds in dark, so the LIGHT hairline
|
|
208
|
+
survived onto the dark page: #e8e4da at 14.86:1 against warm's own dark
|
|
209
|
+
`--paper`, #e4e9ee at 15.82:1 against cool's, where the neutral dark rule
|
|
210
|
+
sits at 1.42:1. Every border and divider on the page came out near-white —
|
|
211
|
+
measured in a console on this package at up to 174 such elements on one of
|
|
212
|
+
33 routes. `glass` restates both and was never affected.
|
|
213
|
+
|
|
214
|
+
The dark values are built the way `tokens.css` builds its own: the system's
|
|
215
|
+
near-white at an alpha over whatever ground is under it, at the SAME alphas,
|
|
216
|
+
0.14 and 0.26, because the alpha is what a rule's WEIGHT is. Composited on
|
|
217
|
+
each surface's own dark `--paper` that is 1.45 / 2.19 on warm and
|
|
218
|
+
1.42 / 2.17 on cool against the root's 1.42 / 2.16, at ΔE 13.5 / 23.9 and
|
|
219
|
+
13.8 / 24.5 against its 13.8 / 24.6 (OKLab ×100). Same rule, same weight, a
|
|
220
|
+
differently tinted ground.
|
|
221
|
+
|
|
222
|
+
What moves is the near-white. `#f4f4f2` held at its own lightness (L 0.967)
|
|
223
|
+
and turned onto the surface's dark hue — 84.6° warm and 258.4° cool, the hue
|
|
224
|
+
`--paper`, `--paper-2` and `--stone` already carry there — at the chroma that
|
|
225
|
+
surface's LIGHT `--rule` carries (C 0.0141 and 0.0087). Tinting it is not
|
|
226
|
+
decoration: the light halves ladder chroma UP with rule weight, warm running
|
|
227
|
+
C 0.0111 at `--stone`, 0.0141 at `--rule` and 0.0185 at `--rule-2`, and the
|
|
228
|
+
root's neutral ink inverts that on the dark ground — at 26% it washes the
|
|
229
|
+
ground's tint out, leaving warm's heaviest rule at C 0.0075 over a `--stone`
|
|
230
|
+
of C 0.0103, the least warm thing on a warm page. Tinted, it lands at
|
|
231
|
+
C 0.0109, on the ground's own hue.
|
|
232
|
+
|
|
233
|
+
Not restated under forced colours, unlike the accent below. `tokens.css`
|
|
234
|
+
does not collapse `--rule` there because it does not have to: a border is an
|
|
235
|
+
element's own colour and the browser remaps it, and nothing in the package
|
|
236
|
+
draws these two into an SVG or a `color-mix()`, which is the gap the accent
|
|
237
|
+
block exists to close. */
|
|
238
|
+
|
|
239
|
+
[data-surface='warm'] {
|
|
240
|
+
--paper: #fdfcf9;
|
|
241
|
+
--paper-2: #f6f4ee;
|
|
242
|
+
--stone: #efece4;
|
|
243
|
+
--rule: #e8e4da;
|
|
244
|
+
--rule-2: #d8d3c6;
|
|
245
|
+
}
|
|
246
|
+
[data-mode='dark'][data-surface='warm'],
|
|
247
|
+
[data-mode='dark'] [data-surface='warm'] {
|
|
248
|
+
--paper: #12110f;
|
|
249
|
+
--paper-2: #1a1814;
|
|
250
|
+
--stone: #221f1a;
|
|
251
|
+
/* #f4f4f2 at L 0.967, hue 84.6°, C 0.0143 — warm's own hue at the chroma its
|
|
252
|
+
light `--rule` carries. */
|
|
253
|
+
--rule: rgba(248, 243, 233, 0.14);
|
|
254
|
+
--rule-2: rgba(248, 243, 233, 0.26);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
[data-surface='cool'] {
|
|
258
|
+
--paper: #fcfdfe;
|
|
259
|
+
--paper-2: #f2f5f8;
|
|
260
|
+
--stone: #eceff3;
|
|
261
|
+
--rule: #e4e9ee;
|
|
262
|
+
--rule-2: #d2d9e1;
|
|
263
|
+
}
|
|
264
|
+
[data-mode='dark'][data-surface='cool'],
|
|
265
|
+
[data-mode='dark'] [data-surface='cool'] {
|
|
266
|
+
--paper: #0c0e11;
|
|
267
|
+
--paper-2: #14171b;
|
|
268
|
+
--stone: #1c2026;
|
|
269
|
+
/* The same construction on cool's hue, 258.4°, at C 0.0091. */
|
|
270
|
+
--rule: rgba(240, 244, 250, 0.14);
|
|
271
|
+
--rule-2: rgba(240, 244, 250, 0.26);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/* Linen, the Workbench ground. Unlike `warm` and `cool` it also moves the
|
|
275
|
+
three text steps, because the preset's warmth is carried by the ink as much
|
|
276
|
+
as by the paper: a neutral #101010 on a linen ground reads as a cold page
|
|
277
|
+
with a tinted background. The text steps keep the root's ladder — ink,
|
|
278
|
+
a secondary step, and an AA floor — measured on every linen ground:
|
|
279
|
+
light ink 14.33 / 13.60 / 12.42, --ink-2 8.13 / 7.72 / 7.05, --ink-3-aa
|
|
280
|
+
6.15 / 5.84 / 5.33 against paper / paper-2 / stone; dark ink 15.57 /
|
|
281
|
+
14.44 / 13.15, --ink-2 9.67 / 8.96 / 8.16, --ink-3-aa 7.18 / 6.66 / 6.07.
|
|
282
|
+
Rules are the ink itself at the root's two weights, so a hairline stays
|
|
283
|
+
the colour of the type it separates. */
|
|
284
|
+
[data-surface='linen'] {
|
|
285
|
+
--paper: #f7f7f4;
|
|
286
|
+
--paper-2: #f2f1ed;
|
|
287
|
+
--stone: #e8e7e2;
|
|
288
|
+
--rule: rgba(38, 37, 30, 0.1);
|
|
289
|
+
--rule-2: rgba(38, 37, 30, 0.2);
|
|
290
|
+
--ink: #26251e;
|
|
291
|
+
--ink-2: #4d4b44;
|
|
292
|
+
--ink-3: rgba(38, 37, 30, 0.55);
|
|
293
|
+
--ink-3-aa: #5f5d55;
|
|
294
|
+
}
|
|
295
|
+
[data-mode='dark'][data-surface='linen'],
|
|
296
|
+
[data-mode='dark'] [data-surface='linen'] {
|
|
297
|
+
--paper: #14130f;
|
|
298
|
+
--paper-2: #1c1b17;
|
|
299
|
+
--stone: #25231e;
|
|
300
|
+
--rule: rgba(236, 235, 230, 0.14);
|
|
301
|
+
--rule-2: rgba(236, 235, 230, 0.26);
|
|
302
|
+
--ink: #ecebe6;
|
|
303
|
+
--ink-2: #bdbbb3;
|
|
304
|
+
--ink-3: rgba(236, 235, 230, 0.55);
|
|
305
|
+
--ink-3-aa: #a3a199;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/* Glass, and the one place this system allows a blur.
|
|
309
|
+
*
|
|
310
|
+
* Law 2 says depth is a hairline and never a blur, and this does not break it:
|
|
311
|
+
* the blur is not UNDER a surface pretending to be a shadow, it is BEHIND one,
|
|
312
|
+
* which is a different claim. A shadow says "this is raised above the page"; a
|
|
313
|
+
* frosted panel says "the page is still there, and you are looking through
|
|
314
|
+
* something at it". The first is a fiction about light the White Reset has no
|
|
315
|
+
* source for. The second is a material, and it is honest about what it costs:
|
|
316
|
+
* only surfaces that actually float get it, because a card on the page ground
|
|
317
|
+
* has nothing behind it and would be blurring its own background.
|
|
318
|
+
*
|
|
319
|
+
* The panel's own edge is brighter than the page's rules on purpose. Glass has
|
|
320
|
+
* a specular edge — it is the one cue that says the surface is a sheet rather
|
|
321
|
+
* than a hole, and without it a translucent panel reads as a smudge.
|
|
322
|
+
*/
|
|
323
|
+
|
|
324
|
+
[data-surface='glass'] {
|
|
325
|
+
--paper: #f7f8fa;
|
|
326
|
+
--paper-2: #eef0f4;
|
|
327
|
+
--stone: #e7eaf0;
|
|
328
|
+
--rule: #e2e5ec;
|
|
329
|
+
--rule-2: #ced3dd;
|
|
330
|
+
|
|
331
|
+
--panel-bg: color-mix(in srgb, #ffffff 62%, transparent);
|
|
332
|
+
--panel-border: color-mix(in srgb, #ffffff 85%, transparent);
|
|
333
|
+
/* Saturation as well as blur. A blur alone greys whatever is behind it,
|
|
334
|
+
because averaging colour is what a blur does; pushing saturation back is
|
|
335
|
+
what makes the result read as glass rather than as fog. */
|
|
336
|
+
--panel-filter: blur(20px) saturate(180%);
|
|
337
|
+
}
|
|
338
|
+
[data-mode='dark'][data-surface='glass'],
|
|
339
|
+
[data-mode='dark'] [data-surface='glass'] {
|
|
340
|
+
--paper: #0e1013;
|
|
341
|
+
--paper-2: #16191e;
|
|
342
|
+
--stone: #1d2127;
|
|
343
|
+
--rule: rgba(244, 244, 242, 0.12);
|
|
344
|
+
--rule-2: rgba(244, 244, 242, 0.22);
|
|
345
|
+
|
|
346
|
+
--panel-bg: color-mix(in srgb, #1b1f26 62%, transparent);
|
|
347
|
+
--panel-border: color-mix(in srgb, #ffffff 16%, transparent);
|
|
348
|
+
--panel-filter: blur(20px) saturate(160%);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/* ─── Radius ───────────────────────────────────────────────────────────────
|
|
352
|
+
One number, not four.
|
|
353
|
+
|
|
354
|
+
This axis used to re-type every step, which let the ladder go out of
|
|
355
|
+
proportion with itself — and a corner nested inside another corner is only
|
|
356
|
+
ever right when the two are in proportion. The factor scales the whole
|
|
357
|
+
ladder, the pill included, so `sharp` means square everywhere a corner is a
|
|
358
|
+
corner: a square theme that left every button a capsule was not a square
|
|
359
|
+
theme. A true circle is geometry and is not on this axis at all. */
|
|
360
|
+
|
|
361
|
+
[data-radius='sharp'] {
|
|
362
|
+
--radius-factor: 0;
|
|
363
|
+
}
|
|
364
|
+
[data-radius='round'] {
|
|
365
|
+
--radius-factor: 2;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/* ─── Rules ────────────────────────────────────────────────────────────────
|
|
369
|
+
How much the system draws its own edges. `firm` is the setting for a dense
|
|
370
|
+
console; `quiet` leans on the surface steps and is what a reading page
|
|
371
|
+
wants. */
|
|
372
|
+
|
|
373
|
+
[data-rules='firm'] {
|
|
374
|
+
--rule: #cfccc4;
|
|
375
|
+
--rule-2: #a8a49a;
|
|
376
|
+
}
|
|
377
|
+
[data-mode='dark'][data-rules='firm'],
|
|
378
|
+
[data-mode='dark'] [data-rules='firm'] {
|
|
379
|
+
--rule: rgba(244, 244, 242, 0.28);
|
|
380
|
+
--rule-2: rgba(244, 244, 242, 0.46);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
[data-rules='quiet'] {
|
|
384
|
+
--rule: #f4f2ee;
|
|
385
|
+
--rule-2: #e8e5df;
|
|
386
|
+
}
|
|
387
|
+
[data-mode='dark'][data-rules='quiet'],
|
|
388
|
+
[data-mode='dark'] [data-rules='quiet'] {
|
|
389
|
+
--rule: rgba(244, 244, 242, 0.08);
|
|
390
|
+
--rule-2: rgba(244, 244, 242, 0.15);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
/* ─── Type ─────────────────────────────────────────────────────────────────
|
|
394
|
+
Which face carries a heading. The ramp itself does not move: the steps are a
|
|
395
|
+
hierarchy, and a theme that re-sized them would be re-deciding the
|
|
396
|
+
hierarchy rather than re-dressing it. */
|
|
397
|
+
|
|
398
|
+
/* The default, named. It restates the two role tokens rather than any face:
|
|
399
|
+
`index.css` decides what `--sans` and `--serif` are, and this only says which
|
|
400
|
+
role each one plays — so there is no list of families to drift. */
|
|
401
|
+
[data-type='editorial'] {
|
|
402
|
+
--font-sans: var(--sans);
|
|
403
|
+
--font-heading: var(--serif);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
[data-type='grotesk'] {
|
|
407
|
+
--font-heading: var(--sans);
|
|
408
|
+
}
|
|
409
|
+
[data-type='bookish'] {
|
|
410
|
+
--font-sans: var(--serif);
|
|
411
|
+
--font-heading: var(--serif);
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
/* ─── Voice ────────────────────────────────────────────────────────────────
|
|
415
|
+
How loud the page speaks, which the type axis does not decide: that axis
|
|
416
|
+
picks a FACE and leaves the ramp alone. `quiet` is the Workbench setting —
|
|
417
|
+
page titles at roughly two-thirds of the ramp, display type at a regular
|
|
418
|
+
weight rather than a light one, and labels set as sentence-case sans in
|
|
419
|
+
place of tracked mono capitals. Body, record and item steps do not move, so
|
|
420
|
+
a quiet page keeps its hierarchy; only its top two steps come down. */
|
|
421
|
+
[data-voice='display'] {
|
|
422
|
+
--display-scale: 1;
|
|
423
|
+
--display-weight: 300;
|
|
424
|
+
--label-font: var(--font-mono);
|
|
425
|
+
--label-case: uppercase;
|
|
426
|
+
--label-tracking-scale: 1;
|
|
427
|
+
}
|
|
428
|
+
[data-voice='quiet'] {
|
|
429
|
+
--display-scale: 0.62;
|
|
430
|
+
--display-weight: 400;
|
|
431
|
+
--label-font: var(--font-sans);
|
|
432
|
+
--label-case: none;
|
|
433
|
+
--label-tracking-scale: 0;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
/* ─── Motion ───────────────────────────────────────────────────────────────
|
|
437
|
+
`prefers-reduced-motion` is honoured separately and is not a theme: a
|
|
438
|
+
reader's stated need is not one of five looks. This axis is taste. */
|
|
439
|
+
|
|
440
|
+
[data-motion='snappy'] {
|
|
441
|
+
--fast: 90ms;
|
|
442
|
+
--mid: 140ms;
|
|
443
|
+
--slow: 220ms;
|
|
444
|
+
}
|
|
445
|
+
[data-motion='still'] {
|
|
446
|
+
--fast: 1ms;
|
|
447
|
+
--mid: 1ms;
|
|
448
|
+
--slow: 1ms;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
/* ─── Chart palette ────────────────────────────────────────────────────────
|
|
452
|
+
The one axis that adds hue back, and the only sanctioned way to do it.
|
|
453
|
+
|
|
454
|
+
The White Reset's default series ramp is neutral (see tokens.css): texture
|
|
455
|
+
carries identity, lightness supports it. That is right for a console whose
|
|
456
|
+
whole page is monochrome, and wrong for a chart that has to sit beside a
|
|
457
|
+
product whose users already read its categories by colour. So rather than
|
|
458
|
+
leave that consumer hand-picking hexes into a `colors` config — which is
|
|
459
|
+
where an unvalidated, colour-blind-hostile palette gets born — the system
|
|
460
|
+
ships one, as an attribute, on the same terms as every other theme here.
|
|
461
|
+
|
|
462
|
+
These eight hues are a validated categorical set: adjacent-pair separation
|
|
463
|
+
ΔE 9.1 light / 8.4 dark under simulated protanopia, ΔE 19.6 / 19.3 with
|
|
464
|
+
normal vision (OKLab ×100), every step inside its mode's lightness band and
|
|
465
|
+
above the chroma floor, and every dark step at or above 3:1 on the dark
|
|
466
|
+
ground. The ORDER is the safety mechanism, not decoration — re-ordering
|
|
467
|
+
these values re-opens every adjacency and invalidates the numbers above.
|
|
468
|
+
|
|
469
|
+
Three light steps (aqua, yellow, magenta) sit below 3:1 on paper. That is a
|
|
470
|
+
documented relief case rather than a defect: a chart using more than two
|
|
471
|
+
series must show its legend, and `Chart.Legend` is required above one
|
|
472
|
+
series for exactly this reason.
|
|
473
|
+
|
|
474
|
+
Scoped to any container, like every other axis:
|
|
475
|
+
<div data-chart-palette="chroma"> */
|
|
476
|
+
|
|
477
|
+
[data-chart-palette='chroma'] {
|
|
478
|
+
--series-1: #2a78d6; /* blue */
|
|
479
|
+
--series-2: #eb6834; /* orange */
|
|
480
|
+
--series-3: #1baf7a; /* aqua */
|
|
481
|
+
--series-4: #eda100; /* yellow */
|
|
482
|
+
--series-5: #e87ba4; /* magenta */
|
|
483
|
+
--series-6: #008300; /* green */
|
|
484
|
+
--series-7: #4a3aa7; /* violet */
|
|
485
|
+
--series-8: #e34948; /* red */
|
|
486
|
+
}
|
|
487
|
+
[data-mode='dark'][data-chart-palette='chroma'],
|
|
488
|
+
[data-mode='dark'] [data-chart-palette='chroma'] {
|
|
489
|
+
/* The same eight hues re-stepped for the dark ground — not an inversion and
|
|
490
|
+
not a second palette. Law 8 holds: the names swap, the roles do not. */
|
|
491
|
+
--series-1: #3987e5;
|
|
492
|
+
--series-2: #d95926;
|
|
493
|
+
--series-3: #199e70;
|
|
494
|
+
--series-4: #c98500;
|
|
495
|
+
--series-5: #d55181;
|
|
496
|
+
--series-6: #008300;
|
|
497
|
+
--series-7: #9085e9;
|
|
498
|
+
--series-8: #e66767;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
/* The third value, and the one a branded consumer actually asks for.
|
|
502
|
+
*
|
|
503
|
+
* `chroma` answers "my users read categories by colour"; this answers a
|
|
504
|
+
* different question — "our accent is not ink, and a chart that ignores it
|
|
505
|
+
* looks like someone else's chart". Those are not the same need and one value
|
|
506
|
+
* could not serve both: eight distinguishable hues are a categorical palette,
|
|
507
|
+
* and one hue laddered by lightness is a brand mark. This is the second.
|
|
508
|
+
*
|
|
509
|
+
* It derives every step from `--clay` rather than listing colours, so it works
|
|
510
|
+
* for an accent nobody here has seen. Relative colour syntax holds the hue and
|
|
511
|
+
* chroma and re-states the LIGHTNESS, which is what makes the numbers below
|
|
512
|
+
* portable: separation and contrast are carried almost entirely by lightness,
|
|
513
|
+
* so pinning it pins both regardless of which hue arrives. A chroma the
|
|
514
|
+
* lightness cannot hold is gamut-mapped by the browser, which reduces chroma
|
|
515
|
+
* and preserves L — so the ladder survives the mapping intact.
|
|
516
|
+
*
|
|
517
|
+
* The ladder is eight even steps across L 0.173–0.640 on paper and
|
|
518
|
+
* L 0.967–0.530 on the dark ground. The top of each band is where it is
|
|
519
|
+
* because of the weakest hue rather than the prettiest: at maximum chroma the
|
|
520
|
+
* worst hue on paper (green, ~144°) clears 3:1 up to L 0.640 and fails above
|
|
521
|
+
* it, and the worst on the dark ground (violet, ~294°) clears it down to
|
|
522
|
+
* L 0.530. Measured across all 360 hues at maximum chroma: adjacent-pair
|
|
523
|
+
* separation ΔE 26.7 light / 25.0 dark (OKLab ×100, against a floor of 15),
|
|
524
|
+
* minimum contrast 3.11 on both grounds.
|
|
525
|
+
*
|
|
526
|
+
* The interleave differs from the mono ramp's by one position, and that is the
|
|
527
|
+
* whole point of the value. `--series-1` sits at L 0.440 — the band the five
|
|
528
|
+
* shipped accents already occupy — so a one-series chart paints in a colour
|
|
529
|
+
* within ΔE 2 of the accent itself rather than in the accent's darkest
|
|
530
|
+
* possible shade. Ink stays available as `--series-2`, which is the pairing a
|
|
531
|
+
* two-series chart wants anyway. Every adjacent index is four ladder steps
|
|
532
|
+
* apart, one better than the mono ramp manages.
|
|
533
|
+
*
|
|
534
|
+
* What this is NOT is a categorical palette. One hue laddered eight ways is
|
|
535
|
+
* legible for two or three series and is guesswork at eight; a consumer
|
|
536
|
+
* plotting eight categories wants `chroma`. Texture and `Chart.Legend` carry
|
|
537
|
+
* identity here for the same reason they do under `mono`.
|
|
538
|
+
*/
|
|
539
|
+
[data-chart-palette='accent'] {
|
|
540
|
+
--series-1: oklch(from var(--clay) 0.44 c h);
|
|
541
|
+
--series-2: oklch(from var(--clay) 0.173 c h);
|
|
542
|
+
--series-3: oklch(from var(--clay) 0.507 c h);
|
|
543
|
+
--series-4: oklch(from var(--clay) 0.24 c h);
|
|
544
|
+
--series-5: oklch(from var(--clay) 0.573 c h);
|
|
545
|
+
--series-6: oklch(from var(--clay) 0.306 c h);
|
|
546
|
+
--series-7: oklch(from var(--clay) 0.64 c h);
|
|
547
|
+
--series-8: oklch(from var(--clay) 0.373 c h);
|
|
548
|
+
}
|
|
549
|
+
[data-mode='dark'][data-chart-palette='accent'],
|
|
550
|
+
[data-mode='dark'] [data-chart-palette='accent'] {
|
|
551
|
+
/* The band mirrored, not the palette rebuilt — Law 8 again. `--clay` has
|
|
552
|
+
already swapped to its dark value by the time this reads it, so the only
|
|
553
|
+
thing restated here is where the ladder sits. */
|
|
554
|
+
--series-1: oklch(from var(--clay) 0.717 c h);
|
|
555
|
+
--series-2: oklch(from var(--clay) 0.967 c h);
|
|
556
|
+
--series-3: oklch(from var(--clay) 0.655 c h);
|
|
557
|
+
--series-4: oklch(from var(--clay) 0.905 c h);
|
|
558
|
+
--series-5: oklch(from var(--clay) 0.592 c h);
|
|
559
|
+
--series-6: oklch(from var(--clay) 0.842 c h);
|
|
560
|
+
--series-7: oklch(from var(--clay) 0.53 c h);
|
|
561
|
+
--series-8: oklch(from var(--clay) 0.78 c h);
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
/* ─── Forced colours, for every axis that carries a hue ────────────────────
|
|
565
|
+
`tokens.css` collapses the ramp to `CanvasText` when the reader has taken
|
|
566
|
+
the palette away, and it writes that on `:root` — which a palette attribute
|
|
567
|
+
then outranks, because an element that matches `[data-chart-palette]`
|
|
568
|
+
directly beats a value it merely inherits from the root, and beats it on
|
|
569
|
+
source order even at the root itself. So a reader in Windows High Contrast
|
|
570
|
+
who was on `chroma` kept getting the eight hues, which is the setting being
|
|
571
|
+
ignored rather than honoured.
|
|
572
|
+
|
|
573
|
+
Restated here, after the palettes, at the specificity the dark blocks use.
|
|
574
|
+
The values are `tokens.css`'s, unchanged — this only puts them back on top.
|
|
575
|
+
`--chart-*` is untouched: those declarations are already unopposed. */
|
|
576
|
+
@media (forced-colors: active) {
|
|
577
|
+
[data-chart-palette],
|
|
578
|
+
[data-mode][data-chart-palette],
|
|
579
|
+
[data-mode] [data-chart-palette] {
|
|
580
|
+
--series-1: CanvasText;
|
|
581
|
+
--series-2: CanvasText;
|
|
582
|
+
--series-3: CanvasText;
|
|
583
|
+
--series-4: CanvasText;
|
|
584
|
+
--series-5: CanvasText;
|
|
585
|
+
--series-6: CanvasText;
|
|
586
|
+
--series-7: CanvasText;
|
|
587
|
+
--series-8: CanvasText;
|
|
588
|
+
--series-track: Canvas;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
/* The accent has the same problem and needs the same answer.
|
|
592
|
+
|
|
593
|
+
A browser remaps an HTML element's own colours and does not reach inside
|
|
594
|
+
an SVG or a `color-mix()`, so a fill drawn from `--clay` survived forced
|
|
595
|
+
colours as a hue nobody asked for — and `[data-accent='moss']` matches the
|
|
596
|
+
element directly, which outranks anything the root merely offers. Under
|
|
597
|
+
forced colours the system owns what a chosen state looks like, so every
|
|
598
|
+
accent collapses to the reader's own ink. */
|
|
599
|
+
[data-accent],
|
|
600
|
+
[data-mode][data-accent],
|
|
601
|
+
[data-mode] [data-accent] {
|
|
602
|
+
--clay: CanvasText;
|
|
603
|
+
--clay-ink: CanvasText;
|
|
604
|
+
--red-soft: Canvas;
|
|
605
|
+
--on-red: Canvas;
|
|
606
|
+
}
|
|
607
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Brand colour mirrors for surfaces that cannot read CSS custom properties —
|
|
3
|
+
* OpenGraph/Satori cards, build-time scripts, `theme-color` in a web manifest,
|
|
4
|
+
* a canvas.
|
|
5
|
+
*
|
|
6
|
+
* The RUNTIME theme lives in `styles/tokens.css` (`:root` + `[data-mode="dark"]`)
|
|
7
|
+
* and that is the single place to recolour the system. These literals mirror
|
|
8
|
+
* specific tokens; `brand.test.ts` parses the CSS and fails if the two drift,
|
|
9
|
+
* so this file cannot quietly fall behind the thing it mirrors.
|
|
10
|
+
*/
|
|
11
|
+
declare const BRAND: {
|
|
12
|
+
/** = light --paper. The page ground. */
|
|
13
|
+
readonly paper: "#ffffff";
|
|
14
|
+
/** = dark --paper. The dark viewport's `theme-color`. */
|
|
15
|
+
readonly paperDark: "#0d0d0d";
|
|
16
|
+
/** = light --paper-2. One step off the ground. */
|
|
17
|
+
readonly paperElevated: "#f7f7f5";
|
|
18
|
+
/** = light --ink. The mark. */
|
|
19
|
+
readonly ink: "#101010";
|
|
20
|
+
/** = dark --ink. */
|
|
21
|
+
readonly inkDark: "#f4f4f2";
|
|
22
|
+
/** = light --ink-2. Body copy that is not the mark. */
|
|
23
|
+
readonly body: "#4a4a4a";
|
|
24
|
+
/** = light --ink-3-aa. The lightest text step that still clears AA on paper. */
|
|
25
|
+
readonly muted: "#5c5c5c";
|
|
26
|
+
/** = light --stone. The fill under a skeleton, a bar, a quiet plate. */
|
|
27
|
+
readonly stone: "#f2f1ee";
|
|
28
|
+
/** = light --rule. Hairline. */
|
|
29
|
+
readonly rule: "#edebe6";
|
|
30
|
+
/** = light --rule-2. Edge. */
|
|
31
|
+
readonly ruleStrong: "#dbdbd6";
|
|
32
|
+
/** = --feature-surface. The one reversed plate. */
|
|
33
|
+
readonly feature: "#262626";
|
|
34
|
+
/** = --on-dark. Type over a photograph — a dark ground in BOTH themes. */
|
|
35
|
+
readonly onDark: "#fbfbfa";
|
|
36
|
+
/** Byline weight over a photograph. */
|
|
37
|
+
readonly onDarkMuted: "rgba(251,251,250,0.82)";
|
|
38
|
+
/** = --photo-scrim, as an "r, g, b" tuple for a gradient. */
|
|
39
|
+
readonly scrimRgb: "16, 16, 16";
|
|
40
|
+
/** = light --ok / --warn / --danger. The only chroma in the system. */
|
|
41
|
+
readonly success: "#3d6b34";
|
|
42
|
+
readonly warning: "#8a5a00";
|
|
43
|
+
readonly danger: "#a83214";
|
|
44
|
+
};
|
|
45
|
+
type BrandColor = keyof typeof BRAND;
|
|
46
|
+
|
|
47
|
+
export { BRAND, type BrandColor };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const BRAND = {
|
|
2
|
+
/** = light --paper. The page ground. */
|
|
3
|
+
paper: "#ffffff",
|
|
4
|
+
/** = dark --paper. The dark viewport's `theme-color`. */
|
|
5
|
+
paperDark: "#0d0d0d",
|
|
6
|
+
/** = light --paper-2. One step off the ground. */
|
|
7
|
+
paperElevated: "#f7f7f5",
|
|
8
|
+
/** = light --ink. The mark. */
|
|
9
|
+
ink: "#101010",
|
|
10
|
+
/** = dark --ink. */
|
|
11
|
+
inkDark: "#f4f4f2",
|
|
12
|
+
/** = light --ink-2. Body copy that is not the mark. */
|
|
13
|
+
body: "#4a4a4a",
|
|
14
|
+
/** = light --ink-3-aa. The lightest text step that still clears AA on paper. */
|
|
15
|
+
muted: "#5c5c5c",
|
|
16
|
+
/** = light --stone. The fill under a skeleton, a bar, a quiet plate. */
|
|
17
|
+
stone: "#f2f1ee",
|
|
18
|
+
/** = light --rule. Hairline. */
|
|
19
|
+
rule: "#edebe6",
|
|
20
|
+
/** = light --rule-2. Edge. */
|
|
21
|
+
ruleStrong: "#dbdbd6",
|
|
22
|
+
/** = --feature-surface. The one reversed plate. */
|
|
23
|
+
feature: "#262626",
|
|
24
|
+
/** = --on-dark. Type over a photograph — a dark ground in BOTH themes. */
|
|
25
|
+
onDark: "#fbfbfa",
|
|
26
|
+
/** Byline weight over a photograph. */
|
|
27
|
+
onDarkMuted: "rgba(251,251,250,0.82)",
|
|
28
|
+
/** = --photo-scrim, as an "r, g, b" tuple for a gradient. */
|
|
29
|
+
scrimRgb: "16, 16, 16",
|
|
30
|
+
/** = light --ok / --warn / --danger. The only chroma in the system. */
|
|
31
|
+
success: "#3d6b34",
|
|
32
|
+
warning: "#8a5a00",
|
|
33
|
+
danger: "#a83214"
|
|
34
|
+
};
|
|
35
|
+
export {
|
|
36
|
+
BRAND
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=brand.js.map
|