Skip to content

Commit 8035ccb

Browse files
committed
Add selection highlight accessibility fixes
- Replace invalid hsl(var(--...)) color usage with color-mix-friendly values - Add reduced-motion, forced-colors, and high-contrast selection styles - Cover selection and scrollbar styling with regression tests
1 parent 50bc328 commit 8035ccb

4 files changed

Lines changed: 532 additions & 8 deletions

File tree

apps/web/src/components/ui/button.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ const buttonVariants = cva(
99
variants: {
1010
variant: {
1111
default:
12-
"bg-linear-to-b from-primary to-[hsl(223_82%_62%)] text-primary-foreground shadow-[0_18px_45px_-20px_hsl(var(--primary)/0.85)] hover:brightness-110 hover:shadow-[0_22px_55px_-22px_hsl(var(--primary)/0.95)]",
12+
"bg-linear-to-b from-primary to-[hsl(223_82%_62%)] text-primary-foreground shadow-[0_18px_45px_-20px_color-mix(in_srgb,var(--primary)_85%,transparent)] hover:brightness-110 hover:shadow-[0_22px_55px_-22px_color-mix(in_srgb,var(--primary)_95%,transparent)]",
1313
destructive:
14-
"bg-linear-to-b from-destructive to-[hsl(352_72%_52%)] text-destructive-foreground shadow-[0_18px_45px_-20px_hsl(var(--destructive)/0.7)] hover:brightness-105 hover:shadow-[0_22px_55px_-22px_hsl(var(--destructive)/0.8)]",
14+
"bg-linear-to-b from-destructive to-[hsl(352_72%_52%)] text-destructive-foreground shadow-[0_18px_45px_-20px_color-mix(in_srgb,var(--destructive)_70%,transparent)] hover:brightness-105 hover:shadow-[0_22px_55px_-22px_color-mix(in_srgb,var(--destructive)_80%,transparent)]",
1515
"destructive-outline":
1616
"border border-destructive/35 bg-destructive/6 text-destructive shadow-[inset_0_1px_0_hsl(0_0%_100%/0.04)] hover:border-destructive/45 hover:bg-destructive/10 hover:text-destructive",
1717
outline:

apps/web/src/components/ui/sidebar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -814,7 +814,7 @@ const sidebarMenuButtonVariants = cva(
814814
variant: {
815815
default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
816816
outline:
817-
"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]",
817+
"bg-background shadow-[0_0_0_1px_var(--color-sidebar-border,var(--border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--color-sidebar-accent,var(--accent))]",
818818
},
819819
},
820820
},

apps/web/src/index.css

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -477,8 +477,7 @@ label:has(> select#reasoning-effort) select {
477477
body {
478478
background:
479479
radial-gradient(circle at top, hsl(217 96% 71% / 0.08), transparent 28%),
480-
radial-gradient(circle at 80% 0%, hsl(228 88% 68% / 0.06), transparent 24%),
481-
hsl(var(--background));
480+
radial-gradient(circle at 80% 0%, hsl(228 88% 68% / 0.06), transparent 24%), var(--background);
482481
background-attachment: fixed;
483482
}
484483

@@ -488,7 +487,7 @@ label:has(> select#reasoning-effort) select {
488487
}
489488

490489
* {
491-
scrollbar-color: hsl(var(--primary) / 0.42) transparent;
490+
scrollbar-color: color-mix(in srgb, var(--primary) 42%, transparent) transparent;
492491
}
493492

494493
*::-webkit-scrollbar {
@@ -502,14 +501,48 @@ label:has(> select#reasoning-effort) select {
502501

503502
*::-webkit-scrollbar-thumb {
504503
border-radius: 999px;
505-
background: hsl(var(--primary) / 0.25);
504+
background: color-mix(in srgb, var(--primary) 25%, transparent);
506505
border: 2px solid transparent;
507506
background-clip: padding-box;
508507
}
509508

510509
*::-webkit-scrollbar-thumb:hover {
511-
background: hsl(var(--primary) / 0.38);
510+
background: color-mix(in srgb, var(--primary) 38%, transparent);
512511
border: 2px solid transparent;
513512
background-clip: padding-box;
514513
}
515514
}
515+
516+
/* ─── Accessibility ─── */
517+
518+
@media (prefers-reduced-motion: reduce) {
519+
*,
520+
*::before,
521+
*::after {
522+
animation-duration: 0.01ms !important;
523+
animation-iteration-count: 1 !important;
524+
transition-duration: 0.01ms !important;
525+
scroll-behavior: auto !important;
526+
}
527+
}
528+
529+
@media (forced-colors: active) {
530+
::selection {
531+
background: Highlight;
532+
color: HighlightText;
533+
}
534+
535+
*::-webkit-scrollbar-thumb {
536+
background: ButtonText;
537+
}
538+
539+
*::-webkit-scrollbar-track {
540+
background: Canvas;
541+
}
542+
}
543+
544+
@media (prefers-contrast: more) {
545+
::selection {
546+
background: color-mix(in srgb, var(--primary) 88%, transparent);
547+
}
548+
}

0 commit comments

Comments
 (0)