Shadow & Elevation Studio
Smooth multi-layer shadows — the technique behind Stripe, Vercel, and Apple. Pick a preset or dial in custom parameters. Add a hover state and see it live in the preview. OKLCH color tinting, elevation token system, and four export formats.
Shadow & Elevation Studio
Why multi-layer shadows look better
A single box-shadow with a large blur radius produces an unrealistic, flat halo that does not match how light and shadow behave physically. Real objects cast two overlapping shadows: a larger, softer ambient shadow from indirect lighting, and a smaller, denser contact shadow where the object is closest to the surface. Stacking these two layers in CSS — typically using a comma-separated box-shadow value — produces a shadow that reads as genuinely elevated rather than visually pasted on. This is the approach used by Google's Material Design, Apple's Human Interface Guidelines and most sophisticated modern design systems.
Building a CSS elevation system
An elevation system defines a fixed set of shadow levels — typically five (none, low, medium, high, highest) — used consistently across all UI components. Cards might sit at elevation-2, modals at elevation-4, dropdowns at elevation-3. By defining shadows as CSS custom properties (--shadow-1 through --shadow-5), you create a single source of truth that can be updated globally. This tool generates the full five-level system in one step, with each level calibrated so shadows visually step in equal perceptual increments rather than arbitrary pixel values.
OKLCH shadow tinting
Most box shadows use rgba(0, 0, 0, 0.x) — a pure black with variable opacity. OKLCH tinting instead derives the shadow color from your surface or background hue, slightly darkening and desaturating it while preserving the color temperature. The result is shadows that feel warmer on warm-toned surfaces and cooler on cool-toned ones — a subtle effect that makes interfaces feel more cohesive. This technique is used in Figma's auto-generated shadows, Tailwind's shadow palette, and most premium SaaS UI kits.
Frequently asked questions
How many box-shadow layers should I use?
What is the difference between box-shadow and drop-shadow()?
box-shadow follows the rectangular bounding box of the element, including any background. filter: drop-shadow() follows the rendered shape, including transparency — so it traces around an SVG icon or a PNG with a transparent background. Use box-shadow for UI cards and surfaces; use filter: drop-shadow() for icons, cut-out images and SVGs.Can I use these shadows in Tailwind CSS?
extend.boxShadow section of your tailwind.config.js.Why do my shadows look different in dark mode?
What is an inset box shadow?
inset before the shadow values in CSS.