@equal-experts/kuat-vue 0.15.1 → 0.15.2

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 (22) hide show
  1. package/agent-docs/AGENTS.md +1 -1
  2. package/agent-docs/README.md +1 -1
  3. package/agent-docs/external/kuat-agent-rules/reference/design-language/borders.md +49 -36
  4. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/emails.md +97 -34
  5. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/design.md +174 -3
  6. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/emails.md +98 -32
  7. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/figma-build-checklist.md +13 -0
  8. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/README.md +4 -0
  9. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/browse-and-filter.md +226 -0
  10. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/complete-a-form.md +1 -1
  11. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/dashboard.md +14 -53
  12. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/detail-page.md +196 -0
  13. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/give-feedback-on-an-action.md +184 -0
  14. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/section-hub.md +174 -0
  15. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/sign-in.md +1 -1
  16. package/agent-docs/manifest.json +3 -3
  17. package/agent-docs/rules/LOADING-consumer.md +1 -1
  18. package/dist/{AlertDialogTrigger.vue_vue_type_script_setup_true_lang-DosgAcSM.js → AlertDialogTrigger.vue_vue_type_script_setup_true_lang-Ccs_lGKx.js} +1 -1
  19. package/dist/alert-dialog.js +1 -1
  20. package/dist/index.js +1 -1
  21. package/dist/style.css +1 -1
  22. package/package.json +1 -1
@@ -1,65 +1,131 @@
1
1
  # Product Email Rules
2
2
 
3
- Guidelines for Equal Experts transactional and product-related emails.
3
+ Guidelines for Equal Experts transactional and system emails sent from web applications.
4
4
 
5
5
  ---
6
6
 
7
7
  ## Overview
8
8
 
9
- Product emails are transactional communications sent from web applications, including confirmations, notifications, and system messages.
9
+ Product emails are triggered by something the user did or something the system needs to tell them: confirmations, notifications, and system messages. The reader didn't ask for this specific message, but they are expecting the application to send it — the bar is trust and clarity, not persuasion.
10
10
 
11
11
  ---
12
12
 
13
13
  ## Key Principles
14
14
 
15
- 1. **Informative** - Provide necessary information clearly
16
- 2. **Actionable** - Include clear next steps when needed
17
- 3. **Timely** - Send at the right moment
18
- 4. **Concise** - Respect user's time
15
+ 1. **Clean and content-first** — minimal decoration; the message leads and design supports it. Follow the design system's [clarity principle](../../design-language/design-language.md#4-clarity): never decorate at the expense of getting the information across.
16
+ 2. **Trustworthy** instantly recognisable as coming from the product, and clear about exactly which service sent it — no surprises in sender, subject, or content.
17
+ 3. **Single-purpose** one transaction, one message. Don't fold marketing content into a transactional email.
18
+ 4. **Timely** sent as close to the triggering event as the system allows.
19
+ 5. **Actionable** — the reader knows what happened, whether they need to do anything, and how.
20
+ 6. **Accessible** — works with images blocked, with a screen reader, and at 200% zoom.
19
21
 
20
22
  ---
21
23
 
22
24
  ## Email Types
23
25
 
24
- - **Confirmation emails** - Account created, payment received
25
- - **Notification emails** - New activity, status changes
26
- - **System emails** - Password reset, security alerts
27
- - **Digest emails** - Summary of activity
26
+ | Type | Examples |
27
+ |------|----------|
28
+ | Confirmation | Account created, payment received, booking made |
29
+ | Notification | New activity, status change, mention or assignment |
30
+ | System / security | Password reset, email verification, security alert, new-device sign-in |
31
+ | Digest | Periodic roll-up of activity |
32
+
33
+ ---
34
+
35
+ ## Design Guidelines
36
+
37
+ ### Layout
38
+
39
+ - Content-first: strip the design back to what the message needs. No decorative imagery, banners, or flourishes competing with the information itself.
40
+ - Single column, mobile-first, roughly 600–640px wide.
41
+ - Generous whitespace between sections — follow the [spacing](../../design-language/spacing.md) scale.
42
+ - One primary CTA. Use a secondary text link only when a genuine second action exists (e.g. "or view your account").
43
+
44
+ ### Colour
45
+
46
+ - Use brand [colour](../../design-language/colours.md) roles, not raw hex values: primary for the CTA, `--destructive` for error/security-alert framing.
47
+ - Never rely on colour alone to signal status — pair with wording ("Error:", "Action needed") as described in [accessibility](../../accessibility/accessibility.md#colour-usage).
48
+ - Avoid full-colour backgrounds behind body copy; they don't survive client dark-mode inversion reliably. Keep the body on a light background with a small brand accent (header bar, logo lockup).
49
+
50
+ ### Typography
51
+
52
+ - Use the brand typeface with a web-safe fallback stack — many email clients can't load custom webfonts. See [typography](../../design-language/typography.md).
53
+ - Minimum 14–16px body text, 1.5 line height, per [accessibility](../../accessibility/accessibility.md#typography-accessibility).
54
+
55
+ ### Imagery and logo
56
+
57
+ - Small header logo per [logo guidelines](../../brand/logo.md).
58
+ - Alt text is mandatory on every image. Many clients block images by default, so never put essential information (amounts, dates, codes) only in an image — set it as live text.
59
+ - Use live HTML text for buttons and headlines, not text baked into an image.
60
+
61
+ ### Service identity
62
+
63
+ Kuat covers many EE-built services, so the reader needs to know at a glance which one sent this email — particularly if they use more than one. That identification doesn't have to sit in the main header lockup: a small label near the header (e.g. "Timesheets", "Expenses") or a clear line in the footer ("This email was sent by [Service], part of Equal Experts") both work. Pick one clear place for it — don't rely on the sender address alone, since many clients hide or truncate it by default.
64
+
65
+ ### Buttons / CTA
66
+
67
+ - One primary CTA: filled, high-contrast, minimum 44×44px tap target, live text (a "bulletproof" button, not an image).
68
+ - Sentence case, verb-led label — see [buttons](../../content/formatting.md#buttons).
69
+
70
+ ### Footer
71
+
72
+ - Recognisable sender name, the sending service named per [service identity](#service-identity) above, and a way to reach support.
73
+ - If the email carries any promotional content alongside the transactional message, it needs an unsubscribe/preferences link and the same legal footer as a [marketing email](../web-marketing/emails.md#footer-legalcompliance-minimum) — keep pure transactional email free of that content instead.
28
74
 
29
75
  ---
30
76
 
31
77
  ## Content Guidelines
32
78
 
33
- Follow [content foundations](../../content/writing-style.md) and [product content](./content/product-content.md) for writing style.
79
+ Follow [writing style](../../content/writing-style.md) and [formatting](../../content/formatting.md) for tone, voice, and conventions.
80
+
81
+ ### Subject line
82
+
83
+ - Name the specific outcome, not a generic label: "Your password has been reset", not "Notification".
84
+ - Include identifying details where they help the reader confirm it's theirs (order number, invoice number).
85
+ - No marketing language, hype, or artificial urgency in a system email.
86
+
87
+ ### Preheader
88
+
89
+ - Extend the subject with the next useful detail; don't waste it on boilerplate.
90
+
91
+ ### Body
92
+
93
+ - Lead with the outcome or status — skip a greeting preamble.
94
+ - State what happened, why the reader is getting this email, and what to do next (or that nothing is needed).
95
+ - For security-sensitive emails: state any expiry window, and reassure the reader with next steps if they didn't request the action.
96
+ - Use real data the reader will recognise (their name, order number); don't personalise with data you don't actually have.
97
+ - Short paragraphs, one idea each, written for a first-read scan.
98
+
99
+ ---
34
100
 
35
- ### Subject Lines
36
- - Be specific about the content
37
- - Include relevant details (order number, etc.)
38
- - Keep concise
101
+ ## Common Scenarios
39
102
 
40
- ### Body Content
41
- - Lead with the most important information
42
- - Include relevant details
43
- - Provide clear next steps
44
- - Link to the application for actions
103
+ | Scenario | Must include | Tone |
104
+ |----------|---------------|------|
105
+ | **Password reset** | Reset link/button, expiry window, "didn't request this?" reassurance and next step | Calm, reassuring, no urgency beyond the real expiry |
106
+ | **Welcome / account activation** | What the account gives access to, the activation action, a first next step | Warm, brief, sets expectations for what's next |
107
+ | **Payment / booking confirmation** | What was purchased/booked, amount, date/reference, what happens next | Clear, itemised, confidence-building |
108
+ | **Activity notification** | What happened, who/what triggered it, link to view in the product | Brief, factual, one glance should be enough |
109
+ | **Security alert** | What was detected, when, device/location if known, how to secure the account if it wasn't them | Direct, non-alarmist, action-first |
110
+ | **Digest / summary** | Time period covered, the handful of most relevant items, link to see more | Scannable, prioritised — not a full activity log |
45
111
 
46
112
  ---
47
113
 
48
- ## To Be Defined
114
+ ## Accessibility Checklist
49
115
 
50
- - Email template designs
51
- - Header and footer specifications
52
- - Logo placement and sizing
53
- - Color usage in transactional emails
54
- - Typography for email clients
55
- - CTA button styling
56
- - Mobile-first design requirements
57
- - Accessibility requirements
116
+ - Alt text on every image; decorative images marked as such.
117
+ - Colour contrast meets [accessibility](../../accessibility/accessibility.md#colour-contrast) minimums; status never conveyed by colour alone.
118
+ - All critical information and CTAs exist as live text, not images.
119
+ - Semantic HTML structure (proper headings, real buttons/links) so screen readers and layout tables (marked `role="presentation"`) don't confuse assistive tech.
120
+ - A plain-text version accompanies the HTML email.
121
+ - No auto-playing or flashing content.
58
122
 
59
123
  ---
60
124
 
61
125
  ## Related Documentation
62
126
 
63
- - [Reference home](../../README.md) - Brand and design language
64
- - [Product Content](./content/product-content.md) - UX writing guidelines
65
- - [Marketing Emails](../web-marketing/emails.md) - Marketing email guidelines
127
+ - [Reference home](../../README.md) brand and design language
128
+ - [Writing style](../../content/writing-style.md) · [Formatting](../../content/formatting.md) copy conventions
129
+ - [Accessibility](../../accessibility/accessibility.md) · [Web-product accessibility](./accessibility.md) technical implementation
130
+ - [Colours](../../design-language/colours.md) · [Typography](../../design-language/typography.md)
131
+ - [Marketing emails](../web-marketing/emails.md) — for the compliance footer required once any promotional content is present
@@ -0,0 +1,13 @@
1
+ # Figma Build Verification
2
+
3
+ Figma builds are verified against a procedure, not a passive reference — the checklist itself lives
4
+ with the skill that runs it: `skills/create-design/figma-build-checklist.md`.
5
+
6
+ That checklist covers the design-system context gate (Kuat vs. a different client's own system),
7
+ live component/variable discovery, token binding, component fidelity, and a pre-handoff self-audit.
8
+
9
+ ## Related
10
+
11
+ - [Product Design](./design.md) - Kuat layout templates and regions
12
+ - [Component Decision Tree](./component-decision-tree.md) - Kuat-specific component selection
13
+ - [Patterns](./patterns/) - page-type patterns Figma builds should match
@@ -10,6 +10,8 @@ web-product implementation live together in one document.
10
10
  |---------|-----|-------------|
11
11
  | [Sign in](./sign-in.md) | Login, registration, password flows, MFA | Single column |
12
12
  | [Complete a form](./complete-a-form.md) | Settings, multi-step forms, data entry | Varies |
13
+ | [Browse and filter](./browse-and-filter.md) | Record lists, directories, search results | Sidebar navigation |
14
+ | [Know the outcome of their action](./give-feedback-on-an-action.md) | Post-action feedback: confirmations, errors, toasts, system status | Varies |
13
15
 
14
16
  ## Pages
15
17
 
@@ -17,3 +19,5 @@ web-product implementation live together in one document.
17
19
  |---------|-----|-------------|
18
20
  | [Dashboard](./dashboard.md) | Analytics, data tables, metrics, reporting | Sidebar navigation |
19
21
  | [Documentation](./documentation.md) | Docs sites, knowledge bases, API reference | Sidebar + split |
22
+ | [Section hub](./section-hub.md) | Category landing pages, navigation hubs | Sidebar navigation |
23
+ | [Detail page](./detail-page.md) | Profiles, business units, single-record views | Sidebar navigation |
@@ -0,0 +1,226 @@
1
+ # Browse and filter
2
+
3
+ **User goal:** Find a specific item — or a small relevant subset — inside a larger collection, by
4
+ narrowing with search terms and filters rather than scanning everything.
5
+
6
+ > **Pattern:** *Help users to…* · single-medium (web-product) — concept and implementation together.
7
+ > Covers record lists, admin directories, search results, and any table/list fronted by search and
8
+ > filter controls.
9
+
10
+ ## Context
11
+
12
+ Users arrive with a question ("which of these match?") rather than a fixed target. They want to narrow
13
+ a large set quickly, understand how many results their filters produced, refine without losing their
14
+ place, and move from a result straight into the record itself.
15
+
16
+ ## Principles
17
+
18
+ | Principle | Implementation |
19
+ |-----------|-----------------|
20
+ | Filters are visible, not buried | Show active filters as removable chips, not just inside a menu |
21
+ | Results confirm the query | Show a result count alongside the applied filters |
22
+ | Narrowing is reversible | "Clear filters" always available; query state survives back/forward |
23
+ | No dead ends | Empty result sets explain why and offer a way out |
24
+
25
+ Success shows up as: time to find a specific record, filter usage patterns, zero-result-query rate, and
26
+ click-through rate from result to detail.
27
+
28
+ ## Solution in web-product
29
+
30
+ ### Layout
31
+
32
+ **Base Layout:** Sidebar Navigation (or Single Column full-width, for a standalone search page)
33
+
34
+ #### Structure
35
+
36
+ ```
37
+ ┌──────┬──────────────────────────────────┐
38
+ │ │ Header: Title + Actions │
39
+ │ Side ├──────────────────────────────────┤
40
+ │ bar │ Search + Filter Bar │
41
+ │ │ [Search input] [Filter▼][Filter▼]│
42
+ │ │ Active filters: [Tag ×][Tag ×] │
43
+ │ ├──────────────────────────────────┤
44
+ │ │ Results count: "128 results" │
45
+ │ ├──────────────────────────────────┤
46
+ │ │ ┌─────────────────────────────┐ │
47
+ │ │ │ │ │
48
+ │ │ │ Results Table / List │ │
49
+ │ │ │ (scrollable) │ │
50
+ │ │ │ │ │
51
+ │ │ └─────────────────────────────┘ │
52
+ │ ├──────────────────────────────────┤
53
+ │ │ Pagination │
54
+ └──────┴──────────────────────────────────┘
55
+ ```
56
+
57
+ For 10+ filter dimensions, move filters into a left-hand panel inside the content area instead of a bar:
58
+
59
+ ```
60
+ ┌──────┬────────┬─────────────────────────┐
61
+ │ │ Filter │ Header: Title + Actions │
62
+ │ Side │ Panel ├─────────────────────────┤
63
+ │ bar │ │ Results count │
64
+ │ │ [ ] A ├─────────────────────────┤
65
+ │ │ [ ] B │ Results Table / List │
66
+ │ │ [ ] C │ (scrollable) │
67
+ │ │ Apply ├─────────────────────────┤
68
+ │ │ Clear │ Pagination │
69
+ └──────┴────────┴─────────────────────────┘
70
+ ```
71
+
72
+ #### Specifications
73
+
74
+ | Element | Value |
75
+ |---------|-------|
76
+ | Sidebar width | 240-280px (collapsible to 64px) |
77
+ | Filter panel width | 240-280px, when used |
78
+ | Content padding | 24-32px |
79
+ | Filter bar height | 48-56px |
80
+
81
+ ### Design
82
+
83
+ #### Colour Tokens
84
+
85
+ | Element | Token |
86
+ |---------|-------|
87
+ | Filter bar background | `bg-muted/50` or transparent |
88
+ | Active filter chip | `bg-secondary`, `text-secondary-foreground` |
89
+ | Results table | `bg-card`, `border` |
90
+ | Result count text | `text-sm text-muted-foreground` |
91
+
92
+ #### Filter Bar Pattern
93
+
94
+ ```
95
+ ┌─────────────────────────────────────────────────────┐
96
+ │ [Search...] [Category ▼] [Status ▼] [Clear all] │
97
+ └─────────────────────────────────────────────────────┘
98
+ ```
99
+
100
+ - Search input leftmost
101
+ - Dropdown/select filters follow, left to right in priority order
102
+ - "Clear all" right-aligned, shown only when a filter is active
103
+
104
+ #### Filter Panel Pattern (10+ options)
105
+
106
+ - Collapsible sections per filter group
107
+ - Checkbox groups, range sliders as needed
108
+ - "Apply" and "Clear" actions pinned at the bottom of the panel
109
+
110
+ #### Results Table/List Pattern
111
+
112
+ | Element | Implementation |
113
+ |---------|-----------------|
114
+ | Sortable columns | Click header to sort, show arrow direction |
115
+ | Row selection | Checkbox in first column, when bulk actions exist |
116
+ | Row click target | Whole row navigates to detail — see [detail page](./detail-page.md) |
117
+ | Row actions | Overflow menu or icon buttons, right-aligned |
118
+ | Pagination | Bottom of table, with a page-size selector |
119
+ | List view (alternative to table) | Card-per-row, for records with more visual content (avatar, thumbnail) |
120
+
121
+ ### Content
122
+
123
+ #### Active Filter Chips
124
+
125
+ **Structure:** Filter label + value, with a remove (×) affordance.
126
+
127
+ **Example:** `Status: Active ×` `Region: EMEA ×`
128
+
129
+ #### Result Count
130
+
131
+ | Scenario | Message |
132
+ |----------|---------|
133
+ | Results found | "128 results" |
134
+ | Single result | "1 result" |
135
+ | Filtered | "12 results for "database migration" in Engineering" |
136
+
137
+ #### Empty States
138
+
139
+ | Scenario | Message |
140
+ |----------|---------|
141
+ | No results for query | "No results match your filters" + "Clear filters" button |
142
+ | No records exist yet | "No [records] yet" + guidance to create the first one |
143
+
144
+ #### Loading States
145
+
146
+ - Filter bar stays interactive while results load
147
+ - Table: 5-10 skeleton rows
148
+ - Show a loading indicator on re-query; never swap in stale results silently
149
+
150
+ ### Accessibility
151
+
152
+ **Base requirements:** See [accessibility foundations](../../../accessibility/accessibility.md) and
153
+ [web accessibility](../accessibility.md)
154
+
155
+ **Scenario-specific:**
156
+
157
+ | Requirement | Implementation |
158
+ |--------------|------------------|
159
+ | Filter state announced | Screen reader announces the result count after each filter change (`aria-live`) |
160
+ | Keyboard filter removal | Chips removable via keyboard (Delete/Backspace when focused, or a focusable × button) |
161
+ | Table semantics | Use a native `<table>` with `<th scope="col">`; never a div grid for tabular data |
162
+ | Focus order | Search → filters → result count → table → pagination |
163
+
164
+ ### Implementation
165
+
166
+ #### State Management
167
+
168
+ | State | Handling |
169
+ |-------|----------|
170
+ | Loading | Show skeleton rows, keep filters interactive |
171
+ | Error | Show error message with retry, preserve entered filters |
172
+ | Empty (no matches) | Contextual empty state with "Clear filters" |
173
+ | Empty (no records) | Contextual empty state with a create action |
174
+
175
+ #### Responsive Behaviour
176
+
177
+ | Breakpoint | Filter bar | Filter panel | Table |
178
+ |------------|-------------|----------------|-------|
179
+ | Mobile | Collapses to a single "Filters" button opening a sheet | Sheet/drawer | Card view or horizontal scroll |
180
+ | Tablet | Wraps to two rows | Collapsible, default collapsed | Horizontal scroll |
181
+ | Desktop | Single row | Persistent | Full table |
182
+
183
+ ## Best Practices
184
+
185
+ ### Do's
186
+
187
+ 1. **Show active filters as chips** - Users shouldn't have to reopen a menu to see what's applied
188
+ 2. **Confirm the result count** - Alongside the filters that produced it
189
+ 3. **Preserve query state** - In the URL, so results are shareable and survive back/forward
190
+ 4. **Debounce search input** - Query as the user types, without firing on every keystroke
191
+
192
+ ### Don'ts
193
+
194
+ 1. **Don't hide active filters** - Inside a closed dropdown with no visible indicator
195
+ 2. **Don't reset filters** - On pagination or sort
196
+ 3. **Don't block the whole page** - While results reload, only the table region should show loading
197
+
198
+ ### Common Mistakes
199
+
200
+ | Mistake | Solution |
201
+ |---------|----------|
202
+ | Filters and results feel disconnected | Show result count next to active filters |
203
+ | Losing place after navigating back | Persist filters and page in the URL |
204
+ | No indication a query is slow | Add a loading indicator on the results region |
205
+
206
+ ### Edge Cases
207
+
208
+ | Case | Handling |
209
+ |------|----------|
210
+ | Zero results | Explain why, offer "Clear filters" |
211
+ | Very large result sets | Paginate or virtualise; never render all rows |
212
+ | Ambiguous search term | Show "Did you mean…" or broaden automatically with a note |
213
+
214
+ ## Examples
215
+
216
+ The sidebar-navigation frame above is the canonical instance: a search-and-filter bar above a scrollable
217
+ results table, with pagination beneath. [Dashboard](./dashboard.md)'s data-table variant is this pattern
218
+ applied inside a metrics-first page — same filter bar and table, reached from a dashboard rather than a
219
+ standalone directory.
220
+
221
+ ## Related
222
+
223
+ - [Product Design](../design.md) - Sidebar Navigation layout
224
+ - [Dashboard](./dashboard.md) - Metrics-first pages that also use this pattern's table/filter structure
225
+ - [Detail page](./detail-page.md) - Where a result row leads
226
+ - [Accessibility foundations](../../../accessibility/accessibility.md) - Colour and contrast
@@ -89,7 +89,7 @@ Success shows up as: form completion rate, time to complete, error rate and reco
89
89
  | Input border | `border-input` |
90
90
  | Input focus | `ring-ring` |
91
91
  | Error state | `border-destructive`, `text-destructive` |
92
- | Success indicator | `text-green-600` |
92
+ | Success indicator | `text-success` |
93
93
 
94
94
  #### Typography
95
95
 
@@ -53,24 +53,12 @@ Dashboards benefit from persistent navigation and maximum content width.
53
53
  └──────┴──────────────────────────────────┘
54
54
  ```
55
55
 
56
- #### Data Table Dashboard Structure
56
+ #### Data Table Variant
57
57
 
58
- ```
59
- ┌──────┬──────────────────────────────────┐
60
- │ │ Header: Title + Actions │
61
- Side ├──────────────────────────────────┤
62
- │ bar │ Filters Bar │
63
- │ ├──────────────────────────────────┤
64
- │ │ ┌─────────────────────────────┐ │
65
- │ │ │ │ │
66
- │ │ │ Data Table │ │
67
- │ │ │ (scrollable) │ │
68
- │ │ │ │ │
69
- │ │ └─────────────────────────────┘ │
70
- │ ├──────────────────────────────────┤
71
- │ │ Pagination │
72
- └──────┴──────────────────────────────────┘
73
- ```
58
+ For a data-table-first dashboard, swap the KPI/chart body for the
59
+ [browse and filter](./browse-and-filter.md) pattern — same sidebar-navigation shell, with a
60
+ search/filter bar above a scrollable table and pagination below. See that pattern for the filter-bar,
61
+ filter-panel, and table specifications; they aren't repeated here.
74
62
 
75
63
  #### Specifications
76
64
 
@@ -91,7 +79,7 @@ Dashboards benefit from persistent navigation and maximum content width.
91
79
  | Card background | `bg-card` |
92
80
  | Card border | `border` |
93
81
  | Sidebar | `bg-sidebar` |
94
- | Positive trend | `text-green-600` / `text-green-500` (dark) |
82
+ | Positive trend | `text-success` |
95
83
  | Negative trend | `text-destructive` |
96
84
  | Neutral | `text-muted-foreground` |
97
85
 
@@ -199,40 +187,11 @@ Dashboards benefit from persistent navigation and maximum content width.
199
187
 
200
188
  ### Implementation
201
189
 
202
- #### Filter Patterns
203
-
204
- **Filter Bar (above content):**
205
-
206
- ```
207
- ┌─────────────────────────────────────────────────────┐
208
- │ [Date Range ▼] [Category ▼] [Status ▼] [Search] │
209
- └─────────────────────────────────────────────────────┘
210
- ```
211
-
212
- - Horizontal layout
213
- - Date range picker left
214
- - Category filters middle
215
- - Search right
216
- - Background: `bg-muted/50` or transparent
217
-
218
- **Filter Sidebar (within content):**
219
-
220
- Use for complex filtering (10+ filter options):
221
-
222
- - Collapsible sections
223
- - Checkbox groups
224
- - Range sliders
225
- - "Apply" and "Clear" actions at bottom
226
-
227
- #### Data Table Patterns
190
+ #### Filter and Table Patterns
228
191
 
229
- | Element | Implementation |
230
- |---------|----------------|
231
- | Sortable columns | Click header to sort, show arrow direction |
232
- | Row selection | Checkbox in first column |
233
- | Row actions | Overflow menu or icon buttons |
234
- | Pagination | Bottom of table with page size selector |
235
- | Empty state | Centered message in table body |
192
+ Filter bar/panel and data table implementation live in
193
+ [browse and filter](./browse-and-filter.md) — this dashboard's data-table variant uses that pattern
194
+ directly rather than a separate spec.
236
195
 
237
196
  #### State Management
238
197
 
@@ -295,10 +254,12 @@ Use for complex filtering (10+ filter options):
295
254
 
296
255
  The sidebar-navigation frame above is the canonical mid-fidelity dashboard: a row of KPI cards across the
297
256
  top (4 columns on desktop), a primary chart below, and secondary charts beneath that. The data-table
298
- variant swaps the chart stack for a filters bar, a scrollable table, and pagination — same shell, different
299
- content body.
257
+ variant swaps the chart stack for the [browse and filter](./browse-and-filter.md) pattern — same shell,
258
+ different content body.
300
259
 
301
260
  ## Related
302
261
 
303
262
  - [Product Design](../design.md) - Sidebar Navigation layout
263
+ - [Browse and filter](./browse-and-filter.md) - Filter bar/panel and table specification, used by the data-table variant
264
+ - [Detail page](./detail-page.md) - Also reuses this pattern's Chart Container Pattern
304
265
  - [Accessibility foundations](../../../accessibility/accessibility.md) - Color and contrast