A CalcTheme that animates to a new data over duration (theme
transitions: a brightness change now, theme switches in M3), in step
with Material's own AnimatedTheme.
Everything the calculator widgets read for their look: resolved colours,
key shape, type and the press-motion subset. M3 produces it from a
ThemeSpec; M2 has PlainTheme.
One family's chrome recipe. Fonts come from the theme: headings, titles
and labels use its key font; body text uses bodyFont (null = the key
font too).
The key-face sizes the keypad lays out now, published by each key on
layout. Theme prefetch prepares renderers for them (key-shape morphs),
so no commit or transition frame builds one (design doc "60 fps
budget: no Morph construction in commit frames").
Extra channels a KeyFaceMotion may also provide (the calculator's
KeyPressMotion does). Renderers must still work without them (test
fakes, previews): check with motion is KeyFaceMotionDetail.
A key face that can morph toward another face of the same renderer
during a theme transition (motion brief §6.4: one tree, FlatMorph
shapes). Renderers that implement it get their shapes interpolated at
the transition's shape progress; others switch at the midpoint.
Paints the plain-theme key face: a rounded-rect fill (and optional
outline) with the hover and pressed state layers, plus the long-press
radial fill (motion brief §2.2.4, §4.1, §4.4).
A rebuild boundary for a theme-dependent layer (toolbar, display, chip):
widgets below it that read the full per-frame theme (CalcTheme.of)
rebuild inside this layer's own build scope during a transition, so
the screen's layout above it is never re-run (design doc: "theme
widgets rebuild only theme-dependent layers").