@ericrisco/rsc 3.3.1 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +3 -3
  2. package/manifest.json +43 -22
  3. package/package.json +1 -1
  4. package/scripts/lib/default-skill-floor.js +5 -1
  5. package/scripts/lib/domains.js +2 -2
  6. package/scripts/lib/retired-skills.js +4 -0
  7. package/scripts/rsc.js +1 -1
  8. package/skills/design/SKILL.md +4 -3
  9. package/skills/design/evals/cases.yaml +2 -2
  10. package/skills/ftd/SKILL.md +1 -1
  11. package/skills/react/SKILL.md +2 -1
  12. package/skills/ux/SKILL.md +149 -0
  13. package/skills/ux/THIRD_PARTY.md +32 -0
  14. package/skills/ux/evals/cases.yaml +40 -0
  15. package/skills/ux/references/flows.md +124 -0
  16. package/skills/ux/upstream/UPSTREAM.json +59 -0
  17. package/skills/ux/upstream/ux-designer/GUIDE.md +180 -0
  18. package/skills/ux/upstream/ux-designer/LICENSE +21 -0
  19. package/skills/ux/upstream/ux-designer/references/01-core-principles.md +251 -0
  20. package/skills/ux/upstream/ux-designer/references/02-laws-of-ux.md +330 -0
  21. package/skills/ux/upstream/ux-designer/references/03-accessibility.md +411 -0
  22. package/skills/ux/upstream/ux-designer/references/04-visual-design.md +433 -0
  23. package/skills/ux/upstream/ux-designer/references/05-information-architecture.md +432 -0
  24. package/skills/ux/upstream/ux-designer/references/06-interaction-design.md +495 -0
  25. package/skills/ux/upstream/ux-designer/references/07-forms-and-inputs.md +491 -0
  26. package/skills/ux/upstream/ux-designer/references/08-mobile-ux.md +539 -0
  27. package/skills/ux/upstream/ux-designer/references/09-ux-writing.md +493 -0
  28. package/skills/ux/upstream/ux-designer/references/10-user-research.md +533 -0
  29. package/skills/ux/upstream/ux-designer/references/11-design-systems.md +618 -0
  30. package/skills/ux/upstream/ux-designer/references/12a-presence-awareness.md +395 -0
  31. package/skills/ux/upstream/ux-designer/references/12b-conflict-resolution-sync.md +420 -0
  32. package/skills/ux/upstream/ux-designer/references/13a-canvas-navigation.md +388 -0
  33. package/skills/ux/upstream/ux-designer/references/13b-canvas-objects-performance.md +559 -0
  34. package/skills/ux/upstream/ux-designer/references/14-ai-ux-patterns.md +511 -0
  35. package/skills/ux/upstream/ux-designer/references/15-ethical-design.md +419 -0
  36. package/skills/ux/upstream/ux-designer/references/16-onboarding.md +430 -0
  37. package/skills/ux/upstream/ux-designer/references/17-notifications.md +461 -0
  38. package/skills/ux/upstream/ux-designer/references/18-data-visualization.md +453 -0
  39. package/skills/ux/upstream/ux-designer/references/19-search-ux.md +479 -0
  40. package/skills/ux/upstream/ux-designer/references/20-emotional-design.md +382 -0
  41. package/skills/ux/upstream/ux-designer/references/21-data-tables.md +629 -0
  42. package/skills/ux/upstream/ux-designer/references/22-performance-ux.md +626 -0
  43. package/skills/ux/upstream/ux-designer/references/23-internationalization.md +347 -0
  44. package/skills/ux/upstream/ux-designer/references/24-voice-and-multimodal.md +308 -0
  45. package/skills/ux/upstream/ux-designer/references/25a-barcode-camera-scanning.md +342 -0
  46. package/skills/ux/upstream/ux-designer/references/25b-barcode-scanner-workflows.md +412 -0
  47. package/skills/ux/upstream/ux-designer/references/25c-barcode-display.md +277 -0
  48. package/skills/ux/upstream/ux-usability-foundations/GUIDE.md +285 -0
  49. package/skills/ux/upstream/ux-usability-foundations/LICENSE +21 -0
  50. package/skills/ux/upstream/ux-usability-foundations/references/anti-patterns.md +267 -0
  51. package/skills/ux/upstream/ux-usability-foundations/references/checklists.md +130 -0
  52. package/skills/ux/upstream/ux-usability-foundations/references/decision-prompts.md +340 -0
  53. package/skills/ux/upstream/ux-usability-foundations/references/principle-cards.md +449 -0
  54. package/skills/worktrees/SKILL.md +19 -5
  55. package/targets/branch-guard.mjs +59 -4
  56. package/targets/clone-bootstrap.mjs +1 -1
  57. package/targets/session-memory-adapter.mjs +2 -2
  58. package/targets/team-safe-start.mjs +1 -0
  59. package/targets/worktree-reaper.mjs +14 -1
  60. package/skills/ui-engineering/SKILL.md +0 -113
  61. package/skills/ui-engineering/evals/cases.yaml +0 -38
@@ -0,0 +1,453 @@
1
+ # Data Visualization & Dashboard UX
2
+
3
+ Data visualization and dashboard design are specialized UX disciplines critical for enterprise products and analytics interfaces. This reference covers chart selection, dashboard layout, data tables, and accessibility for data-heavy interfaces.
4
+
5
+ ---
6
+
7
+ ## Contents
8
+
9
+ - Chart Selection
10
+ - Dashboard Layout
11
+ - Color in Data Visualization
12
+ - Interaction Patterns
13
+ - Responsive Charts
14
+ - Data Tables
15
+ - Empty & Error States
16
+ - Accessibility
17
+ - Key Metrics
18
+ - Anti-Patterns
19
+ - Sources
20
+
21
+ ---
22
+
23
+ ## Chart Selection
24
+
25
+ ### When to Use Each Chart Type
26
+
27
+ | Data Relationship | Recommended Chart | Avoid |
28
+ |-------------------|------------------|-------|
29
+ | **Part of whole** | Pie (≤6 slices), donut, stacked bar, treemap | Pie with >6 slices |
30
+ | **Comparison** | Bar (vertical/horizontal), grouped bar | 3D bars, radar (hard to read) |
31
+ | **Trend over time** | Line, area, sparkline | Pie (no time axis) |
32
+ | **Distribution** | Histogram, box plot, violin plot | Pie or bar |
33
+ | **Correlation** | Scatter plot, bubble chart | Line (implies time) |
34
+ | **Ranking** | Horizontal bar (sorted), lollipop chart | Vertical bar (hard to label) |
35
+ | **Geographic** | Choropleth map, dot map | Bar chart for location data |
36
+ | **Hierarchy** | Treemap, sunburst | Nested pie charts |
37
+ | **Flow/process** | Sankey diagram, funnel | Bar chart |
38
+ | **Single value** | KPI card, gauge, big number | Chart with one data point |
39
+
40
+ ### Chart Decision Tree
41
+
42
+ ```
43
+ What are you showing?
44
+ ├── Single number → KPI card / big number display
45
+ ├── Change over time?
46
+ │ ├── Few series (1-3) → Line chart
47
+ │ ├── Many series → Small multiples or highlight key lines
48
+ │ └── Cumulative → Stacked area chart
49
+ ├── Comparing categories?
50
+ │ ├── Few categories (≤6) → Vertical bar chart
51
+ │ ├── Many categories → Horizontal bar chart (easier labels)
52
+ │ └── Two variables → Grouped or stacked bar
53
+ ├── Part of a whole?
54
+ │ ├── Few parts (≤5) → Pie or donut chart
55
+ │ ├── Many parts → Treemap or stacked bar
56
+ │ └── Hierarchical → Sunburst or treemap
57
+ ├── Relationship between variables?
58
+ │ ├── Two variables → Scatter plot
59
+ │ └── Three variables → Bubble chart (size = 3rd variable)
60
+ └── Distribution?
61
+ ├── Single variable → Histogram
62
+ └── Multiple groups → Box plot or violin plot
63
+ ```
64
+
65
+ ---
66
+
67
+ ## Dashboard Layout
68
+
69
+ ### Information Hierarchy
70
+
71
+ ```
72
+ ┌─────────────────────────────────────────────────────┐
73
+ │ KPI Cards (most important metrics at a glance) │
74
+ │ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
75
+ │ │ $42K │ │ 1.2K │ │ 89% │ │ 4.2s │ │
76
+ │ │ Rev │ │Users │ │ Sat │ │ Load │ │
77
+ │ │ ↑12% │ │ ↑8% │ │ ↓2% │ │ ↑0.3 │ │
78
+ │ └──────┘ └──────┘ └──────┘ └──────┘ │
79
+ ├─────────────────────────────────────────────────────┤
80
+ │ Primary chart (main trend or most viewed data) │
81
+ │ ┌─────────────────────────────────────────────┐ │
82
+ │ │ 📈 Revenue Over Time │ │
83
+ │ │ ▁▂▃▅▆▇█▇▆▅▆▇██▇▅▆▇█ │ │
84
+ │ └─────────────────────────────────────────────┘ │
85
+ ├─────────────────────┬───────────────────────────────┤
86
+ │ Secondary chart 1 │ Secondary chart 2 │
87
+ │ ┌───────────────┐ │ ┌───────────────────────┐ │
88
+ │ │ 🥧 By Source │ │ │ 📊 By Region │ │
89
+ │ └───────────────┘ │ └───────────────────────┘ │
90
+ ├─────────────────────┴───────────────────────────────┤
91
+ │ Data table (details on demand) │
92
+ │ ┌─────────────────────────────────────────────┐ │
93
+ │ │ Name │ Revenue │ Users │ Conversion │ │
94
+ │ │ ... │ ... │ ... │ ... │ │
95
+ │ └─────────────────────────────────────────────┘ │
96
+ └─────────────────────────────────────────────────────┘
97
+ ```
98
+
99
+ ### Layout Principles
100
+
101
+ - **Top**: KPI summary cards (3-6 metrics)
102
+ - **Middle**: Primary visualizations (1-2 charts)
103
+ - **Bottom**: Secondary charts and detail tables
104
+ - **Shneiderman's mantra**: Overview first, zoom and filter, details on demand
105
+ - Use consistent grid (12-column for flexibility)
106
+ - Group related metrics visually
107
+
108
+ ### KPI Card Design
109
+
110
+ ```
111
+ ┌────────────────────────┐
112
+ │ Revenue ⓘ │ ← Label + info tooltip
113
+ │ $42,350 │ ← Big number (primary)
114
+ │ ↑ 12.3% vs last month │ ← Trend with comparison
115
+ │ ▁▂▃▅▆▇█▇▆▅ │ ← Sparkline (optional)
116
+ └────────────────────────┘
117
+
118
+ Colors:
119
+ ↑ Green = positive trend (contextual — could be red for cost metrics)
120
+ ↓ Red = negative trend
121
+ → Gray = no change
122
+ ```
123
+
124
+ - Display the most important number prominently
125
+ - Include comparison period and trend direction
126
+ - Add sparkline for quick trend visualization
127
+ - Info icon for metric definition/calculation
128
+ - Contextual coloring (up isn't always good — e.g., error rate)
129
+
130
+ ### Customizable Dashboards
131
+
132
+ - Drag-and-drop widget rearrangement
133
+ - Resizable panels with snap-to-grid
134
+ - Add/remove widgets from a library
135
+ - Save multiple dashboard layouts
136
+ - Share dashboards with team members
137
+ - Reset to default layout option
138
+
139
+ ---
140
+
141
+ ## Color in Data Visualization
142
+
143
+ ### Palette Types
144
+
145
+ ```
146
+ Sequential (low → high):
147
+ □ → ■ Light blue → Dark blue
148
+ Use for: continuous data, heatmaps, density
149
+
150
+ Diverging (negative ← neutral → positive):
151
+ ■ ← □ → ■ Red ← White → Blue
152
+ Use for: data with a meaningful midpoint (profit/loss, deviation)
153
+
154
+ Categorical (distinct groups):
155
+ ■ ■ ■ ■ ■ Blue, Orange, Green, Red, Purple
156
+ Use for: comparing distinct categories, legend items
157
+ Maximum: 6-8 distinct colors before confusion
158
+ ```
159
+
160
+ ### Colorblind-Safe Palettes
161
+
162
+ ```
163
+ ❌ Red vs. Green (indistinguishable for ~8% of males)
164
+ ✅ Blue vs. Orange (safe for most colorblind types)
165
+
166
+ Recommended categorical palette (colorblind-safe):
167
+ #4477AA #EE6677 #228833 #CCBB44 #66CCEE #AA3377
168
+ Blue Rose Green Gold Cyan Purple
169
+ ```
170
+
171
+ **Rules:**
172
+ - Never use color as the only differentiator
173
+ - Add patterns, shapes, or labels as secondary encoding
174
+ - Test with colorblind simulation tools
175
+ - Provide alternative text descriptions for all charts
176
+ - Use 3:1 minimum contrast between adjacent data colors
177
+
178
+ ---
179
+
180
+ ## Interaction Patterns
181
+
182
+ ### Hover Tooltips
183
+
184
+ ```
185
+ ┌──────────────────────┐
186
+ │ January 2025 │
187
+ │ Revenue: $42,350 │
188
+ │ Users: 1,234 │
189
+ │ ↑ 12% vs Dec 2024 │
190
+ └──────────┬───────────┘
191
+ │
192
+ ▁▂▃▅▆▇█▇▆▅▆▇██
193
+ ▲ cursor position
194
+ ```
195
+
196
+ - Show on hover (desktop) or tap (mobile)
197
+ - Include exact values, context, and comparison
198
+ - Position near cursor without obscuring the data point
199
+ - Follow cursor smoothly (no jittering)
200
+ - Dismiss on mouse-out or tap elsewhere
201
+
202
+ ### Drill-Down
203
+
204
+ ```
205
+ Overview: Revenue by Region
206
+ ┌─────────────────────────┐
207
+ │ 📊 Americas | EMEA │ ← Click "Americas"
208
+ └─────────────────────────┘
209
+ ↓
210
+ Detail: Revenue by Country (Americas)
211
+ ┌─────────────────────────┐
212
+ │ 📊 US | CA | BR | MX │ ← Click "US"
213
+ └─────────────────────────┘
214
+ ↓
215
+ Granular: Revenue by State (US)
216
+ ┌─────────────────────────┐
217
+ │ 📊 CA | TX | NY | FL │
218
+ └─────────────────────────┘
219
+
220
+ Breadcrumb: All Regions > Americas > US
221
+ [← Back to Americas]
222
+ ```
223
+
224
+ - Clear visual affordance that elements are clickable
225
+ - Breadcrumb navigation showing drill-down path
226
+ - "Back" button to return to previous level
227
+ - Maintain filters and time range across drill-downs
228
+
229
+ ### Filtering & Time Range
230
+
231
+ ```
232
+ ┌─────────────────────────────────────────────────────┐
233
+ │ Time: [Last 30 days ▾] Region: [All ▾] [⟳] │
234
+ │ [Custom range...] Segment: [All ▾] │
235
+ ├─────────────────────────────────────────────────────┤
236
+ │ Active filters: [Americas ✕] [Enterprise ✕] [Clear]│
237
+ └─────────────────────────────────────────────────────┘
238
+ ```
239
+
240
+ - Persistent filter bar visible at all times
241
+ - Show active filters as removable chips
242
+ - Preset time ranges (Today, 7d, 30d, 90d, YTD, Custom)
243
+ - Filters apply to all dashboard widgets simultaneously
244
+ - "Reset filters" to return to default view
245
+ - Date range picker with calendar and quick presets
246
+
247
+ ### Zoom & Pan (Time-Series)
248
+
249
+ - Click-drag to select a time range (brush selection)
250
+ - Mouse wheel to zoom in/out on time axis
251
+ - Reset zoom button always visible when zoomed
252
+ - Mini-timeline showing selected range in context
253
+
254
+ ---
255
+
256
+ ## Responsive Charts
257
+
258
+ ### Mobile Considerations
259
+
260
+ ```
261
+ Desktop: Full chart with legend, axis labels, gridlines
262
+ Tablet: Simplified chart, condensed legend
263
+ Mobile: Sparkline or KPI card, tap for full chart
264
+
265
+ Breakpoints:
266
+ > 1024px: Full dashboard grid
267
+ 768-1024: 2-column grid, condensed charts
268
+ < 768px: Single column, KPI cards + expandable charts
269
+ ```
270
+
271
+ - Prioritize KPI cards on mobile (most information-dense)
272
+ - Collapse charts to sparklines with "Expand" option
273
+ - Horizontal scrolling for wide data tables (with shadow indicators)
274
+ - Stack dashboard columns vertically on narrow screens
275
+ - Touch-friendly tooltips (tap instead of hover)
276
+
277
+ ### Small Multiples
278
+
279
+ ```
280
+ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
281
+ │US ▁▅█│ │UK ▁▃▅│ │DE ▁▂▃│ │JP ▅▃▁│
282
+ └──────┘ └──────┘ └──────┘ └──────┘
283
+ ```
284
+
285
+ - Same scale across all multiples for fair comparison
286
+ - Consistent axes (shared y-axis range)
287
+ - Label each clearly (top-left corner)
288
+ - Effective for comparing trends across many categories
289
+
290
+ ---
291
+
292
+ ## Data Tables
293
+
294
+ ### Core Features
295
+
296
+ ```
297
+ ┌──┬──────────┬──────────┬─────────┬────────┬──────┐
298
+ │☐ │ Name ↕ │ Revenue ↓│ Users ↕ │ Conv. │ ··· │
299
+ ├──┼──────────┼──────────┼─────────┼────────┼──────┤
300
+ │☐ │ Acme Inc │ $42,350 │ 1,234 │ 3.4% │ ··· │
301
+ │☑ │ Beta Co │ $38,200 │ 987 │ 4.1% │ ··· │
302
+ │☐ │ Gamma │ $35,100 │ 856 │ 2.8% │ ··· │
303
+ ├──┴──────────┴──────────┴─────────┴────────┴──────┤
304
+ │ ☑ 1 selected [Export] [Delete] │
305
+ ├──────────────────────────────────────────────────┤
306
+ │ Showing 1-25 of 342 [← 1 2 3 ... 14 →] │
307
+ └──────────────────────────────────────────────────┘
308
+ ```
309
+
310
+ ### Table Interaction Patterns
311
+
312
+ | Feature | Implementation |
313
+ |---------|---------------|
314
+ | **Sorting** | Click column header, toggle asc/desc, show arrow indicator |
315
+ | **Filtering** | Per-column filter dropdowns or global search |
316
+ | **Pagination** | 10/25/50/100 rows per page, page numbers, prev/next |
317
+ | **Infinite scroll** | For exploration (prefer pagination for data analysis) |
318
+ | **Row selection** | Checkbox column, shift-click for range, bulk actions bar |
319
+ | **Column resizing** | Drag column borders, double-click to auto-fit |
320
+ | **Column reordering** | Drag column headers |
321
+ | **Pinned columns** | Pin first 1-2 columns on horizontal scroll |
322
+ | **Inline editing** | Click to edit cell, Enter to save, Esc to cancel |
323
+ | **Row expansion** | Expand row for nested detail without leaving the table |
324
+ | **Export** | CSV, Excel, PDF — selected rows or all |
325
+
326
+ ### Pagination vs. Infinite Scroll
327
+
328
+ | Use Pagination | Use Infinite Scroll |
329
+ |----------------|-------------------|
330
+ | Data analysis tasks | Content browsing |
331
+ | Need to return to specific position | Feed/timeline content |
332
+ | Large datasets (1000+ rows) | Progressive loading |
333
+ | Printable/exportable views | Mobile-first interfaces |
334
+
335
+ ---
336
+
337
+ ## Empty & Error States
338
+
339
+ ### Data States
340
+
341
+ ```
342
+ Loading:
343
+ ┌─────────────────────────────┐
344
+ │ ░░░░░░░░░░░░░░░░░░░░░░░░ │ ← Skeleton chart
345
+ │ ░░░░░░░░░░░░░░░░░░░░░░░░ │
346
+ │ ░░░░░░░░░░░░░░░░░░░░░░░░ │
347
+ └─────────────────────────────┘
348
+
349
+ No data:
350
+ ┌─────────────────────────────┐
351
+ │ 📊 │
352
+ │ No data for this period │
353
+ │ Try a different date range │
354
+ │ or adjust your filters. │
355
+ │ [Reset filters] │
356
+ └─────────────────────────────┘
357
+
358
+ Error:
359
+ ┌─────────────────────────────┐
360
+ │ ⚠️ │
361
+ │ Unable to load chart data │
362
+ │ [Retry] [Report issue] │
363
+ └─────────────────────────────┘
364
+
365
+ Partial data:
366
+ ┌─────────────────────────────┐
367
+ │ 📈 Revenue (partial data) │
368
+ │ ▁▂▃▅▆▇█▇▆ ░░░ │
369
+ │ ℹ️ Data available through │
370
+ │ Jan 15. Processing... │
371
+ └─────────────────────────────┘
372
+ ```
373
+
374
+ ### Stale Data Indicators
375
+
376
+ - Show "Last updated: X minutes ago" for live dashboards
377
+ - Auto-refresh indicator with countdown
378
+ - Manual refresh button
379
+ - Visual indicator (dimmed chart, banner) for stale data
380
+ - Alert when data is significantly outdated
381
+
382
+ ---
383
+
384
+ ## Accessibility
385
+
386
+ ### Chart Accessibility
387
+
388
+ - **Alt text**: Descriptive summary of what the chart shows
389
+ - **Data table alternative**: Provide raw data table for every chart
390
+ - **Keyboard navigation**: Tab through data points, arrow keys within chart
391
+ - **Screen reader**: Announce data points, trends, and outliers
392
+ - **High contrast**: Ensure chart elements meet 3:1 contrast minimum
393
+ - **Pattern fills**: Use patterns in addition to colors for categories
394
+
395
+ ```html
396
+ <figure role="img" aria-label="Revenue trend showing 12% growth from January to December 2025, with a peak of $52K in November">
397
+ <canvas id="revenue-chart"></canvas>
398
+ <figcaption>
399
+ Monthly revenue, Jan-Dec 2025.
400
+ <a href="#revenue-data-table">View as data table</a>
401
+ </figcaption>
402
+ </figure>
403
+ ```
404
+
405
+ ### Data Table Accessibility
406
+
407
+ - Use semantic `<table>`, `<thead>`, `<tbody>`, `<th scope>` markup
408
+ - `aria-sort` on sortable column headers
409
+ - `aria-selected` on selected rows
410
+ - `aria-describedby` for column filter descriptions
411
+ - Announce row count and current position to screen readers
412
+ - Keyboard navigation: Tab between cells, Enter to activate
413
+
414
+ ---
415
+
416
+ ## Key Metrics
417
+
418
+ | Metric | Target | Context |
419
+ |--------|--------|---------|
420
+ | Dashboard load time | < 3s | Including data fetch |
421
+ | Chart render time | < 500ms | After data available |
422
+ | Tooltip response | < 100ms | On hover/tap |
423
+ | Data refresh interval | 15-60s | Live dashboards |
424
+ | Color contrast (data) | ≥ 3:1 | Adjacent data colors |
425
+ | Max chart categories | 6-8 | Before readability drops |
426
+ | Max KPI cards | 3-6 | Above fold visibility |
427
+
428
+ ---
429
+
430
+ ## Anti-Patterns
431
+
432
+ 1. **3D charts** — Add visual noise without informational value
433
+ 2. **Pie charts with 10+ slices** — Impossible to compare small slices
434
+ 3. **Dual y-axes** — Misleading correlation; use small multiples instead
435
+ 4. **Truncated y-axis** — Starting y-axis above zero exaggerates differences
436
+ 5. **Rainbow color schemes** — Colorblind-unfriendly and visually noisy
437
+ 6. **Chart junk** — Decorative gridlines, borders, and backgrounds
438
+ 7. **No loading states** — Blank areas while data fetches
439
+ 8. **Auto-refresh without warning** — Dashboard changes while user is analyzing
440
+ 9. **Tooltip that obscures data** — Covering the very thing user is trying to read
441
+ 10. **Color-only encoding** — No patterns, labels, or shapes as redundant encoding
442
+
443
+ ---
444
+
445
+ ## Sources
446
+
447
+ - [Edward Tufte: The Visual Display of Quantitative Information](https://www.edwardtufte.com/) — Data visualization theory
448
+ - [Material Design: Data Visualization](https://m3.material.io/styles/color/dynamic/choosing-a-scheme) — Google guidelines
449
+ - [D3.js Gallery](https://d3-graph-gallery.com/) — Implementation patterns
450
+ - [Chartability](https://chartability.fizz.studio/) — Chart accessibility audit toolkit
451
+ - [ColorBrewer](https://colorbrewer2.org/) — Colorblind-safe palettes
452
+ - [Stephen Few: Information Dashboard Design](https://www.perceptualedge.com/) — Dashboard principles
453
+ - [WAI: Images Tutorial](https://www.w3.org/WAI/tutorials/images/complex/) — Complex image accessibility