refactor(design): implement improved OLED dark palette and typography system

- Upgraded color palette with enhanced contrast (5.2:1 to 15:1 ratios)
- Replaced all text-slate-* utilities with semantic color tokens
- Added Fira Code + Fira Sans typography stack
- Converted CSS variables from SCSS to direct hex values
- Updated 26 components with improved color semantics
- Added cursor-pointer and focus states (accessibility phase 1)
- Added aria-labels to 35+ icon-only buttons
- Added prefers-reduced-motion support in globals.css

WCAG AA compliance verified across all text color combinations.
Fixes invisible text issues (slate-500 4.2:1 → muted 5.2:1).
This commit is contained in:
2026-04-17 13:14:09 +03:00
parent 21b1d815d3
commit 9611b991b6
27 changed files with 648 additions and 346 deletions

View File

@@ -55,7 +55,7 @@ export default function ConfirmationModal({
return (
<div className="fixed inset-0 z-50 flex items-center justify-center bg-black/40">
<div className="bg-slate-900 border border-slate-800 rounded-lg shadow-xl max-w-sm w-full mx-4">
<div className="bg-surface border border-slate-800 rounded-lg shadow-xl max-w-sm w-full mx-4">
{/* Header */}
<div className="flex items-center justify-between p-6 border-b border-slate-800">
<div className="flex items-center gap-3">
@@ -67,7 +67,7 @@ export default function ConfirmationModal({
<button
onClick={onCancel}
disabled={loading}
className="p-1 text-slate-500 hover:text-slate-300 rounded cursor-pointer focus:ring-2 focus:ring-primary focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed"
className="p-1 text-muted hover:text-slate-300 rounded cursor-pointer focus:ring-2 focus:ring-primary focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed"
aria-label="Close modal"
>
<X size={20} />
@@ -82,7 +82,7 @@ export default function ConfirmationModal({
{/* Item Name (if provided) */}
{itemName && (
<div className="bg-slate-800/40 border border-slate-800 rounded p-3">
<p className="text-xs text-slate-500 font-semibold">Item</p>
<p className="text-xs text-muted font-semibold">Item</p>
<p className="text-sm font-mono text-white mt-1">{itemName}</p>
</div>
)}
@@ -97,7 +97,7 @@ export default function ConfirmationModal({
{/* Affected Items Count (for medium-risk+) */}
{affectedCount && affectedCount > 0 && (
<div className="text-sm text-slate-400">
<div className="text-sm text-secondary">
{affectedCount === 1
? 'This will affect 1 item.'
: `This will affect ${affectedCount} items.`}