opaque_id 1.2.0 → 1.3.0

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