web-design

CSS implementation patterns for layout, typography, color, spacing, and responsive design. Complements ui-design (fundamentals) with code-focused examples.

7 stars

Best use case

web-design is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

CSS implementation patterns for layout, typography, color, spacing, and responsive design. Complements ui-design (fundamentals) with code-focused examples.

Teams using web-design should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/web-design/SKILL.md --create-dirs "https://raw.githubusercontent.com/wpank/ai/main/skills/design-systems/web-design/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/web-design/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How web-design Compares

Feature / Agentweb-designStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

CSS implementation patterns for layout, typography, color, spacing, and responsive design. Complements ui-design (fundamentals) with code-focused examples.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Web Design Patterns

CSS implementation patterns for production-grade interfaces. For design fundamentals and decision-making, see `ui-design`. This skill focuses on code.

> **See also:** `ui-design` for typography/color/spacing theory, `frontend-design` for creative aesthetics.


## Installation

### OpenClaw / Moltbot / Clawbot

```bash
npx clawhub@latest install web-design
```


## Layout Principles

Use CSS Grid for two-dimensional layouts and Flexbox for one-dimensional flow. Choose the right tool for each context.

| Layout Need | Tool | Why |
|---|---|---|
| Page-level structure | CSS Grid (`grid-template-areas`) | Named regions, explicit row/column control |
| Navigation bars | Flexbox | Single-axis alignment, spacing with `gap` |
| Card grids | Grid (`auto-fill` / `auto-fit`) | Responsive without media queries |
| Centering | Grid (`place-items: center`) | Shortest, most reliable centering |
| Sidebar + content | Grid (`grid-template-columns: 250px 1fr`) | Proportional sizing with fixed sidebar |
| Stacking overlaps | Grid + `grid-area: 1/1` | Layer elements without `position: absolute` |

### Spatial Composition

Go beyond predictable layouts. Intentional asymmetry, overlapping elements, and grid-breaking accents create visual interest. Use grid stacking (`grid-area: 1/1`) instead of `position: absolute` for overlapping elements. Choose generous negative space for luxury/editorial aesthetics, or controlled density for data-rich interfaces — the choice must be intentional.

## Typography

Typography carries 90% of a design's personality. Choose fonts that match the interface's purpose.

| Context | Display Font Direction | Body Font Direction | Example Pairing |
|---|---|---|---|
| Editorial / magazine | High-contrast serif | Neutral humanist sans | Playfair Display + Source Sans 3 |
| SaaS dashboard | Geometric sans | Matching weight sans | DM Sans + DM Mono (data) |
| Creative portfolio | Expressive display | Clean readable sans | Syne + Outfit |
| E-commerce luxury | Thin modern serif | Elegant sans | Cormorant Garamond + Jost |
| Developer tooling | Monospace display | Monospace body | JetBrains Mono + IBM Plex Mono |

### Type Scale

Use a consistent ratio. A 1.25 (major third) scale works for most interfaces: `text-xs` 0.64rem, `text-sm` 0.8rem, `text-base` 1rem, `text-lg` 1.25rem, `text-xl` 1.563rem, `text-2xl` 1.953rem, `text-3xl` 2.441rem, `text-4xl` 3.052rem. Set body text to `1rem` (16px minimum), line-height `1.5` for body, `1.1–1.2` for headings. Limit line length to `60–75ch`.

## Color

### Building a Palette

Every palette needs five functional roles:

| Role | Purpose | Example Usage |
|---|---|---|
| **Primary** | Brand identity, primary actions | Buttons, links, active states |
| **Neutral** | Text, borders, backgrounds | Body text, cards, dividers |
| **Accent** | Secondary actions, highlights | Tags, badges, secondary buttons |
| **Success / Warning / Error** | Semantic feedback | Toasts, form validation, status |
| **Surface** | Layered backgrounds | Cards on page, modals on overlay |

### Contrast and Depth

Create depth through surface layering, not just shadows:

```css
: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 */
}
```

Use HSL or OKLCH for perceptually uniform color manipulation. Dominant color with sharp accents outperforms evenly-distributed palettes. Always verify WCAG contrast: 4.5:1 for normal text, 3:1 for large text.

## Spacing

Consistent spacing creates rhythm. Use an 8px base unit (or 4px for dense UIs):

| Token | Value | Use |
|---|---|---|
| `--space-1` | 0.25rem (4px) | Inline icon gaps, tight padding |
| `--space-2` | 0.5rem (8px) | Input padding, compact lists |
| `--space-3` | 0.75rem (12px) | Button padding, card inner spacing |
| `--space-4` | 1rem (16px) | Default element spacing |
| `--space-6` | 1.5rem (24px) | Section padding, card gaps |
| `--space-8` | 2rem (32px) | Section separation |
| `--space-12` | 3rem (48px) | Major section breaks |
| `--space-16` | 4rem (64px) | Page-level vertical rhythm |

Apply spacing consistently: use `gap` on Grid/Flexbox containers instead of margins on children. This eliminates margin-collapse bugs and simplifies responsive adjustments.

## Visual Hierarchy

Guide the eye through deliberate contrast in size, weight, color, and space.

### Hierarchy Techniques

| Technique | How | Impact |
|---|---|---|
| **Size contrast** | Hero heading 3–4x body size | Immediate focal point |
| **Weight contrast** | Bold headings + regular body | Scannability |
| **Color contrast** | Primary text vs muted secondary | Information layering |
| **Spatial grouping** | Tight spacing within groups, wide between | Gestalt proximity |
| **Elevation** | Shadows / surface layers | Interactive affordance |
| **Whitespace isolation** | Empty space around key element | Emphasis through absence |

### Practical Pattern — Card Hierarchy

Layer hierarchy within cards: eyebrow (xs, uppercase, muted) → title (xl, semibold) → body (base, secondary color, 1.6 line-height) → action (spaced apart with `margin-top`). Use surface color for separation and consistent padding from spacing tokens.

## Responsive Design

### Breakpoint Strategy

| Breakpoint | Target | Approach |
|---|---|---|
| `< 640px` | Mobile | Single column, stacked navigation, touch targets ≥ 44px |
| `640–1024px` | Tablet | Two-column options, collapsible sidebars |
| `1024–1440px` | Desktop | Full layout, hover interactions enabled |
| `> 1440px` | Wide | Max-width container (1280px), prevent ultra-wide line lengths |

### Fluid Techniques

Prefer fluid sizing over rigid breakpoints where possible:

```css
/* Fluid typography — scales between 640px and 1440px viewport */
h1 { font-size: clamp(2rem, 1.5rem + 2.5vw, 3.5rem); }

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

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

Use container queries (`@container`) for component-level responsiveness when a component's layout should respond to its container, not the viewport.

## Accessibility

Accessibility is not optional. Build it in from the start.

| Requirement | Implementation | Standard |
|---|---|---|
| **Color contrast** | 4.5:1 normal text, 3:1 large text / UI | WCAG 2.1 AA |
| **Keyboard navigation** | All interactive elements focusable and operable | WCAG 2.1.1 |
| **Focus indicators** | Visible `:focus-visible` ring, 2px+ offset | WCAG 2.4.7 |
| **Semantic HTML** | Use `<button>`, `<nav>`, `<main>`, `<article>` etc. | WCAG 1.3.1 |
| **Alt text** | Descriptive for informational images, `alt=""` for decorative | WCAG 1.1.1 |
| **Motion safety** | Respect `prefers-reduced-motion` | WCAG 2.3.3 |
| **Touch targets** | Minimum 44×44px interactive areas | WCAG 2.5.8 |
| **ARIA when needed** | `aria-label`, `aria-live`, `role` only when native semantics insufficient | WCAG 4.1.2 |

```css
/* Robust focus indicator */
:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

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

## Component Design

### Anatomy of a Well-Designed Component

Every UI component should have clear states, consistent spacing, and predictable behavior:

| State | Visual Treatment | Example |
|---|---|---|
| **Default** | Base styling | Button at rest |
| **Hover** | Subtle shift — background, shadow, or scale | `background` lightens 5-10% |
| **Active / Pressed** | Compressed feel — reduced shadow, slight inset | `transform: scale(0.98)` |
| **Focus** | High-visibility ring, no outline removal | `:focus-visible` ring |
| **Disabled** | Reduced opacity, `cursor: not-allowed` | `opacity: 0.5` |
| **Loading** | Spinner or skeleton, disabled interaction | Inline spinner replacing label |

### Design Token Architecture

Structure tokens in three layers for maintainability:

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

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

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

This three-layer approach allows theme switching by remapping Layer 2 without touching components.

## Interaction Patterns

### Motion and Animation

Use motion to communicate state changes, not to decorate. Focus on high-impact moments:

| Interaction | Duration | Easing | Purpose |
|---|---|---|---|
| Button hover | 150ms | `ease-out` | Acknowledge interaction |
| Modal open | 250ms | `ease-out` | Draw attention |
| Modal close | 200ms | `ease-in` | Quick dismissal |
| Page transition | 300ms | `ease-in-out` | Maintain spatial context |
| Stagger reveal | 50–80ms delay per item | `ease-out` | Sequential content loading |
| Micro-feedback | 100ms | `ease-out` | Toggle, checkbox, switch |

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

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

### Scroll-Driven Effects

Use native `animation-timeline: scroll()` (behind `@supports`) for parallax and reveal effects without JavaScript. Wrap in feature detection to gracefully degrade.

## Design Quality Checklist

Before shipping, verify against these criteria:

- [ ] **Typography**: Intentional font pairing, consistent scale, readable line lengths
- [ ] **Color**: Cohesive palette, WCAG contrast met, semantic feedback colors defined
- [ ] **Spacing**: Consistent rhythm using spacing tokens, no ad-hoc pixel values
- [ ] **Hierarchy**: Clear visual flow — eye path follows intended reading order
- [ ] **Responsiveness**: Tested at mobile, tablet, desktop; no horizontal overflow
- [ ] **Accessibility**: Keyboard navigable, focus visible, screen-reader tested, motion-safe
- [ ] **States**: All interactive elements have hover, active, focus, disabled, and loading states
- [ ] **Personality**: Design has a clear point-of-view — not generic template aesthetic
- [ ] **Performance**: Images optimized, fonts subset, animations GPU-accelerated (`transform`, `opacity`)
- [ ] **Dark mode**: If supported, surfaces use layered lightness, not inverted colors

Related Skills

design-system-creation

7
from wpank/ai

Complete workflow for creating distinctive design systems from scratch. Orchestrates aesthetic documentation, token architecture, components, and motion. Use when starting a new design system or refactoring an existing one. Triggers on create design system, design tokens, design system setup, visual identity, theming.

tailwind-design-system

7
from wpank/ai

No description provided.

responsive-design

7
from wpank/ai

No description provided.

frontend-design

7
from wpank/ai

Create distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Focuses on creative direction and memorable design choices.

ui-design

7
from wpank/ai

Comprehensive UI design skill covering fundamentals, patterns, and anti-patterns. Layout, typography, color, spacing, accessibility, motion, and component design. Use when building any web interface, reviewing design quality, or creating distinctive UIs.

distinctive-design-systems

7
from wpank/ai

Patterns for creating design systems with personality and distinctive aesthetics. Covers aesthetic documentation, color token architecture, typography systems, layered surfaces, and motion. Use when building design systems that go beyond generic templates. Triggers on design system, design tokens, aesthetic, color palette, typography, CSS variables, tailwind config.

design-system-patterns

7
from wpank/ai

Foundational design system architecture — token hierarchies, theming infrastructure, token pipelines, and governance. Use when creating design tokens, implementing theme switching, setting up Style Dictionary, or establishing multi-brand theming. Triggers on design tokens, theme provider, Style Dictionary, token pipeline, multi-brand theming, CSS custom properties architecture.

design-system-components

7
from wpank/ai

Patterns for building design system components using Surface primitives, CVA variants, and consistent styling. Use when building reusable UI components that follow design token architecture. Triggers on Surface component, CVA, class-variance-authority, component variants, design tokens.

api-design-principles

7
from wpank/ai

No description provided.

api-design

7
from wpank/ai

REST and GraphQL API design principles — resource modeling, HTTP semantics, pagination, error handling, HATEOAS, schema design, and DataLoader patterns. Use when designing new APIs, reviewing specs, or establishing team API standards.

schema-markup

7
from wpank/ai

Add, fix, or optimize schema markup and structured data. Use when the user mentions schema markup, structured data, JSON-LD, rich snippets, schema.org, FAQ schema, product schema, review schema, or breadcrumb schema.

prompt-engineering

7
from wpank/ai

Master advanced prompt engineering techniques to maximize LLM performance, reliability, and controllability in production. Use when optimizing prompts, improving LLM outputs, designing production prompt templates, or building AI-powered features.