Skip to content

Materials, Motion, Icons & Imagery ​

Materials & radius ​

Translucent blur materials layer the interface without hiding content; continuous corner radii and concentric rules keep shapes soft and consistent.

Blur materials — the material thickens with elevation. Layer saturate on top to keep background color vibrant.

MaterialBlurUse
Ultra Thin8subtle overlays
Thin16popovers
Regular24navigation bars
Thick40bottom sheets

backdrop-filter: saturate(180%) blur(<n>px). → component Material (thickness="ultraThin|thin|regular|thick").

Progressive blur — blur strength ramps smoothly in one direction so content dissolves into the edge of a bar rather than ending on a hard line. Common on bottom tab bars and top nav. → Material with progressive.

Radius — --radius-pill 980 (buttons), --radius-card 18, --radius-modal/--radius-sheet 20, --radius-input/--radius-inner 10, --radius-image 14. Concentric rule: inner radius = outer radius − padding.

Liquid Glass (2025) ​

A translucent dynamic material with real-time refraction and specular highlights; it picks up the color and light of content behind it, so floating controls read like a sheet of flowing glass above the UI. → component LiquidGlass.

Anatomy

  • Translucency — white α 0.12 → 0.34 (gradient)

  • Blur + recolor — blur(8px) saturate(180%) brightness(1.06)

  • Specular highlight — inset 0 1px 0 rgba(255,255,255,.9)

  • Edge + shadow — 1px bright inner edge · soft drop shadow 0 14px 44px

  • ✓ DO — Use only for floating control layers (nav, toolbars, popovers); ensure text contrast on the glass meets the bar; add a dimming underlay when needed.

  • ✕ DON'T — No glass on glass; no full-screen glass (it loses hierarchy); no low-contrast text on glass.

Motion ​

Motion has purpose: it explains where things come from and go, and keeps context. Curves favor ease-out; durations are short.

Curvecubic-bezierDurationUse
Standard.4, 0, .2, 1300msin-page transitions
Enter0, 0, .2, 1250mselements appearing (ease-out)
Exit.4, 0, 1, 1200mselements leaving (ease-in)
Emphasized.2, 0, 0, 1500msmodals, large displacement

Tokens: --ease-standard, --ease-enter, --ease-exit, --ease-emphasized; --dur-*.

  • ✓ DO — Short, eased-out, directional; respect "reduce motion" and provide a degraded path.
  • ✕ DON'T — No linear easing, no everyday transition over 500ms, no motion for motion's sake.

Icons ​

Unified stroke width, visual weight, and corner radius. Icons are drawn on a 24×24 keyline grid with 2px strokes and rounded caps — consistent across platforms, no emoji.

  • Keyline grid — all icons composed within 24×24, aligned to circle / square / horizontal & vertical rectangle keylines for consistent optical mass.
  • Optical sizes — a size ladder; stroke width stays optically consistent across sizes.
  • ✓ DO — Uniform stroke and radius, optically center to the grid, consistent visual weight.
  • ✕ DON'T — Don't mix stroke and fill in one set; don't scale arbitrarily so stroke widths drift.

In components, icons are inline SVG: viewBox="0 0 24 24", stroke="currentColor", stroke-width="2", round caps/joins.

Imagery ​

Real, restrained, consistent light. Prefer photography over illustration. Fixed ratios and radii; ensure contrast when text overlays.

  • Ratios — 16:9 (hero) / 4:3 / 1:1 / 3:4
  • Radius — 12–16, in harmony with cards
  • Overlay — add a ~40% gradient scrim under overlaid text
  • ✓ DO — Uniform lighting and color temperature, subject centered with breathing room, visual consistency across pages.
  • ✕ DON'T — Don't mix stylistically different assets, don't over-filter, don't press dark text onto a low-contrast image.

Released under the MIT License.