Maps every Exams surface to the shared design tokens (00-shared/02_Design_Tokens.md )
and components (00-shared/03 ). Nothing in the module introduces new tokens;
semantic color mapping is defined here.
Semantic Color role (light / dark) Used for
Exam draft surfaceVariant / onSurfaceVariantExamStatusBadge.draft, chip, filter selected-off
Exam active primary / primaryContainerExamStatusBadge.active, Coverage bar active state
Exam completed secondary / secondaryContainerExamStatusBadge.completed, GradeChip
Exam published tertiary / tertiaryContainer + Icons.verifiedExamStatusBadge.published, publish success state, publishedAt chips
Marks saved tertiary checkrow save-state icon
Marks failed / max violation error / errorContainerfailed row, inline errors, MarksTextField error outline
Overlap / invalid config warning tertiary banner (passingMarks > maximumMarks, OQ-6)SlotHeaderCard warning, S4 conflict dialog
Grade absent / not marked onSurfaceVariant mutedreport-card unmarked rows
Coverage complete (100%) tertiaryMarksSummaryBar full state
Coverage partial primaryMarksSummaryBar progress
Status enum source: examination.schema.ts:28-33; type enum
examination.schema.ts:15-20.
Element Token
Screen titles (Exams, Results) titleLarge
Exam name (card/detail) titleMedium (card) / headlineMedium (detail)
Slot subject, roster student name titleMedium / bodyLarge
Meta lines (dates, class, counts) bodySmall / bodyMedium onSurfaceVariant
Marks values, percentages, totals labelLarge–displaySmall mono tabular
Badges/chips labelSmall / labelMedium
Form labels labelLarge onSurfaceVariant
Empty/error titles titleMedium; body bodyMedium
Use Token
Screen padding (phone) Sp.16
Screen padding (tablet+) Sp.24
Card internal padding Sp.16 (large), Sp.12 (rows)
Vertical rhythm between sections Sp.24 (detail), Sp.16 (forms)
Row gaps (marks row) Sp.12; field-to-label Sp.8
Badge/chip padding Sp.4/Sp.8, Sp.4/Sp.10
Surface Token
AppBar (S1/S2/S3) El-e1
Cards (ExamCard, SlotHeaderCard, ReportCard) El-e1
Publish dialog El-e3
Floating sheets (grade sheet, conflict sheet) El-e3
Element Token
Cards (list/detail) r-lg (16)
Rows, coverage tiles r-md (12)
Inputs, marks field r-md
Badges/chips r-full
MarksSummaryBar r-full
Icon Use
Icons.assignment / fact_checklist empty state, module icon
Icons.addFAB "New exam" / "Add subject"
Icons.edit / Icons.deletedetail menu
Icons.campaign / Icons.verifiedpublish button / published badge
Icons.check_circle (tertiary)row saved
Icons.error_outlinefailed row
Icons.cloud_off / Icons.cloud_queueoffline queued row
Icons.scheduleslot time
Icons.sharereport card share (proposed)
Icons.warning_amberpublish/conflict/overlap dialogs
Icons never carry meaning alone (paired with labels, 00-shared/09 ).
Token-only theming; no hardcoded colors. Status colors invert through the same
role tokens (primaryContainer ↔ primary handling per 00-shared/02 §7 ).
Published badge: tertiaryContainer (light) / tertiary-tinted container (dark).
Unmarked report-card rows: onSurfaceVariant at 60% opacity in dark.
Screenshots/QA: 14_QA_Checklist.md §dark includes badge contrast spot-checks.
Module component Built on Shared variants reused
ExamStatusBadge, ExamTypeChip, GradeChipAppBadge/AppChip—
ExamCard, ExamSubjectCard, CoverageTile, SlotHeaderCard, ResultRowCardAppCardpressed/hover state layers
MarksTextFieldAppTextField (compact numeric variant)error/disabled states
PublishDialog, delete confirm, conflict sheetAppDialogbarrierDismissible lock while submitting
MarksSummaryBarcustom progress primitive (shared) Semantics(liveRegion)
Skeleton/empty/error/offline AppSkeleton, AppEmptyState, AppErrorState, AppOfflineBanneras-is
Icons.* decorative animation beyond Mo set; danger-only surfaces for
non-destructive actions; any elevation above El-e3 inside the module.