-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathglobals.css
More file actions
120 lines (106 loc) · 3.38 KB
/
Copy pathglobals.css
File metadata and controls
120 lines (106 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
@import "tailwindcss";
/*
Accessibility-first design tokens.
- Font: Atkinson Hyperlegible (Braille Institute, made for low-vision
readers) — loaded via google fonts import at runtime.
- Palette: Okabe-Ito colorblind-safe hues, darkened where needed so body
text hits WCAG AAA (≥ 7:1) on the paper background. No red/green pairs.
- Color never carries meaning alone: every status also has a text label.
*/
:root {
--paper: #fffdf7; /* warm off-white — less glare than pure white */
--ink: #191919; /* ~15.8:1 on paper */
--ink-soft: #474e58; /* secondary text, ~8.4:1 */
--accent: #005a9e; /* blue — safe in all common CVD types, ~7.3:1 */
--accent-ink: #ffffff;
--alert: #9e3900; /* dark vermillion for errors, ~7:1 */
--good: #006b54; /* dark teal for success — always paired with text */
--warn-bg: #fff1cf; /* amber notice background */
--warn-ink: #5f4a00;
--line: #b9b3a4; /* borders on paper */
--panel: #10141a; /* dark transcript panel */
--panel-ink: #f2efe6;
--panel-soft: #aab2bd;
--glow: #e69f00; /* Okabe-Ito orange — Aide's speaking glow */
--focus: #005a9e;
}
html { font-size: 112.5%; } /* 18px base for low-vision readability */
html, body {
font-family: var(--font-atkinson), "Atkinson Hyperlegible", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
padding: 0;
margin: 0;
background: var(--paper);
color: var(--ink);
line-height: 1.6;
}
* { box-sizing: border-box; }
/*
Interactive cursor feedback, applied application-wide so every control signals
what it does on hover — a pointer for anything clickable, a not-allowed cursor
for anything disabled. Component-level Tailwind utilities (cursor-pointer /
cursor-not-allowed) layer on top of this for the primary actions; this base
rule is the safety net that guarantees nothing is left as a default arrow.
*/
button,
summary,
label[for],
select,
a[href],
[role="button"],
[role="link"],
[role="tab"],
[role="switch"] {
cursor: pointer;
}
button:disabled,
select:disabled,
textarea:disabled,
input:disabled,
[aria-disabled="true"],
[role="button"][aria-disabled="true"] {
cursor: not-allowed;
}
input[type="text"],
input[type="email"],
input[type="password"],
input[type="search"],
input:not([type]),
textarea {
cursor: text;
}
/* Visible keyboard focus on both light and dark surfaces */
:focus-visible {
outline: 3px solid var(--focus);
outline-offset: 3px;
border-radius: 4px;
}
.dark-surface :focus-visible { outline-color: #6fbbff; }
.skip-link {
position: absolute;
left: -9999px;
top: 0;
z-index: 100;
background: var(--ink);
color: var(--paper);
padding: 0.75rem 1.25rem;
font-weight: 700;
}
.skip-link:focus { left: 0.5rem; top: 0.5rem; }
@keyframes pulse-ring {
0% { transform: scale(0.9); opacity: 0.7; }
70% { transform: scale(1.4); opacity: 0; }
100% { opacity: 0; }
}
@keyframes aide-glow {
0%, 100% { box-shadow: 0 0 20px 6px rgba(230, 159, 0, 0.5); }
50% { box-shadow: 0 0 70px 26px rgba(230, 159, 0, 0.9); }
}
.aide-speaking { animation: aide-glow 1.6s ease-in-out infinite; }
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation: none !important;
transition: none !important;
}
/* Keep the "Aide is speaking" signal, just without motion */
.aide-speaking { box-shadow: 0 0 46px 16px rgba(230, 159, 0, 0.75); }
}