MCPInstall

elevation-and-depth

Shadows and layering that lift elements above the surface. Use when designing cards, dropdowns, modals, tooltips or any floating element.

Installs
866
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/dembrandt/dembrandt-skills --skill elevation-and-depth
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads elevation-and-depth automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Elevation and Depth

Elevation uses shadow and layering to communicate that an element sits above the base surface — giving UI a sense of physical depth. Combined with border-radius, it creates the tactile quality that makes cards graspable, modals clearly floating, and dropdowns feel like they've appeared on top of content.

The Elevation Scale

Define a small set of elevation levels as tokens. Each level maps to a specific UI role.

LevelTokenShadowRole
0--shadow-nonenoneFlat surface, inline elements
1--shadow-xs0 1px 2px rgba(0,0,0,0.06)Subtle card, table row hover
2--shadow-sm0 1px 3px rgba(0,0,0,0.10), 0 1px 2px rgba(0,0,0,0.06)Card, input focus ring area
3--shadow-md0 4px 6px rgba(0,0,0,0.08), 0 2px 4px rgba(0,0,0,0.06)Dropdown, popover
4--shadow-lg0 10px 15px rgba(0,0,0,0.08), 0 4px 6px rgba(0,0,0,0.05)Modal, dialog, side drawer
5--shadow-xl0 20px 25px rgba(0,0,0,0.08), 0 8px 10px rgba(0,0,0,0.04)Command palette, full-screen overlay

Keep shadows subtle. Dark, heavy shadows feel dated and visually aggressive. Light, diffuse shadows feel modern and material.

The "Shadow + Border" Rule

A subtle shadow on a white surface can sometimes "wash out," making the edge of a card feel fuzzy or indistinct.

  • Rule: For elevated white cards or sections, pair the shadow with a 1px border that is slightly darker (1.5x to 2x) than the shadow's core tone (e.g., a medium grey like #E2E8F0 or grey-200).
  • Effect: The border defines the physical boundary of the card, while the shadow provides the depth. Together, they make the component "pop" with much higher clarity than using either alone.

Hover Needs a Defined Edge

A card that shifts background colour on hover must have a defined edge — a border, shadow, or clear radius boundary. Without one, the shift has no shape and reads as a stray fill, not a highlighted card. On a borderless, flat card, a background-change hover is forbidden — use a border or a shadow (elevation) on hover instead.

Subtle Gradients for Depth

Gradients can be used to bring "liveliness" to an interface and reinforce the sense of elevation.

  • The Lighting Metaphor: A subtle linear gradient (top-to-bottom) that is slightly lighter at the top mimics natural overhead lighting. This makes a surface feel more physical and elevated than a flat fill.
  • The 5% Rule: Keep the gradient extremely subtle. A change in lightness of only 2–5% between the top and bottom is usually enough. If the user can easily see where the gradient starts and ends, it is likely too heavy.
  • Usage: Apply to primary buttons, hero cards, and header sections to improve visual hierarchy and brand personality.

Pairing Elevation with Border-Radius

Border-radius and shadow work together to define the character of a surface. The combination signals the element's role and the product's visual tone.

SurfaceShadowBorder-RadiusTone
Inline chip / tagnone--radius-full (pill)Flat, lightweight
Card--shadow-sm--radius-md (8–12px)Graspable, contained
Dropdown / popover--shadow-md--radius-md (8px)Floating, contextual
Modal / dialog--shadow-lg--radius-lg (12–16px)Prominent, focused
Toast / notification--shadow-md--radius-mdEphemeral, above content
Buttonnone or --shadow-xsconsistent across all buttons — see below

A Thick Accent Border and a Radius Never Share an Edge

Do not run a heavy coloured border along one side of a rounded box. Borders miter: where the accent meets its neighbours the renderer cuts a diagonal seam, and the radius bends that seam into a curve, so the accent visibly narrows and peels away before the corner ends. A 4px edge on an 8px radius spends most of its length tapering. Give the accent its own filled element instead, a bar or a wash that the container's radius clips cleanly, or keep the box square where the accent runs. A fill has no miter and no taper.

Border-Radius Consistency Rule

Button border-radius must not vary within a product. All buttons — primary, secondary, destructive, ghost — use the same radius token. Varying radius between button types breaks visual consistency and implies a semantic difference that does not exist.

/* Correct: one radius for all buttons */
.btn { border-radius: var(--radius-button); }

/* Wrong: different radii for different button variants */
.btn-primary { border-radius: 8px; }
.btn-secondary { border-radius: 4px; }  /* ← breaks consistency */

The button radius token is a brand decision — set it once, apply it everywhere.

Text Shadow for Contrast and Separation

text-shadow can lift text off a background without changing colours — useful when contrast is marginal or text sits on a photograph, gradient, or complex background.

The effect must be imperceptible as a shadow. If the user notices the shadow, it is too strong.

/* On images or complex backgrounds */
.hero-title {
  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
}

/* Very subtle separation from a near-matching background */
.label-on-tinted-surface {
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.12);
}

/* White text on light background — use a dark shadow, not white */
.inverted-text {
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.30);
}

Rules:

  • Opacity: stay below 0.30 — above that it reads as a design choice rather than a refinement
  • Blur: 2–4px maximum — higher values make text feel dirty
  • Offset: 0 1px or 0 0 — directional offsets above 2px look like retro Web 2.0
  • Never use text-shadow to compensate for a contrast failure — fix the colour first. Use it only when colours are already close to passing and a nudge is needed, or when text sits on unpredictable imagery

Dark Mode Shadows

Shadows are less visible on dark backgrounds. On dark surfaces, compensate with:

  • Slightly higher opacity on shadow values
  • Adding a subtle border (1px solid rgba(255,255,255,0.08)) to define card edges
  • Increasing the elevation level by one step for the same perceived depth

Review Checklist

  • Is there a defined elevation scale as design tokens (not one-off shadow values per component)?
  • Does each elevated element use the correct level for its role (card ≠ modal)?
  • Are shadows light and diffuse, avoiding heavy black (#000) defaults?
  • For white cards on light backgrounds, is the shadow paired with a 1px border for better definition?
  • Is border-radius consistent across all button variants?
  • Do shadows feel subtle and diffuse rather than heavy and dark?
  • On dark surfaces, are card/panel edges visible through border or adjusted shadow?
  • Is elevation used to communicate layering — not just decoration?
  • If gradients are used, are they subtle (2–5% lightness change) and used to reinforce the lighting/elevation metaphor?

Common Anti-Patterns

Anti-patternProblemFix
Different border-radius on primary vs secondary buttonsImplies semantic difference that doesn't existSingle --radius-button token for all buttons
Heavy box-shadow: 0 8px 16px rgba(0,0,0,0.4)Feels dated and visually aggressiveUse low-opacity, multi-layer diffuse shadows
Shadow on every element regardless of roleElevation loses meaning when everything is elevatedReserve shadow for genuinely floating elements
Flat cards with no elevation on a white backgroundCard edge disappears into the pageUse --shadow-sm or a 1px border to define the card boundary

FAQ

What does the elevation-and-depth skill do?

Shadows and layering that lift elements above the surface. Use when designing cards, dropdowns, modals, tooltips or any floating element.

How do I install elevation-and-depth?

Run npx skills add https://github.com/dembrandt/dembrandt-skills --skill elevation-and-depth in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/elevation-and-depth/ (personal) or .claude/skills/elevation-and-depth/ (project).

Which AI agents can use elevation-and-depth?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is elevation-and-depth safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains elevation-and-depth?

It is published by dembrandt in dembrandt/dembrandt-skills. It has 866 recorded installs.

More from dembrandt/dembrandt-skills

View all →

nielsen-usability-heuristics

dembrandt/dembrandt-skills

Nielsen's 10 usability heuristics. Use when auditing an interface, designing interaction flows, writing error messages or reviewing usability.

Docs & Writing989 installs

performance-and-web-vitals

dembrandt/dembrandt-skills

Lighthouse audits and Core Web Vitals — LCP, CLS, INP. Use when optimising page load, layout shift, input delay, images, fonts or render-blocking resources.

color-mode-and-theme

dembrandt/dembrandt-skills

Light, dark or both, and when a theme selector is worth it. Use when defining a base palette or deciding on dark mode support.

Frontend & Design940 installs

ui-density

dembrandt/dembrandt-skills

Match information density to platform and user type. Use when designing data tables, dashboards or toolbars, or adapting a desktop product for mobile.

Frontend & Design927 installs

form-design

dembrandt/dembrandt-skills

Helper text, placeholders, validation and submit behaviour. Use when designing or reviewing a form, input field or data entry UI.

Frontend & Design925 installs

brand-visual-language

dembrandt/dembrandt-skills

Shape language across type, radius and icons carries brand personality. Use when starting a design system, picking icons or radius tokens, or reviewing visual consistency.

Marketing & SEO915 installs

Popular other skills

View category →

hyperframes-cli

heygen-com/hyperframes

The HyperFrames CLI by job - scaffold, check, look at frames, edit the timeline, preview, render locally or in the cloud, publish, project history - plus reading its JSON and recovering from build or render failures.

1.3M installs

triage

mattpocock/skills

Move issues and external PRs through a state machine of triage roles, categorise, verify, grill if needed, and write agent-ready briefs.

1M installs

ask-matt

mattpocock/skills

Ask which skill or flow fits your situation. A router over the skills in this repo.

778.4K installs

to-questionnaire

mattpocock/skills

Turn a decision you can't fully answer into a questionnaire for someone else to fill in.

508.9K installs

wait-what

mattpocock/skills

Stop. That last message did not land: re-pitch it.

459.7K installs

loop-me

mattpocock/skills

Grill me about specs for the workflows I want to build, within this workspace.

447.9K installs