@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,66 +1,109 @@
|
|
|
1
1
|
# Charts
|
|
2
2
|
|
|
3
|
-
Every chart is a card: a title that says the answer, one sentence, the
|
|
4
|
-
|
|
3
|
+
Every chart answers one question. On a page or in the chat it is a card: a title that says the answer, one sentence, the
|
|
4
|
+
drawing, the band or the foot with one act. Inside a report it may be a block of the report (a score, a strip, a share
|
|
5
|
+
bar) under the report's own heading. First name the question; the question picks the chart; the chart uses the approved
|
|
6
|
+
piece.
|
|
5
7
|
|
|
6
8
|
## Question to chart
|
|
7
9
|
|
|
8
10
|
| The question | Chart | Piece |
|
|
9
11
|
| --- | --- | --- |
|
|
10
|
-
|
|
|
11
|
-
| How
|
|
12
|
+
| What is the score, and is it good | the 96 px score, a strip of ticks in the rating's tone, the rating word and one sentence | `ScoreHero` (new) |
|
|
13
|
+
| How much of a whole, across the width (a score of 100, 10 of 16 answers) | equal ticks filling the width, the lit ones in one tone, the rest on the track | `TickStrip` (new) |
|
|
14
|
+
| How many of a small whole (3 of 5 met, 10 waiting) | a short row of ticks | `TickRow` |
|
|
15
|
+
| How far along a goal, and what made it up | the goal card: one 72 px number, its change chip, the gradient strip, rows of ticks by kind | `GoalTicks` |
|
|
16
|
+
| How far along, by area (fixes done per area) | one bar split into groups, one segment a step, labels under | `SegmentedProgress` (new) |
|
|
17
|
+
| Ahead or behind a pace | a track with its fill and a pace mark | `PaceBar` (new) |
|
|
18
|
+
| A key number that opens into its story | a tile: label, figure, pace bar or a mini chart (columns of the periods behind it, or a line with dots), foot; it grows across its row into a chart and a side column | `MetricTile` (new) |
|
|
19
|
+
| Where a whole goes (a bill, a team's time) | one stacked bar, 1 px cuts between parts, a key under it | `ShareBar` (new) |
|
|
20
|
+
| How a value changes over time, against a reference | a step line, the reference dotted, the gap between them hatched, events marked | `StepLine` (new) |
|
|
21
|
+
| How a value moves over periods (a month's ARR, a week's calls), read on an axis | a line with its dots and the hatched area under it, or columns, switching between the two by a morph; a plan as a dotted salmon line | `TrendLine` (new) |
|
|
22
|
+
| How several groups do on several measures | lanes by measures, each cell a tone and a figure | `Heatmap` (new) |
|
|
12
23
|
| Compare a few categories (calls by kind) | horizontal bars with a fade, the number and label at the right | `GoalBars` |
|
|
13
24
|
| Compare a few categories where height reads better (a hero) | vertical tubes with the number on a stalk | `GoalTubes` |
|
|
14
25
|
| Where one value stands against others on a scale (you, team average, the best) | a strip of fine ticks with labelled markers | `RankBar` |
|
|
15
|
-
| A share of a whole, one or three parts | a ring (one arc) or a ring of radial ticks with a
|
|
26
|
+
| A share of a whole, one or three parts | a ring (one arc) or a ring of radial ticks with a key beside it (under on a phone) | `Ring` |
|
|
16
27
|
| Who did what, day by day | a people-by-days grid of dots | `ActivityGrid` |
|
|
17
28
|
| A run of days (a streak) | a weeks-by-days calendar of pills | `StreakCalendar` |
|
|
18
|
-
| Several numbers that answer a page | stat tiles
|
|
29
|
+
| Several numbers that answer a page | stat tiles | `StatTiles` |
|
|
19
30
|
| Each person's progress around a team total | petals or ring segments around a centre figure | `ProgressPetals` |
|
|
20
|
-
| A trend over days with a moment that explains it | thin 2 px bars rising to purple, the moment a salmon bar with a label chip | `TrendBars` |
|
|
31
|
+
| A trend over days with a moment that explains it | thin 2 px bars rising to purple, spread across the plot, the moment a salmon bar with a label chip, the axis naming dates | `TrendBars` |
|
|
21
32
|
| How a pipeline narrows, stage by stage | horizontal bars descending with the conversion between them as chips | `FunnelBars` |
|
|
33
|
+
| Yes or no across a few sources | a matrix of tone cells | `Matrix` (new) |
|
|
22
34
|
| A sequence or a wait | steps on a line that fills | `Stepper` |
|
|
23
35
|
|
|
24
|
-
Do not use: a pie with more than three parts (make it bars), a line chart (
|
|
25
|
-
|
|
26
|
-
|
|
36
|
+
Do not use: a pie with more than three parts (make it bars or a `ShareBar`), a free line chart (two series or more, or a
|
|
37
|
+
line with no axis: make it thin bars, a `TrendLine` of one series over periods, or a `StepLine` where a designer draws
|
|
38
|
+
a bill or a level over time; a `MetricTile`'s mini line with dots for a rate that holds near its target), an axis or a
|
|
39
|
+
grid where thin bars suffice, stacked bars
|
|
40
|
+
across categories (make two rows; one `ShareBar` for one whole is fine), a donut for a single number (make it the goal
|
|
41
|
+
card), a sparkline inside a row (make it a change chip).
|
|
42
|
+
|
|
43
|
+
## Tick strips
|
|
44
|
+
|
|
45
|
+
Seth draws most shares as ticks. The rules every strip follows:
|
|
46
|
+
|
|
47
|
+
- **Ticks fill the width**: equal ticks (`flex: 1`), 1 px corners (`ws-radius-bar`), the lit count is the value's share of
|
|
48
|
+
the ticks, rounded. Empty ticks are the track (`ws-track`) with no edge.
|
|
49
|
+
- **One tone a strip** for a rating or a count: the rating's mark (Colour, Rating tones) or the tone of what it counts.
|
|
50
|
+
The goal gradient stays on `GoalTicks` and `TickRow`'s gradient form.
|
|
51
|
+
- **Sizes**: an overall score 50 ticks, 40 tall, 4 apart; a row's 40 ticks, 32 tall, 3 apart; a drawer's 40 ticks, 32
|
|
52
|
+
tall, 2 apart; a fine score 50 ticks, 24 tall, 2 apart. `TickStrip`'s README names each size.
|
|
53
|
+
- **A target tick** is drawn distinctly, never the same grey as the rest.
|
|
54
|
+
- **Not checked**: every tick on the track, no figure, and the words "Could not check". Never a dash character for a missing value; `CheckRow` holds the score's place
|
|
55
|
+
with a short drawn muted rule and words for a screen reader.
|
|
56
|
+
- **The figure says it in words** beside the strip; the strip itself is hidden from screen readers.
|
|
57
|
+
- **A count beside a row of ticks** (`TickRow`) takes the rest of the line and wraps there; the ticks keep their size
|
|
58
|
+
and never draw over it.
|
|
27
59
|
|
|
28
60
|
## The card language for charts
|
|
29
61
|
|
|
30
62
|
- The title says the answer ("On pace for 40 calls by Oct 22"); the sentence says why ("Nine days early. Cold calls did
|
|
31
63
|
most of the work.").
|
|
32
|
-
- The
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
-
|
|
37
|
-
|
|
38
|
-
-
|
|
39
|
-
|
|
40
|
-
-
|
|
64
|
+
- **The dotted field sits only behind the drawing** and bleeds to the card's edges (`ws-dots`); never behind the head, a
|
|
65
|
+
breakdown or a list. A breakdown under a chart runs full width with a divider above, its rows in a `1fr auto` grid with
|
|
66
|
+
the figure in a fixed right column.
|
|
67
|
+
- Each chart's own top and bottom room is in its README (bars 20 under the head, tubes 36, rings and petals 24).
|
|
68
|
+
- The tones only (Colour), each with its fade for a bar's tail and its tint for a ring's outer track; empty parts are the
|
|
69
|
+
track or `ws-chart-empty`.
|
|
70
|
+
- **Marks keep the exact tone; words take the AA step.** The number and label beside a mark are navy or the tone's word
|
|
71
|
+
token; a key's swatch is the tone and its words body grey or navy.
|
|
72
|
+
- A chart's words take Type's `chart`, `micro` and `value` steps; an axis label is 11 px and AA on its ground.
|
|
73
|
+
- No axis and no gridlines where thin bars suffice; a `StepLine` keeps 0.5 px quarter lines and right-aligned value
|
|
74
|
+
labels, 12 before the plot; a `TrendLine` keeps 0.5 px value rules and right-aligned value labels, 12 before the plot,
|
|
75
|
+
its columns starting at zero.
|
|
76
|
+
- **A hover card may add detail, never be the only reading**: the value is written beside the mark.
|
|
77
|
+
- One chart per card; one hero figure per card; a change is a `ChangeChip` (in `Chip`).
|
|
41
78
|
|
|
42
79
|
## Data rules
|
|
43
80
|
|
|
44
81
|
- **Zero** is drawn (an empty tick, a 0 beside an empty bar), never omitted.
|
|
45
82
|
- **Negative** values do not occur in these charts; a change is shown as a chip, not a bar below an axis.
|
|
46
|
-
- **Missing** data leaves the card out, never a greyed chart; a partial week shows the days to come dashed
|
|
47
|
-
|
|
83
|
+
- **Missing** data leaves the card out, never a greyed chart; a partial week shows the days to come dashed; a check that
|
|
84
|
+
could not run says so in words.
|
|
85
|
+
- **Many categories** (over 6) become a list card with a strip per row, sorted by the number.
|
|
48
86
|
- **Long labels** wrap under the bar or truncate with the full words in `title`; a number never truncates.
|
|
49
|
-
- **Unusually large values** keep the scale honest: the strip's
|
|
87
|
+
- **Unusually large values** keep the scale honest: the strip's ticks represent the target; a value past the target fills
|
|
50
88
|
every tick and says so in the chip ("↗ 112% of goal").
|
|
51
89
|
|
|
52
90
|
## States
|
|
53
91
|
|
|
54
|
-
Loading and empty follow Patterns (a
|
|
92
|
+
Loading and empty follow Patterns (a shimmer in the chart colours over the chart's ghost; the same card with its act).
|
|
55
93
|
|
|
56
94
|
| State | How |
|
|
57
95
|
| --- | --- |
|
|
58
|
-
| Arriving, live, changed | as Motion's
|
|
59
|
-
|
|
|
96
|
+
| Arriving, live, changed | as Motion's Charts section says: one draw, marks staggered by share, nothing sliding in from an edge; a chart builds in when it arrives, on first paint or as it scrolls into view (a kit default, 5 Nov 2026) |
|
|
97
|
+
| Hovered | the hovered part stays, the rest dims to `ws-dim`; a hover card reads the mark; a matrix dims its other rows; a heatmap fades its other squares' heat and status bars while their words step to muted grey, still AA |
|
|
98
|
+
| Narrow (480 or the panel) | labels wrap, keys stack under, a ring's key goes under it; a hero figure keeps its size |
|
|
99
|
+
| Not checked, unavailable | the strip on the track and the words that say why |
|
|
60
100
|
| Screen reader | the figure as text: a `figure` with an `aria-label` that says the answer and the numbers, rows as a list |
|
|
61
101
|
|
|
62
102
|
## Interaction
|
|
63
103
|
|
|
64
|
-
A chart is read, not operated: no
|
|
65
|
-
|
|
66
|
-
|
|
104
|
+
A chart is read, not operated: no click targets smaller than 24 px, and nothing shown only on hover. Hovering or
|
|
105
|
+
focusing a part dims the rest and may open a `HoverCard` with a caret to it; the same reading is reachable by keyboard
|
|
106
|
+
and on a tap. Choosing a person in a team chart dims the others and opens the person beside the chart; the chart keeps
|
|
107
|
+
its size and glides aside. A filter sits inside the card it filters, or in the page's `FilterBar` when it filters the
|
|
108
|
+
whole page (Patterns). A `Heatmap` cell opens in place (a second cell tall) after a short hover intent, and on focus or a
|
|
109
|
+
press.
|
|
@@ -36,25 +36,46 @@ departs from one writes why in its rationale.
|
|
|
36
36
|
|
|
37
37
|
## Actions and feedback
|
|
38
38
|
|
|
39
|
-
- **Latency**: under 100 ms, nothing; 100 ms to 1 s, the pending state; over 1 s, a Stepper
|
|
40
|
-
a background job that comes back as a chat card.
|
|
39
|
+
- **Latency**: under 100 ms, nothing; 100 ms to 1 s, the pending state; over 1 s, a `Stepper`, a `Meter` or a `LoadBar`
|
|
40
|
+
with words (an agent's answer shows its `StatusLine`); over 10 s, a background job that comes back as a chat card.
|
|
41
41
|
- **Confirmation** is a receipt line in the chat (AI experiences) or a toast elsewhere; never a dialog that only says
|
|
42
42
|
"Done".
|
|
43
|
-
- **Dismissal**: a chip has an x; a dialog closes on Escape,
|
|
44
|
-
|
|
43
|
+
- **Dismissal**: a chip has an x; a dialog closes on Escape, the scrim and its secondary; a drawer beside a report closes
|
|
44
|
+
with its labelled x; the panel beside the chat does too. Each closes on Escape and returns focus.
|
|
45
45
|
- **Instant feedback** on every press; a pending control refuses a second press and says so to a screen reader
|
|
46
46
|
(`aria-busy`).
|
|
47
47
|
|
|
48
|
+
## Interaction states
|
|
49
|
+
|
|
50
|
+
Every control, row and card that acts draws each of these. The table says what each looks like; Motion says how each
|
|
51
|
+
moves. A state never changes a thing's size, its type size or its place, so nothing around it moves.
|
|
52
|
+
|
|
53
|
+
| State | What it looks like | Rules |
|
|
54
|
+
| --- | --- | --- |
|
|
55
|
+
| Rest | the component's own look; a control's edge drawn inside it | |
|
|
56
|
+
| Hover | a colour, never a lift: a navy wash on a row (`ws-hover-faint`), a nav or menu row (`ws-hover`), an icon button or a quiet act (`ws-hover-strong`); an outlined control's edge darkens; a rimmed card's rim darkens (`ws-well-hover`); the navy button a shade brighter | only where a pointer hovers (`@media (hover: hover)`); whatever a hover reveals (a close, an arrow, a row's acts, a label) also shows on focus and on a tap |
|
|
57
|
+
| Press | a control scales a little (`ws-press-scale`, round ones `ws-press-scale-round`); a row, a list row or a card a step darker (`ws-surface-press`), never scaled | answered at once; on touch the press is the feedback, a hover never sticks |
|
|
58
|
+
| Focus | a 2 px navy ring 2 px outside (`ws-focus-color`); inside a dense row, a well, a list or a clipped container the same ring drawn inside (`ws-focus-inset`) | `:focus-visible` only; never `outline: none` without the ring (Accessibility) |
|
|
59
|
+
| Selected, open, current | the ground changes (the sunk cream, or the well for a pill in an inset list), the words go navy or 600; a list's selected fill slides from the row it left; the dividers beside an inset pill drop | the row keeps its height and type size; `aria-selected`, `aria-current` or `aria-expanded` says it |
|
|
60
|
+
| Pending | the control keeps its width and its words; the working dot sits in its padding on the one beat; it stays focusable (`aria-disabled`, `aria-busy`) and refuses a second press | from 100 ms (Latency above); words that say what is happening ("Saving") |
|
|
61
|
+
| Loading | the region's ghost in the chart colours' shimmer, the size of what it stands for; its head shows at once | never a spinner for content; still under reduced motion, with a word |
|
|
62
|
+
| Disabled | dimmed (the component's own opacity), no pointer events, the reason said nearby | prefer leaving the act out, or keeping it focusable and saying why |
|
|
63
|
+
| Others step back | while one row, part or tile is in focus, the rest dim (a matrix's other rows to 20%, a chart's other parts to `ws-dim`); the dimmed keep their grounds and dividers. A word that must stay readable steps to muted grey instead of fading (a heatmap's other squares fade their heat and status bar, their words stay AA) | the focused one never changes |
|
|
64
|
+
|
|
65
|
+
The geometry check's `--hover` run shoots each control at rest, hovered and focused and fails a focus that looks the same
|
|
66
|
+
as rest (Checklist).
|
|
67
|
+
|
|
48
68
|
## Loading, empty, error, stale
|
|
49
69
|
|
|
50
70
|
| State | Default |
|
|
51
71
|
| --- | --- |
|
|
52
|
-
| First load | the card's head at once; the body a
|
|
72
|
+
| First load | the card's head at once; the body a ghost of its shape in the shimmer (`Skeleton`), the band waits; content replaces it over `calm` |
|
|
53
73
|
| Partial results | show what has come, a muted line saying more is coming, the working beat on the band's words |
|
|
54
|
-
| Empty, first use | the same card with the app's face
|
|
74
|
+
| Empty, first use | the same card, plain cream (the dotted field is a chart's ground only), with the app's face, one line and the act that fills it in the band |
|
|
55
75
|
| Empty, no matches | the same card, "No candidates match", the act clears the filter |
|
|
56
76
|
| Empty, unavailable | the card is left out, or one line in the chat saying what is missing |
|
|
57
77
|
| Failed | the card with its head, one line saying what failed in plain words and a Retry act in the band; never a status code |
|
|
78
|
+
| Could not check | the row or chart stays, its marks on the track, no figure (never a dash character; a `CheckRow` draws a short muted rule in its place) and the words "Could not check" |
|
|
58
79
|
| Offline | a muted line at the top of the stage; acts that need the network pend until it is back |
|
|
59
80
|
| Stale | "as of Friday" in the sentence; the band's act refreshes |
|
|
60
81
|
|
|
@@ -62,15 +83,17 @@ departs from one writes why in its rationale.
|
|
|
62
83
|
|
|
63
84
|
- A search box is an `Input` with the search icon, 36 px, inside the card whose list it searches; results replace the rows
|
|
64
85
|
with a cross-fade, never a re-stagger.
|
|
65
|
-
- Filters live inside the one chart or list they filter, as a `Segmented` switch or chips
|
|
66
|
-
|
|
86
|
+
- Filters live inside the one chart or list they filter, as a `Segmented` switch or chips. A filter for the whole page
|
|
87
|
+
(a period, a scope) is the page's one `FilterBar`, under its head, docking into the bar as the page scrolls.
|
|
67
88
|
- Sorting is a column header's act in a table or a small Select beside a list; the sort is stated in words ("by score").
|
|
68
89
|
- The empty result is the same card with the act that clears the filter.
|
|
69
90
|
|
|
70
91
|
## Selection and bulk acts
|
|
71
92
|
|
|
72
|
-
Choosing a row
|
|
73
|
-
in a
|
|
93
|
+
Choosing a row opens the thing beside it and marks the row: its ground (the sunk cream, or a pill in an inset list) and
|
|
94
|
+
navy words, nothing else; in a team view the others dim (names included). Several chosen show a count chip and the acts in
|
|
95
|
+
a band at the card's foot ("Nudge all 7"), never a floating toolbar. A checkbox for bulk acts sits before the row's
|
|
96
|
+
target, outside it.
|
|
74
97
|
|
|
75
98
|
## Permissions and read-only
|
|
76
99
|
|
|
@@ -5,32 +5,50 @@ The approved compositions. Start from one; adapt it in the rationale.
|
|
|
5
5
|
## 1. Home (an AI product)
|
|
6
6
|
|
|
7
7
|
The greeting ("Morning, Ryan."), one sentence saying what matters today, the composer, then **Needs you** (one `Well`: a
|
|
8
|
-
mark, the ask in navy, the state word at the right in its AA tone) and a few starters. No
|
|
9
|
-
card. Fits the window; the list grows down if it must.
|
|
8
|
+
mark, the ask in navy, the state word at the right in its AA tone) and a few starters (`SuggestionChip`). No second copy
|
|
9
|
+
of a card. Fits the window; the list grows down if it must.
|
|
10
|
+
|
|
11
|
+
**When the home is a dashboard** (Seth's North): the greeting at the `hero` step with the ask field under it and a few
|
|
12
|
+
starters, their lines on the greeting's visible edge; then what changed (a short list of one-line rows), the key metrics
|
|
13
|
+
as `MetricTile`s (two by two beside a short column of the person's own acts and goals), a chart with its side column
|
|
14
|
+
(`Split`), and the work as a list. Sections 56 apart; a section's head 12 above its cards; cards 16 apart. Each tile
|
|
15
|
+
carries its mini chart (a column strip of the periods behind the figure, or a line with dots) and its pace in the foot;
|
|
16
|
+
the column beside them is a `SideList`: what needs the person (rows that act), then their goals (goal rows, the bar
|
|
17
|
+
navy, teal past the goal, alert red behind). The page builds in on arrival, the kit's default for a dashboard (Motion,
|
|
18
|
+
Build-in): `.ws-build` on the content, `.ws-build__card` and `--ws-i` on each tile and on the column, `--draw` on
|
|
19
|
+
each chart.
|
|
10
20
|
|
|
11
21
|
## 2. Chat
|
|
12
22
|
|
|
13
|
-
One centred
|
|
14
|
-
the thread (`ChatCard`), short act lines as receipts, the composer at the foot
|
|
15
|
-
one
|
|
23
|
+
One centred column in its shell (`ChatShell`): the agent's words as plain text, the person's in a bubble (AI
|
|
24
|
+
experiences), cards flat on the thread (`ChatCard`), short act lines as receipts, the composer at the foot. The header is
|
|
25
|
+
one line (the assistant's name, the thread's title). The same chat can sit as a bar over a page, docked beside it (the
|
|
26
|
+
page steps aside, never covered) or full screen; `ChatShell` holds each mode's widths and insets. A long conversation is
|
|
27
|
+
marked by topic (`TopicRail`). Never a full page beside it.
|
|
16
28
|
|
|
17
29
|
## 3. Panel beside the chat
|
|
18
30
|
|
|
19
|
-
`Panel`: the thing's name and
|
|
31
|
+
`Panel`: the thing's name and a labelled x in its header, the thing's own view (the same component its page's side pane uses),
|
|
20
32
|
its acts in a band at the foot. On a phone it is the screen; below 1280 px it slides over the chat.
|
|
21
33
|
|
|
22
34
|
## 4. App page: a board of cards
|
|
23
35
|
|
|
24
|
-
Full screen in place of the chat, the sidebar beside it.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
36
|
+
Full screen in place of the chat, the sidebar beside it. The 56 px thread header (`PageBar`): the app's face, the page's
|
|
37
|
+
name and the app's name at the left; its quiet acts and "Back to the chat" at the right; 32 at both sides; no divider
|
|
38
|
+
under it. The content starts 16 under the header with the same 32 gutters. No tab row of its own styles. The canvas may
|
|
39
|
+
open with a hero (a report's score or headline) and group its cards under area headings (a `ws-title`, 10 above its card; `Section` is a small group inside one); otherwise the first
|
|
40
|
+
card says what the page is. A `CardBoard`, one card per question, the key cards first; only a page whose answer is
|
|
41
|
+
numbers opens with `StatTiles`. Filters inside the card they filter, or the page's `FilterBar`. A chosen thing opens in a
|
|
42
|
+
drawer beside it (recipe 23) or in a side pane the panel's width. In `AppShell` the body caps its content at two board
|
|
43
|
+
columns (1128); a Fia app page drawn to Seth's full width (Grow, Fixes, Inbox, Tally: 1350 in a 1416 stage) adds
|
|
44
|
+
`ws-app-shell__body--wide`.
|
|
28
45
|
|
|
29
46
|
## 5. List with a detail
|
|
30
47
|
|
|
31
48
|
One card holds the list (a search box in its head); choosing a row opens the thing in the side pane; the list keeps its
|
|
32
|
-
scroll and the chosen row stays lit.
|
|
33
|
-
|
|
49
|
+
scroll and the chosen row stays lit. When choosing is the page's whole job (an inbox), the list and the item share the
|
|
50
|
+
page's grid instead (`ListDetail`, recipe 24). On a phone the detail is its own screen with Back. Over about 50 rows,
|
|
51
|
+
paginate; a pipeline is a `KanbanBoard`.
|
|
34
52
|
|
|
35
53
|
## 6. Form or settings
|
|
36
54
|
|
|
@@ -49,7 +67,8 @@ wide window the grey panel beside it with a few sample cards rising in one after
|
|
|
49
67
|
## 9. A live session (a call, a voice session)
|
|
50
68
|
|
|
51
69
|
A panel at 440: a 56 px head with its acts, the line's state after a small square, the other side's name as the title, a
|
|
52
|
-
talk card (mirrored bars growing as each second passes), the transcript as a list, End as the
|
|
70
|
+
talk card (mirrored bars growing as each second passes), the transcript as a list, End as the secondary button (Seth's
|
|
71
|
+
outlined navy one is open, Decisions). The
|
|
53
72
|
microphone passes to the session and back to the assistant after. (A live session is a product's own view built from the pieces here, not a shared component.)
|
|
54
73
|
|
|
55
74
|
## 10. A guide or a long read (comfortable profile)
|
|
@@ -63,8 +82,9 @@ See 17 and Public pages.
|
|
|
63
82
|
|
|
64
83
|
## 12. A conventional app page (not chat-first)
|
|
65
84
|
|
|
66
|
-
`AppShell`: the
|
|
67
|
-
|
|
85
|
+
`AppShell`: the sidebar on the frame, the stage beside it (13 from the top, 12 from the right and the bottom), a top bar
|
|
86
|
+
with the crumbs, a search box and the page's one navy button. The shell's body owns the scroll (Scrolling). Inside it any
|
|
87
|
+
of the recipes above.
|
|
68
88
|
|
|
69
89
|
## 13. An admin or records page
|
|
70
90
|
|
|
@@ -85,9 +105,10 @@ on every step; the last step a summary `Plate` and the act that finishes. On the
|
|
|
85
105
|
|
|
86
106
|
## 16. A report
|
|
87
107
|
|
|
88
|
-
A `PageHero` with the period and one line
|
|
89
|
-
|
|
90
|
-
|
|
108
|
+
A `PageHero` with the period and one line (or a `ScoreHero` when one score answers the report), `StatTiles` for the
|
|
109
|
+
four numbers, then a board of chart cards each answering one question (`TrendBars`, `FunnelBars`, `GoalBars`,
|
|
110
|
+
`ShareBar`, a `Leaderboard`), a `Timeline` of what happened, the one act to share or export in the hero. Its sections 56
|
|
111
|
+
apart (Space and layout). Printable: no sticky, no motion, the cards in one column.
|
|
91
112
|
|
|
92
113
|
## 17. A landing or campaign page
|
|
93
114
|
|
|
@@ -105,10 +126,12 @@ where possible). On a phone it follows Public pages' layout.
|
|
|
105
126
|
## 19. A dashboard or a console (internal tools, staff views)
|
|
106
127
|
|
|
107
128
|
The frame: `AppShell` when the dashboard is one page of a multi-page product (it has a nav to other pages); `Page` with a
|
|
108
|
-
`PageBar` and its board when it is a single-page artifact or report (no shell).
|
|
109
|
-
answer is numbers, each naming its period and opening its filtered list; then the work: an `ActionList` (a ranked list of next acts, each row's reason in words, its act at the right) or a `Table`; a record opens
|
|
129
|
+
`PageBar` and its board when it is a single-page artifact or report (no shell). A period or scope that filters the whole
|
|
130
|
+
page is the one `FilterBar` under the head. Then at most four `StatTiles` (or `MetricTile`s) when the answer is numbers, each naming its period and opening its filtered list; then the work: an `ActionList` (a ranked list of next acts, each row's reason in words, its act at the right) or a `Table`; a record opens
|
|
110
131
|
in a side pane. A console acting on someone's account sits beside that person's own view, so staff see what they see.
|
|
111
|
-
Every figure comes from the function the acts use; one with no source is left out, not shown as a dash.
|
|
132
|
+
Every figure comes from the function the acts use; one with no source is left out, not shown as a dash. It builds in
|
|
133
|
+
on arrival (`.ws-build`, Motion's Build-in): its cards rise in 70 ms apart and their charts draw as each lands, once,
|
|
134
|
+
as each scrolls into view; under reduced motion it shows its final state.
|
|
112
135
|
|
|
113
136
|
## 20. An email or a one-pager
|
|
114
137
|
|
|
@@ -124,7 +147,71 @@ Claude's Slides with this system. One idea a slide, its title the answer; the ki
|
|
|
124
147
|
titles; one salmon highlight a slide at most; charts from Charts. The
|
|
125
148
|
first slide states the point, the last makes the one ask.
|
|
126
149
|
|
|
150
|
+
## 22. First open of an AI app's new thread
|
|
151
|
+
|
|
152
|
+
What a person sees the first time they open an app's thread (issue #12, Seth's v7 first open, the owner's 3 Nov ruling).
|
|
153
|
+
|
|
154
|
+
1. **The app's face and one line** saying what it does for this person, on the column's start edge.
|
|
155
|
+
2. **One example card on the team's own numbers**, never made up: a snug chart card (its head 12 in, its band 16 all
|
|
156
|
+
round, sized to its content, no dotted field and no edge when it stands alone on the thread). Its one step (connect
|
|
157
|
+
a source, set a goal) sits in its band until it is done; the card stays after. A card that genuinely shows sample
|
|
158
|
+
data says so with the `Chip` Example tag; a card on real numbers never carries it.
|
|
159
|
+
3. **What the app can do, as a row of tiles** on the well (`Tile`'s tile row): 2 px apart in a 1 px rim, each tile a door
|
|
160
|
+
(a 24 px line icon, a title, one line, its foot naming where it goes) or the step it waits on (muted, not
|
|
161
|
+
interactive). The row wraps; a tile is never narrower than 168.
|
|
162
|
+
4. **The composer** at the foot, with a few starters (`SuggestionChip`).
|
|
163
|
+
|
|
164
|
+
Nothing proactive arrives on a first open; the agent speaks when asked.
|
|
165
|
+
|
|
166
|
+
## 23. A report with its drawer
|
|
167
|
+
|
|
168
|
+
Seth's Grow audit report (Figma 301:1630): a score, its checks, and one check's detail beside them.
|
|
169
|
+
|
|
170
|
+
- **The thread header** (recipe 4): the face, "Audit report", the app's name; at the right when it last ran, two quiet
|
|
171
|
+
acts (secondary, 32) and "Back to the chat".
|
|
172
|
+
- **The report column**, 16 under the header, 32 gutters, its blocks 32 apart and 16 inside each: the view tabs
|
|
173
|
+
(`Segmented` well, one figure per tab, full width), the `ScoreHero` (the 96 score, its strip, the rating word in its
|
|
174
|
+
word token and one sentence), then the list's heading (`ws-section`) and one rimmed `Card` of `CheckRow`s: a name
|
|
175
|
+
column, a tick strip, the figure and the status in fixed right-aligned columns, a chevron.
|
|
176
|
+
- **Choosing a row opens its drawer**: a rimmed `Panel` drawer, 440 wide (`ws-thing-width`), 24 from the report, inside
|
|
177
|
+
the stage and 24 above its foot; the report narrows to give it room. The open row takes the sunk ground and navy status
|
|
178
|
+
words, nothing else.
|
|
179
|
+
- **The markup**: the report and its drawer are a filled `Split` straight in the wide body, so the report scrolls on its
|
|
180
|
+
own, the drawer's foot sits on the bottom and the page ends 24 above the stage's foot:
|
|
181
|
+
`<main class="ws-app-shell__body ws-app-shell__body--wide"><div class="ws-split ws-split--fill">` holding
|
|
182
|
+
`ws-split__main` (the report column) and `ws-split__aside` (holding the `Panel` drawer). No `.ws-page` inside the body.
|
|
183
|
+
- **The drawer**, its sections split by full-width dividers, each 20 top and bottom and 28 at the sides: the head (the
|
|
184
|
+
check's name as the title with its rating tag, one line, a labelled x at the top right, then the 44 px figure with its
|
|
185
|
+
strip); its own tabs (a small `Segmented` well); the finding (`ws-section`); a facts `Plate` (label over value pairs,
|
|
186
|
+
a foot with a link); a spacer; the next fix (its label, its title, two acts as equal halves, the primary last); the
|
|
187
|
+
ask field at the foot (the compact `Composer`).
|
|
188
|
+
- **A check that could not run** keeps its row: the strip on the track, no figure, "Could not check"; it still opens.
|
|
189
|
+
- **Narrower**: below 1280 the drawer slides over the report; on a phone it is the screen, with the x and Back.
|
|
190
|
+
|
|
191
|
+
## 24. An inbox: a list and the item it opens
|
|
192
|
+
|
|
193
|
+
Seth's Grow review inbox (Figma 313:2671).
|
|
194
|
+
|
|
195
|
+
- **The thread header** (recipe 4), then one three-column grid, 8 apart, in the wide body
|
|
196
|
+
(`ws-app-shell__body ws-app-shell__body--wide`); the list and the item are `ws-list-detail ws-list-detail--apart
|
|
197
|
+
ws-list-detail--fill`, so the list scrolls inside its column and the item's acts sit at its foot.
|
|
198
|
+
- **Three tiles across the top**: rimmed `Card`s with a foot on the tray. Each: a label (`ws-control-words`), the figure
|
|
199
|
+
(`ws-figure--tile`) with its marks beside it, and a foot saying where it came from. A source not connected shows the
|
|
200
|
+
words "Not connected" in muted words at the figure's size, and its foot is the door ("Connect Google").
|
|
201
|
+
- **The list**, exactly one column wide (`ListDetail`), so its right edge meets the first tile's: a rimmed card; its head
|
|
202
|
+
holds the select-all box and the filter (`Segmented`, each item with its count); each row a status box before its
|
|
203
|
+
target, a top line (the stars, the date, the source) and the review's one line, truncated with its full words in
|
|
204
|
+
`title`. The chosen row takes the sunk ground and 600 words at the same size; the list keeps its scroll.
|
|
205
|
+
- **The item**, spanning the other two columns: a rimmed card, 32 at the sides and 28 at the top and bottom. Its head:
|
|
206
|
+
the stars, the source and date, "4 of 10", Previous and Next as icon buttons. Then the quote, the agent's draft on a
|
|
207
|
+
sunk plate (its face, what it did, Edit), a spacer, the acts (the primary, then the secondary; "Mark as replied" as a
|
|
208
|
+
checkbox at the right) and one muted line on what the agent will never do.
|
|
209
|
+
- **Keyboard**: arrow keys move through the list; Previous and Next move the item and the chosen row together.
|
|
210
|
+
- **On a phone** the tiles stack, the list is the screen and the item is its own screen with Back.
|
|
211
|
+
|
|
127
212
|
## What every recipe shares
|
|
128
213
|
|
|
129
|
-
One primary per page (navy in a product, the salmon gradient on a public page). The gutter is the
|
|
130
|
-
one after another on first paint
|
|
214
|
+
One primary per page (navy in a product, the salmon gradient on a public page). The gutter is the stage's; one content
|
|
215
|
+
edge per surface. Cards settle in one after another on first paint; a dashboard's cards build in (`.ws-build`), their
|
|
216
|
+
charts drawing as each card lands. Focus and scroll are restored on return. Every
|
|
217
|
+
recipe works at 320, 390 and 1440, light and dark, and under reduced motion (Checklist).
|
|
@@ -17,7 +17,8 @@ no "Oops", no jokes in an error.
|
|
|
17
17
|
- No trailing period on a title, a label, a button or a chip (a public two-beat headline may stop each beat with one); a
|
|
18
18
|
full sentence under a title ends with one.
|
|
19
19
|
- **No em dashes and no emoji anywhere a person reads**, including model output. Use a comma, a colon, a full stop or
|
|
20
|
-
parentheses.
|
|
20
|
+
parentheses. A dash never stands in for a missing value either: leave the figure out and say why in words ("Could
|
|
21
|
+
not check", "Not connected").
|
|
21
22
|
- A middle dot separates short facts in a meta line ("Cold call · 6 min").
|
|
22
23
|
- Numbers as digits (3, not three) except at the start of a title ("Three of seven reached out").
|
|
23
24
|
|