Spacing scale (8-point grid)
A fixed set of spacing values, usually multiples of 4 or 8, used for every margin, padding and gap.
Use an 8pt spacing scale (4, 8, 12, 16, 24, 32, 48, 64px) for all padding, margins and gaps. No arbitrary values.
This is a working field guide to GUI, UI and UX. Every card is a real, clickable example with its industry name, the aliases you'll hear, when to use it, when to avoid it, and a “Say it like a designer” line you can paste into Lovable, Cursor or v0.
Terminology follows Material Design 3, Apple's Human Interface Guidelines, Nielsen Norman Group, Laws of UX and common pattern libraries. All examples here are original.
The raw materials every interface is built from: spacing, type, color, shape and depth. Get these consistent and everything else looks “designed.”
A fixed set of spacing values, usually multiples of 4 or 8, used for every margin, padding and gap.
Use an 8pt spacing scale (4, 8, 12, 16, 24, 32, 48, 64px) for all padding, margins and gaps. No arbitrary values.
A set of font sizes made by multiplying a base size by a fixed ratio. It gives the type a predictable hierarchy.
Set up a modular type scale with a 16px base and a 1.25 (major third) ratio: 12, 14, 16, 20, 25, 31, 39px.
Body copy stays neutral so the headline can carry the voice. Numbers: $1,280.00
Two or three typefaces chosen to contrast in role, for example a serif for headlines with a sans for body text.
Pair a high-contrast serif (like Fraunces) for headings with a neutral sans (like Inter) for body text, and use a mono for code and numbers.
Good typography is invisible. When line-height and tracking are right, the reader simply reads, and their eyes find the next line without effort.
Leading is the vertical space between lines. Tracking is the even spacing between all letters. Kerning adjusts specific letter pairs.
Use line-height 1.5 for body and 1.1 for headings, tighten tracking on large headings to -0.02em, and add +0.08em tracking to small uppercase labels.
Colors are named by job, not by hue. Primary is the brand and key actions, secondary supports it, neutrals are surfaces and text, and “on-” colors are text that sits on top of each.
Define color roles as tokens: primary, on-primary, secondary, surface, surface-variant, on-surface, outline. Use primary only for key actions and active states.
Reserved colors that carry meaning: green for success, amber for warning, red for error or destructive, blue for info.
Use semantic tokens: success (green), warning (amber), error (red), info (blue), each with a soft background tint and an icon. Never rely on color alone.
The luminance difference between text and its background. WCAG AA needs 4.5:1 for body text and 3:1 for large text and UI components.
Make sure all text meets WCAG AA contrast: 4.5:1 for body and 3:1 for large text and icons. Check placeholder and muted text too.
A small set of corner radii. Sharp corners feel serious and technical, while round and pill shapes feel friendly.
Use a radius scale of 4 / 8 / 12 / 16 / 24px plus full (pill). Inputs and buttons use 10px, cards 16px, and nested radius = outer radius minus padding.
Consistent shadow levels that show how far an element floats above the page. Higher means more important or more temporary.
Use a 5-level elevation scale: cards at level 1, menus at level 3, modals at level 5. Use soft, layered shadows with low opacity.
An invisible set of columns (often 12 on desktop, 4 on mobile) separated by gutters, with outer margins. Content snaps to it.
Use a 12-column grid with 24px gutters and a 1200px max container width, collapsing to 4 columns with 16px margins on mobile.
Icons share a stroke weight, corner style and grid (usually 24px). Outline icons are the default state, and filled icons often mean active or selected.
Use a single outline icon set (e.g. Lucide) at 20px with a 2px stroke. Switch to the filled variant for active nav items.
/* tokens */ :root { --color-primary: #4f46e5; --space-4: 16px; --radius-md: 10px; --shadow-2: 0 2px 6px rgb(0 0 0 / .07); } .button { background: var(--color-primary); }
Named variables (color-primary, space-4, radius-md) that store design decisions so you change them in one place.
Implement the design as CSS custom properties (tokens) for color, spacing, radius, shadow and typography, and reference only tokens in components.
Buttons trigger actions. Their style signals emphasis: one high-emphasis button per view, with everything else stepping down.
A solid fill in the brand color. It is the single most important action on the screen.
Make the main action a solid primary button (filled brand color, white label, 40px tall, 10px radius) and make every other action lower emphasis.
A neutral surface button with a subtle border, used beside the primary for the alternative action.
Pair the primary with a secondary button: white or neutral surface, 1px border, dark text, subtle shadow.
A light tint of the brand color with darker text. It sits between primary and outline in emphasis (Material 3 term).
Use a tonal (soft) button for secondary actions: light primary-tinted background with dark primary text, no border.
Only a colored label with no container until hover. It is the lowest emphasis button.
Make low-priority actions tertiary text buttons: no background or border, primary-colored label, light tint on hover.
A transparent fill with a visible border. Medium emphasis. Many teams call this a ghost button.
Make the secondary action an outline (ghost) button: transparent fill, 1px primary border and primary text, tinted fill on hover.
In stricter systems, a ghost button has no border and no fill, only a background on hover. It is common in toolbars.
Use ghost (subtle) buttons in the toolbar: no border or fill, neutral text, light grey background on hover.
A surface-colored button with a shadow (Material 3). It separates the button from patterned or image backgrounds.
Use an elevated button (surface fill, primary text, level-2 shadow) when the button sits on a busy background.
Red-styled button for irreversible or harmful actions.
Style irreversible actions as a destructive button (red fill or red outline) and require a confirmation dialog before executing.
A square or circular button containing only an icon.
Use 40×40px icon buttons with a 20px icon, a hover background, an aria-label and a tooltip.
A large, elevated button that floats above content, usually bottom-right, for the screen's primary creative action. An extended FAB adds a label.
Add a floating action button (56px, rounded square, elevated) fixed at the bottom-right for the “Compose” action, and an extended FAB with a label on wider screens.
A main action joined to a small arrow that opens related alternatives.
Use a split button: the primary label performs the default action, and an attached chevron opens a menu of alternatives.
Related buttons visually joined into one unit.
Group related actions into a connected button group with shared borders and a toggled state for active options.
A row of mutually exclusive options where exactly one is selected, like a radio group styled as buttons.
Use a segmented control for Day / Week / Month: a pill track with the selected segment raised on a white surface.
A button that stays on or off (aria-pressed). It looks different when active.
Make “Follow” a toggle button: outline when off, filled primary when on, and change the label to “Following”.
A button with fully rounded ends (border-radius: 999px). It reads as friendly and modern.
Use pill-shaped buttons (fully rounded, border-radius 999px) for a friendlier feel.
A button that shows a spinner and blocks repeat clicks while its action runs.
On submit, put the button in a loading state: keep its width, show an inline spinner with “Saving…”, disable repeat clicks, then show success.
A fill that blends two or more colors, often with an animated shift on hover.
Make the hero CTA a gradient button (indigo → pink → amber at 135°) with a background-position shift and colored glow on hover.
The button appears extruded from the same-colored background using a light and a dark shadow, and pressed it looks inset.
Use a neumorphic (soft UI) button: same color as the background, light top-left and dark bottom-right shadows, inset shadow when pressed.
A semi-transparent button with backdrop blur that lets a colorful background show through.
Use frosted-glass buttons on the hero: white at 16% opacity, 12px backdrop blur, 1px white border at 35%, white text.
A solid bottom shadow gives depth, and on press the button moves down as if physically pushed.
Make chunky 3D buttons with a solid darker bottom shadow (0 5px 0) that moves down 4px on press.
Didn't get it?
Looks like an underlined hyperlink but performs an action.
Show “Resend code” as an inline link-style button: underlined primary text, no padding, thicker underline on hover.
A consistent size ramp, usually 28, 32, 40, 48 and 56px tall, so buttons line up with inputs of the same size.
Use button sizes S (32px), M (40px, default) and L (48px). Match input heights, and keep touch targets at least 44px on mobile.
An icon before the label clarifies the action. A trailing arrow implies forward motion or navigation.
Add a leading icon to action buttons (Upload) and a trailing arrow to forward or navigation buttons (Next →), with an 8px gap.
A button that stretches to the width of its container.
Make the submit button full-width (block) on mobile, and auto-width on desktop.
Pairing buttons of different emphasis so the eye picks the right one first: high (filled), medium (outline or tonal), low (text).
Establish a clear button hierarchy: one filled primary, one outline secondary, and text buttons for tertiary actions. Place the primary on the right in dialogs.
Every interactive element has states. Showing them clearly is what makes an interface feel responsive and trustworthy. Hover and tab through these.
One button, every state. Pick a state to force it, or interact with the live one.
Design and implement all interaction states for every button and input: default, hover, focus-visible, active/pressed, disabled, loading and selected.
How the element looks when nothing is happening. It must still look clickable.
In the default state, buttons should clearly look clickable: filled or bordered, with a pointer cursor.
Feedback when a pointer is over the element, usually a slightly darker or lighter fill, sometimes with a lift.
Add hover states: darken the fill about 8% over 150ms ease-out, and show a pointer cursor. Never hide essential info behind hover.
A visible ring that appears when you navigate with the keyboard (press Tab). It is essential for accessibility.
Add a clear focus-visible ring (2 to 3px primary-colored outline with 2px offset) on all interactive elements. Never remove outlines without a replacement.
Momentary feedback while the element is being clicked or tapped, often slightly darker or scaled to 98%.
Add a pressed state: scale to 0.98 and darken slightly while the button is held, under 100ms.
Element can't be used right now. It shows reduced opacity and a not-allowed cursor and ignores clicks.
Show disabled buttons at 45% opacity with a not-allowed cursor, and explain why nearby (e.g. “Fill in your email to continue”).
The action has started and the user should wait. It shows a spinner or progress and blocks double submits.
While submitting, show a loading state: inline spinner, label “Processing…”, button disabled, same width.
Shows which item is chosen in a set, like the current tab, a selected card or the active nav item.
Show selected items with a tinted background, primary border and a checkmark, not color alone.
The input or element has a problem. It shows a red border, an icon and a message that explains how to fix it.
For invalid fields, show a red border, an error icon and a specific message below (“Password needs 8+ characters”), linked with aria-describedby.
Controls that collect information. A good form is mostly about labels, spacing, sensible defaults and helpful errors.
A field with a full 1px border on all sides. It is the most common, clearest field style on the web.
Use outlined text fields: 1px neutral border, 10px radius, 42px height, label above, primary border and focus ring on focus.
A tinted background with a bottom border only. It is a Material Design style that reads well on white surfaces.
Use filled text fields: light grey background, bottom border that turns primary and 2px thick on focus, top corners rounded.
Only a bottom line. It looks minimal and elegant but has the weakest affordance.
Use minimal underlined inputs: transparent background, single bottom border, primary 2px underline on focus.
The label sits inside the field like a placeholder, then shrinks and moves up when you type.
Use floating labels: the label starts inside the input and animates to a small label at the top on focus or when filled.
Small text under a field. Helper text explains the format before input, and error text explains what went wrong and how to fix it.
Add helper text under fields (12px, muted) and replace it with a specific red error message when validation fails.
An input with a leading magnifier icon and an ✕ that appears once there is text, to clear it.
Add a search field with a leading search icon, placeholder “Search…”, and an ✕ clear button that appears when text is entered. Esc clears.
Pick one option from a list that is closed by default.
Use a native select for country with a custom chevron; for fewer than 5 options use radio buttons instead.
A text input that filters a list of suggestions as you type, navigable with arrow keys.
Use a combobox (autocomplete): typing filters the options, highlights the matched text, arrow keys move, Enter selects.
Select any number of independent options. It also has an indeterminate “some selected” state.
Use checkboxes for multi-select options, with a “Select all” parent checkbox that shows an indeterminate state when only some are checked.
Pick exactly one option from a visible set. All the options stay on screen.
Use a radio group for shipping speed with all options visible, one preselected as a sensible default.
A binary on/off control that takes effect immediately, like a light switch.
Use toggle switches for instant-apply settings: 44×26px track, white thumb, primary color when on, label on the left.
Drag a thumb along a track to pick a value or range. Show the value in a label.
Add a range slider for price with the live value shown above the thumb, and pair it with a number input for precision.
A number with − and + buttons for small adjustments.
Use a quantity stepper (− 1 +) with a min of 1, disabling “−” at the minimum.
A field that opens a month grid for choosing a date.
Add a date picker: the input opens a popover month grid with prev/next arrows, today outlined, and the selected day filled with primary.
Separate boxes for each digit. Focus moves forward automatically, backspace moves back, and paste fills all boxes.
Build a 6-digit OTP input: separate boxes, auto-advance on type, backspace goes to the previous box, pasting a full code fills all boxes.
A multi-line text input, ideally one that grows with its content and shows a character count.
Use an auto-growing textarea with a live character counter (e.g. 0/280) that turns amber near the limit.
A dashed area you can drop files on or click to browse. It highlights on drag-over.
Add a drag-and-drop dropzone: dashed border, upload icon, “Drag files here or browse”, highlight on drag-over, and list files after upload.
Type a value and press Enter or comma to turn it into a removable chip.
Build a tags input: typing and pressing Enter or comma creates a removable chip, Backspace on empty removes the last chip.
Feedback while or right after you type, like a strength meter or ✓ when valid. It validates on blur, not on every keystroke for errors.
Add inline validation: show success checkmarks as rules are met, a 4-segment password strength meter, and show errors only on blur.
Arrange fields in one column with top-aligned labels, group related fields, and put the primary action at the end.
Lay out the form in a single column with labels above fields, 16px between fields, 32px between groups, and the primary button left-aligned at the bottom.
Ways to group and present content. Choose based on how people will scan, compare or act on the information.
Shadow, no border.
1px border, flat.
Tinted surface.
A container grouping info about one subject. It comes in three flavors: elevated (shadow), outlined (border) and filled (tinted). Media cards add an image.
Display items as cards: 16px radius, 1px border (outlined) or soft shadow (elevated), 16:9 image on top, title, 2-line description, and actions at the bottom. Whole card clickable.
Rows of items, each with an optional leading avatar or icon, primary and secondary text, and trailing meta or action.
Show items as a list: each row has a 40px leading avatar, bold title, one-line muted subtitle with ellipsis, timestamp on the right, and hover highlight.
| Ada Lovelace | Paid | $1,280 | 2026-10-02 |
| Grace Hopper | Pending | $540 | 2026-10-05 |
| Alan Turing | Paid | $2,310 | 2026-09-28 |
| Katherine Johnson | Failed | $99 | 2026-10-11 |
| Linus T. | Paid | $760 | 2026-10-14 |
| Margaret H. | Pending | $1,890 | 2026-09-30 |
| Dennis R. | Paid | $310 | 2026-10-08 |
Rows and columns for comparing records. Common features are sortable headers, zebra striping, a sticky header and right-aligned numbers.
Build a data table with sortable column headers (arrow indicator), zebra striping, sticky header, right-aligned tabular numbers, row hover, and status badges.
A shared library of tokens, components and guidelines that keeps a product consistent.
No. You can define tokens directly in CSS and build components in code.
Yes, there's no contract. Cancel from Settings → Billing.
Stacked headers that expand to reveal content. It is a form of progressive disclosure.
Put the FAQ in an accordion: each question is a full-width row with a +/− (or chevron) icon that rotates; one or many can be open.
Content that rotates horizontally with arrows, dots or swipe.
Add a carousel with prev/next arrow buttons, dot indicators (active dot stretched), swipe support and no auto-advance.
A uniform grid aligns rows and columns. Masonry packs items of different heights into columns with no row gaps.
Show the gallery as a masonry layout (CSS columns, 3 columns, 12px gap) so images keep their natural aspect ratios.
The toolkit for teams who care about craft.
A big headline, subhead and CTA stacked in the center. It is the classic landing page opener.
Create a centered hero: small eyebrow badge, 56px bold headline (max 12 words), 18px muted subhead (max 2 lines), primary + secondary CTA, 96px vertical padding.
Real-time insights without the spreadsheets.
Text and CTA on one side, product image or illustration on the other.
Make a split hero: left column with headline, subhead, CTA and social proof; right column with a product screenshot in a device frame with a soft shadow. Stack on mobile.
A headline over a full-width photo or video, with a dark gradient overlay (scrim) so the text stays readable.
Create a full-bleed image hero with a dark gradient scrim (black 60% → transparent) behind white headline text, left-aligned at the bottom.
Side-by-side plans, usually 3, with the recommended one highlighted (a decoy and anchor effect).
Add a 3-tier pricing table: middle “Pro” plan highlighted with a primary border, “Most popular” badge and slight elevation; monthly/yearly toggle above.
A grid of 3 to 6 features, each with an icon, a short title and one or two lines of description.
Add a 3-column feature grid: each item has a 40px tinted icon tile, bold 16px title and a 2-line muted description, 32px gap.
“We cut our design review time in half. The whole team speaks the same language now.”
A quote from a real customer with name, role, photo and sometimes a star rating.
Add a testimonial card: 5-star rating, a short quote in 18px, then avatar, name and role/company below.
Big numbers with a label and a trend indicator (▲ +12% in green).
Add a row of 4 KPI tiles: small muted label, large 28px number with tabular figures, and a green ▲ or red ▼ delta vs last period.
Events in chronological order along a line with markers.
Show order status as a vertical timeline: filled dots for completed steps, outlined for upcoming, timestamp under each label.
A circle with a photo or initials. Groups overlap them to show who's involved (a “facepile”).
Show collaborators as an overlapping avatar group (32px, 2px white ring, -8px overlap), capped at 4 with a “+3” counter; add a green presence dot for online users.
A small label for status or counts. A notification badge is the red dot or number on an icon.
Use status badges: small pill, soft tinted background with matching darker text, a leading dot; and a red count badge on the bell icon.
Compact, often interactive, elements. Filter chips toggle filters, input chips are removable values, assist chips are suggested actions.
Add filter chips above the results: rounded-full outlined chips that become tinted with a checkmark when selected; multiple can be active.
Two ways to reveal long lists. “Load more” gives the user control, while infinite scroll loads automatically near the bottom.
Replace pagination with a “Load more” button under the list that appends 10 items and shows a spinner while loading.
How the interface talks back. Overlays interrupt, and feedback reassures. Match the interruption level to the importance of the message.
A window over the page that blocks interaction behind it until it is dismissed. It traps focus and closes on Esc.
Open a centered modal dialog (max-width 480px, 16px radius, dimmed backdrop with slight blur) with a title, body, Cancel + primary buttons; Esc and backdrop click close it; trap focus.
A panel that slides up from the bottom edge, common on mobile, with a drag handle.
On mobile, show options in a bottom sheet: slides up from the bottom, 20px top radius, grab handle, dimmed backdrop, swipe or tap outside to dismiss.
A panel that slides in from the right edge for detail or editing without leaving the page.
Open record details in a right side sheet (slide-over, 400px wide) with a header, close button, scrollable body and sticky footer actions.
A small floating panel attached to a trigger. It can hold interactive content and opens on click.
Show a popover on click next to the trigger: 280px card with arrow, title, short text and a small action; closes on outside click or Esc.
A short text label shown on hover or keyboard focus. It is not interactive.
Add tooltips to icon buttons: dark 12px label above, appears on hover and keyboard focus after a short delay, with a small arrow.
A brief, non-blocking message that appears in a corner and disappears automatically, often with an Undo action.
After saving, show a toast bottom-right: dark pill, short message, optional Undo action, auto-dismiss after 4 seconds, announced to screen readers via aria-live.
A full-width message at the top of a page or app, for system-level info that persists until dismissed.
Add a dismissible announcement banner at the top: full-width, primary tinted background, short message with a link, ✕ close button on the right.
A contained message within the page content, near what it's about.
Show an inline alert above the form: warning tint, left icon, bold title, one-line description and an optional action link.
Shows how much of a task is done. Determinate shows a known %, and indeterminate shows that work is happening for an unknown time.
Show a determinate progress bar during upload (8px, rounded, primary fill, percentage label) and an indeterminate bar when the duration is unknown.
A rotating indicator for short, unknown waits.
Use a small inline spinner (16–24px, primary color, 0.7s rotation) for short waits; switch to a skeleton for page loads.
Grey placeholder shapes that mimic the layout while content loads, often with a shimmer. It feels faster than a spinner.
While data loads, show skeleton placeholders matching the final layout (avatar circle, 2 text lines, image block) with a subtle shimmer, then fade in the content.
Create your first project to start organizing your work.
What shows when there is no data yet: an illustration or icon, a short explanation and a clear next action.
Design an empty state: centered icon in a soft circle, short headline (“No projects yet”), one-line explanation, and a primary “Create project” button.
Check your connection and try again.
Explains that something failed, in human language, with a way to recover.
Show a friendly error state: warning icon, plain-language headline (“We couldn't load your projects”), cause if known, and a “Try again” button plus a secondary link.
Order #4821 · receipt sent to your email
Confirms that a task completed, often with a check animation and the next step.
After checkout, show a success state: animated green checkmark, “Payment successful”, order summary line, and next-step buttons.
A modal asking people to confirm a risky or irreversible action. The button label names the action.
Before deleting, show a confirmation dialog: title “Delete project?”, consequence explained, red “Delete project” button (not “OK”), and Cancel focused by default.
Tooltips that point to UI elements in sequence, often with a spotlight dimming the rest.
Add a 3-step coach-mark tour for new users: spotlight the element, dim the rest, tooltip with title, “1 of 3”, Next and Skip.
Surface treatments and movement. Use them to add depth, guide attention and confirm actions, never just to decorate. Less is usually more.
Different shadow personalities: soft layered (modern), hard offset (brutalist/retro), colored (playful glow) and inset (pressed or recessed).
Use soft, layered shadows (two shadows: a tight one at 4% and a wide one at 8% opacity) instead of a single dark drop shadow.
Semi-transparent panels with background blur, a light border and a colorful backdrop. Apple's 2025 “Liquid Glass” is a refined take on it.
Make the card glassmorphic: background rgba(255,255,255,0.12), backdrop-filter blur(16px) saturate(150%), 1px rgba(255,255,255,0.3) border, over a vivid gradient.
Elements look extruded from, or pressed into, the background using paired light and dark shadows on a mid-tone surface.
Use a neumorphic style: background #e6e9ef, elements share the background color with 8px 8px 16px #c4c8d0 and -8px -8px 16px #ffffff shadows.
Linear blends along a line, radial blends from a point, and mesh layers several radial blobs for an organic “aurora” look.
Use a soft mesh gradient background: 3–4 overlapping radial gradients (indigo, pink, amber) at low saturation, blurred, behind the hero.
A border filled with a gradient, sometimes slowly rotating, to highlight a premium or featured element.
Give the featured card a 1.5px gradient border (indigo → pink → amber) using a padding-box/border-box background trick.
A soft, colored light around elements. It works best on dark backgrounds and reads as energetic or futuristic.
On the dark hero, add a subtle glow to the primary CTA: box-shadow 0 0 24px rgba(99,102,241,.6) that intensifies on hover.
A subtle noise layer over flat colors or gradients. It removes banding and adds a tactile, analog feel.
Add a subtle grain overlay (SVG feTurbulence noise at 6–10% opacity, mix-blend-mode overlay) on the hero gradient to remove banding.
On hover, the element moves up 2 to 4px and its shadow grows, which signals that it is clickable.
On hover, lift clickable cards: translateY(-4px) and a larger shadow over 200ms ease-out.
Small, purposeful animations tied to a single action: a heart that pops, a checkbox that draws, a toggle that bounces.
Add a micro-interaction to the like button: the heart scales to 1.3 and back with a spring ease and fills red, while the count increments.
The three basic ways things appear. Fade is calm, slide shows direction and origin, and scale shows emphasis or growth from a point.
Animate overlays in with fade + scale (0.96 → 1, 200ms ease-out), drawers with slide-in from the edge (250ms), and exits 30% faster than entrances.
How speed changes over an animation. Ease-out (fast then slow) feels responsive, ease-in suits exits, ease-in-out suits on-screen moves, and spring overshoots naturally.
Use ease-out (cubic-bezier(0.2, 0.7, 0.2, 1)) for entrances, ease-in for exits, and a spring with slight overshoot for the toggle.
Rough rules: 100ms for micro feedback (hover, press), 150 to 250ms for small elements (menus, toggles), 300 to 400ms for large ones (modals, pages). Exits are faster than entrances.
Use motion tokens: fast 120ms (hover/press), base 200ms (menus/toggles), slow 320ms (modals/sheets); exits about 30% shorter.
Background layers move slower than the foreground while scrolling, which creates depth. Scroll inside the demo.
Add a subtle parallax to the hero background (moves at 0.4× scroll speed) and disable it when prefers-reduced-motion is set.
Scroll down ↓
Elements fade and slide up as they enter the viewport. Scroll inside the demo.
Reveal sections on scroll: fade in and translate up 20px over 500ms ease-out when 15% visible, staggered 80ms per item, using IntersectionObserver.
Animation between pages or views, like a slide for hierarchy (push) or a cross-fade for peers. Modern browsers support the View Transitions API.
Add page transitions with the View Transitions API: push/slide-left when drilling into detail, slide-right when going back, cross-fade between tabs, 250ms.
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: .01ms !important;
transition-duration: .01ms !important;
scroll-behavior: auto !important;
}
}An OS setting some people enable because motion makes them dizzy or distracts them. Respect it by replacing big motion with fades or nothing.
Respect prefers-reduced-motion: disable parallax, scroll-reveal and large transforms, and keep only opacity fades under 150ms.
Common page structures. Knowing their names lets you describe a whole screen in one sentence.
Eye-tracking (NN/g) shows that on text-heavy pages people read across the top, then a shorter line, then scan down the left side.
Design for F-pattern scanning: front-load headings and bullet points with key words, and left-align content.
On simple, visual pages the eye moves top-left → top-right → diagonally → bottom-left → bottom-right.
Arrange the landing page on a Z-pattern: logo top-left, CTA top-right, hero visual in the middle, and the main CTA at the bottom-right.
Tiles of varied sizes packed into a tidy grid, like a Japanese bento box. It was popularized by Apple feature pages.
Present features in a bento grid: 4-column CSS grid with one 2×2 hero tile, a few 2×1 and 1×1 tiles, 16px gaps, 20px radius, each with its own visual.
The page divided into two equal or near-equal vertical halves, often an image on one side and content on the other.
Use a split-screen layout: left half with the form, right half with a full-height brand image or gradient; stack vertically under 768px.
Header, footer, and three columns: left nav, main content and a right sidebar. A classic web layout.
Use a holy grail layout with CSS grid: header, left nav (240px), fluid main content, right sidebar (280px), footer; sidebars collapse on tablet.
The permanent frame of an app: sidebar nav, top bar with search and profile, and a content area with KPI tiles, charts and tables.
Build a dashboard shell: 240px left sidebar, 56px top bar with search and avatar, content area with a row of 4 KPI tiles, a large chart, and a recent-activity table.
The standard section order: navbar → hero → social proof (logos) → features → how it works → testimonials → pricing → FAQ → final CTA → footer.
Build a landing page with these sections in order: sticky navbar, centered hero, logo cloud, 3-column feature grid, testimonial, pricing, FAQ accordion, final CTA band, footer.
Grouped settings with a left section nav, each row showing a label and description on the left and the control on the right.
Design the settings page: left section nav (Profile, Notifications, Billing), right content with grouped cards, each row label + description left and control (switch/select) right.
A focused, distraction-free page: logo, title, social sign-in, email and password fields, primary button, and links to reset or sign up.
Design a centered login card (400px): logo, “Welcome back”, Google/Apple social buttons, “or” divider, email + password fields with show/hide, “Forgot password?” link, full-width primary “Sign in”.
Cart → shipping → payment → review → confirmation, with an order summary visible throughout and minimal distractions.
Build a checkout with a 2-column layout: left the step form (shipping → payment), right a sticky order summary with items, subtotal, shipping, tax, total; hide main nav; offer guest checkout.
On small screens, tapping a list item pushes a full detail screen, and Back returns to the list.
On mobile use list-detail navigation: tapping a row pushes the detail view with a slide-left transition and a back chevron in the header.
Can you review the hero copy before Friday?
A list on the left and the selected item's details on the right, both visible at once. Click a row in the demo.
Use a master-detail layout on desktop: 320px scrollable list on the left with the selected row highlighted, detail pane on the right; collapse to list-detail under 768px.
Widths where the layout adapts. Typical values are about 640 (sm), 768 (md), 1024 (lg) and 1280 (xl). Drag the slider to resize the mock.
Make it responsive and mobile-first: 1 column under 640px, 2 columns at 768px, 3 columns at 1024px+; nav collapses to a hamburger under 768px.
The “why” behind good design: psychology and heuristics from Laws of UX, Gestalt psychology and Nielsen Norman Group. Use these words to explain why something feels off.
Arranging elements by size, weight, color, contrast and position so people see the most important thing first, then second, then third.
Strengthen the visual hierarchy: one dominant headline, a clearly secondary subhead, muted metadata, and one primary CTA as the focal point.
Things close together are perceived as related. Spacing is your strongest grouping tool, stronger than borders.
Use proximity to group: 8px between a label and its field, 24px between fields, 48px between sections.
Things that look alike (color, shape, size) are seen as the same kind of thing.
Apply similarity consistently: every clickable link is the same primary color and underline on hover, nothing else uses that color.
The brain completes incomplete shapes. You don't need to draw every line.
Let the last carousel card peek in at 20% so users perceive more content to swipe to (closure).
Elements inside a shared boundary (card, background) are seen as a group.
Group related settings inside one card with a subtle background (common region) instead of separate borders on every row.
The time to hit a target depends on its size and distance. Big, close targets are faster.
Apply Fitts's law: make the primary CTA large (48px+ tall, wide on mobile) and place it right next to the content it acts on.
Decision time grows with the number and complexity of choices.
Reduce choices (Hick's law): show 3 plans with one recommended, and move rarely used options into “More”.
People spend most of their time on other sites, so they expect yours to work the same way.
Follow common conventions (Jakob's law): logo top-left linking home, nav top, account and cart top-right, footer with legal links.
People hold about 7 (±2) items in working memory. Chunking groups info into digestible pieces.
Chunk information: format the card number as 4-digit groups, and group long settings into labeled sections of 3–5 items.
Show only what's needed now and reveal advanced or rare options on demand.
Use progressive disclosure: show the 3 essential fields and put the rest behind an “Advanced options” expander.
An affordance is what an object lets you do. A signifier is the visual cue that tells you so: shadows on buttons, underlines on links, a grip on a handle.
Strengthen signifiers: buttons get a fill or border and hover state, links are underlined, draggable items show a grip handle and grab cursor.
The system should always tell people what's going on, within a reasonable time: pressed states, loading, saved, errors.
Give feedback for every action: pressed state immediately, loading spinner for waits, success toast on completion, clear error on failure.
The same words, styles and behaviors mean the same thing everywhere, both within your product and in line with platform norms.
Make the UI consistent: one primary button style, the same terminology for the same action everywhere, same spacing tokens on every page.
Text with room.
Empty space around and between elements. It isn't wasted. It creates focus, grouping and a premium feel.
Increase whitespace: 96px between sections, 24px card padding, max 65-character line length, and fewer elements per row.
What's visible without scrolling. It should make clear what this is, who it's for and what to do next.
Above the fold, show only the headline, a one-line value prop, the primary CTA and a product visual; push secondary details below.
The element that asks the user to take the key next step. Strong CTAs are visually dominant and use specific, verb-first labels.
Make the CTA specific and dominant: verb-first label (“Start my free trial”), primary fill, high contrast, with a reassurance line below (“No credit card required”).
Anything that slows a user down. Remove bad friction (extra fields, steps). Add good friction for dangerous actions, like typing the name to confirm a delete.
Reduce friction in sign-up (email only, social login), but add positive friction to deletion: require typing the project name to enable the Delete button.
Design that works for everyone, including keyboard and screen reader users and people with low vision or color blindness. The core rules are contrast, focus states, labels, alt text, target size and not relying on color alone.
Make it accessible: WCAG AA contrast, visible focus rings, real labels on inputs, alt text on images, 44px touch targets, aria-labels on icon buttons, full keyboard navigation.
The item that differs from the rest is the one people remember. This is why a single highlighted plan or CTA works.
Make the recommended plan visually different from the others (primary border, badge, slight scale) so it stands out (Von Restorff effect).
Productivity soars when the system responds in under about 400ms. Use optimistic UI, skeletons and instant feedback to feel faster.
Use optimistic UI: update the interface immediately on click (under 100ms), sync in the background, and roll back with an error toast only if it fails.
Every system has some complexity that can't be removed, only moved. Good design moves it from the user to the system.
Absorb complexity for the user: autofill city and state from the postal code, detect the card type from its number, and preselect sensible defaults.
People judge an experience by its most intense moment and its ending, not the average.
Design a memorable end moment: after onboarding, show a celebratory success screen with confetti or an animated check and a clear next step.
People perceive attractive designs as easier to use, and they forgive minor issues in them.
Polish the visual details (consistent spacing, aligned edges, refined typography) because attractive interfaces are perceived as more usable.
Turn feelings into instructions. Each card shows what the vague phrase usually means, the concrete design levers to name, a before/after preview and a prompt ready to paste.
Budgeting that keeps up with you.
Get startedBudgeting that keeps up with you.
Get startedUsually means more contrast and one clear focal point. The design feels flat because everything has equal weight.
Increase contrast and hierarchy: make the H1 48–56px, weight 800, tight 1.1 line-height; use one saturated accent for the primary CTA only; add 96px section padding and a soft shadow behind the hero visual.
Budgeting that keeps up with you.
Get startedBudgeting that keeps up with you.
Get startedLess visual noise. Remove borders, lines and colors that don't carry meaning, and align things.
Make it cleaner: remove decorative borders and dividers (group with spacing instead), limit to one neutral palette plus one accent, left-align everything to a single edge, use one typeface in 2–3 weights.
Budgeting that keeps up with you.
Get startedBudgeting that keeps up with you.
Get startedFeels expensive: restraint, generous space, refined type, high-quality imagery, dark or deep neutral palettes.
Make it feel premium: deep near-black background (#0d0d0d), cream text, a refined serif for headings with generous letter-spacing on small caps, thin 1px hairline dividers, lots of whitespace, slow 400ms ease-out fades.
Budgeting that keeps up with you.
Get startedBudgeting that keeps up with you.
Get startedMatches current UI conventions: clean sans type, soft radius, subtle depth, bold type contrast, contemporary color.
Modernize the UI: switch to Inter/Geist, increase heading size contrast, use 12–16px radius, soft layered shadows, a subtle mesh gradient in the hero, bento-grid features, and smooth 200ms ease-out hover states.
Budgeting that keeps up with you.
Get startedBudgeting that keeps up with you.
Get startedWarmer and more approachable: rounder shapes, warmer colors, conversational copy.
Make it friendlier: pill-shaped buttons, 20px card radius, a warm palette (coral #ff7a59 accent on cream), a rounded sans for headings, conversational copy (“Let's get you set up”).
Budgeting that keeps up with you.
Get startedBudgeting that keeps up with you.
Get startedEnergy and personality: bold colors, bouncy motion, unexpected shapes.
Make it playful: saturated palette (yellow, pink, teal), chunky buttons with a solid offset shadow, spring animations on hover, slightly rotated sticker-style badges, and a bold display font for headings.
Budgeting that keeps up with you.
Get startedBudgeting that keeps up with you.
Get startedCredible and stable: conservative colors, clear structure, proof of trust.
Make it more trustworthy: navy primary (#1e3a8a), white surfaces, 6px radius, a structured 12-col grid, clear sans typography, and add trust signals: client logos, security badges, testimonials with real names.
Budgeting that keeps up with you.
Get startedBudgeting that keeps up with you.
Get startedToo many things compete. Reduce, group and prioritize.
Reduce visual clutter: cut each section to one message and one CTA, move secondary actions into an overflow menu, limit to 3 font sizes and 2 colors, increase spacing between groups to 48px.
Budgeting that keeps up with you.
Get startedBudgeting that keeps up with you.
Get startedFeels engineered or futuristic: dark UI, mono type, precise grids, neon or terminal accents.
Give it a technical feel: near-black background with a subtle dot grid, monospace (JetBrains Mono) for labels and numbers, 1px borders at 10% white, a single neon accent (#22d3ee) with soft glow, 6px radius.
Budgeting that keeps up with you.
Get startedBudgeting that keeps up with you.
Get startedFeels like a magazine: strong typography, serif headlines, asymmetry, generous margins.
Make it editorial: large serif headlines (Fraunces, 56px+), small uppercase kickers with letter-spacing, a 65ch body column, thin horizontal rules, a black/off-white palette with a single red accent, asymmetric image placement.
Budgeting that keeps up with you.
Get startedBudgeting that keeps up with you.
Get startedOnly the essentials: reduction to content, type and space.
Make it minimal: monochrome (black on white), one sans typeface in two weights, no shadows or gradients, hairline dividers only where necessary, generous whitespace, and text links with an arrow instead of filled buttons where possible.
Budgeting that keeps up with you.
Get startedBudgeting that keeps up with you.
Get startedOpulent but restrained: rich materials, deep colors, elegant serif type, slow motion.
Make it luxurious: deep emerald (#0b3d2e) background, champagne (#d8c08f) accents, a high-contrast serif for headings, uppercase labels with 0.2em tracking, full-bleed imagery, slow 600ms fades.
Budgeting that keeps up with you.
Get startedBudgeting that keeps up with you.
Get startedLess urgency: softer colors, slower motion, more space.
Make it calmer: soft desaturated palette (sage, sand, mist blue), 1.7 line-height, 16px radius, slower 350ms transitions, fewer badges and red alerts, ample whitespace.
Budgeting that keeps up with you.
Get startedBudgeting that keeps up with you.
Get startedMore confidence and impact: bigger type, stronger color, bigger contrast in scale.
Make it bolder: an oversized 72px headline at weight 900 with -0.04em tracking, a full-bleed solid color block section, and a large high-contrast CTA.
Try a broader word, like “menu”, “button” or “card”.