@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/tokens/brand.ts"],"sourcesContent":["/**\n * Brand colour mirrors for surfaces that cannot read CSS custom properties —\n * OpenGraph/Satori cards, build-time scripts, `theme-color` in a web manifest,\n * a canvas.\n *\n * The RUNTIME theme lives in `styles/tokens.css` (`:root` + `[data-mode=\"dark\"]`)\n * and that is the single place to recolour the system. These literals mirror\n * specific tokens; `brand.test.ts` parses the CSS and fails if the two drift,\n * so this file cannot quietly fall behind the thing it mirrors.\n */\nexport const BRAND = {\n /** = light --paper. The page ground. */\n paper: '#ffffff',\n /** = dark --paper. The dark viewport's `theme-color`. */\n paperDark: '#0d0d0d',\n /** = light --paper-2. One step off the ground. */\n paperElevated: '#f7f7f5',\n /** = light --ink. The mark. */\n ink: '#101010',\n /** = dark --ink. */\n inkDark: '#f4f4f2',\n /** = light --ink-2. Body copy that is not the mark. */\n body: '#4a4a4a',\n /** = light --ink-3-aa. The lightest text step that still clears AA on paper. */\n muted: '#5c5c5c',\n /** = light --stone. The fill under a skeleton, a bar, a quiet plate. */\n stone: '#f2f1ee',\n /** = light --rule. Hairline. */\n rule: '#edebe6',\n /** = light --rule-2. Edge. */\n ruleStrong: '#dbdbd6',\n /** = --feature-surface. The one reversed plate. */\n feature: '#262626',\n /** = --on-dark. Type over a photograph — a dark ground in BOTH themes. */\n onDark: '#fbfbfa',\n /** Byline weight over a photograph. */\n onDarkMuted: 'rgba(251,251,250,0.82)',\n /** = --photo-scrim, as an \"r, g, b\" tuple for a gradient. */\n scrimRgb: '16, 16, 16',\n /** = light --ok / --warn / --danger. The only chroma in the system. */\n success: '#3d6b34',\n warning: '#8a5a00',\n danger: '#a83214',\n} as const\n\nexport type BrandColor = keyof typeof BRAND\n"],"mappings":"AAUO,MAAM,QAAQ;AAAA;AAAA,EAEnB,OAAO;AAAA;AAAA,EAEP,WAAW;AAAA;AAAA,EAEX,eAAe;AAAA;AAAA,EAEf,KAAK;AAAA;AAAA,EAEL,SAAS;AAAA;AAAA,EAET,MAAM;AAAA;AAAA,EAEN,OAAO;AAAA;AAAA,EAEP,OAAO;AAAA;AAAA,EAEP,MAAM;AAAA;AAAA,EAEN,YAAY;AAAA;AAAA,EAEZ,SAAS;AAAA;AAAA,EAET,QAAQ;AAAA;AAAA,EAER,aAAa;AAAA;AAAA,EAEb,UAAU;AAAA;AAAA,EAEV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AACV;","names":[]}
|
package/dist/tokens.css
ADDED
|
@@ -0,0 +1,666 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
WHITE RESET — design tokens
|
|
3
|
+
--------------------------------------------------------------------------
|
|
4
|
+
The portable layer of @misoto22/folio: plain CSS custom properties, no
|
|
5
|
+
Tailwind dependency. Import this alone and any consumer — a Tailwind app, a
|
|
6
|
+
plain-CSS app, a preview sandbox — gets the same look.
|
|
7
|
+
|
|
8
|
+
A pure-white monochrome system for software, writing, and photography. The
|
|
9
|
+
ground is paper-white, the mark is near-black, and the only chroma left in
|
|
10
|
+
the file is status, which is bound to state and never to brand.
|
|
11
|
+
|
|
12
|
+
Two blocks, and only two: the primitives below, and the semantic aliases in
|
|
13
|
+
`semantic.css` that name what a primitive is FOR. A component never reads a
|
|
14
|
+
primitive directly — it reads the alias — so recolouring the system is one
|
|
15
|
+
edit here rather than a sweep through every component.
|
|
16
|
+
|
|
17
|
+
Hex mirrors for surfaces that cannot read CSS custom properties (OpenGraph
|
|
18
|
+
cards, build scripts, `theme-color`) live in `tokens/brand.ts`, and a test
|
|
19
|
+
holds the two in sync.
|
|
20
|
+
========================================================================== */
|
|
21
|
+
|
|
22
|
+
/* `[data-surface='paper']` is the surface axis's own default, WRITTEN. Every
|
|
23
|
+
other axis value has a name; this one was "leave the attribute off", which
|
|
24
|
+
works exactly once — at the root. A subtree cannot say "the White Reset"
|
|
25
|
+
inside a page whose root is warm, so five theme specimens on one page each
|
|
26
|
+
inherited whichever surface the reader had applied to the site and every one
|
|
27
|
+
of them showed the same colours. Naming the default is what lets a subtree
|
|
28
|
+
opt out of an ancestor's theme rather than only into a different one.
|
|
29
|
+
|
|
30
|
+
It sits on the ROOT's own rule rather than restating the values, so there is
|
|
31
|
+
nothing here to drift. Specificity ties with `[data-surface='warm']` in
|
|
32
|
+
themes.css and loses on source order, which is correct: a wrapper that says
|
|
33
|
+
`warm` does not match this selector at all. */
|
|
34
|
+
:root,
|
|
35
|
+
[data-mode='light'],
|
|
36
|
+
[data-surface='paper'],
|
|
37
|
+
[data-rules='hairline'] {
|
|
38
|
+
--paper: #ffffff;
|
|
39
|
+
--paper-2: #f7f7f5;
|
|
40
|
+
--bar: var(--stone);
|
|
41
|
+
--bar-2: var(--stone);
|
|
42
|
+
|
|
43
|
+
/* Two text steps and nothing lighter. --ink-3-aa is the floor — it clears
|
|
44
|
+
AA on white at 6.7:1, and every step above it is darker. --ink-3 is the
|
|
45
|
+
same weight expressed as alpha, for rules and washes that must sit over a
|
|
46
|
+
photograph as well as over paper. */
|
|
47
|
+
--ink: #101010;
|
|
48
|
+
--ink-2: #4a4a4a;
|
|
49
|
+
--ink-3: rgba(16, 16, 16, 0.55);
|
|
50
|
+
--ink-3-aa: #5c5c5c;
|
|
51
|
+
|
|
52
|
+
/* The second editorial voice is not a hue — it is one more neutral step,
|
|
53
|
+
sitting between --ink and --ink-2, so a byline separates from body copy
|
|
54
|
+
without introducing colour. */
|
|
55
|
+
--forest: #3a3a3a;
|
|
56
|
+
--mist: var(--stone);
|
|
57
|
+
--stone: #f2f1ee;
|
|
58
|
+
|
|
59
|
+
/* Monochrome collapses the pointer onto the mark: the accent IS ink. What
|
|
60
|
+
used to be carried by hue is now carried by weight, rule and reversal —
|
|
61
|
+
an ink pill, an ink underline, an ink-filled plate. */
|
|
62
|
+
--clay: var(--ink);
|
|
63
|
+
--clay-ink: var(--clay);
|
|
64
|
+
|
|
65
|
+
/* The one reversed plate, and the one place the ramp needs a tenth step.
|
|
66
|
+
Set to var(--ink) it was the page's darkest possible mark used as a field,
|
|
67
|
+
which on a white page reads as a hole punched through it rather than as a
|
|
68
|
+
panel. Two steps lighter keeps the reversal — 15.1:1 for paper-white type
|
|
69
|
+
on it — and matches the dark side. */
|
|
70
|
+
--feature-surface: #262626;
|
|
71
|
+
--on-feature: var(--paper);
|
|
72
|
+
--focus-on-feature: var(--on-feature);
|
|
73
|
+
--on-photo: var(--paper);
|
|
74
|
+
--photo-caption-surface: var(--ink);
|
|
75
|
+
--photo-shadow: 0 1px 6px rgb(0 0 0 / 0.72);
|
|
76
|
+
|
|
77
|
+
/* Three rule weights, because a monochrome page has no colour left to
|
|
78
|
+
separate one band from the next: hairline, edge, and hard. */
|
|
79
|
+
--rule: #edebe6;
|
|
80
|
+
--rule-2: #dbdbd6;
|
|
81
|
+
--rule-hard: var(--ink);
|
|
82
|
+
|
|
83
|
+
/* Historic role names, kept so a consumer written against the previous
|
|
84
|
+
palette keeps resolving. Their hue is now ink; the role remains "the
|
|
85
|
+
single editorial pointer". */
|
|
86
|
+
--red: var(--clay);
|
|
87
|
+
--red-ink: var(--clay);
|
|
88
|
+
--red-soft: rgba(16, 16, 16, 0.07);
|
|
89
|
+
--on-red: var(--paper);
|
|
90
|
+
|
|
91
|
+
--shadow-offset: var(--clay);
|
|
92
|
+
|
|
93
|
+
/* ─── Data ───────────────────────────────────────────────────────────────
|
|
94
|
+
The series ramp a chart paints with, and the one place the White Reset
|
|
95
|
+
has to answer a question a monochrome system would rather not be asked:
|
|
96
|
+
how do you tell six lines apart with no hue left to spend?
|
|
97
|
+
|
|
98
|
+
The answer is that hue was never the primary carrier here — TEXTURE is.
|
|
99
|
+
Every chart primitive ships a fill variant (hatched, dotted, lines,
|
|
100
|
+
stripped, duotone) and the series ramp below is the SECOND encoding, not
|
|
101
|
+
the first. That ordering is what makes the set legible to a colour-blind
|
|
102
|
+
reader, in greyscale print, and under forced-colours, none of which a
|
|
103
|
+
hue-first categorical palette survives.
|
|
104
|
+
|
|
105
|
+
The eight steps are interleaved rather than sequential — light, dark,
|
|
106
|
+
light, dark — so neighbouring series sit as far apart on the lightness
|
|
107
|
+
ramp as eight steps allow. Adjacent separation is ΔE 21.0 (OKLab ×100)
|
|
108
|
+
against a 15 floor, and every step clears 3:1 on its own ground.
|
|
109
|
+
|
|
110
|
+
Two checks a chromatic palette would pass fail here BY DESIGN, and are
|
|
111
|
+
stated rather than hidden: the chroma floor (these are greys) and the
|
|
112
|
+
lightness band (--series-1 is ink, and ink is the darkest mark the system
|
|
113
|
+
has). Texture plus a legend is the relief, and both are mandatory —
|
|
114
|
+
`Chart.Legend` is not optional above one series.
|
|
115
|
+
|
|
116
|
+
A consumer who genuinely needs hue does not hand-pick hexes: it sets
|
|
117
|
+
`data-chart-palette="chroma"` (see themes.css), which re-points these
|
|
118
|
+
eight names onto a categorical palette validated against both grounds —
|
|
119
|
+
or `"accent"`, which ladders the same eight names out of `--clay` when
|
|
120
|
+
what the charts have to carry is a brand rather than eight categories. */
|
|
121
|
+
--series-1: #101010;
|
|
122
|
+
--series-2: #565656;
|
|
123
|
+
--series-3: #202020;
|
|
124
|
+
--series-4: #6a6a6a;
|
|
125
|
+
--series-5: #313131;
|
|
126
|
+
--series-6: #7e7e7e;
|
|
127
|
+
--series-7: #434343;
|
|
128
|
+
--series-8: #939393;
|
|
129
|
+
/* The empty ground a part-of-whole mark is drawn against — the unfilled
|
|
130
|
+
remainder of a radial bar, the track behind a gauge. Not --rule: a track
|
|
131
|
+
is a field, and a field that reads as a hairline disappears at radius. */
|
|
132
|
+
--series-track: #eeece7;
|
|
133
|
+
|
|
134
|
+
/* How solid a translucent mark is, and the one pair of tokens in the file
|
|
135
|
+
that is NOT the same number on both grounds.
|
|
136
|
+
|
|
137
|
+
A wash is `ink at N% over the page`. On paper, ink at 14% lands around
|
|
138
|
+
#e3e3e3 — a legible, recessive band. Run the same 14% the other way and
|
|
139
|
+
paper-white over near-black lands around #2c2c2c, which on a #0d0d0d
|
|
140
|
+
ground is not a band, it is nothing. Perceived lightness is not linear and
|
|
141
|
+
the two directions do not meet in the middle, so a single number cannot
|
|
142
|
+
serve both: the dark side needs roughly twice the alpha to read as the
|
|
143
|
+
same weight of mark. Every area fill, texture and flow band in the chart
|
|
144
|
+
package reads these rather than carrying its own literal. */
|
|
145
|
+
--chart-fill: 0.14;
|
|
146
|
+
--chart-texture: 0.42;
|
|
147
|
+
|
|
148
|
+
color-scheme: light;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* The dark half of the same reset. Without it, `paper` inside a dark page
|
|
152
|
+
would match the light rule above and light up one specimen in the middle of
|
|
153
|
+
a dark gallery. */
|
|
154
|
+
[data-mode='dark'],
|
|
155
|
+
/* BOTH forms, the way every dark rule in `themes.css` is written. The compound
|
|
156
|
+
is not the same selector as the descendant, and the compound is the one that
|
|
157
|
+
matters most: an app puts `data-mode` and its theme axes on the SAME element
|
|
158
|
+
— `<html data-mode="dark" data-surface="paper">` — where a descendant
|
|
159
|
+
selector matches nothing. Written descendant-only, every dark page took the
|
|
160
|
+
light rule above and painted light ink on a dark ground. */
|
|
161
|
+
[data-mode='dark'][data-surface='paper'],
|
|
162
|
+
[data-mode='dark'] [data-surface='paper'],
|
|
163
|
+
[data-mode='dark'][data-rules='hairline'],
|
|
164
|
+
[data-mode='dark'] [data-rules='hairline'] {
|
|
165
|
+
--paper: #0d0d0d;
|
|
166
|
+
--paper-2: #161616;
|
|
167
|
+
--bar: var(--stone);
|
|
168
|
+
--bar-2: var(--stone);
|
|
169
|
+
|
|
170
|
+
--ink: #f4f4f2;
|
|
171
|
+
--ink-2: #b4b4b0;
|
|
172
|
+
--ink-3: rgba(244, 244, 242, 0.55);
|
|
173
|
+
--ink-3-aa: #9a9a96;
|
|
174
|
+
|
|
175
|
+
--forest: #c9c9c5;
|
|
176
|
+
--mist: var(--stone);
|
|
177
|
+
--stone: #1f1f1f;
|
|
178
|
+
--clay: var(--ink);
|
|
179
|
+
--clay-ink: var(--clay);
|
|
180
|
+
--feature-surface: #1a1a1a;
|
|
181
|
+
--on-feature: var(--ink);
|
|
182
|
+
--focus-on-feature: var(--on-feature);
|
|
183
|
+
|
|
184
|
+
/* A photograph is a dark ground in both themes, so this one does not swap
|
|
185
|
+
with --paper. It sits a shade off pure white because the light side has
|
|
186
|
+
already spent pure white on the page ground, and one hex serves one role. */
|
|
187
|
+
--on-photo: #fbfbfa;
|
|
188
|
+
--photo-caption-surface: var(--paper);
|
|
189
|
+
--photo-shadow: 0 1px 6px rgb(0 0 0 / 0.72);
|
|
190
|
+
|
|
191
|
+
--rule: rgba(244, 244, 242, 0.14);
|
|
192
|
+
--rule-2: rgba(244, 244, 242, 0.26);
|
|
193
|
+
--rule-hard: var(--ink);
|
|
194
|
+
|
|
195
|
+
--red: var(--clay);
|
|
196
|
+
--red-ink: var(--clay);
|
|
197
|
+
--red-soft: rgba(244, 244, 242, 0.12);
|
|
198
|
+
--on-red: var(--paper);
|
|
199
|
+
|
|
200
|
+
--shadow-offset: var(--clay);
|
|
201
|
+
|
|
202
|
+
--series-1: #f4f4f2;
|
|
203
|
+
--series-2: #9b9b9b;
|
|
204
|
+
--series-3: #dddddd;
|
|
205
|
+
--series-4: #868686;
|
|
206
|
+
--series-5: #c7c7c7;
|
|
207
|
+
--series-6: #727272;
|
|
208
|
+
--series-7: #b0b0b0;
|
|
209
|
+
--series-8: #636363;
|
|
210
|
+
--series-track: #232323;
|
|
211
|
+
|
|
212
|
+
--chart-fill: 0.3;
|
|
213
|
+
--chart-texture: 0.72;
|
|
214
|
+
|
|
215
|
+
color-scheme: dark;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
:root {
|
|
219
|
+
/* ─── Type ───────────────────────────────────────────────────────────────
|
|
220
|
+
Three faces and their CJK companions.
|
|
221
|
+
|
|
222
|
+
EVERY `var()` here carries a fallback, and that is load-bearing rather than
|
|
223
|
+
tidy. A `var(--font-hanken)` with no fallback, in a host that does not
|
|
224
|
+
define `--font-hanken`, is invalid at computed-value time — and IACVT does
|
|
225
|
+
not skip the one term, it discards the WHOLE declaration. So the entire
|
|
226
|
+
stack collapsed to nothing and every surface rendered in the platform's
|
|
227
|
+
system font. It worked inside the site, where next/font defines those
|
|
228
|
+
names, and failed everywhere else: for a package whose whole purpose is to
|
|
229
|
+
render the same on both sides, that is the worst possible bug.
|
|
230
|
+
|
|
231
|
+
With the fallback, a host that loads the faces itself (next/font, a CDN)
|
|
232
|
+
sets `--font-*` and wins; a host that does not falls through to the literal
|
|
233
|
+
family name, which is exactly the name `fonts.css` declares its vendored
|
|
234
|
+
@font-face rules under.
|
|
235
|
+
|
|
236
|
+
The CJK stacks deliberately end WITHOUT a generic family. They are spliced
|
|
237
|
+
into the middle of the three stacks above, and a generic in the middle
|
|
238
|
+
terminates a font stack — everything listed after it is unreachable. */
|
|
239
|
+
--sans: var(--font-hanken, 'Hanken Grotesk'), var(--cjk-sans), 'Helvetica Neue', Arial, sans-serif;
|
|
240
|
+
--serif: var(--font-newsreader, 'Newsreader'), var(--cjk-serif), Georgia, serif;
|
|
241
|
+
--mono: var(--font-plex-mono, 'IBM Plex Mono'), var(--cjk-sans), ui-monospace, SFMono-Regular, Menlo,
|
|
242
|
+
monospace;
|
|
243
|
+
|
|
244
|
+
--cjk-serif: var(--font-noto-serif-sc, 'Noto Serif SC'), 'Source Han Serif SC', 'Songti SC', STSong,
|
|
245
|
+
SimSun;
|
|
246
|
+
--cjk-sans: var(--font-noto-sans-sc, 'Noto Sans SC'), 'PingFang SC', 'Hiragino Sans GB',
|
|
247
|
+
'Microsoft YaHei';
|
|
248
|
+
|
|
249
|
+
--lh-cjk: 1.8;
|
|
250
|
+
--ls-cjk: 0;
|
|
251
|
+
|
|
252
|
+
/* Heading scale — the single ladder every surface climbs. Five steps, each
|
|
253
|
+
fluid between a phone and the 1288px page, and nothing sits above
|
|
254
|
+
--fs-title: a page has exactly one thing larger than its own records.
|
|
255
|
+
|
|
256
|
+
Steps sit close together by design — the ladder separates records of the
|
|
257
|
+
same kind, not a heading from its own sub-heading. Two headings that nest
|
|
258
|
+
must skip a step: --fs-lead over --fs-sub reads as a hierarchy (1.33),
|
|
259
|
+
--fs-lead over --fs-heading does not (1.14). */
|
|
260
|
+
/* ─── The fluid base ──────────────────────────────────────────────────────
|
|
261
|
+
Every fluid step below is one percent of THIS, not of the viewport.
|
|
262
|
+
|
|
263
|
+
The default is `1vw`, which is what a page wants. A bounded frame — a
|
|
264
|
+
device preview, a documentation canvas, an embedded console — overrides it
|
|
265
|
+
to `1cqi` and declares itself a `container`, and the whole ramp re-bases
|
|
266
|
+
onto the frame's width. Without the seam a 390px preview inside a 1440px
|
|
267
|
+
window renders 54px headings and 64px gutters, which is not what a 390px
|
|
268
|
+
screen looks like and is exactly the bug this replaces.
|
|
269
|
+
|
|
270
|
+
The ramp itself is declared once, below, for BOTH `:root` and a frame —
|
|
271
|
+
rather than composed here and inherited. A custom property substitutes
|
|
272
|
+
`var()` where it is DECLARED, so a ramp written only on `:root` bakes in
|
|
273
|
+
`1vw` and a deeper `--fluid` never reaches it. */
|
|
274
|
+
--fluid: 1vw;
|
|
275
|
+
|
|
276
|
+
--maxw: 1288px;
|
|
277
|
+
--col: 8.3333%;
|
|
278
|
+
--row: 52px;
|
|
279
|
+
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/* Display voice. How loud a page's display type and labels are, read by the
|
|
283
|
+
website compositions instead of literal values so the voice axis in
|
|
284
|
+
`themes.css` can quiet them. Declared on the root only — never on a fluid
|
|
285
|
+
frame — so an axis set on an ancestor is not reset inside one. */
|
|
286
|
+
:root {
|
|
287
|
+
--display-scale: 1;
|
|
288
|
+
--display-weight: 300;
|
|
289
|
+
--label-font: var(--font-mono);
|
|
290
|
+
--label-case: uppercase;
|
|
291
|
+
--label-tracking-scale: 1;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/* The fluid ramp, computed wherever `--fluid` is set.
|
|
295
|
+
`[data-fluid-frame]` must sit INSIDE the element carrying `container-type`:
|
|
296
|
+
a container query unit resolves against an ANCESTOR container, never against
|
|
297
|
+
the element that declares the container itself. */
|
|
298
|
+
:root,
|
|
299
|
+
[data-fluid-frame] {
|
|
300
|
+
/* `--display-scale` is the voice axis's lever on the two display steps; at
|
|
301
|
+
1 they are the ramp as drawn. */
|
|
302
|
+
--fs-title: calc(clamp(2.5rem, calc(4.6 * var(--fluid)), 3.375rem) * var(--display-scale, 1)); /* page h1 40 → 54px */
|
|
303
|
+
--fs-lead: calc(clamp(1.875rem, calc(3 * var(--fluid)), 2.625rem) * var(--display-scale, 1)); /* band heading 30 → 42px */
|
|
304
|
+
--fs-heading: clamp(1.5rem, calc(2.1 * var(--fluid)), 1.8125rem); /* record title 24 → 29px */
|
|
305
|
+
--fs-sub: clamp(1.3125rem, calc(1.7 * var(--fluid)), 1.5625rem); /* card sub-head 21 → 25px */
|
|
306
|
+
--fs-item: clamp(1.125rem, calc(1.35 * var(--fluid)), 1.25rem); /* in-card title 18 → 20px */
|
|
307
|
+
|
|
308
|
+
--pad: clamp(18px, calc(4.4 * var(--fluid)), 64px);
|
|
309
|
+
--sec: clamp(54px, calc(7 * var(--fluid)), 96px);
|
|
310
|
+
--sec-tight: clamp(40px, calc(5 * var(--fluid)), 68px);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/* ─── Radius ───────────────────────────────────────────────────────────────
|
|
314
|
+
One ladder, and a single factor that moves the whole of it.
|
|
315
|
+
|
|
316
|
+
The four steps used to be four independent numbers, and a radius theme
|
|
317
|
+
re-typed all four. That is how the ladder went out of proportion with
|
|
318
|
+
itself: nothing held the steps in a fixed ratio, so a corner nested inside
|
|
319
|
+
another corner matched it at the one setting somebody checked and at no
|
|
320
|
+
other. Here the steps are derived, the factor is the only thing a theme
|
|
321
|
+
sets, and the proportions are the same at every setting by construction.
|
|
322
|
+
|
|
323
|
+
THE NESTING LAW. Two rounded edges separated by a gap of `p` are concentric
|
|
324
|
+
only when the inner radius is the outer minus `p`. Anything else pinches at
|
|
325
|
+
the corner — the gap narrows as it turns, which is the mismatch you see
|
|
326
|
+
before you can name it. Both directions are named below (`--radius-row`
|
|
327
|
+
subtracts, `--radius-frame` adds) so a surface never has to guess.
|
|
328
|
+
|
|
329
|
+
THE PILL IS ON THE LADDER, which is a change. It used to be exempt, on the
|
|
330
|
+
grounds that a pill is a shape rather than a corner. It is — but a square
|
|
331
|
+
theme that left every button a capsule was not a square theme, and that
|
|
332
|
+
exemption is what bought it. A true CIRCLE is still geometry and still
|
|
333
|
+
`rounded-full`: an avatar, a status dot, a spinner, a radio (which is round
|
|
334
|
+
so it cannot be mistaken for a checkbox).
|
|
335
|
+
|
|
336
|
+
Declared for `:root` AND for `[data-radius]`, rather than composed once and
|
|
337
|
+
inherited. A custom property substitutes `var()` where it is DECLARED, so a
|
|
338
|
+
ladder written only on `:root` bakes in the root's factor and a themed
|
|
339
|
+
subtree deeper in the page never reaches it — the same trap `--fluid` above
|
|
340
|
+
documents, and the reason five themes can share the themes page at all. */
|
|
341
|
+
:root,
|
|
342
|
+
[data-radius] {
|
|
343
|
+
--radius-factor: 1;
|
|
344
|
+
/* Clamps the factor at 1 for the ADDING direction only. A frame's air is a
|
|
345
|
+
fixed number of pixels, so `--radius-lg + 16px` would leave a rounded
|
|
346
|
+
frame around a square panel the moment the theme went square; gated, it
|
|
347
|
+
collapses to nothing along with everything else. */
|
|
348
|
+
--radius-gate: min(1, var(--radius-factor));
|
|
349
|
+
|
|
350
|
+
/* The numbers are the ones the rest of the industry settled on, and that is
|
|
351
|
+
the argument for them: 8px for a control, 12px for a panel, and 4/6 for the
|
|
352
|
+
small marks inside one. Tailwind's own scale, shadcn's `--radius` ± 2 and
|
|
353
|
+
± 4, Radix Themes' steps 3 and 4, and Material's `xs`/`sm`/`md` all agree
|
|
354
|
+
within a pixel of this. The previous 2/4/6/10 was a step tighter than any
|
|
355
|
+
of them, which is what made a card read as a rectangle with the corners
|
|
356
|
+
shaved rather than as a rounded panel. */
|
|
357
|
+
--radius-xs: calc(4px * var(--radius-factor)); /* a mark inside a tight box */
|
|
358
|
+
--radius-sm: calc(6px * var(--radius-factor)); /* chips, keys, list rows */
|
|
359
|
+
--radius: calc(8px * var(--radius-factor)); /* inputs, code, small plates */
|
|
360
|
+
--radius-lg: calc(12px * var(--radius-factor)); /* cards, dialogs, menu panels */
|
|
361
|
+
--radius-pill: calc(999px * var(--radius-factor)); /* capsules and counters */
|
|
362
|
+
|
|
363
|
+
/* The nesting law, applied to the two insets this system actually uses. */
|
|
364
|
+
--radius-row: max(0px, calc(var(--radius-lg) - 0.375rem)); /* a row in a 6px-padded panel */
|
|
365
|
+
--radius-frame: calc(var(--radius-lg) + 1rem * var(--radius-gate)); /* a frame 16px outside a panel */
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/* The density axis's own default, named — and on a rule that holds NOTHING
|
|
369
|
+
but density. It was on the block above, which also carries the status
|
|
370
|
+
colours, the floating surfaces and the motion steps: every element that
|
|
371
|
+
said `data-density="comfortable"` therefore re-declared the whole LIGHT
|
|
372
|
+
palette on itself, and in dark mode every example canvas on the site
|
|
373
|
+
painted a light --danger on a dark ground. A neutral value may only
|
|
374
|
+
restate the axis it belongs to. */
|
|
375
|
+
:root,
|
|
376
|
+
[data-density='comfortable'] {
|
|
377
|
+
/* ─── Density ────────────────────────────────────────────────────────────
|
|
378
|
+
The second theming axis, and the only other one. Light/dark swaps colour;
|
|
379
|
+
density swaps the size of anything a finger or a pointer has to hit.
|
|
380
|
+
|
|
381
|
+
`comfortable` is the default, and 44px is not an arbitrary number: it is
|
|
382
|
+
the pointer-target size WCAG 2.5.5 (AAA) asks for.
|
|
383
|
+
|
|
384
|
+
`compact` is for a dense desktop tool driven by a mouse — a data grid, an
|
|
385
|
+
admin console — and it is a real trade, stated rather than hidden. At 36px
|
|
386
|
+
it still clears WCAG 2.5.8 (AA, 24px) with room to spare, and no longer
|
|
387
|
+
meets 2.5.5. Do not put it on a page a phone will open.
|
|
388
|
+
|
|
389
|
+
Set it on any container: `<div data-density="compact">`. Controls read
|
|
390
|
+
these tokens, so the whole subtree changes together and nothing has to be
|
|
391
|
+
told twice. */
|
|
392
|
+
--control-h-sm: 2.25rem; /* 36px */
|
|
393
|
+
--control-h-md: 2.75rem; /* 44px — WCAG 2.5.5 */
|
|
394
|
+
--control-h-lg: 3rem; /* 48px */
|
|
395
|
+
--control-px-sm: 1rem;
|
|
396
|
+
--control-px-md: 1.5rem;
|
|
397
|
+
--control-px-lg: 1.75rem;
|
|
398
|
+
/* The vertical padding is part of the axis too, and has to be: a control
|
|
399
|
+
whose padding alone exceeds the compact height never shrinks, because
|
|
400
|
+
`min-height` is a floor and not a ceiling. */
|
|
401
|
+
--control-py-sm: 0.5rem;
|
|
402
|
+
--control-py-md: 0.75rem;
|
|
403
|
+
--control-py-lg: 0.75rem;
|
|
404
|
+
/* And so is the LEADING, which is the term that guard was missing.
|
|
405
|
+
`min-height` is a floor, and what has to stay under it is the whole box:
|
|
406
|
+
the line, the padding and the border. The padding was scaled and the line
|
|
407
|
+
was left inheriting the body's 1.6 — so `sm` measured 20.8 + 16 + 2 = 38.8
|
|
408
|
+
against a 36px token, `md` 46 against 44 and `lg` 50 against 48. Every
|
|
409
|
+
text button in the system was two to three pixels taller than the number
|
|
410
|
+
documenting it, and the floor never bound because the box had already
|
|
411
|
+
cleared it.
|
|
412
|
+
|
|
413
|
+
One value on both densities: the font sizes do not move with density, only
|
|
414
|
+
the padding and the heights do, so this does not have to. It is not a
|
|
415
|
+
reading leading — a control's label is one line, and 1.2 leaves every size
|
|
416
|
+
at every density inside its own height with room to spare. The test in
|
|
417
|
+
`tokens.test.ts` is what keeps that true. */
|
|
418
|
+
--control-lh: 1.2;
|
|
419
|
+
--control-gap: 0.625rem;
|
|
420
|
+
/* Text inputs are measured separately: they are read as much as they are
|
|
421
|
+
hit, so their padding tracks the type rather than the target. */
|
|
422
|
+
--field-px: 0.875rem;
|
|
423
|
+
--field-py: 0.625rem;
|
|
424
|
+
|
|
425
|
+
/* A table's own row padding. Separate from the control scale because a table
|
|
426
|
+
row is neither a control nor a field — it is a line of text with a rule
|
|
427
|
+
under it, and it tightens on its own axis. */
|
|
428
|
+
--table-pad-y: 0.875rem;
|
|
429
|
+
/* `0px`, not `0`. The cell rule adds to this inside a calc, and a unitless
|
|
430
|
+
zero makes `calc(0 + 1.5rem)` invalid at computed-value time — the whole
|
|
431
|
+
declaration is dropped and every column loses its gutter in silence. */
|
|
432
|
+
--table-pad-x: 0px;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
:root {
|
|
436
|
+
|
|
437
|
+
/* ─── Sidebar ────────────────────────────────────────────────────────────
|
|
438
|
+
The two widths a navigation rail has, and the reason they are tokens
|
|
439
|
+
rather than numbers inside the component: an application shell has to
|
|
440
|
+
reserve exactly this much beside its content, and a shell that hard-codes
|
|
441
|
+
17rem while the rail believes something else is a gap or an overlap that
|
|
442
|
+
appears only at one window size. Both sides read the same name.
|
|
443
|
+
|
|
444
|
+
`--sidebar-w-icon` is what is left when the rail collapses to icons. It is
|
|
445
|
+
`--control-h-md` plus the rail's own padding, so a 44px pointer target
|
|
446
|
+
still fits inside it at comfortable density — a collapsed rail whose rows
|
|
447
|
+
are too small to hit is a rail nobody can use in the state it spends most
|
|
448
|
+
of its life in. */
|
|
449
|
+
--sidebar-w: 16rem;
|
|
450
|
+
--sidebar-w-icon: 3.5rem;
|
|
451
|
+
|
|
452
|
+
/* ─── Bar ────────────────────────────────────────────────────────────────
|
|
453
|
+
How tall the band across the top of an application is — the masthead, and
|
|
454
|
+
the head of the rail beside it, which has to line up with it or the two
|
|
455
|
+
rules meeting at the corner are two different rules.
|
|
456
|
+
|
|
457
|
+
Derived, not typed. A bar is a row of controls and the air around them, so
|
|
458
|
+
it is the control it seats plus six pixels above and below — the same
|
|
459
|
+
twelve `--sidebar-w-icon` adds to a rail's collapsed width, for the same
|
|
460
|
+
reason.
|
|
461
|
+
|
|
462
|
+
WHICH control depends on the pointer, and that is the whole of the second
|
|
463
|
+
block. A bar is chrome: its controls are `sm`, the density this system
|
|
464
|
+
documents as a deliberate below-the-floor size for a mouse. A finger is
|
|
465
|
+
not a mouse, so on a coarse pointer they grow to the 44px target WCAG
|
|
466
|
+
2.5.5 asks for, and the bar has to grow with them or it clips what it
|
|
467
|
+
seats. Sizing it from `--control-h-md` on both is what made it too tall:
|
|
468
|
+
56px of bar around 39px of search field, holding room for a target that is
|
|
469
|
+
not on screen when a mouse is.
|
|
470
|
+
|
|
471
|
+
48px comfortable / 42px compact with a pointer, 56px / 48px with a finger.
|
|
472
|
+
A bar cannot be set to a height its own controls do not fit in.
|
|
473
|
+
|
|
474
|
+
It was five literals before, in two packages, and they did not agree:
|
|
475
|
+
`AppShell` said `h-14` and the documentation site said `h-16`, so the same
|
|
476
|
+
role was 56px in the component this system ships and 64px on the site
|
|
477
|
+
documenting it. `--scroll-offset` in `semantic.css` is a sixth, and the
|
|
478
|
+
one that shows why this matters — it is "a masthead plus a line of air"
|
|
479
|
+
and was written as `88px`, a number derived by hand from whichever of the
|
|
480
|
+
two answers its author had on screen. It now derives from this. */
|
|
481
|
+
--bar-h: calc(var(--control-h-sm) + 0.75rem);
|
|
482
|
+
|
|
483
|
+
/* ─── Floating surfaces ──────────────────────────────────────────────────
|
|
484
|
+
What a panel that FLOATS fills with, and what it does to whatever is
|
|
485
|
+
behind it. A dialog, a menu, a popover, a palette — the surfaces that sit
|
|
486
|
+
OVER the page rather than in it, and therefore the only ones with anything
|
|
487
|
+
behind them to treat.
|
|
488
|
+
|
|
489
|
+
Both default to the plain surface and cost nothing. `--panel-filter: none`
|
|
490
|
+
matters more than it looks: a `backdrop-filter` of any value, `blur(0px)`
|
|
491
|
+
included, promotes its element to its own compositing layer and makes it a
|
|
492
|
+
containing block for fixed descendants. Paid on every menu in the system,
|
|
493
|
+
for a theme most readers will never turn on. `none` is not a blur of zero;
|
|
494
|
+
it is no filter at all.
|
|
495
|
+
|
|
496
|
+
A card is deliberately NOT on this list. It sits on the page ground, so
|
|
497
|
+
there is nothing behind it to see through, and a card that blurs its own
|
|
498
|
+
background is drawing an effect rather than an object. */
|
|
499
|
+
--panel-bg: var(--paper);
|
|
500
|
+
--panel-border: var(--rule-2);
|
|
501
|
+
--panel-filter: none;
|
|
502
|
+
|
|
503
|
+
/* The offset under a floating panel, and it does not break Law 2: the law
|
|
504
|
+
says a box-shadow is never BLURRED, not that there is never one. This is
|
|
505
|
+
the same hard-offset idiom as `--lift`, in the rule colour rather than the
|
|
506
|
+
accent — every menu in the system wearing a clay drop shadow would be a
|
|
507
|
+
louder claim than "this sits above the page".
|
|
508
|
+
Two steps, because one reads as a second border: a firm edge just below the
|
|
509
|
+
panel and a softer one below that is a stack seen from the front, which is
|
|
510
|
+
the flattest way to say depth without drawing light. */
|
|
511
|
+
--panel-lift: 0 2px 0 0 var(--rule-2), 0 5px 0 -1px var(--rule);
|
|
512
|
+
|
|
513
|
+
/* ─── Motion ─── */
|
|
514
|
+
--ease: cubic-bezier(0.2, 0.7, 0.3, 1);
|
|
515
|
+
--fast: 0.13s;
|
|
516
|
+
--mid: 0.22s;
|
|
517
|
+
--slow: 0.34s;
|
|
518
|
+
|
|
519
|
+
/* ─── Stacking ─── seven ranks, named for what sits at each.
|
|
520
|
+
Every overlay in the package portals to document.body, so all of them are
|
|
521
|
+
siblings in the ROOT stacking context and the rank is the whole of the
|
|
522
|
+
decision — there is no ancestor left to nest one inside another.
|
|
523
|
+
|
|
524
|
+
Read it as a sentence: a sticky header clears the page, a drawer clears the
|
|
525
|
+
header, a scrim covers both, a modal sits on its scrim, an ANCHORED panel
|
|
526
|
+
clears the modal it was opened from, and a toast clears everything because
|
|
527
|
+
it is the only rank that has to survive a modal asking a question.
|
|
528
|
+
|
|
529
|
+
--z-anchored is the one that is not obvious, and it is the one that was
|
|
530
|
+
wrong. A popover, a menu or a select listbox is opened FROM something, and
|
|
531
|
+
the surface it is most often opened from is a modal — a select inside a
|
|
532
|
+
modal form is one of the most ordinary shapes in an application. Ranked
|
|
533
|
+
below the modal, as it was, the panel is painted behind the very dialog
|
|
534
|
+
that summoned it. The rank it replaced, --z-palette, was read by nothing:
|
|
535
|
+
a command palette is a Dialog, so it lands at --z-modal, and its order
|
|
536
|
+
against a second modal is settled by document order — which is the right
|
|
537
|
+
answer, because it moves a scrim and its panel together. */
|
|
538
|
+
--z-rule: 1;
|
|
539
|
+
--z-sticky: 10;
|
|
540
|
+
--z-drawer: 100;
|
|
541
|
+
--z-scrim: 200;
|
|
542
|
+
--z-modal: 210;
|
|
543
|
+
--z-anchored: 220;
|
|
544
|
+
--z-toast: 300;
|
|
545
|
+
|
|
546
|
+
/* ─── Focus ─── */
|
|
547
|
+
--focus: var(--red);
|
|
548
|
+
--focus-w: 2px;
|
|
549
|
+
--focus-off: 3px;
|
|
550
|
+
|
|
551
|
+
/* ─── Icons ─── three sizes, and no weight: a Remix Icon glyph is a filled path. */
|
|
552
|
+
--ico-s: 14px;
|
|
553
|
+
--ico-m: 16px;
|
|
554
|
+
--ico-l: 20px;
|
|
555
|
+
|
|
556
|
+
/* ─── Status ─── the only chroma in the system, and it is bound to state. */
|
|
557
|
+
--ok: #3d6b34;
|
|
558
|
+
--ok-soft: rgba(61, 107, 52, 0.13);
|
|
559
|
+
--warn: #8a5a00;
|
|
560
|
+
--warn-soft: rgba(138, 90, 0, 0.13);
|
|
561
|
+
--danger: #a83214;
|
|
562
|
+
--danger-soft: rgba(168, 50, 20, 0.14);
|
|
563
|
+
--scrim: color-mix(in srgb, var(--ink) 62%, transparent);
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
[data-mode='dark'] {
|
|
567
|
+
--ok: #84b47b;
|
|
568
|
+
--ok-soft: rgba(132, 180, 123, 0.16);
|
|
569
|
+
--warn: #d9a55d;
|
|
570
|
+
--warn-soft: rgba(217, 165, 93, 0.16);
|
|
571
|
+
--danger: #ee8b68;
|
|
572
|
+
--danger-soft: rgba(238, 139, 104, 0.16);
|
|
573
|
+
--scrim: color-mix(in srgb, #000 72%, transparent);
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
/* The bar, on a finger.
|
|
577
|
+
*
|
|
578
|
+
* A bar's controls are `sm` — the size this system documents as a deliberate
|
|
579
|
+
* below-the-floor density for a mouse — and a coarse pointer grows them to the
|
|
580
|
+
* 44px target WCAG 2.5.5 asks for. The bar grows with them, or it clips what it
|
|
581
|
+
* seats. Declared on the ROOT like the base value, so the substitution argument
|
|
582
|
+
* above still holds: one answer, resolved once, inherited by a rail that pins
|
|
583
|
+
* its own density.
|
|
584
|
+
*/
|
|
585
|
+
@media (pointer: coarse) {
|
|
586
|
+
:root,
|
|
587
|
+
[data-mode='light'],
|
|
588
|
+
[data-surface='paper'],
|
|
589
|
+
[data-rules='hairline'] {
|
|
590
|
+
--bar-h: calc(var(--control-h-md) + 0.75rem);
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
[data-density='compact'] {
|
|
595
|
+
--control-h-sm: 1.875rem; /* 30px */
|
|
596
|
+
--control-h-md: 2.25rem; /* 36px — clears WCAG 2.5.8, not 2.5.5 */
|
|
597
|
+
--control-h-lg: 2.5rem; /* 40px */
|
|
598
|
+
--control-px-sm: 0.75rem;
|
|
599
|
+
--control-px-md: 1rem;
|
|
600
|
+
--control-px-lg: 1.25rem;
|
|
601
|
+
--control-py-sm: 0.25rem;
|
|
602
|
+
--control-py-md: 0.375rem;
|
|
603
|
+
--control-py-lg: 0.5rem;
|
|
604
|
+
--control-gap: 0.5rem;
|
|
605
|
+
--field-px: 0.625rem;
|
|
606
|
+
--field-py: 0.375rem;
|
|
607
|
+
--table-pad-y: 0.5rem;
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
/* A table can be tightened on its own, without the whole subtree going
|
|
611
|
+
compact — a dashboard often wants a dense grid inside comfortable chrome. */
|
|
612
|
+
[data-table-density='compact'] {
|
|
613
|
+
--table-pad-y: 0.5rem;
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
/* ==========================================================================
|
|
617
|
+
FORCED COLOURS
|
|
618
|
+
--------------------------------------------------------------------------
|
|
619
|
+
What a chart does when the reader has taken the palette away.
|
|
620
|
+
|
|
621
|
+
Windows High Contrast (and any forced-colours mode) remaps CSS colours to a
|
|
622
|
+
small set of system keywords. It does that for HTML automatically — a
|
|
623
|
+
tooltip's border and ground are handled without us — but it does NOT reach
|
|
624
|
+
inside SVG: Chrome and Edge ship `forced-color-adjust: none` on SVG by
|
|
625
|
+
default, and a gradient paint server is not something a browser can remap
|
|
626
|
+
even where it tries. So a chart that says nothing here keeps painting its
|
|
627
|
+
greys onto a black ground, and the reader's setting is quietly ignored.
|
|
628
|
+
|
|
629
|
+
The eight-step ramp collapses to one colour, because forced-colours has one
|
|
630
|
+
colour to give. That would be fatal to a system where hue carried identity,
|
|
631
|
+
and is survivable here for the reason the ramp is second in the first place:
|
|
632
|
+
TEXTURE is the primary encoding, and a hatch is still a hatch when every
|
|
633
|
+
series is CanvasText. This block is where that design decision gets cashed.
|
|
634
|
+
|
|
635
|
+
Scoped to the chart tokens on purpose. Restyling every component's rules and
|
|
636
|
+
surfaces from here would be a system-wide change wearing a chart fix.
|
|
637
|
+
========================================================================== */
|
|
638
|
+
|
|
639
|
+
@media (forced-colors: active) {
|
|
640
|
+
:root,
|
|
641
|
+
[data-mode='light'],
|
|
642
|
+
[data-mode='dark'] {
|
|
643
|
+
--series-1: CanvasText;
|
|
644
|
+
--series-2: CanvasText;
|
|
645
|
+
--series-3: CanvasText;
|
|
646
|
+
--series-4: CanvasText;
|
|
647
|
+
--series-5: CanvasText;
|
|
648
|
+
--series-6: CanvasText;
|
|
649
|
+
--series-7: CanvasText;
|
|
650
|
+
--series-8: CanvasText;
|
|
651
|
+
--series-track: Canvas;
|
|
652
|
+
|
|
653
|
+
--chart-surface: Canvas;
|
|
654
|
+
--chart-grid: GrayText;
|
|
655
|
+
--chart-cursor: CanvasText;
|
|
656
|
+
--chart-axis: CanvasText;
|
|
657
|
+
--chart-track: Canvas;
|
|
658
|
+
--chart-pattern: GrayText;
|
|
659
|
+
|
|
660
|
+
/* Textures go to full strength — they are now the only thing separating
|
|
661
|
+
one series from another. The wash stays under half so two overlapping
|
|
662
|
+
areas still read as two. */
|
|
663
|
+
--chart-fill: 0.45;
|
|
664
|
+
--chart-texture: 1;
|
|
665
|
+
}
|
|
666
|
+
}
|