@clanwolf/ui-kit 1.0.2 → 2.0.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,1492 @@
1
+ /*
2
+ * AUXILIARY FIGHTS — Master Theme
3
+ * File: _aux-theme.scss
4
+ *
5
+ * Dark military / industrial sci-fi theme.
6
+ * Designed as the global visual foundation for the Auxiliary Fights Angular app.
7
+ *
8
+ * Usage:
9
+ * @use 'styles/aux-theme' as aux;
10
+ *
11
+ * Or import globally:
12
+ * @use './styles/aux-theme';
13
+ */
14
+
15
+ /* ============================================================
16
+ 01. DESIGN TOKENS
17
+ ============================================================ */
18
+
19
+ :root {
20
+ /* --- Core surfaces --- */
21
+ --aux-bg: #080d0d;
22
+ --aux-bg-raised: #0c1313;
23
+ --aux-bg-panel: #101919;
24
+ --aux-bg-panel-hover: #151f1f;
25
+ --aux-bg-inset: #060a0a;
26
+
27
+ /* --- Borders --- */
28
+ --aux-border: #293636;
29
+ --aux-border-strong: #3c4d4b;
30
+ --aux-border-soft: rgba(180, 195, 184, 0.14);
31
+ --aux-border-active: #aeb79a;
32
+
33
+ /* --- Text --- */
34
+ --aux-text: #e4e7dc;
35
+ --aux-text-secondary: #aab2a8;
36
+ --aux-text-muted: #6e7974;
37
+ --aux-text-disabled: #4b5552;
38
+
39
+ /* --- Brand / accent --- */
40
+ --aux-accent: #c9d09f;
41
+ --aux-accent-bright: #e0e5bd;
42
+ --aux-accent-dark: #788266;
43
+ --aux-accent-glow: rgba(201, 208, 159, 0.18);
44
+
45
+ /* --- Status --- */
46
+ --aux-success: #62d48b;
47
+ --aux-success-bright: #82f1a7;
48
+ --aux-success-dark: #286f47;
49
+ --aux-success-glow: rgba(98, 212, 139, 0.16);
50
+
51
+ --aux-danger: #ef4d42;
52
+ --aux-danger-bright: #ff756b;
53
+ --aux-danger-dark: #7c2925;
54
+ --aux-danger-glow: rgba(239, 77, 66, 0.15);
55
+
56
+ --aux-warning: #e59b42;
57
+ --aux-warning-bright: #ffba61;
58
+ --aux-warning-glow: rgba(229, 155, 66, 0.15);
59
+
60
+ /* --- Factions --- */
61
+ --aux-faction-sp1: #e0443b;
62
+ --aux-faction-sp1-bright: #ff5c51;
63
+ --aux-faction-sp1-dark: #7f2824;
64
+
65
+ --aux-faction-sp2: #4e9be8;
66
+ --aux-faction-sp2-bright: #73b7ff;
67
+ --aux-faction-sp2-dark: #285984;
68
+
69
+ /* --- Technical lines --- */
70
+ --aux-grid: rgba(150, 165, 155, 0.055);
71
+ --aux-grid-strong: rgba(150, 165, 155, 0.09);
72
+ --aux-scanline: rgba(255, 255, 255, 0.018);
73
+
74
+ /* --- Typography --- */
75
+ --aux-font-display: 'Rajdhani', 'Arial Narrow', sans-serif;
76
+ --aux-font-body: Inter, 'Segoe UI', Arial, sans-serif;
77
+ --aux-font-mono: 'JetBrains Mono', 'Roboto Mono', monospace;
78
+
79
+ /* --- Type scale --- */
80
+ --aux-text-xs: 0.65rem;
81
+ --aux-text-sm: 0.75rem;
82
+ --aux-text-md: 0.875rem;
83
+ --aux-text-lg: 1rem;
84
+ --aux-text-xl: 1.25rem;
85
+ --aux-text-2xl: 1.65rem;
86
+ --aux-text-3xl: 2.2rem;
87
+
88
+ /* --- Spacing --- */
89
+ --aux-space-1: 0.25rem;
90
+ --aux-space-2: 0.5rem;
91
+ --aux-space-3: 0.75rem;
92
+ --aux-space-4: 1rem;
93
+ --aux-space-5: 1.25rem;
94
+ --aux-space-6: 1.5rem;
95
+ --aux-space-8: 2rem;
96
+ --aux-space-10: 2.5rem;
97
+
98
+ /* --- Shape --- */
99
+ --aux-radius-sm: 3px;
100
+ --aux-radius-md: 5px;
101
+ --aux-radius-lg: 8px;
102
+
103
+ /* --- Shadows / glow --- */
104
+ --aux-shadow-panel:
105
+ 0 10px 30px rgba(0, 0, 0, 0.32);
106
+
107
+ --aux-shadow-active:
108
+ 0 0 18px var(--aux-accent-glow);
109
+
110
+ --aux-shadow-success:
111
+ 0 0 18px var(--aux-success-glow);
112
+
113
+ /* --- Transitions --- */
114
+ --aux-transition-fast: 120ms ease;
115
+ --aux-transition: 180ms ease;
116
+ --aux-transition-slow: 280ms ease;
117
+ }
118
+
119
+
120
+ /* ============================================================
121
+ 02. SCSS CONFIGURATION
122
+ ============================================================ */
123
+
124
+ $aux-bg: #080d0d;
125
+ $aux-bg-panel: #101919;
126
+ $aux-accent: #c9d09f;
127
+ $aux-success: #62d48b;
128
+ $aux-danger: #ef4d42;
129
+ $aux-warning: #e59b42;
130
+ $aux-sp1: #e0443b;
131
+ $aux-sp2: #4e9be8;
132
+
133
+
134
+ /* ============================================================
135
+ 03. MIXINS
136
+ ============================================================ */
137
+
138
+ /*
139
+ * Technical angular border.
140
+ *
141
+ * Use:
142
+ * @include aux-tech-border;
143
+ */
144
+ @mixin aux-tech-border($color: var(--aux-border)) {
145
+ border: 1px solid $color;
146
+ clip-path: polygon(
147
+ 0 7px,
148
+ 7px 0,
149
+ calc(100% - 7px) 0,
150
+ 100% 7px,
151
+ 100% calc(100% - 7px),
152
+ calc(100% - 7px) 100%,
153
+ 7px 100%,
154
+ 0 calc(100% - 7px)
155
+ );
156
+ }
157
+
158
+
159
+ /*
160
+ * Small corner brackets.
161
+ */
162
+ @mixin aux-corners(
163
+ $color: var(--aux-border-strong),
164
+ $size: 10px
165
+ ) {
166
+ position: relative;
167
+
168
+ &::before,
169
+ &::after {
170
+ content: '';
171
+ position: absolute;
172
+ width: $size;
173
+ height: $size;
174
+ pointer-events: none;
175
+ }
176
+
177
+ &::before {
178
+ top: 0;
179
+ left: 0;
180
+ border-top: 1px solid $color;
181
+ border-left: 1px solid $color;
182
+ }
183
+
184
+ &::after {
185
+ right: 0;
186
+ bottom: 0;
187
+ border-right: 1px solid $color;
188
+ border-bottom: 1px solid $color;
189
+ }
190
+ }
191
+
192
+
193
+ /*
194
+ * Technical panel background.
195
+ */
196
+ @mixin aux-panel {
197
+ position: relative;
198
+ background:
199
+ linear-gradient(
200
+ 135deg,
201
+ rgba(255, 255, 255, 0.018),
202
+ transparent 35%
203
+ ),
204
+ var(--aux-bg-panel);
205
+
206
+ border: 1px solid var(--aux-border);
207
+ box-shadow: var(--aux-shadow-panel);
208
+ }
209
+
210
+
211
+ /*
212
+ * Subtle technical grid.
213
+ */
214
+ @mixin aux-grid {
215
+ background-image:
216
+ linear-gradient(
217
+ var(--aux-grid) 1px,
218
+ transparent 1px
219
+ ),
220
+ linear-gradient(
221
+ 90deg,
222
+ var(--aux-grid) 1px,
223
+ transparent 1px
224
+ );
225
+
226
+ background-size: 24px 24px;
227
+ }
228
+
229
+
230
+ /*
231
+ * Display / military heading.
232
+ */
233
+ @mixin aux-display($size: var(--aux-text-xl)) {
234
+ font-family: var(--aux-font-display);
235
+ font-size: $size;
236
+ font-weight: 600;
237
+ letter-spacing: 0.1em;
238
+ text-transform: uppercase;
239
+ }
240
+
241
+
242
+ /*
243
+ * Monospace technical data.
244
+ */
245
+ @mixin aux-mono {
246
+ font-family: var(--aux-font-mono);
247
+ font-variant-numeric: tabular-nums;
248
+ letter-spacing: 0.03em;
249
+ }
250
+
251
+ /*
252
+ * Illuminated icon filter.
253
+ */
254
+ @mixin aux-icon-illuminate($color: #00ff00) {
255
+ filter:
256
+ brightness(.1)
257
+ drop-shadow(0 0 1px $color)
258
+ drop-shadow(0 0 1px $color);
259
+ }
260
+
261
+
262
+ /* ============================================================
263
+ 04. GLOBAL FOUNDATION
264
+ ============================================================ */
265
+
266
+ html,
267
+ body {
268
+ min-height: 100%;
269
+ }
270
+
271
+ body {
272
+ margin: 0;
273
+ background:
274
+ radial-gradient(
275
+ circle at 50% 0%,
276
+ rgba(91, 110, 95, 0.08),
277
+ transparent 42%
278
+ ),
279
+ var(--aux-bg);
280
+
281
+ color: var(--aux-text);
282
+ font-family: var(--aux-font-body);
283
+ font-size: 16px;
284
+ line-height: 1.45;
285
+
286
+ -webkit-font-smoothing: antialiased;
287
+ text-rendering: optimizeLegibility;
288
+ }
289
+
290
+ * {
291
+ box-sizing: border-box;
292
+ }
293
+
294
+ button,
295
+ input,
296
+ select,
297
+ textarea {
298
+ font: inherit;
299
+ }
300
+
301
+ button {
302
+ color: inherit;
303
+ }
304
+
305
+ ::selection {
306
+ background: var(--aux-accent);
307
+ color: var(--aux-bg);
308
+ }
309
+
310
+
311
+ /* ============================================================
312
+ 05. TYPOGRAPHY
313
+ ============================================================ */
314
+
315
+ .aux-title,
316
+ .aux-heading,
317
+ .aux-label,
318
+ .aux-button,
319
+ .aux-nav,
320
+ .aux-status,
321
+ .aux-kicker {
322
+ font-family: var(--aux-font-display);
323
+ text-transform: uppercase;
324
+ }
325
+
326
+ .aux-title {
327
+ @include aux-display(var(--aux-text-3xl));
328
+ margin: 0;
329
+ line-height: 0.95;
330
+ }
331
+
332
+ .aux-heading {
333
+ @include aux-display(var(--aux-text-xl));
334
+ margin: 0;
335
+ }
336
+
337
+ .aux-kicker {
338
+ @include aux-display(var(--aux-text-xs));
339
+ color: var(--aux-text-muted);
340
+ letter-spacing: 0.18em;
341
+ }
342
+
343
+ .aux-label {
344
+ @include aux-display(var(--aux-text-sm));
345
+ color: var(--aux-text-secondary);
346
+ letter-spacing: 0.12em;
347
+ }
348
+
349
+ .aux-data {
350
+ @include aux-mono;
351
+ font-size: var(--aux-text-sm);
352
+ }
353
+
354
+ .aux-muted {
355
+ color: var(--aux-text-muted);
356
+ }
357
+
358
+ .aux-secondary {
359
+ color: var(--aux-text-secondary);
360
+ }
361
+
362
+
363
+ /* ============================================================
364
+ 06. APP SHELL
365
+ ============================================================ */
366
+
367
+ .aux-app {
368
+ min-height: 100dvh;
369
+ background:
370
+ linear-gradient(
371
+ rgba(255, 255, 255, 0.012) 50%,
372
+ transparent 50%
373
+ ),
374
+ var(--aux-bg);
375
+
376
+ background-size: 100% 4px;
377
+ }
378
+
379
+ .aux-shell {
380
+ width: min(100%, 480px);
381
+ min-height: 100dvh;
382
+ margin: 0 auto;
383
+ padding:
384
+ env(safe-area-inset-top)
385
+ var(--aux-space-4)
386
+ env(safe-area-inset-bottom);
387
+
388
+ position: relative;
389
+ overflow: hidden;
390
+ }
391
+
392
+ .aux-grid-background {
393
+ @include aux-grid;
394
+ }
395
+
396
+ .aux-content {
397
+ position: relative;
398
+ z-index: 1;
399
+ }
400
+
401
+
402
+ /* ============================================================
403
+ 07. HEADER / NAVIGATION
404
+ ============================================================ */
405
+
406
+ .aux-header {
407
+ display: flex;
408
+ align-items: center;
409
+ gap: var(--aux-space-3);
410
+
411
+ min-height: 58px;
412
+ border-bottom: 1px solid var(--aux-border);
413
+
414
+ position: relative;
415
+
416
+ &::after {
417
+ content: '';
418
+ position: absolute;
419
+ bottom: -1px;
420
+ left: 0;
421
+ width: 42px;
422
+ height: 1px;
423
+ background: var(--aux-accent);
424
+ }
425
+ }
426
+
427
+ .aux-header__back,
428
+ .aux-header__action {
429
+ display: grid;
430
+ place-items: center;
431
+
432
+ width: 38px;
433
+ height: 38px;
434
+
435
+ border: 0;
436
+ background: transparent;
437
+ color: var(--aux-text-secondary);
438
+
439
+ cursor: pointer;
440
+
441
+ transition:
442
+ color var(--aux-transition),
443
+ background var(--aux-transition);
444
+
445
+ &:hover {
446
+ color: var(--aux-text);
447
+ background: var(--aux-bg-panel);
448
+ }
449
+ }
450
+
451
+ .aux-header__brand {
452
+ display: flex;
453
+ align-items: center;
454
+ gap: var(--aux-space-2);
455
+
456
+ flex: 1;
457
+
458
+ @include aux-display(var(--aux-text-sm));
459
+ }
460
+
461
+ .aux-header__logo {
462
+ width: 28px;
463
+ height: 28px;
464
+ object-fit: contain;
465
+ }
466
+
467
+ .aux-header__meta {
468
+ @include aux-mono;
469
+ color: var(--aux-text-muted);
470
+ font-size: 0.6rem;
471
+ }
472
+
473
+
474
+ /* ============================================================
475
+ 08. TECHNICAL CARDS
476
+ ============================================================ */
477
+
478
+ .aux-card {
479
+ @include aux-panel;
480
+ @include aux-corners;
481
+
482
+ padding: var(--aux-space-4);
483
+ }
484
+
485
+ .aux-card--inset {
486
+ background: var(--aux-bg-inset);
487
+ box-shadow: none;
488
+ }
489
+
490
+ .aux-card--active {
491
+ border-color: var(--aux-accent);
492
+ box-shadow: var(--aux-shadow-active);
493
+ }
494
+
495
+ .aux-card__header {
496
+ display: flex;
497
+ justify-content: space-between;
498
+ align-items: center;
499
+
500
+ margin-bottom: var(--aux-space-3);
501
+ }
502
+
503
+ .aux-card__title {
504
+ @include aux-display(var(--aux-text-md));
505
+ }
506
+
507
+ .aux-card__body {
508
+ color: var(--aux-text-secondary);
509
+ font-size: var(--aux-text-sm);
510
+ }
511
+
512
+
513
+ /* ============================================================
514
+ 09. BUTTON SYSTEM
515
+ ============================================================ */
516
+
517
+ .aux-button {
518
+ @include aux-display(var(--aux-text-md));
519
+
520
+ min-height: 48px;
521
+ padding: 0 var(--aux-space-5);
522
+
523
+ display: inline-flex;
524
+ align-items: center;
525
+ justify-content: center;
526
+ gap: var(--aux-space-3);
527
+
528
+ border: 1px solid var(--aux-border-strong);
529
+ background: var(--aux-bg-panel);
530
+
531
+ color: var(--aux-text);
532
+ letter-spacing: 0.1em;
533
+
534
+ cursor: pointer;
535
+
536
+ position: relative;
537
+ overflow: hidden;
538
+
539
+ transition:
540
+ border-color var(--aux-transition),
541
+ background var(--aux-transition),
542
+ color var(--aux-transition),
543
+ box-shadow var(--aux-transition),
544
+ transform var(--aux-transition-fast);
545
+
546
+ &::before {
547
+ content: '';
548
+ position: absolute;
549
+ inset: 0;
550
+
551
+ background:
552
+ linear-gradient(
553
+ 90deg,
554
+ transparent,
555
+ rgba(255, 255, 255, 0.05),
556
+ transparent
557
+ );
558
+
559
+ transform: translateX(-100%);
560
+ transition: transform 350ms ease;
561
+ }
562
+
563
+ &:hover::before {
564
+ transform: translateX(100%);
565
+ }
566
+
567
+ &:active {
568
+ transform: translateY(1px);
569
+ }
570
+
571
+ &:disabled {
572
+ opacity: 0.4;
573
+ cursor: not-allowed;
574
+ }
575
+ }
576
+
577
+ .aux-button--primary {
578
+ color: var(--aux-bg);
579
+ background: var(--aux-accent);
580
+ border-color: var(--aux-accent-bright);
581
+
582
+ &:hover {
583
+ background: var(--aux-accent-bright);
584
+ box-shadow: var(--aux-shadow-active);
585
+ }
586
+ }
587
+
588
+ .aux-button--success {
589
+ color: var(--aux-bg);
590
+ background: var(--aux-success);
591
+ border-color: var(--aux-success-bright);
592
+
593
+ &:hover {
594
+ box-shadow: var(--aux-shadow-success);
595
+ }
596
+ }
597
+
598
+ .aux-button--danger {
599
+ color: var(--aux-danger-bright);
600
+ border-color: var(--aux-danger);
601
+
602
+ &:hover {
603
+ background: var(--aux-danger-glow);
604
+ }
605
+ }
606
+
607
+ .aux-button--ghost {
608
+ background: transparent;
609
+ border-color: var(--aux-border);
610
+
611
+ &:hover {
612
+ border-color: var(--aux-border-strong);
613
+ background: var(--aux-bg-panel);
614
+ }
615
+ }
616
+
617
+ .aux-button--full {
618
+ width: 100%;
619
+ }
620
+
621
+ .aux-button__icon {
622
+ display: inline-grid;
623
+ place-items: center;
624
+ }
625
+
626
+
627
+ /* ============================================================
628
+ 10. FORM CONTROLS
629
+ ============================================================ */
630
+
631
+ .aux-field {
632
+ display: flex;
633
+ flex-direction: column;
634
+ gap: var(--aux-space-2);
635
+ }
636
+
637
+ .aux-field__label {
638
+ @include aux-display(var(--aux-text-xs));
639
+ color: var(--aux-text-secondary);
640
+ letter-spacing: 0.12em;
641
+ }
642
+
643
+ .aux-input {
644
+ width: 100%;
645
+ min-height: 48px;
646
+
647
+ padding: 0 var(--aux-space-3);
648
+
649
+ color: var(--aux-text);
650
+ background: var(--aux-bg-inset);
651
+
652
+ border: 1px solid var(--aux-border);
653
+ border-radius: var(--aux-radius-sm);
654
+
655
+ outline: none;
656
+
657
+ @include aux-mono;
658
+
659
+ transition:
660
+ border-color var(--aux-transition),
661
+ box-shadow var(--aux-transition);
662
+
663
+ &::placeholder {
664
+ color: var(--aux-text-disabled);
665
+ }
666
+
667
+ &:hover {
668
+ border-color: var(--aux-border-strong);
669
+ }
670
+
671
+ &:focus {
672
+ border-color: var(--aux-accent);
673
+ box-shadow:
674
+ 0 0 0 1px var(--aux-accent),
675
+ 0 0 16px var(--aux-accent-glow);
676
+ }
677
+
678
+ &.ng-invalid.ng-touched {
679
+ border-color: var(--aux-danger);
680
+ }
681
+ }
682
+
683
+
684
+ /* ============================================================
685
+ 11. STATUS SYSTEM
686
+ ============================================================ */
687
+
688
+ .aux-status {
689
+ display: inline-flex;
690
+ align-items: center;
691
+ gap: var(--aux-space-2);
692
+
693
+ font-size: var(--aux-text-xs);
694
+ letter-spacing: 0.1em;
695
+ }
696
+
697
+ .aux-status::before {
698
+ content: '';
699
+ width: 6px;
700
+ height: 6px;
701
+ border-radius: 50%;
702
+ background: currentColor;
703
+ box-shadow: 0 0 8px currentColor;
704
+ }
705
+
706
+ .aux-status--active {
707
+ color: var(--aux-success);
708
+ }
709
+
710
+ .aux-status--warning {
711
+ color: var(--aux-warning);
712
+ }
713
+
714
+ .aux-status--danger {
715
+ color: var(--aux-danger);
716
+ }
717
+
718
+ .aux-status--offline {
719
+ color: var(--aux-text-muted);
720
+ }
721
+
722
+
723
+ /* ============================================================
724
+ 12. FACTION CARDS
725
+ ============================================================ */
726
+
727
+ .aux-factions {
728
+ display: grid;
729
+ grid-template-columns: repeat(2, 1fr);
730
+ gap: var(--aux-space-3);
731
+ }
732
+
733
+ .aux-faction {
734
+ @include aux-panel;
735
+
736
+ min-height: 190px;
737
+ padding: var(--aux-space-4);
738
+
739
+ display: flex;
740
+ flex-direction: column;
741
+
742
+ cursor: pointer;
743
+
744
+ border: 1px solid var(--aux-border);
745
+
746
+ transition:
747
+ border-color var(--aux-transition),
748
+ box-shadow var(--aux-transition),
749
+ transform var(--aux-transition-fast);
750
+
751
+ &:hover {
752
+ transform: translateY(-1px);
753
+ }
754
+ }
755
+
756
+ .aux-faction--sp1 {
757
+ --aux-faction-color: var(--aux-faction-sp1);
758
+ --aux-faction-bright: var(--aux-faction-sp1-bright);
759
+
760
+ border-color: var(--aux-faction-color);
761
+
762
+ &:hover,
763
+ &.is-selected {
764
+ box-shadow: 0 0 20px rgba(224, 68, 59, 0.15);
765
+ }
766
+ }
767
+
768
+ .aux-faction--sp2 {
769
+ --aux-faction-color: var(--aux-faction-sp2);
770
+ --aux-faction-bright: var(--aux-faction-sp2-bright);
771
+
772
+ border-color: var(--aux-faction-color);
773
+
774
+ &:hover,
775
+ &.is-selected {
776
+ box-shadow: 0 0 20px rgba(78, 155, 232, 0.15);
777
+ }
778
+ }
779
+
780
+ .aux-faction__icon {
781
+ margin-bottom: var(--aux-space-4);
782
+ @include aux-icon-illuminate(var(--aux-faction-color));
783
+ color: var(--aux-faction-color);
784
+ }
785
+
786
+ .aux-faction__code {
787
+ @include aux-mono;
788
+
789
+ color: var(--aux-faction-bright);
790
+ font-size: var(--aux-text-sm);
791
+ }
792
+
793
+ .aux-faction__name {
794
+ @include aux-display(var(--aux-text-md));
795
+
796
+ margin-top: var(--aux-space-1);
797
+ }
798
+
799
+ .aux-faction__description {
800
+ margin-top: auto;
801
+
802
+ color: var(--aux-text-muted);
803
+ font-size: var(--aux-text-xs);
804
+ }
805
+
806
+ .aux-faction__radio {
807
+ width: 14px;
808
+ height: 14px;
809
+
810
+ margin-top: var(--aux-space-3);
811
+
812
+ border: 1px solid var(--aux-faction-color);
813
+ border-radius: 50%;
814
+
815
+ &.is-selected {
816
+ background: var(--aux-faction-color);
817
+ box-shadow: 0 0 8px var(--aux-faction-color);
818
+ }
819
+ }
820
+
821
+
822
+ /* ============================================================
823
+ 13. MATCH / TIMER
824
+ ============================================================ */
825
+
826
+ .aux-match {
827
+ display: flex;
828
+ flex-direction: column;
829
+ gap: var(--aux-space-5);
830
+ }
831
+
832
+ .aux-timer {
833
+ position: relative;
834
+
835
+ width: 190px;
836
+ height: 190px;
837
+
838
+ margin: var(--aux-space-4) auto;
839
+
840
+ display: grid;
841
+ place-items: center;
842
+
843
+ border: 1px solid var(--aux-border-strong);
844
+ border-radius: 50%;
845
+
846
+ background:
847
+ radial-gradient(
848
+ circle,
849
+ var(--aux-bg-panel),
850
+ var(--aux-bg-inset)
851
+ );
852
+
853
+ box-shadow:
854
+ inset 0 0 30px rgba(0, 0, 0, 0.45),
855
+ 0 0 20px rgba(201, 208, 159, 0.05);
856
+
857
+ &::before,
858
+ &::after {
859
+ content: '';
860
+ position: absolute;
861
+ inset: 10px;
862
+
863
+ border: 1px solid var(--aux-border-soft);
864
+ border-radius: 50%;
865
+ }
866
+
867
+ &::after {
868
+ inset: 22px;
869
+ border-style: dashed;
870
+ }
871
+ }
872
+
873
+ .aux-timer__value {
874
+ @include aux-mono;
875
+
876
+ font-size: 1.7rem;
877
+ color: var(--aux-accent);
878
+ }
879
+
880
+ .aux-timer__label {
881
+ @include aux-display(var(--aux-text-xs));
882
+
883
+ color: var(--aux-text-muted);
884
+ }
885
+
886
+
887
+ /* ============================================================
888
+ 14. RESULT / VERIFICATION
889
+ ============================================================ */
890
+
891
+ .aux-result {
892
+ display: grid;
893
+ grid-template-columns: 1fr auto 1fr;
894
+ align-items: center;
895
+ gap: var(--aux-space-2);
896
+ }
897
+
898
+ .aux-result__vs {
899
+ @include aux-mono;
900
+
901
+ color: var(--aux-text-muted);
902
+ font-size: var(--aux-text-xs);
903
+ }
904
+
905
+ .aux-result__winner {
906
+ @include aux-panel;
907
+
908
+ padding: var(--aux-space-4);
909
+ text-align: center;
910
+
911
+ border-color: var(--aux-success);
912
+ }
913
+
914
+ .aux-result__icon {
915
+ width: 52px;
916
+ height: 52px;
917
+ margin: 0 auto var(--aux-space-3);
918
+ }
919
+
920
+
921
+ /* ============================================================
922
+ 15. ID SCANNER
923
+ ============================================================ */
924
+
925
+ .aux-scanner {
926
+ position: relative;
927
+
928
+ aspect-ratio: 1 / 1;
929
+
930
+ background: var(--aux-bg-inset);
931
+ border: 1px solid var(--aux-border);
932
+
933
+ overflow: hidden;
934
+ }
935
+
936
+ .aux-scanner__frame {
937
+ position: absolute;
938
+ inset: 14%;
939
+
940
+ border: 1px solid var(--aux-accent);
941
+
942
+ background:
943
+ linear-gradient(
944
+ 90deg,
945
+ transparent 48%,
946
+ var(--aux-grid-strong) 50%,
947
+ transparent 52%
948
+ ),
949
+ linear-gradient(
950
+ transparent 48%,
951
+ var(--aux-grid-strong) 50%,
952
+ transparent 52%
953
+ );
954
+
955
+ background-size: 100% 100%;
956
+ }
957
+
958
+ .aux-scanner__line {
959
+ position: absolute;
960
+
961
+ left: 14%;
962
+ right: 14%;
963
+ top: 50%;
964
+
965
+ height: 1px;
966
+
967
+ background: var(--aux-accent);
968
+ box-shadow: 0 0 12px var(--aux-accent);
969
+
970
+ animation: aux-scan 2.2s ease-in-out infinite;
971
+ }
972
+
973
+ @keyframes aux-scan {
974
+ 0%,
975
+ 100% {
976
+ transform: translateY(-55px);
977
+ opacity: 0.4;
978
+ }
979
+
980
+ 50% {
981
+ transform: translateY(55px);
982
+ opacity: 1;
983
+ }
984
+ }
985
+
986
+
987
+ /* ============================================================
988
+ 16. VERIFICATION STATE
989
+ ============================================================ */
990
+
991
+ .aux-verification {
992
+ text-align: center;
993
+ }
994
+
995
+ .aux-verification__icon {
996
+ width: 110px;
997
+ height: 110px;
998
+
999
+ margin: var(--aux-space-8) auto;
1000
+
1001
+ display: grid;
1002
+ place-items: center;
1003
+
1004
+ border: 1px solid var(--aux-success);
1005
+ border-radius: 50%;
1006
+
1007
+ color: var(--aux-success);
1008
+ font-size: 3rem;
1009
+
1010
+ box-shadow: var(--aux-shadow-success);
1011
+ }
1012
+
1013
+ .aux-verification__title {
1014
+ @include aux-display(var(--aux-text-2xl));
1015
+ }
1016
+
1017
+ .aux-verification__title strong {
1018
+ color: var(--aux-success);
1019
+ }
1020
+
1021
+
1022
+ /* ============================================================
1023
+ 17. HISTORY
1024
+ ============================================================ */
1025
+
1026
+ .aux-history {
1027
+ display: flex;
1028
+ flex-direction: column;
1029
+ gap: 1px;
1030
+
1031
+ border: 1px solid var(--aux-border);
1032
+ }
1033
+
1034
+ .aux-history__item {
1035
+ display: grid;
1036
+ grid-template-columns: 40px 1fr auto;
1037
+ align-items: center;
1038
+ gap: var(--aux-space-3);
1039
+
1040
+ min-height: 68px;
1041
+ padding: var(--aux-space-3);
1042
+
1043
+ background: var(--aux-bg-panel);
1044
+
1045
+ transition: background var(--aux-transition);
1046
+
1047
+ &:hover {
1048
+ background: var(--aux-bg-panel-hover);
1049
+ }
1050
+ }
1051
+
1052
+ .aux-history__icon {
1053
+ width: 32px;
1054
+ height: 32px;
1055
+ }
1056
+
1057
+ .aux-history__date {
1058
+ @include aux-mono;
1059
+
1060
+ color: var(--aux-text-muted);
1061
+ font-size: 0.6rem;
1062
+ }
1063
+
1064
+ .aux-history__result {
1065
+ @include aux-display(var(--aux-text-sm));
1066
+ }
1067
+
1068
+ .aux-history__result--win {
1069
+ color: var(--aux-success);
1070
+ }
1071
+
1072
+ .aux-history__result--loss {
1073
+ color: var(--aux-danger);
1074
+ }
1075
+
1076
+
1077
+ /* ============================================================
1078
+ 18. ACCOUNT
1079
+ ============================================================ */
1080
+
1081
+ .aux-account {
1082
+ @include aux-panel;
1083
+ padding: var(--aux-space-4);
1084
+ }
1085
+
1086
+ .aux-account__row {
1087
+ display: grid;
1088
+ grid-template-columns: 100px 1fr;
1089
+ gap: var(--aux-space-3);
1090
+
1091
+ padding: var(--aux-space-2) 0;
1092
+
1093
+ border-bottom: 1px solid var(--aux-border-soft);
1094
+
1095
+ &:last-child {
1096
+ border-bottom: 0;
1097
+ }
1098
+ }
1099
+
1100
+ .aux-account__label {
1101
+ @include aux-display(var(--aux-text-xs));
1102
+
1103
+ color: var(--aux-text-muted);
1104
+ }
1105
+
1106
+ .aux-account__value {
1107
+ @include aux-mono;
1108
+
1109
+ font-size: var(--aux-text-sm);
1110
+ }
1111
+
1112
+
1113
+ /* ============================================================
1114
+ 19. SPACING UTILITIES
1115
+ ============================================================ */
1116
+
1117
+ .aux-stack {
1118
+ display: flex;
1119
+ flex-direction: column;
1120
+ }
1121
+
1122
+ .aux-stack--2 {
1123
+ gap: var(--aux-space-2);
1124
+ }
1125
+
1126
+ .aux-stack--3 {
1127
+ gap: var(--aux-space-3);
1128
+ }
1129
+
1130
+ .aux-stack--4 {
1131
+ gap: var(--aux-space-4);
1132
+ }
1133
+
1134
+ .aux-stack--6 {
1135
+ gap: var(--aux-space-6);
1136
+ }
1137
+
1138
+ .aux-stack--8 {
1139
+ gap: var(--aux-space-8);
1140
+ }
1141
+
1142
+ .aux-row {
1143
+ display: flex;
1144
+ align-items: center;
1145
+ }
1146
+
1147
+ .aux-row--between {
1148
+ justify-content: space-between;
1149
+ }
1150
+
1151
+ .aux-row--gap {
1152
+ gap: var(--aux-space-3);
1153
+ }
1154
+
1155
+
1156
+ /* ============================================================
1157
+ 20. RESPONSIVE
1158
+ ============================================================ */
1159
+
1160
+ @media (min-width: 600px) {
1161
+ .aux-shell {
1162
+ width: min(100%, 520px);
1163
+ padding-left: var(--aux-space-6);
1164
+ padding-right: var(--aux-space-6);
1165
+ }
1166
+ }
1167
+
1168
+
1169
+ /* ============================================================
1170
+ 21. ACCESSIBILITY
1171
+ ============================================================ */
1172
+
1173
+ :focus-visible {
1174
+ outline: 1px solid var(--aux-accent);
1175
+ outline-offset: 3px;
1176
+ }
1177
+
1178
+ @media (prefers-reduced-motion: reduce) {
1179
+ *,
1180
+ *::before,
1181
+ *::after {
1182
+ animation-duration: 0.01ms !important;
1183
+ animation-iteration-count: 1 !important;
1184
+ transition-duration: 0.01ms !important;
1185
+ }
1186
+ }
1187
+
1188
+ /* ============================================================
1189
+ 22. PROGRESS / LOADING BAR
1190
+ ============================================================ */
1191
+
1192
+ .aux-progress {
1193
+ width: 100%;
1194
+ }
1195
+
1196
+ .aux-progress__header {
1197
+ display: flex;
1198
+ justify-content: space-between;
1199
+ align-items: center;
1200
+
1201
+ margin-bottom: var(--aux-space-2);
1202
+ }
1203
+
1204
+ .aux-progress__label {
1205
+ @include aux-display(var(--aux-text-xs));
1206
+
1207
+ color: var(--aux-text-secondary);
1208
+ letter-spacing: 0.14em;
1209
+ }
1210
+
1211
+ .aux-progress__value {
1212
+ @include aux-mono;
1213
+
1214
+ color: var(--aux-accent);
1215
+ font-size: var(--aux-text-xs);
1216
+ }
1217
+
1218
+
1219
+ /* ------------------------------------------------------------
1220
+ Progress Track
1221
+ ------------------------------------------------------------ */
1222
+
1223
+ .aux-progress__track {
1224
+ position: relative;
1225
+
1226
+ width: 100%;
1227
+ height: 12px;
1228
+
1229
+ padding: 2px;
1230
+
1231
+ background: var(--aux-bg-inset);
1232
+ border: 1px solid var(--aux-border);
1233
+
1234
+ clip-path: polygon(
1235
+ 0 4px,
1236
+ 4px 0,
1237
+ 100% 0,
1238
+ 100% calc(100% - 4px),
1239
+ calc(100% - 4px) 100%,
1240
+ 0 100%
1241
+ );
1242
+
1243
+ overflow: hidden;
1244
+ }
1245
+
1246
+
1247
+ /* ------------------------------------------------------------
1248
+ Progress Fill
1249
+ ------------------------------------------------------------ */
1250
+
1251
+ .aux-progress__bar {
1252
+ height: 100%;
1253
+ width: var(--aux-progress, 0%);
1254
+
1255
+ background:
1256
+ linear-gradient(
1257
+ 90deg,
1258
+ var(--aux-accent-dark),
1259
+ var(--aux-accent)
1260
+ );
1261
+
1262
+ box-shadow:
1263
+ 0 0 8px var(--aux-accent-glow);
1264
+
1265
+ transition: width 300ms ease;
1266
+
1267
+ position: relative;
1268
+ }
1269
+
1270
+
1271
+ /* ------------------------------------------------------------
1272
+ Technical Highlight
1273
+ ------------------------------------------------------------ */
1274
+
1275
+ .aux-progress__bar::after {
1276
+ content: '';
1277
+
1278
+ position: absolute;
1279
+ inset: 0;
1280
+
1281
+ background:
1282
+ linear-gradient(
1283
+ 90deg,
1284
+ transparent 0%,
1285
+ rgba(255, 255, 255, 0.25) 50%,
1286
+ transparent 100%
1287
+ );
1288
+
1289
+ transform: translateX(-100%);
1290
+ }
1291
+
1292
+
1293
+ /* ------------------------------------------------------------
1294
+ Animated Loading State
1295
+ ------------------------------------------------------------ */
1296
+
1297
+ .aux-progress--loading {
1298
+ .aux-progress__bar::after {
1299
+ animation: aux-progress-scan 1.6s ease-in-out infinite;
1300
+ }
1301
+ }
1302
+
1303
+ @keyframes aux-progress-scan {
1304
+ 0% {
1305
+ transform: translateX(-100%);
1306
+ }
1307
+
1308
+ 100% {
1309
+ transform: translateX(100%);
1310
+ }
1311
+ }
1312
+
1313
+
1314
+ /* ------------------------------------------------------------
1315
+ Segmented Variant
1316
+ ------------------------------------------------------------ */
1317
+
1318
+ .aux-progress--segmented {
1319
+ .aux-progress__track {
1320
+ padding: 3px;
1321
+
1322
+ background:
1323
+ repeating-linear-gradient(
1324
+ 90deg,
1325
+ var(--aux-bg-inset) 0,
1326
+ var(--aux-bg-inset) 8px,
1327
+ transparent 8px,
1328
+ transparent 10px
1329
+ );
1330
+ }
1331
+
1332
+ .aux-progress__bar {
1333
+ background:
1334
+ repeating-linear-gradient(
1335
+ 90deg,
1336
+ var(--aux-accent) 0,
1337
+ var(--aux-accent) 8px,
1338
+ transparent 8px,
1339
+ transparent 10px
1340
+ );
1341
+
1342
+ box-shadow: none;
1343
+ }
1344
+ }
1345
+
1346
+
1347
+ /* ------------------------------------------------------------
1348
+ Status Variants
1349
+ ------------------------------------------------------------ */
1350
+
1351
+ .aux-progress--success {
1352
+ .aux-progress__value {
1353
+ color: var(--aux-success);
1354
+ }
1355
+
1356
+ .aux-progress__bar {
1357
+ background:
1358
+ linear-gradient(
1359
+ 90deg,
1360
+ var(--aux-success-dark),
1361
+ var(--aux-success)
1362
+ );
1363
+
1364
+ box-shadow:
1365
+ 0 0 8px var(--aux-success-glow);
1366
+ }
1367
+ }
1368
+
1369
+ .aux-progress--danger {
1370
+ .aux-progress__value {
1371
+ color: var(--aux-danger);
1372
+ }
1373
+
1374
+ .aux-progress__bar {
1375
+ background:
1376
+ linear-gradient(
1377
+ 90deg,
1378
+ var(--aux-danger-dark),
1379
+ var(--aux-danger)
1380
+ );
1381
+ }
1382
+ }
1383
+
1384
+ /* ------------------------------------------------------------
1385
+ Automatic / Indeterminate Loading
1386
+ ------------------------------------------------------------ */
1387
+
1388
+ .aux-progress--indeterminate {
1389
+ .aux-progress__bar {
1390
+ width: 35%;
1391
+ animation: aux-progress-indeterminate 1.8s
1392
+ cubic-bezier(0.65, 0, 0.35, 1) infinite;
1393
+ }
1394
+
1395
+ .aux-progress__value {
1396
+ animation: aux-progress-blink 1.8s ease-in-out infinite;
1397
+ }
1398
+ }
1399
+
1400
+ @keyframes aux-progress-indeterminate {
1401
+ 0% {
1402
+ transform: translateX(-120%);
1403
+ }
1404
+
1405
+ 50% {
1406
+ transform: translateX(180%);
1407
+ }
1408
+
1409
+ 100% {
1410
+ transform: translateX(320%);
1411
+ }
1412
+ }
1413
+
1414
+ @keyframes aux-progress-blink {
1415
+ 0%,
1416
+ 100% {
1417
+ opacity: 0.45;
1418
+ }
1419
+
1420
+ 50% {
1421
+ opacity: 1;
1422
+ }
1423
+ }
1424
+
1425
+ /* ============================================================
1426
+ 23. BACKGROUND SCAN LINE
1427
+ Subtle tactical display scan effect
1428
+ ============================================================ */
1429
+
1430
+ .aux-scan-background {
1431
+ position: relative;
1432
+ overflow: hidden;
1433
+ }
1434
+
1435
+ /* Scan line */
1436
+
1437
+ .aux-scan-background::after {
1438
+ content: '';
1439
+
1440
+ position: absolute;
1441
+ left: -10%;
1442
+ right: -10%;
1443
+ top: -15%;
1444
+
1445
+ height: 80px;
1446
+
1447
+ background: linear-gradient(
1448
+ to bottom,
1449
+ transparent,
1450
+ var(--aux-accent-glow),
1451
+ rgba(201, 208, 159, 0.04),
1452
+ transparent
1453
+ );
1454
+
1455
+ border-top: 1px solid var(--aux-accent);
1456
+
1457
+ opacity: 0.14;
1458
+
1459
+ filter: blur(0.2px);
1460
+
1461
+ pointer-events: none;
1462
+
1463
+ animation: aux-background-scan 8s
1464
+ cubic-bezier(0.45, 0, 0.55, 1)
1465
+ infinite;
1466
+ }
1467
+
1468
+
1469
+ @keyframes aux-background-scan {
1470
+
1471
+ 0% {
1472
+ transform: translateY(0);
1473
+ opacity: 0;
1474
+ }
1475
+
1476
+ 8% {
1477
+ opacity: 0.18;
1478
+ }
1479
+
1480
+ 50% {
1481
+ opacity: 0.18;
1482
+ }
1483
+
1484
+ 92% {
1485
+ opacity: 0.18;
1486
+ }
1487
+
1488
+ 100% {
1489
+ transform: translateY(120vh);
1490
+ opacity: 0;
1491
+ }
1492
+ }