What problem does it solve? Flutter apps accumulate stray colors, durations, radii, and font sizes scattered across widget code, making reskins painful, dark themes inconsistent, and accessibility regressions invisible until production. This Skill enforces a structure where every aesthetic value lives in lib/theme/ and every widget reads it back through a named semantic slot. ## Core Features & Use Cases - Two-tier token architecture: Primitives named by measured value (e.g. neutral12) feed semantic slots (surface, accent, hairline) exposed via a ThemeExtension with an asserting of(context) accessor. - Hand-authored ColorScheme and gated raw values: Replaces ColorScheme.fromSeed with explicit M3 role declarations for both light and dark, while scripts/check_raw_values.sh fails any raw Color, Curves, Duration, BorderRadius, or fontSize outside lib/theme/. - Motion, fonts, and contrast discipline: Reduced motion collapses to Duration.zero via MediaQuery, fonts are bundled with license registration instead of google_fonts, and AA contrast is verified as a computeLuminance unit test. - Use Case: When adding a new status chip to a Flutter app, derive its color from a canonical enum through a semantic slot, pair it with icon and label signals, and let the gate scripts reject any hardcoded hex before the PR merges. ## Quick Start Ask the AI to review or create your Flutter ThemeData and ThemeExtension setup so all colors, motion, and typography live in lib/theme/ behind the raw-values gate.