Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

11 — Design System Mapping (Academics Module)

Academics module → Material 3 / Flutter / token mapping, extending 00-shared/04. Every color, type, spacing, elevation, radius, icon, motion reference traces to 00-shared/02_Design_Tokens.md. Module components defined in 07_Component_Library.md.


1. Theme recipes (module)

ScreensThemeException
Structure lists (years/grades/classes/sections/subjects)standard shell surfacecurrent-year row = primaryContainer
Class detail (master)standard shellroster conflict rows = tertiaryContainer
Assignment matrix sheetsurfaceContainerLow sheetdisabled already-assigned options = surfaceVariant text
Hierarchy explorerstandard shellempty nodes / warning dots = tertiary
Read-only browse (student/parent)standard shell, all CTAs hiddenno destructive accents visible
Destructive actions (delete/remove/set-current)error + errorContainer dialogs

2. Widget → token

ComponentM3 / FlutterTokensElevRadius
Year row (current)AppListTile in AppCard tonalprimaryContainer, border outlineVariante-1r-lg
Grade ladder rowAppListTileleading displayOrder circle surfaceVariant, mono labelMediumr-full
Class row chipsAppChipsgrade chip secondaryContainer, section chip surfaceVariant, year chip outliner-sm
HierarchyTree nodecustom list (07 §1)hover surfaceVariant; indent guide outlineVariant 1 pxr-md
Node empty/warning dotAppBadgetertiary (empty), tertiaryContainer (warning)r-full
SectionChipsWrap of InputChipselected secondaryContainer; inactive status≠active outlinedr-sm
SubjectAssignmentRowcustom ListTileconflict: tertiaryContainer bg + 2 px tertiary left borderr-md
YearStatusBadgeAppChipsupcoming outline; active primaryContainer; archived surfaceVariantr-sm
EntityStatusBadgeAppChipsnon-active → neutral surfaceVariant, raw value truncatedr-sm
CascadingEntityPickercolumn of AppDropdownfill surfaceVariant, focus primary; disabled child surfaceContainerLowr-md
MarksSummaryTiles2×2 AppCard tilesnumerals titleMedium mono + tabularFigures; label labelMediume-1r-lg
RosterTable (≥840)DataTableheader surfaceContainerLow sticky; hover surfaceVariant
ConflictBannercustom MaterialBanner-styletertiaryContainer bg / onTertiaryContainer texte-1r-md
Matrix add sheetAppBottomSheetsurfaceContainerHighe-4r-xl (top)
Destructive dialogAppDialogerrorContainer icon + error confirme-5r-lg
FAB (add entity)FloatingActionButton.extendedprimaryContainere-3r-full
Empty stateAppEmptyStateicon onSurfaceVariant 40 %

3. Typography mapping

TokenScreen element
headlineMediumdetail header names (year/grade/class/subject)
titleLargeform titles, dialog titles, explorer root nodes
titleMediumlist row titles, tab labels, section headers
bodyMediummeta rows (capacity, teacher, room), roster teacher names
bodySmalldates, hints, "N sections · N classes" counts, marks summary
labelLargebuttons, FAB label, tabs
labelMediumchips, badges, displayOrder circles
monosubject code, capacity numerals, displayOrder, marks numerals

Numerals (capacity, marks, orders) use FontFeature.tabularFigures() so ladder columns don't jitter (00-shared/02 §2).

4. Iconography

Material Symbols outlined; module map: calendar_month, school, groups, menu_book, book_2 (subjects), account_tree (explorer), expand_more/less (tree), warning_amber (conflicts), check_circle (current), add, swap_horiz (replace), delete_outline, search, filter_list, arrow_back.

5. Motion tokens (values 00-shared/02 §6)

PurposeTokenApplied to
List → detail pushm-base slide + Hero m-slowall detail pushes
Tree expand/collapsem-base (AnimatedSize)explorer
Sheet (add assignment)m-base bottom slidematrix
Row exit on delete/removem-fast (AnimatedList)lists, roster
Badge change (set-current)m-fast scale popyear screens
Conflict bannerm-base slide-down + fadedetail/explorer
Filter chips swapm-fast fill/outlinelists

Rules: reduced-motion substitutes fades/instants only (08 §4).

6. Contrast & dark parity

  • All text ≥ 4.5:1; interactive chrome (dots, borders) ≥ 3:1 (00-shared/09 §2).
  • Dark: conflict surface = tertiaryContainer (kept distinct from error banners); current-year pill primaryContainer with onPrimaryContainer text.
  • No sole-color status: status always badge + icon/text label; conflicts always banner + row highlight + icon (color-blind safe, 00-shared/09 §9).
  • Tree indent guides: outlineVariant on light, outline at 40 % on dark.

7. Breakpoint behaviour

ClassListsDetailExplorer / Matrix
phone <600single column, FAB bottompushed (full screen)tree full width; matrix sheet full-height
600–839 (tablet)two-column grid (classes by grade groups)master-detail splittree with search box pinned
≥840list + detail side-by-side (StatefulShellBranch, 00-shared/05 §3)right pane tabsroster as RosterTable; explorer 2-pane (tree
≥1200max content width 1280, centeredsamesame

Desktop extras: hover rings on rows/nodes, right-click menus, keyboard shortcuts (10 §2), always-visible Scrollbar (00-shared/04 §8).