@felloinnovations/brand-kit 0.4.0 → 0.5.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 +198 -24
- package/CHANGELOG.md +197 -0
- package/README.md +34 -7
- package/design-system/01-how-claude-decides.md +26 -17
- package/design-system/02-principles.md +11 -6
- package/design-system/03-colour.md +134 -47
- package/design-system/04-type.md +45 -23
- package/design-system/05-space-and-layout.md +175 -52
- package/design-system/06-sizing-profiles.md +4 -4
- package/design-system/07-scrolling.md +66 -20
- package/design-system/08-choosing-components.md +50 -22
- package/design-system/09-charts.md +71 -28
- package/design-system/10-patterns.md +33 -10
- package/design-system/11-page-recipes.md +110 -23
- package/design-system/12-content.md +2 -1
- package/design-system/13-motion.md +330 -47
- package/design-system/14-accessibility.md +47 -24
- package/design-system/15-ai-experiences.md +11 -6
- package/design-system/16-creativity.md +1 -1
- package/design-system/17-decisions.md +357 -1
- package/design-system/18-checklist.md +79 -16
- package/design-system/19-public-pages.md +6 -4
- package/design-system/20-palettes.md +275 -0
- package/design-system/README.md +30 -17
- package/design-system/components/ActionList/README.md +96 -10
- package/design-system/components/ActionList/preview.html +52 -7
- package/design-system/components/ActionList/style.css +64 -0
- package/design-system/components/ActivityGrid/README.md +38 -2
- package/design-system/components/ActivityGrid/preview.html +1 -1
- package/design-system/components/ActivityGrid/style.css +35 -0
- package/design-system/components/AppShell/README.md +205 -75
- package/design-system/components/AppShell/preview.html +339 -58
- package/design-system/components/AppShell/style.css +154 -0
- package/design-system/components/Avatar/README.md +37 -10
- package/design-system/components/Avatar/preview.html +13 -4
- package/design-system/components/Avatar/style.css +14 -0
- package/design-system/components/Badge/README.md +41 -19
- package/design-system/components/Badge/preview.html +13 -10
- package/design-system/components/Badge/style.css +23 -0
- package/design-system/components/Banner/README.md +30 -9
- package/design-system/components/Banner/preview.html +1 -1
- package/design-system/components/Banner/style.css +19 -0
- package/design-system/components/Breadcrumb/README.md +58 -46
- package/design-system/components/Breadcrumb/preview.html +16 -16
- package/design-system/components/Breadcrumb/style.css +17 -0
- package/design-system/components/Button/README.md +113 -55
- package/design-system/components/Button/preview.html +98 -25
- package/design-system/components/Button/style.css +86 -0
- package/design-system/components/Card/README.md +158 -49
- package/design-system/components/Card/preview.html +141 -19
- package/design-system/components/Card/style.css +115 -0
- package/design-system/components/CardBoard/README.md +58 -37
- package/design-system/components/CardBoard/preview.html +26 -29
- package/design-system/components/ChatCard/README.md +115 -29
- package/design-system/components/ChatCard/preview.html +149 -32
- package/design-system/components/ChatCard/style.css +49 -0
- package/design-system/components/ChatShell/README.md +116 -0
- package/design-system/components/ChatShell/preview.html +201 -0
- package/design-system/components/ChatShell/style.css +86 -0
- package/design-system/components/ChatTurn/README.md +78 -35
- package/design-system/components/ChatTurn/preview.html +60 -28
- package/design-system/components/ChatTurn/style.css +50 -0
- package/design-system/components/CheckRow/README.md +141 -0
- package/design-system/components/CheckRow/preview.html +140 -0
- package/design-system/components/CheckRow/style.css +88 -0
- package/design-system/components/Checkbox/README.md +58 -22
- package/design-system/components/Checkbox/preview.html +112 -50
- package/design-system/components/Checkbox/style.css +45 -0
- package/design-system/components/Chip/README.md +78 -47
- package/design-system/components/Chip/preview.html +29 -4
- package/design-system/components/Chip/style.css +17 -0
- package/design-system/components/Combobox/README.md +44 -11
- package/design-system/components/Combobox/preview.html +35 -12
- package/design-system/components/Combobox/style.css +54 -0
- package/design-system/components/Composer/README.md +137 -35
- package/design-system/components/Composer/preview.html +115 -40
- package/design-system/components/Composer/style.css +81 -0
- package/design-system/components/ConfirmDialog/README.md +73 -52
- package/design-system/components/ConfirmDialog/preview.html +70 -26
- package/design-system/components/ConfirmDialog/style.css +5 -0
- package/design-system/components/Cover/preview.html +3 -3
- package/design-system/components/Cover/style.css +19 -0
- package/design-system/components/DateInput/README.md +77 -12
- package/design-system/components/DateInput/preview.html +27 -12
- package/design-system/components/DateInput/style.css +38 -0
- package/design-system/components/Dialog/README.md +112 -44
- package/design-system/components/Dialog/preview.html +141 -18
- package/design-system/components/Dialog/style.css +74 -0
- package/design-system/components/EmptyState/README.md +42 -12
- package/design-system/components/EmptyState/preview.html +11 -11
- package/design-system/components/EmptyState/style.css +9 -0
- package/design-system/components/EntryShell/README.md +73 -48
- package/design-system/components/EntryShell/preview.html +60 -27
- package/design-system/components/EntryShell/style.css +19 -0
- package/design-system/components/FeatureGrid/README.md +61 -39
- package/design-system/components/FeatureGrid/preview.html +2 -2
- package/design-system/components/FeatureGrid/style.css +20 -0
- package/design-system/components/FileUpload/README.md +33 -3
- package/design-system/components/FileUpload/preview.html +18 -4
- package/design-system/components/FileUpload/style.css +23 -0
- package/design-system/components/FilterBar/README.md +114 -0
- package/design-system/components/FilterBar/preview.html +82 -0
- package/design-system/components/FilterBar/style.css +22 -0
- package/design-system/components/Fold/README.md +84 -26
- package/design-system/components/Fold/preview.html +77 -34
- package/design-system/components/Fold/style.css +48 -0
- package/design-system/components/Footer/README.md +62 -39
- package/design-system/components/Footer/preview.html +5 -5
- package/design-system/components/Footer/style.css +30 -0
- package/design-system/components/FunnelBars/README.md +24 -3
- package/design-system/components/FunnelBars/preview.html +5 -5
- package/design-system/components/FunnelBars/style.css +13 -0
- package/design-system/components/GoalBars/README.md +54 -10
- package/design-system/components/GoalBars/preview.html +69 -28
- package/design-system/components/GoalBars/style.css +51 -0
- package/design-system/components/GoalTicks/README.md +74 -58
- package/design-system/components/GoalTicks/preview.html +41 -118
- package/design-system/components/GoalTicks/style.css +37 -0
- package/design-system/components/GoalTubes/README.md +29 -3
- package/design-system/components/GoalTubes/preview.html +6 -6
- package/design-system/components/GoalTubes/style.css +23 -0
- package/design-system/components/Heatmap/README.md +133 -0
- package/design-system/components/Heatmap/preview.html +168 -0
- package/design-system/components/Heatmap/style.css +119 -0
- package/design-system/components/Hero/README.md +58 -40
- package/design-system/components/Hero/preview.html +1 -1
- package/design-system/components/Hero/style.css +19 -0
- package/design-system/components/HoverCard/README.md +114 -0
- package/design-system/components/HoverCard/preview.html +107 -0
- package/design-system/components/HoverCard/style.css +59 -0
- package/design-system/components/IconButton/README.md +69 -38
- package/design-system/components/IconButton/preview.html +77 -43
- package/design-system/components/IconButton/style.css +45 -0
- package/design-system/components/Input/README.md +36 -11
- package/design-system/components/Input/preview.html +1 -1
- package/design-system/components/Input/style.css +23 -0
- package/design-system/components/KanbanBoard/README.md +93 -45
- package/design-system/components/KanbanBoard/preview.html +159 -43
- package/design-system/components/KanbanBoard/style.css +53 -0
- package/design-system/components/Kbd/README.md +25 -9
- package/design-system/components/Kbd/preview.html +6 -2
- package/design-system/components/Kbd/style.css +9 -0
- package/design-system/components/KitButton/README.md +81 -47
- package/design-system/components/KitButton/preview.html +35 -13
- package/design-system/components/KitButton/style.css +46 -0
- package/design-system/components/KitCard/README.md +75 -44
- package/design-system/components/KitCard/preview.html +18 -10
- package/design-system/components/KitCard/style.css +15 -0
- package/design-system/components/KitInput/README.md +54 -39
- package/design-system/components/KitInput/preview.html +7 -7
- package/design-system/components/KitInput/style.css +23 -0
- package/design-system/components/Leaderboard/README.md +76 -49
- package/design-system/components/Leaderboard/preview.html +61 -26
- package/design-system/components/Leaderboard/style.css +44 -0
- package/design-system/components/ListDetail/README.md +222 -0
- package/design-system/components/ListDetail/preview.html +213 -0
- package/design-system/components/ListDetail/style.css +148 -0
- package/design-system/components/LoadBar/README.md +79 -0
- package/design-system/components/LoadBar/preview.html +40 -0
- package/design-system/components/LoadBar/style.css +17 -0
- package/design-system/components/MarketingNav/README.md +76 -42
- package/design-system/components/MarketingNav/preview.html +37 -8
- package/design-system/components/MarketingNav/style.css +45 -0
- package/design-system/components/Matrix/README.md +129 -0
- package/design-system/components/Matrix/preview.html +99 -0
- package/design-system/components/Matrix/style.css +84 -0
- package/design-system/components/Menu/README.md +117 -41
- package/design-system/components/Menu/preview.html +85 -23
- package/design-system/components/Menu/style.css +61 -0
- package/design-system/components/Meter/README.md +39 -4
- package/design-system/components/Meter/preview.html +18 -1
- package/design-system/components/Meter/style.css +23 -0
- package/design-system/components/MetricTile/README.md +237 -0
- package/design-system/components/MetricTile/preview.html +241 -0
- package/design-system/components/MetricTile/style.css +129 -0
- package/design-system/components/Morph/README.md +106 -0
- package/design-system/components/Morph/preview.html +103 -0
- package/design-system/components/Morph/style.css +31 -0
- package/design-system/components/Motion/README.md +164 -0
- package/design-system/components/Motion/preview.html +2537 -0
- package/design-system/components/NumberInput/README.md +27 -8
- package/design-system/components/NumberInput/preview.html +21 -5
- package/design-system/components/NumberInput/style.css +34 -0
- package/design-system/components/PaceBar/README.md +75 -0
- package/design-system/components/PaceBar/preview.html +67 -0
- package/design-system/components/PaceBar/style.css +25 -0
- package/design-system/components/Page/README.md +57 -18
- package/design-system/components/Page/preview.html +15 -17
- package/design-system/components/Page/style.css +7 -0
- package/design-system/components/PageBar/README.md +90 -34
- package/design-system/components/PageBar/preview.html +60 -19
- package/design-system/components/PageBar/style.css +35 -0
- package/design-system/components/PageHero/README.md +87 -51
- package/design-system/components/PageHero/preview.html +35 -6
- package/design-system/components/PageHero/style.css +31 -0
- package/design-system/components/Pagination/README.md +70 -49
- package/design-system/components/Pagination/preview.html +24 -15
- package/design-system/components/Pagination/style.css +12 -0
- package/design-system/components/Panel/README.md +109 -51
- package/design-system/components/Panel/preview.html +118 -20
- package/design-system/components/Panel/style.css +51 -0
- package/design-system/components/PasswordInput/README.md +50 -18
- package/design-system/components/PasswordInput/preview.html +71 -21
- package/design-system/components/PasswordInput/style.css +31 -0
- package/design-system/components/Plate/README.md +75 -17
- package/design-system/components/Plate/preview.html +40 -7
- package/design-system/components/Plate/style.css +37 -0
- package/design-system/components/Popover/README.md +70 -49
- package/design-system/components/Popover/preview.html +44 -22
- package/design-system/components/Popover/style.css +41 -0
- package/design-system/components/PricingTable/README.md +69 -49
- package/design-system/components/PricingTable/preview.html +21 -21
- package/design-system/components/PricingTable/style.css +21 -0
- package/design-system/components/ProgressPetals/README.md +31 -3
- package/design-system/components/ProgressPetals/preview.html +14 -15
- package/design-system/components/ProgressPetals/style.css +27 -0
- package/design-system/components/README.md +151 -0
- package/design-system/components/Radio/README.md +40 -17
- package/design-system/components/Radio/preview.html +16 -1
- package/design-system/components/Radio/style.css +21 -0
- package/design-system/components/RankBar/README.md +29 -2
- package/design-system/components/RankBar/preview.html +14 -12
- package/design-system/components/RankBar/style.css +18 -0
- package/design-system/components/Ring/README.md +61 -11
- package/design-system/components/Ring/preview.html +55 -10
- package/design-system/components/Ring/style.css +49 -0
- package/design-system/components/ScoreHero/README.md +91 -0
- package/design-system/components/ScoreHero/preview.html +104 -0
- package/design-system/components/ScoreHero/style.css +32 -0
- package/design-system/components/Section/README.md +72 -33
- package/design-system/components/Section/preview.html +46 -16
- package/design-system/components/Section/style.css +18 -0
- package/design-system/components/Segmented/README.md +100 -55
- package/design-system/components/Segmented/preview.html +107 -26
- package/design-system/components/Segmented/style.css +94 -0
- package/design-system/components/SegmentedProgress/README.md +64 -0
- package/design-system/components/SegmentedProgress/preview.html +69 -0
- package/design-system/components/SegmentedProgress/style.css +11 -0
- package/design-system/components/Select/README.md +47 -12
- package/design-system/components/Select/preview.html +28 -2
- package/design-system/components/Select/style.css +22 -0
- package/design-system/components/ShareBar/README.md +69 -0
- package/design-system/components/ShareBar/preview.html +72 -0
- package/design-system/components/ShareBar/style.css +25 -0
- package/design-system/components/SideList/README.md +147 -0
- package/design-system/components/SideList/preview.html +139 -0
- package/design-system/components/SideList/style.css +94 -0
- package/design-system/components/Skeleton/README.md +52 -16
- package/design-system/components/Skeleton/preview.html +35 -23
- package/design-system/components/Skeleton/style.css +22 -0
- package/design-system/components/Slider/README.md +95 -0
- package/design-system/components/Slider/preview.html +49 -0
- package/design-system/components/Slider/style.css +13 -0
- package/design-system/components/Split/README.md +112 -0
- package/design-system/components/Split/preview.html +105 -0
- package/design-system/components/Split/style.css +30 -0
- package/design-system/components/Starter/README.md +21 -9
- package/design-system/components/Starter/preview.html +5 -5
- package/design-system/components/Stat/README.md +64 -43
- package/design-system/components/Stat/preview.html +3 -3
- package/design-system/components/Stat/style.css +15 -0
- package/design-system/components/StatTiles/README.md +88 -44
- package/design-system/components/StatTiles/preview.html +142 -71
- package/design-system/components/StatTiles/style.css +64 -0
- package/design-system/components/StatusLine/README.md +85 -0
- package/design-system/components/StatusLine/preview.html +49 -0
- package/design-system/components/StatusLine/style.css +14 -0
- package/design-system/components/StatusScreen/README.md +49 -35
- package/design-system/components/StatusScreen/preview.html +20 -5
- package/design-system/components/StatusScreen/style.css +9 -0
- package/design-system/components/StepLine/README.md +97 -0
- package/design-system/components/StepLine/preview.html +108 -0
- package/design-system/components/StepLine/style.css +62 -0
- package/design-system/components/Stepper/README.md +35 -13
- package/design-system/components/Stepper/style.css +13 -0
- package/design-system/components/StreakCalendar/README.md +22 -1
- package/design-system/components/StreakCalendar/preview.html +10 -10
- package/design-system/components/StreakCalendar/style.css +12 -0
- package/design-system/components/SuggestionChip/README.md +87 -0
- package/design-system/components/SuggestionChip/preview.html +42 -0
- package/design-system/components/SuggestionChip/style.css +20 -0
- package/design-system/components/Switch/README.md +44 -24
- package/design-system/components/Switch/preview.html +23 -8
- package/design-system/components/Switch/style.css +31 -0
- package/design-system/components/Table/README.md +129 -58
- package/design-system/components/Table/preview.html +106 -72
- package/design-system/components/Table/style.css +104 -0
- package/design-system/components/Tabs/README.md +71 -46
- package/design-system/components/Tabs/preview.html +56 -24
- package/design-system/components/Tabs/style.css +44 -0
- package/design-system/components/Testimonial/README.md +48 -32
- package/design-system/components/Testimonial/preview.html +14 -14
- package/design-system/components/Testimonial/style.css +12 -0
- package/design-system/components/TextArea/README.md +27 -11
- package/design-system/components/TextArea/preview.html +8 -2
- package/design-system/components/TextArea/style.css +12 -0
- package/design-system/components/ThemeSwitch/README.md +116 -0
- package/design-system/components/ThemeSwitch/preview.html +57 -0
- package/design-system/components/ThemeSwitch/style.css +6 -0
- package/design-system/components/TickRow/README.md +52 -36
- package/design-system/components/TickRow/preview.html +64 -41
- package/design-system/components/TickRow/style.css +23 -0
- package/design-system/components/TickStrip/README.md +95 -0
- package/design-system/components/TickStrip/preview.html +88 -0
- package/design-system/components/TickStrip/style.css +42 -0
- package/design-system/components/Tile/README.md +79 -18
- package/design-system/components/Tile/preview.html +91 -40
- package/design-system/components/Tile/style.css +36 -0
- package/design-system/components/Timeline/README.md +68 -48
- package/design-system/components/Timeline/preview.html +27 -15
- package/design-system/components/Timeline/style.css +25 -0
- package/design-system/components/Toast/README.md +70 -38
- package/design-system/components/Toast/preview.html +43 -8
- package/design-system/components/Toast/style.css +25 -0
- package/design-system/components/Tooltip/README.md +93 -35
- package/design-system/components/Tooltip/preview.html +69 -15
- package/design-system/components/Tooltip/style.css +78 -0
- package/design-system/components/TopBar/README.md +67 -53
- package/design-system/components/TopBar/preview.html +14 -27
- package/design-system/components/TopBar/style.css +35 -0
- package/design-system/components/TopicRail/README.md +108 -0
- package/design-system/components/TopicRail/preview.html +58 -0
- package/design-system/components/TopicRail/style.css +48 -0
- package/design-system/components/TrendBars/README.md +52 -14
- package/design-system/components/TrendBars/preview.html +65 -32
- package/design-system/components/TrendBars/style.css +25 -0
- package/design-system/components/TrendLine/README.md +164 -0
- package/design-system/components/TrendLine/preview.html +373 -0
- package/design-system/components/TrendLine/style.css +155 -0
- package/design-system/components/Well/README.md +64 -22
- package/design-system/components/Well/preview.html +14 -14
- package/design-system/components/Well/style.css +22 -0
- package/design-system/components/_house.css +324 -0
- package/design-system/components/bundle.css +4091 -744
- package/design-system/tokens.json +1314 -124
- package/dist/fello-core.css +2 -2
- package/dist/fello.css +6 -1369
- package/dist/fello.scoped.css +7 -0
- package/dist/index.d.ts +110 -11
- package/dist/index.js +781 -96
- package/dist/palettes.d.ts +464 -0
- package/dist/palettes.js +497 -0
- package/dist/scoped.d.ts +3 -0
- package/dist/scoped.js +16 -0
- package/dist/toast.d.ts +14 -0
- package/dist/toast.js +33 -29
- package/dist/tokens.d.ts +1686 -62
- package/dist/tokens.js +1668 -61
- package/package.json +20 -4
- package/scripts/check-palette.mjs +295 -0
- package/scripts/token-model.mjs +552 -0
- package/tokens/_dark.css +174 -0
- package/tokens/_palettes.css +46 -0
- package/tokens/_product.css +266 -53
- package/tokens/_source.hubl.css +39 -19
- package/tokens/design-tokens.json +319 -0
- package/tokens/palettes.ts +504 -0
- package/tokens/shadcn-compat.css +19 -19
- package/tokens/shadcn-compat.hsl.css +76 -0
- package/tokens/tokens.css +1292 -62
- package/tokens/tokens.md +588 -61
- package/tokens/tokens.root.css +1298 -62
- package/tokens/tokens.ts +1677 -64
|
@@ -1,85 +1,106 @@
|
|
|
1
|
-
The foot of a card that holds more rows than it shows at once: where you are in the list, and the
|
|
1
|
+
The foot of a card that holds more rows than it shows at once: where you are in the list, and the acts that move
|
|
2
2
|
through it.
|
|
3
3
|
|
|
4
4
|
## Use it when
|
|
5
5
|
|
|
6
|
-
- A `Table` or a long list of rows is too big to show whole and is paged rather than
|
|
7
|
-
- The person benefits from knowing
|
|
6
|
+
- A `Table` or a long list of rows is too big to show whole and is paged rather than scrolled.
|
|
7
|
+
- The person benefits from knowing how many rows there are and where this page sits in them.
|
|
8
8
|
|
|
9
9
|
## Not for
|
|
10
10
|
|
|
11
|
-
- A short list that fits
|
|
12
|
-
-
|
|
13
|
-
- The page itself: pagination
|
|
14
|
-
the card's one primary act instead).
|
|
11
|
+
- A short list that fits: no pagination at all.
|
|
12
|
+
- A "load more" list: a `Button` at the foot ("Show 25 more").
|
|
13
|
+
- The page itself: pagination is a card's foot, never floating on the page.
|
|
15
14
|
|
|
16
15
|
## Anatomy
|
|
17
16
|
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
-
|
|
17
|
+
- A card's foot (`.ws-pagination`): Seth's 0.5 px divider above it (`--ws-divider`), 8 above and below, the card's
|
|
18
|
+
20 px content edge at the sides (`--ws-card-inset`), its two halves 12 apart.
|
|
19
|
+
- Left: the range and the total (`__range`), 13 / 16 in muted, tabular figures, one line ("1 to 25 of 212").
|
|
20
|
+
- Right (`__end`), 12 apart:
|
|
21
|
+
- Rows per page (`__rows`): "Rows" in `ws-muted`, 8, then `Select`'s small one (`ws-select ws-select--sm` in its
|
|
22
|
+
`ws-select-wrap` with the 12 px navy chevron): 28 tall, 12 / 16 medium figures; on touch 40 tall with 16 px figures,
|
|
23
|
+
so a phone never zooms into it on focus. A bare `<select>` (0.4 markup) still draws, with the OS caret.
|
|
24
|
+
- The chevrons (`__nav`), 4 apart: two 32 px ghost `IconButton`s (40 on touch).
|
|
25
|
+
- On a narrow card the right half wraps under the range, at the right.
|
|
23
26
|
|
|
24
27
|
## Variants and sizes
|
|
25
28
|
|
|
26
29
|
| Part | Size | Token |
|
|
27
30
|
| --- | --- | --- |
|
|
28
|
-
| Chevron buttons | 32
|
|
29
|
-
| Rows-per-page select |
|
|
30
|
-
|
|
|
31
|
+
| Chevron buttons | 32 (40 on touch), ghost | `IconButton` default |
|
|
32
|
+
| Rows-per-page select | 28 (40 on touch) | `Select` `--sm` |
|
|
33
|
+
| Range line | 13 px | `--ws-text-meta` |
|
|
31
34
|
|
|
32
35
|
## States
|
|
33
36
|
|
|
34
|
-
- **First page**:
|
|
35
|
-
- **Middle page**: both
|
|
36
|
-
- **Last page**:
|
|
37
|
-
- **Only one page**: the
|
|
38
|
-
- **Loading the next page**: the chevron
|
|
39
|
-
|
|
40
|
-
- **
|
|
37
|
+
- **First page**: Previous `disabled`, Next active.
|
|
38
|
+
- **Middle page**: both active.
|
|
39
|
+
- **Last page**: Next `disabled`.
|
|
40
|
+
- **Only one page**: the foot is not drawn.
|
|
41
|
+
- **Loading the next page**: the pressed chevron shows the button's pending state; a second press waits
|
|
42
|
+
(`aria-busy`).
|
|
43
|
+
- **Narrow**: the right half goes under the range.
|
|
44
|
+
- **Hover** (pointers that hover): the chevrons take `IconButton`'s wash; the select's edge darkens (`Select`).
|
|
45
|
+
- **Focus**: the house's 2 px navy ring on each chevron and the select.
|
|
41
46
|
|
|
42
47
|
## Behaviour
|
|
43
48
|
|
|
44
|
-
- Keyboard:
|
|
45
|
-
|
|
46
|
-
-
|
|
47
|
-
- Touch: both icon buttons meet the 40 px floor on a coarse pointer, same as any `IconButton`.
|
|
48
|
-
- Motion: rows cross-fade rather than re-stagger when the page changes, matching the system's rule for search results
|
|
49
|
-
replacing a list (`10-patterns.md`, "Search, filters and sorting").
|
|
49
|
+
- Keyboard: the chevrons are real `<button>`s; the select is a native `<select>`.
|
|
50
|
+
- Pointer: a chevron moves one page; the rows select changes the page size and returns to page 1.
|
|
51
|
+
- Motion: rows cross-fade when the page changes, never re-stagger.
|
|
50
52
|
|
|
51
53
|
## Content
|
|
52
54
|
|
|
53
|
-
- The
|
|
54
|
-
|
|
55
|
-
- No em dashes; "to" joins the range, not a dash.
|
|
55
|
+
- The range always states the visible rows and the total ("1 to 25 of 212"), never "Page 1 of 9" alone.
|
|
56
|
+
- "to" joins the range; no dashes.
|
|
56
57
|
|
|
57
58
|
## Props
|
|
58
59
|
|
|
59
60
|
| Name | Type | Meaning |
|
|
60
61
|
| --- | --- | --- |
|
|
61
|
-
| `page` | `number` | The current page, 1
|
|
62
|
+
| `page` | `number` | The current page, from 1 |
|
|
62
63
|
| `pageSize` | `number` | Rows per page |
|
|
63
|
-
| `total` | `number` |
|
|
64
|
-
| `pageSizeOptions` | `number[]` |
|
|
65
|
-
| `onPageChange` | `(page: number) => void` |
|
|
66
|
-
| `onPageSizeChange` | `(size: number) => void` |
|
|
64
|
+
| `total` | `number` | Rows across every page |
|
|
65
|
+
| `pageSizeOptions` | `number[]` | The rows select's choices, default `[25, 50, 100]` |
|
|
66
|
+
| `onPageChange` | `(page: number) => void` | A chevron press |
|
|
67
|
+
| `onPageSizeChange` | `(size: number) => void` | The rows select changed |
|
|
67
68
|
|
|
68
69
|
## Rules
|
|
69
70
|
|
|
70
|
-
- **
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
- **Ghost, not boxed, chevrons**: matching the row-act convention (`Button` secondary or ghost, small, for a row's quiet
|
|
74
|
-
acts), since paging is a frequent, low-weight act, not the page's one thing to do.
|
|
75
|
-
- **The total is always shown**, honouring the system's "honest data" principle: a person is never left guessing how
|
|
76
|
-
much more there is.
|
|
77
|
-
- **A page-at-a-time control for long collections**: a lead list, a report of calls, needs paging that a chat-first
|
|
78
|
-
card never required. Derived from the card's foot pattern, the meta text size, and `IconButton`'s ghost default.
|
|
71
|
+
- **A card's foot, never its band**: the band holds the card's one act.
|
|
72
|
+
- **Ghost chevrons**: paging is frequent and quiet.
|
|
73
|
+
- **The total is always shown**.
|
|
79
74
|
|
|
80
75
|
## Source
|
|
81
76
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
77
|
+
**Derived from**: the card foot pattern, Seth's 0.5 px divider (D5), `--ws-text-meta` and `Select`'s small size, and
|
|
78
|
+
the geometry check (4 Nov 2026: at 320 the right half ran past the card; the select was 28 tall on touch).
|
|
79
|
+
**Precedent**: an intentional addition decided from the system, 26 Oct 2026.
|
|
80
|
+
|
|
81
|
+
## Markup
|
|
82
|
+
|
|
83
|
+
```html
|
|
84
|
+
<footer class="ws-pagination">
|
|
85
|
+
<span class="ws-pagination__range">1 to 25 of 212</span>
|
|
86
|
+
<div class="ws-pagination__end">
|
|
87
|
+
<div class="ws-pagination__rows">
|
|
88
|
+
<span class="ws-muted">Rows</span>
|
|
89
|
+
<span class="ws-select-wrap">
|
|
90
|
+
<select class="ws-select ws-select--sm" aria-label="Rows per page"><option>25</option><option>50</option><option>100</option></select>
|
|
91
|
+
<svg viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 4.5l3 3 3-3"/></svg>
|
|
92
|
+
</span>
|
|
93
|
+
</div>
|
|
94
|
+
<div class="ws-pagination__nav">
|
|
95
|
+
<button type="button" class="ws-icon-btn" disabled aria-label="Previous page"><!-- 16 px chevron --></button>
|
|
96
|
+
<button type="button" class="ws-icon-btn" aria-label="Next page"><!-- 16 px chevron --></button>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
</footer>
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Styles
|
|
103
|
+
|
|
104
|
+
`Pagination/style.css`; the chevrons are `IconButton`'s, the rows select is `Select`'s. Tokens: `--ws-divider`, `--ws-card-inset`,
|
|
105
|
+
`--ws-text-meta`, `--ws-text-dense`, `--ws-control-h-sm`, `--ws-radius-control`, `--ws-field`, `--ws-field-ink`,
|
|
106
|
+
`--ws-edge-card`, `--ws-hairline`, `--color-text-muted`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- @dsCard group="Navigation" height=
|
|
1
|
+
<!-- @dsCard group="Navigation" height=463 -->
|
|
2
2
|
<!doctype html>
|
|
3
3
|
<html>
|
|
4
4
|
<head>
|
|
@@ -19,11 +19,14 @@
|
|
|
19
19
|
<div class="ws-pagination__end">
|
|
20
20
|
<div class="ws-pagination__rows">
|
|
21
21
|
<span class="ws-muted">Rows</span>
|
|
22
|
-
<
|
|
23
|
-
<
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
<span class="ws-select-wrap">
|
|
23
|
+
<select class="ws-select ws-select--sm" aria-label="Rows per page">
|
|
24
|
+
<option>25</option>
|
|
25
|
+
<option>50</option>
|
|
26
|
+
<option>100</option>
|
|
27
|
+
</select>
|
|
28
|
+
<svg viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 4.5l3 3 3-3"/></svg>
|
|
29
|
+
</span>
|
|
27
30
|
</div>
|
|
28
31
|
<div class="ws-pagination__nav">
|
|
29
32
|
<button type="button" class="ws-icon-btn" disabled aria-label="Previous page">
|
|
@@ -47,11 +50,14 @@
|
|
|
47
50
|
<div class="ws-pagination__end">
|
|
48
51
|
<div class="ws-pagination__rows">
|
|
49
52
|
<span class="ws-muted">Rows</span>
|
|
50
|
-
<
|
|
51
|
-
<
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
<span class="ws-select-wrap">
|
|
54
|
+
<select class="ws-select ws-select--sm" aria-label="Rows per page">
|
|
55
|
+
<option selected>25</option>
|
|
56
|
+
<option>50</option>
|
|
57
|
+
<option>100</option>
|
|
58
|
+
</select>
|
|
59
|
+
<svg viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 4.5l3 3 3-3"/></svg>
|
|
60
|
+
</span>
|
|
55
61
|
</div>
|
|
56
62
|
<div class="ws-pagination__nav">
|
|
57
63
|
<button type="button" class="ws-icon-btn" aria-label="Previous page">
|
|
@@ -75,10 +81,13 @@
|
|
|
75
81
|
<div class="ws-pagination__end">
|
|
76
82
|
<div class="ws-pagination__rows">
|
|
77
83
|
<span class="ws-muted">Rows</span>
|
|
78
|
-
<
|
|
79
|
-
<
|
|
80
|
-
|
|
81
|
-
|
|
84
|
+
<span class="ws-select-wrap">
|
|
85
|
+
<select class="ws-select ws-select--sm" aria-label="Rows per page">
|
|
86
|
+
<option>25</option>
|
|
87
|
+
<option selected>100</option>
|
|
88
|
+
</select>
|
|
89
|
+
<svg viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 4.5l3 3 3-3"/></svg>
|
|
90
|
+
</span>
|
|
82
91
|
</div>
|
|
83
92
|
<div class="ws-pagination__nav">
|
|
84
93
|
<button type="button" class="ws-icon-btn" aria-label="Previous page">
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/* ---- Pagination: a card's foot for a long list, the range at the left, rows per page and the chevrons at the right, on
|
|
2
|
+
the card's 20 edge under Seth's 0.5 px divider. On a narrow card the right half wraps under the range. ---- */
|
|
3
|
+
.ws-pagination { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--space-xs) var(--space-sm); padding: var(--space-xs) var(--ws-card-inset); border-top: var(--ws-divider); }
|
|
4
|
+
.ws-pagination__range { font-size: var(--ws-text-meta); line-height: var(--space-md); color: var(--color-text-muted); font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
5
|
+
.ws-pagination__end { display: flex; align-items: center; gap: var(--space-sm); margin-inline-start: auto; }
|
|
6
|
+
.ws-pagination__nav { display: flex; align-items: center; gap: var(--space-xxs); }
|
|
7
|
+
.ws-pagination__rows { display: flex; align-items: center; gap: var(--space-xs); }
|
|
8
|
+
/* The rows select is Select's small one (ws-select ws-select--sm in its wrap). A bare <select> (0.4 markup) keeps its old
|
|
9
|
+
look, and on touch its words go to 16 so a phone does not zoom into it on focus. */
|
|
10
|
+
.ws-pagination__rows .ws-select { font-variant-numeric: tabular-nums; }
|
|
11
|
+
.ws-pagination__rows select:not(.ws-select) { height: var(--ws-control-h-sm); padding: 0 var(--space-xxs); border: 0; border-radius: var(--ws-radius-control); background: var(--ws-field); box-shadow: inset 0 0 0 var(--ws-hairline) var(--ws-edge-card); color: var(--ws-field-ink); font-size: var(--ws-text-dense); font-variant-numeric: tabular-nums; cursor: pointer; }
|
|
12
|
+
@media (pointer: coarse) { .ws-pagination__rows select:not(.ws-select) { font-size: var(--ws-text-value); } }
|
|
@@ -1,90 +1,148 @@
|
|
|
1
|
-
The thing opened beside the chat: one
|
|
1
|
+
The thing opened beside the page or the chat: one pane, holding one thing at a time, as Seth draws the check drawer.
|
|
2
2
|
|
|
3
3
|
## Use it when
|
|
4
4
|
|
|
5
|
-
- The person opens
|
|
6
|
-
- A
|
|
7
|
-
- The content is one thing's full detail, not a set of
|
|
5
|
+
- The person opens one thing (a check, a lead, a draft, a chart) and should keep the page or the chat beside it.
|
|
6
|
+
- A list's row opens its detail beside the list, on a wide enough screen.
|
|
7
|
+
- The content is one thing's full detail, not a set of choices (`Menu`) or a short blocking task (`Dialog`).
|
|
8
8
|
|
|
9
9
|
## Not for
|
|
10
10
|
|
|
11
|
-
- A task that
|
|
11
|
+
- A task that must block the rest of the screen until it is done: use `Dialog`.
|
|
12
12
|
- A list of short actions near a button: use `Menu`.
|
|
13
|
-
- A page shown full screen in place of the chat: that is an app page
|
|
14
|
-
- Repeating something
|
|
13
|
+
- A page shown full screen in place of the chat: that is an app page.
|
|
14
|
+
- Repeating something already on screen: a panel never says again what the page or the chat shows.
|
|
15
15
|
|
|
16
16
|
## Anatomy
|
|
17
17
|
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
-
|
|
18
|
+
- The pane: 440 wide (`--ws-thing-width`), never wider than its row. A 1 px `--ws-tray` rim, 12 px corners
|
|
19
|
+
(`--ws-radius-drawer`, 11 inside), the `--ws-raised` ground. No shadow and no edge of its own: it sits in the page,
|
|
20
|
+
not over it. It fills its row's height; the page puts it 24 from what it sits beside (Seth: report 886, gap 24,
|
|
21
|
+
panel 440).
|
|
22
|
+
- Head (`ws-panel__head`): 20 above, 28 at the sides. The title row (`ws-panel__title-row`): the 22 / 28 title and an
|
|
23
|
+
optional tag (a `Chip`; "Needs work" is `ws-chip--needs-work`, the pink tint with its AA word), 10 apart; one 14 / 20 line under it, 4 apart. The close (`ws-panel__close`): a 32 px tray
|
|
24
|
+
square with 6 px corners and a navy 16 px x, centred on the title's first line, 12 from the title block.
|
|
25
|
+
- Body (`ws-panel__body`): scrolls on its own. It holds sections (`ws-panel__section`): 20 above and below, 28 at the
|
|
26
|
+
sides, their parts 16 apart, each after the first opening with a full-width 0.5 px hairline (`--ws-divider`). The
|
|
27
|
+
first section follows the head at 16 (Seth's figure row: a 44 / 48 figure and its strip, 20 apart,
|
|
28
|
+
`ws-panel__figure-row`). The strip takes the rest of the line and must shrink with it: ticks that flex (Seth's 40
|
|
29
|
+
ticks, 32 tall, 2 apart), never a row of fixed ticks, which runs past the pane on a phone.
|
|
30
|
+
- Foot (`ws-panel__foot`): sections pinned under the body, the first opening with the hairline. Seth's next fix
|
|
31
|
+
(`ws-panel__next`): a 13 / 18 medium muted label ("Next fix · 1 of 2", `ws-control-words`) 6 above the 15 / 22 fix
|
|
32
|
+
(`ws-section`), one part of the section, so the 16 between parts never comes between them. Its acts
|
|
33
|
+
(`ws-panel__acts`, Seth's grey `ws-btn--well` then the navy primary, both `lg`) share the width in equal halves,
|
|
34
|
+
8 apart, the one primary last; where a half would be under 160 or a label would break, they stack full width, the
|
|
35
|
+
primary at the bottom. `ws-panel__section--tight` (12 above and below) holds a one-line ask field.
|
|
23
36
|
|
|
24
37
|
## Variants and sizes
|
|
25
38
|
|
|
26
39
|
| Context | Behaviour |
|
|
27
40
|
| --- | --- |
|
|
28
|
-
| Wide
|
|
29
|
-
|
|
|
30
|
-
|
|
|
31
|
-
| Widened | Takes the whole stage, the chat stepping aside |
|
|
41
|
+
| Wide screen | Beside the page or the chat, 440 wide; the page beside it narrows |
|
|
42
|
+
| Under 40rem | The whole screen (`position: fixed; inset: 0`), no rim, no corners (K5) |
|
|
43
|
+
| Busy | The chrome stays; the body shows `.ws-shimmer` ghosts in the shapes of what is coming |
|
|
32
44
|
|
|
33
45
|
## States
|
|
34
46
|
|
|
35
|
-
- **Entering
|
|
36
|
-
|
|
37
|
-
-
|
|
38
|
-
- **
|
|
39
|
-
- **
|
|
40
|
-
|
|
47
|
+
- **Entering** (North's docked panel, js@647700, "Opens / moves / docks"): it grows out of .97 (`--ws-open-scale`)
|
|
48
|
+
from the edge it docks to on the panel spring (`--ws-spring-panel`, .42 / .12), fading in over
|
|
49
|
+
`--ws-duration-hover` (.2 s) and out of an 8 px blur (`--ws-blur-panel`) over .24 s, each on its own clock.
|
|
50
|
+
- **Open**: the head and the foot stay; the body scrolls. Focused as a keyboard scroller, the body draws its ring inside.
|
|
51
|
+
- **Leaving** (`ws-panel--leaving` or `data-leaving`): it goes back to .97 into a 6 px blur, fading, over .16 s
|
|
52
|
+
(North's chat exit, js@674822; `--ws-panel-out`), faster than it came, taking no presses; remove it 160 ms later,
|
|
53
|
+
before the page without it renders. With reduced motion it simply goes.
|
|
54
|
+
- **Busy** (`aria-busy="true"`): the body holds `.ws-shimmer` ghosts; the line under the title says what is being
|
|
55
|
+
fetched ("Checking 9 searches near you.").
|
|
56
|
+
- **Long title**: wraps beside the close; the close stays on the first line.
|
|
57
|
+
- **Phone**: it is the screen; its acts stack when they do not fit side by side. While it is open the app makes the
|
|
58
|
+
page behind it `inert`, so Tab and a screen reader stay in the panel.
|
|
41
59
|
|
|
42
60
|
## Behaviour
|
|
43
61
|
|
|
44
|
-
- Keyboard:
|
|
45
|
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
- Reduced motion: it appears and
|
|
62
|
+
- Keyboard: the close comes after the title in tab order; Escape and the close both close it. Focus moves into it when
|
|
63
|
+
it opens and back to the row that opened it when it closes.
|
|
64
|
+
- Pointer: the close, or the row that opened it pressed again.
|
|
65
|
+
- Touch: the close and the acts are 40 tall.
|
|
66
|
+
- Reduced motion: it appears and goes in place.
|
|
67
|
+
- The preview's last stack is live: press Website, then its close.
|
|
49
68
|
|
|
50
69
|
## Content
|
|
51
70
|
|
|
52
|
-
- One thing at a time: opening
|
|
53
|
-
- The
|
|
54
|
-
-
|
|
71
|
+
- One thing at a time: opening another thing replaces what the panel shows; it never stacks.
|
|
72
|
+
- The title is the thing's own name ("Local search"), said once; the tag says its state ("Needs work").
|
|
73
|
+
- The line under the title says what the thing is, in one sentence.
|
|
74
|
+
- The foot says what to do next and holds at most two acts.
|
|
55
75
|
|
|
56
76
|
## Props
|
|
57
77
|
|
|
58
|
-
**`DockedPane`**
|
|
78
|
+
**`DockedPane`** (the reference implementation)
|
|
59
79
|
|
|
60
80
|
| Name | Type | Meaning |
|
|
61
81
|
| --- | --- | --- |
|
|
62
82
|
| `storageKey` | string | Where its width is remembered (per browser). |
|
|
63
83
|
| `bounds` | `{ min, max, fallback }` | The widths it can be dragged between, and its default. |
|
|
64
84
|
| `label` | string | What the pane is, for its resize handle ("Resize the lead"). |
|
|
65
|
-
| `leaving` | boolean |
|
|
66
|
-
| `children` | `ReactNode` | The pane's
|
|
67
|
-
|
|
68
|
-
**`useRoutePane`**
|
|
69
|
-
|
|
70
|
-
| Name | Type | Meaning |
|
|
71
|
-
| --- | --- | --- |
|
|
72
|
-
| `node` | `HTMLElement \| null` | The pane's root, so focus can move into it when it opens. |
|
|
73
|
-
| `closeHref` | string | Where Escape or the scrim sends the page. |
|
|
74
|
-
| `openSelector` | string | What reopens focus to, matching the link that opened this pane. |
|
|
75
|
-
| `close` | `() => void` | Optional: called instead of navigating straight away, so a close can animate first. |
|
|
85
|
+
| `leaving` | boolean | On its way out: adds `ws-panel--leaving`, then gives its room back. |
|
|
86
|
+
| `children` | `ReactNode` | The pane's head, body and foot. |
|
|
76
87
|
|
|
77
88
|
## Rules
|
|
78
89
|
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
|
|
82
|
-
-
|
|
83
|
-
-
|
|
90
|
+
- The close is the tray square with an x (Seth, 301:2021). It replaces the word "Close" (logged in 17-decisions.md).
|
|
91
|
+
- One thing at a time; nothing repeated that the page or the chat already shows.
|
|
92
|
+
- No shadow while it sits in the page: the rim is its edge (D5).
|
|
93
|
+
- Dividers run the full width; the parts inside sit 28 in.
|
|
94
|
+
- A plate inside (`ws-plate`) sits half a step above the pane's ground, so it still shows in dark.
|
|
84
95
|
|
|
85
96
|
## Source
|
|
86
97
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
98
|
+
**Derived from**: Seth's check drawer (Figma 301:2011 to 301:2108: 12 / 11 rim, sections 20 / 28 with 16 inside,
|
|
99
|
+
0.5 px #e8e8e8 rules, the foot pinned by a spacer, the 32 px square close, the 44 / 48 figure row), North's docked
|
|
100
|
+
panel motion (js@648139), Revenue OS K5 and K6 and the geometry check (440 on a 390 phone). **Precedent**: the first
|
|
101
|
+
product built on the system.
|
|
102
|
+
|
|
103
|
+
## Markup
|
|
104
|
+
|
|
105
|
+
```html
|
|
106
|
+
<aside class="ws-panel" aria-labelledby="check-title">
|
|
107
|
+
<header class="ws-panel__head">
|
|
108
|
+
<div class="ws-panel__heading">
|
|
109
|
+
<div class="ws-panel__title-row">
|
|
110
|
+
<h2 id="check-title" class="ws-title">Local search</h2>
|
|
111
|
+
<span class="ws-chip ws-chip--needs-work">Needs work</span>
|
|
112
|
+
</div>
|
|
113
|
+
<p class="ws-body">How often you show up on Google Maps when buyers search near you.</p>
|
|
114
|
+
</div>
|
|
115
|
+
<button type="button" class="ws-icon-btn ws-panel__close" aria-label="Close Local search">
|
|
116
|
+
<svg viewBox="0 0 16 16" fill="none"><path d="M4 4l8 8M12 4l-8 8" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
|
117
|
+
</button>
|
|
118
|
+
</header>
|
|
119
|
+
<div class="ws-panel__body">
|
|
120
|
+
<section class="ws-panel__section">
|
|
121
|
+
<div class="ws-panel__figure-row">
|
|
122
|
+
<span class="ws-figure ws-figure--pane">39</span>
|
|
123
|
+
<!-- the strip it reads from: ticks that flex, so it shrinks with the line -->
|
|
124
|
+
</div>
|
|
125
|
+
</section>
|
|
126
|
+
<section class="ws-panel__section">
|
|
127
|
+
<p class="ws-section">Buyers near you see you in 5 of 9 spots, never in the top three.</p>
|
|
128
|
+
</section>
|
|
129
|
+
</div>
|
|
130
|
+
<footer class="ws-panel__foot">
|
|
131
|
+
<section class="ws-panel__section">
|
|
132
|
+
<div class="ws-panel__next">
|
|
133
|
+
<span class="ws-control-words">Next fix · 1 of 2</span>
|
|
134
|
+
<p class="ws-section">Name the towns you serve in your Google Business Profile.</p>
|
|
135
|
+
</div>
|
|
136
|
+
<div class="ws-panel__acts">
|
|
137
|
+
<button type="button" class="ws-btn ws-btn--well ws-btn--lg">Send to my web person</button>
|
|
138
|
+
<button type="button" class="ws-btn ws-btn--primary ws-btn--lg">Review Grow's rewrite</button>
|
|
139
|
+
</div>
|
|
140
|
+
</section>
|
|
141
|
+
</footer>
|
|
142
|
+
</aside>
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Styles
|
|
146
|
+
|
|
147
|
+
`Panel/style.css`, built into `bundle.css` and `fello.css`. Tokens only, so it turns dark with the page. The body is
|
|
148
|
+
one of the house's K1 and K2 scrollers: its sections never shrink and nothing inside it stretches the window.
|