mashlib 2.0.0-0dcca3d7 → 2.0.0-127ec63e

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.
package/dist/mash.css CHANGED
@@ -1,398 +1,3 @@
1
- /* Global CSS: base styles, variables, and resets */
2
- /* Accessible color palette */
3
-
4
- :root {
5
- /* Primary/Accent colors (profile-pane specific) */
6
- --color-primary: #7C4DFF; /* Vivid Purple */
7
- --color-secondary: #0077B6; /* Accessible Blue */
8
- --color-accent: #FFD600; /* Bright Yellow */
9
- --color-error: #B00020; /* Accessible Red */
10
- --color-success: #00C853; /* Accessible Green */
11
-
12
- /* Card/Section backgrounds */
13
- --color-background: #FFFFFF; /* White */
14
- --color-card-bg: #FFFFFF; /* White for inner cards */
15
- --color-section-bg: #F5F5F5; /* Light grey for outer sections */
16
-
17
- --text-color: #1A1A1A; /* Near-black */
18
- --color-text-secondary: #666; /* Added for repeated usage */
19
- --color-text-muted: #444; /* Added for repeated usage */
20
- --border-light: #eee; /* Added for repeated borders */
21
- --border-radius: 1rem; /* Matches module usage */
22
- --border-radius-sm: 0.5rem;
23
- --box-shadow: 0 2px 8px rgba(124,77,255,0.08); /* Matches module usage */
24
- --box-shadow-sm: 0 1px 4px rgba(124,77,255,0.12);
25
- --spacing-xs: 0.5rem;
26
- --spacing-sm: 0.75rem;
27
- --spacing-md: 1rem;
28
- --spacing-lg: 1.5rem;
29
- --spacing-xl: 2rem;
30
- --font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
31
- --font-size-base: 1rem; /* 16px default */
32
- --font-size-sm: 0.875rem; /* 14px */
33
- --font-size-lg: 1.125rem; /* 18px */
34
- --font-size-xl: 1.25rem; /* 20px */
35
- --line-height-base: 1.5; /* WCAG recommended */
36
- --line-height-tight: 1.4;
37
- --line-height-loose: 1.6;
38
- --letter-spacing-wide: 0.025em;
39
-
40
- /* Minimum font sizes for accessibility */
41
- --min-font-size: 14px;
42
- --min-line-height: 1.4;
43
-
44
- /* Accessibility improvements */
45
- --min-touch-target: 44px; /* WCAG minimum touch target */
46
- --focus-ring-width: 2px;
47
- --animation-duration: 0.2s; /* Reduced motion friendly */
48
-
49
- /* Additional accessibility variables */
50
- --focus-indicator-width: 3px;
51
- --animation-duration-slow: 0.3s;
52
- --high-contrast-ratio: 7:1; /* WCAG AAA standard */
53
- }
54
-
55
-
56
- /* Improve text rendering */
57
- html, body {
58
- margin: 0;
59
- padding: 0;
60
- font-family: var(--font-family);
61
- font-size: var(--font-size-base);
62
- line-height: var(--line-height-base);
63
- background: var(--color-background);
64
- color: var(--text-color);
65
- -webkit-font-smoothing: antialiased;
66
- -moz-osx-font-smoothing: grayscale;
67
- text-rendering: optimizeLegibility;
68
- }
69
-
70
- /* Improved heading hierarchy */
71
- h1, h2, h3, h4, h5, h6 {
72
- color: var(--color-primary);
73
- font-weight: 600;
74
- line-height: var(--line-height-tight);
75
- margin-top: 0;
76
- margin-bottom: var(--spacing-sm);
77
- }
78
-
79
- h1 { font-size: 2rem; } /* 32px */
80
- h2 { font-size: 1.5rem; } /* 24px */
81
- h3 { font-size: 1.25rem; } /* 20px */
82
- h4 { font-size: 1.125rem; }/* 18px */
83
- h5, h6 { font-size: 1rem; }/* 16px */
84
-
85
- /* Better paragraph spacing */
86
- p {
87
- margin-bottom: var(--spacing-md);
88
- line-height: var(--line-height-base);
89
- max-width: 65ch; /* Optimal reading width */
90
- }
91
-
92
- /* Improved link accessibility */
93
- a {
94
- color: var(--color-primary);
95
- text-decoration: underline;
96
- text-underline-offset: 0.125em;
97
- text-decoration-thickness: 0.0625em;
98
- }
99
-
100
- a:hover, a:focus {
101
- text-decoration-thickness: 0.125em;
102
- }
103
-
104
- /* Ensure minimum font sizes are respected */
105
- @media screen and (max-width: 768px) {
106
- html {
107
- font-size: max(16px, 1rem); /* Never smaller than 16px on mobile */
108
- }
109
- }
110
-
111
- /* Support for larger text preferences */
112
- @media (prefers-reduced-motion: no-preference) {
113
- html {
114
- scroll-behavior: smooth;
115
- }
116
- }
117
-
118
- /* Accessibility: focus styles */
119
- :focus {
120
- outline: 2px solid var(--color-primary);
121
- outline-offset: 1px;
122
- box-shadow: 0 0 0 1px var(--color-background);
123
- }
124
-
125
- /* Accessibility: Respect user motion preferences */
126
- @media (prefers-reduced-motion: reduce) {
127
- *, *::before, *::after {
128
- animation-duration: 0.01ms !important;
129
- animation-iteration-count: 1 !important;
130
- transition-duration: 0.01ms !important;
131
- scroll-behavior: auto !important;
132
- }
133
- }
134
-
135
- /* Accessibility: High contrast mode support */
136
- @media (prefers-contrast: high) {
137
- :root {
138
- --border-light: #000;
139
- --box-shadow: 0 2px 4px rgba(0,0,0,0.5);
140
- --box-shadow-sm: 0 1px 2px rgba(0,0,0,0.3);
141
- }
142
- }
143
-
144
- /* Accessibility: Improved focus management */
145
- :focus-visible {
146
- outline: var(--focus-ring-width) solid var(--color-primary);
147
- outline-offset: 2px;
148
- box-shadow: 0 0 0 1px var(--color-background);
149
- }
150
-
151
- :focus:not(:focus-visible) {
152
- outline: none;
153
- }
154
-
155
- /* Skip link for screen readers */
156
- .skip-link {
157
- position: absolute;
158
- top: -40px;
159
- left: 6px;
160
- background: var(--color-primary);
161
- color: white;
162
- padding: var(--spacing-sm) var(--spacing-md);
163
- text-decoration: none;
164
- border-radius: var(--border-radius-sm);
165
- z-index: 1000;
166
- font-weight: 600;
167
- font-size: var(--font-size-base);
168
- line-height: 1;
169
- }
170
-
171
- .skip-link:focus {
172
- top: 6px;
173
- outline: 2px solid white;
174
- outline-offset: 2px;
175
- }
176
-
177
- /* Semantic HTML5 improvements */
178
- article, aside, section {
179
- display: block;
180
- }
181
-
182
- header {
183
- margin-bottom: var(--spacing-md);
184
- }
185
-
186
- nav {
187
- display: block;
188
- }
189
-
190
- nav ul {
191
- list-style: none;
192
- padding: 0;
193
- margin: 0;
194
- }
195
-
196
- /* Enhanced keyboard navigation */
197
- *:focus-visible {
198
- outline: var(--focus-indicator-width) solid var(--color-primary);
199
- outline-offset: 2px;
200
- box-shadow: 0 0 0 1px var(--color-background), 0 0 0 4px rgba(124, 77, 255, 0.2);
201
- border-radius: 2px;
202
- transition: none; /* Remove transitions on focus for immediate feedback */
203
- }
204
-
205
- /* Improve focus management for interactive elements */
206
- [role="button"]:focus,
207
- [role="link"]:focus,
208
- button:focus,
209
- a:focus {
210
- outline: 2px solid var(--color-primary);
211
- outline-offset: 2px;
212
- box-shadow: 0 0 0 1px var(--color-background);
213
- }
214
-
215
- /* Enhanced error message accessibility */
216
- [role="alert"] {
217
- padding: var(--spacing-md);
218
- border: 2px solid var(--color-error);
219
- border-radius: var(--border-radius-sm);
220
- background-color: rgba(176, 0, 32, 0.1);
221
- margin: var(--spacing-md) 0;
222
- }
223
-
224
- /* Success message styling */
225
- [role="status"] {
226
- padding: var(--spacing-md);
227
- border: 2px solid var(--color-success);
228
- border-radius: var(--border-radius-sm);
229
- background-color: rgba(0, 200, 83, 0.1);
230
- margin: var(--spacing-md) 0;
231
- }
232
-
233
- /* Enhanced table accessibility */
234
- table {
235
- border-collapse: collapse;
236
- width: 100%;
237
- }
238
-
239
- th {
240
- background-color: var(--color-section-bg);
241
- font-weight: 600;
242
- text-align: left;
243
- padding: var(--spacing-sm);
244
- }
245
-
246
- td {
247
- padding: var(--spacing-sm);
248
- }
249
-
250
- /* Focus trap for modals */
251
- .focus-trap {
252
- position: fixed;
253
- top: 0;
254
- left: 0;
255
- width: 100%;
256
- height: 100%;
257
- z-index: 9999;
258
- background: rgba(0, 0, 0, 0.5);
259
- display: flex;
260
- justify-content: center;
261
- align-items: center;
262
- }
263
-
264
- /* Enhanced button accessibility */
265
- button, [role="button"] {
266
- cursor: pointer;
267
- border: none;
268
- border-radius: var(--border-radius-sm);
269
- padding: var(--spacing-sm) var(--spacing-md);
270
- min-height: var(--min-touch-target);
271
- min-width: var(--min-touch-target);
272
- font-size: var(--font-size-base);
273
- font-weight: 600;
274
- transition: all var(--animation-duration) ease;
275
- position: relative;
276
- }
277
-
278
- button:disabled, [role="button"][aria-disabled="true"] {
279
- opacity: 0.6;
280
- cursor: not-allowed;
281
- pointer-events: none;
282
- }
283
-
284
- /* Loading indicator accessibility */
285
- .loading-spinner {
286
- width: 40px;
287
- height: 40px;
288
- border: 3px solid var(--border-light);
289
- border-top: 3px solid var(--color-primary);
290
- border-radius: 50%;
291
- animation: spin 1s linear infinite;
292
- }
293
-
294
- @keyframes spin {
295
- 0% { transform: rotate(0deg); }
296
- 100% { transform: rotate(360deg); }
297
- }
298
-
299
- @media (prefers-reduced-motion: reduce) {
300
- .loading-spinner {
301
- animation: none;
302
- border-top-color: var(--color-primary);
303
- }
304
- }
305
-
306
- /* Utility classes */
307
- .u-flex {
308
- display: flex;
309
- }
310
- .u-grid {
311
- display: grid;
312
- }
313
- .u-center {
314
- justify-content: center;
315
- align-items: center;
316
- }
317
- .u-gap {
318
- gap: 1em;
319
- }
320
-
321
- /* Common card component - used across all modules */
322
- .module-card {
323
- background: var(--color-card-bg);
324
- border-radius: var(--border-radius);
325
- box-shadow: var(--box-shadow);
326
- padding: var(--spacing-lg);
327
- margin-bottom: var(--spacing-lg);
328
- width: 100%;
329
- max-width: 100%;
330
- box-sizing: border-box;
331
- }
332
-
333
- /* Common header styles */
334
- .module-header {
335
- text-align: center;
336
- margin-bottom: var(--spacing-md);
337
- }
338
-
339
- /* Common flex patterns */
340
- .flex-center {
341
- display: flex;
342
- justify-content: center;
343
- align-items: center;
344
- }
345
-
346
- .flex-column {
347
- display: flex;
348
- flex-direction: column;
349
- }
350
-
351
- .flex-column-center {
352
- display: flex;
353
- flex-direction: column;
354
- align-items: center;
355
- }
356
-
357
- /* Text utilities */
358
- .text-center {
359
- text-align: center;
360
- }
361
-
362
- .text-secondary {
363
- color: var(--color-text-secondary);
364
- }
365
-
366
- .text-muted {
367
- color: var(--color-text-muted);
368
- }
369
-
370
- /* Responsive grid for profile */
371
- .profile-grid {
372
- display: grid;
373
- grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
374
- gap: 1.5em;
375
- background: var(--profile-grid-bg, var(--color-background));
376
- }
377
- .profile-header, .profile-footer {
378
- grid-column: 1 / -1;
379
- }
380
-
381
- /* Override solid-ui error message close button styling */
382
- .errorMessageBlock .close,
383
- .errorMessageBlock button[type="button"],
384
- .errorMessageBlock .button {
385
- background: var(--border-light) !important;
386
- color: var(--text-color) !important;
387
- border: 1px solid var(--border-light) !important;
388
- }
389
-
390
- .errorMessageBlock .close:hover,
391
- .errorMessageBlock button[type="button"]:hover,
392
- .errorMessageBlock .button:hover {
393
- background: var(--color-text-secondary) !important;
394
- color: var(--color-background) !important;
395
- }
396
1
  /* CVCard.css */
397
2
  /* Note: Uses utilities: .section-title for cvOrg styling */
398
3
 
@@ -422,12 +27,12 @@ button:disabled, [role="button"][aria-disabled="true"] {
422
27
  }
423
28
 
424
29
  .cvSection h3 {
425
- color: var(--text-color);
30
+ color: var(--color-text);
426
31
  font-size: var(--font-size-lg);
427
32
  font-weight: 600;
428
33
  line-height: var(--line-height-tight);
429
34
  margin-bottom: var(--spacing-xs);
430
- border-bottom: 1px solid var(--border-light);
35
+ border-bottom: 1px solid var(--color-border-pale);
431
36
  padding-bottom: var(--spacing-xs);
432
37
  }
433
38
 
@@ -443,7 +48,7 @@ button:disabled, [role="button"][aria-disabled="true"] {
443
48
 
444
49
  .friendItem {
445
50
  padding: var(--spacing-xs) 0;
446
- font-size: 1rem;
51
+ font-size: 1em;
447
52
  color: var(--color-text-muted);
448
53
  }
449
54
 
@@ -515,7 +120,7 @@ button:disabled, [role="button"][aria-disabled="true"] {
515
120
 
516
121
  .buttonSection {
517
122
  color: var(--color-text-secondary);
518
- font-size: 1rem;
123
+ font-size: 1em;
519
124
  margin-bottom: var(--spacing-xs);
520
125
  }
521
126
 
@@ -531,7 +136,7 @@ button:disabled, [role="button"][aria-disabled="true"] {
531
136
 
532
137
  .qrCodeSection {
533
138
  color: var(--color-text-secondary);
534
- font-size: 1rem;
139
+ font-size: 1em;
535
140
  margin-bottom: var(--spacing-xs);
536
141
  }
537
142
 
@@ -555,10 +160,17 @@ button:disabled, [role="button"][aria-disabled="true"] {
555
160
  /* Uses utilities: .section-bg, .text-center */
556
161
 
557
162
  .profileSection {
163
+
164
+ }
165
+
166
+ /* Horizontal layout for cards */
167
+ .profile-grid .profileSection {
558
168
  width: 100%;
559
169
  max-width: 100%;
560
170
  box-sizing: border-box;
561
171
  margin-bottom: var(--spacing-md);
172
+ box-sizing: border-box;
173
+ margin-bottom: var(--spacing-md);
562
174
  }
563
175
 
564
176
  @media (min-width: 900px) {
@@ -606,7 +218,7 @@ button:disabled, [role="button"][aria-disabled="true"] {
606
218
  display: flex;
607
219
  align-items: center;
608
220
  gap: var(--spacing-sm);
609
- font-size: 1.1rem;
221
+ font-size: 1.1em;
610
222
  }
611
223
 
612
224
  .socialItem span {
@@ -622,7 +234,7 @@ button:disabled, [role="button"][aria-disabled="true"] {
622
234
  gap: var(--spacing-sm);
623
235
  min-height: var(--min-touch-target);
624
236
  padding: var(--spacing-xs);
625
- border-radius: var(--border-radius-sm);
237
+ border-radius: var(--border-radius-base);
626
238
  transition: background-color var(--animation-duration) ease;
627
239
  position: relative;
628
240
  flex: 1;
@@ -648,7 +260,7 @@ button:disabled, [role="button"][aria-disabled="true"] {
648
260
  .socialIcon {
649
261
  width: 2.5em;
650
262
  height: 2.5em;
651
- border-radius: var(--border-radius-sm);
263
+ border-radius: var(--border-radius-base);
652
264
  background: var(--color-card-bg);
653
265
  flex-shrink: 0;
654
266
  }
@@ -667,7 +279,7 @@ button:disabled, [role="button"][aria-disabled="true"] {
667
279
  font-weight: 600;
668
280
  padding: var(--spacing-sm);
669
281
  text-align: left;
670
- color: var(--text-color);
282
+ color: var(--color-text);
671
283
  }
672
284
 
673
285
  .stuffTable th,
@@ -678,6 +290,21 @@ button:disabled, [role="button"][aria-disabled="true"] {
678
290
  }
679
291
 
680
292
  /* Utility-first CSS classes for layout, spacing, and responsiveness */
293
+ /* ===========================================
294
+ PROFILE GRID LAYOUT
295
+ =========================================== */
296
+
297
+ .profile-grid {
298
+ display: grid;
299
+ grid-template-columns: repeat(auto-fit, minmax(30em, 1fr));
300
+ gap: var(--spacing-lg);
301
+ background: var(--color-background);
302
+ }
303
+
304
+ .profile-header,
305
+ .profile-footer {
306
+ grid-column: 1 / -1;
307
+ }
681
308
 
682
309
  .center {
683
310
  display: flex;
@@ -714,8 +341,8 @@ button:disabled, [role="button"][aria-disabled="true"] {
714
341
  .p-md { padding: var(--spacing-md); }
715
342
  .p-lg { padding: var(--spacing-lg); }
716
343
 
717
- .rounded { border-radius: var(--border-radius); }
718
- .rounded-sm { border-radius: var(--border-radius-sm); }
344
+ .rounded { border-radius: var(--border-radius-full); }
345
+ .rounded-sm { border-radius: var(--border-radius-base); }
719
346
 
720
347
  .shadow { box-shadow: var(--box-shadow); }
721
348
  .shadow-sm { box-shadow: var(--box-shadow-sm); }
@@ -787,7 +414,7 @@ button:disabled, [role="button"][aria-disabled="true"] {
787
414
  background: var(--color-primary);
788
415
  color: white;
789
416
  text-decoration: none;
790
- border-radius: var(--border-radius-sm);
417
+ border-radius: var(--border-radius-base);
791
418
  }
792
419
 
793
420
  .skip-links a:focus {
@@ -832,7 +459,7 @@ button:disabled, [role="button"][aria-disabled="true"] {
832
459
  max-width: 65ch;
833
460
  }
834
461
 
835
- .text-large {
462
+ .text-lg {
836
463
  font-size: var(--font-size-lg);
837
464
  line-height: var(--line-height-base);
838
465
  }
@@ -843,7 +470,7 @@ button:disabled, [role="button"][aria-disabled="true"] {
843
470
  }
844
471
 
845
472
  .text-contrast-high {
846
- color: var(--text-color);
473
+ color: var(--color-text);
847
474
  font-weight: 600;
848
475
  }
849
476
 
@@ -857,9 +484,9 @@ button:disabled, [role="button"][aria-disabled="true"] {
857
484
 
858
485
  /* High contrast text */
859
486
  .high-contrast {
860
- color: var(--text-color);
487
+ color: var(--color-text);
861
488
  background: var(--color-background);
862
- border: 1px solid var(--border-light);
489
+ border: 1px solid var(--color-border-pale);
863
490
  }
864
491
 
865
492
  /* ===========================================
@@ -871,7 +498,7 @@ button:disabled, [role="button"][aria-disabled="true"] {
871
498
  min-height: var(--min-touch-target);
872
499
  padding: var(--spacing-sm) var(--spacing-md);
873
500
  border: 1px solid var(--color-primary);
874
- border-radius: var(--border-radius-sm);
501
+ border-radius: var(--border-radius-base);
875
502
  background: var(--color-primary);
876
503
  color: white;
877
504
  font-weight: 600;
@@ -918,7 +545,7 @@ button:disabled, [role="button"][aria-disabled="true"] {
918
545
 
919
546
  /* Section Title - primary colored heading */
920
547
  .section-title {
921
- font-size: 1.25rem;
548
+ font-size: 1.25em;
922
549
  font-weight: 600;
923
550
  color: var(--color-primary);
924
551
  margin: 0;
@@ -953,7 +580,7 @@ button:disabled, [role="button"][aria-disabled="true"] {
953
580
  /* Card Section Background */
954
581
  .section-bg {
955
582
  background: var(--color-section-bg);
956
- border-radius: var(--border-radius);
583
+ border-radius: var(--border-radius-full);
957
584
  box-shadow: var(--box-shadow);
958
585
  padding: var(--spacing-md);
959
586
  }
@@ -975,7 +602,7 @@ button:disabled, [role="button"][aria-disabled="true"] {
975
602
  :root {
976
603
  /* Background and Text */
977
604
  --color-background: white;
978
- --color-text: #333;
605
+ --color-text: ##1A1A1A;
979
606
  --color-text-secondary: #666;
980
607
  --color-text-light: #aaa;
981
608
  --color-text-link: #3B5998;
@@ -993,7 +620,7 @@ button:disabled, [role="button"][aria-disabled="true"] {
993
620
  --color-border-dark: #777;
994
621
  --color-border-darker: #444;
995
622
  --color-border-light: #aaa;
996
- --color-border-pale: #ddd;
623
+ --color-border-pale: #eee;
997
624
 
998
625
  /* Status Colors */
999
626
  --color-selected-bg: #8F3;
@@ -1103,11 +730,11 @@ button:disabled, [role="button"][aria-disabled="true"] {
1103
730
  /* Spacing and Sizing */
1104
731
  --spacing-tiny: 0.05em;
1105
732
  --spacing-small: 0.1em;
1106
- --spacing-xs: 0.2em;
1107
- --spacing-sm: 0.3em;
733
+ --spacing-xs: 0.5rem;
734
+ --spacing-sm: 0.75em;
1108
735
  --spacing-base: 0.5em;
1109
- --spacing-md: 0.8em;
1110
- --spacing-lg: 1em;
736
+ --spacing-md: 1em;
737
+ --spacing-lg: 1.5em;
1111
738
  --spacing-xl: 2em;
1112
739
  --spacing-2xl: 3em;
1113
740
  --border-width-thin: 1px;
@@ -1119,6 +746,8 @@ button:disabled, [role="button"][aria-disabled="true"] {
1119
746
 
1120
747
  /* Primary/Accent Colors */
1121
748
  --color-primary: #7C4DFF;
749
+ --color-primary-alpha: rgba(124, 77, 255, 0.25);
750
+ --color-primary-alpha-light: rgba(124, 77, 255, 0.1);
1122
751
  --color-secondary: #0077B6;
1123
752
  --color-accent: #FFD600;
1124
753
  --color-error: #B00020;
@@ -1127,6 +756,8 @@ button:disabled, [role="button"][aria-disabled="true"] {
1127
756
  /* Card/Section Backgrounds */
1128
757
  --color-card-bg: #FFFFFF;
1129
758
  --color-section-bg: #F5F5F5;
759
+ --color-zebra-stripe: rgba(0, 0, 0, 0.02);
760
+ --color-hover-bg: rgba(0, 0, 0, 0.05);
1130
761
 
1131
762
  /* Shadows */
1132
763
  --box-shadow: 0 2px 8px rgba(124,77,255,0.08);
@@ -1138,6 +769,27 @@ button:disabled, [role="button"][aria-disabled="true"] {
1138
769
  --focus-indicator-width: 3px;
1139
770
  --animation-duration: 0.2s;
1140
771
  --animation-duration-slow: 0.3s;
772
+ --min-font-size: 14px;
773
+ --min-line-height: 1.4;
774
+ --high-contrast-ratio: 7:1; /* WCAG AAA standard */
775
+
776
+ /* Overlay and Modal */
777
+ --overlay-bg: rgba(0, 0, 0, 0.5);
778
+ --z-index-modal: 9999;
779
+ --z-index-skip-links: 1000;
780
+
781
+ /* Opacity */
782
+ --opacity-disabled: 0.6;
783
+
784
+ /* Layout Values */
785
+ --max-width-readable: 65ch;
786
+ --max-width-readable-wide: 70ch;
787
+
788
+ /* Outline Offsets */
789
+ --outline-offset-sm: 2px;
790
+
791
+ /* Success Alpha */
792
+ --color-success-alpha: rgba(0, 200, 83, 0.1);
1141
793
  }
1142
794
 
1143
795
  /*
@@ -1147,27 +799,757 @@ button:disabled, [role="button"][aria-disabled="true"] {
1147
799
  /* @import url('./themes/dark.css'); */
1148
800
 
1149
801
 
1150
- /*
1151
- ** ------SolidOS Styles------
1152
- **
802
+ /*
803
+ ** ------SolidOS Utility Classes------
804
+ ** Reusable utility classes for layout, spacing, accessibility, and components
1153
805
  */
1154
806
 
1155
- /* I couldn't find the code for the collapse image. this is a quick work around
1156
- to make the collapsing easier to use ( the triangles dont jump 20 pixels). ~cm2
1157
- */
1158
- img[title="Hide details."] {
1159
- float: left;
807
+ /* ===========================================
808
+ ACCESSIBILITY UTILITIES (HIGH PRIORITY)
809
+ =========================================== */
810
+
811
+ /* Screen reader only content - hidden visually but available to assistive tech */
812
+ .sr-only {
813
+ position: absolute;
814
+ width: 1px;
815
+ height: 1px;
816
+ padding: 0;
817
+ margin: -1px;
818
+ overflow: hidden;
819
+ clip: rect(0, 0, 0, 0);
820
+ white-space: nowrap;
821
+ border: 0;
1160
822
  }
1161
823
 
1162
- html {
1163
- height: 100%;
1164
- line-height: 1.15;
824
+ /* Visually hidden but can become visible on focus */
825
+ .visually-hidden {
826
+ position: absolute !important;
827
+ width: 1px !important;
828
+ height: 1px !important;
829
+ padding: 0 !important;
830
+ margin: -1px !important;
831
+ overflow: hidden !important;
832
+ clip: rect(0, 0, 0, 0) !important;
833
+ white-space: nowrap !important;
834
+ border: 0 !important;
1165
835
  }
1166
- body {
1167
- height: 100%;
1168
- background-color: var(--color-background);
836
+
837
+ .visually-hidden.focusable:focus,
838
+ .visually-hidden.focusable:active {
839
+ position: static !important;
840
+ width: auto !important;
841
+ height: auto !important;
842
+ padding: inherit !important;
843
+ margin: inherit !important;
844
+ overflow: visible !important;
845
+ clip: auto !important;
846
+ white-space: inherit !important;
847
+ }
848
+
849
+ /* Minimum touch target for mobile accessibility (WCAG 2.5.5) */
850
+ .min-touch-target {
851
+ min-height: var(--min-touch-target);
852
+ min-width: var(--min-touch-target);
853
+ }
854
+
855
+ /* Reduced motion support */
856
+ .reduced-motion {
857
+ animation: none !important;
858
+ transition: none !important;
859
+ }
860
+
861
+ /* Focus ring utility */
862
+ .focus-ring {
863
+ outline: var(--focus-ring-width) solid var(--color-primary);
864
+ outline-offset: var(--outline-offset-sm);
865
+ }
866
+
867
+ .no-focus-ring {
868
+ outline: none;
869
+ }
870
+
871
+ /* ARIA live regions - for dynamic content announcements */
872
+ .live-region {
873
+ position: absolute;
874
+ left: -10000px;
875
+ width: 1px;
876
+ height: 1px;
877
+ overflow: hidden;
878
+ }
879
+
880
+ /* Skip links for keyboard navigation */
881
+ .skip-links {
882
+ position: absolute;
883
+ top: -100px;
884
+ left: 0;
885
+ z-index: var(--z-index-skip-links);
886
+ }
887
+
888
+ .skip-links a {
889
+ position: absolute;
890
+ left: var(--spacing-xs);
891
+ top: var(--spacing-xs);
892
+ padding: var(--spacing-sm);
893
+ background: var(--color-primary);
894
+ color: var(--color-background);
895
+ text-decoration: none;
896
+ border-radius: var(--border-radius-base);
897
+ }
898
+
899
+ .skip-links a:focus {
900
+ top: var(--spacing-xs);
901
+ }
902
+
903
+ /* ===========================================
904
+ LAYOUT UTILITIES
905
+ =========================================== */
906
+
907
+ .flex {
908
+ display: flex;
909
+ }
910
+
911
+ .grid {
912
+ display: grid;
913
+ }
914
+
915
+ .center {
916
+ display: flex;
917
+ justify-content: center;
918
+ align-items: center;
919
+ }
920
+
921
+ .flex-center {
922
+ display: flex;
923
+ justify-content: center;
924
+ align-items: center;
925
+ }
926
+
927
+ .flex-column {
928
+ display: flex;
929
+ flex-direction: column;
930
+ }
931
+
932
+ .flex-column-center {
933
+ display: flex;
934
+ flex-direction: column;
935
+ align-items: center;
936
+ }
937
+
938
+ .flex-row {
939
+ display: flex;
940
+ flex-direction: row;
941
+ }
942
+
943
+ .flex-wrap {
944
+ flex-wrap: wrap;
945
+ }
946
+
947
+ .flex-1 {
948
+ flex: 1;
949
+ }
950
+
951
+ .justify-start {
952
+ justify-content: flex-start;
953
+ }
954
+
955
+ .justify-end {
956
+ justify-content: flex-end;
957
+ }
958
+
959
+ .justify-center {
960
+ justify-content: center;
961
+ }
962
+
963
+ .justify-between {
964
+ justify-content: space-between;
965
+ }
966
+
967
+ .align-start {
968
+ align-items: flex-start;
969
+ }
970
+
971
+ .align-end {
972
+ align-items: flex-end;
973
+ }
974
+
975
+ .align-center {
976
+ align-items: center;
977
+ }
978
+
979
+ /* ===========================================
980
+ SPACING UTILITIES
981
+ =========================================== */
982
+
983
+ /* Gap utilities */
984
+ .gap-xs { gap: var(--spacing-xs); }
985
+ .gap-sm { gap: var(--spacing-sm); }
986
+ .gap-md { gap: var(--spacing-md); }
987
+ .gap-lg { gap: var(--spacing-lg); }
988
+ .gap-xl { gap: var(--spacing-xl); }
989
+
990
+ /* Margin top */
991
+ .mt-0 { margin-top: 0; }
992
+ .mt-xs { margin-top: var(--spacing-xs); }
993
+ .mt-sm { margin-top: var(--spacing-sm); }
994
+ .mt-md { margin-top: var(--spacing-md); }
995
+ .mt-lg { margin-top: var(--spacing-lg); }
996
+ .mt-xl { margin-top: var(--spacing-xl); }
997
+
998
+ /* Margin bottom */
999
+ .mb-0 { margin-bottom: 0; }
1000
+ .mb-xs { margin-bottom: var(--spacing-xs); }
1001
+ .mb-sm { margin-bottom: var(--spacing-sm); }
1002
+ .mb-md { margin-bottom: var(--spacing-md); }
1003
+ .mb-lg { margin-bottom: var(--spacing-lg); }
1004
+ .mb-xl { margin-bottom: var(--spacing-xl); }
1005
+
1006
+ /* Margin left */
1007
+ .ml-0 { margin-left: 0; }
1008
+ .ml-xs { margin-left: var(--spacing-xs); }
1009
+ .ml-sm { margin-left: var(--spacing-sm); }
1010
+ .ml-md { margin-left: var(--spacing-md); }
1011
+ .ml-lg { margin-left: var(--spacing-lg); }
1012
+
1013
+ /* Margin right */
1014
+ .mr-0 { margin-right: 0; }
1015
+ .mr-xs { margin-right: var(--spacing-xs); }
1016
+ .mr-sm { margin-right: var(--spacing-sm); }
1017
+ .mr-md { margin-right: var(--spacing-md); }
1018
+ .mr-lg { margin-right: var(--spacing-lg); }
1019
+
1020
+ /* Margin horizontal (left + right) */
1021
+ .mx-auto { margin-left: auto; margin-right: auto; }
1022
+ .mx-xs { margin-left: var(--spacing-xs); margin-right: var(--spacing-xs); }
1023
+ .mx-sm { margin-left: var(--spacing-sm); margin-right: var(--spacing-sm); }
1024
+ .mx-md { margin-left: var(--spacing-md); margin-right: var(--spacing-md); }
1025
+
1026
+ /* Margin vertical (top + bottom) */
1027
+ .my-xs { margin-top: var(--spacing-xs); margin-bottom: var(--spacing-xs); }
1028
+ .my-sm { margin-top: var(--spacing-sm); margin-bottom: var(--spacing-sm); }
1029
+ .my-md { margin-top: var(--spacing-md); margin-bottom: var(--spacing-md); }
1030
+
1031
+ /* Padding */
1032
+ .p-0 { padding: 0; }
1033
+ .p-xs { padding: var(--spacing-xs); }
1034
+ .p-sm { padding: var(--spacing-sm); }
1035
+ .p-md { padding: var(--spacing-md); }
1036
+ .p-lg { padding: var(--spacing-lg); }
1037
+ .p-xl { padding: var(--spacing-xl); }
1038
+
1039
+ /* Padding top */
1040
+ .pt-xs { padding-top: var(--spacing-xs); }
1041
+ .pt-sm { padding-top: var(--spacing-sm); }
1042
+ .pt-md { padding-top: var(--spacing-md); }
1043
+ .pt-lg { padding-top: var(--spacing-lg); }
1044
+
1045
+ /* Padding bottom */
1046
+ .pb-xs { padding-bottom: var(--spacing-xs); }
1047
+ .pb-sm { padding-bottom: var(--spacing-sm); }
1048
+ .pb-md { padding-bottom: var(--spacing-md); }
1049
+ .pb-lg { padding-bottom: var(--spacing-lg); }
1050
+
1051
+ /* Padding horizontal */
1052
+ .px-xs { padding-left: var(--spacing-xs); padding-right: var(--spacing-xs); }
1053
+ .px-sm { padding-left: var(--spacing-sm); padding-right: var(--spacing-sm); }
1054
+ .px-md { padding-left: var(--spacing-md); padding-right: var(--spacing-md); }
1055
+ .px-lg { padding-left: var(--spacing-lg); padding-right: var(--spacing-lg); }
1056
+
1057
+ /* Padding vertical */
1058
+ .py-xs { padding-top: var(--spacing-xs); padding-bottom: var(--spacing-xs); }
1059
+ .py-sm { padding-top: var(--spacing-sm); padding-bottom: var(--spacing-sm); }
1060
+ .py-md { padding-top: var(--spacing-md); padding-bottom: var(--spacing-md); }
1061
+ .py-lg { padding-top: var(--spacing-lg); padding-bottom: var(--spacing-lg); }
1062
+
1063
+ /* ===========================================
1064
+ TEXT UTILITIES
1065
+ =========================================== */
1066
+
1067
+ .text-center { text-align: center; }
1068
+ .text-left { text-align: left; }
1069
+ .text-right { text-align: right; }
1070
+
1071
+ .text-secondary { color: var(--color-text-secondary); }
1072
+ .text-muted { color: var(--color-text-muted); }
1073
+ .text-primary { color: var(--color-primary); }
1074
+ .text-error { color: var(--color-error); }
1075
+ .text-success { color: var(--color-success); }
1076
+
1077
+ .text-bold { font-weight: var(--font-weight-bold); }
1078
+ .text-normal { font-weight: var(--font-weight-normal); }
1079
+
1080
+ .text-sm { font-size: var(--font-size-sm); }
1081
+ .text-lg { font-size: var(--font-size-lg); }
1082
+ .text-xl { font-size: var(--font-size-xl); }
1083
+
1084
+ /* Text that respects accessibility guidelines */
1085
+ .text-readable {
1086
+ line-height: var(--line-height-base);
1087
+ max-width: var(--max-width-readable);
1088
+ }
1089
+
1090
+ .text-scale-friendly {
1091
+ line-height: var(--line-height-base);
1092
+ max-width: var(--max-width-readable-wide);
1093
+ }
1094
+
1095
+ /* Text with minimum font size safety */
1096
+ .text-small {
1097
+ font-size: max(var(--font-size-sm), var(--min-font-size));
1098
+ line-height: var(--min-line-height);
1099
+ }
1100
+
1101
+ .text-large {
1102
+ font-size: var(--font-size-lg);
1103
+ line-height: var(--line-height-base);
1104
+ }
1105
+
1106
+ /* Text overflow handling */
1107
+ .text-truncate {
1108
+ white-space: nowrap;
1109
+ text-overflow: ellipsis;
1110
+ overflow: hidden;
1111
+ }
1112
+
1113
+ .text-wrap-anywhere {
1114
+ overflow-wrap: anywhere;
1115
+ word-break: break-word;
1116
+ }
1117
+
1118
+ .text-nowrap {
1119
+ white-space: nowrap;
1120
+ }
1121
+
1122
+ /* High contrast text for accessibility */
1123
+ .text-contrast-high {
1169
1124
  color: var(--color-text);
1170
- font-family: var(--font-family-base);
1125
+ font-weight: var(--font-weight-bold);
1126
+ }
1127
+
1128
+ /* Better focus for text elements */
1129
+ .focusable-text:focus {
1130
+ background-color: var(--color-primary-alpha-light);
1131
+ outline: var(--focus-ring-width) solid var(--color-primary);
1132
+ outline-offset: var(--outline-offset-sm);
1133
+ border-radius: var(--outline-offset-sm);
1134
+ }
1135
+
1136
+ /* High contrast box */
1137
+ .high-contrast {
1138
+ color: var(--color-text);
1139
+ background: var(--color-background);
1140
+ border: var(--border-width-thin) solid var(--color-border-pale);
1141
+ }
1142
+
1143
+ /* ===========================================
1144
+ BORDER & SHADOW UTILITIES
1145
+ =========================================== */
1146
+
1147
+ .rounded { border-radius: var(--border-radius-full); }
1148
+ .rounded-sm { border-radius: var(--border-radius-base); }
1149
+ .rounded-lg { border-radius: var(--border-radius-lg); }
1150
+ .rounded-none { border-radius: 0; }
1151
+
1152
+ .shadow { box-shadow: var(--box-shadow); }
1153
+ .shadow-sm { box-shadow: var(--box-shadow-sm); }
1154
+ .shadow-none { box-shadow: none; }
1155
+
1156
+ .border { border: var(--border-width-thin) solid var(--color-border); }
1157
+ .border-dark { border: var(--border-width-thin) solid var(--color-border-dark); }
1158
+ .border-light { border: var(--border-width-thin) solid var(--color-border-light); }
1159
+ .border-none { border: none; }
1160
+
1161
+ /* ===========================================
1162
+ BACKGROUND UTILITIES
1163
+ =========================================== */
1164
+
1165
+ .bg-primary {
1166
+ background: var(--color-primary);
1167
+ color: var(--color-background);
1168
+ }
1169
+
1170
+ .bg-card {
1171
+ background: var(--color-card-bg);
1172
+ }
1173
+
1174
+ .bg-section {
1175
+ background: var(--color-section-bg);
1176
+ }
1177
+
1178
+ .bg-transparent {
1179
+ background: transparent;
1180
+ }
1181
+
1182
+ .bg-white {
1183
+ background: var(--color-background);
1184
+ }
1185
+
1186
+ /* ===========================================
1187
+ BUTTON COMPONENTS
1188
+ =========================================== */
1189
+
1190
+ /* Primary button */
1191
+ .btn-primary {
1192
+ min-height: var(--min-touch-target);
1193
+ padding: var(--spacing-sm) var(--spacing-md);
1194
+ border: var(--border-width-thin) solid var(--color-primary);
1195
+ border-radius: var(--border-radius-base);
1196
+ background: var(--color-primary);
1197
+ color: var(--color-background);
1198
+ font-weight: var(--font-weight-bold);
1199
+ cursor: pointer;
1200
+ transition: all var(--animation-duration) ease;
1201
+ text-decoration: none;
1202
+ display: inline-flex;
1203
+ align-items: center;
1204
+ justify-content: center;
1205
+ }
1206
+
1207
+ .btn-primary:hover {
1208
+ background: color-mix(in srgb, var(--color-primary) 85%, black);
1209
+ box-shadow: 0 2px 4px var(--color-primary-alpha);
1210
+ }
1211
+
1212
+ .btn-primary:active {
1213
+ box-shadow: 0 1px 2px var(--color-primary-alpha);
1214
+ }
1215
+
1216
+ .btn-primary:focus,
1217
+ .btn-primary:focus-visible {
1218
+ outline: var(--focus-indicator-width) solid var(--color-primary);
1219
+ outline-offset: var(--outline-offset-sm);
1220
+ box-shadow: 0 0 0 var(--focus-ring-width) var(--color-background), 0 0 0 calc(var(--focus-ring-width) + var(--focus-indicator-width)) var(--color-primary-alpha);
1221
+ }
1222
+
1223
+ .btn-primary:disabled {
1224
+ opacity: var(--opacity-disabled);
1225
+ cursor: not-allowed;
1226
+ transform: none;
1227
+ }
1228
+
1229
+ /* Secondary button */
1230
+ .btn-secondary {
1231
+ min-height: var(--min-touch-target);
1232
+ padding: var(--spacing-sm) var(--spacing-md);
1233
+ border: var(--border-width-thin) solid var(--color-secondary);
1234
+ border-radius: var(--border-radius-base);
1235
+ background: var(--color-secondary);
1236
+ color: var(--color-background);
1237
+ font-weight: var(--font-weight-bold);
1238
+ cursor: pointer;
1239
+ transition: all var(--animation-duration) ease;
1240
+ text-decoration: none;
1241
+ display: inline-flex;
1242
+ align-items: center;
1243
+ justify-content: center;
1244
+ }
1245
+
1246
+ .btn-secondary:hover {
1247
+ background: color-mix(in srgb, var(--color-secondary) 85%, black);
1248
+ }
1249
+
1250
+ .btn-secondary:disabled {
1251
+ opacity: var(--opacity-disabled);
1252
+ cursor: not-allowed;
1253
+ }
1254
+
1255
+ /* Outline button */
1256
+ .btn-outline {
1257
+ min-height: var(--min-touch-target);
1258
+ padding: var(--spacing-sm) var(--spacing-md);
1259
+ border: var(--border-width-medium) solid var(--color-primary);
1260
+ border-radius: var(--border-radius-base);
1261
+ background: transparent;
1262
+ color: var(--color-primary);
1263
+ font-weight: var(--font-weight-bold);
1264
+ cursor: pointer;
1265
+ transition: all var(--animation-duration) ease;
1266
+ text-decoration: none;
1267
+ display: inline-flex;
1268
+ align-items: center;
1269
+ justify-content: center;
1270
+ }
1271
+
1272
+ .btn-outline:hover {
1273
+ background: var(--color-primary);
1274
+ color: var(--color-background);
1275
+ }
1276
+
1277
+ .btn-outline:disabled {
1278
+ opacity: var(--opacity-disabled);
1279
+ cursor: not-allowed;
1280
+ }
1281
+
1282
+ /* Transparent button (for solid-ui integration) */
1283
+ .btn-transparent {
1284
+ background-color: transparent;
1285
+ border: none;
1286
+ cursor: pointer;
1287
+ }
1288
+
1289
+ .btn-transparent:hover {
1290
+ background-color: var(--color-hover-bg);
1291
+ }
1292
+
1293
+ /* Button focus state */
1294
+ .action-button-focus:focus,
1295
+ .action-button-focus:focus-visible {
1296
+ outline: var(--focus-indicator-width) solid var(--color-primary) !important;
1297
+ outline-offset: var(--outline-offset-sm) !important;
1298
+ box-shadow: 0 0 0 var(--focus-ring-width) var(--color-background), 0 0 0 calc(var(--focus-ring-width) + var(--focus-indicator-width)) var(--color-primary-alpha) !important;
1299
+ z-index: 1;
1300
+ }
1301
+
1302
+ /* ===========================================
1303
+ CARD & SECTION COMPONENTS
1304
+ =========================================== */
1305
+
1306
+ .module-card {
1307
+ background: var(--color-card-bg);
1308
+ border-radius: var(--border-radius-full);
1309
+ box-shadow: var(--box-shadow);
1310
+ padding: var(--spacing-lg);
1311
+ margin-bottom: var(--spacing-lg);
1312
+ width: 100%;
1313
+ max-width: 100%;
1314
+ box-sizing: border-box;
1315
+ }
1316
+
1317
+ .module-header {
1318
+ text-align: center;
1319
+ margin-bottom: var(--spacing-md);
1320
+ }
1321
+
1322
+ .section-centered {
1323
+ display: flex;
1324
+ flex-direction: column;
1325
+ align-items: center;
1326
+ }
1327
+
1328
+ .section-bg {
1329
+ background: var(--color-section-bg);
1330
+ border-radius: var(--border-radius-full);
1331
+ box-shadow: var(--box-shadow);
1332
+ padding: var(--spacing-md);
1333
+ }
1334
+
1335
+ .section-title {
1336
+ font-size: var(--font-size-xl);
1337
+ font-weight: var(--font-weight-bold);
1338
+ color: var(--color-primary);
1339
+ margin: 0;
1340
+ }
1341
+
1342
+ /* ===========================================
1343
+ LIST & TABLE UTILITIES
1344
+ =========================================== */
1345
+
1346
+ .list-reset {
1347
+ list-style: none;
1348
+ padding: 0;
1349
+ margin: 0;
1350
+ }
1351
+
1352
+ .zebra-stripe tr:nth-child(even),
1353
+ .zebra-stripe > *:nth-child(even) {
1354
+ background-color: var(--color-zebra-stripe);
1355
+ }
1356
+
1357
+ /* ===========================================
1358
+ DISPLAY & VISIBILITY UTILITIES
1359
+ =========================================== */
1360
+
1361
+ .block { display: block; }
1362
+ .inline { display: inline; }
1363
+ .inline-block { display: inline-block; }
1364
+ .hidden { display: none; }
1365
+ .visible { visibility: visible; }
1366
+ .invisible { visibility: hidden; }
1367
+
1368
+ /* ===========================================
1369
+ WIDTH & HEIGHT UTILITIES
1370
+ =========================================== */
1371
+
1372
+ .w-full { width: 100%; }
1373
+ .w-auto { width: auto; }
1374
+ .h-full { height: 100%; }
1375
+ .h-auto { height: auto; }
1376
+ .max-w-full { max-width: 100%; }
1377
+
1378
+ /* ===========================================
1379
+ POSITION UTILITIES
1380
+ =========================================== */
1381
+
1382
+ .relative { position: relative; }
1383
+ .absolute { position: absolute; }
1384
+ .fixed { position: fixed; }
1385
+ .sticky { position: sticky; }
1386
+
1387
+ /* ===========================================
1388
+ LOADING & STATUS INDICATORS
1389
+ =========================================== */
1390
+
1391
+ .loading-text {
1392
+ color: var(--color-primary);
1393
+ text-align: center;
1394
+ margin: var(--spacing-md) 0;
1395
+ }
1396
+
1397
+ .loading-spinner {
1398
+ width: var(--min-touch-target);
1399
+ height: var(--min-touch-target);
1400
+ border: var(--focus-indicator-width) solid var(--color-border-pale);
1401
+ border-top: var(--focus-indicator-width) solid var(--color-primary);
1402
+ border-radius: var(--border-radius-full);
1403
+ animation: spin var(--animation-duration-slow) linear infinite;
1404
+ }
1405
+
1406
+ @keyframes spin {
1407
+ 0% { transform: rotate(0deg); }
1408
+ 100% { transform: rotate(360deg); }
1409
+ }
1410
+
1411
+ /* ===========================================
1412
+ ARIA ROLE STYLING
1413
+ =========================================== */
1414
+
1415
+ [role="alert"] {
1416
+ padding: var(--spacing-md);
1417
+ border: var(--border-width-medium) solid var(--color-error);
1418
+ border-radius: var(--border-radius-base);
1419
+ background-color: var(--color-primary-alpha-light);
1420
+ margin: var(--spacing-md) 0;
1421
+ }
1422
+
1423
+ [role="status"] {
1424
+ padding: var(--spacing-md);
1425
+ border: var(--border-width-medium) solid var(--color-success);
1426
+ border-radius: var(--border-radius-base);
1427
+ background-color: var(--color-success-alpha);
1428
+ margin: var(--spacing-md) 0;
1429
+ }
1430
+
1431
+ /* ===========================================
1432
+ FOCUS TRAP FOR MODALS
1433
+ =========================================== */
1434
+
1435
+ .focus-trap {
1436
+ position: fixed;
1437
+ top: 0;
1438
+ left: 0;
1439
+ width: 100%;
1440
+ height: 100%;
1441
+ z-index: var(--z-index-modal);
1442
+ background: var(--overlay-bg);
1443
+ display: flex;
1444
+ justify-content: center;
1445
+ align-items: center;
1446
+ }
1447
+
1448
+ /* ===========================================
1449
+ MEDIA QUERIES
1450
+ =========================================== */
1451
+
1452
+ /* Respect reduced motion preferences */
1453
+ @media (prefers-reduced-motion: reduce) {
1454
+ .loading-spinner {
1455
+ animation: none;
1456
+ border-top-color: var(--color-primary);
1457
+ }
1458
+
1459
+ *,
1460
+ *::before,
1461
+ *::after {
1462
+ animation-duration: 0.01ms !important;
1463
+ animation-iteration-count: 1 !important;
1464
+ transition-duration: 0.01ms !important;
1465
+ }
1466
+ }
1467
+
1468
+ /* High contrast mode support */
1469
+ @media (prefers-contrast: high) {
1470
+ .btn-primary,
1471
+ .btn-secondary,
1472
+ .btn-outline {
1473
+ border-width: var(--border-width-medium);
1474
+ }
1475
+
1476
+ .module-card,
1477
+ .section-bg {
1478
+ border: var(--border-width-medium) solid var(--color-border-dark);
1479
+ }
1480
+ }
1481
+
1482
+ /* Mobile minimum font size */
1483
+ @media screen and (max-width: 768px) {
1484
+ html {
1485
+ font-size: max(16px, 1rem);
1486
+ }
1487
+ }
1488
+
1489
+ /* Smooth scroll when no motion preference */
1490
+ @media (prefers-reduced-motion: no-preference) {
1491
+ html {
1492
+ scroll-behavior: smooth;
1493
+ }
1494
+ }
1495
+
1496
+ /*
1497
+ ** ------SolidOS Styles------
1498
+ **
1499
+ */
1500
+
1501
+ /* I couldn't find the code for the collapse image. this is a quick work around
1502
+ to make the collapsing easier to use ( the triangles dont jump 20 pixels). ~cm2
1503
+ */
1504
+ img[title="Hide details."] {
1505
+ float: left;
1506
+ }
1507
+
1508
+ html, body {
1509
+ margin: 0;
1510
+ padding: 0;
1511
+ font-family: var(--font-family-base);
1512
+ font-size: var(--font-size-base);
1513
+ line-height: var(--line-height-base);
1514
+ background: var(--color-background);
1515
+ color: var(--color-text);
1516
+ -webkit-font-smoothing: antialiased;
1517
+ -moz-osx-font-smoothing: grayscale;
1518
+ text-rendering: optimizeLegibility;
1519
+ }
1520
+
1521
+ /* Improved heading hierarchy */
1522
+ h1, h2, h3, h4, h5, h6 {
1523
+ color: var(--color-primary);
1524
+ font-weight: 600;
1525
+ line-height: var(--line-height-tight);
1526
+ margin-top: 0;
1527
+ margin-bottom: var(--spacing-sm);
1528
+ }
1529
+
1530
+ h1 { font-size: 2em; } /* 32px */
1531
+ h2 { font-size: 1.5em; } /* 24px */
1532
+ h3 { font-size: 1.25em; } /* 20px */
1533
+ h4 { font-size: 1.125em; }/* 18px */
1534
+ h5, h6 { font-size: 1em; }/* 16px */
1535
+
1536
+ /* Better paragraph spacing */
1537
+ p {
1538
+ margin-bottom: var(--spacing-md);
1539
+ line-height: var(--line-height-base);
1540
+ max-width: 65ch; /* Optimal reading width */
1541
+ }
1542
+
1543
+ /* Improved link accessibility */
1544
+ a {
1545
+ color: var(--color-primary);
1546
+ text-decoration: underline;
1547
+ text-underline-offset: 0.125em;
1548
+ text-decoration-thickness: 0.0625em;
1549
+ }
1550
+
1551
+ a:hover, a:focus {
1552
+ text-decoration-thickness: 0.125em;
1171
1553
  }
1172
1554
 
1173
1555
  /* Main page elements in databrowser.html */