@jjlmoya/utils-games-development 1.61.0 → 1.62.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.
Files changed (38) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +2 -1
  3. package/src/entries.ts +2 -1
  4. package/src/index.ts +1 -0
  5. package/src/tests/locale_completeness.test.ts +2 -2
  6. package/src/tests/tool_validation.test.ts +2 -2
  7. package/src/tool/gameUIAccessibilityTester/bibliography.astro +6 -0
  8. package/src/tool/gameUIAccessibilityTester/bibliography.ts +10 -0
  9. package/src/tool/gameUIAccessibilityTester/component.astro +210 -0
  10. package/src/tool/gameUIAccessibilityTester/controller-actions.ts +92 -0
  11. package/src/tool/gameUIAccessibilityTester/controller.ts +237 -0
  12. package/src/tool/gameUIAccessibilityTester/dom-views.ts +193 -0
  13. package/src/tool/gameUIAccessibilityTester/entry.ts +28 -0
  14. package/src/tool/gameUIAccessibilityTester/evaluator.ts +43 -0
  15. package/src/tool/gameUIAccessibilityTester/game-ui-accessibility-stress-tester.css +982 -0
  16. package/src/tool/gameUIAccessibilityTester/i18n/de.ts +203 -0
  17. package/src/tool/gameUIAccessibilityTester/i18n/en.ts +199 -0
  18. package/src/tool/gameUIAccessibilityTester/i18n/es.ts +203 -0
  19. package/src/tool/gameUIAccessibilityTester/i18n/fr.ts +203 -0
  20. package/src/tool/gameUIAccessibilityTester/i18n/id.ts +203 -0
  21. package/src/tool/gameUIAccessibilityTester/i18n/it.ts +203 -0
  22. package/src/tool/gameUIAccessibilityTester/i18n/ja.ts +203 -0
  23. package/src/tool/gameUIAccessibilityTester/i18n/ko.ts +203 -0
  24. package/src/tool/gameUIAccessibilityTester/i18n/nl.ts +203 -0
  25. package/src/tool/gameUIAccessibilityTester/i18n/pl.ts +203 -0
  26. package/src/tool/gameUIAccessibilityTester/i18n/pt.ts +203 -0
  27. package/src/tool/gameUIAccessibilityTester/i18n/ru.ts +203 -0
  28. package/src/tool/gameUIAccessibilityTester/i18n/sv.ts +203 -0
  29. package/src/tool/gameUIAccessibilityTester/i18n/tr.ts +203 -0
  30. package/src/tool/gameUIAccessibilityTester/i18n/zh.ts +203 -0
  31. package/src/tool/gameUIAccessibilityTester/index.ts +11 -0
  32. package/src/tool/gameUIAccessibilityTester/logic.test.ts +57 -0
  33. package/src/tool/gameUIAccessibilityTester/logic.ts +157 -0
  34. package/src/tool/gameUIAccessibilityTester/report.ts +59 -0
  35. package/src/tool/gameUIAccessibilityTester/seo.astro +15 -0
  36. package/src/tool/gameUIAccessibilityTester/storage.ts +34 -0
  37. package/src/tool/gameUIAccessibilityTester/ui.ts +80 -0
  38. package/src/tools.ts +2 -0
@@ -0,0 +1,982 @@
1
+ :root {
2
+ --n-gax-paper: #f5f1e7;
3
+ --n-gax-panel: #dce9e2;
4
+ --n-gax-panel-strong: #bfd4ca;
5
+ --n-gax-ink: #0a3034;
6
+ --n-gax-muted: #3b5e60;
7
+ --n-gax-line: #5e817f;
8
+ --n-gax-void: #f0f6f2;
9
+ --n-gax-void-soft: #dcebe6;
10
+ --n-gax-stage-ink: #0a3034;
11
+ --n-gax-stage-muted: #365f60;
12
+ --n-gax-cyan: #00d8c0;
13
+ --n-gax-cyan-dark: #006c66;
14
+ --n-gax-amber: #ffc857;
15
+ --n-gax-coral: #ff5d68;
16
+ --n-gax-coral-dark: #8b2031;
17
+ --n-gax-strong: #146b48;
18
+ --n-gax-white: #fff;
19
+ --n-gax-shadow: #00101433;
20
+ --n-gax-grid: #0c6f671f;
21
+ --n-gax-focus: #005f68;
22
+ --n-gax-bloom: #f7c85b33;
23
+ --n-gax-on-solid: #fff;
24
+ --n-gax-on-accent: #032b2d;
25
+ }
26
+
27
+ .theme-light {
28
+ --n-gax-paper: #f5f1e7;
29
+ --n-gax-panel: #dce9e2;
30
+ --n-gax-panel-strong: #bfd4ca;
31
+ --n-gax-ink: #0a3034;
32
+ --n-gax-muted: #3b5e60;
33
+ --n-gax-line: #5e817f;
34
+ --n-gax-void: #f0f6f2;
35
+ --n-gax-void-soft: #dcebe6;
36
+ --n-gax-stage-ink: #0a3034;
37
+ --n-gax-stage-muted: #365f60;
38
+ --n-gax-cyan: #00d8c0;
39
+ --n-gax-cyan-dark: #006c66;
40
+ --n-gax-amber: #ffc857;
41
+ --n-gax-coral: #ff5d68;
42
+ --n-gax-coral-dark: #8b2031;
43
+ --n-gax-strong: #146b48;
44
+ --n-gax-white: #fff;
45
+ --n-gax-shadow: #002a3038;
46
+ --n-gax-grid: #0c6f671f;
47
+ --n-gax-focus: #005f68;
48
+ --n-gax-bloom: #f7c85b33;
49
+ --n-gax-on-solid: #fff;
50
+ --n-gax-on-accent: #032b2d;
51
+ }
52
+
53
+ .theme-dark {
54
+ --n-gax-paper: #07171d;
55
+ --n-gax-panel: #0e2830;
56
+ --n-gax-panel-strong: #173a42;
57
+ --n-gax-ink: #e9ffff;
58
+ --n-gax-muted: #a4c8cb;
59
+ --n-gax-line: #47767a;
60
+ --n-gax-void: #020b10;
61
+ --n-gax-void-soft: #0a2028;
62
+ --n-gax-stage-ink: #e9ffff;
63
+ --n-gax-stage-muted: #a4c8cb;
64
+ --n-gax-cyan: #00d8c0;
65
+ --n-gax-cyan-dark: #006c66;
66
+ --n-gax-amber: #ffc857;
67
+ --n-gax-coral: #ff7a82;
68
+ --n-gax-coral-dark: #8b2031;
69
+ --n-gax-strong: #45c58b;
70
+ --n-gax-white: #fff;
71
+ --n-gax-shadow: #0009;
72
+ --n-gax-grid: #75aaa522;
73
+ --n-gax-focus: #64fff0;
74
+ --n-gax-bloom: #00d8c014;
75
+ --n-gax-on-solid: #fff;
76
+ --n-gax-on-accent: #032b2d;
77
+ }
78
+
79
+ .gax {
80
+ --split: 50%;
81
+
82
+ color: var(--n-gax-ink);
83
+ background-color: var(--n-gax-paper);
84
+ background-image: radial-gradient(circle at 88% 8%, var(--n-gax-bloom), transparent 28rem);
85
+ border: 1px solid var(--n-gax-line);
86
+ border-radius: 2rem 0.35rem;
87
+ overflow: hidden;
88
+ box-shadow: 0 1.5rem 4rem var(--n-gax-shadow);
89
+ }
90
+
91
+ .gax button,
92
+ .gax input,
93
+ .gax label {
94
+ font: inherit;
95
+ }
96
+
97
+ .gax button,
98
+ .gax-upload-action {
99
+ min-height: 44px;
100
+ }
101
+
102
+ .gax button:focus-visible,
103
+ .gax input:focus-visible,
104
+ .gax-upload-action:focus-visible,
105
+ .gax canvas:focus-visible {
106
+ outline: 3px solid var(--n-gax-focus);
107
+ outline-offset: 3px;
108
+ }
109
+
110
+ .gax h2,
111
+ .gax p,
112
+ .gax figure {
113
+ margin: 0;
114
+ }
115
+
116
+ .gax-intro {
117
+ display: grid;
118
+ grid-template-columns: auto 1fr auto;
119
+ gap: 1rem;
120
+ align-items: center;
121
+ padding: 1rem 1.25rem;
122
+ color: var(--n-gax-stage-ink);
123
+ background: var(--n-gax-void);
124
+ border-bottom: 1px solid var(--n-gax-line);
125
+ }
126
+
127
+ .gax-intro p {
128
+ max-width: 68ch;
129
+ line-height: 1.55;
130
+ }
131
+
132
+ .gax-intro .gax-privacy {
133
+ color: var(--n-gax-stage-muted);
134
+ font-size: 0.8rem;
135
+ }
136
+
137
+ .gax-signal {
138
+ display: flex;
139
+ gap: 0.25rem;
140
+ }
141
+
142
+ .gax-signal span {
143
+ width: 0.5rem;
144
+ height: 1.75rem;
145
+ background: var(--n-gax-cyan);
146
+ transform: skew(-14deg);
147
+ }
148
+
149
+ .gax-signal span:nth-child(2) {
150
+ height: 1.1rem;
151
+ background: var(--n-gax-amber);
152
+ }
153
+
154
+ .gax-signal span:nth-child(3) {
155
+ height: 0.65rem;
156
+ background: var(--n-gax-coral);
157
+ }
158
+
159
+ .gax-upload {
160
+ display: grid;
161
+ grid-template-columns: auto 1fr auto;
162
+ gap: 1.25rem;
163
+ align-items: center;
164
+ margin: 1.25rem;
165
+ padding: 1.25rem;
166
+ border: 1px dashed var(--n-gax-line);
167
+ background: linear-gradient(110deg, var(--n-gax-panel), var(--n-gax-paper));
168
+ transition: transform 180ms ease, border-color 180ms ease;
169
+ }
170
+
171
+ .gax-upload[data-drag="true"] {
172
+ border-color: var(--n-gax-cyan-dark);
173
+ transform: translateY(-2px);
174
+ }
175
+
176
+ .gax-upload svg {
177
+ width: 3.25rem;
178
+ fill: none;
179
+ stroke: var(--n-gax-cyan-dark);
180
+ stroke-width: 2;
181
+ }
182
+
183
+ .gax-upload h2 {
184
+ font-size: 1rem;
185
+ letter-spacing: 0.04em;
186
+ text-transform: uppercase;
187
+ }
188
+
189
+ .gax-upload p {
190
+ margin-top: 0.3rem;
191
+ color: var(--n-gax-muted);
192
+ }
193
+
194
+ .gax-upload small {
195
+ display: block;
196
+ margin-top: 0.5rem;
197
+ color: var(--n-gax-muted);
198
+ font-size: 0.8rem;
199
+ }
200
+
201
+ .gax-file-input {
202
+ position: absolute;
203
+ width: 1px;
204
+ height: 1px;
205
+ overflow: hidden;
206
+ clip-path: inset(50%);
207
+ }
208
+
209
+ .gax-upload-action {
210
+ display: inline-flex;
211
+ align-items: center;
212
+ justify-content: center;
213
+ padding: 0.7rem 1rem;
214
+ color: var(--n-gax-on-solid);
215
+ background: var(--n-gax-cyan-dark);
216
+ border-radius: 999px;
217
+ cursor: pointer;
218
+ font-weight: 800;
219
+ }
220
+
221
+ .gax-upload-replace,
222
+ .gax[data-ready="true"] .gax-upload-new {
223
+ display: none;
224
+ }
225
+
226
+ .gax[data-ready="true"] .gax-upload-replace {
227
+ display: inline;
228
+ }
229
+
230
+ .gax-optics,
231
+ .gax-stress,
232
+ .gax-sampler,
233
+ .gax-review {
234
+ padding: 1.25rem;
235
+ }
236
+
237
+ .gax-control-head {
238
+ display: flex;
239
+ align-items: center;
240
+ gap: 0.75rem;
241
+ margin-bottom: 0.85rem;
242
+ color: var(--n-gax-muted);
243
+ font-size: 0.8rem;
244
+ font-weight: 800;
245
+ letter-spacing: 0.1em;
246
+ text-transform: uppercase;
247
+ }
248
+
249
+ .gax-control-head h2 {
250
+ font-size: inherit;
251
+ }
252
+
253
+ .gax-control-rule {
254
+ flex: 1;
255
+ height: 1px;
256
+ background: var(--n-gax-line);
257
+ }
258
+
259
+ .gax-lens-rack {
260
+ display: flex;
261
+ gap: 0.5rem;
262
+ overflow-x: auto;
263
+ padding: 0.25rem 0 0.75rem;
264
+ }
265
+
266
+ .gax-lens-rack button {
267
+ flex: 0 0 auto;
268
+ padding: 0.65rem 0.9rem;
269
+ color: var(--n-gax-ink);
270
+ background: var(--n-gax-panel);
271
+ border: 1px solid var(--n-gax-line);
272
+ border-radius: 999px 999px 0.3rem;
273
+ cursor: pointer;
274
+ font-weight: 700;
275
+ }
276
+
277
+ .gax-lens-rack button.is-active {
278
+ color: var(--n-gax-on-solid);
279
+ background: var(--n-gax-cyan-dark);
280
+ border-color: var(--n-gax-cyan-dark);
281
+ box-shadow: 0 0 0 3px var(--n-gax-grid);
282
+ }
283
+
284
+ .gax-stage {
285
+ position: relative;
286
+ margin: 0 1.25rem;
287
+ padding: 0.8rem;
288
+ color: var(--n-gax-stage-ink);
289
+ background-color: var(--n-gax-void);
290
+ background-image:
291
+ linear-gradient(var(--n-gax-grid) 1px, transparent 1px),
292
+ linear-gradient(90deg, var(--n-gax-grid) 1px, transparent 1px);
293
+ background-size: 24px 24px;
294
+ border: 1px solid var(--n-gax-line);
295
+ border-radius: 1.4rem 0.25rem;
296
+ }
297
+
298
+ .gax-stage-toolbar,
299
+ .gax-compare-actions {
300
+ display: flex;
301
+ justify-content: space-between;
302
+ gap: 0.75rem;
303
+ align-items: center;
304
+ }
305
+
306
+ .gax-segment {
307
+ display: inline-flex;
308
+ gap: 0.25rem;
309
+ padding: 0.25rem;
310
+ background: var(--n-gax-void-soft);
311
+ border: 1px solid var(--n-gax-line);
312
+ border-radius: 999px;
313
+ }
314
+
315
+ .gax-segment button {
316
+ padding: 0.45rem 0.75rem;
317
+ color: var(--n-gax-stage-muted);
318
+ background: transparent;
319
+ border: 0;
320
+ border-radius: 999px;
321
+ cursor: pointer;
322
+ font-size: 0.8rem;
323
+ font-weight: 700;
324
+ }
325
+
326
+ .gax-stress .gax-segment button {
327
+ color: var(--n-gax-ink);
328
+ }
329
+
330
+ .gax-stress .gax-segment {
331
+ background: var(--n-gax-panel-strong);
332
+ }
333
+
334
+ .gax-stress .gax-segment button.is-active {
335
+ color: var(--n-gax-on-solid);
336
+ background: var(--n-gax-cyan-dark);
337
+ }
338
+
339
+ .gax-segment button.is-active {
340
+ color: var(--n-gax-on-accent);
341
+ background: var(--n-gax-cyan);
342
+ }
343
+
344
+ .gax-viewports {
345
+ display: grid;
346
+ grid-template-columns: repeat(2, minmax(0, 1fr));
347
+ gap: 0.75rem;
348
+ position: relative;
349
+ margin-top: 0.8rem;
350
+ min-height: 22rem;
351
+ overflow: auto;
352
+ }
353
+
354
+ .gax-viewport {
355
+ min-width: 0;
356
+ border: 1px solid var(--n-gax-line);
357
+ background: var(--n-gax-void-soft);
358
+ }
359
+
360
+ .gax-viewport figcaption {
361
+ display: flex;
362
+ gap: 0.5rem;
363
+ align-items: center;
364
+ padding: 0.6rem 0.75rem;
365
+ color: var(--n-gax-stage-muted);
366
+ font-size: 0.8rem;
367
+ font-weight: 700;
368
+ letter-spacing: 0.08em;
369
+ text-transform: uppercase;
370
+ }
371
+
372
+ .gax-viewport figcaption span {
373
+ width: 0.5rem;
374
+ height: 0.5rem;
375
+ background: var(--n-gax-cyan);
376
+ border-radius: 50%;
377
+ box-shadow: 0 0 0.7rem var(--n-gax-cyan);
378
+ }
379
+
380
+ .gax-simulated figcaption span {
381
+ background: var(--n-gax-amber);
382
+ box-shadow: 0 0 0.7rem var(--n-gax-amber);
383
+ }
384
+
385
+ .gax-canvas-wrap {
386
+ position: relative;
387
+ min-height: 18rem;
388
+ overflow: auto;
389
+ display: grid;
390
+ place-items: center;
391
+ }
392
+
393
+ .gax canvas {
394
+ display: block;
395
+ max-width: none;
396
+ width: calc(100% * var(--canvas-zoom, 1));
397
+ height: auto;
398
+ image-rendering: auto;
399
+ cursor: crosshair;
400
+ }
401
+
402
+ .gax[data-zoom="2"] {
403
+ --canvas-zoom: 2;
404
+ }
405
+
406
+ .gax[data-zoom="4"] {
407
+ --canvas-zoom: 4;
408
+ }
409
+
410
+ .gax-marker {
411
+ position: absolute;
412
+ left: var(--marker-x);
413
+ top: var(--marker-y);
414
+ display: grid;
415
+ width: 1.9rem;
416
+ height: 1.9rem;
417
+ place-items: center;
418
+ color: var(--n-gax-on-accent);
419
+ background: var(--n-gax-amber);
420
+ border: 2px solid var(--n-gax-white);
421
+ border-radius: 50% 50% 50% 0;
422
+ transform: translate(-50%, -100%) rotate(-45deg);
423
+ font-weight: 900;
424
+ pointer-events: none;
425
+ }
426
+
427
+ .gax-marker::first-letter {
428
+ transform: rotate(45deg);
429
+ }
430
+
431
+ .gax-marker-b {
432
+ background: var(--n-gax-coral);
433
+ }
434
+
435
+ .gax-empty {
436
+ position: absolute;
437
+ inset: 4rem 1rem 1rem;
438
+ display: grid;
439
+ place-items: center;
440
+ padding: 2rem;
441
+ color: var(--n-gax-stage-muted);
442
+ background: var(--n-gax-void-soft);
443
+ border: 1px dashed var(--n-gax-line);
444
+ text-align: center;
445
+ }
446
+
447
+ .gax[data-ready="true"] .gax-empty {
448
+ display: none;
449
+ }
450
+
451
+ .gax[data-compare="split"] .gax-viewports {
452
+ grid-template-columns: 1fr;
453
+ }
454
+
455
+ .gax[data-compare="split"] .gax-viewport {
456
+ grid-area: 1 / 1;
457
+ }
458
+
459
+ .gax[data-compare="split"] .gax-simulated {
460
+ clip-path: inset(0 calc(100% - var(--split)) 0 0);
461
+ z-index: 2;
462
+ }
463
+
464
+ .gax[data-compare="press"] .gax-viewports {
465
+ grid-template-columns: 1fr;
466
+ }
467
+
468
+ .gax[data-compare="press"] .gax-original {
469
+ display: none;
470
+ }
471
+
472
+ .gax[data-compare="press"][data-hold="true"] .gax-original {
473
+ display: block;
474
+ }
475
+
476
+ .gax[data-compare="press"][data-hold="true"] .gax-simulated {
477
+ display: none;
478
+ }
479
+
480
+ .gax-compare-actions {
481
+ margin-top: 0.75rem;
482
+ }
483
+
484
+ .gax-split-control {
485
+ display: none;
486
+ gap: 0.5rem;
487
+ align-items: center;
488
+ color: var(--n-gax-stage-muted);
489
+ font-size: 0.8rem;
490
+ }
491
+
492
+ .gax[data-compare="split"] .gax-split-control {
493
+ display: flex;
494
+ }
495
+
496
+ .gax-hold {
497
+ display: none;
498
+ padding: 0.6rem 1rem;
499
+ color: var(--n-gax-on-accent);
500
+ background: var(--n-gax-amber);
501
+ border: 0;
502
+ border-radius: 999px;
503
+ font-weight: 800;
504
+ }
505
+
506
+ .gax[data-compare="press"] .gax-hold {
507
+ display: inline-flex;
508
+ }
509
+
510
+ .gax-stress-line {
511
+ display: grid;
512
+ grid-template-columns: auto minmax(8rem, 1fr) auto minmax(15rem, 1fr);
513
+ gap: 0.85rem;
514
+ align-items: center;
515
+ }
516
+
517
+ .gax-stress-line > label:first-child {
518
+ color: var(--n-gax-muted);
519
+ font-weight: 700;
520
+ }
521
+
522
+ .gax input[type="range"] {
523
+ accent-color: var(--n-gax-cyan-dark);
524
+ min-height: 44px;
525
+ }
526
+
527
+ .gax-toggle {
528
+ display: grid;
529
+ grid-template-columns: auto auto 1fr;
530
+ gap: 0.65rem;
531
+ align-items: center;
532
+ cursor: pointer;
533
+ }
534
+
535
+ .gax-toggle > span:first-of-type {
536
+ width: 2.5rem;
537
+ height: 1.4rem;
538
+ padding: 0.2rem;
539
+ background: var(--n-gax-panel-strong);
540
+ border: 1px solid var(--n-gax-line);
541
+ border-radius: 999px;
542
+ }
543
+
544
+ .gax-toggle > span:first-of-type::after {
545
+ content: "";
546
+ display: block;
547
+ width: 0.9rem;
548
+ height: 0.9rem;
549
+ background: var(--n-gax-muted);
550
+ border-radius: 50%;
551
+ transition: transform 180ms ease, background 180ms ease;
552
+ }
553
+
554
+ .gax-toggle input {
555
+ position: absolute;
556
+ opacity: 0;
557
+ }
558
+
559
+ .gax-toggle input:checked + span::after {
560
+ background: var(--n-gax-cyan-dark);
561
+ transform: translateX(1rem);
562
+ }
563
+
564
+ .gax-toggle strong,
565
+ .gax-toggle small {
566
+ display: block;
567
+ }
568
+
569
+ .gax-toggle small {
570
+ margin-top: 0.15rem;
571
+ color: var(--n-gax-muted);
572
+ font-size: 0.8rem;
573
+ }
574
+
575
+ .gax-sampler {
576
+ background: linear-gradient(145deg, var(--n-gax-panel), var(--n-gax-paper));
577
+ border-top: 1px solid var(--n-gax-line);
578
+ border-bottom: 1px solid var(--n-gax-line);
579
+ }
580
+
581
+ .gax-sampler > header {
582
+ display: flex;
583
+ justify-content: space-between;
584
+ gap: 1rem;
585
+ align-items: start;
586
+ }
587
+
588
+ .gax-sampler h2,
589
+ .gax-review h2 {
590
+ font-size: 1.1rem;
591
+ letter-spacing: 0.04em;
592
+ text-transform: uppercase;
593
+ }
594
+
595
+ .gax-sampler header p {
596
+ margin-top: 0.35rem;
597
+ color: var(--n-gax-muted);
598
+ }
599
+
600
+ .gax-classification {
601
+ padding: 0.35rem 0.6rem;
602
+ color: var(--n-gax-on-solid);
603
+ background: var(--n-gax-coral-dark);
604
+ border-radius: 0.2rem;
605
+ font-size: 0.75rem;
606
+ font-weight: 800;
607
+ letter-spacing: 0.08em;
608
+ text-transform: uppercase;
609
+ }
610
+
611
+ .gax-sample-strip {
612
+ display: grid;
613
+ grid-template-columns: minmax(0, 1fr) 6rem minmax(0, 1fr);
614
+ gap: 0.75rem;
615
+ align-items: center;
616
+ margin-top: 1rem;
617
+ }
618
+
619
+ .gax-sample-unit {
620
+ display: grid;
621
+ grid-template-columns: auto minmax(9rem, 1fr) auto;
622
+ gap: 0.75rem;
623
+ align-items: center;
624
+ }
625
+
626
+ .gax-sample-unit > button {
627
+ display: flex;
628
+ flex-direction: column;
629
+ align-items: center;
630
+ gap: 0.35rem;
631
+ min-width: 5rem;
632
+ padding: 0.5rem;
633
+ color: var(--n-gax-ink);
634
+ background: transparent;
635
+ border: 1px solid var(--n-gax-line);
636
+ border-radius: 0.8rem 0.2rem;
637
+ font-weight: 800;
638
+ }
639
+
640
+ .gax-sample-unit > button.is-active {
641
+ box-shadow: 0 0 0 3px var(--n-gax-cyan-dark);
642
+ }
643
+
644
+ .gax-swatch {
645
+ width: 2.5rem;
646
+ height: 2.5rem;
647
+ background: var(--n-gax-panel-strong);
648
+ border: 1px solid var(--n-gax-line);
649
+ border-radius: 50%;
650
+ }
651
+
652
+ .gax-sample-copy {
653
+ display: grid;
654
+ gap: 0.35rem;
655
+ min-width: 0;
656
+ }
657
+
658
+ .gax-sample-copy label {
659
+ color: var(--n-gax-muted);
660
+ font-size: 0.8rem;
661
+ font-weight: 700;
662
+ }
663
+
664
+ .gax-sample-copy input[type="text"] {
665
+ min-width: 0;
666
+ padding: 0.65rem 0.75rem;
667
+ color: var(--n-gax-ink);
668
+ background: var(--n-gax-paper);
669
+ border: 1px solid var(--n-gax-line);
670
+ border-radius: 0.3rem;
671
+ }
672
+
673
+ .gax-color-input {
674
+ position: absolute;
675
+ width: 1px;
676
+ height: 1px;
677
+ overflow: hidden;
678
+ clip-path: inset(50%);
679
+ }
680
+
681
+ .gax-sample-unit input[type="color"] {
682
+ width: 2.75rem;
683
+ height: 2.75rem;
684
+ padding: 0.2rem;
685
+ background: var(--n-gax-paper);
686
+ border: 1px solid var(--n-gax-line);
687
+ border-radius: 50%;
688
+ }
689
+
690
+ .gax-sample-copy code {
691
+ color: var(--n-gax-muted);
692
+ font-size: 0.8rem;
693
+ }
694
+
695
+ .gax-link-beam {
696
+ height: 2px;
697
+ background: var(--n-gax-line);
698
+ }
699
+
700
+ .gax-link-beam span {
701
+ display: block;
702
+ width: 1rem;
703
+ height: 1rem;
704
+ margin: -0.45rem auto 0;
705
+ background: var(--n-gax-amber);
706
+ border-radius: 50%;
707
+ box-shadow: 0 0 1rem var(--n-gax-amber);
708
+ }
709
+
710
+ .gax-instruments {
711
+ display: grid;
712
+ grid-template-columns: repeat(4, 1fr);
713
+ gap: 1px;
714
+ margin-top: 1.2rem;
715
+ background: var(--n-gax-line);
716
+ border: 1px solid var(--n-gax-line);
717
+ }
718
+
719
+ .gax-instruments > div {
720
+ min-width: 0;
721
+ padding: 0.9rem;
722
+ background: var(--n-gax-void);
723
+ color: var(--n-gax-stage-ink);
724
+ }
725
+
726
+ .gax-instruments span,
727
+ .gax-instruments small {
728
+ display: block;
729
+ color: var(--n-gax-stage-muted);
730
+ font-size: 0.75rem;
731
+ text-transform: uppercase;
732
+ }
733
+
734
+ .gax-instruments strong {
735
+ display: block;
736
+ min-height: 2.8rem;
737
+ padding: 0.25rem 0;
738
+ font-size: clamp(1.45rem, 4vw, 2.4rem);
739
+ line-height: 1.15;
740
+ font-variant-numeric: tabular-nums;
741
+ overflow-wrap: anywhere;
742
+ }
743
+
744
+ .gax-diagnostic strong[data-level="strong"] {
745
+ color: var(--n-gax-strong);
746
+ }
747
+
748
+ .gax-diagnostic strong[data-level="watch"] {
749
+ color: var(--n-gax-amber);
750
+ }
751
+
752
+ .gax-diagnostic strong[data-level="review"] {
753
+ color: var(--n-gax-coral);
754
+ }
755
+
756
+ .gax-diagnostic strong[data-level="pending"] {
757
+ color: var(--n-gax-stage-muted);
758
+ }
759
+
760
+ .gax-method-notes {
761
+ display: grid;
762
+ grid-template-columns: 1fr 1fr;
763
+ gap: 1rem;
764
+ margin-top: 1rem;
765
+ }
766
+
767
+ .gax-method-notes p {
768
+ color: var(--n-gax-muted);
769
+ line-height: 1.55;
770
+ }
771
+
772
+ .gax-method-notes strong {
773
+ margin-right: 0.5rem;
774
+ color: var(--n-gax-ink);
775
+ }
776
+
777
+ .gax-review {
778
+ display: grid;
779
+ grid-template-columns: minmax(15rem, 0.8fr) minmax(18rem, 1.2fr);
780
+ gap: 1.25rem;
781
+ }
782
+
783
+ .gax-review-rail {
784
+ padding: 1.25rem;
785
+ color: var(--n-gax-stage-ink);
786
+ background: var(--n-gax-void);
787
+ border-left: 0.4rem solid var(--n-gax-cyan);
788
+ }
789
+
790
+ .gax-review-rail ol {
791
+ margin: 1rem 0 0;
792
+ padding-left: 1.4rem;
793
+ }
794
+
795
+ .gax-review-rail li {
796
+ margin-bottom: 0.65rem;
797
+ color: var(--n-gax-stage-muted);
798
+ line-height: 1.45;
799
+ }
800
+
801
+ .gax-review-rail li::marker {
802
+ color: var(--n-gax-amber);
803
+ font-weight: 900;
804
+ }
805
+
806
+ .gax-findings-panel {
807
+ padding: 1.25rem;
808
+ border: 1px solid var(--n-gax-line);
809
+ }
810
+
811
+ .gax-findings-panel > label {
812
+ display: block;
813
+ margin-bottom: 0.6rem;
814
+ font-weight: 800;
815
+ }
816
+
817
+ .gax-finding-entry {
818
+ display: grid;
819
+ grid-template-columns: 1fr auto;
820
+ gap: 0.5rem;
821
+ }
822
+
823
+ .gax-finding-entry input {
824
+ min-width: 0;
825
+ padding: 0.7rem;
826
+ color: var(--n-gax-ink);
827
+ background: var(--n-gax-paper);
828
+ border: 1px solid var(--n-gax-line);
829
+ }
830
+
831
+ .gax-finding-entry button,
832
+ .gax-action-buttons button {
833
+ padding: 0.65rem 0.9rem;
834
+ color: var(--n-gax-on-solid);
835
+ background: var(--n-gax-cyan-dark);
836
+ border: 1px solid var(--n-gax-cyan-dark);
837
+ border-radius: 0.3rem;
838
+ font-weight: 800;
839
+ }
840
+
841
+ .gax-findings-panel > p {
842
+ margin-top: 0.8rem;
843
+ color: var(--n-gax-muted);
844
+ }
845
+
846
+ .gax-findings-panel ul {
847
+ margin: 0.8rem 0 0;
848
+ padding-left: 1.2rem;
849
+ }
850
+
851
+ .gax-findings-panel li {
852
+ margin-bottom: 0.5rem;
853
+ line-height: 1.45;
854
+ }
855
+
856
+ .gax-actions {
857
+ display: flex;
858
+ justify-content: space-between;
859
+ gap: 1rem;
860
+ align-items: end;
861
+ padding: 1.25rem;
862
+ color: var(--n-gax-stage-ink);
863
+ background: var(--n-gax-void);
864
+ }
865
+
866
+ .gax-actions p {
867
+ max-width: 70ch;
868
+ color: var(--n-gax-stage-muted);
869
+ line-height: 1.45;
870
+ }
871
+
872
+ .gax-actions p + p {
873
+ margin-top: 0.35rem;
874
+ }
875
+
876
+ .gax-action-buttons {
877
+ display: flex;
878
+ flex-wrap: wrap;
879
+ gap: 0.5rem;
880
+ justify-content: flex-end;
881
+ }
882
+
883
+ .gax-action-buttons button:last-child {
884
+ color: var(--n-gax-stage-ink);
885
+ background: transparent;
886
+ border-color: var(--n-gax-line);
887
+ }
888
+
889
+ .gax-action-buttons button:disabled {
890
+ color: var(--n-gax-stage-muted);
891
+ background: transparent;
892
+ border-color: var(--n-gax-line);
893
+ cursor: not-allowed;
894
+ opacity: 0.65;
895
+ }
896
+
897
+ @media (max-width: 900px) {
898
+ .gax-intro,
899
+ .gax-upload,
900
+ .gax-review,
901
+ .gax-stress-line {
902
+ grid-template-columns: 1fr;
903
+ }
904
+
905
+ .gax-signal {
906
+ display: none;
907
+ }
908
+
909
+ .gax-viewports,
910
+ .gax-instruments {
911
+ grid-template-columns: 1fr;
912
+ }
913
+
914
+ .gax-sample-strip {
915
+ grid-template-columns: 1fr;
916
+ }
917
+
918
+ .gax-link-beam {
919
+ width: 2px;
920
+ height: 2rem;
921
+ margin: 0 auto;
922
+ }
923
+
924
+ .gax-link-beam span {
925
+ margin: 0 0 0 -0.45rem;
926
+ }
927
+ }
928
+
929
+ @media (max-width: 620px) {
930
+ .gax {
931
+ border-radius: 1rem 0.25rem;
932
+ }
933
+
934
+ .gax-stage,
935
+ .gax-upload {
936
+ margin-right: 0.65rem;
937
+ margin-left: 0.65rem;
938
+ }
939
+
940
+ .gax-optics,
941
+ .gax-stress,
942
+ .gax-sampler,
943
+ .gax-review,
944
+ .gax-actions {
945
+ padding: 0.9rem;
946
+ }
947
+
948
+ .gax-stage-toolbar,
949
+ .gax-compare-actions,
950
+ .gax-sampler > header,
951
+ .gax-actions,
952
+ .gax-method-notes {
953
+ display: grid;
954
+ grid-template-columns: 1fr;
955
+ }
956
+
957
+ .gax-segment {
958
+ width: 100%;
959
+ overflow-x: auto;
960
+ }
961
+
962
+ .gax-sample-unit {
963
+ grid-template-columns: auto 1fr auto;
964
+ }
965
+
966
+ .gax-action-buttons {
967
+ justify-content: stretch;
968
+ }
969
+
970
+ .gax-action-buttons button {
971
+ flex: 1 1 100%;
972
+ }
973
+ }
974
+
975
+ @media (prefers-reduced-motion: reduce) {
976
+ .gax *,
977
+ .gax *::before,
978
+ .gax *::after {
979
+ scroll-behavior: auto;
980
+ transition-duration: 0s;
981
+ }
982
+ }