Static visual judgment for generated or restyled UI. Load when you are about to produce or modify any user-facing surface - a landing/marketing page, product screen, mockup, or component styling - when a brief says "make it look good/premium/modern" with no design system attached, or when you notice generated UI converging on default AI aesthetics. NOT for motion decisions (motion-craft), for running a measured design review (design-review-gate), for charts (the environment's dataviz tooling), or for native mobile idiom questions (Apple HIG / Material directly).
AI-generated UI fails in a recognizable direction: it optimizes for the safe
average. The counter is not taste words - it is bans with exact signatures,
budgets with numbers, and a mechanical gate. One meta-rule governs the whole
file, learned from production tests upstream: "use sparingly" does not
transfer to a generating model; binary phrasing and countable caps do.
0. Classify the surface before generating anything
APP UI (dashboard, admin, dense product screens - including the
chrome AROUND embedded tables and editors): route the visual system to
an established design system (Material, Fluent, Carbon, Polaris, or the
project's own); from this file everything EXCEPT §2 applies - the §1
bans, §3 discipline, §4 states, §5 floors, §6 preservation on restyles,
and §7's gate minus its MARKETING group. The §2 marketing budgets do
NOT apply - a dashboard is allowed to be dense and repetitive.
HYBRID (product site with embedded app screens): classify each section.
Out of scope entirely - say so and route: the INTERNALS of data-grid
and code-editor widgets (TanStack/AG Grid, Monaco/CodeMirror - theme
them through their official APIs; the app chrome around them stays in
scope above), native mobile idiom (HIG/Material), realtime collaboration
surfaces.
If the project has a governing design contract (DESIGN.md, tokens file,
brand guide), it outranks every default in this file - verify and consume
it per design-review-gate ("the design contract"); the bans below still
apply to whatever the contract leaves open.
1. The ban list (AI tells, with signatures)
Hard bans by default; a ban yields only to an explicit brand fact or brief
requirement, stated in writing ("the brand IS purple" unlocks purple - the
override is the recorded reason, never silent).
Color tells
Default indigo/violet accent: #6366f1 #4f46e5 #8b5cf6 #7c3aed and their
Tailwind neighbors. The single most reliable AI fingerprint.
The "premium consumer" beige+brass+espresso family applied to every
luxury/artisan/wellness brief; same for olive/clay/terracotta earth tones
as an unresearched default.
Evenly distributed color with no accent hierarchy; semantic colors
(error/success) reused decoratively.
Typography tells
Fraunces or Instrument Serif as unjustified display defaults (the two
LLM-favorite serifs); any serif repeated from your previous project.
The decorative one-word swap: one headline word italicized, serif-ed, or
color-shifted purely to feel "designed". Distinction comes from layout,
scale, weight, or media - not a costume on one word.
Em-dash in generated page copy: zero, everywhere on the page -
headlines, body, captions, buttons, alt text. Upstream production tests
found models ignore "limit em-dashes"; only the binary form holds. Use a
hyphen or restructure. (Scope: copy on generated surfaces - not code, not
prose documents.)
ALL-CAPS or small labels without letter-spacing; italic descenders clipped
by tight line-height (leading below ~1.1 with no padding).
Container tells
Cards as the default grouping: if removing border+shadow+background+radius
hurts nothing, it was never a card - use sections, columns, dividers.
Decorative left accent stripe (border-left: 4px solid <accent>): stripes
carry meaning (status, priority, selection) or they go.
The 3-column icon-in-colored-circle feature grid, repeated symmetrically -
the single most recognizable signature of generated marketing pages.
"Split header" (huge left headline + small floating right paragraph) as a
section-header default; stack vertically instead, max-width ~65ch.
Hairline borders above AND below every row of a list or spec table.
Standard emoji standing in for icons: use an icon set or a plain
Unicode glyph (an arrow, a bullet, a diamond) - emoji as UI iconography
reads as unfinished work.
Label and meta tells
Eyebrow labels (small caps tracking-wide strings above headlines) above
every section. Cap: at most 1 eyebrow per 3 sections, hero included -
the check is a count, see §7.
Section numbering (001 · Capabilities), version stamps in heroes or
footers (v0.6, BETA, Build 0048), pagination on tiles (01 / 4).
Locale/weather/time strips ("LIS 14:23 · 18°C"), scroll cues ("Scroll to
explore"), decorative status dots, poetic section labels ("From the
field", "Quietly trusted by"), generic step labels ("Step 1 / Step 2" -
the verb is the label: "Install", "Configure", "Ship").
Middle-dot separator chains ("foo · bar · baz · qux") - max one · per
metadata line.
Fake-content tells
Div-built fake product UI in the hero (fake terminal, fake dashboard of
styled divs) - use a real screenshot, a real component, or nothing.
Placeholder people ("Jane Doe", "John Smith"), invented testimonials,
fake logos, fake metrics. Absent real content, design the empty state.
Image-led direction collapsed to text-only because no image was handy:
preserve the media slot with honest dimensions and an art-direction note
instead of faking imagery with CSS blobs.
Mode tells
Dark mode as an unrequested default: light is the baseline unless the
brief says otherwise (dark is a brand decision, not a vibe).
"Calm editorial" autopilot (cream canvas + oversized serif + airy spacing)
on products that need utility or proof. Before using it, write down why
THIS product earns an editorial voice; no written reason, no serif system.
2. Layout budgets (MARKETING surfaces)
Hero: headline max 2 lines desktop; subtext max 20 words; at most 4
text elements total (one eyebrow-or-brand-strip, headline, subtext, CTA
row of 1 primary + max 1 secondary); CTAs visible without scrolling; top
padding capped ~6rem. Trust logos, pricing teasers, and feature bullets
live in sections BELOW the hero, never inside it. If the value
proposition does not fit in 20 words, the proposition is unclear - fix
that, not the rule.
Headline scale is planned with the asset: 3-5 word headlines may take
the largest scale; 6+ words step down one or two sizes. A hero headline
wrapping to 4 lines is a font-size error, not a copy problem.
Navigation: single line at desktop, height max 80px (default 64-72px).
A two-line desktop nav is broken, not cozy.
Section rhythm: a layout family (3-col cards, full-width quote,
text+image split...) appears at most once per page - which itself
forces variety, no separate diversity quota needed; max 2 consecutive
alternating image/text "zigzag" sections - the third consecutive is a
gate failure.
Bento grids: exactly as many cells as there is content (3 items = a
1+2 or 2+1 composition, never a blank filler tile), and at least 2-3
cells carry real visual variation (image, tinted background, pattern) -
not six white-on-white text tiles.
Mobile collapse is declared per section in the same component; "the
framework will handle it" is not a declaration.
3. Type and color discipline
Hierarchy has 3-4 distinct levels, differentiated by weight and spacing,
not size alone.
Accent budget: at most 2 visible accent uses per screen. Spend them
deliberately - a highlighted label plus the primary action is the usual
allocation. Links draw from the same budget; once it is spent, style
them as underlined foreground text instead.
One lock each per page: ONE theme (no section flipping to inverted
mid-page), ONE accent applied identically, ONE corner-radius system.
Contrast floors (WCAG AA): text needs 4.5:1 at normal size and 3:1 only
at large size (large = at least 24px, or 18.66px bold) - placeholder
text and text over images or scrims
included, with no exemption for either; non-text UI needs 3:1 where
the visual carries identification or state (WCAG 1.4.11's scope -
inactive controls and unmodified browser defaults are exempt, and a
decorative boundary not needed to identify the control is too; this
pack treats focus and state indicators as always in scope, a
deliberately stricter pack floor); secondary BODY-size text needs
4.5:1 in both color modes - dark-mode secondary text is where this
fails silently.
Micro text is whitelisted, not vibes-based: the smallest size (11px and
below) appears only in an enumerated role list you can state (timestamps,
badge pills, axis labels...) - any other use upgrades a size.
4. State coverage - the most reliable generated-UI failure
Shipping only the populated state IS the failure mode. Every surface that
fetches, accepts, or transforms data renders five states before it is done:
State
Must contain
Loading
skeleton/spinner plus a "taking longer than expected" fallback after ~10-15s
Empty
headline, plain explanation, primary CTA - designed, not blank
Error
plain-language cause, recovery action, user input preserved
Populated
the case you actually designed
Edge
extreme volume, long unbroken strings, missing optional fields
Edge matrix to actually try: 10,000-row table with sort+filter; 200-char
title with no spaces; missing avatar/optional field; 0 results after a
filter; offline mid-submit. Render each and look - reading the code is not
rendering.
5. Platform floors (APP and touch surfaces)
Touch targets: 44x44pt (iOS) / 48x48dp (Android) minimum - the vendors'
published guidance (Apple phrases it as a rule, Android as a
recommendation), adopted here as hard pack floors. Audits measure CSS px
(~= pt/dp at 1x) and apply to touch-capable surfaces; a
desktop-pointer-only UI may go smaller with the reason recorded.
Modal scrims visibly isolate the foreground: content behind reads as
inert, and any text sitting over the scrim still meets the §3 floors.
Vendor anchor: Material defines scrim as a color ROLE, commonly
rendered at a 32%-black component default (Compose drawers, container
transform) - start there; heavier is a legitimate brand choice, while
a missing or near-invisible scrim is a defect.
Press/hover states never shift layout (no border-width or size jumps -
swap colors/elevation instead).
Every SUPPORTED color mode rendered and looked at before done, with
every applicable §4 state checked in each. A single-mode product passes
as single-mode - supporting dark is a product decision, and §1's tell
is about DEFAULTING to dark unasked, not about supporting it. Dark-mode
regressions hide in secondary text and disabled states.
6. Restyling an existing surface: preservation rules
A redesign is a visual change, not a silent content or interface change.
Never modify without explicit approval: URL slugs and anchor IDs, primary
nav labels, form field names and order (autofill + analytics depend on
them), the logo/wordmark, legal and consent copy. Extract existing brand
colors FIRST - a purple brand stays purple, overriding §1's indigo ban.
Never regress accessibility already present (focus states, alt text,
keyboard paths, contrast). These names are interfaces with hidden consumers
operational-rigor's call-site sweep applies to them, verbatim: "Interfaces
include observable output text and names." (canonical copy in
operational-rigor §3; on disagreement that file wins).
7. The pre-flight gate (mechanical)
Run before delivering the surface. Every box, honestly; if a single box
cannot be honestly ticked, the surface is not done. Counts are counted,
not estimated. Boxes group by §0's surface class - an APP UI surface skips
the MARKETING group because §0 scoped those budgets out, not as an escape
hatch.
All surfaces:
Surface classified (§0) and, for APP UI, a design system named?
Zero em-dashes in page copy (search the output for the character)?
Accent count per screen <= 2, and accent is none of the §1 hexes -
or the §1 brand override is quoted in writing? Check the COMPUTED
color (getComputedStyle), not only a hex grep - rgb()/hsl()
spellings evade a literal search.
One theme lock, one accent lock, one radius system?
WCAG AA floors pass for text, CTAs, forms, placeholders, focus rings?
§4 states: all five rendered and looked at on every surface that
fetches, accepts, or transforms data; purely static surfaces get an
explicit N/A (say so, don't skip silently)?
No banned tell present without a written brand/brief override?
Restyle only: §6 preservation list untouched or approval quoted?
MARKETING surfaces (and the marketing sections of a HYBRID):
Running a measured review with a fix loop -> design-review-gate; its
static pass applies this file's gate.
Charts and data visualization -> the environment's dataviz tooling.
Native mobile idiom -> Apple HIG / Material directly.
Brand identity creation (naming, logo) - out of scope for this pack.
Provenance
Composed 2026-07-19 for design-pack 0.1.0. The ban corpus and layout budgets
are curated - deliberately not imported wholesale - from three MIT sources
verified in their repos at composition time: Leonxlnx/taste-skill (layout
hard rules incl. hero/nav/zigzag/bento/eyebrow caps and their mechanical
counts, the production-test tell corpus, the em-dash binary and its
"use sparingly fails" lesson, preservation rules, the pre-flight
if-one-box-fails framing; its full §9-10 corpus remains the deeper upstream
reference), referodesign/refero_skill (indigo/cards/dark-default/calm-
editorial/emoji/stripe tells, litmus tests, media-slot preservation), and
Emil Kowalski's skills (context; his marketing directives stripped).
From Apache-2.0 nexu-io/open-design: the accent-budget number and
tiered-ban severity as ideas, and §4's five-state table as ADAPTED
EXPRESSION carried under Apache-2.0 (notice in THIRD-PARTY-NOTICES) -
not an ideas-only borrow. Ideas without text from MIT garrytan/gstack
(surface classifier, icon-circle-grid tell - independently listed by
taste-skill) and MIT creativetimofficial/ui (micro-text whitelist
technique). WCAG/HIG/Material
floors are vendor facts - re-verify on major vendor releases; hex lists and
font-fashion bans are the fastest-decaying facts here (they track model
training data - revisit each model generation). Probe status: probe-tested
2026-07-19 on a private planted-slop fixture (fresh weak-tier agent, n=1
per arm, smoke grade): the bare arm found 0 of 7 planted tells - returning
CSS-engineering nits instead - while the ruled arm found 6 of 7 with rule
citations plus budget catches beyond the plants; it missed the em-dash
tell, recorded as the arm's one gap (rule retained - one miss is not yet a
wrong rule, skill-authoring §7). A round-0 run was voided for a leaked
in-fixture answer key, caught by the expected-before-actual discrepancy
rather than the score. Trail in the design-pack PR.
1---2name: ui-design-craft3description: Static visual judgment for generated or restyled UI. Load when you are about to produce or modify any user-facing surface - a landing/marketing page, product screen, mockup, or component styling - when a brief says "make it look good/premium/modern" with no design system attached, or when you notice generated UI converging on default AI aesthetics. NOT for motion decisions (motion-craft), for running a measured design review (design-review-gate), for charts (the environment's dataviz tooling), or for native mobile idiom questions (Apple HIG / Material directly).4---56# UI Design Craft78AI-generated UI fails in a recognizable direction: it optimizes for the safe9average. The counter is not taste words - it is bans with exact signatures,10budgets with numbers, and a mechanical gate. One meta-rule governs the whole11file, learned from production tests upstream: **"use sparingly" does not12transfer to a generating model; binary phrasing and countable caps do.**1314## 0. Classify the surface before generating anything1516First action, before any code or mockup:1718- **MARKETING** (landing, portfolio, about, pricing): all sections below19 apply, §2 layout budgets included.20- **APP UI** (dashboard, admin, dense product screens - including the21 chrome AROUND embedded tables and editors): route the visual system to22 an established design system (Material, Fluent, Carbon, Polaris, or the23 project's own); from this file everything EXCEPT §2 applies - the §124 bans, §3 discipline, §4 states, §5 floors, §6 preservation on restyles,25 and §7's gate minus its MARKETING group. The §2 marketing budgets do26 NOT apply - a dashboard is allowed to be dense and repetitive.27- **HYBRID** (product site with embedded app screens): classify each section.28- Out of scope entirely - say so and route: the INTERNALS of data-grid29 and code-editor widgets (TanStack/AG Grid, Monaco/CodeMirror - theme30 them through their official APIs; the app chrome around them stays in31 scope above), native mobile idiom (HIG/Material), realtime collaboration32 surfaces.33- If the project has a governing design contract (DESIGN.md, tokens file,34 brand guide), it outranks every default in this file - verify and consume35 it per `design-review-gate` ("the design contract"); the bans below still36 apply to whatever the contract leaves open.3738## 1. The ban list (AI tells, with signatures)3940Hard bans by default; a ban yields only to an explicit brand fact or brief41requirement, stated in writing ("the brand IS purple" unlocks purple - the42override is the recorded reason, never silent).4344**Color tells**45- Default indigo/violet accent: `#6366f1 #4f46e5 #8b5cf6 #7c3aed` and their46 Tailwind neighbors. The single most reliable AI fingerprint.47- The "premium consumer" beige+brass+espresso family applied to every48 luxury/artisan/wellness brief; same for olive/clay/terracotta earth tones49 as an unresearched default.50- Evenly distributed color with no accent hierarchy; semantic colors51 (error/success) reused decoratively.5253**Typography tells**54- Fraunces or Instrument Serif as unjustified display defaults (the two55 LLM-favorite serifs); any serif repeated from your previous project.56- The decorative one-word swap: one headline word italicized, serif-ed, or57 color-shifted purely to feel "designed". Distinction comes from layout,58 scale, weight, or media - not a costume on one word.59- Em-dash in generated page copy: **zero**, everywhere on the page -60 headlines, body, captions, buttons, alt text. Upstream production tests61 found models ignore "limit em-dashes"; only the binary form holds. Use a62 hyphen or restructure. (Scope: copy on generated surfaces - not code, not63 prose documents.)64- ALL-CAPS or small labels without letter-spacing; italic descenders clipped65 by tight line-height (leading below ~1.1 with no padding).6667**Container tells**68- Cards as the default grouping: if removing border+shadow+background+radius69 hurts nothing, it was never a card - use sections, columns, dividers.70- Decorative left accent stripe (`border-left: 4px solid <accent>`): stripes71 carry meaning (status, priority, selection) or they go.72- The 3-column icon-in-colored-circle feature grid, repeated symmetrically -73 the single most recognizable signature of generated marketing pages.74- "Split header" (huge left headline + small floating right paragraph) as a75 section-header default; stack vertically instead, max-width ~65ch.76- Hairline borders above AND below every row of a list or spec table.77- Standard emoji standing in for icons: use an icon set or a plain78 Unicode glyph (an arrow, a bullet, a diamond) - emoji as UI iconography79 reads as unfinished work.8081**Label and meta tells**82- Eyebrow labels (small caps tracking-wide strings above headlines) above83 every section. Cap: **at most 1 eyebrow per 3 sections, hero included** -84 the check is a count, see §7.85- Section numbering (`001 · Capabilities`), version stamps in heroes or86 footers (`v0.6`, `BETA`, `Build 0048`), pagination on tiles (`01 / 4`).87- Locale/weather/time strips ("LIS 14:23 · 18°C"), scroll cues ("Scroll to88 explore"), decorative status dots, poetic section labels ("From the89 field", "Quietly trusted by"), generic step labels ("Step 1 / Step 2" -90 the verb is the label: "Install", "Configure", "Ship").91- Middle-dot separator chains ("foo · bar · baz · qux") - max one `·` per92 metadata line.9394**Fake-content tells**95- Div-built fake product UI in the hero (fake terminal, fake dashboard of96 styled divs) - use a real screenshot, a real component, or nothing.97- Placeholder people ("Jane Doe", "John Smith"), invented testimonials,98 fake logos, fake metrics. Absent real content, design the empty state.99- Image-led direction collapsed to text-only because no image was handy:100 preserve the media slot with honest dimensions and an art-direction note101 instead of faking imagery with CSS blobs.102103**Mode tells**104- Dark mode as an unrequested default: light is the baseline unless the105 brief says otherwise (dark is a brand decision, not a vibe).106- "Calm editorial" autopilot (cream canvas + oversized serif + airy spacing)107 on products that need utility or proof. Before using it, write down why108 THIS product earns an editorial voice; no written reason, no serif system.109110## 2. Layout budgets (MARKETING surfaces)111112- **Hero:** headline max 2 lines desktop; subtext max 20 words; at most 4113 text elements total (one eyebrow-or-brand-strip, headline, subtext, CTA114 row of 1 primary + max 1 secondary); CTAs visible without scrolling; top115 padding capped ~6rem. Trust logos, pricing teasers, and feature bullets116 live in sections BELOW the hero, never inside it. If the value117 proposition does not fit in 20 words, the proposition is unclear - fix118 that, not the rule.119- **Headline scale is planned with the asset:** 3-5 word headlines may take120 the largest scale; 6+ words step down one or two sizes. A hero headline121 wrapping to 4 lines is a font-size error, not a copy problem.122- **Navigation:** single line at desktop, height max 80px (default 64-72px).123 A two-line desktop nav is broken, not cozy.124- **Section rhythm:** a layout family (3-col cards, full-width quote,125 text+image split...) appears at most once per page - which itself126 forces variety, no separate diversity quota needed; max 2 consecutive127 alternating image/text "zigzag" sections - the third consecutive is a128 gate failure.129- **Bento grids:** exactly as many cells as there is content (3 items = a130 1+2 or 2+1 composition, never a blank filler tile), and at least 2-3131 cells carry real visual variation (image, tinted background, pattern) -132 not six white-on-white text tiles.133- **Mobile collapse is declared per section** in the same component; "the134 framework will handle it" is not a declaration.135136## 3. Type and color discipline137138- Hierarchy has 3-4 distinct levels, differentiated by weight and spacing,139 not size alone.140- **Accent budget: at most 2 visible accent uses per screen.** Spend them141 deliberately - a highlighted label plus the primary action is the usual142 allocation. Links draw from the same budget; once it is spent, style143 them as underlined foreground text instead.144- One lock each per page: ONE theme (no section flipping to inverted145 mid-page), ONE accent applied identically, ONE corner-radius system.146- Contrast floors (WCAG AA): text needs 4.5:1 at normal size and 3:1 only147 at large size (large = at least 24px, or 18.66px bold) - placeholder148 text and text over images or scrims149 included, with no exemption for either; non-text UI needs 3:1 where150 the visual carries identification or state (WCAG 1.4.11's scope -151 inactive controls and unmodified browser defaults are exempt, and a152 decorative boundary not needed to identify the control is too; this153 pack treats focus and state indicators as always in scope, a154 deliberately stricter pack floor); secondary BODY-size text needs155 4.5:1 in both color modes - dark-mode secondary text is where this156 fails silently.157- Micro text is whitelisted, not vibes-based: the smallest size (11px and158 below) appears only in an enumerated role list you can state (timestamps,159 badge pills, axis labels...) - any other use upgrades a size.160161## 4. State coverage - the most reliable generated-UI failure162163Shipping only the populated state IS the failure mode. Every surface that164fetches, accepts, or transforms data renders five states before it is done:165166| State | Must contain |167|---|---|168| Loading | skeleton/spinner plus a "taking longer than expected" fallback after ~10-15s |169| Empty | headline, plain explanation, primary CTA - designed, not blank |170| Error | plain-language cause, recovery action, user input preserved |171| Populated | the case you actually designed |172| Edge | extreme volume, long unbroken strings, missing optional fields |173174Edge matrix to actually try: 10,000-row table with sort+filter; 200-char175title with no spaces; missing avatar/optional field; 0 results after a176filter; offline mid-submit. Render each and look - reading the code is not177rendering.178179## 5. Platform floors (APP and touch surfaces)180181- Touch targets: 44x44pt (iOS) / 48x48dp (Android) minimum - the vendors'182 published guidance (Apple phrases it as a rule, Android as a183 recommendation), adopted here as hard pack floors. Audits measure CSS px184 (~= pt/dp at 1x) and apply to touch-capable surfaces; a185 desktop-pointer-only UI may go smaller with the reason recorded.186- Modal scrims visibly isolate the foreground: content behind reads as187 inert, and any text sitting over the scrim still meets the §3 floors.188 Vendor anchor: Material defines scrim as a color ROLE, commonly189 rendered at a 32%-black component default (Compose drawers, container190 transform) - start there; heavier is a legitimate brand choice, while191 a missing or near-invisible scrim is a defect.192- Press/hover states never shift layout (no border-width or size jumps -193 swap colors/elevation instead).194- Every SUPPORTED color mode rendered and looked at before done, with195 every applicable §4 state checked in each. A single-mode product passes196 as single-mode - supporting dark is a product decision, and §1's tell197 is about DEFAULTING to dark unasked, not about supporting it. Dark-mode198 regressions hide in secondary text and disabled states.199200## 6. Restyling an existing surface: preservation rules201202A redesign is a visual change, not a silent content or interface change.203Never modify without explicit approval: URL slugs and anchor IDs, primary204nav labels, form field names and order (autofill + analytics depend on205them), the logo/wordmark, legal and consent copy. Extract existing brand206colors FIRST - a purple brand stays purple, overriding §1's indigo ban.207Never regress accessibility already present (focus states, alt text,208keyboard paths, contrast). These names are interfaces with hidden consumers209- operational-rigor's call-site sweep applies to them, verbatim: "Interfaces210include observable output text and names." (canonical copy in211operational-rigor §3; on disagreement that file wins).212213## 7. The pre-flight gate (mechanical)214215Run before delivering the surface. Every box, honestly; **if a single box216cannot be honestly ticked, the surface is not done.** Counts are counted,217not estimated. Boxes group by §0's surface class - an APP UI surface skips218the MARKETING group because §0 scoped those budgets out, not as an escape219hatch.220221All surfaces:222223- [ ] Surface classified (§0) and, for APP UI, a design system named?224- [ ] Zero em-dashes in page copy (search the output for the character)?225- [ ] Accent count per screen <= 2, and accent is none of the §1 hexes -226 or the §1 brand override is quoted in writing? Check the COMPUTED227 color (getComputedStyle), not only a hex grep - rgb()/hsl()228 spellings evade a literal search.229- [ ] One theme lock, one accent lock, one radius system?230- [ ] WCAG AA floors pass for text, CTAs, forms, placeholders, focus rings?231- [ ] §4 states: all five rendered and looked at on every surface that232 fetches, accepts, or transforms data; purely static surfaces get an233 explicit N/A (say so, don't skip silently)?234- [ ] No banned tell present without a written brand/brief override?235- [ ] Restyle only: §6 preservation list untouched or approval quoted?236237MARKETING surfaces (and the marketing sections of a HYBRID):238239- [ ] Eyebrow count <= ceil(sections / 3) (count uppercase-tracking labels)?240- [ ] Layout-family repetition within budget; zigzag run <= 2?241- [ ] Hero: <= 2-line headline, <= 20-word subtext, <= 4 text elements,242 CTA above the fold?243244APP UI surfaces:245246- [ ] Touch targets and scrim floors met (§5)?247248Litmus checks when a box feels arguable:249- **Card test:** remove border/shadow/background - if nothing breaks, it250 was not a card.251- **Identity test:** hide the logo - if the first viewport could belong to252 any company, the design is not done.253- **Editorial test:** swap the logo for a boutique hotel's - if the hero254 still reads plausible, you built generic calm-editorial, not this brand.255256## When NOT to use this skill257258- Motion decisions (durations, easing, springs) -> `motion-craft`.259- Running a measured review with a fix loop -> `design-review-gate`; its260 static pass applies this file's gate.261- Charts and data visualization -> the environment's dataviz tooling.262- Native mobile idiom -> Apple HIG / Material directly.263- Brand identity creation (naming, logo) - out of scope for this pack.264265## Provenance266267Composed 2026-07-19 for design-pack 0.1.0. The ban corpus and layout budgets268are curated - deliberately not imported wholesale - from three MIT sources269verified in their repos at composition time: Leonxlnx/taste-skill (layout270hard rules incl. hero/nav/zigzag/bento/eyebrow caps and their mechanical271counts, the production-test tell corpus, the em-dash binary and its272"use sparingly fails" lesson, preservation rules, the pre-flight273if-one-box-fails framing; its full §9-10 corpus remains the deeper upstream274reference), referodesign/refero_skill (indigo/cards/dark-default/calm-275editorial/emoji/stripe tells, litmus tests, media-slot preservation), and276Emil Kowalski's skills (context; his marketing directives stripped).277From Apache-2.0 nexu-io/open-design: the accent-budget number and278tiered-ban severity as ideas, and §4's five-state table as ADAPTED279EXPRESSION carried under Apache-2.0 (notice in THIRD-PARTY-NOTICES) -280not an ideas-only borrow. Ideas without text from MIT garrytan/gstack281(surface classifier, icon-circle-grid tell - independently listed by282taste-skill) and MIT creativetimofficial/ui (micro-text whitelist283technique). WCAG/HIG/Material284floors are vendor facts - re-verify on major vendor releases; hex lists and285font-fashion bans are the fastest-decaying facts here (they track model286training data - revisit each model generation). Probe status: probe-tested2872026-07-19 on a private planted-slop fixture (fresh weak-tier agent, n=1288per arm, smoke grade): the bare arm found 0 of 7 planted tells - returning289CSS-engineering nits instead - while the ruled arm found 6 of 7 with rule290citations plus budget catches beyond the plants; it missed the em-dash291tell, recorded as the arm's one gap (rule retained - one miss is not yet a292wrong rule, skill-authoring §7). A round-0 run was voided for a leaked293in-fixture answer key, caught by the expected-before-actual discrepancy294rather than the score. Trail in the design-pack PR.
Run npx skillmds@latest add f-e-u-e-r/ui-design-craft in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Static visual judgment for generated or restyled UI. Load when you are about to produce or modify any user-facing surface - a landing/marketing page, product screen, mockup, or component styling - when a brief says "make it look good/premium/modern" with no design system attached, or when you notice generated UI converging on default AI aesthetics. NOT for motion decisions (motion-craft), for running a measured design review (design-review-gate), for charts (the environment's dataviz tooling), or for native mobile idiom questions (Apple HIG / Material directly). It is listed under Marketing & Growth on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
F-e-u-e-r (@f-e-u-e-r) published this skill. Their other Agent Skills are listed on their SkillMD profile.