opaque_id 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.release-please-manifest.json +1 -1
- data/CHANGELOG.md +50 -0
- data/CODE_OF_CONDUCT.md +11 -11
- data/README.md +82 -0
- data/docs/.gitignore +5 -0
- data/docs/404.html +25 -0
- data/docs/Gemfile +31 -0
- data/docs/Gemfile.lock +335 -0
- data/docs/_config.yml +162 -0
- data/docs/_data/navigation.yml +132 -0
- data/docs/_includes/footer_custom.html +8 -0
- data/docs/_includes/head_custom.html +67 -0
- data/docs/algorithms.md +409 -0
- data/docs/alphabets.md +521 -0
- data/docs/api-reference.md +594 -0
- data/docs/assets/css/custom.scss +798 -0
- data/docs/assets/images/favicon.svg +17 -0
- data/docs/assets/images/og-image.svg +65 -0
- data/docs/configuration.md +548 -0
- data/docs/development.md +567 -0
- data/docs/getting-started.md +256 -0
- data/docs/index.md +132 -0
- data/docs/installation.md +377 -0
- data/docs/performance.md +488 -0
- data/docs/robots.txt +11 -0
- data/docs/security.md +598 -0
- data/docs/usage.md +414 -0
- data/docs/use-cases.md +569 -0
- data/lib/generators/opaque_id/install_generator.rb +38 -23
- data/lib/opaque_id/version.rb +1 -1
- data/tasks/0003-prd-documentation-site.md +191 -0
- data/tasks/tasks-0003-prd-documentation-site.md +84 -0
- metadata +27 -2
- data/sig/opaque_id.rbs +0 -4
@@ -0,0 +1,798 @@
|
|
1
|
+
@import "just-the-docs";
|
2
|
+
|
3
|
+
|
4
|
+
// Color Variables - Light theme (default)
|
5
|
+
:root {
|
6
|
+
// Light theme base colors
|
7
|
+
--body-background-color: #ffffff;
|
8
|
+
--body-text-color: #24292f;
|
9
|
+
--body-heading-color: #1f2328;
|
10
|
+
|
11
|
+
// Purple accent colors
|
12
|
+
--link-color: #a855f7;
|
13
|
+
--link-color-hover: #c084fc;
|
14
|
+
--link-color-visited: #9333ea;
|
15
|
+
|
16
|
+
// Navigation colors
|
17
|
+
--nav-child-link-color: #656d76;
|
18
|
+
--nav-child-link-color-hover: #a855f7;
|
19
|
+
--nav-child-link-color-active: #a855f7;
|
20
|
+
|
21
|
+
// Code colors
|
22
|
+
--code-background-color: #f6f8fa;
|
23
|
+
--code-text-color: #24292f;
|
24
|
+
--code-border-color: #d0d7de;
|
25
|
+
|
26
|
+
// Button colors
|
27
|
+
--btn-primary-color: #a855f7;
|
28
|
+
--btn-primary-color-dark: #9333ea;
|
29
|
+
--btn-primary-color-hover: #c084fc;
|
30
|
+
|
31
|
+
// Border colors
|
32
|
+
--border-color: #d0d7de;
|
33
|
+
--border-color-light: #e1e4e8;
|
34
|
+
|
35
|
+
// Table colors
|
36
|
+
--table-background-color: #ffffff;
|
37
|
+
--table-header-background-color: #f6f8fa;
|
38
|
+
--table-border-color: #d0d7de;
|
39
|
+
|
40
|
+
// Search colors
|
41
|
+
--search-background-color: #ffffff;
|
42
|
+
--search-border-color: #d0d7de;
|
43
|
+
--search-result-preview-color: #656d76;
|
44
|
+
|
45
|
+
// Footer colors
|
46
|
+
--footer-background-color: #f6f8fa;
|
47
|
+
--footer-text-color: #656d76;
|
48
|
+
|
49
|
+
// Aux links colors
|
50
|
+
--aux-link-color: #656d76;
|
51
|
+
--aux-link-hover-color: #a855f7;
|
52
|
+
}
|
53
|
+
|
54
|
+
// Dark theme support
|
55
|
+
@media (prefers-color-scheme: dark) {
|
56
|
+
:root {
|
57
|
+
// Dark theme base colors
|
58
|
+
--body-background-color: #0d1117;
|
59
|
+
--body-text-color: #e6edf3;
|
60
|
+
--body-heading-color: #f0f6fc;
|
61
|
+
|
62
|
+
// Navigation colors
|
63
|
+
--nav-child-link-color: #8b949e;
|
64
|
+
--nav-child-link-color-hover: #a855f7;
|
65
|
+
--nav-child-link-color-active: #a855f7;
|
66
|
+
|
67
|
+
// Code colors
|
68
|
+
--code-background-color: #161b22;
|
69
|
+
--code-text-color: #e6edf3;
|
70
|
+
--code-border-color: #30363d;
|
71
|
+
|
72
|
+
// Border colors
|
73
|
+
--border-color: #30363d;
|
74
|
+
--border-color-light: #21262d;
|
75
|
+
|
76
|
+
// Table colors
|
77
|
+
--table-background-color: #0d1117;
|
78
|
+
--table-header-background-color: #161b22;
|
79
|
+
--table-border-color: #30363d;
|
80
|
+
|
81
|
+
// Search colors
|
82
|
+
--search-background-color: #0d1117;
|
83
|
+
--search-border-color: #30363d;
|
84
|
+
--search-result-preview-color: #8b949e;
|
85
|
+
|
86
|
+
// Footer colors
|
87
|
+
--footer-background-color: #0d1117;
|
88
|
+
--footer-text-color: #8b949e;
|
89
|
+
|
90
|
+
// Aux links colors
|
91
|
+
--aux-link-color: #8b949e;
|
92
|
+
--aux-link-hover-color: #a855f7;
|
93
|
+
}
|
94
|
+
}
|
95
|
+
|
96
|
+
// Dark theme overrides
|
97
|
+
body {
|
98
|
+
background-color: var(--body-background-color);
|
99
|
+
color: var(--body-text-color);
|
100
|
+
}
|
101
|
+
|
102
|
+
// Headings
|
103
|
+
h1, h2, h3, h4, h5, h6 {
|
104
|
+
color: var(--body-heading-color);
|
105
|
+
}
|
106
|
+
|
107
|
+
// Links
|
108
|
+
a {
|
109
|
+
color: var(--link-color);
|
110
|
+
|
111
|
+
&:hover {
|
112
|
+
color: var(--link-color-hover);
|
113
|
+
}
|
114
|
+
|
115
|
+
&:visited {
|
116
|
+
color: var(--link-color-visited);
|
117
|
+
}
|
118
|
+
}
|
119
|
+
|
120
|
+
// Navigation
|
121
|
+
.nav-list {
|
122
|
+
.nav-list-item {
|
123
|
+
.nav-list-link {
|
124
|
+
color: var(--nav-child-link-color);
|
125
|
+
|
126
|
+
&:hover {
|
127
|
+
color: var(--nav-child-link-color-hover);
|
128
|
+
background-color: rgba(168, 85, 247, 0.1);
|
129
|
+
}
|
130
|
+
|
131
|
+
&.active {
|
132
|
+
color: var(--nav-child-link-color-active);
|
133
|
+
background-color: rgba(168, 85, 247, 0.2);
|
134
|
+
}
|
135
|
+
}
|
136
|
+
}
|
137
|
+
}
|
138
|
+
|
139
|
+
// Code blocks
|
140
|
+
.highlight {
|
141
|
+
background-color: var(--code-background-color);
|
142
|
+
border: 1px solid var(--code-border-color);
|
143
|
+
border-radius: 6px;
|
144
|
+
margin: 1rem 0;
|
145
|
+
|
146
|
+
pre {
|
147
|
+
background-color: transparent;
|
148
|
+
color: var(--code-text-color);
|
149
|
+
padding: 1rem;
|
150
|
+
overflow-x: auto;
|
151
|
+
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
|
152
|
+
font-size: 0.875rem;
|
153
|
+
line-height: 1.5;
|
154
|
+
}
|
155
|
+
|
156
|
+
// Ruby syntax highlighting
|
157
|
+
.k { color: #c084fc; } // Keywords (def, class, if, etc.)
|
158
|
+
.s { color: #10b981; } // Strings
|
159
|
+
.s2 { color: #10b981; } // String literals
|
160
|
+
.nb { color: #f59e0b; } // Built-in methods
|
161
|
+
.nf { color: #3b82f6; } // Function names
|
162
|
+
.nc { color: #8b5cf6; } // Class names
|
163
|
+
.no { color: #ef4444; } // Constants
|
164
|
+
.nv { color: #06b6d4; } // Variables
|
165
|
+
.c1 { color: #6b7280; } // Comments
|
166
|
+
.c { color: #6b7280; } // Comments
|
167
|
+
.p { color: #e5e7eb; } // Punctuation
|
168
|
+
.o { color: #e5e7eb; } // Operators
|
169
|
+
.mi { color: #f59e0b; } // Numbers
|
170
|
+
.mf { color: #f59e0b; } // Float numbers
|
171
|
+
.mh { color: #f59e0b; } // Hex numbers
|
172
|
+
.err { color: #ef4444; } // Errors
|
173
|
+
.w { color: #fbbf24; } // Warnings
|
174
|
+
}
|
175
|
+
|
176
|
+
// Inline code
|
177
|
+
code {
|
178
|
+
background-color: var(--code-background-color);
|
179
|
+
color: var(--code-text-color);
|
180
|
+
border: 1px solid var(--code-border-color);
|
181
|
+
border-radius: 3px;
|
182
|
+
padding: 0.2em 0.4em;
|
183
|
+
}
|
184
|
+
|
185
|
+
// Tables
|
186
|
+
table {
|
187
|
+
background-color: var(--table-background-color);
|
188
|
+
border: 1px solid var(--table-border-color);
|
189
|
+
|
190
|
+
th {
|
191
|
+
background-color: var(--table-header-background-color);
|
192
|
+
color: var(--body-heading-color);
|
193
|
+
border-bottom: 1px solid var(--table-border-color);
|
194
|
+
}
|
195
|
+
|
196
|
+
td {
|
197
|
+
border-bottom: 1px solid var(--table-border-color);
|
198
|
+
}
|
199
|
+
|
200
|
+
tr:nth-child(even) {
|
201
|
+
background-color: rgba(168, 85, 247, 0.05);
|
202
|
+
}
|
203
|
+
}
|
204
|
+
|
205
|
+
// Search
|
206
|
+
.search {
|
207
|
+
.search-input {
|
208
|
+
background-color: var(--search-background-color);
|
209
|
+
border: 1px solid var(--search-border-color);
|
210
|
+
color: var(--body-text-color);
|
211
|
+
|
212
|
+
&:focus {
|
213
|
+
border-color: var(--link-color);
|
214
|
+
box-shadow: 0 0 0 2px rgba(168, 85, 247, 0.2);
|
215
|
+
}
|
216
|
+
}
|
217
|
+
|
218
|
+
.search-results {
|
219
|
+
.search-result {
|
220
|
+
.search-result-title {
|
221
|
+
color: var(--link-color);
|
222
|
+
}
|
223
|
+
|
224
|
+
.search-result-preview {
|
225
|
+
color: var(--search-result-preview-color);
|
226
|
+
}
|
227
|
+
}
|
228
|
+
}
|
229
|
+
}
|
230
|
+
|
231
|
+
// Buttons
|
232
|
+
.btn {
|
233
|
+
&.btn-primary {
|
234
|
+
background-color: var(--btn-primary-color);
|
235
|
+
border-color: var(--btn-primary-color);
|
236
|
+
|
237
|
+
&:hover {
|
238
|
+
background-color: var(--btn-primary-color-hover);
|
239
|
+
border-color: var(--btn-primary-color-hover);
|
240
|
+
}
|
241
|
+
}
|
242
|
+
}
|
243
|
+
|
244
|
+
// Footer
|
245
|
+
.site-footer {
|
246
|
+
background-color: var(--footer-background-color);
|
247
|
+
color: var(--footer-text-color);
|
248
|
+
border-top: 1px solid var(--border-color);
|
249
|
+
}
|
250
|
+
|
251
|
+
// Header
|
252
|
+
.site-header {
|
253
|
+
background-color: var(--body-background-color);
|
254
|
+
border-bottom: 1px solid var(--border-color);
|
255
|
+
}
|
256
|
+
|
257
|
+
// Main content
|
258
|
+
.main-content {
|
259
|
+
background-color: var(--body-background-color);
|
260
|
+
}
|
261
|
+
|
262
|
+
// Sidebar
|
263
|
+
.site-nav {
|
264
|
+
background-color: var(--body-background-color);
|
265
|
+
border-right: 1px solid var(--border-color);
|
266
|
+
}
|
267
|
+
|
268
|
+
// Breadcrumbs
|
269
|
+
.breadcrumb-nav {
|
270
|
+
.breadcrumb-nav-list {
|
271
|
+
.breadcrumb-nav-list-item {
|
272
|
+
color: var(--nav-child-link-color);
|
273
|
+
|
274
|
+
&::after {
|
275
|
+
color: var(--nav-child-link-color);
|
276
|
+
}
|
277
|
+
}
|
278
|
+
}
|
279
|
+
}
|
280
|
+
|
281
|
+
// Custom OpaqueId branding
|
282
|
+
.site-title {
|
283
|
+
color: var(--body-heading-color);
|
284
|
+
font-weight: 700;
|
285
|
+
|
286
|
+
&:hover {
|
287
|
+
color: var(--link-color);
|
288
|
+
}
|
289
|
+
}
|
290
|
+
|
291
|
+
.site-subtitle {
|
292
|
+
color: var(--nav-child-link-color);
|
293
|
+
}
|
294
|
+
|
295
|
+
// Auxiliary links styling (top of sidebar)
|
296
|
+
.aux-nav {
|
297
|
+
margin-bottom: 1.5rem;
|
298
|
+
padding-bottom: 1rem;
|
299
|
+
border-bottom: 1px solid var(--border-color-light);
|
300
|
+
|
301
|
+
.aux-nav-list {
|
302
|
+
list-style: none;
|
303
|
+
margin: 0;
|
304
|
+
padding: 0;
|
305
|
+
display: flex;
|
306
|
+
flex-wrap: wrap;
|
307
|
+
gap: 0.5rem;
|
308
|
+
|
309
|
+
.aux-nav-list-item {
|
310
|
+
margin: 0;
|
311
|
+
|
312
|
+
.aux-nav-list-link {
|
313
|
+
display: inline-flex;
|
314
|
+
align-items: center;
|
315
|
+
padding: 0.375rem 0.75rem;
|
316
|
+
font-size: 0.875rem;
|
317
|
+
font-weight: 500;
|
318
|
+
color: var(--aux-link-color);
|
319
|
+
text-decoration: none;
|
320
|
+
border: 1px solid var(--border-color);
|
321
|
+
border-radius: 6px;
|
322
|
+
background-color: transparent;
|
323
|
+
transition: all 0.2s ease;
|
324
|
+
|
325
|
+
&:hover {
|
326
|
+
color: var(--aux-link-hover-color);
|
327
|
+
border-color: var(--aux-link-hover-color);
|
328
|
+
background-color: rgba(168, 85, 247, 0.05);
|
329
|
+
text-decoration: none;
|
330
|
+
}
|
331
|
+
|
332
|
+
&:focus {
|
333
|
+
outline: 2px solid var(--aux-link-hover-color);
|
334
|
+
outline-offset: 2px;
|
335
|
+
}
|
336
|
+
|
337
|
+
// External link icon
|
338
|
+
&[href^="http"]:not([href*="nyaggah.github.io"]) {
|
339
|
+
&::after {
|
340
|
+
content: "↗";
|
341
|
+
margin-left: 0.25rem;
|
342
|
+
font-size: 0.75rem;
|
343
|
+
opacity: 0.7;
|
344
|
+
}
|
345
|
+
}
|
346
|
+
}
|
347
|
+
}
|
348
|
+
}
|
349
|
+
}
|
350
|
+
|
351
|
+
// Purple accent for active states
|
352
|
+
.nav-list-link.active,
|
353
|
+
.breadcrumb-nav-list-item.active {
|
354
|
+
color: var(--link-color);
|
355
|
+
font-weight: 600;
|
356
|
+
}
|
357
|
+
|
358
|
+
// Custom scrollbar
|
359
|
+
::-webkit-scrollbar {
|
360
|
+
width: 8px;
|
361
|
+
}
|
362
|
+
|
363
|
+
::-webkit-scrollbar-track {
|
364
|
+
background: var(--body-background-color);
|
365
|
+
}
|
366
|
+
|
367
|
+
::-webkit-scrollbar-thumb {
|
368
|
+
background: var(--border-color);
|
369
|
+
border-radius: 4px;
|
370
|
+
|
371
|
+
&:hover {
|
372
|
+
background: var(--link-color);
|
373
|
+
}
|
374
|
+
}
|
375
|
+
|
376
|
+
// Responsive design improvements
|
377
|
+
@media (max-width: 768px) {
|
378
|
+
.site-nav {
|
379
|
+
background-color: var(--body-background-color);
|
380
|
+
}
|
381
|
+
|
382
|
+
.main-content {
|
383
|
+
padding: 1rem;
|
384
|
+
}
|
385
|
+
|
386
|
+
// Mobile navigation
|
387
|
+
.nav-list {
|
388
|
+
.nav-list-item {
|
389
|
+
.nav-list-link {
|
390
|
+
padding: 0.5rem 1rem;
|
391
|
+
font-size: 0.9rem;
|
392
|
+
}
|
393
|
+
}
|
394
|
+
}
|
395
|
+
|
396
|
+
// Mobile tables
|
397
|
+
table {
|
398
|
+
font-size: 0.875rem;
|
399
|
+
display: block;
|
400
|
+
overflow-x: auto;
|
401
|
+
white-space: nowrap;
|
402
|
+
}
|
403
|
+
|
404
|
+
// Mobile code blocks
|
405
|
+
.highlight {
|
406
|
+
pre {
|
407
|
+
font-size: 0.8rem;
|
408
|
+
padding: 0.75rem;
|
409
|
+
}
|
410
|
+
}
|
411
|
+
|
412
|
+
// Mobile search
|
413
|
+
.search {
|
414
|
+
.search-input {
|
415
|
+
font-size: 1rem;
|
416
|
+
padding: 0.75rem;
|
417
|
+
}
|
418
|
+
}
|
419
|
+
|
420
|
+
// Mobile buttons
|
421
|
+
.btn {
|
422
|
+
padding: 0.5rem 1rem;
|
423
|
+
font-size: 0.875rem;
|
424
|
+
}
|
425
|
+
}
|
426
|
+
|
427
|
+
@media (max-width: 480px) {
|
428
|
+
.main-content {
|
429
|
+
padding: 0.75rem;
|
430
|
+
}
|
431
|
+
|
432
|
+
// Extra small screens
|
433
|
+
h1 { font-size: 1.75rem; }
|
434
|
+
h2 { font-size: 1.5rem; }
|
435
|
+
h3 { font-size: 1.25rem; }
|
436
|
+
h4 { font-size: 1.125rem; }
|
437
|
+
|
438
|
+
// Mobile code blocks
|
439
|
+
.highlight {
|
440
|
+
pre {
|
441
|
+
font-size: 0.75rem;
|
442
|
+
padding: 0.5rem;
|
443
|
+
}
|
444
|
+
}
|
445
|
+
|
446
|
+
// Mobile tables - stack on very small screens
|
447
|
+
table {
|
448
|
+
display: block;
|
449
|
+
width: 100%;
|
450
|
+
|
451
|
+
thead, tbody, tr, th, td {
|
452
|
+
display: block;
|
453
|
+
}
|
454
|
+
|
455
|
+
thead tr {
|
456
|
+
position: absolute;
|
457
|
+
top: -9999px;
|
458
|
+
left: -9999px;
|
459
|
+
}
|
460
|
+
|
461
|
+
tr {
|
462
|
+
border: 1px solid var(--border-color);
|
463
|
+
margin-bottom: 0.5rem;
|
464
|
+
padding: 0.5rem;
|
465
|
+
}
|
466
|
+
|
467
|
+
td {
|
468
|
+
border: none;
|
469
|
+
position: relative;
|
470
|
+
padding-left: 50%;
|
471
|
+
|
472
|
+
&:before {
|
473
|
+
content: attr(data-label) ": ";
|
474
|
+
position: absolute;
|
475
|
+
left: 6px;
|
476
|
+
width: 45%;
|
477
|
+
padding-right: 10px;
|
478
|
+
white-space: nowrap;
|
479
|
+
font-weight: bold;
|
480
|
+
color: var(--link-color);
|
481
|
+
}
|
482
|
+
}
|
483
|
+
}
|
484
|
+
}
|
485
|
+
|
486
|
+
// Tablet optimization
|
487
|
+
@media (min-width: 769px) and (max-width: 1024px) {
|
488
|
+
.main-content {
|
489
|
+
padding: 1.5rem;
|
490
|
+
}
|
491
|
+
|
492
|
+
.site-nav {
|
493
|
+
width: 280px;
|
494
|
+
}
|
495
|
+
|
496
|
+
.main-content-wrap {
|
497
|
+
margin-left: 280px;
|
498
|
+
}
|
499
|
+
}
|
500
|
+
|
501
|
+
// Large screen optimization
|
502
|
+
@media (min-width: 1200px) {
|
503
|
+
.main-content {
|
504
|
+
max-width: 1000px;
|
505
|
+
margin: 0 auto;
|
506
|
+
}
|
507
|
+
|
508
|
+
.site-nav {
|
509
|
+
width: 300px;
|
510
|
+
}
|
511
|
+
|
512
|
+
.main-content-wrap {
|
513
|
+
margin-left: 300px;
|
514
|
+
}
|
515
|
+
}
|
516
|
+
|
517
|
+
// Print styles
|
518
|
+
@media print {
|
519
|
+
body {
|
520
|
+
background-color: white;
|
521
|
+
color: black;
|
522
|
+
}
|
523
|
+
|
524
|
+
.site-nav,
|
525
|
+
.site-header,
|
526
|
+
.site-footer {
|
527
|
+
display: none;
|
528
|
+
}
|
529
|
+
}
|
530
|
+
|
531
|
+
// Performance optimizations
|
532
|
+
* {
|
533
|
+
box-sizing: border-box;
|
534
|
+
}
|
535
|
+
|
536
|
+
// Optimize font loading
|
537
|
+
@font-face {
|
538
|
+
font-family: 'Monaco';
|
539
|
+
src: local('Monaco'), local('Menlo'), local('Ubuntu Mono'), monospace;
|
540
|
+
font-display: swap;
|
541
|
+
}
|
542
|
+
|
543
|
+
// Optimize images
|
544
|
+
img {
|
545
|
+
max-width: 100%;
|
546
|
+
height: auto;
|
547
|
+
}
|
548
|
+
|
549
|
+
// Optimize code blocks
|
550
|
+
.highlight {
|
551
|
+
contain: layout style;
|
552
|
+
|
553
|
+
pre {
|
554
|
+
contain: layout style;
|
555
|
+
will-change: auto;
|
556
|
+
}
|
557
|
+
}
|
558
|
+
|
559
|
+
// Optimize tables
|
560
|
+
table {
|
561
|
+
contain: layout;
|
562
|
+
}
|
563
|
+
|
564
|
+
// Custom utility classes
|
565
|
+
.text-purple {
|
566
|
+
color: var(--link-color);
|
567
|
+
}
|
568
|
+
|
569
|
+
.bg-purple {
|
570
|
+
background-color: var(--link-color);
|
571
|
+
}
|
572
|
+
|
573
|
+
.border-purple {
|
574
|
+
border-color: var(--link-color);
|
575
|
+
}
|
576
|
+
|
577
|
+
// Badge styling
|
578
|
+
.badge {
|
579
|
+
background-color: var(--link-color);
|
580
|
+
color: white;
|
581
|
+
padding: 0.25rem 0.5rem;
|
582
|
+
border-radius: 4px;
|
583
|
+
font-size: 0.875rem;
|
584
|
+
font-weight: 500;
|
585
|
+
}
|
586
|
+
|
587
|
+
// Alert boxes
|
588
|
+
.alert {
|
589
|
+
padding: 1rem;
|
590
|
+
border-radius: 6px;
|
591
|
+
margin: 1rem 0;
|
592
|
+
|
593
|
+
&.alert-info {
|
594
|
+
background-color: rgba(168, 85, 247, 0.1);
|
595
|
+
border: 1px solid var(--link-color);
|
596
|
+
color: var(--link-color);
|
597
|
+
}
|
598
|
+
|
599
|
+
&.alert-warning {
|
600
|
+
background-color: rgba(255, 193, 7, 0.1);
|
601
|
+
border: 1px solid #ffc107;
|
602
|
+
color: #ffc107;
|
603
|
+
}
|
604
|
+
|
605
|
+
&.alert-success {
|
606
|
+
background-color: rgba(40, 167, 69, 0.1);
|
607
|
+
border: 1px solid #28a745;
|
608
|
+
color: #28a745;
|
609
|
+
}
|
610
|
+
}
|
611
|
+
|
612
|
+
// Browser compatibility fixes
|
613
|
+
// IE11 support
|
614
|
+
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
|
615
|
+
.highlight {
|
616
|
+
pre {
|
617
|
+
white-space: pre-wrap;
|
618
|
+
word-wrap: break-word;
|
619
|
+
}
|
620
|
+
}
|
621
|
+
}
|
622
|
+
|
623
|
+
// Firefox specific fixes
|
624
|
+
@-moz-document url-prefix() {
|
625
|
+
.highlight {
|
626
|
+
pre {
|
627
|
+
overflow-x: auto;
|
628
|
+
}
|
629
|
+
}
|
630
|
+
}
|
631
|
+
|
632
|
+
// Safari specific fixes
|
633
|
+
@media screen and (-webkit-min-device-pixel-ratio: 0) {
|
634
|
+
.highlight {
|
635
|
+
pre {
|
636
|
+
-webkit-overflow-scrolling: touch;
|
637
|
+
}
|
638
|
+
}
|
639
|
+
}
|
640
|
+
|
641
|
+
// Fallbacks for older browsers
|
642
|
+
.no-cssgrid {
|
643
|
+
.main-content-wrap {
|
644
|
+
display: block;
|
645
|
+
}
|
646
|
+
}
|
647
|
+
|
648
|
+
.no-flexbox {
|
649
|
+
.nav-list {
|
650
|
+
display: block;
|
651
|
+
}
|
652
|
+
|
653
|
+
.search {
|
654
|
+
display: block;
|
655
|
+
}
|
656
|
+
}
|
657
|
+
|
658
|
+
// High contrast mode support
|
659
|
+
@media (prefers-contrast: high) {
|
660
|
+
:root {
|
661
|
+
--body-background-color: #000000;
|
662
|
+
--body-text-color: #ffffff;
|
663
|
+
--link-color: #ffff00;
|
664
|
+
--border-color: #ffffff;
|
665
|
+
}
|
666
|
+
}
|
667
|
+
|
668
|
+
// Reduced motion support
|
669
|
+
@media (prefers-reduced-motion: reduce) {
|
670
|
+
* {
|
671
|
+
animation-duration: 0.01ms !important;
|
672
|
+
animation-iteration-count: 1 !important;
|
673
|
+
transition-duration: 0.01ms !important;
|
674
|
+
}
|
675
|
+
}
|
676
|
+
|
677
|
+
// Accessibility improvements
|
678
|
+
// Focus indicators
|
679
|
+
a:focus,
|
680
|
+
button:focus,
|
681
|
+
input:focus,
|
682
|
+
textarea:focus,
|
683
|
+
select:focus {
|
684
|
+
outline: 2px solid var(--link-color);
|
685
|
+
outline-offset: 2px;
|
686
|
+
}
|
687
|
+
|
688
|
+
// Skip links
|
689
|
+
.skip-link {
|
690
|
+
position: absolute;
|
691
|
+
top: -40px;
|
692
|
+
left: 6px;
|
693
|
+
background: var(--link-color);
|
694
|
+
color: white;
|
695
|
+
padding: 8px;
|
696
|
+
text-decoration: none;
|
697
|
+
border-radius: 4px;
|
698
|
+
z-index: 1000;
|
699
|
+
|
700
|
+
&:focus {
|
701
|
+
top: 6px;
|
702
|
+
}
|
703
|
+
}
|
704
|
+
|
705
|
+
// Screen reader only content
|
706
|
+
.sr-only {
|
707
|
+
position: absolute;
|
708
|
+
width: 1px;
|
709
|
+
height: 1px;
|
710
|
+
padding: 0;
|
711
|
+
margin: -1px;
|
712
|
+
overflow: hidden;
|
713
|
+
clip: rect(0, 0, 0, 0);
|
714
|
+
white-space: nowrap;
|
715
|
+
border: 0;
|
716
|
+
}
|
717
|
+
|
718
|
+
// High contrast mode improvements
|
719
|
+
@media (prefers-contrast: high) {
|
720
|
+
.highlight {
|
721
|
+
border: 2px solid var(--border-color);
|
722
|
+
}
|
723
|
+
|
724
|
+
.btn {
|
725
|
+
border: 2px solid currentColor;
|
726
|
+
}
|
727
|
+
}
|
728
|
+
|
729
|
+
// Color contrast improvements
|
730
|
+
@media (prefers-contrast: more) {
|
731
|
+
:root {
|
732
|
+
--body-text-color: #ffffff;
|
733
|
+
--nav-child-link-color: #ffffff;
|
734
|
+
--search-result-preview-color: #ffffff;
|
735
|
+
}
|
736
|
+
}
|
737
|
+
|
738
|
+
// Keyboard navigation improvements
|
739
|
+
.nav-list-link:focus,
|
740
|
+
.search-input:focus {
|
741
|
+
background-color: rgba(168, 85, 247, 0.1);
|
742
|
+
}
|
743
|
+
|
744
|
+
// ARIA live regions for dynamic content
|
745
|
+
.aria-live {
|
746
|
+
position: absolute;
|
747
|
+
left: -10000px;
|
748
|
+
width: 1px;
|
749
|
+
height: 1px;
|
750
|
+
overflow: hidden;
|
751
|
+
}
|
752
|
+
|
753
|
+
// Table accessibility
|
754
|
+
table {
|
755
|
+
caption {
|
756
|
+
font-weight: bold;
|
757
|
+
margin-bottom: 0.5rem;
|
758
|
+
}
|
759
|
+
|
760
|
+
th {
|
761
|
+
font-weight: bold;
|
762
|
+
}
|
763
|
+
|
764
|
+
// Ensure table headers are properly associated
|
765
|
+
th[scope="col"],
|
766
|
+
th[scope="row"] {
|
767
|
+
font-weight: bold;
|
768
|
+
}
|
769
|
+
}
|
770
|
+
|
771
|
+
// Form accessibility
|
772
|
+
input, textarea, select {
|
773
|
+
&:required {
|
774
|
+
border-left: 3px solid var(--link-color);
|
775
|
+
}
|
776
|
+
|
777
|
+
&:invalid {
|
778
|
+
border-color: #ef4444;
|
779
|
+
}
|
780
|
+
|
781
|
+
&:valid {
|
782
|
+
border-color: #10b981;
|
783
|
+
}
|
784
|
+
}
|
785
|
+
|
786
|
+
// Error messages
|
787
|
+
.error-message {
|
788
|
+
color: #ef4444;
|
789
|
+
font-size: 0.875rem;
|
790
|
+
margin-top: 0.25rem;
|
791
|
+
}
|
792
|
+
|
793
|
+
// Success messages
|
794
|
+
.success-message {
|
795
|
+
color: #10b981;
|
796
|
+
font-size: 0.875rem;
|
797
|
+
margin-top: 0.25rem;
|
798
|
+
}
|