@screenbook/ui 1.1.0 → 1.1.2

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 (37) hide show
  1. package/README.md +30 -0
  2. package/dist/client/_astro/coverage.BzPU-EGZ.css +1 -0
  3. package/dist/server/entry.mjs +1 -1
  4. package/dist/server/{manifest_smcahUO6.mjs → manifest_BGl49hHW.mjs} +1 -1
  5. package/dist/server/pages/coverage.astro.mjs +1 -1
  6. package/dist/server/pages/editor.astro.mjs +1 -1
  7. package/dist/server/pages/graph.astro.mjs +1 -1
  8. package/dist/server/pages/impact.astro.mjs +1 -1
  9. package/dist/server/pages/index.astro.mjs +1 -1
  10. package/dist/server/pages/screen/_id_.astro.mjs +1 -1
  11. package/package.json +5 -1
  12. package/.astro/content-assets.mjs +0 -1
  13. package/.astro/content-modules.mjs +0 -1
  14. package/.astro/content.d.ts +0 -199
  15. package/.astro/types.d.ts +0 -2
  16. package/.prettierrc +0 -15
  17. package/CHANGELOG.md +0 -77
  18. package/astro.config.mjs +0 -20
  19. package/dist/client/_astro/coverage.DLKSOM4m.css +0 -1
  20. package/public/logo.svg +0 -5
  21. package/src/components/MockFormEditor.tsx +0 -1280
  22. package/src/components/MockPreview.astro +0 -811
  23. package/src/layouts/Layout.astro +0 -77
  24. package/src/pages/api/save-mock.ts +0 -182
  25. package/src/pages/coverage.astro +0 -399
  26. package/src/pages/editor.astro +0 -33
  27. package/src/pages/graph.astro +0 -368
  28. package/src/pages/impact.astro +0 -462
  29. package/src/pages/index.astro +0 -176
  30. package/src/pages/screen/[id].astro +0 -195
  31. package/src/styles/global.css +0 -904
  32. package/src/styles/mock-editor.css +0 -1351
  33. package/src/utils/impactAnalysis.ts +0 -304
  34. package/src/utils/loadCoverage.ts +0 -30
  35. package/src/utils/loadScreens.ts +0 -18
  36. package/tsconfig.json +0 -10
  37. /package/dist/server/chunks/{loadScreens_CkCqdbH2.mjs → loadScreens_B8bVK3q5.mjs} +0 -0
@@ -1,904 +0,0 @@
1
- @import "tailwindcss";
2
-
3
- /* Screenbook - Documentation Style Design System */
4
- @theme {
5
- /* Color Palette - Neutral & Calm */
6
- --color-bg: #111111;
7
- --color-bg-soft: #1a1a1a;
8
- --color-bg-muted: #222222;
9
-
10
- --color-surface: #1a1a1a;
11
- --color-surface-hover: #252525;
12
-
13
- --color-border: #2e2e2e;
14
- --color-border-hover: #3a3a3a;
15
-
16
- --color-text: #eeeeee;
17
- --color-text-secondary: #a0a0a0;
18
- --color-text-muted: #8a8a8a;
19
-
20
- /* Accent - Subtle Teal */
21
- --color-accent: #5eead4;
22
- --color-accent-hover: #99f6e4;
23
- --color-accent-bg: rgba(94, 234, 212, 0.1);
24
-
25
- /* Semantic */
26
- --color-success: #4ade80;
27
- --color-warning: #fbbf24;
28
- --color-error: #f87171;
29
-
30
- /* Spacing */
31
- --spacing-page-x: max(24px, calc((100vw - 1200px) / 2));
32
- --spacing-page-y: 48px;
33
-
34
- /* Typography */
35
- --text-xs: 0.75rem;
36
- --text-sm: 0.875rem;
37
- --text-base: 1rem;
38
- --text-lg: 1.125rem;
39
- --text-xl: 1.25rem;
40
- --text-2xl: 1.5rem;
41
- --text-3xl: 2rem;
42
-
43
- /* Radius */
44
- --radius-sm: 6px;
45
- --radius-md: 8px;
46
- --radius-lg: 12px;
47
-
48
- /* Shadows */
49
- --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.2);
50
- --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.15);
51
- }
52
-
53
- /* Base */
54
- * {
55
- margin: 0;
56
- padding: 0;
57
- box-sizing: border-box;
58
- }
59
-
60
- html {
61
- -webkit-font-smoothing: antialiased;
62
- scroll-behavior: smooth;
63
- }
64
-
65
- body {
66
- font-family:
67
- system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
68
- background: var(--color-bg);
69
- color: var(--color-text);
70
- font-size: var(--text-base);
71
- line-height: 1.6;
72
- }
73
-
74
- /* Typography */
75
- h1,
76
- h2,
77
- h3,
78
- h4 {
79
- font-weight: 600;
80
- line-height: 1.3;
81
- color: var(--color-text);
82
- }
83
-
84
- h1 {
85
- font-size: var(--text-3xl);
86
- }
87
- h2 {
88
- font-size: var(--text-2xl);
89
- }
90
- h3 {
91
- font-size: var(--text-xl);
92
- }
93
- h4 {
94
- font-size: var(--text-lg);
95
- }
96
-
97
- p {
98
- color: var(--color-text-secondary);
99
- }
100
-
101
- a {
102
- color: var(--color-accent);
103
- text-decoration: none;
104
- }
105
-
106
- a:hover {
107
- color: var(--color-accent-hover);
108
- }
109
-
110
- code {
111
- font-family: ui-monospace, "SF Mono", Menlo, Monaco, monospace;
112
- font-size: 0.9em;
113
- background: var(--color-bg-muted);
114
- padding: 0.2em 0.4em;
115
- border-radius: var(--radius-sm);
116
- }
117
-
118
- /* Selection */
119
- ::selection {
120
- background: rgba(94, 234, 212, 0.2);
121
- }
122
-
123
- /* Scrollbar */
124
- ::-webkit-scrollbar {
125
- width: 8px;
126
- height: 8px;
127
- }
128
-
129
- ::-webkit-scrollbar-track {
130
- background: transparent;
131
- }
132
-
133
- ::-webkit-scrollbar-thumb {
134
- background: var(--color-border);
135
- border-radius: 4px;
136
- }
137
-
138
- ::-webkit-scrollbar-thumb:hover {
139
- background: var(--color-border-hover);
140
- }
141
-
142
- /* Layout */
143
- .container {
144
- max-width: 1200px;
145
- margin: 0 auto;
146
- padding: 0 24px;
147
- }
148
-
149
- /* Header */
150
- .header {
151
- border-bottom: 1px solid var(--color-border);
152
- padding: 16px 0;
153
- background: var(--color-bg);
154
- position: sticky;
155
- top: 0;
156
- z-index: 100;
157
- }
158
-
159
- .header-content {
160
- display: flex;
161
- align-items: center;
162
- justify-content: space-between;
163
- gap: 24px;
164
- }
165
-
166
- .logo {
167
- display: flex;
168
- align-items: center;
169
- gap: 10px;
170
- font-weight: 600;
171
- font-size: var(--text-lg);
172
- color: var(--color-text);
173
- }
174
-
175
- .logo:hover {
176
- color: var(--color-text);
177
- }
178
-
179
- .logo-icon {
180
- width: 28px;
181
- height: 28px;
182
- color: var(--color-accent);
183
- }
184
-
185
- /* Navigation */
186
- .nav {
187
- display: flex;
188
- align-items: center;
189
- gap: 4px;
190
- }
191
-
192
- .nav-link {
193
- display: flex;
194
- align-items: center;
195
- gap: 6px;
196
- padding: 8px 14px;
197
- font-size: var(--text-sm);
198
- font-weight: 500;
199
- color: var(--color-text-secondary);
200
- border-radius: var(--radius-md);
201
- transition: all 0.15s ease;
202
- }
203
-
204
- .nav-link:hover {
205
- color: var(--color-text);
206
- background: var(--color-surface-hover);
207
- }
208
-
209
- .nav-link.active {
210
- color: var(--color-accent);
211
- background: var(--color-accent-bg);
212
- }
213
-
214
- .nav-link svg {
215
- width: 16px;
216
- height: 16px;
217
- }
218
-
219
- /* Page Header */
220
- .page-header {
221
- padding: 48px 0 32px;
222
- }
223
-
224
- .page-title {
225
- margin-bottom: 8px;
226
- }
227
-
228
- .page-description {
229
- font-size: var(--text-lg);
230
- color: var(--color-text-muted);
231
- max-width: 600px;
232
- }
233
-
234
- /* Search */
235
- .search-wrapper {
236
- position: relative;
237
- max-width: 400px;
238
- margin-bottom: 32px;
239
- }
240
-
241
- .search-icon {
242
- position: absolute;
243
- left: 14px;
244
- top: 50%;
245
- transform: translateY(-50%);
246
- width: 18px;
247
- height: 18px;
248
- color: var(--color-text-muted);
249
- pointer-events: none;
250
- }
251
-
252
- .search-input {
253
- width: 100%;
254
- padding: 10px 14px 10px 42px;
255
- font-size: var(--text-sm);
256
- color: var(--color-text);
257
- background: var(--color-surface);
258
- border: 1px solid var(--color-border);
259
- border-radius: var(--radius-md);
260
- outline: none;
261
- transition: border-color 0.15s ease;
262
- }
263
-
264
- .search-input::placeholder {
265
- color: var(--color-text-muted);
266
- }
267
-
268
- .search-input:focus {
269
- border-color: var(--color-accent);
270
- }
271
-
272
- /* Tags */
273
- .tags {
274
- display: flex;
275
- flex-wrap: wrap;
276
- gap: 8px;
277
- margin-bottom: 32px;
278
- }
279
-
280
- .tag {
281
- display: inline-flex;
282
- align-items: center;
283
- padding: 5px 12px;
284
- font-size: var(--text-xs);
285
- font-weight: 500;
286
- color: var(--color-text-secondary);
287
- background: var(--color-surface);
288
- border: 1px solid var(--color-border);
289
- border-radius: 9999px;
290
- cursor: pointer;
291
- transition: all 0.15s ease;
292
- }
293
-
294
- .tag:hover {
295
- border-color: var(--color-border-hover);
296
- color: var(--color-text);
297
- }
298
-
299
- .tag.active {
300
- background: var(--color-accent-bg);
301
- border-color: var(--color-accent);
302
- color: var(--color-accent);
303
- }
304
-
305
- /* Card */
306
- .card {
307
- background: var(--color-surface);
308
- border: 1px solid var(--color-border);
309
- border-radius: var(--radius-lg);
310
- padding: 20px;
311
- transition: border-color 0.15s ease;
312
- }
313
-
314
- .card-link {
315
- display: block;
316
- color: inherit;
317
- }
318
-
319
- .card-link:hover {
320
- color: inherit;
321
- }
322
-
323
- .card-link:hover .card {
324
- border-color: var(--color-border-hover);
325
- }
326
-
327
- .card-link:hover .card-title {
328
- color: var(--color-accent);
329
- }
330
-
331
- .card-title {
332
- font-size: var(--text-base);
333
- font-weight: 600;
334
- margin-bottom: 4px;
335
- transition: color 0.15s ease;
336
- }
337
-
338
- .card-route {
339
- font-family: ui-monospace, monospace;
340
- font-size: var(--text-sm);
341
- color: var(--color-text-muted);
342
- margin-bottom: 12px;
343
- }
344
-
345
- .card-meta {
346
- display: flex;
347
- flex-wrap: wrap;
348
- gap: 12px;
349
- font-size: var(--text-xs);
350
- color: var(--color-text-muted);
351
- margin-bottom: 12px;
352
- }
353
-
354
- .card-meta-item {
355
- display: flex;
356
- align-items: center;
357
- gap: 4px;
358
- }
359
-
360
- .card-meta-item svg {
361
- width: 14px;
362
- height: 14px;
363
- }
364
-
365
- .card-tags {
366
- display: flex;
367
- flex-wrap: wrap;
368
- gap: 6px;
369
- }
370
-
371
- .card-tag {
372
- font-size: var(--text-xs);
373
- padding: 3px 8px;
374
- background: var(--color-bg-muted);
375
- border-radius: 4px;
376
- color: var(--color-text-secondary);
377
- }
378
-
379
- /* Screen Grid */
380
- .screen-grid {
381
- display: grid;
382
- grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
383
- gap: 16px;
384
- }
385
-
386
- /* Section */
387
- .section {
388
- margin-bottom: 32px;
389
- }
390
-
391
- .section-title {
392
- font-size: var(--text-sm);
393
- font-weight: 600;
394
- color: var(--color-text-muted);
395
- text-transform: uppercase;
396
- letter-spacing: 0.05em;
397
- margin-bottom: 16px;
398
- padding-bottom: 8px;
399
- border-bottom: 1px solid var(--color-border);
400
- }
401
-
402
- /* Detail Page */
403
- .detail-header {
404
- padding: 32px 0;
405
- border-bottom: 1px solid var(--color-border);
406
- margin-bottom: 32px;
407
- }
408
-
409
- .detail-title {
410
- font-size: var(--text-2xl);
411
- margin-bottom: 8px;
412
- }
413
-
414
- .detail-route {
415
- display: inline-flex;
416
- align-items: center;
417
- gap: 8px;
418
- font-family: ui-monospace, monospace;
419
- font-size: var(--text-sm);
420
- color: var(--color-accent);
421
- background: var(--color-accent-bg);
422
- padding: 6px 12px;
423
- border-radius: var(--radius-md);
424
- }
425
-
426
- .detail-route svg {
427
- width: 16px;
428
- height: 16px;
429
- }
430
-
431
- .detail-content {
432
- display: grid;
433
- grid-template-columns: 1fr 320px;
434
- gap: 48px;
435
- }
436
-
437
- @media (max-width: 900px) {
438
- .detail-content {
439
- grid-template-columns: 1fr;
440
- gap: 32px;
441
- }
442
- }
443
-
444
- /* Info List */
445
- .info-list {
446
- display: flex;
447
- flex-direction: column;
448
- gap: 16px;
449
- }
450
-
451
- .info-item {
452
- display: flex;
453
- gap: 16px;
454
- }
455
-
456
- .info-label {
457
- width: 100px;
458
- flex-shrink: 0;
459
- font-size: var(--text-sm);
460
- color: var(--color-text-muted);
461
- }
462
-
463
- .info-value {
464
- font-size: var(--text-sm);
465
- color: var(--color-text);
466
- }
467
-
468
- /* Dependency List */
469
- .dep-list {
470
- display: flex;
471
- flex-direction: column;
472
- gap: 8px;
473
- }
474
-
475
- .dep-item {
476
- display: flex;
477
- align-items: center;
478
- gap: 10px;
479
- padding: 10px 12px;
480
- background: var(--color-bg-muted);
481
- border-radius: var(--radius-md);
482
- font-family: ui-monospace, monospace;
483
- font-size: var(--text-sm);
484
- }
485
-
486
- .dep-item svg {
487
- width: 16px;
488
- height: 16px;
489
- color: var(--color-text-muted);
490
- }
491
-
492
- .dep-item-link {
493
- display: flex;
494
- justify-content: space-between;
495
- align-items: center;
496
- text-decoration: none;
497
- color: inherit;
498
- transition: all 0.15s ease;
499
- }
500
-
501
- .dep-item-link:hover {
502
- background: var(--color-surface-hover);
503
- color: inherit;
504
- }
505
-
506
- .dep-item-main {
507
- display: flex;
508
- align-items: center;
509
- gap: 10px;
510
- }
511
-
512
- .dep-item-meta {
513
- display: flex;
514
- align-items: center;
515
- gap: 8px;
516
- }
517
-
518
- .dep-count {
519
- font-size: var(--text-xs);
520
- color: var(--color-text-muted);
521
- padding: 2px 8px;
522
- background: var(--color-bg);
523
- border-radius: var(--radius-sm);
524
- }
525
-
526
- .dep-arrow {
527
- width: 14px;
528
- height: 14px;
529
- color: var(--color-accent);
530
- opacity: 0;
531
- transition: opacity 0.15s ease;
532
- }
533
-
534
- .dep-item-link:hover .dep-arrow {
535
- opacity: 1;
536
- }
537
-
538
- /* Screen Link List */
539
- .screen-link-list {
540
- display: flex;
541
- flex-direction: column;
542
- gap: 8px;
543
- }
544
-
545
- .screen-link {
546
- display: flex;
547
- align-items: center;
548
- justify-content: space-between;
549
- padding: 12px;
550
- background: var(--color-bg-muted);
551
- border-radius: var(--radius-md);
552
- color: var(--color-text);
553
- transition: background 0.15s ease;
554
- }
555
-
556
- .screen-link:hover {
557
- background: var(--color-surface-hover);
558
- color: var(--color-text);
559
- }
560
-
561
- .screen-link-info {
562
- display: flex;
563
- flex-direction: column;
564
- gap: 2px;
565
- }
566
-
567
- .screen-link-title {
568
- font-size: var(--text-sm);
569
- font-weight: 500;
570
- }
571
-
572
- .screen-link-id {
573
- font-size: var(--text-xs);
574
- font-family: ui-monospace, monospace;
575
- color: var(--color-text-muted);
576
- }
577
-
578
- .screen-link-arrow {
579
- width: 16px;
580
- height: 16px;
581
- color: var(--color-text-muted);
582
- }
583
-
584
- /* Sidebar Card */
585
- .sidebar-card {
586
- background: var(--color-surface);
587
- border: 1px solid var(--color-border);
588
- border-radius: var(--radius-lg);
589
- padding: 20px;
590
- margin-bottom: 16px;
591
- }
592
-
593
- .sidebar-card-title {
594
- font-size: var(--text-sm);
595
- font-weight: 600;
596
- color: var(--color-text-muted);
597
- margin-bottom: 16px;
598
- display: flex;
599
- align-items: center;
600
- gap: 8px;
601
- }
602
-
603
- .sidebar-card-title svg {
604
- width: 16px;
605
- height: 16px;
606
- }
607
-
608
- /* Graph */
609
- .graph-container {
610
- background: var(--color-surface);
611
- border: 1px solid var(--color-border);
612
- border-radius: var(--radius-lg);
613
- padding: 32px;
614
- min-height: 400px;
615
- display: flex;
616
- justify-content: center;
617
- align-items: center;
618
- }
619
-
620
- .graph-legend {
621
- display: flex;
622
- justify-content: center;
623
- gap: 32px;
624
- margin-top: 24px;
625
- font-size: var(--text-sm);
626
- color: var(--color-text-muted);
627
- }
628
-
629
- .graph-legend-item {
630
- display: flex;
631
- align-items: center;
632
- gap: 8px;
633
- }
634
-
635
- .legend-node {
636
- width: 32px;
637
- height: 20px;
638
- background: var(--color-bg-muted);
639
- border: 1px solid var(--color-border-hover);
640
- border-radius: 4px;
641
- }
642
-
643
- .legend-edge {
644
- width: 32px;
645
- height: 2px;
646
- background: var(--color-accent);
647
- }
648
-
649
- /* Empty State */
650
- .empty-state {
651
- text-align: center;
652
- padding: 64px 24px;
653
- max-width: 400px;
654
- margin: 0 auto;
655
- }
656
-
657
- .empty-state-icon {
658
- width: 48px;
659
- height: 48px;
660
- color: var(--color-text-muted);
661
- margin: 0 auto 16px;
662
- }
663
-
664
- .empty-state-title {
665
- font-size: var(--text-lg);
666
- margin-bottom: 8px;
667
- }
668
-
669
- .empty-state-description {
670
- color: var(--color-text-muted);
671
- margin-bottom: 24px;
672
- }
673
-
674
- .empty-state-code {
675
- display: inline-flex;
676
- align-items: center;
677
- gap: 8px;
678
- padding: 12px 20px;
679
- background: var(--color-surface);
680
- border: 1px solid var(--color-border);
681
- border-radius: var(--radius-md);
682
- font-family: ui-monospace, monospace;
683
- font-size: var(--text-sm);
684
- }
685
-
686
- .empty-state-code .prompt {
687
- color: var(--color-text-muted);
688
- }
689
-
690
- .empty-state-steps {
691
- display: flex;
692
- flex-direction: column;
693
- gap: 16px;
694
- margin: 32px 0;
695
- text-align: left;
696
- }
697
-
698
- .empty-state-step {
699
- display: flex;
700
- align-items: flex-start;
701
- gap: 16px;
702
- padding: 16px;
703
- background: var(--color-surface);
704
- border: 1px solid var(--color-border);
705
- border-radius: var(--radius-md);
706
- }
707
-
708
- .step-number {
709
- display: flex;
710
- align-items: center;
711
- justify-content: center;
712
- width: 28px;
713
- height: 28px;
714
- background: var(--color-accent-bg);
715
- color: var(--color-accent);
716
- border-radius: 50%;
717
- font-size: var(--text-sm);
718
- font-weight: 600;
719
- flex-shrink: 0;
720
- }
721
-
722
- .step-content {
723
- flex: 1;
724
- }
725
-
726
- .step-title {
727
- font-size: var(--text-sm);
728
- color: var(--color-text);
729
- margin-bottom: 4px;
730
- }
731
-
732
- .step-code {
733
- font-family: ui-monospace, monospace;
734
- font-size: var(--text-sm);
735
- color: var(--color-text-secondary);
736
- background: var(--color-bg);
737
- padding: 4px 8px;
738
- border-radius: var(--radius-sm);
739
- }
740
-
741
- .empty-state-features {
742
- margin-top: 32px;
743
- padding: 20px;
744
- background: var(--color-surface);
745
- border: 1px solid var(--color-border);
746
- border-radius: var(--radius-md);
747
- text-align: left;
748
- }
749
-
750
- .features-title {
751
- font-size: var(--text-sm);
752
- color: var(--color-text);
753
- margin-bottom: 12px;
754
- font-weight: 500;
755
- }
756
-
757
- .features-list {
758
- list-style: none;
759
- padding: 0;
760
- margin: 0;
761
- }
762
-
763
- .features-list li {
764
- font-size: var(--text-sm);
765
- color: var(--color-text-secondary);
766
- padding: 6px 0;
767
- padding-left: 20px;
768
- position: relative;
769
- }
770
-
771
- .features-list li::before {
772
- content: "";
773
- position: absolute;
774
- left: 0;
775
- top: 12px;
776
- width: 6px;
777
- height: 6px;
778
- background: var(--color-accent);
779
- border-radius: 50%;
780
- }
781
-
782
- /* Back Link */
783
- .back-link {
784
- display: inline-flex;
785
- align-items: center;
786
- gap: 6px;
787
- font-size: var(--text-sm);
788
- color: var(--color-text-muted);
789
- margin-bottom: 24px;
790
- }
791
-
792
- .back-link:hover {
793
- color: var(--color-text);
794
- }
795
-
796
- .back-link svg {
797
- width: 16px;
798
- height: 16px;
799
- }
800
-
801
- /* Stats */
802
- .stats {
803
- display: flex;
804
- gap: 24px;
805
- }
806
-
807
- .stat {
808
- text-align: center;
809
- }
810
-
811
- .stat-value {
812
- font-size: var(--text-2xl);
813
- font-weight: 600;
814
- color: var(--color-text);
815
- }
816
-
817
- .stat-label {
818
- font-size: var(--text-xs);
819
- color: var(--color-text-muted);
820
- text-transform: uppercase;
821
- letter-spacing: 0.05em;
822
- }
823
-
824
- /* Mermaid */
825
- .mermaid {
826
- background: transparent;
827
- }
828
-
829
- .mermaid .node rect {
830
- fill: var(--color-bg-muted);
831
- stroke: var(--color-border-hover);
832
- stroke-width: 1px;
833
- rx: 6px;
834
- }
835
-
836
- .mermaid .nodeLabel {
837
- color: var(--color-text);
838
- font-family: system-ui, sans-serif;
839
- font-size: 13px;
840
- }
841
-
842
- .mermaid .edgePath .path {
843
- stroke: var(--color-accent);
844
- stroke-width: 1.5px;
845
- }
846
-
847
- .mermaid .edgeLabel {
848
- background: var(--color-bg);
849
- color: var(--color-text-muted);
850
- }
851
-
852
- /* Utility */
853
- .sr-only {
854
- position: absolute;
855
- width: 1px;
856
- height: 1px;
857
- padding: 0;
858
- margin: -1px;
859
- overflow: hidden;
860
- clip: rect(0, 0, 0, 0);
861
- border: 0;
862
- }
863
-
864
- /* Skip Link */
865
- .skip-link {
866
- position: absolute;
867
- top: -100%;
868
- left: 16px;
869
- z-index: 1000;
870
- padding: 12px 24px;
871
- background: var(--color-accent);
872
- color: var(--color-bg);
873
- font-weight: 600;
874
- font-size: var(--text-sm);
875
- border-radius: var(--radius-md);
876
- text-decoration: none;
877
- transition: top 0.2s ease;
878
- }
879
-
880
- .skip-link:focus {
881
- top: 16px;
882
- outline: none;
883
- }
884
-
885
- /* Focus Styles */
886
- :focus-visible {
887
- outline: 2px solid var(--color-accent);
888
- outline-offset: 2px;
889
- }
890
-
891
- /* Remove outline for mouse clicks, keep for keyboard */
892
- :focus:not(:focus-visible) {
893
- outline: none;
894
- }
895
-
896
- /* Ensure buttons and links have visible focus */
897
- a:focus-visible,
898
- button:focus-visible,
899
- input:focus-visible,
900
- select:focus-visible,
901
- textarea:focus-visible {
902
- outline: 2px solid var(--color-accent);
903
- outline-offset: 2px;
904
- }