@felloinnovations/brand-kit 0.4.0 → 0.5.1
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 +221 -0
- package/README.md +38 -9
- package/design-system/01-how-claude-decides.md +26 -17
- package/design-system/02-principles.md +11 -6
- package/design-system/03-colour.md +135 -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 +367 -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 +53 -16
- package/design-system/components/Skeleton/preview.html +35 -23
- package/design-system/components/Skeleton/style.css +17 -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 +4086 -744
- package/design-system/tokens.json +1310 -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 +109 -10
- 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 +173 -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 +1287 -62
- package/tokens/tokens.md +587 -61
- package/tokens/tokens.root.css +1293 -62
- package/tokens/tokens.ts +1677 -64
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
A report's score the way Seth draws it: the 96 px figure, a strip of ticks across the page and the rating in words.
|
|
2
|
+
|
|
3
|
+
**Use it when**
|
|
4
|
+
|
|
5
|
+
- A report opens on one score out of a whole ("72", "10 of 16") and the reader needs to know at once how good it is.
|
|
6
|
+
- The score carries a rating (strong, getting there, needs work) and one sentence on what to do next.
|
|
7
|
+
- It is the first thing on a full page (an audit report, a check's view), not a card in a board.
|
|
8
|
+
|
|
9
|
+
**Not for**
|
|
10
|
+
|
|
11
|
+
- A goal's share with the gradient strip and a breakdown, in a card: use `GoalTicks`.
|
|
12
|
+
- A row of a list with its own small strip: use `TickStrip` inside the row, with a 28 px figure (`ws-figure--row`).
|
|
13
|
+
- A page's few numbers side by side: use `StatTiles`.
|
|
14
|
+
|
|
15
|
+
**Anatomy**
|
|
16
|
+
|
|
17
|
+
- A column, 16 apart (`--space-md`): the head, the strip, the summary.
|
|
18
|
+
- Head: the figure (`ws-figure ws-figure--score`: 96/96, weight 400, -3%, navy, proportional numerals so its ink sits on the strip's
|
|
19
|
+
edge as in Seth's frame; tabular ones put "10 of 16" 11 px in). A line that
|
|
20
|
+
explains the figure ("We asked 4 AI assistants...") sits 2 under it, 15/22 in `--color-text-body`.
|
|
21
|
+
- Strip: a `TickStrip --lg` (40 tall, 4 apart): 50 ticks for a score out of 100, one tick a unit for a count (16).
|
|
22
|
+
- Summary: the rating word (15/22 semibold, in the tone's AA word), 10, then the sentence (15/22 regular,
|
|
23
|
+
`--color-text-body`), as running text that wraps.
|
|
24
|
+
- It measures itself: in a column under 26rem the figure steps down to 72/72, so "10 of 16" fits a phone.
|
|
25
|
+
|
|
26
|
+
| Modifier | Strip | Rating word |
|
|
27
|
+
| --- | --- | --- |
|
|
28
|
+
| default, strong | `--ws-rating-strong` (teal) | `--ws-word-positive` |
|
|
29
|
+
| `--middle`, getting there | `--color-text-interactive` (mid blue, lifted in dark) | `--color-text-interactive` |
|
|
30
|
+
| `--needs-work` | `--ws-rating-needs-work` (pink) | `--ws-word-needs-work` |
|
|
31
|
+
| `--none`, not checked | every tick the track | `--color-text-muted` |
|
|
32
|
+
|
|
33
|
+
**Parts and modifiers**
|
|
34
|
+
|
|
35
|
+
- `.ws-score-hero__ghost`: loading: a ghost the size of the figure (with `ws-shimmer`).
|
|
36
|
+
- `.ws-score-hero__ghost--line`: loading: a ghost the size of the summary line.
|
|
37
|
+
|
|
38
|
+
**States**
|
|
39
|
+
|
|
40
|
+
- Default: the strip draws once (`--draw` on the strip, 900 ms); the summary settles in (rises 6 px out of a 3 px blur)
|
|
41
|
+
once the draw is half way. The figure does not count up (North: headline figures are static).
|
|
42
|
+
- Not checked: an en dash in muted words in place of the figure (`__figure--none`, with `aria-hidden`; the section's
|
|
43
|
+
label says "not checked"), every tick the track, "Could not check" and why.
|
|
44
|
+
- Loading: a ghost the figure's height, the strip as a ghost (`--loading`) and a ghost line, all under the shimmer;
|
|
45
|
+
`aria-busy="true"` on the section.
|
|
46
|
+
- Long sentence: wraps as running text under the rating; the figure never wraps.
|
|
47
|
+
- Reduced motion: no draw, no settle; the ghosts stay still.
|
|
48
|
+
- Hover, focus, pressed: do not apply; it is read, not pressed.
|
|
49
|
+
|
|
50
|
+
**Behaviour**
|
|
51
|
+
|
|
52
|
+
- The section carries `aria-label` with the whole score in words ("Your score: 72 of 100, strong"); the strip is
|
|
53
|
+
`aria-hidden`.
|
|
54
|
+
|
|
55
|
+
**Content**
|
|
56
|
+
|
|
57
|
+
- The figure is the score as people say it: "72", "10 of 16". No percent sign on a score out of 100.
|
|
58
|
+
- The rating is one or two words; the sentence names the next thing to do.
|
|
59
|
+
|
|
60
|
+
**Rules**
|
|
61
|
+
|
|
62
|
+
- One ScoreHero a page, at its top. Everything under it is smaller (44 pane, 32 tile, 28 row figures).
|
|
63
|
+
- Marks keep Seth's tones; the rating word takes its AA step on the ground it sits on.
|
|
64
|
+
- The not-checked figure is an en dash, never an em dash and never a zero.
|
|
65
|
+
|
|
66
|
+
**Source**
|
|
67
|
+
|
|
68
|
+
**Derived from**: Seth's Grow audit, "Your score" (301:1668) and "Which AI platforms mention you" (305:2318); the middle
|
|
69
|
+
band's tone is D10 (Seth did not draw it). North's draw and settle for the motion.
|
|
70
|
+
|
|
71
|
+
**Markup**
|
|
72
|
+
|
|
73
|
+
```html
|
|
74
|
+
<section class="ws-score-hero ws-score-hero--needs-work" aria-label="Your score: 39 of 100, needs work">
|
|
75
|
+
<div class="ws-score-hero__head">
|
|
76
|
+
<p class="ws-figure ws-figure--score ws-score-hero__figure">39</p>
|
|
77
|
+
</div>
|
|
78
|
+
<div class="ws-tick-strip ws-tick-strip--lg ws-tick-strip--draw" style="--n: 50;" aria-hidden="true">
|
|
79
|
+
<span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 0;"></span>
|
|
80
|
+
<!-- 20 lit, then 30 of the track -->
|
|
81
|
+
<span class="ws-tick-strip__tick"></span>
|
|
82
|
+
</div>
|
|
83
|
+
<p class="ws-score-hero__summary">
|
|
84
|
+
<span class="ws-score-hero__rating">Needs work</span>
|
|
85
|
+
<span class="ws-score-hero__line">Start with Local search.</span>
|
|
86
|
+
</p>
|
|
87
|
+
</section>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Styles**: `ScoreHero/style.css` (with `TickStrip/style.css`), in `bundle.css` and `fello.css` as `.ws-score-hero`.
|
|
91
|
+
Every value is a token.
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
<!-- @dsCard group="Charts" height=1400 -->
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html>
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="utf-8">
|
|
6
|
+
<title>ScoreHero</title>
|
|
7
|
+
<link rel="stylesheet" href="../../tokens.css">
|
|
8
|
+
<link rel="stylesheet" href="../bundle.css">
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
<div class="ws-stage ws-stage--column">
|
|
12
|
+
|
|
13
|
+
<div class="ws-stack" style="max-width: 886px;">
|
|
14
|
+
<span class="ws-muted">Strong: the overall score, its strip drawn in once, the rating and what to do next</span>
|
|
15
|
+
<section class="ws-score-hero" aria-label="Your score: 72 of 100, strong">
|
|
16
|
+
<div class="ws-score-hero__head">
|
|
17
|
+
<p class="ws-figure ws-figure--score ws-score-hero__figure">72</p>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="ws-tick-strip ws-tick-strip--lg ws-tick-strip--draw" style="--n: 50;" aria-hidden="true"><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 0;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 1;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 2;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 3;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 4;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 5;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 6;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 7;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 8;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 9;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 10;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 11;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 12;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 13;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 14;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 15;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 16;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 17;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 18;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 19;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 20;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 21;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 22;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 23;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 24;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 25;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 26;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 27;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 28;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 29;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 30;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 31;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 32;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 33;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 34;"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on" style="--i: 35;"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span></div>
|
|
20
|
+
<p class="ws-score-hero__summary">
|
|
21
|
+
<span class="ws-score-hero__rating">Strong</span>
|
|
22
|
+
<span class="ws-score-hero__line">Zillow is your strongest. Start with Local search.</span>
|
|
23
|
+
</p>
|
|
24
|
+
</section>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<div class="ws-stack" style="max-width: 1350px;">
|
|
28
|
+
<span class="ws-muted">A count with its line under the figure: one tick an answer</span>
|
|
29
|
+
<section class="ws-score-hero" aria-label="10 of 16 answers named you">
|
|
30
|
+
<div class="ws-score-hero__head">
|
|
31
|
+
<p class="ws-figure ws-figure--score ws-score-hero__figure">10 of 16</p>
|
|
32
|
+
<p class="ws-score-hero__line">We asked 4 AI assistants the same 4 questions on Nov 2, about Chagrin Falls, OH.</p>
|
|
33
|
+
</div>
|
|
34
|
+
<div class="ws-tick-strip ws-tick-strip--lg" style="--n: 16;" aria-hidden="true"><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span></div>
|
|
35
|
+
</section>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<div class="ws-stack" style="max-width: 886px;">
|
|
39
|
+
<span class="ws-muted">Getting there: the middle band in mid blue</span>
|
|
40
|
+
<section class="ws-score-hero ws-score-hero--middle" aria-label="Your score: 55 of 100, getting there">
|
|
41
|
+
<div class="ws-score-hero__head">
|
|
42
|
+
<p class="ws-figure ws-figure--score ws-score-hero__figure">55</p>
|
|
43
|
+
</div>
|
|
44
|
+
<div class="ws-tick-strip ws-tick-strip--lg" style="--n: 50;" aria-hidden="true"><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span></div>
|
|
45
|
+
<p class="ws-score-hero__summary">
|
|
46
|
+
<span class="ws-score-hero__rating">Getting there</span>
|
|
47
|
+
<span class="ws-score-hero__line">Your website and social are close. Local search holds you back.</span>
|
|
48
|
+
</p>
|
|
49
|
+
</section>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<div class="ws-stack" style="max-width: 886px;">
|
|
53
|
+
<span class="ws-muted">Needs work: pink marks, the word in its AA step, a long sentence that wraps</span>
|
|
54
|
+
<section class="ws-score-hero ws-score-hero--needs-work" aria-label="Your score: 39 of 100, needs work">
|
|
55
|
+
<div class="ws-score-hero__head">
|
|
56
|
+
<p class="ws-figure ws-figure--score ws-score-hero__figure">39</p>
|
|
57
|
+
</div>
|
|
58
|
+
<div class="ws-tick-strip ws-tick-strip--lg" style="--n: 50;" aria-hidden="true"><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span></div>
|
|
59
|
+
<p class="ws-score-hero__summary">
|
|
60
|
+
<span class="ws-score-hero__rating">Needs work</span>
|
|
61
|
+
<span class="ws-score-hero__line">Buyers near you see you in 5 of 9 spots on Google Maps and never in the top three. Name the towns you serve in your Google Business Profile first.</span>
|
|
62
|
+
</p>
|
|
63
|
+
</section>
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
<div class="ws-stack" style="max-width: 886px;">
|
|
67
|
+
<span class="ws-muted">Not checked: a dash in muted words, every tick the track, why in words</span>
|
|
68
|
+
<section class="ws-score-hero ws-score-hero--none" aria-label="Your score: not checked">
|
|
69
|
+
<div class="ws-score-hero__head">
|
|
70
|
+
<p class="ws-figure ws-figure--score ws-score-hero__figure ws-score-hero__figure--none" aria-hidden="true">–</p>
|
|
71
|
+
</div>
|
|
72
|
+
<div class="ws-tick-strip ws-tick-strip--lg" style="--n: 50;" aria-hidden="true"><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span></div>
|
|
73
|
+
<p class="ws-score-hero__summary">
|
|
74
|
+
<span class="ws-score-hero__rating">Could not check</span>
|
|
75
|
+
<span class="ws-score-hero__line">Connect your Google profile and Grow scores it on the next audit.</span>
|
|
76
|
+
</p>
|
|
77
|
+
</section>
|
|
78
|
+
</div>
|
|
79
|
+
|
|
80
|
+
<div class="ws-stack" style="max-width: 886px;">
|
|
81
|
+
<span class="ws-muted">Loading: ghosts the size of the figure, the strip and the line</span>
|
|
82
|
+
<section class="ws-score-hero" aria-busy="true" aria-label="Your score, loading">
|
|
83
|
+
<div class="ws-score-hero__head">
|
|
84
|
+
<span class="ws-shimmer ws-score-hero__ghost" aria-hidden="true"></span>
|
|
85
|
+
</div>
|
|
86
|
+
<div class="ws-tick-strip ws-tick-strip--lg ws-tick-strip--loading" style="--n: 50;" aria-hidden="true"><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span></div>
|
|
87
|
+
<span class="ws-shimmer ws-score-hero__ghost ws-score-hero__ghost--line" aria-hidden="true"></span>
|
|
88
|
+
</section>
|
|
89
|
+
</div>
|
|
90
|
+
|
|
91
|
+
<div class="ws-stack" style="width: 320px; max-width: 100%;">
|
|
92
|
+
<span class="ws-muted">In a 320 px column: the figure steps down to 72</span>
|
|
93
|
+
<section class="ws-score-hero" aria-label="10 of 16 answers named you">
|
|
94
|
+
<div class="ws-score-hero__head">
|
|
95
|
+
<p class="ws-figure ws-figure--score ws-score-hero__figure">10 of 16</p>
|
|
96
|
+
<p class="ws-score-hero__line">We asked 4 AI assistants the same 4 questions on Nov 2.</p>
|
|
97
|
+
</div>
|
|
98
|
+
<div class="ws-tick-strip ws-tick-strip--lg" style="--n: 16;" aria-hidden="true"><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick ws-tick-strip__tick--on"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span></div>
|
|
99
|
+
</section>
|
|
100
|
+
</div>
|
|
101
|
+
|
|
102
|
+
</div>
|
|
103
|
+
</body>
|
|
104
|
+
</html>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/* ---- ScoreHero: a report's score as Seth draws it, the 96 px figure, its strip and the rating in words ---- */
|
|
2
|
+
/* A column 16 apart: the figure (house .ws-figure--score, 96/96, -3%), the TickStrip, the summary. The figure stands
|
|
3
|
+
alone, so its numerals are proportional: tabular ones carry wide side bearings at 96 px ("10 of 16" sat 11 px in from
|
|
4
|
+
the strip's edge; Seth's 72 sits 2 in). A line that
|
|
5
|
+
explains the figure sits 2 under it in the head; a summary line sits under the strip. It measures itself: under
|
|
6
|
+
26rem the figure steps down to 72 so "10 of 16" fits a phone. */
|
|
7
|
+
.ws-score-hero { --tone-word: var(--ws-word-positive); display: flex; flex-direction: column; gap: var(--space-md); container-type: inline-size; }
|
|
8
|
+
.ws-score-hero__head { display: flex; flex-direction: column; gap: var(--space-3xs); }
|
|
9
|
+
.ws-score-hero__figure { white-space: nowrap; font-variant-numeric: proportional-nums; }
|
|
10
|
+
.ws-score-hero__figure--none { color: var(--color-text-muted); }
|
|
11
|
+
.ws-score-hero__line { font-size: var(--ws-text-section); line-height: var(--ws-leading-section); color: var(--color-text-body); text-wrap: pretty; }
|
|
12
|
+
/* The summary reads as one sentence: the rating word, 10, then the line, wrapping as running text. The markup keeps a
|
|
13
|
+
space between the two (screen readers and copy need it); Instrument Sans' space is 0.2em, so the margin gives it back. */
|
|
14
|
+
.ws-score-hero__summary { font-size: var(--ws-text-section); line-height: var(--ws-leading-section); color: var(--color-text-body); text-wrap: pretty; }
|
|
15
|
+
.ws-score-hero__rating { margin-right: calc(var(--space-xs-plus) - 0.2em); font-weight: 600; color: var(--tone-word); }
|
|
16
|
+
/* Rating tones (D10): the strip takes the mark, the word its AA step. */
|
|
17
|
+
.ws-score-hero--middle { --tone-word: var(--color-text-interactive); }
|
|
18
|
+
.ws-score-hero--middle .ws-tick-strip { --tone: var(--ws-rating-middle); }
|
|
19
|
+
.ws-score-hero--needs-work { --tone-word: var(--ws-word-needs-work); }
|
|
20
|
+
.ws-score-hero--needs-work .ws-tick-strip { --tone: var(--ws-rating-needs-work); }
|
|
21
|
+
.ws-score-hero--none { --tone-word: var(--color-text-muted); }
|
|
22
|
+
/* Loading: ghost blocks the size of what they stand for under the shimmer. */
|
|
23
|
+
.ws-score-hero__ghost { width: calc(var(--space-6xl) * 2); max-width: 100%; height: var(--ws-leading-score); }
|
|
24
|
+
.ws-score-hero__ghost--line { width: min(100%, calc(var(--space-9xl) * 2)); height: var(--ws-leading-section); }
|
|
25
|
+
@container (max-width: 26rem) {
|
|
26
|
+
.ws-score-hero__figure { font-size: var(--ws-text-display); line-height: var(--ws-text-display); }
|
|
27
|
+
.ws-score-hero__ghost { height: var(--ws-text-display); }
|
|
28
|
+
}
|
|
29
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
30
|
+
/* The words settle in after the strip's draw has begun (North: details settle after their frame). */
|
|
31
|
+
.ws-score-hero__summary { animation: ws-settle var(--ws-duration-settle) var(--ws-ease-soft) backwards; animation-delay: calc(var(--ws-duration-draw) * 0.55); }
|
|
32
|
+
}
|
|
@@ -1,69 +1,108 @@
|
|
|
1
|
-
A group of
|
|
1
|
+
A group of things under a short heading: Seth's 15 / 22 section title, an optional count on its line, a line of
|
|
2
|
+
context and one act on the right.
|
|
2
3
|
|
|
3
4
|
## Use it when
|
|
4
5
|
|
|
5
|
-
- A page or a panel groups a few related rows, controls or
|
|
6
|
-
- The group needs a
|
|
7
|
-
- The heading is a page- or panel-level grouping device, not a card's own title (a card's title is its header, its head, `.ws-head` (see `Card`), or a `Dialog`'s head, not `Section`).
|
|
6
|
+
- A page or a panel groups a few related rows, controls or cards under one heading ("Your AI visibility checks").
|
|
7
|
+
- The group needs a count beside its title ("Website 0 of 2 done"), a quiet line under it, or one act ("See all").
|
|
8
8
|
|
|
9
9
|
## Not for
|
|
10
10
|
|
|
11
|
-
- A card's own title and sentence:
|
|
12
|
-
- A bounded, edged surface:
|
|
13
|
-
- A
|
|
11
|
+
- A card's own title and sentence: the card's head (`.ws-head`, see `Card`).
|
|
12
|
+
- A bounded, edged surface: a section has no edge or ground; put a `Card` inside it.
|
|
13
|
+
- A switch between views: `Segmented` or `Tabs`.
|
|
14
14
|
|
|
15
15
|
## Anatomy
|
|
16
16
|
|
|
17
17
|
- A `<section>` named by its heading (`aria-labelledby`).
|
|
18
|
-
-
|
|
19
|
-
|
|
18
|
+
- Head (`__head`): the words at the left, one act at the right on the title's baseline; 12 apart across, 4 when the
|
|
19
|
+
act wraps under (the field fix: the gaps had been swapped). The act wraps only when the words would go under 200.
|
|
20
|
+
- Title (`__title`): 15 / 22 semibold navy (`--ws-text-section`, Seth's D6), an `h2` or `h3`. A long title wraps.
|
|
21
|
+
- Count (`__count`): control words, 13 / 18 medium in muted, 10 after the title on its baseline, inside the heading,
|
|
22
|
+
with a space before it in the markup so the heading reads "Website 0 of 2 done". It wraps under a long title.
|
|
23
|
+
- Note: one line in `ws-muted` (12 / 16), 2 under the title.
|
|
24
|
+
- 12 (`--space-sm`) from the head to the content (North's rule).
|
|
25
|
+
- Rows (`__row`): plain rows, at least 40 tall (`--ws-row-h-dense`), their words on the title's edge, Seth's 0.5 px
|
|
26
|
+
divider (`--ws-divider`) above each one, the first included, running the full width (Tally's side column).
|
|
20
27
|
|
|
21
28
|
## Variants and sizes
|
|
22
29
|
|
|
23
30
|
| `level` | Heading element | Use |
|
|
24
31
|
| --- | --- | --- |
|
|
25
32
|
| `2` (default) | `h2` | A page-level section |
|
|
26
|
-
| `3` | `h3` | A section nested
|
|
33
|
+
| `3` | `h3` | A section nested in a pane or another section |
|
|
34
|
+
|
|
35
|
+
| Class | Title | Use |
|
|
36
|
+
| --- | --- | --- |
|
|
37
|
+
| (default) | 15 / 22 semibold | A group of rows or cards on a page or in a pane |
|
|
38
|
+
| `--area` | 22 / 28 semibold (`--ws-text-title`), 10 to the content | Seth's area heading over its card ("Website 0 of 2 done", Fixes `308:2611`); the count keeps 13 / 18 on the title's baseline |
|
|
27
39
|
|
|
28
40
|
## States
|
|
29
41
|
|
|
30
|
-
- **Default**: title, optional note, optional
|
|
31
|
-
- **
|
|
32
|
-
- **
|
|
33
|
-
- **
|
|
34
|
-
- **
|
|
42
|
+
- **Default**: title, optional count or note, optional act, content.
|
|
43
|
+
- **With a count**: the count sits on the title's line, never on a line of its own.
|
|
44
|
+
- **Long title**: wraps; the act stays beside it while the words keep 200, then moves under.
|
|
45
|
+
- **Empty content**: a section with nothing to show is not drawn; it never heads nothing.
|
|
46
|
+
- **Loading**: the content shows its own ghosts; the head stays.
|
|
35
47
|
|
|
36
48
|
## Behaviour
|
|
37
49
|
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
- Motion: `Section` itself has no entrance motion; its content (a list, a tile) carries its own, such as `ws-rise` on rows arriving.
|
|
41
|
-
- Reduced motion: unaffected, since the component has no animation of its own.
|
|
50
|
+
- The heading is a real `h2` or `h3`; the act is a normal link or button in the page's tab order.
|
|
51
|
+
- No motion of its own; its content settles in.
|
|
42
52
|
|
|
43
53
|
## Content
|
|
44
54
|
|
|
45
|
-
- The title is a short noun phrase
|
|
46
|
-
- The
|
|
47
|
-
- The
|
|
55
|
+
- The title is a short noun phrase ("Leads to call"), sentence case.
|
|
56
|
+
- The count states progress as words a person can read ("0 of 2 done"), never a bare fraction.
|
|
57
|
+
- The note adds one fact the content does not already show.
|
|
58
|
+
- The act is a short verb phrase ("See all"), never a bare chevron.
|
|
48
59
|
|
|
49
60
|
## Props
|
|
50
61
|
|
|
51
62
|
| Name | Type | Meaning |
|
|
52
63
|
| --- | --- | --- |
|
|
53
|
-
| `title` | `ReactNode` | The
|
|
54
|
-
| `titleId` | string | The heading's id, for `aria-labelledby
|
|
55
|
-
| `
|
|
56
|
-
| `
|
|
57
|
-
| `
|
|
58
|
-
| `
|
|
64
|
+
| `title` | `ReactNode` | The heading |
|
|
65
|
+
| `titleId` | `string` | The heading's id, for `aria-labelledby` |
|
|
66
|
+
| `count` | `ReactNode` | Progress on the title's line |
|
|
67
|
+
| `note` | `ReactNode` | A line of context under the title |
|
|
68
|
+
| `action` | `ReactNode` | One act on the right |
|
|
69
|
+
| `level` | `2` \| `3` | The heading element, default `2` |
|
|
70
|
+
| `children` | `ReactNode` | The content |
|
|
59
71
|
|
|
60
72
|
## Rules
|
|
61
73
|
|
|
62
|
-
-
|
|
63
|
-
- One
|
|
64
|
-
- Say each thing once:
|
|
74
|
+
- A section groups things; it never stands in for a card's own head.
|
|
75
|
+
- One act per section, on the right.
|
|
76
|
+
- Say each thing once: the note never repeats a figure the content shows.
|
|
77
|
+
- On a page, sections sit further apart than the things inside them (Seth's North: 56 between sections, 12 under a
|
|
78
|
+
head, 16 between cards): at least 24, a `ws-stack ws-stack--group`, never the 8 of a plain stack.
|
|
65
79
|
|
|
66
80
|
## Source
|
|
67
81
|
|
|
68
|
-
**Derived from**:
|
|
69
|
-
|
|
82
|
+
**Derived from**: Seth's section titles (Fia `301:1725` "Your AI visibility checks" 15 / 22 semibold, 16 to its list;
|
|
83
|
+
Fixes `308:2611` area heading with its count 10 after it on the baseline; Tally `319:3302` side column, a 0.5 px
|
|
84
|
+
rule above every row), North's section head (12 to its content,
|
|
85
|
+
`style1.css` 174 to 180), the 0.5 px divider (D5) and the field fix to the head's gaps (Ignite `surfaces.tsx:69`).
|
|
86
|
+
|
|
87
|
+
## Markup
|
|
88
|
+
|
|
89
|
+
```html
|
|
90
|
+
<section class="ws-section-group" aria-labelledby="sec-website">
|
|
91
|
+
<div class="ws-section-group__head">
|
|
92
|
+
<div class="ws-section-group__words">
|
|
93
|
+
<h2 id="sec-website" class="ws-section-group__title">Website <span class="ws-section-group__count">0 of 2 done</span></h2>
|
|
94
|
+
</div>
|
|
95
|
+
<button type="button" class="ws-btn ws-btn--text">See all</button>
|
|
96
|
+
</div>
|
|
97
|
+
<ul>
|
|
98
|
+
<li class="ws-section-group__row"><span class="ws-row__title">Add alt text to listing photos</span><span class="ws-muted">A few days</span></li>
|
|
99
|
+
</ul>
|
|
100
|
+
</section>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Styles
|
|
104
|
+
|
|
105
|
+
`Section/style.css`; the act is `Button`'s. Tokens: `--ws-text-section`, `--ws-leading-section`, `--ws-text-title`,
|
|
106
|
+
`--ws-leading-title`, `--space-xs-plus`,
|
|
107
|
+
`--ws-text-control`, `--ws-leading-control`, `--space-sm`, `--space-xs-plus`, `--ws-row-h-dense`, `--ws-divider`,
|
|
108
|
+
`--color-text-heading`, `--color-text-muted`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- @dsCard group="Layout" height=
|
|
1
|
+
<!-- @dsCard group="Layout" height=424 -->
|
|
2
2
|
<!doctype html>
|
|
3
3
|
<html>
|
|
4
4
|
<head>
|
|
@@ -8,34 +8,64 @@
|
|
|
8
8
|
<link rel="stylesheet" href="../bundle.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
|
-
<div class="ws-stage
|
|
11
|
+
<div class="ws-stage">
|
|
12
12
|
|
|
13
|
-
<div style="width: 360px; max-width: 100%;">
|
|
13
|
+
<div class="ws-stack" style="width: 360px; max-width: 100%;">
|
|
14
|
+
<span class="ws-muted">A title, a line of context and one act on the title's line</span>
|
|
14
15
|
<section class="ws-section-group" aria-labelledby="sec-1">
|
|
15
16
|
<div class="ws-section-group__head">
|
|
16
17
|
<div class="ws-section-group__words">
|
|
17
18
|
<h2 id="sec-1" class="ws-section-group__title">Leads to call</h2>
|
|
18
|
-
<p class="ws-muted">
|
|
19
|
+
<p class="ws-muted">Waiting since Monday</p>
|
|
19
20
|
</div>
|
|
20
21
|
<button type="button" class="ws-btn ws-btn--text">See all</button>
|
|
21
22
|
</div>
|
|
22
23
|
<ul>
|
|
23
|
-
<li class="ws-section-group__row">
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
</li>
|
|
27
|
-
<li class="ws-section-group__row">
|
|
28
|
-
<span class="ws-row__title">Dana Ortiz</span>
|
|
29
|
-
<span class="ws-muted">Showing booked</span>
|
|
30
|
-
</li>
|
|
31
|
-
<li class="ws-section-group__row">
|
|
32
|
-
<span class="ws-row__title">Jon Park</span>
|
|
33
|
-
<span class="ws-muted">Offer out</span>
|
|
34
|
-
</li>
|
|
24
|
+
<li class="ws-section-group__row"><span class="ws-row__title">Priya Nair</span><span class="ws-muted">New lead</span></li>
|
|
25
|
+
<li class="ws-section-group__row"><span class="ws-row__title">Dana Ortiz</span><span class="ws-muted">Showing booked</span></li>
|
|
26
|
+
<li class="ws-section-group__row"><span class="ws-row__title">Jon Park</span><span class="ws-muted">Offer out</span></li>
|
|
35
27
|
</ul>
|
|
36
28
|
</section>
|
|
37
29
|
</div>
|
|
38
30
|
|
|
31
|
+
<div class="ws-stack" style="width: 360px; max-width: 100%;">
|
|
32
|
+
<span class="ws-muted">Seth's count on the title's line, his 22 / 28 area heading (--area), and a long title that wraps with its act kept beside it; sections sit 24 apart</span>
|
|
33
|
+
<div class="ws-stack ws-stack--group">
|
|
34
|
+
<section class="ws-section-group" aria-labelledby="sec-2">
|
|
35
|
+
<div class="ws-section-group__head">
|
|
36
|
+
<div class="ws-section-group__words">
|
|
37
|
+
<h2 id="sec-2" class="ws-section-group__title">Website <span class="ws-section-group__count">0 of 2 done</span></h2>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
<ul>
|
|
41
|
+
<li class="ws-section-group__row"><span class="ws-row__title">Add alt text to listing photos</span><span class="ws-muted">A few days</span></li>
|
|
42
|
+
<li class="ws-section-group__row"><span class="ws-row__title">Speed up the home page</span><span class="ws-muted">An hour</span></li>
|
|
43
|
+
</ul>
|
|
44
|
+
</section>
|
|
45
|
+
<section class="ws-section-group ws-section-group--area" aria-labelledby="sec-4">
|
|
46
|
+
<div class="ws-section-group__head">
|
|
47
|
+
<div class="ws-section-group__words">
|
|
48
|
+
<h2 id="sec-4" class="ws-section-group__title">Social <span class="ws-section-group__count">1 of 2 done</span></h2>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
<ul>
|
|
52
|
+
<li class="ws-section-group__row"><span class="ws-row__title">Post one listing a week</span><span class="ws-muted">An hour</span></li>
|
|
53
|
+
</ul>
|
|
54
|
+
</section>
|
|
55
|
+
<section class="ws-section-group" aria-labelledby="sec-3">
|
|
56
|
+
<div class="ws-section-group__head">
|
|
57
|
+
<div class="ws-section-group__words">
|
|
58
|
+
<h2 id="sec-3" class="ws-section-group__title">Buyers who opened your last two listing emails</h2>
|
|
59
|
+
</div>
|
|
60
|
+
<button type="button" class="ws-btn ws-btn--text">See all</button>
|
|
61
|
+
</div>
|
|
62
|
+
<ul>
|
|
63
|
+
<li class="ws-section-group__row"><span class="ws-row__title">Sam Okafor</span><span class="ws-muted">Opened both</span></li>
|
|
64
|
+
</ul>
|
|
65
|
+
</section>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
39
69
|
</div>
|
|
40
70
|
</body>
|
|
41
71
|
</html>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/* ---- Section: a group under its heading, Seth's 15 / 22 semibold section title (D6), an optional count on its line, a line
|
|
2
|
+
of context and one act on the right; 12 to the content. (The block is .ws-section-group: .ws-section is the house's
|
|
3
|
+
title words.) ---- */
|
|
4
|
+
.ws-section-group { display: flex; flex-direction: column; gap: var(--space-sm); }
|
|
5
|
+
.ws-section-group__head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: var(--space-xxs) var(--space-sm); }
|
|
6
|
+
.ws-section-group__words { display: flex; flex: 1 1 0; flex-direction: column; gap: var(--space-3xs); min-width: min(100%, var(--space-9xl)); }
|
|
7
|
+
.ws-section-group__title { font-size: var(--ws-text-section); line-height: var(--ws-leading-section); font-weight: 600; letter-spacing: var(--ws-tracking-title); color: var(--color-text-heading); }
|
|
8
|
+
/* A count on the title's line ("0 of 2 done"): control words in muted, 10 after the title, on its baseline. Keep a space
|
|
9
|
+
before it in the markup so the heading reads "Website 0 of 2 done"; the flex gap draws the 10. */
|
|
10
|
+
.ws-section-group__title:has(> .ws-section-group__count) { display: flex; flex-wrap: wrap; align-items: baseline; column-gap: var(--space-xs-plus); }
|
|
11
|
+
/* --area: Seth's area heading over its card (Fixes 308:2611, "Website 0 of 2 done"): the 22 / 28 title step (ws-title),
|
|
12
|
+
its count still 13 / 18 on the baseline, 10 to the card. */
|
|
13
|
+
.ws-section-group--area { gap: var(--space-xs-plus); }
|
|
14
|
+
.ws-section-group--area .ws-section-group__title { font-size: var(--ws-text-title); line-height: var(--ws-leading-title); }
|
|
15
|
+
.ws-section-group__count { font-size: var(--ws-text-control); line-height: var(--ws-leading-control); font-weight: 500; letter-spacing: normal; color: var(--color-text-muted); font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
16
|
+
/* Plain rows under a section: 40 tall, their words on the title's edge, Seth's 0.5 px divider above each one, the first
|
|
17
|
+
included (Tally's side column), full width. */
|
|
18
|
+
.ws-section-group__row { display: flex; align-items: center; justify-content: space-between; gap: var(--space-sm); min-height: var(--ws-row-h-dense); border-top: var(--ws-divider); }
|