skills/material-design-3-shape/SKILL.md
Applies Material Design 3 Expressive shape and containment principles including rounded corners, morphing shapes, and container design. Use this when working on component shapes, borders, containment, or when the user asks to apply Material Design 3 shape guidelines.
npx skillsauth add shelbeely/shelbeely-agent-skills material-design-3-shapeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill guides the implementation of Material Design 3 (M3) Expressive shape and containment principles to create friendly, approachable, and visually distinct interfaces.
Keywords: Material Design 3, M3, shape, rounded corners, border radius, containment, containers, morphing shapes, component shapes
M3 Expressive uses shape to:
Rounded Corners (Primary characteristic):
Morphing Shapes:
Asymmetry (When appropriate):
M3 Expressive defines an updated shape scale with semantic naming and expanded corner radius tokens:
None (0dp):
Extra Small (4dp):
Small (8dp):
Medium (12dp):
Large (20dp — updated from 16dp):
Extra Large (32dp — updated from 28dp):
Extra Extra Large (48dp — new in M3 Expressive):
Full (100% of corner radius — now defined as 100% rather than 50%):
Define shape tokens using CSS custom properties:
:root {
/* Corner radii — updated for M3 Expressive */
--md-sys-shape-corner-none: 0px;
--md-sys-shape-corner-extra-small: 4px;
--md-sys-shape-corner-small: 8px;
--md-sys-shape-corner-medium: 12px;
--md-sys-shape-corner-large: 20px;
--md-sys-shape-corner-extra-large: 32px;
--md-sys-shape-corner-extra-extra-large: 48px;
--md-sys-shape-corner-full: 9999px;
/* Component-specific shapes */
--md-sys-shape-button: var(--md-sys-shape-corner-full);
--md-sys-shape-card: var(--md-sys-shape-corner-medium);
--md-sys-shape-dialog: var(--md-sys-shape-corner-extra-large);
--md-sys-shape-fab: var(--md-sys-shape-corner-large);
--md-sys-shape-chip: var(--md-sys-shape-corner-small);
--md-sys-shape-text-field: var(--md-sys-shape-corner-extra-small);
--md-sys-shape-bottom-sheet: var(--md-sys-shape-corner-extra-extra-large);
}
M3 Expressive introduces a library of 35 decorative and functional shapes that go beyond simple rounded rectangles. These shapes can be applied to components, backgrounds, and decorative elements, and they support smooth morphing between one another.
Geometric Shapes:
Organic and Playful Shapes:
Burst and Star Shapes:
Cookie Shapes (scalloped edges):
Pixel Shapes:
/* Using clip-path for expressive shapes */
.shape-flower {
clip-path: polygon(
50% 0%, 61% 11%, 75% 0%, 80% 15%,
100% 15%, 90% 30%, 100% 50%, 85% 55%,
100% 75%, 80% 75%, 75% 100%, 61% 85%,
50% 100%, 39% 85%, 25% 100%, 20% 75%,
0% 75%, 15% 55%, 0% 50%, 10% 30%,
0% 15%, 20% 15%, 25% 0%, 39% 11%
);
}
/* Using border-radius for organic shapes */
.shape-bun {
border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%;
}
/* Heart shape */
.shape-heart {
clip-path: path('M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z');
}
Filled Buttons:
.button-filled {
border-radius: var(--md-sys-shape-corner-full);
padding: 10px 24px;
height: 40px;
}
Outlined Buttons:
Text Buttons:
FABs (Floating Action Buttons):
Standard Cards:
.card {
border-radius: var(--md-sys-shape-corner-medium);
padding: 16px;
background: var(--md-sys-color-surface);
}
Elevated Cards:
Outlined Cards:
Dialogs:
.dialog {
border-radius: var(--md-sys-shape-corner-extra-large);
padding: 24px;
max-width: 560px;
}
Bottom Sheets:
.bottom-sheet {
border-radius: var(--md-sys-shape-corner-extra-extra-large)
var(--md-sys-shape-corner-extra-extra-large)
0 0;
}
Side Sheets:
Text Fields (Filled):
.text-field-filled {
border-radius: var(--md-sys-shape-corner-extra-small)
var(--md-sys-shape-corner-extra-small)
0 0;
background: var(--md-sys-color-surface-variant);
}
Text Fields (Outlined):
.text-field-outlined {
border-radius: var(--md-sys-shape-corner-extra-small);
border: 1px solid var(--md-sys-color-outline);
}
Input Chips:
Filter Chips:
Suggestion Chips:
.chip {
border-radius: var(--md-sys-shape-corner-small);
padding: 6px 12px;
height: 32px;
}
Level 0 (Backgrounds):
Level 1 (Primary containers):
Level 2 (Secondary containers):
Level 3 (Tertiary containers):
When grouping multiple components:
Adjacent Buttons:
Segmented Buttons:
.segmented-button:first-child {
border-radius: var(--md-sys-shape-corner-full) 0 0 var(--md-sys-shape-corner-full);
}
.segmented-button:last-child {
border-radius: 0 var(--md-sys-shape-corner-full) var(--md-sys-shape-corner-full) 0;
}
.segmented-button:not(:first-child):not(:last-child) {
border-radius: 0;
}
Toolbars and App Bars:
Shapes can morph between states to show relationships:
Button Press:
.button {
border-radius: var(--md-sys-shape-corner-full);
transition: border-radius 200ms cubic-bezier(0.2, 0, 0, 1);
}
.button:active {
border-radius: var(--md-sys-shape-corner-medium);
}
Container Expansion:
.card {
border-radius: var(--md-sys-shape-corner-medium);
transition: border-radius 300ms cubic-bezier(0.2, 0, 0, 1);
}
.card.expanded {
border-radius: var(--md-sys-shape-corner-extra-large);
}
Shape Transform:
/* FAB morphing into sheet */
.fab-to-sheet {
transition:
border-radius 400ms cubic-bezier(0.2, 0, 0, 1),
width 400ms cubic-bezier(0.2, 0, 0, 1),
height 400ms cubic-bezier(0.2, 0, 0, 1);
}
.fab-to-sheet.expanded {
border-radius: var(--md-sys-shape-corner-extra-extra-large);
width: 100%;
height: 400px;
}
M3 Expressive supports smooth morphing between any of the 35 expressive shapes. This creates moments of delight and communicates state changes visually:
Loading State Morph:
/* Circle morphing to burst on completion */
.loading-indicator {
clip-path: circle(50%);
transition: clip-path 400ms cubic-bezier(0.05, 0.7, 0.1, 1.0);
}
.loading-indicator.complete {
clip-path: polygon(/* burst shape coordinates */);
}
Interactive Shape Feedback:
// Using Web Animations API for shape morphing
element.animate([
{ clipPath: 'circle(50%)' },
{ clipPath: 'polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%)' }
], {
duration: 400,
easing: 'cubic-bezier(0.05, 0.7, 0.1, 1.0)',
fill: 'forwards'
});
Guidelines for Expressive Shape Morphing:
Use for special emphasis:
.asymmetric-card {
border-radius: 28px 12px 28px 12px;
}
Beyond circles and rounded rectangles:
Cutout Shapes:
.cutout-card {
border-radius: var(--md-sys-shape-corner-large);
clip-path: polygon(
0 0,
calc(100% - 40px) 0,
100% 40px,
100% 100%,
0 100%
);
}
Notched Shapes (for special components):
.notched-container {
border-radius: var(--md-sys-shape-corner-medium);
position: relative;
}
.notched-container::before {
content: '';
position: absolute;
top: -8px;
right: 20px;
width: 16px;
height: 16px;
background: var(--md-sys-color-surface);
transform: rotate(45deg);
}
Adjust shape based on screen size:
.card {
border-radius: var(--md-sys-shape-corner-small);
}
@media (min-width: 600px) {
.card {
border-radius: var(--md-sys-shape-corner-medium);
}
}
@media (min-width: 1024px) {
.card {
border-radius: var(--md-sys-shape-corner-large);
}
}
Ensure interactive elements meet minimum size:
.touch-target {
min-width: 48px;
min-height: 48px;
border-radius: var(--md-sys-shape-corner-full);
}
Shape should not obscure focus:
.button:focus-visible {
outline: 2px solid var(--md-sys-color-primary);
outline-offset: 2px;
border-radius: var(--md-sys-shape-corner-full);
}
Ensure shape is visible:
border-radius for simple rounded corners (GPU accelerated)clip-path sparingly (can be expensive)will-change for complex morphsborder-radius on many elements simultaneously/* Optimize complex shape animations */
.morphing-container {
will-change: border-radius;
}
.morphing-container.settled {
will-change: auto;
}
When implementing M3 shape system, ensure:
examples/shape-corners.svg — Visual reference SVG showing the complete M3 shape system: corner radius scale (None → Full), corner styles (rounded, cut, squircle, asymmetric), expressive shape library samples, and component shape mapping. Based on https://m3.material.io/styles/shape/overview-principles.tools
Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.
development
Generate Material Design 3 color themes programmatically from a source color using @material/material-color-utilities, the same engine that powers the Material Theme Builder. Use this when the user asks to generate an M3 color palette, create a custom theme from a brand color, or export M3 tokens to CSS, JSON, or framework configs.
testing
Applies Material Design 3 Expressive typography principles including variable fonts, type scales, and hierarchy. Use this when working on text styling, type hierarchy, readable interfaces, or when the user asks to apply Material Design 3 typography guidelines.
testing
Applies Material Design 3 Expressive motion and animation principles to create natural, intuitive, and engaging user experiences. Use this when implementing animations, transitions, micro-interactions, or when the user asks to apply Material Design 3 motion guidelines.