@thewhatmatters/wmds 0.2.0 → 0.3.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.
Files changed (134) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/CONSUMING.md +4 -4
  3. package/README.md +3 -3
  4. package/dist/styles.css +1 -1
  5. package/docs/component-contracts.md +1 -1
  6. package/docs/components.md +6 -6
  7. package/docs/exports.json +1 -13
  8. package/docs/patterns/components-avatar--dropdown-row.tsx +1 -1
  9. package/docs/patterns/components-badge--with-avatar.tsx +1 -1
  10. package/docs/patterns/components-button-button--destructive-action.tsx +1 -1
  11. package/docs/patterns/components-button-button--ghost-action.tsx +1 -1
  12. package/docs/patterns/components-button-button--inverse-action.tsx +1 -1
  13. package/docs/patterns/components-button-button--link-render.tsx +1 -1
  14. package/docs/patterns/components-button-button--multi-state-badge.tsx +1 -1
  15. package/docs/patterns/components-button-button--outline-mono.tsx +1 -1
  16. package/docs/patterns/components-button-button--primary-action.tsx +1 -1
  17. package/docs/patterns/components-button-button--row-hug.tsx +1 -1
  18. package/docs/patterns/components-button-button--row-layout.tsx +1 -1
  19. package/docs/patterns/components-button-button--secondary-action.tsx +1 -1
  20. package/docs/patterns/components-button-button--suggestion-pills.tsx +1 -1
  21. package/docs/patterns/components-button-button--with-count.tsx +1 -1
  22. package/docs/patterns/components-button-button--with-icon.tsx +1 -1
  23. package/docs/patterns/components-button-floatingactionbutton--vertical-actions.tsx +1 -1
  24. package/docs/patterns/components-calembed--pattern-skip-in-footer.tsx +1 -1
  25. package/docs/patterns/components-card-card--body-slot-occupancy-history.tsx +1 -1
  26. package/docs/patterns/components-card-card--headerless-media.tsx +1 -1
  27. package/docs/patterns/components-card-card--outlined-layout.tsx +1 -1
  28. package/docs/patterns/components-card-card--pinned-height.tsx +1 -1
  29. package/docs/patterns/components-card-selectablecard--selectable-cards-pattern.tsx +1 -1
  30. package/docs/patterns/components-chart--audience-activity-heatmap.tsx +1 -1
  31. package/docs/patterns/components-chart--cartesian-no-data-gaps.tsx +1 -1
  32. package/docs/patterns/components-chart--occupancy-history-in-card.tsx +1 -1
  33. package/docs/patterns/components-chart--occupancy-in-card.tsx +1 -1
  34. package/docs/patterns/components-chart--post-reach-distribution.tsx +1 -1
  35. package/docs/patterns/components-chart--ranked-audience-breakdown.tsx +1 -1
  36. package/docs/patterns/components-chart--unit-grid-composition.tsx +1 -1
  37. package/docs/patterns/components-chatqa--pattern-qa-with-reply.tsx +1 -1
  38. package/docs/patterns/components-checkbox-checkbox--default.tsx +1 -1
  39. package/docs/patterns/components-checkbox-checkbox--with-description.tsx +1 -1
  40. package/docs/patterns/components-checkbox-checkboxgroup--default.tsx +1 -1
  41. package/docs/patterns/components-dialog--alert-dialog-destructive.tsx +1 -1
  42. package/docs/patterns/components-dialog--default-dialog.tsx +1 -1
  43. package/docs/patterns/components-dialog--form-dialog.tsx +1 -1
  44. package/docs/patterns/components-displaycontrols--page-utilities.tsx +1 -1
  45. package/docs/patterns/components-field--horizontal-input.tsx +1 -1
  46. package/docs/patterns/components-field--horizontal-text-area.tsx +1 -1
  47. package/docs/patterns/components-field--multi-control.tsx +1 -1
  48. package/docs/patterns/components-footerreveal--marketing-hero-pattern.tsx +1 -1
  49. package/docs/patterns/components-footerreveal--marketing-hero-ruled-pattern.tsx +1 -1
  50. package/docs/patterns/components-footerreveal--marketing-hero-with-gallery-intro.tsx +1 -1
  51. package/docs/patterns/components-footerreveal--marketing-page-pattern.tsx +1 -1
  52. package/docs/patterns/components-footerreveal--ruled-grid-footer-pattern.tsx +1 -1
  53. package/docs/patterns/components-footerreveal--sequenced-marketing-hero.tsx +1 -1
  54. package/docs/patterns/components-herointro--two-line-intro.tsx +1 -1
  55. package/docs/patterns/components-herotilestack--marketing-hero-pattern.tsx +1 -1
  56. package/docs/patterns/components-herotilestack--marketing-hero-text-sequence.tsx +1 -1
  57. package/docs/patterns/components-herotilestack--marketing-hero-with-gallery-intro.tsx +1 -1
  58. package/docs/patterns/components-intakeconfirmation--booked-pattern.tsx +1 -1
  59. package/docs/patterns/components-intakeconfirmation--emailed-pattern.tsx +1 -1
  60. package/docs/patterns/components-intakeform--about-you-pattern.tsx +1 -1
  61. package/docs/patterns/components-intakemodal--intake-modal-pattern.tsx +1 -1
  62. package/docs/patterns/components-kbd--command-row.tsx +1 -1
  63. package/docs/patterns/components-kbd--numbered-choices.tsx +1 -1
  64. package/docs/patterns/components-kbd--shortcut.tsx +1 -1
  65. package/docs/patterns/components-moremenu--action-menu.tsx +1 -1
  66. package/docs/patterns/components-moremenu--in-card-header.tsx +1 -1
  67. package/docs/patterns/components-navlist--side-nav-settings.tsx +1 -1
  68. package/docs/patterns/components-pageheader--app-header-pattern.tsx +1 -1
  69. package/docs/patterns/components-pageheader--page-section-header.tsx +1 -1
  70. package/docs/patterns/components-pageheader--toolbar-header.tsx +1 -1
  71. package/docs/patterns/components-panel--end-detail-rail.tsx +1 -1
  72. package/docs/patterns/components-pillgroup--pill-group-pattern.tsx +1 -1
  73. package/docs/patterns/components-promptbar--pattern-marketing-composer.tsx +3 -3
  74. package/docs/patterns/components-promptbar--pattern-prompt-bar.tsx +1 -1
  75. package/docs/patterns/components-radio-radiogroup--default.tsx +1 -1
  76. package/docs/patterns/components-scrollhorizontal--project-gallery-pattern.tsx +1 -1
  77. package/docs/patterns/components-scrollhorizontal--with-intro.tsx +1 -1
  78. package/docs/patterns/components-sheet--bottom-sheet.tsx +1 -1
  79. package/docs/patterns/components-sheet--end-sheet.tsx +1 -1
  80. package/docs/patterns/components-sitenav--brand-and-cta.tsx +1 -1
  81. package/docs/patterns/components-sitenav--centered-links.tsx +1 -1
  82. package/docs/patterns/components-sitenav--compact.tsx +1 -1
  83. package/docs/patterns/components-sitenav--marketing-header.tsx +1 -1
  84. package/docs/patterns/components-sitenav--mega-menu.tsx +1 -1
  85. package/docs/patterns/components-stat--insights-row.tsx +1 -1
  86. package/docs/patterns/components-stepprogress--step-progress-pattern.tsx +1 -1
  87. package/docs/patterns/components-switch--default.tsx +1 -1
  88. package/docs/patterns/components-switch--settings-row.tsx +1 -1
  89. package/docs/patterns/components-tab--settings-pages.tsx +1 -1
  90. package/docs/patterns/components-taskrows--action-details.tsx +1 -1
  91. package/docs/patterns/components-taskrows--capsules.tsx +1 -1
  92. package/docs/patterns/components-taskrows--card-with-status-rows.tsx +1 -1
  93. package/docs/patterns/components-taskrows--controlled-expand.tsx +1 -1
  94. package/docs/patterns/components-taskrows--custom-slots.tsx +1 -1
  95. package/docs/patterns/components-taskrows--status-list.tsx +1 -1
  96. package/docs/patterns/components-taskrows--tag-chips.tsx +1 -1
  97. package/docs/patterns/components-textlink--external-destination.tsx +1 -1
  98. package/docs/patterns/components-textlink--inline-prose.tsx +1 -1
  99. package/docs/patterns/components-textlink--supporting-copy.tsx +1 -1
  100. package/docs/patterns/components-textsequence--default.tsx +1 -1
  101. package/docs/patterns/components-textsequence--reduced-motion.tsx +1 -1
  102. package/docs/patterns/components-textsequence--shapes.tsx +1 -1
  103. package/docs/patterns/components-toast--stacked-notifications.tsx +1 -1
  104. package/docs/patterns/components-tooltip--controlled.tsx +1 -1
  105. package/docs/patterns/components-tooltip--disabled-control.tsx +1 -1
  106. package/docs/patterns/components-tooltip--icon-action.tsx +1 -1
  107. package/docs/patterns/components-tooltip--keyboard-shortcut.tsx +1 -1
  108. package/docs/patterns/components-tooltip--placement.tsx +1 -1
  109. package/docs/patterns/foundations-scroll-fade--horizontal-rail.tsx +1 -1
  110. package/docs/patterns/foundations-scroll-fade--overflowing-list.tsx +1 -1
  111. package/docs/patterns/guides-chart-explorations--comparison-gallery.tsx +1 -1
  112. package/docs/patterns/guides-overlay-flows--notification-preferences.tsx +1 -1
  113. package/docs/patterns/guides-profile-typography--editorial-profile.tsx +1 -1
  114. package/docs/patterns/index.json +1 -153
  115. package/package.json +1 -1
  116. package/docs/patterns/sites-pitchkit-account-settings--account-settings-owner.tsx +0 -265
  117. package/docs/patterns/sites-pitchkit-creator-identity--creator-identity-owner-settings.tsx +0 -154
  118. package/docs/patterns/sites-pitchkit-creator-identity--creator-identity-public.tsx +0 -96
  119. package/docs/patterns/sites-pitchkit-insights-and-kit--creator-insights-loading.tsx +0 -1006
  120. package/docs/patterns/sites-pitchkit-insights-and-kit--creator-insights.tsx +0 -1031
  121. package/docs/patterns/sites-pitchkit-insights-and-kit--insufficient-audience-data.tsx +0 -1015
  122. package/docs/patterns/sites-pitchkit-insights-and-kit--insufficient-reach-and-audience-data.tsx +0 -1017
  123. package/docs/patterns/sites-pitchkit-insights-and-kit--insufficient-reach-data.tsx +0 -1033
  124. package/docs/patterns/sites-pitchkit-insights-and-kit--owner-pitch-kit.tsx +0 -838
  125. package/docs/patterns/sites-pitchkit-insights-and-kit--shareable-pitch-kit.tsx +0 -608
  126. package/docs/patterns/sites-pitchkit-intro--intro-owner.tsx +0 -161
  127. package/docs/patterns/sites-pitchkit-intro--intro-public.tsx +0 -111
  128. package/docs/patterns/sites-pitchkit-past-brands--past-brands-owner.tsx +0 -611
  129. package/docs/patterns/sites-pitchkit-past-brands--past-brands-public.tsx +0 -299
  130. package/docs/patterns/sites-pitchkit-theme-picker--theme-picker-owner.tsx +0 -832
  131. package/docs/patterns/sites-whatmatters-intake--start-a-project-pattern.tsx +0 -234
  132. package/docs/patterns/sites-whatmatters-marketing-landing--marketing-landing.tsx +0 -87
  133. package/docs/patterns/sites-whatmatters-prompt-chat--landing-to-chat.tsx +0 -899
  134. package/docs/patterns/sites-whatmatters-rfp-submitted--rfp-submitted.tsx +0 -302
package/CHANGELOG.md CHANGED
@@ -7,6 +7,16 @@ Every release of `@thewhatmatters/wmds` is listed here, newest first.
7
7
  - **Pasted patterns:** when a release changes a **Pattern — …** story's Show code, it is named under Consumer actions so apps re-copy it.
8
8
  - **How to add an entry** (contributors): add your change to the top entry. If that version is already on npm (`npm view @thewhatmatters/wmds versions`), start a new entry above it and bump `version` in `package.json` to match. `npm run check:changelog` enforces the format.
9
9
 
10
+ ## 0.3.0
11
+
12
+ Storybook no longer mirrors product sites. The **Sites/** section (WhatMatters and PitchKit pages) is removed, and so are its `sites-…` files in `docs/patterns/`. No component, prop, token, or export changed.
13
+
14
+ ### Consumer actions
15
+
16
+ 1. **Pasted Sites patterns are now the app's own code.** If the app pasted any **Sites/WhatMatters/…** or **Sites/PitchKit/…** pattern (for example the ask page, the Start a project intake, or RFP submitted), keep the file and delete its three header lines (`// @thewhatmatters/wmds@…`, `// Storybook: Sites/…`, `// Show code — …`). Until then, `npx wmds-check` reports `pattern-removed` for that file.
17
+ 2. **Skip the 0.2.0 steps that re-copy Sites patterns** if they are still open: the **Sites/** bullets under 0.2.0 step 9, and the re-copy in steps 11, 12, and 13. Make those changes in the app's own files instead: the Button props from step 11, starting the ask page from `q` (step 12), and the RFP `onSubmit` (step 13).
18
+ 3. **Components/PromptBar → Pattern — marketing composer:** its Show code comment no longer names a site component; the code is unchanged. Re-copy it, or update the version in its header line.
19
+
10
20
  ## 0.2.0
11
21
 
12
22
  First release on npm. Earlier builds were installed from git commits and all reported `0.1.0`.
package/CONSUMING.md CHANGED
@@ -25,7 +25,7 @@ import "@thewhatmatters/wmds/styles.css";
25
25
  </span>
26
26
  ```
27
27
 
28
- Find a component A–Z under **Components/** (or by category on **Components → Overview**), read **Guides/** for cross-component choices, and use **Sites/** for approved pages and flows (**Sites/WhatMatters/…**, **Sites/PitchKit/…**) — copy the named **Pattern** story JSX and state wiring; do not re-style with utilities. Sites and Guides pages are not exported from the package.
28
+ Find a component A–Z under **Components/** (or by category on **Components → Overview**), read **Guides/** for cross-component choices — copy the named **Pattern** story JSX and state wiring; do not re-style with utilities. Guides pages are not exported from the package. Product pages and flows are each app's own code; WMDS Storybook does not mirror them.
29
29
 
30
30
  **Show code is the product contract.** Pattern story **Show code** (`storyCopySource`) is the drop-in implementation for consuming apps. It must stay a literal mirror of the live canvas — same layout, chrome, spacing, and typography. Copy Show code; do not choose between the Storybook iframe and an older freeze, and do not reconstruct the page from Storybook-only example modules (`*Example.tsx`, `*Styles.ts`). When the canvas changes, Show code is updated to match; apps re-copy the new freeze.
31
31
 
@@ -264,7 +264,7 @@ import {
264
264
  | `Chip` | `size`, `value`, `selected`, `onRemove`, `icon`, `count`, `readOnly` | Components/Chip — use `ChipFilterGroup` for multi-select filters |
265
265
  | `Input` | `label`, `description`, `status`, `message`, `loading`, `endBadge`, `icon`, `size` | Components/Input — pill shell; Required via `endBadge={<Badge>…</Badge>}` |
266
266
  | `Search` | `size`, `placeholder`, `onSubmit` | Components/Search — inline input + button row |
267
- | `PromptBar` | `value`, `onValueChange`, `onSend`, `placeholder` (default Ask anything…) | Components/PromptBar — **Pattern — prompt bar**. Wide pill, inline field (one line empty, up to 3 lines, then scroll), inset **IconButton** send. Muted until there is text, then `--color-brand` (`#011272`). Enter sends. Page pattern: **Sites/WhatMatters/Prompt chat → Pattern — landing to chat** (motion into a thread that keeps growing on a narrowed page grid, `--grid-max: 40rem`: the page shell is `h-[100svh]` and the thread scrolls inside that column when it is taller than the viewport, and reserves the composer's measured height plus the space under the pill, including while a reply is still growing, so the reply and its follow-ups finish above the composer, follow-ups and **PromptBar** share that column and the bar stays pinned; a follow-up appends in the same thread; a collapsed Thought-for timer (expandable while thinking) as a fleeting supporting muted status that leaves when the reply starts, then a word stream with one **TextLink** and hover-revealed **IconButton** actions; chat reuses **SiteNav**; the brand mark returns home). Voice and attachments are not part of this version. |
267
+ | `PromptBar` | `value`, `onValueChange`, `onSend`, `placeholder` (default Ask anything…) | Components/PromptBar — **Pattern — prompt bar**. Wide pill, inline field (one line empty, up to 3 lines, then scroll), inset **IconButton** send. Muted until there is text, then `--color-brand` (`#011272`). Enter sends. On the marketing homepage: **Pattern — marketing composer**, which hands off to the app's ask page (`/ask?q=…`). Voice and attachments are not part of this version. |
268
268
  | `Card` | `variant`, `shape`, `padding` | Components/Card/Card — `Card.Header` (`start` | `end`), **`Card.Body` slot** (no default fill), `Card.Footer` |
269
269
  | `Accordion` | `variant`, `Accordion.Item` `leading` / `label` / `trailing` / `open` | Components/Accordion — FAQ, settings sections |
270
270
  | `TaskRows` | `variant`, `status`, `meta`, `detailsLayout`, `TaskRows.Detail` | Components/TaskRows — **Pattern — status rows**, **capsules**, **action details** (`Detail variant="button"`), **tag chips** (`Chip readOnly size="sm"`), detail lines (`Detail` + `onPress` → `Button layout="row"`) |
@@ -276,9 +276,9 @@ import {
276
276
  | `HeroTileStack` | `tiles`, `tileSize`, `strength`, `velocityFactor`, `maxVertical`, `spring` | Components/HeroTileStack — **Pattern — marketing hero**. Square tiles, `--hero-tile-size`, max `tileSize` (400px), tighter pile below `md`. Scatter distances scale with the painted tile. Place **SiteNav** above the hero; the hero section is `min-h-[calc(100svh-var(--site-nav-height))]`, `shrink-0`, and `justify-center-safe`. It centers when the copy fits. When the copy is taller, the section grows and the content starts below the nav with the section's top padding. **HeroIntro** is the `h1` (`lead` + children) on centered `type-display-2` at normal weight and display-2 leading, the same size and line-height as the gallery statement. The first sentence wraps, including from `md`; the rest always starts on the next line. The sequenced hero h1 is only “An Austin, TX studio specializing in brand and product design.” (“Austin,” and “TX” stay together). A rock **RiveHand** sits `inline` immediately after “TX”, inside that nowrap phrase (drawn hand about 1.15em, centered, `aria-hidden`). That heading has no second sentence and no circle or pill. The gallery statement places the point hand after “is a first impression”. It sits on `grid-page` (same `--grid-max`, margin, gap, and column count as the guides): columns 4–9 from `lg` (`lg:col-start-4 lg:col-end-10`, 6 of 12 columns, centered), full width of that page grid below `lg`. The tile fan is the last element. Pointer over the fan springs tiles left and right away from it; a quick move adds a small vertical nudge that settles when the pointer slows; leave springs them back. Default `strength` (`120`) stays near the stack — raise it for a wider scatter. `velocityFactor` (`0.02`) and `maxVertical` (`24`) tune that nudge. Reduced motion stays on the resting fan. Coarse pointers get one gentle tap scatter, then a spring back. |
277
277
  | `ScrollHorizontal` | `items` (`id`, `label`, optional `color`), `heading` (`sr-only` while pinned, visible when motion is reduced; omitted when `intro` is set), `intro` (`ScrollHorizontal.Intro`: `eyebrow`, `statement`, optional `action` — `{ label, onClick }` for a modal button or `{ label, href }` for Button `render={<a href />}`), `expandLast` (default false), `expanded`, `className` (layout only, root) | Components/ScrollHorizontal — **Pattern — project gallery**. Also under the hero in **HeroTileStack** and **FooterReveal** **Pattern — marketing hero** (`expandLast`). Each card is a solid token-color placeholder; `label` is the accessible name (`sr-only`). `heading` names the section and stays `sr-only` on the pinned window. `intro` (**Pattern — gallery intro**, and the marketing-hero-with-gallery-intro stories) is the first panel: **Badge** label pill (neutral, the category pill), `type-display-2` statement through **TextSequence** (normal weight, once when the panel scrolls into view), **Button** `role="secondary"` labeled Start a project (no className, no icon). Pass `action={{ label: "Start a project", onClick }}` to open the project modal, or `href` when the action navigates. **FooterReveal → Pattern — marketing hero ruled grid** is the full page: sequenced hero, this intro, `expandLast`, and **FooterReveal.Ruled**. The statement is “Every screen is a first impression and we make yours the one they remember.” with an asterisk after screen, a point **RiveHand** after impression, and a diamond after yours. The eyebrow names the section. The `h2` keeps the plain sentence. At rest the panel's left edge is the page-grid content start; scroll carries it off with the tiles. Tiles follow to the right. Reduced motion stacks the intro above the row. `expandLast` still parks the last card on center before the grow. `300svh` track (`shrink-0` so a flex parent keeps that height), sticky `h-svh` window, translate from the first card centered to the last. `expandLast` uses a `400svh` track: same horizontal distance, then the last tile grows (`clip-path`) to fill the window edge to edge with radius 0 and scrolls away. `expanded` is the slot on that tile. 400×500 / `gap-8` from `sm`; 280×350 / `gap-4` below `sm`; `rounded-xl`. Reduced motion is a native horizontal scroller (`py-12`), including `MotionConfig` `reducedMotion="always"`; with `expandLast` the last tile follows as a static `h-svh` section. The section ends on that tile. **FooterReveal → Pattern — marketing hero** sets `!py-0` on the guide `grid-page` so the tile meets the footer with no page-background strip. |
278
278
  | `RiveHand` | `hand` (`point` \| `rock`), `size`, `active`, `idle` (default true), `entrance` (`slide-up` \| `grow` \| `none`, default `none`), `className`, `aria-hidden` | Components/HeroTileStack — **Pattern — marketing hero**. `point` is artboard `31_Cigarette` (cigarette removed). `rock` is `29_Rock`. `handFill` is `--color-surface` (fallback `--color-background-surface`; white in light mode). `outline` is `--color-brand` (`#011272` in both themes; hardcoded fallback `#011272`). `inline` sizes the canvas past the artboard padding so the drawn hand is about 1.15em, the drawn hand is centered on the line, and the line box does not grow. Inside a TextSequence the slot pops on the beat halfway between the words beside it, with the same scale, rotation, and `back.out(1.8)` ease as the circle and pill. Idle starts after that pop. The sequenced hero places the rock hand immediately after “TX”, inside the same nowrap phrase. The gallery statement places the point hand after “is a first impression”. `entrance="none"`. `idle` holds `Boolean 1` for 1.1s, then waits a random 1–2s before the next pulse, per hand, while the tab is visible and the sized hand box is in view. Reduced motion draws one static frame once that box has size, then pauses. The sequence pop and idle timers stay off. SSR and hydration render that resting pose; the entrance starts after mount only when motion is allowed. `npm install @rive-app/react-canvas`. Serve `public/rive/interactive-icon-set.riv` at `/rive/interactive-icon-set.riv` and `rive.wasm` at `/rive/rive.wasm`. The pattern file starts with `"use client"`. CC BY 4.0, Silvia Sguotti and Gabriele Montinaro. |
279
- | `ConfettiProvider` | `useConfettiOnMount()`, `useConfetti().fire()`, `origin`, `confettiDefaultColors` | Components/Confetti — playground. **Sites/WhatMatters/RFP submitted → Pattern — RFP submitted**. Fire on the confirmation surface after the async action resolves, not on the submit click. `fire()` does nothing under reduced motion. |
279
+ | `ConfettiProvider` | `useConfettiOnMount()`, `useConfetti().fire()`, `origin`, `confettiDefaultColors` | Components/Confetti — playground. **IntakeConfirmation** is the reference composition. Fire on the confirmation surface after the async action resolves, not on the submit click. `fire()` does nothing under reduced motion. |
280
280
 
281
- Copy flow patterns from **Sites/** in Storybook when they ship. See **`src/package.manifest.ts`** for the export contract.
281
+ See **`src/package.manifest.ts`** for the export contract.
282
282
 
283
283
  ### Cluster scale in detail rails
284
284
 
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # WMDS — WhatMatters Design System
2
2
 
3
- Tailwind v4 theme + **pattern-first** Storybook catalog. **Storybook is canonical** — prescribed components and Sites patterns, not utility-class soup.
3
+ Tailwind v4 theme + **pattern-first** Storybook catalog. **Storybook is canonical** — prescribed components and their patterns, not utility-class soup.
4
4
 
5
5
  ## Stack
6
6
 
@@ -52,11 +52,11 @@ npm run validate:composition # molecules/organisms must compose atoms (CI)
52
52
 
53
53
  The list is `src/package.manifest.ts`. `npm run build` fails when it and `src/index.ts` disagree.
54
54
 
55
- **Storybook-only:** **Sites/** (pages and flows per product — WhatMatters, PitchKit) and **Guides/** (cross-component guidance) — page-level compositions for copy-paste; not package exports.
55
+ **Storybook-only:** **Guides/** (cross-component guidance) — page-level compositions for copy-paste; not package exports. Product pages live in each product's app.
56
56
 
57
57
  **Motion:** CSS tokens for simple transitions; [`motion/react`](https://motion.dev/docs/react) for gestures, layout, and enter/exit. Helpers in **`src/lib/motion.ts`** (reads Theme CSS vars).
58
58
 
59
- **Architecture:** Theme → lib → Atoms → Molecules → Organisms → Sites / Guides. **Pattern-first** for consumers ([ADR-0004](docs/adr/0004-pattern-first-not-utility-first.md)). **Mobile-first** on all tiers ([ADR-0003](docs/adr/0003-responsive-mobile-first.md)). See ADR-0001, ADR-0002.
59
+ **Architecture:** Theme → lib → Atoms → Molecules → Organisms → Guides. **Pattern-first** for consumers ([ADR-0004](docs/adr/0004-pattern-first-not-utility-first.md)). **Mobile-first** on all tiers ([ADR-0003](docs/adr/0003-responsive-mobile-first.md)). See ADR-0001, ADR-0002.
60
60
 
61
61
  ## Paper
62
62