Design system contents

Foundations

System, light, and dark appearance

Theme is implemented across the app and stored locally, independently of account saves.

On this page

Theme lifecycle

Theme lifecycle
StepSource behavior
Before paintthemeScript reads teachkit-theme and resolves system preference.
HydrationThemeProvider synchronizes preference, data-theme, and colorScheme.
Explicit selectionThemeSelect offers System, Light, and Dark.
Quick switchThemeToggle writes an explicit light/dark override; it does not return to System.
Device and tabsmatchMedia change and storage events resynchronize the provider.
Storage unavailableReads/writes are caught; the current in-memory choice still works.
MarketingNo implemented dark theme; app dark examples remain images inside a light page.

Theme coverage and exceptions

Semantic backgrounds, text, focus, selected rows, and neutral utilities change together. Some literal colors remain: turquoise primary actions, provider colors, gold review accents, and switch off-state backgrounds. Capture both themes independently; a working provider does not prove every literal color combination is readable.

Source references

Source references
FileResponsibility
src/lib/theme.tsPre-paint script
src/components/ThemeProvider.tsxPreference state and controls
src/app/layout.tsxScript installation
src/app/globals.cssTheme cascade

Interface examples

Native TeachKit interfaces with fictional course, account, and learner records. Service responses and media are isolated demonstrations; no customer data or live changes. Captured at 2× resolution or higher. Select an image to inspect it full size.

Account · Featured section · Light · Desktop · 2220 × 1683 px
Appearance · Component detail · Light · Desktop · 2280 × 483 px

Source audit: 2026-10-22 · Revision 903bbf05ca9d · Documentation v2.0.0