Cascade rule

Dark theme overrides live near the end of app/globals.css so they win over base component styles.

If a base selector appears after the dark selector, the dark selector can be accidentally overridden.

Surfaces to cover

Any new component with a visual surface should cover these states.

  • Base surface background.
  • Muted surface background.
  • Border color.
  • Primary text and muted text.
  • Hover and selected state.
  • Focus state.
  • Disabled state.
  • Dropdown, popover, modal, or menu surface.

Known sensitive areas

Auth pages have dedicated dark theme overrides.

Operational pages have table and button dark theme overrides.

Select and autocomplete have explicit dark focus overrides to preserve the selected primary color.