Ms. Okafor · Riverbend Elementary · Grade 3

Foundations

MTSS.ai design system

One documented source of truth for tokens, primitives and domain patterns. Every color is a semantic token in src/styles.css, so light and dark mode, contrast and theming all stay correct without touching feature code.

How to use this system

Import from @/components/ds. Never write raw color utilities (text-white, bg-[#0f172a]) in a screen — reach for a token or a component below. If something is missing, add it here first, then use it.

Typography

Geist across the product. One weight step per level (semibold for headings, regular for body), tight tracking on headings, relaxed leading on body. Numbers always use tabular figures so columns align. Body copy never goes below 12px.

Display

The right information, the right person, the right time.

Page hero / marketing · text-3xl font-semibold tracking-tight

Title 1

The right information, the right person, the right time.

Page title · text-2xl font-semibold tracking-tight

Title 2

The right information, the right person, the right time.

Panel title · text-lg font-semibold tracking-tight

Title 3

The right information, the right person, the right time.

Card / section heading · text-sm font-semibold tracking-tight

Body

The right information, the right person, the right time.

Default reading text · text-sm leading-relaxed

Body small

The right information, the right person, the right time.

Secondary detail · text-xs leading-relaxed

Label

The right information, the right person, the right time.

Metric labels · text-xs font-medium uppercase tracking-wider

Numeric

The right information, the right person, the right time.

KPIs, scores · text-2xl font-semibold tabular-nums

Spacing & radius

A 4px base scale. Cards use 20px padding, sections stack at 24px, page zones at 32–48px. Radius is driven by --radius (12px): xl for cards, full for pills, lg for inputs and buttons.

1 · 4pxIcon/label nudge
2 · 8pxInline gaps, chip padding
3 · 12pxCompact list rows
4 · 16pxDefault stack gap
5 · 20pxCard padding
6 · 24pxSection gap
8 · 32pxPage header margin
12 · 48pxMajor page zones

Color & status tokens

Minimal palette: a slate canvas, one teal-blue primary, and semantic accents used sparingly. Tier and AI have dedicated hues so they read instantly. Every token has a dark-mode counterpart and meets WCAG AA against its paired foreground.

--background

App canvas

--surface

Recessed panels, table headers

--card

Elevated content

--primary

Primary action

--accent

Selected / hover tint

--muted

Tracks, dividers, chips

--success

On track, complete

--warning

Watch, approaching due

--destructive

At risk, overdue

--info

Neutral informational

--ai

Anything AI-generated

--tier1

Tier 1 core

--tier2

Tier 2 targeted

--tier3

Tier 3 intensive

--tier-eval

Evaluation / SPED referral

Badges, tags & status

Status is never color-only: each badge pairs a dot with a text label so it survives color-blindness and grayscale printing. Tags are neutral metadata (domains, evidence level, skills) and can be removable.

On trackWatchAt riskOverdueCompleteIn progressDraftAI
ReadingESSA Tier 2AI matchedPhonemic awareness

Buttons

Exactly one primary action per view — the answer to “what next?”. Secondary for supporting paths, ghost for in-card actions, destructive only behind a confirm dialog. Icon-only buttons always carry an aria-label and a 44px tap target on touch.

Icons

Lucide only, 16px inside text and controls, 20px standalone, stroke 2, currentColor. Icons are decorative by default (aria-hidden) and paired with text; when standalone they get an accessible name via IconChip.

ReadingAI generatedCompleteNeeds attentionMissing documentation

Student avatars

Initials fall back when there is no photo. The ring color encodes the student's current tier, and the accessible name is always the full student name — never the initials.

Ava NguyenAva NguyenAva NguyenAva NguyenAva NguyenMarcus HillLiam CarterAva NguyenMarcus HillSofia ReyesLiam Carter+1

Cards & metrics

card-soft is the default container: 1px border, xl radius, soft shadow, 20px padding. AI-authored content always sits in the ai tone so users can tell machine output from record-of-truth data at a glance.

Probes due

12

4 overdue

Caseload health

Across 38 students

Fidelity88%

AI suggestion

Marcus has 3 flat probes — consider increasing dosage to 4×/week.

Sources: 6 progress probes, 2 screeners

Tables

Semantic table markup with a screen-reader caption and scoped headers. Surface-tinted header row, 1px row dividers, no zebra striping, numerics right-aligned and tabular. Tables scroll horizontally on mobile rather than reflowing into unreadable stacks.

Students with progress monitoring due this week
StudentTierNext probeStatus
Ava NguyenAva NguyenTier 2ORF 3On track
Marcus HillMarcus HillTier 3ORF 3At risk
Sofia ReyesSofia ReyesTier 2Maze 2Watch
Liam CarterLiam CarterTier 1Complete

Charts & progress graphs

Recharts styled entirely with chart-1…chart-5 tokens, so charts re-theme in dark mode automatically. Gridlines are subtle, axes are unlined, and every chart carries role='img' with a descriptive label plus a goal reference line where a decision rule exists.

Oral reading fluency

Tier 2 · weekly probes · goal 60 wcpm

Oral reading fluency rising from 42 to 63 words correct per minute across seven weeks, crossing the 60 wcpm goal line in week 7

Timeline

The student record's spine. One rail, tone-coded dots, right-aligned dates, optional inline metadata. Used for referrals, plan changes, meetings, assessments and family contact in a single chronological stream.

  1. Tier 2 reading plan started

    SIPPS · 4×/week · 30 min · Ms. Alvarez

  2. AI flagged flat trend

    Three consecutive probes below aimline.

    Watch
  3. MTSS team meeting

    Decision: increase dosage, re-check in 4 weeks.

  4. Attendance concern

    9 absences in 30 days.

Intervention & meeting cards

Domain objects render the same everywhere: library, planner, student workspace and dashboards. An intervention always shows dosage (frequency, duration, group size), the responsible provider and fidelity. A meeting always shows when, where, who and whether AI prep is ready.

SIPPS Plus

Reading · Decoding · Tier 2

On track
Frequency
4×/week
Duration
30 min
Group size
1:4
Provider
Ms. Alvarez
Location
Room 12
Fidelity88%
ESSA Tier 1 evidence

Grade 3 MTSS problem-solving team

Tue, May 68:15–9:00 AMConference Rm B

Prep ready
Ava NguyenAva NguyenMarcus HillMarcus HillSofia ReyesSofia Reyes+1 more
4 attendees

Forms

Every input has a real <label> bound by id. Hints sit under the field; errors replace the hint, use role='alert' and are announced. Required is marked with both an asterisk and the required attribute — never color alone. Prefer choosing over typing: chips, selects and AI drafts beat blank textareas.

Search the roster to autofill.

Used for progress monitoring reminders.

Or tap observations and let AI draft it.

Dialogs

Radix-backed: focus is trapped and restored, Escape closes, the title is the accessible name. Use dialogs for confirmation and short focused input only — multi-step work belongs in a wizard route, not a modal.

Empty, loading & skeleton states

An empty state always names the next action — never a dead end. Skeletons mirror the shape of the content they replace and are aria-hidden; a polite live region announces loading for screen readers. Use skeletons for first paint, spinners only for user-triggered waits.

No students need attention today

Every probe is logged and no plan is overdue. New alerts appear here as data comes in.

Dark mode

Dark mode is a token swap on the .dark class — no component knows about it. Surfaces lighten as they elevate (background → surface → card), borders become low-opacity white, and accent hues lift in lightness so contrast holds. Nothing pure-black or pure-white.

Elevation order

--backgroundelevates
--surfaceelevates
--cardelevates
--popoverelevates

Try it

Toggle dark mode with the button in the page header. Every block on this page re-themes without a single component change.

Accessibility rules

WCAG 2.1 AA is a build requirement, not a review step. These rules are enforced by the components above, so using the system keeps a screen compliant by default.

  • Contrast: body text ≥ 4.5:1, large text and UI borders ≥ 3:1, in both themes.
  • Never color-only: status always pairs a dot or icon with a text label.
  • Focus: visible focus-visible ring on every interactive element; never remove outlines.
  • Keyboard: full app operable without a mouse; Cmd+K search, Cmd+J copilot, Escape closes overlays.
  • Names: icon-only buttons carry aria-label; avatars expose the full student name.
  • Structure: one <main> per page, headings step h1→h2→h3 with no skips, lists use real list markup.
  • Forms: labels bound by id, errors via role='alert', required marked in text and markup.
  • Motion: transitions under 200ms and limited to opacity/transform; respect prefers-reduced-motion.
  • Touch: primary targets at least 44×44px on mobile.
  • Live data: auto-updating regions announce politely, never stealing focus.