libra/docs/stories/story-10.1-core-css-theme-u...

4.5 KiB

Story 10.1: Core CSS Theme Update

Story

As a developer I want to update the Tailwind CSS theme color variables So that the application uses the new LIBRA for Rights brand palette

Acceptance Criteria

AC1: Update Color Variables in resources/css/app.css

Given the current theme uses Navy Blue + Gold palette When I update the @theme block Then the following color mappings are applied:

Old Variable Old Hex New Variable New Hex
--color-navy #0A1F44 --color-primary #4A4A42 (Charcoal)
--color-gold #D4AF37 --color-accent #C9C4BA (Warm Gray)
--color-gold-light #F4E4B8 --color-accent-light #E8E4DC (Off-White)
--color-cream #F9F7F4 --color-background #E8E4DC (Off-White)
--color-charcoal #2C3E50 --color-text #1A1A1A (Deep Black)

AC2: Maintain Backward Compatibility Aliases

Given existing components use navy, gold, cream class names When the theme is updated Then aliases are created so existing classes continue to work:

  • --color-navy → points to --color-primary (Charcoal)
  • --color-gold → points to --color-accent (Warm Gray)
  • --color-gold-light → points to --color-accent-light (Off-White)
  • --color-cream → points to --color-background (Off-White)
  • --color-charcoal → points to --color-text (Deep Black)

AC3: Update Semantic Aliases

Given semantic aliases exist for components When theme is updated Then these mappings are correct:

  • --color-primary#4A4A42 (Charcoal)
  • --color-accent#C9C4BA (Warm Gray)
  • --color-accent-content#C9C4BA (Warm Gray)
  • --color-accent-foreground#4A4A42 (Charcoal)
  • --color-background#E8E4DC (Off-White)
  • --color-text#1A1A1A (Deep Black)

AC4: Update Button Styles

Given button classes use gold/navy colors When theme is updated Then .btn-primary and .btn-secondary use new palette:

  • Primary: Charcoal background, Off-White text
  • Secondary: Warm Gray border, Charcoal text
  • Hover states updated accordingly

AC5: Update Form Focus States

Given form inputs have gold focus rings When theme is updated Then focus states use Warm Gray:

  • focus:border-gold → Warm Gray border
  • focus:ring-gold → Warm Gray ring

AC6: Update Prose Class

Given .prose-navy class exists for blog content When theme is updated Then rename to .prose-brand or update colors:

  • Headings: Charcoal
  • Links: Warm Gray
  • Body: Deep Black

AC7: Status Colors Unchanged

Given status colors serve functional purposes When theme is updated Then these remain unchanged:

  • --color-success: #27AE60
  • --color-danger: #E74C3C
  • --color-warning: #F39C12

AC8: WCAG AA Contrast Compliance

Given accessibility requirements When new colors are applied Then all text/background combinations meet WCAG AA:

  • Deep Black (#1A1A1A) on Off-White (#E8E4DC): ≥4.5:1 for body text
  • Off-White on Charcoal (#4A4A42): ≥4.5:1 for body text
  • Warm Gray (#C9C4BA) usage verified for sufficient contrast

Technical Notes

Files to Modify

  • resources/css/app.css - Main theme file

Color Reference (from docs/brand.md)

Color Hex Usage
Charcoal #4A4A42 Primary backgrounds, text
Warm Gray #C9C4BA Secondary backgrounds, accents
Off-White #E8E4DC Light backgrounds
Deep Black #1A1A1A Logo artwork, headlines

Contrast Verification

Use WebAIM Contrast Checker or similar tool to verify:

  • Deep Black on Off-White: ~12.5:1 (passes AAA)
  • Off-White on Charcoal: ~4.8:1 (passes AA)
  • Charcoal on Off-White: ~4.8:1 (passes AA)

Dev Checklist

  • Update @theme block with new color values
  • Create backward-compatible aliases
  • Update semantic aliases
  • Update .btn-primary styles
  • Update .btn-secondary styles
  • Update form focus states (input, textarea, select, checkbox, radio)
  • Update .prose-navy.prose-brand
  • Update skip-link focus styles
  • Update timeline-dot color
  • Update skeleton loader color
  • Verify status colors unchanged
  • Run contrast checker on all combinations
  • Run npm run build successfully
  • Visual test in browser (both light and dark mode if applicable)

Estimation

Complexity: Low Risk: Low - CSS-only changes with aliases for backward compatibility