Module-specific extensions to the shared mapping (00-shared/04 ). Tokens from
00-shared/02 ; theming rules enforced (00-shared/04 §7 ): no literal colors,
spacing, or durations in widget code.
Use Light token Dark token Component
Status active badge secondary/secondaryContainersame roles StatusBadge
Status graduated badge tertiary/tertiaryContainersame StatusBadge
Status archived badge onSurfaceVariant on surfaceVariant + error iconsame StatusBadge
Destructive actions (delete/graduate/unlink) errorerrorAppButton.destructive, dialogs
Primary guardian badge primaryContainer/onPrimaryContainersame GuardianLinkCard
Active timeline node primary (pulse)primaryAcademicHistoryTimeline
Import partial-failure banner tertiaryContainersame ImportReportCard
Filter chip selected secondaryContainersame RosterFilterBar
Admission number / roll number / IDs mono type tokensame list tiles, headers, forms
Warning banner (enrollment deactivation) tertiaryContainersame transfer/enroll forms
Status is never color-only — always icon + text (00-shared/09 §9 ).
Token Where
headlineMediumRoster screen title (AppBar titleLarge on detail), empty-state headlines
titleLargeDetail header student name, import report headline
titleMediumList tile names, timeline year/class, section headers
bodyMediumForm labels, info rows, banner bodies
bodySmallTimestamps, file sizes, result-count line, helper texts
labelLargeTab labels, buttons, chips
labelMediumBadges, relationship chips
monoADM-…, roll numbers, metadata JSON
Numerals (priorities, counts, capacities) use tabularFigures()
(00-shared/02 §2 ).
Token Value Use
Screen padding 16 / 24 (tablet+) all module screens
Card padding 16 header, guardian, document tiles
Card gap 12 tab content stacks
Section gap 24 profile tab sections
List row height ≥ 56 (roster 72 with avatar+meta) tiles
Form field gap 16 all forms
Wizard step gap 24 AppStepper
Master-detail list width 320–400 dp desktop ≥ 1200
Token Use
r-lg 12header card, guardian card, import report card
r-md 8inputs, buttons, attachment tiles
r-fullavatars, status dot
e-0roster rows (flat)
e-1header card, cards, sticky search bar
e-2sticky filter bar (desktop), FAB
e-4dialogs (graduate/archive/delete)
e-5sheets (enroll/upload/link)
Icon Use
group / person_addroster empty state / create
searchroster search
filter_altfilter bar
upload_file / description / picture_as_pdfdocuments
swap_horiztransfer
schoolgraduate badge
archive / unarchivearchive / restore
deletedelete
family_restroom / shieldparent link sheet
check_circle / cancelactive / blocked states
Use Token Flutter
List → detail m-slowHero avatar + page transition
Tab content m-slowAnimatedSwitcher/TabBarView default
Badge morph m-fastAnimatedSwitcher
List entrance m-entrance 40 ms staggerTweenAnimationBuilder
Skeleton → content m-slowAnimatedOpacity cross-fade
Sheet/dialog m-baseplatform defaults
Widget Token mapping
StudentListTileListTile + surface + outlineVariant divider (desktop)
StatusBadgeBadge/custom Container role fills + filled icon
ClassSelectCascadeAppDropdowns, focus ring primary
ImportReportCardCard.filled + AppStatTile
AcademicHistoryTimelinecustom, outlineVariant connectors
DocumentUploadTilesurfaceContainerLow + LinearProgressIndicator primary
Roster rows: surface; dark elevation substitutes for borders (00-shared/02 §10 ).
Status badges re-read ColorScheme (no hardcoded green/red).
Timeline connectors outlineVariant (light) / #49454F (dark token).
Golden tests at light+dark for all module components (00-shared/10 §9 ).