agentleFS
smiling66652smiling66652/workbuddy-skill-toolkits/ui-design/SKILL.md

ui-design

Skill1 starsChanged 48 days agoMITView on GitHub

UI 设计基础总纲:布局、排版、色彩、间距、视觉层级、响应式、无障碍、动效、组件状态、设计 Token 三层架构, 含「设计质量 80/20」权重表、8px 间距标尺、1.25 字号阶、WCAG 对比度表,以及交付前 7 类检查清单。 触发词:UI设计、界面设计、设计基础、排版规范、配色、色彩搭配、间距系统、视觉层级、 设计审查、设计质量、组件状态、hover态、focus态、设计token、CSS变量、网页美化、视觉规范 不用于:创意美学方向选择(走 frontend-design-guidelines);具体 CSS 语法写法(走 responsive-design)

We split this skill into the rules it gives an agent

4 rules. 0 are common, 4 are distinctive, and 0 are very specific to this project.

  • 0

    Common

    Most of the 48 edited versions we read keep these.

  • 4

    Distinctive

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Every palette needs five functional roles:

    line 154
  2. Distinctive:

    Create depth through lightness, not shadows:

    line 166
  3. Distinctive:

    Use motion to communicate, not decorate.

    line 341
  4. Distinctive:

    Every interactive element needs clear states.

    line 384

“Common” is measured: kept by at least 6 in 10 of the 48 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

UI Design Fundamentals

The definitive guide for building production-grade web interfaces. Covers the full stack of design decisions from layout to motion.

WHEN To Use

  • Designing new UI components or pages
  • Building landing pages, dashboards, or applications
  • Reviewing code for design quality
  • Creating distinctive interfaces that avoid generic aesthetics
  • Implementing accessibility requirements

KEYWORDS

ui design, web design, layout, typography, color palette, spacing, visual hierarchy, responsive design, accessibility, motion design, component design, design tokens, frontend, css, tailwind


Design Philosophy

The 80/20 of Design Quality

FactorImpactTime Investment
Typography40%Choose 1-2 fonts well
Spacing25%Use consistent scale
Color20%Limit palette, ensure contrast
Everything else15%Shadows, borders, motion

Focus on typography and spacing first. They're 65% of perceived quality.

Commit to a Direction

Mediocrity is forgettable. Pick an extreme:

DirectionCharacteristicsUse When
Brutally MinimalStark, essential, nothing extraDeveloper tools, productivity
Luxury/RefinedPremium, subtle eleganceHigh-end products, fashion
PlayfulFun, bright, approachableConsumer apps, games
EditorialType-forward, grid-basedContent sites, magazines
IndustrialFunction-forward, robustB2B, enterprise

Layout

Grid vs Flexbox Decision

Layout NeedToolWhy
Page-level structureCSS Grid (grid-template-areas)Named regions, explicit control
Navigation barsFlexboxSingle-axis, gap spacing
Card gridsGrid (auto-fill/auto-fit)Responsive without media queries
CenteringGrid (place-items: center)Shortest, most reliable
Sidebar + contentGrid (250px 1fr)Fixed + fluid
Stacking/overlapsGrid + grid-area: 1/1No position: absolute needed

Container Strategy

/* Standard content width */
.container {
  width: 100%;
  max-width: 1280px;
  margin-inline: auto;
  padding-inline: clamp(1rem, 5vw, 3rem);
}

/* Full-bleed with contained content */
.full-bleed {
  width: 100vw;
  margin-left: calc(50% - 50vw);
}

Common Layout Mistakes

MistakeProblemFix
Mixing container widthsInconsistent alignmentUse single max-w-* value
Content behind fixed navbarHidden contentAdd pt-[navbar-height]
No mobile paddingEdge-to-edge textAdd px-4 minimum
Centered everythingWeak hierarchyLeft-align body text

Typography

Typography carries 90% of a design's personality.

Font Pairing by Context

ContextDisplay FontBody FontExample
EditorialHigh-contrast serifNeutral humanistPlayfair + Source Sans
SaaSGeometric sansMatching sansDM Sans + DM Mono
LuxuryThin modern serifElegant sansCormorant + Jost
DeveloperMonospace displayMonospace bodyJetBrains Mono + IBM Plex
PlayfulRounded/quirkyClean readableNunito + Outfit

Type Scale (1.25 ratio)

--text-xs: 0.64rem;   /* 10px - captions */
--text-sm: 0.8rem;    /* 13px - secondary */
--text-base: 1rem;    /* 16px - body */
--text-lg: 1.25rem;   /* 20px - lead */
--text-xl: 1.563rem;  /* 25px - h4 */
--text-2xl: 1.953rem; /* 31px - h3 */
--text-3xl: 2.441rem; /* 39px - h2 */
--text-4xl: 3.052rem; /* 49px - h1 */

Typography Rules

RuleValueWhy
Minimum body size16pxBelow is hard to read
Body line-height1.5-1.75Improves readability
Heading line-height1.1-1.2Tighter for large text
Line length60-75 charactersOptimal reading
Paragraph spacing1.5emClear separation

Typography Mistakes

MistakeProblemFix
System fonts onlyGeneric lookUse Google Fonts or variable fonts
Too many fontsVisual chaosMax 2 families
Weak weight contrastPoor hierarchyBold headings (600+), regular body
Long linesHard to readAdd max-w-prose (65ch)

Color

Building a Palette

Every palette needs five functional roles:

RolePurposeUsage
PrimaryBrand identityButtons, links, active states
NeutralText, backgroundsBody text, cards, dividers
AccentSecondary actionsTags, badges, highlights
SemanticFeedbackSuccess/warning/error states
SurfaceLayered backgroundsCards, modals, overlays

Surface Layering (Dark Mode)

Create depth through lightness, not shadows:

:root {
  --surface-0: hsl(220 15% 8%);   /* page background */
  --surface-1: hsl(220 15% 12%);  /* card */
  --surface-2: hsl(220 15% 16%);  /* raised element */
  --surface-3: hsl(220 15% 20%);  /* popover/modal */
}

Contrast Requirements (WCAG)

Text SizeMinimum RatioEnhanced (AAA)
Normal text (<18px)4.5:17:1
Large text (≥18px bold, ≥24px)3:14.5:1
UI components3:1—

Color Mistakes

MistakeProblemFix
Purple gradient on white"AI aesthetic" clichéUse intentional brand colors
Low contrast textAccessibility failTest with contrast checker
Color-only indicatorsColorblind users excludedAdd icons/text
Too many colorsVisual noise3-5 colors maximum
Light gray text on whiteUnreadableslate-600 minimum

Spacing

8px Base Unit Scale

--space-1: 0.25rem;  /* 4px - tight gaps */
--space-2: 0.5rem;   /* 8px - input padding */
--space-3: 0.75rem;  /* 12px - button padding */
--space-4: 1rem;     /* 16px - default spacing */
--space-6: 1.5rem;   /* 24px - section padding */
--space-8: 2rem;     /* 32px - section gaps */
--space-12: 3rem;    /* 48px - major breaks */
--space-16: 4rem;    /* 64px - page rhythm */

Spacing Rules

RuleImplementation
Use gap not marginsdisplay: flex; gap: var(--space-4)
Consistent paddingSame values on all cards/sections
More space between groupsLess space within groups (Gestalt)
No arbitrary valuesOnly use scale tokens

Spacing Mistakes

MistakeProblemFix
Arbitrary pixel valuesInconsistent rhythmUse spacing scale only
Margin on childrenMargin collapse bugsUse gap on parent
Equal spacing everywhereNo visual groupingMore between, less within
Tight mobile paddingCramped feelingMinimum p-4 on mobile

Visual Hierarchy

Guide the eye through deliberate contrast.

Hierarchy Techniques

TechniqueHowImpact
SizeHero 3-4x bodyImmediate focal point
WeightBold headings, regular bodyScannability
ColorPrimary vs mutedInformation layers
SpaceIsolation creates emphasisDraws attention
PositionTop-left anchors readingNatural flow

Card Hierarchy Pattern

Eyebrow  ← xs, uppercase, muted color
Title    ← xl, semibold, primary color
Body     ← base, secondary color, 1.6 line-height
Action   ← spaced apart, mt-4 minimum

Responsive Design

Breakpoint Strategy

BreakpointTargetKey Changes
< 640pxMobileSingle column, stacked nav, 44px touch targets
640-1024pxTabletTwo columns, collapsible sidebars
1024-1440pxDesktopFull layout, hover enabled
> 1440pxWideMax-width container, prevent ultra-wide lines

Fluid Techniques

/* Fluid typography */
h1 { font-size: clamp(2rem, 1.5rem + 2.5vw, 3.5rem); }

/* Fluid spacing */
section { padding-block: clamp(2rem, 1rem + 4vw, 6rem); }

/* Intrinsic grid */
.grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr));
  gap: var(--space-6);
}

Responsive Mistakes

MistakeProblemFix
No viewport metaBroken mobileAdd width=device-width
Fixed widthsOverflow on mobileUse max-w-* and %
Tiny touch targetsFrustrating tapsMinimum 44x44px
Hidden horizontal scrollBroken layoutTest at 375px width

Accessibility

Accessibility is not optional.

Critical Requirements

RequirementImplementationStandard
Color contrast4.5:1 normal, 3:1 largeWCAG 2.1 AA
Keyboard navigationTab order matches visualWCAG 2.1.1
Focus indicatorsVisible :focus-visible ringWCAG 2.4.7
Semantic HTML<button>, <nav>, <main>WCAG 1.3.1
Alt textDescriptive for imagesWCAG 1.1.1
Motion safetyprefers-reduced-motionWCAG 2.3.3
Touch targets44×44px minimumWCAG 2.5.8

Focus Styles

:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

/* Remove default only if custom exists */
:focus:not(:focus-visible) {
  outline: none;
}

Motion Safety

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
  }
}

Motion & Animation

Use motion to communicate, not decorate.

Timing Guidelines

InteractionDurationEasing
Button hover150msease-out
Modal open250msease-out
Modal close200msease-in
Page transition300msease-in-out
Stagger delay50-80ms per item—
Micro-feedback100msease-out

Staggered Entrance

.item {
  opacity: 0;
  translate: 0 1rem;
  animation: reveal 0.5s ease-out forwards;
}
.item:nth-child(1) { animation-delay: 0ms; }
.item:nth-child(2) { animation-delay: 60ms; }
.item:nth-child(3) { animation-delay: 120ms; }

@keyframes reveal {
  to { opacity: 1; translate: 0 0; }
}

Motion Mistakes

MistakeProblemFix
Animating width/heightPerformance hitUse transform only
> 500ms durationFeels sluggish150-300ms for most
Motion everywhereOverwhelmingFocus on entrances/exits
No reduced-motionAccessibility failAlways check preference

Component States

Every interactive element needs clear states.

StateVisual Treatment
DefaultBase styling
HoverSubtle background/shadow shift
Active/PressedSlight inset, reduced shadow
FocusHigh-visibility ring
Disabled50% opacity, not-allowed cursor
LoadingSpinner or skeleton

Button Example

.btn {
  transition: all 150ms ease-out;
}
.btn:hover {
  background: var(--color-primary-600);
}
.btn:active {
  transform: scale(0.98);
}
.btn:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}
.btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

Design Tokens Architecture

Structure tokens in three layers:

/* Layer 1: Primitives */
--blue-500: oklch(0.55 0.2 250);
--gray-100: oklch(0.95 0.005 250);
--radius-md: 0.5rem;

/* Layer 2: Semantic */
--color-primary: var(--blue-500);
--color-surface: var(--gray-100);
--radius-button: var(--radius-md);

/* Layer 3: Component */
--btn-bg: var(--color-primary);
--btn-radius: var(--radius-button);
--btn-padding: var(--space-2) var(--space-4);

This allows theme switching by remapping Layer 2 only.


Pre-Delivery Checklist

Typography

  • Intentional font pairing (not system defaults)
  • Consistent type scale
  • Line length ≤ 75 characters
  • 16px minimum body text

Color

  • Cohesive palette (3-5 colors)
  • WCAG contrast met (4.5:1 normal, 3:1 large)
  • Semantic colors defined
  • Dark mode tested (if applicable)

Spacing

  • Consistent rhythm using scale
  • No arbitrary pixel values
  • Proper mobile padding

Hierarchy

  • Clear visual flow
  • Primary action obvious
  • Information layered by importance

Responsive

  • Mobile tested (375px)
  • No horizontal overflow
  • Touch targets ≥ 44px

Accessibility

  • Keyboard navigable
  • Focus visible
  • Screen reader tested
  • Motion-safe

States

  • Hover on all interactive elements
  • Focus-visible on all focusable
  • Loading states for async
  • Error states for forms

Performance

  • Images optimized (WebP, srcset)
  • Fonts subset
  • Animations use transform/opacity

NEVER Do

  1. NEVER skip contrast checking — Test every text/background combination
  2. NEVER use color alone — Always pair with icons/text for meaning
  3. NEVER remove focus outlines — Unless replacing with visible alternative
  4. NEVER use arbitrary spacing — Stick to the scale
  5. NEVER animate layout properties — Only transform and opacity
  6. NEVER ignore reduced-motion — Always check the preference
  7. NEVER center everything — Left-align body text
  8. NEVER use tiny touch targets — 44px minimum
  9. NEVER use low-contrast text — slate-600 minimum on white
  10. NEVER use generic system fonts — Choose intentional typography

Related Skills

  • ui-ux-pro-max — Searchable design databases with CLI
  • frontend-design — Creative aesthetics, avoiding "AI slop"
  • theme-factory — Applying themes to artifacts
  • design-system-patterns — Token architecture and theming

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.