Attendance Heatmap

.attendance-heatmap

A day-per-cell density grid. Each cell is a <span> carrying an intensity class — .l1 to .l4 for present days, .is-absent for an absence, or nothing for a non-school day. Pair it with the legend so the scale is readable. Give the container an aria-label describing the range.

LessMore Absent

Empty — a period with no records still renders the grid, so the layout never jumps.

Attendance Sessions
.attendance-sessions · .attendance-session

A day's registers in order. .attendance-session takes .is-done when the register is closed and .is-now for the one in progress. The period number sits in <span class="p">; the trailing status uses the shared .status-chip.

1
Assembly · 08:001,329 marked · 100%
Closed
2
Mathematics · 09:001,312 marked · 98%
Closed
3
Science — Physics · 10:15846 marked · in progress
Open
4
English · 11:15Not started
Pending
5
Inter-house debate preparation and rehearsal in the auditorium · 13:00Long titles clamp to one line
Pending
Marking Row
.attendance-mark-row

One student per row with a present / late / absent toggle. The toggle is a role="group" of buttons using data-mark-set; the active one takes .is-on. Label the group with the student's name so screen readers announce what is being changed.

Janet DanielRoll 35013
Joann MichaelRoll 35014
Kathleen MorenoRoll 35015

Disabled — a locked register keeps the row readable but blocks changes.

Lisa RayRoll 35016 · register closed
Comparison Bars & Percent
.attendance-compare-row · .attendance-percent

Rate per group, ranked. The row takes a status class — .is-present, .is-late, .is-absent — which tones the fill; the track width is set inline.

Grade III98%
Grade IV94%
Grade V88%
Grade VI71%

.attendance-percent is the inline rate used inside tables and cards. It takes .is-good, .is-warn or .is-bad.

96% 84% 62%
Attendance Rail .attendance-rail

Progress of the marking round itself — how much of the register is complete.

1,312 of 1,340 marked
Present 1,240Late 42Absent 30
Component reference
ComponentPurposeModifiers & statesNotes
.attendance-heatmapDay-per-cell density gridCells: .l1.l4, .is-absent15-column grid; give the container an aria-label
.attendance-heatmap-legendIntensity scaleSame cell classesPlace directly under the heatmap
.attendance-sessions / .attendance-sessionA day's registers.is-done, .is-nowPeriod number in .p; status uses .status-chip
.attendance-mark-rowPer-student marking rowToggle: .is-on, disabledToggle needs role="group" and a per-student label
.attendance-compare / -rowRate comparison bars.is-present, .is-late, .is-absentTrack width set inline
.attendance-percentInline rate value.is-good, .is-warn, .is-badUse inside tables and cards
.attendance-railMarking-round progress-done, -bar, -keysSits at the foot of a register panel
.attendance-hero-main / -rate / -titleHeadline rate blockOne per screen, above the register

Status tone comes from the global semantic colours — present maps to --bs-success, late to --bs-warning, absent to --bs-danger, leave to --bs-info. Combine these components with the workspace system on UI Workspace for the surrounding toolbar, grid and footer.