@hegemonart/get-design-done 1.14.7 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +14 -2
- package/CHANGELOG.md +84 -0
- package/README.md +18 -0
- package/SKILL.md +2 -0
- package/agents/a11y-mapper.md +25 -0
- package/agents/design-auditor.md +92 -8
- package/agents/design-context-builder.md +6 -0
- package/agents/design-executor.md +5 -2
- package/agents/design-pattern-mapper.md +2 -0
- package/agents/design-start-writer.md +221 -0
- package/agents/design-verifier.md +11 -0
- package/agents/motion-mapper.md +45 -0
- package/agents/token-mapper.md +36 -0
- package/agents/visual-hierarchy-mapper.md +29 -0
- package/hooks/first-run-nudge.sh +82 -0
- package/hooks/hooks.json +8 -0
- package/package.json +14 -2
- package/reference/anti-patterns.md +69 -0
- package/reference/audit-scoring.md +34 -3
- package/reference/brand-voice.md +199 -0
- package/reference/checklists.md +30 -3
- package/reference/data/google-fonts.csv +51 -0
- package/reference/data/palettes.csv +41 -0
- package/reference/data/styles.csv +39 -0
- package/reference/design-system-guidance.md +177 -0
- package/reference/design-systems-catalog.md +151 -0
- package/reference/framer-motion-patterns.md +411 -0
- package/reference/gestalt.md +219 -0
- package/reference/iconography.md +231 -0
- package/reference/motion.md +102 -0
- package/reference/palette-catalog.md +82 -0
- package/reference/performance.md +304 -0
- package/reference/registry.json +257 -27
- package/reference/review-format.md +2 -2
- package/reference/start-interview.md +84 -0
- package/reference/style-vocabulary.md +62 -0
- package/reference/surfaces.md +114 -0
- package/reference/typography.md +80 -0
- package/reference/visual-hierarchy-layout.md +306 -0
- package/scripts/lib/detect-ui-root.cjs +187 -0
- package/scripts/lib/start-findings-engine.cjs +405 -0
- package/skills/start/SKILL.md +166 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# /gdd:start — Locked 5-Question Interview
|
|
2
|
+
|
|
3
|
+
**Purpose:** collect the minimum signal needed to steer the findings engine without slowing first-run completion past 30 seconds of interview wall-clock. Autodetectable dimensions collapse to a one-key confirmation; genuinely non-derivable dimensions are asked explicitly.
|
|
4
|
+
|
|
5
|
+
**Hard constraint:** v1.14.7 ships this fixed question set. Do not branch, re-order, or insert new questions without an explicit `/gsd-discuss-phase` override captured in a future DISCUSSION.md.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Q1 — Pain point *(required, free text)*
|
|
10
|
+
|
|
11
|
+
**Prompt:**
|
|
12
|
+
|
|
13
|
+
> What's the one design issue you'd most like to see fixed first? One line, ≤120 chars. Examples: "buttons feel jittery on hover", "colors are inconsistent across forms", "mobile nav breaks on the hero", "a11y on our modal".
|
|
14
|
+
|
|
15
|
+
**Default when `--skip-interview`:** empty string (pain hint disabled; scorer runs without boost).
|
|
16
|
+
|
|
17
|
+
**Validation:** max 120 chars; trim leading/trailing whitespace. No charset restrictions — the hint is free text.
|
|
18
|
+
|
|
19
|
+
**Failure posture:** if the user aborts at Q1, abort the whole skill with a one-line pointer to `/gdd:scan`.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Q2 — Target area confirmation *(autodetected, single select)*
|
|
24
|
+
|
|
25
|
+
**Prompt:**
|
|
26
|
+
|
|
27
|
+
> I detected your UI code at `<detected.path>` (`<detected.kind>`, confidence=`<detected.confidence>`). Use this surface? [Yes / choose another path / skip demo]
|
|
28
|
+
|
|
29
|
+
**Default when `--skip-interview`:** accept detected path as-is.
|
|
30
|
+
|
|
31
|
+
**Validation:** if the user picks "choose another path", ask for a repo-relative path and validate that at least one UI-extension file (.tsx/.jsx/.ts/.js/.svelte/.vue) exists inside. Re-prompt on failure. Two rejections → fall back to detected path with a warning.
|
|
32
|
+
|
|
33
|
+
**Failure posture:** if the user picks "skip demo", exit clean with `## START COMPLETE` and no `.design/` footprint.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Q3 — Budget / latency preference *(enum, default=balanced)*
|
|
38
|
+
|
|
39
|
+
**Prompt:**
|
|
40
|
+
|
|
41
|
+
> Report speed vs thoroughness? [fast (≤90s, tokens-only) / balanced (≤3min, default) / thorough (≤5min, includes a11y + motion checks)]
|
|
42
|
+
|
|
43
|
+
**Default when `--skip-interview`:** `balanced`.
|
|
44
|
+
|
|
45
|
+
**Validation:** must be one of `fast | balanced | thorough`. Any other input → re-prompt once, then default to `balanced`.
|
|
46
|
+
|
|
47
|
+
**Failure posture:** n/a — this is non-blocking; defaulting is safe.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Q4 — Framework + design-system confirmation *(autodetected, combined)*
|
|
52
|
+
|
|
53
|
+
**Prompt:**
|
|
54
|
+
|
|
55
|
+
> Detected framework=`<framework>`, design-system=`<design_system>`. Correct? [Yes / override framework / override design-system / skip (use detected)]
|
|
56
|
+
|
|
57
|
+
**Default when `--skip-interview`:** accept both detected values.
|
|
58
|
+
|
|
59
|
+
**Validation:** "override framework" → ask for a free-text label (`next | remix | vite | cra | svelte | vue | astro | solid | unknown`). "override design-system" → same, values (`tailwind | css-modules | vanilla-extract | styled | linaria | emotion | panda | unknown`). Invalid → default to `unknown`.
|
|
60
|
+
|
|
61
|
+
**Failure posture:** n/a — detection output is always available even if the user skips.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Q5 — Figma / canvas workflow *(enum, non-blocking)*
|
|
66
|
+
|
|
67
|
+
**Prompt:**
|
|
68
|
+
|
|
69
|
+
> Do you work with visual references? [Figma / .canvas file / neither / skip]
|
|
70
|
+
|
|
71
|
+
**Default when `--skip-interview`:** `skip`.
|
|
72
|
+
|
|
73
|
+
**Validation:** enum; any other → `skip`.
|
|
74
|
+
|
|
75
|
+
**Effect:** result steers the `Visual Proof Readiness` section only — never gates the happy path or the findings engine. The writer uses this to decide whether to surface `/gdd:connections figma` or `.canvas` guidance.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Do Not
|
|
80
|
+
|
|
81
|
+
- Do not ask for email, org name, team size, or any identity data.
|
|
82
|
+
- Do not ask more than five questions.
|
|
83
|
+
- Do not branch based on Q1 content (adaptive branching is explicitly deferred per the ROADMAP).
|
|
84
|
+
- Do not write STATE.md, config.json, or any source file as a side effect of the interview.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: style-vocabulary
|
|
3
|
+
type: style-vocabulary
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
source: "nextlevelbuilder/ui-ux-pro-max-skill (MIT) — data/styles.csv, data/design.csv, data/draft.csv"
|
|
6
|
+
tags: [style, aesthetic, ui, vocabulary, brief]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Style Vocabulary — UI Aesthetic Catalog
|
|
10
|
+
|
|
11
|
+
This catalog gives two categories of agent a shared, unambiguous vocabulary for UI aesthetics.
|
|
12
|
+
|
|
13
|
+
**Brief-stage (design-context-builder):** When the user names a visual direction — or when the agent infers one from brand-direction words — look up the style name here to validate that the direction is coherent with the product type (Best For / Avoid For columns) and to understand what implementation cost to surface in the constraints section (Performance column). Pre-populate the `D-02` decision line in the context file with the style name verbatim so downstream agents can pattern-match it exactly.
|
|
14
|
+
|
|
15
|
+
**Audit-stage (design-auditor):** When scoring Pillar 3 (Color) and Pillar 2 (Visual Hierarchy), reference this catalog to determine whether the implemented aesthetic is internally consistent. A product that claims Glassmorphism but uses hard box-shadows scores lower on style coherence. The style name from `D-02` is the benchmark — audit against it, not against a generic checklist.
|
|
16
|
+
|
|
17
|
+
Style names in this file are preserved verbatim from the UUPM source to maintain ecosystem legibility. Do not rename or abbreviate styles when writing context files or audit reports.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Style Table
|
|
22
|
+
|
|
23
|
+
| Style | Keywords | Signature Effects | Best For | Avoid For | Light/Dark | Performance | Era |
|
|
24
|
+
|---|---|---|---|---|---|---|---|
|
|
25
|
+
| Glassmorphism | frosted glass, translucency, blur, layered depth | backdrop-filter: blur(20px), semi-transparent cards (rgba bg at 60–80% opacity), 1px border at rgba(255,255,255,0.2), subtle inner glow | Dashboards, media apps, modern SaaS landing pages, AI/ML product surfaces | Data-dense tables, accessibility-critical flows, low-end devices, text-heavy content | Both (dark base preferred for maximum contrast) | High — backdrop-filter triggers compositor layer; avoid stacking more than 3 blur layers | 2019–present |
|
|
26
|
+
| Brutalism | raw layout, stark contrast, intentional roughness, exposed grid, unconventional typography | Hard pixel borders (2–4px solid black), no border-radius or extreme (0px), flat color fills, oversized type, intentional misalignment as aesthetic choice | Creative portfolios, challenger brands, indie products, arts organizations, music artists | Healthcare, regulated finance, government, e-commerce conversion pages | Light mode primary | Lowest — no visual effects; pure CSS | 2016–present |
|
|
27
|
+
| Neumorphism | extruded shadows, raised/inset UI, monochromatic, soft bilateral shadows | box-shadow: 8px 8px 16px rgba(0,0,0,0.15), -8px -8px 16px rgba(255,255,255,0.9); near-identical foreground/background hue; no hard borders | Personal finance concept dashboards, design system prototypes, high-end calculator UI | Accessibility-critical products (fails WCAG contrast in almost all implementations), mobile (touch targets unclear), production apps at scale | Light only | Low — CSS shadows only, but WCAG caution overrides implementation | 2019–2021 |
|
|
28
|
+
| Flat Design 2.0 | minimal decoration, subtle shadows permitted, vibrant palette, sharp iconography | Single drop-shadow at 0 2px 4px rgba (not 0 blur), bold sans-serif, geometric icons, 8pt spacing grid, no gradients on primary surfaces | Productivity apps, documentation sites, enterprise SaaS, developer tools | Luxury/fashion (too utilitarian), entertainment (too corporate) | Both | Lowest | 2014–present |
|
|
29
|
+
| Material Design 3 | dynamic color, tonal surfaces, elevation via color not shadow, M3 components | Tonal surface colors derived from wallpaper/brand seed via Material You algorithm; container/on-container token pairs; state layers at 8%/12%/16% opacity | Android-first apps, cross-platform Google-adjacent products, Material ecosystem teams | Apple HIG contexts, luxury brands, editorial-first experiences | Both | Low — relies on CSS custom properties and system fonts | 2021–present |
|
|
30
|
+
| Bento Grid | card-grid layout, variable card sizes, grid gaps as design element, information hierarchy via cell size | CSS Grid with named areas; card size ranges from 1×1 to 3×2; visible grid gap (8–16px); rounded cards (radius 12–24px); subtle card shadow | Marketing landing pages, dashboard home screens, portfolio showcases, feature announcement pages | Linear narrative content, long-form reading, checkout flows | Both | Low | 2022–present |
|
|
31
|
+
| AI-Native | gradient meshes, dark base, glowing accents, particle effects, flowing color | Gradient mesh backgrounds (3–5 blended color stops), subtle particle canvas overlay, glowing border via box-shadow with spread, monospace or geometric sans-serif | AI/ML products, futuristic SaaS, developer platform landing pages, inference product demos | Traditional enterprise, regulated industries, consumer packaged goods, healthcare | Dark primary | High — particle effects require canvas/WebGL; mesh gradients moderate cost | 2022–present |
|
|
32
|
+
| Swiss Modernism 2.0 / International Style | strict grid, functional typography, red-black-white, structure as beauty | Baseline 12-column grid with explicit column rules; Helvetica/Neue Haas/Inter; red (#E02424) as the only accent; no imagery unless functional; type as layout element | Editorial platforms, design agencies, premium brand identities, cultural institutions | Consumer apps, gaming, children's products, anything requiring warmth | Both | Lowest | 1950–present (revival 2018–) |
|
|
33
|
+
| Claymorphism | 3D inflated shapes, soft clay surfaces, pastel palette, inner shadows | border-radius: 30–50px; layered box-shadow (inner highlight + outer soft shadow); pastel fills; thick playful borders (3–4px) at lighter shade of fill | Consumer apps, children's products, lifestyle brands, wellness apps, gifting platforms | Enterprise software, data-dense apps, financial tools, anything requiring precision | Both | Medium — inner shadows and multiple box-shadow layers | 2021–present |
|
|
34
|
+
| Dark Mode First | deep backgrounds, careful elevation via surface color, low-saturation palette | Background: #0A0A0A–#121212; surfaces via gray ladder (#1C1C1E, #2C2C2E, #3A3A3C); text at #F5F5F5–#EBEBF5; color desaturated 20% vs light equivalent | Developer tools, code editors, media players, gaming interfaces, creative tools | Healthcare (eye strain concern in clinical settings), high-ambient-light kiosks, point-of-sale | Dark primary | Low | 2018–present |
|
|
35
|
+
| Vaporwave/Retrowave | neon gradients, dark base, grid lines, retro typography, CRT aesthetic | Hot pink to cyan gradient (#FF00FF → #00FFFF); background grid lines at low opacity; scanline overlay; pixel or VCR-style display fonts; glow effects via text-shadow | Gaming, entertainment, nostalgia brands, Gen-Z consumer products, music products | Any trust-critical vertical, healthcare, finance, government, enterprise | Dark | High — multiple glow filters, gradient overlays | 1980s aesthetic; UI revival 2016–present |
|
|
36
|
+
| Editorial Grid | overlapping text and image, asymmetric layout, strong typographic hierarchy, print-inspired | Text floated over image with mix-blend-mode; column-spanning type; headline at 80–120px; print-grid column rules as decoration; serif display fonts | Media platforms, publishing, editorial brands, portfolios, cultural organizations | Functional SaaS apps, data-dense dashboards, e-commerce PDP pages | Both | Low | Print tradition; digital revival 2018–present |
|
|
37
|
+
| HUD/Sci-Fi FUI | monochrome on dark, thin lines, technical readout vocabulary, blinking cursors | Background #000000–#0A0A0A; primary green or cyan (#00FF41 or #22D3EE) on black; 1px rule lines; monospace type; data table with scan-animation; corner bracket UI elements | Technology/aerospace dashboards, game UI overlays, cybersecurity monitoring, concept demos | Consumer products, any app requiring instant clarity for non-technical users | Dark | High — continuous animations, WebGL elements common | Science fiction tradition; real-world FUI since 2010 |
|
|
38
|
+
| Minimal/Zen | maximum whitespace, single accent, natural textures, typography-first | 70%+ whitespace ratio; single color accent (one hue only); thin-weight serif or geometric sans; optional paper/linen texture overlay at 5% opacity; no drop shadows | Wellness apps, meditation products, luxury minimal brands, independent publications, author portfolios | Feature-dense apps, complex navigation structures, high-information-density dashboards | Both | Lowest | 2010–present |
|
|
39
|
+
| Skeuomorphism 2.0 | realistic textures, modern execution, material-specific rendering | Leather, wood grain, metal surface textures rendered via CSS or SVG; specular highlight simulation; physical affordances (buttons with press state depth); material-appropriate border-radius | Premium music instruments, luxury hardware companion apps, high-end lifestyle products | Modern SaaS, productivity tools, anything with frequent UI updates (texture maintenance cost) | Both | Medium — texture assets and layered pseudo-elements | Original 2007–2013; revival/refinement 2021–present |
|
|
40
|
+
| Neubrutalism | visible borders, flat colors, stark contrast, browser-default-inspired, raw energy | 2–3px solid dark border on all interactive elements; flat fill (no gradient); background colors at full saturation; hover state as color-flip (swap bg/fg); no border-radius or large radius | Indie SaaS products, creative tools, challenger brands, hackathon projects | Enterprise software, regulated industries, anything requiring perceived polish or trust | Both | Lowest | 2021–present |
|
|
41
|
+
| Memphis Design Revival | geometric shapes, primary colors, patterns, 80s-inspired, maximalist decoration | Bold geometric pattern fills (triangles, squiggles, dots); primary + secondary color blocking; pattern borders; mixed type weights; controlled chaos grid | Consumer brands targeting Gen Z, playful e-commerce, lifestyle/fashion campaigns, pop culture events | Professional services, enterprise, financial products, anything requiring authority | Both | Low | 1980s origin; digital revival 2022–present |
|
|
42
|
+
| Glassmorphism Dark | frosted glass on dark base, darker frost panels, subtle neon borders | backdrop-filter: blur(24px) on near-black base (#0A0A0A); card at rgba(255,255,255,0.05); neon border rgba(value from accent, 0.3); text at #F8FAFC | Gaming UI, media players, nightclub/event apps, AI product dark surfaces | Any product requiring readable body text at scale (contrast is difficult to achieve) | Dark | High — same as Glassmorphism | 2020–present |
|
|
43
|
+
| Aurora/Gradient Mesh | flowing color gradients, no hard borders, dreamlike quality, organic forms | CSS mesh gradient with 4–6 color stops at 40–70% opacity; no hard-edge borders; sections dissolve into each other; type floated on gradient without hard card containers | AI/ML landing pages, creative platform hero sections, generative art tools | Data-dense apps, form-heavy flows, any context requiring clear section boundaries | Both | Medium-High — large gradient areas can trigger repaint | 2021–present |
|
|
44
|
+
| Monochromatic Minimal | single hue across full lightness range, typography-first, restraint as luxury | All UI elements share one hue; lightness varies from 5% (near-black) to 97% (near-white); saturation constant; type weight provides the only contrast variation; no accent color | Portfolios, luxury brand identity systems, photography showcases, editorial | Multi-action apps, e-commerce (accent colors drive CTA attention), gaming | Both | Lowest | 2015–present |
|
|
45
|
+
| Conversion-First | CTA-dominant layout, social proof integration, urgency mechanics, trust signals | Primary CTA button above fold with 100%+ width on mobile; social proof blocks within 2 scroll steps; urgency timer or scarcity counter; benefit bullets over features; sticky CTA bar on mobile | Lead-gen landing pages, SaaS trial pages, product launch pages, app store alternatives | Brand storytelling pages, editorial content, informational docs | Both | Low — minimal JS, mostly static | 2010–present |
|
|
46
|
+
| Story-Scroll | parallax narrative, scroll-triggered animations, cinematic pacing | IntersectionObserver-triggered fade-in sequences; horizontal scroll segments; full-bleed imagery at each act; progress indicator; chapter-style section breaks | Brand launches, product storytelling, annual reports, agency showreels | High-conversion pages (scroll depth reduces conversion), dashboard apps, utility tools | Both | Medium-High — JavaScript animation triggers and asset loading | 2014–present |
|
|
47
|
+
| Product Demo | embedded interactive preview, annotated feature callouts, tooltip overlays | Inline iframe or video demo above fold; numbered callout dots on screenshot; feature spotlight with progressive disclosure; before/after toggle; interactive hotspot map | SaaS product landing pages, browser extension pages, design tool showcases | Services businesses (no product to demo), content sites, physical product e-commerce | Both | Medium — video autoplay and interactive elements | 2016–present |
|
|
48
|
+
| Trust-Builder | certification display, testimonial photography, risk-reduction copy, authority signals | Client logo strip at top of page; testimonial cards with real photos (not stock); certification badges (SOC 2, ISO, G2); security copy near forms; money-back guarantee callout | B2B SaaS sales pages, fintech onboarding, legal/compliance products, high-ticket e-commerce | Consumer social apps, entertainment (trust signals read as corporate), developer tools (badges feel marketing-y) | Both | Low | 2012–present |
|
|
49
|
+
| Playful Consumer | rounded UI, emoji integration, micro-animations, confetti moments | border-radius: 24–32px everywhere; emoji in headings; lottie animation for success states; confetti particle burst on conversion; pastel color fills; bouncy spring animations (spring: 200ms) | Consumer apps, gifting platforms, children's products, food delivery, social features | Enterprise, financial products, healthcare, government | Both | Medium — Lottie/animation assets | 2018–present |
|
|
50
|
+
| Dark Premium | full dark canvas, gold or silver accents, whitespace-heavy, editorial hierarchy | Background #0A0A0A; accent: gold (#B8860B or #D4AF37) or silver (#C0C0C0); large display serif or geometric sans at 80–120px; section-level spacing (120–200px vertical rhythm) | Luxury SaaS, high-end service brands, premium membership products, whiskey/watch brands | Mass-market consumer apps, anything needing color variety for information hierarchy | Dark | Low | 2018–present |
|
|
51
|
+
| Typography-Led | large type as hero element, minimal imagery, type as design | Display type at 100–200px viewport width; type positioned absolutely over background color; tight leading (line-height 0.9–1.1) at display scale; type color is the background color inverted | Editorial brands, design agencies, type foundries, artist/creative portfolios | Functional apps (type-only layouts hide UI conventions), e-commerce (products need imagery) | Both | Lowest | Print tradition; digital 2015–present |
|
|
52
|
+
| Data-Driven | charts and statistics as hero visual, number-forward design | Large KPI numbers at 80–120px in hero; inline sparkline or bar chart in above-fold section; data annotation typography; monospace or tabular numerals; confidence interval UI | Analytics tools, investor relations pages, research organizations, fintech reporting features | Lifestyle brands, emotional products, services without clear metrics | Both | Low — static SVG charts | 2019–present |
|
|
53
|
+
| Data Dense | information-maximized layout, minimal chrome, small type | 12–13px body in tables; 4–8px row padding; no card containers (table row is the container); tooltips over labels to save space; condensed font weight; color coded only for status | Bloomberg-style terminals, trading desks, operations centers, medical records systems | Consumer apps (cognitive overload), mobile-primary experiences, accessibility-critical | Both (dark preferred for terminal contexts) | Low | 1990s terminal origin; modern SaaS 2012–present |
|
|
54
|
+
| Executive Dashboard | large KPIs, traffic-light status indicators, minimal labels, decision-oriented | KPI cards at 48–64px number size; 3-color status system (green/amber/red for good/warning/critical); sparkline trend line per KPI; maximum 6 KPIs above fold; no data tables in primary view | C-suite reporting dashboards, board packs, PE portfolio monitoring, business reviews | Operational monitoring (needs more granularity), self-serve analytics (needs exploration) | Both | Low | 2010–present |
|
|
55
|
+
| Operational Monitor | real-time status indicators, alert color system, live data feel, dense timeline | WebSocket or SSE refresh indicator; color-coded service status dots; rolling log window (monospace, dark); alert banner docking at top; incident timeline view | DevOps dashboards, NOC (network operations center), cloud infrastructure monitoring, on-call tools | Executive reporting, consumer apps, any latency-sensitive rendering environment | Dark primary | Medium — live data updates | 2012–present |
|
|
56
|
+
| Data Storytelling | prose plus inline charts, guided narrative, progressive disclosure of complexity | Section header states the finding; chart below supports it; annotation layer on chart pointing to key data moment; reading-width body column (640–720px); chapter progress indicator | Insight reports, analytics product "stories" feature, investor updates, public data journalism | Self-serve exploration dashboards (storytelling is prescriptive, not exploratory), real-time ops | Both | Low | 2017–present |
|
|
57
|
+
| Grid/Matrix | dense tabular layout, frozen headers, column sorting, data comparison | CSS sticky column headers; alternating row background (zebra stripe); column resize handles; monospace numbers; sort indicator arrows; cell-level color coding for heatmaps | Financial data apps, CRM list views, ERP interfaces, spreadsheet-replacement tools | Dashboards with narrative focus, mobile primary (tables on mobile are difficult) | Both | Low — but DOM size can be high; virtualize rows beyond 500 | 2000–present |
|
|
58
|
+
| Graph/Network | node-edge visualization, force-directed layout, interactive topology | SVG or Canvas force-directed graph; node size encodes metric; edge color encodes relationship type; zoom and pan; node inspection panel on click; cluster isolation on hover | Dependency maps, org charts, knowledge graphs, security blast-radius visualization | Reports (static charts better for non-interactive), mobile primary | Both | High — force simulation is CPU-intensive; use WebGL for >1000 nodes | 2012–present |
|
|
59
|
+
| Geospatial | map-first layout, choropleth overlays, geographic filter | Full-bleed map as primary content area (Mapbox/Leaflet); choropleth color scale in legend; point cluster markers; polygon selection for region drill-down; sidebar for data detail | Logistics route analytics, retail location analytics, real estate market maps, public health dashboards | Products with no inherently geographic data, mobile with small screen | Both | High — map tile loading and vector layer rendering | 2010–present |
|
|
60
|
+
| Timeline-First | chronological layout, Gantt-inspired, temporal density | Horizontal scroll timeline; date-stamped lane per entity; milestone markers; dependency lines between tasks; zoom from year → week → day; color coding per project/team | Project management tools, roadmap views, history visualization, editorial production tracking | Real-time monitoring (timeline is retrospective), KPI dashboards | Both | Medium — virtualized timeline required for long date ranges | 2015–present |
|
|
61
|
+
| Comparison View | side-by-side panels, diff highlighting, symmetrical layout | Two-column layout at 50%/50%; synchronized scroll; highlighted diff lines (green/red) or changed values; overlay mode toggle; summary diff count in header | A/B test result dashboards, design diff tools, version comparison, benchmark analysis | Single-subject dashboards, mobile primary (two columns collapse badly) | Both | Low | 2015–present |
|
|
62
|
+
| Mobile Analytics | touch-optimized charts, swipe navigation, bottom-sheet detail | Horizontal bar charts (not vertical — finger-friendly tap targets); swipe between metric cards; bottom-sheet expansion for drill-down; large tap targets (48px minimum); chart gestures (pinch-zoom) | Field sales apps, retail staff dashboards, on-the-go executive views, mobile-first ops tools | Desktop-primary tools (mobile patterns feel cramped on large screens), data-dense tables | Both | Low — but chart libraries must support touch events | 2018–present |
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Surfaces
|
|
2
|
+
Source: jakubkrehel/make-interfaces-feel-better (MIT) — surfaces.md
|
|
3
|
+
|
|
4
|
+
Rules for nested surfaces, optical alignment, shadow systems, image outlines, and hit areas.
|
|
5
|
+
|
|
6
|
+
## Concentric Radius Formula
|
|
7
|
+
|
|
8
|
+
When nesting interactive elements inside a container (e.g., a card with a button, or a modal with an input), the inner radius must be SMALLER than the outer radius — by exactly the padding between them:
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
outerRadius = innerRadius + padding
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Or equivalently:
|
|
15
|
+
```
|
|
16
|
+
innerRadius = outerRadius − padding
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Example: card with `border-radius: 16px` and `padding: 16px` → inner elements should use `border-radius: 0px` (16 − 16 = 0). If padding is 8px → `border-radius: 8px` for inner elements.
|
|
20
|
+
|
|
21
|
+
**Exception:** when `padding > 24px`, treat the inner element as a visually separate surface and apply its own standard radius (4/8/12px depending on its type).
|
|
22
|
+
|
|
23
|
+
Why this matters: same radius on nested surfaces creates a visual disconnect — the inner element appears to "float" without belonging to the outer surface. The concentric formula creates perceptual depth and containment.
|
|
24
|
+
|
|
25
|
+
## Optical Alignment
|
|
26
|
+
|
|
27
|
+
Mathematical centering ≠ optical centering for asymmetric elements:
|
|
28
|
+
|
|
29
|
+
- **Icon with text:** `padding-inline-start` for the icon side should be 2px less than `padding-inline-end` for the text side. This corrects for the visual weight imbalance.
|
|
30
|
+
- **Play/chevron triangles:** shift right by 2px from mathematical center — triangles have more visual mass on their left side (the flat edge).
|
|
31
|
+
- **SVG icons with irregular bounding box:** inspect the actual glyph bounds, not the viewBox. Add `padding` to compensate for asymmetric whitespace within the SVG.
|
|
32
|
+
|
|
33
|
+
## 3-Layer Shadow System
|
|
34
|
+
|
|
35
|
+
Build shadows from three stacked layers, not a single `box-shadow`:
|
|
36
|
+
|
|
37
|
+
```css
|
|
38
|
+
/* Light mode */
|
|
39
|
+
.card {
|
|
40
|
+
box-shadow:
|
|
41
|
+
0 1px 2px rgba(0,0,0,0.06), /* sharp close shadow — elevation definition */
|
|
42
|
+
0 4px 8px rgba(0,0,0,0.06), /* soft ambient — depth blending */
|
|
43
|
+
0 8px 16px rgba(0,0,0,0.04); /* wide diffuse — air gap */
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* Dark mode */
|
|
47
|
+
.card {
|
|
48
|
+
box-shadow:
|
|
49
|
+
0 1px 2px rgba(0,0,0,0.3),
|
|
50
|
+
0 4px 8px rgba(0,0,0,0.3),
|
|
51
|
+
0 8px 16px rgba(0,0,0,0.2),
|
|
52
|
+
inset 0 1px 0 rgba(255,255,255,0.08); /* subtle top rim on dark */
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
The inset rim on dark mode (`rgba(255,255,255,0.08)`) simulates a light source from above, which is the visual cue that makes dark cards feel like physical surfaces rather than holes in the UI.
|
|
57
|
+
|
|
58
|
+
Scale the multipliers for elevation levels:
|
|
59
|
+
- Level 0 (flat): no shadow
|
|
60
|
+
- Level 1 (card): values above
|
|
61
|
+
- Level 2 (dropdown): multiply blur radii by ~2
|
|
62
|
+
- Level 3 (modal): add a full-screen scrim behind
|
|
63
|
+
|
|
64
|
+
## Image Outlines
|
|
65
|
+
|
|
66
|
+
Images always look better with a subtle outline that separates them from the background:
|
|
67
|
+
|
|
68
|
+
```css
|
|
69
|
+
img {
|
|
70
|
+
outline: 1px solid rgba(0,0,0,0.08); /* light mode */
|
|
71
|
+
outline-offset: -1px; /* inside the image boundary */
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* Dark mode */
|
|
75
|
+
img { outline: 1px solid rgba(255,255,255,0.08); }
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Hard rule:** Never tint the outline with a color. Use pure black at low opacity (light) or pure white at low opacity (dark). A tinted outline competes with the image colors and creates visual noise.
|
|
79
|
+
|
|
80
|
+
This applies to:
|
|
81
|
+
- Avatar photos
|
|
82
|
+
- Product images
|
|
83
|
+
- Screenshots
|
|
84
|
+
- User-uploaded content
|
|
85
|
+
|
|
86
|
+
Not needed for: SVG illustrations (they have their own defined boundary), icons, decorative graphics.
|
|
87
|
+
|
|
88
|
+
## Hit Area Extension
|
|
89
|
+
|
|
90
|
+
Interactive elements smaller than 40×40px must have their tap target extended without changing visual size:
|
|
91
|
+
|
|
92
|
+
```css
|
|
93
|
+
.icon-button {
|
|
94
|
+
position: relative;
|
|
95
|
+
width: 20px;
|
|
96
|
+
height: 20px;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.icon-button::after {
|
|
100
|
+
content: '';
|
|
101
|
+
position: absolute;
|
|
102
|
+
inset: -10px; /* extends each side by 10px → 40×40 total */
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
For primary actions, extend to 48×48px (`inset: -14px` for a 20px icon).
|
|
107
|
+
|
|
108
|
+
**Collision rule:** when two interactive elements are adjacent (e.g., toolbar icons), calculate whether the extended hit areas overlap. If overlap exceeds 4px, reduce the extension on the shared side. Never let invisible hit areas steal taps from adjacent elements.
|
|
109
|
+
|
|
110
|
+
Target sizes:
|
|
111
|
+
- Secondary/icon-only actions: 40×40px minimum
|
|
112
|
+
- Primary CTAs: 48×48px minimum
|
|
113
|
+
- Navigation items (mobile): 48×48px minimum
|
|
114
|
+
- Touch-critical actions (checkout, send): 48×48px minimum
|
package/reference/typography.md
CHANGED
|
@@ -227,3 +227,83 @@ Always include a non-variable fallback of the same family in the font stack:
|
|
|
227
227
|
```css
|
|
228
228
|
font-family: 'InterVariable', 'Inter', -apple-system, system-ui, sans-serif;
|
|
229
229
|
```
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Micro-Typography
|
|
234
|
+
Source: jakubkrehel/make-interfaces-feel-better (MIT) — typography.md
|
|
235
|
+
|
|
236
|
+
### text-wrap
|
|
237
|
+
|
|
238
|
+
Use `text-wrap: balance` for headings to prevent orphaned single words:
|
|
239
|
+
```css
|
|
240
|
+
h1, h2, h3 { text-wrap: balance; }
|
|
241
|
+
```
|
|
242
|
+
Chromium supports up to 6 lines, Firefox up to 10. Do not apply to body text (performance cost scales with line count). For body copy and captions, use `text-wrap: pretty` instead — it prevents widows (dangling last words) without the line-count restriction.
|
|
243
|
+
|
|
244
|
+
### Font smoothing
|
|
245
|
+
|
|
246
|
+
Apply antialiasing at root level only:
|
|
247
|
+
```css
|
|
248
|
+
:root {
|
|
249
|
+
-webkit-font-smoothing: antialiased;
|
|
250
|
+
-moz-osx-font-smoothing: grayscale;
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
Never apply per-element — this creates inconsistency within a single text block and is one of the most common micro-typography mistakes. The antialiased value makes text appear slightly thinner/lighter, which is generally preferred for UI type at modern screen densities.
|
|
254
|
+
|
|
255
|
+
### Tabular numerals
|
|
256
|
+
|
|
257
|
+
Use tabular-nums on any surface where numbers change dynamically or need to align in columns:
|
|
258
|
+
```css
|
|
259
|
+
.counter, .price, .timer, .table-cell { font-variant-numeric: tabular-nums; }
|
|
260
|
+
```
|
|
261
|
+
Proportional numerals (the default) cause text to shift width when numbers change, creating a distracting jitter in timers and prices. Exception: Inter's `1` character widens slightly with tabular-nums — test at your numeric composition before committing.
|
|
262
|
+
|
|
263
|
+
## Font Pairings Catalog
|
|
264
|
+
Source: nextlevelbuilder/ui-ux-pro-max-skill (MIT) — data/typography.csv
|
|
265
|
+
|
|
266
|
+
57 professionally curated pairings grouped by use-case vertical. For font loading, see `reference/data/google-fonts.csv` for the full 1923-font reference.
|
|
267
|
+
|
|
268
|
+
### SaaS / Productivity
|
|
269
|
+
- **Inter + Inter** (mono weight hierarchy) — The "safe default" for app UIs. Use regular (400) for body, medium (500) for labels, semibold (600) for headings. Consistent x-height, excellent at small sizes.
|
|
270
|
+
- **Inter + JetBrains Mono** — For dev tools and dashboards with code display. JetBrains Mono has excellent legibility at 12-14px.
|
|
271
|
+
- **Geist Sans + Geist Mono** — Vercel's pair; clean, modern, designed together.
|
|
272
|
+
- **Outfit + DM Mono** — Friendly SaaS feel with clear code fallback.
|
|
273
|
+
|
|
274
|
+
### Consumer / Marketing
|
|
275
|
+
- **Satoshi + Cabinet Grotesk** — High-energy, modern consumer feel.
|
|
276
|
+
- **Plus Jakarta Sans + Syne** — Playful but legible; works for creative consumer apps.
|
|
277
|
+
- **DM Sans + DM Serif Display** — Classic pairing; editorial headers, clean body.
|
|
278
|
+
- **Nunito + Source Code Pro** — Approachable and friendly.
|
|
279
|
+
|
|
280
|
+
### Finance / Enterprise
|
|
281
|
+
- **IBM Plex Sans + IBM Plex Mono** — Authoritative, systematic, designed for data-heavy interfaces.
|
|
282
|
+
- **Source Sans 3 + Source Code Pro** — Adobe's workhorse pair; widely trusted.
|
|
283
|
+
- **Lato + Roboto Mono** — Clean, neutral enterprise pair.
|
|
284
|
+
|
|
285
|
+
### Editorial / Publishing
|
|
286
|
+
- **Playfair Display + Source Serif 4** — High contrast serif headers with readable body serif.
|
|
287
|
+
- **Cormorant Garamond + Proza Libre** — Elegant luxury/editorial tone.
|
|
288
|
+
- **Libre Baskerville + Libre Franklin** — Free-license editorial pair.
|
|
289
|
+
- **EB Garamond + Lato** — Classic print feel with modern body.
|
|
290
|
+
|
|
291
|
+
### Wellness / Health
|
|
292
|
+
- **Nunito + Nunito Sans** — Soft, approachable, consistent x-height.
|
|
293
|
+
- **Quicksand + Work Sans** — Rounded, friendly, healthcare-appropriate.
|
|
294
|
+
- **Raleway + Open Sans** — Clean and welcoming.
|
|
295
|
+
|
|
296
|
+
### Dev Tools
|
|
297
|
+
- **JetBrains Mono + Inter** — Code-first, UI-second; natural for developer tools.
|
|
298
|
+
- **Fira Code + Fira Sans** — Cohesive family; ligatures available.
|
|
299
|
+
- **Cascadia Code + Segoe UI** — Microsoft's modern dev pair.
|
|
300
|
+
|
|
301
|
+
### Luxury / Fashion
|
|
302
|
+
- **Cormorant + Montserrat** — High contrast serif + geometric sans; classic luxury.
|
|
303
|
+
- **Bodoni Moda + Jost** — Fashion editorial feel.
|
|
304
|
+
- **Playfair Display + Raleway** — Elegant header + clean body.
|
|
305
|
+
|
|
306
|
+
### Gaming / Entertainment
|
|
307
|
+
- **Syne + DM Sans** — Bold, energetic headers; clean readable body.
|
|
308
|
+
- **Bebas Neue + Open Sans** — Impact headlines; neutral body.
|
|
309
|
+
- **Exo 2 + Roboto** — Futuristic but readable.
|