Unlike colors and typography, Sundial has no central spacing/radius/shadow token file. Shape and spacing are conventions enforced by the component themes in
app_theme.dart and by the Styled* components themselves. This page documents those conventions as they exist in code.Corner radii
The only exported radius constant is
kDefaultCardBorderRadius = 16.0 in styled_card.dart. Everything else is inline in the component themes.
Rule of thumb: primary tappable surfaces and cards are 16; dense system surfaces (dialogs, filled buttons) are 8; anything navigational is a pill.
Padding
Recurring values from the component themes:Elevation & shadows
Sundial is intentionally flat: buttons setelevation: 0, the navigation bar sets elevation: 0, and surfaces communicate hierarchy through the surfaceBg → surfaceElevated → surfaceHigh color ladder instead of shadows.
The exception is StyledCard’s default (elevated) variant, which draws a subtle shadow derived from its elevation parameter (default 1.0). The .outlined() and .filled() variants are shadowless.
Sizing
Layout spacing
Gaps between siblings use Flutter’s modernspacing parameter rather than SizedBox separators:
Animation durations
Also not centrally tokenized — durations are declared where they’re used (e.g. wallpaper image fade-in is 500 ms). When adding motion, match the durations of neighboring components rather than inventing new ones.If a central spacing/radius/duration token file is ever introduced, it should live in
lib/design_system/tokens/ alongside the color and typography tokens — and this page should become a spec table like the others.