RIPDPI's own Compose conventions: ViewModel pattern, Route/Screen split, DataStore->StateFlow, RipDpiThemeTokens. Use for how this app does Compose, not generic Compose API questions (see compose).
日本語の概要は準備中です。原文の説明を表示しています。
MD3 vocabulary, component catalog, and a compliance-audit rubric across Web/Flutter/Compose. Use for MD3 tokens/components or an audit -- RIPDPI disables dynamic color (see android-compose-patterns).
インストールする前に、エージェントに与えられる指示の中身を確認できます。
This skill guides implementation of Google's Material Design 3 (MD3) — a personal, adaptive, expressive design system. MD3 uses dynamic color, tonal surfaces, rounded shapes, and spring-based motion to create UIs that feel alive and personal.
RIPDPI note: this repo's Compose implementation disables Material You / dynamic color and reads its color scheme, spacing, and typography through RipDpiThemeTokens (see the android-compose-patterns skill and docs/design/rds/README.md). Use this skill here for MD3 vocabulary, the component catalog, and the compliance-audit rubric only — do not add dynamicLightColorScheme/dynamicDarkColorScheme calls in this repo.
MD3 is built on three principles:
Key differences from MD2:
Relationship with frontend-design skill: When both skills are active, MD3 provides the design system (tokens, components, layout rules) and frontend-design provides creative direction within those constraints. MD3 rules take precedence for component structure and token usage. Note: Roboto/Roboto Flex IS the correct default typeface in MD3 — the frontend-design guidance to avoid Roboto does not apply when implementing MD3.
What are you building?
Full app scaffold → See "Common Patterns: App Shell" + references/layout-and-responsive.md
Single component → See "Component Quick Reference" table → references/component-catalog.md
Custom theme → See references/theming-and-dynamic-color.md
Form / input layout → See references/component-catalog.md § Input Components
Navigation structure → See references/navigation-patterns.md
Data display → See references/component-catalog.md § Data Display
What platform?
Web (vanilla JS) → @material/web components + CSS custom properties
Web (React/Vue/Svelte) → CSS custom properties + wrapper components (no official React lib)
Web (CSS-only) → Use MD3 token values as CSS custom properties (no <md-*> elements)
Flutter → material3: true in ThemeData, ColorScheme.fromSeed()
Jetpack Compose → MaterialTheme with Material3 dependencies
All MD3 tokens use the md.sys namespace. On the web, these map to CSS custom properties:
--md-sys-color-*)| Token | Purpose |
|---|---|
primary | High-emphasis fills, text, icons against surface |
on-primary | Text/icons on primary |
primary-container | Standout fill for key components (FAB, etc.) |
on-primary-container | Text/icons on primary-container |
secondary / on-secondary | Less prominent accents |
secondary-container / on-secondary-container | Recessive components (tonal buttons) |
tertiary / on-tertiary | Contrasting accents |
tertiary-container / on-tertiary-container | Complementary containers |
error / on-error | Error states (static — doesn't change with dynamic color) |
error-container / on-error-container | Error container fills |
surface | Default background |
on-surface | Text/icons on any surface |
on-surface-variant | Lower-emphasis text/icons on surface |
surface-container-lowest | Lowest-emphasis container |
surface-container-low | Low-emphasis container |
surface-container | Default container (nav areas) |
surface-container-high | High-emphasis container |
surface-container-highest | Highest-emphasis container |
surface-dim / surface-bright | Maintain relative brightness across light/dark |
inverse-surface / inverse-on-surface / inverse-primary | Contrasting elements (snackbars) |
outline | Important boundaries (text field borders) |
outline-variant | Decorative elements (dividers) |
Full details: references/color-system.md
--md-sys-typescale-*)| Scale | Sizes | Use |
|---|---|---|
| Display | L / M / S | Hero text, large numbers |
| Headline | L / M / S | Section headers |
| Title | L / M / S | Smaller headers, card titles |
| Body | L / M / S | Paragraph text, descriptions |
| Label | L / M / S | Buttons, chips, captions |
Each style has tokens for: -font, -weight, -size, -line-height, -tracking
Plus 15 emphasized variants (higher weight) via --md-sys-typescale-emphasized-*
Full details: references/typography-and-shape.md
--md-sys-shape-corner-*)| Token | Value | Example components |
|---|---|---|
none | 0dp | — |
extra-small | 4dp | Chips, snackbars |
small | 8dp | Text fields, menus |
medium | 12dp | Cards, dialogs |
large | 16dp | FABs, navigation drawer |
large-increased | 20dp | (Expressive) |
extra-large | 28dp | Bottom sheets |
extra-large-increased | 32dp | (Expressive) |
extra-extra-large | 48dp | (Expressive) |
full | 9999px | Buttons, chips, badges |
| Level | DP | Tonal offset | Use |
|---|---|---|---|
| 0 | 0dp | None | Flat surfaces, most components at rest |
| 1 | 1dp | +5% primary | Elevated cards, modal sheets |
| 2 | 3dp | +8% primary | Menus, nav bar, scrolled app bar |
| 3 | 6dp | +11% primary | FAB, dialogs, search, date/time pickers |
| 4 | 8dp | +12% primary | (hover/focus increase only) |
| 5 | 12dp | +14% primary | (hover/focus increase only) |
Elevation in MD3 is communicated through tonal surface color, not shadows. Shadows are only used when needed for additional protection against busy backgrounds.
MD3 Expressive (May 2025) introduced spring-based motion physics for components. The legacy easing/duration system is still used for transitions (enter/exit/shared-axis):
| Easing | Duration | Transition type |
|---|---|---|
| Emphasized | 500ms | Begin and end on screen |
| Emphasized decelerate | 400ms | Enter the screen |
| Emphasized accelerate | 200ms | Exit the screen |
| Standard | 300ms | Begin and end on screen (utility) |
| Standard decelerate | 250ms | Enter screen (utility) |
| Standard accelerate | 200ms | Exit screen (utility) |
CSS easing values:
cubic-bezier(0.2, 0, 0, 1)cubic-bezier(0.05, 0.7, 0.1, 1)cubic-bezier(0.3, 0, 0.8, 0.15)cubic-bezier(0.2, 0, 0, 1)cubic-bezier(0, 0, 0, 1)cubic-bezier(0.3, 0, 1, 1)| Category | Components (web element examples) |
|---|---|
| Actions | Button (filled / outlined / text / elevated / tonal), Button group, FAB, Extended FAB, FAB menu, Icon button, Segmented button, Split button |
| Communication | Badge, Loading indicator, Progress indicator (linear / circular), Snackbar, Tooltip |
| Containment | Card (filled / outlined / elevated), Carousel, Dialog, Bottom sheet, Side sheet, Divider |
| Input | Checkbox, Chips (assist / filter / input / suggestion), Date picker, Menu, Radio button, Slider, Switch, Text field, Time picker |
| Navigation | App bar, Navigation bar, Navigation drawer, Navigation rail, Search, Tabs, Toolbar |
| Data Display | List |
For exact web element names (md-filled-button, md-outlined-text-field, etc.), variants, attributes, a11y notes, and code examples for each component, see references/component-catalog.md. Components not implemented in @material/web are documented there with CSS-only fallbacks.
Use @material/web Web Components for vanilla JS, or CSS custom properties with standard HTML for CSS-only setups. Full setup, imports, basic-usage example, theming via --md-sys-color-* custom properties, component-level overrides, and the dark-theme media query are in references/web-implementation.md. Theming details continue in references/theming-and-dynamic-color.md.
Code examples for the canonical MD3 screen-level layouts — app shell (responsive nav rail + top app bar + content), card grid, form layout — live in references/common-patterns.md. More layout patterns continue in references/navigation-patterns.md and references/layout-and-responsive.md.
Never do these when implementing MD3:
@material/mdc-* (MD2) alongside @material/web (MD3). They have incompatible APIs and styling.var(--md-sys-color-*) tokens, never raw hex/rgb values. Hardcoded colors break dynamic theming, dark mode, and contrast adjustment.primary + on-primary, surface-container + on-surface). Arbitrary pairings break contrast in dynamic color and high contrast modes.outline for dividers: Use outline-variant for dividers. outline is for important boundaries like text field borders.border-radius directly: Use shape tokens (var(--md-sys-shape-corner-medium)) so shapes stay consistent with theming.@material/web uses Web Components (custom elements) which require JavaScript to render. They won't produce meaningful HTML in SSR without additional hydration strategies.For Flutter and the cross-platform component name mapping, see references/platform-notes.md.
MaterialTheme(
colorScheme = dynamicLightColorScheme(context), // or dynamicDarkColorScheme
typography = Typography(),
shapes = Shapes(),
) {
// Content
}
dynamicLightColorScheme/dynamicDarkColorScheme derive the scheme from the user's wallpaper (Android 12+, Material You). Do not use them in RIPDPI — this repo supplies its own ColorScheme through RipDpiThemeTokens instead (see the android-compose-patterns skill).
The Expressive update adds visual richness while maintaining usability:
When targeting web, note that many Expressive features (shape morph, spring physics) aren't yet available in @material/web. Use the CSS easing/duration tokens as fallback.
When invoked with audit as the argument (e.g., /material-3 audit), or when asked to audit/review MD3 compliance, analyze the target app or page and produce a compliance report.
| Category | What to check |
|---|---|
| Color tokens | Uses --md-sys-color-* tokens (not hardcoded hex). Proper tonal pairing (on-X with X). Dark mode support. No arbitrary color combinations that break contrast. |
| Typography | Uses MD3 type scale tokens. Correct scale usage (Display for heroes, Body for text, Label for buttons). Consistent font family. |
| Shape | Uses shape tokens for border-radius. Correct token per component (full for buttons, medium for cards). No raw pixel values. |
| Elevation | Tonal surface colors used instead of shadows. Correct elevation levels per component. Hover/focus raises by 1 level. |
| Components | Uses @material/web elements or correctly implements MD3 component specs. Correct variants for context. Proper slot usage. |
| Layout | Responsive breakpoints match MD3 (compact/medium/expanded/large/extra-large). Uses canonical layouts where appropriate. Proper margins and spacing. Multi-pane layouts on medium+ screens. Content constrained to readable widths on large screens. Foldable hinge avoidance if targeting foldables. |
| Navigation | Correct nav component for screen size (bar on mobile, rail on tablet, drawer on desktop). Responsive transitions. Hover states for pointer devices on large screens. |
| Motion | Transitions use MD3 easing/duration tokens. Appropriate easing type for transition direction (enter/exit/persist). |
| Accessibility | Color contrast meets 3:1 minimum (MD3 built-in). Proper ARIA labels. Keyboard navigation. Focus indicators. |
| Theming | Theme is applied via CSS custom properties. Supports dark mode. Dynamic color ready (tokens not hardcoded). Component-level overrides use proper token names. |
# MD3 Compliance Audit Report
Target: [URL or file path]
Date: [date]
Overall Score: [X/100]
## Scores by Category
| Category | Score | Status |
|----------------|-------|--------|
| Color tokens | X/10 | [pass/warn/fail] |
| Typography | X/10 | [pass/warn/fail] |
| Shape | X/10 | [pass/warn/fail] |
| Elevation | X/10 | [pass/warn/fail] |
| Components | X/10 | [pass/warn/fail] |
| Layout | X/10 | [pass/warn/fail] |
| Navigation | X/10 | [pass/warn/fail] |
| Motion | X/10 | [pass/warn/fail] |
| Accessibility | X/10 | [pass/warn/fail] |
| Theming | X/10 | [pass/warn/fail] |
## Critical Issues
[List items scoring 0-3 with specific file:line references and fixes]
## Warnings
[List items scoring 4-6 with recommendations]
## Passing
[List items scoring 7-10 with notes on what's done well]
## Recommended Fixes (Priority Order)
1. [Most impactful fix first]
2. ...
For a live URL (browser tools available):
mcp__claude-in-chrome__navigatemcp__claude-in-chrome__read_pagemcp__claude-in-chrome__javascript_toolmcp__claude-in-chrome__resize_windowFor source code (file paths provided):
Quick checks (grep patterns for common violations):
# Hardcoded colors (should use tokens)
grep -rn '#[0-9a-fA-F]\{3,8\}' --include='*.css' --include='*.scss'
grep -rn 'rgb\(|rgba\(' --include='*.css' --include='*.scss'
# Raw border-radius (should use shape tokens)
grep -rn 'border-radius:' --include='*.css' | grep -v 'var(--md-sys-shape'
# Raw box-shadow (MD3 uses tonal elevation)
grep -rn 'box-shadow:' --include='*.css'
# MD2 imports (should be @material/web)
grep -rn '@material/mdc-' --include='*.js' --include='*.ts'
# Missing dark mode
grep -rn 'prefers-color-scheme' --include='*.css'
Status thresholds: pass (7+), warn (4-6), fail (0-3)
references/color-system.md — Complete color role catalog, tonal palettes, dynamic color, light/dark scheme mappingreferences/typography-and-shape.md — Type scale values, shape corner scale, elevation levels, motion tokensreferences/component-catalog.md — All 30+ components with web element names, attributes, code examples, a11y notesreferences/navigation-patterns.md — Which navigation component to use, responsive nav transitionsreferences/layout-and-responsive.md — Breakpoints, canonical layouts, CSS Grid implementationreferences/theming-and-dynamic-color.md — Theme generation, brand color integration, dark mode, runtime switchingreferences/web-implementation.md — @material/web setup, imports, and theming for a web targetreferences/platform-notes.md — Flutter setup and the cross-platform component name mappingまだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
RIPDPI's own Compose conventions: ViewModel pattern, Route/Screen split, DataStore->StateFlow, RipDpiThemeTokens. Use for how this app does Compose, not generic Compose API questions (see compose).
日本語の概要は準備中です。原文の説明を表示しています。
ADB-based RIPDPI device/emulator debugging: build/install/launch, logcat filtering, fixture port-forwarding, instrumented tests, crash/ANR triage. Use when debugging on a real device or emulator.
日本語の概要は準備中です。原文の説明を表示しています。
RIPDPI Appium launch-contract reference: start routes and permission/service/data presets. Use when a test launches to the wrong screen or a new automation route is added. General flakiness: appium-test-debug.
日本語の概要は準備中です。原文の説明を表示しています。
RIPDPI Appium test authoring: page objects, resource-id locators, assertions, wait tiers. Use when writing a new Appium test or page object, or adding coverage for a new screen.
日本語の概要は準備中です。原文の説明を表示しています。
RIPDPI Appium failure triage: flaky tests, locator/session/wait issues, screenshot and element-tree debugging. Use when an Appium test fails or is flaky.
日本語の概要は準備中です。原文の説明を表示しています。
Add or modify a GitHub Actions job. Use when editing a file under .github/workflows/. Not for running a workflow locally (local-ci-act) or release signing (release-signing).
日本語の概要は準備中です。原文の説明を表示しています。