@lolmath/ui 9.4.0 → 9.6.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.
package/dist/index.css CHANGED
@@ -1,185 +1,3 @@
1
- @layer lol {
2
- /* ----- CSS reset ----- */
3
- *,
4
- *::before,
5
- *::after {
6
- box-sizing: border-box;
7
- }
8
-
9
- /* ----- Default CSS variables ----- */
10
-
11
- :root {
12
- color-scheme: dark;
13
-
14
- --lol-z-index-app: 100;
15
- --lol-z-index-modal: 200;
16
- --lol-z-index-popover: 300;
17
- --lol-z-index-overlay: 400;
18
- --lol-z-index-max: 9999;
19
-
20
- --lol-scale: 1;
21
-
22
- --lol-color-blue-100: #cdfafa;
23
- --lol-color-blue-200: #0ac8b9;
24
- --lol-color-blue-300: #0397ab;
25
- --lol-color-blue-400: #005a82;
26
- --lol-color-blue-500: #0a323c;
27
- --lol-color-blue-600: #091428;
28
- --lol-color-blue-700: #0a1428;
29
-
30
- --lol-color-grey-100: #a09b8c;
31
- --lol-color-grey-150: #5b5a56;
32
- --lol-color-grey-200: #3c3c41;
33
- --lol-color-grey-300: #1e2328;
34
- --lol-color-grey-cool: #1e282d;
35
-
36
- --lol-color-hextech-black: #010a13;
37
-
38
- --lol-color-gold-100: #f0e6d2;
39
- --lol-color-gold-200: #c8aa6e;
40
- --lol-color-gold-300: #cdbe91;
41
- --lol-color-gold-400: #c89b3c;
42
- --lol-color-gold-500: #785a28;
43
- --lol-color-gold-600: #463714;
44
- --lol-color-gold-700: #32281e;
45
-
46
- --lol-font-size-h1: 3.3333rem;
47
- --lol-line-height-h1: 3.5rem;
48
- --lol-letter-spacing-h1: 0.05em;
49
- --lol-font-weight-h1: 700;
50
-
51
- --lol-font-size-h2: 2.3333rem;
52
- --lol-line-height-h2: 2.6667rem;
53
- --lol-letter-spacing-h2: 0.05em;
54
- --lol-font-weight-h2: 700;
55
-
56
- --lol-font-size-h3: 1.9167rem;
57
- --lol-line-height-h3: 2.3333rem;
58
- --lol-letter-spacing-h3: 0.05em;
59
- --lol-font-weight-h3: 700;
60
-
61
- --lol-font-size-h4: 1.5rem;
62
- --lol-line-height-h4: 1.8333rem;
63
- --lol-letter-spacing-h4: 0.05em;
64
- --lol-font-weight-h4: 700;
65
-
66
- --lol-font-size-h5: 1.1667rem;
67
- --lol-line-height-h5: 1.5rem;
68
- --lol-letter-spacing-h5: 0.075em;
69
- --lol-font-weight-h5: 700;
70
-
71
- --lol-font-size-label: 0.9167rem;
72
- --lol-line-height-label: 1.3333rem;
73
- --lol-letter-spacing-label: 0.05em;
74
- --lol-font-weight-label: 700;
75
-
76
- --lol-font-size-stat: 1.1667rem;
77
- --lol-line-height-stat: 1.6667rem;
78
- --lol-letter-spacing-stat: 0.05em;
79
- --lol-font-weight-stat: 700;
80
-
81
- --lol-font-size-large-number: 4.75rem;
82
- --lol-line-height-large-number: 5.1667rem;
83
- --lol-letter-spacing-large-number: 0.025em;
84
- --lol-font-weight-large-number: 500;
85
-
86
- --lol-font-size-xs: 0.75rem;
87
- --lol-line-height-xs: 1rem;
88
- --lol-letter-spacing-xs: 0.025em;
89
- --lol-font-weight-xs: 400;
90
-
91
- --lol-font-size-sm: 0.875rem;
92
- --lol-line-height-sm: 1.1025rem;
93
- --lol-letter-spacing-sm: 0.02em;
94
- --lol-font-weight-sm: 400;
95
-
96
- --lol-font-size-base: 1rem;
97
- --lol-line-height-base: 1.24rem;
98
- --lol-letter-spacing-base: 0.01em;
99
- --lol-font-weight-base: 400;
100
-
101
- --lol-font-size-md: 1.1667rem;
102
- --lol-line-height-md: 1.6667rem;
103
- --lol-letter-spacing-md: 0.025em;
104
- --lol-font-weight-md: 400;
105
-
106
- --lol-font-size-lg: 1.5rem;
107
- --lol-line-height-lg: 1.875rem;
108
- --lol-letter-spacing-lg: 0.025em;
109
- --lol-font-weight-lg: 400;
110
-
111
- --lol-font-family-beaufort: "beaufort";
112
- --lol-font-family-spiegel: "spiegel";
113
-
114
- --lol-gradient-gold: linear-gradient(
115
- to top,
116
- var(--lol-color-gold-500),
117
- var(--lol-color-gold-400),
118
- var(--lol-color-gold-200)
119
- );
120
- --lol-gradient-gold-hover: linear-gradient(
121
- to top,
122
- var(--lol-color-gold-400),
123
- var(--lol-color-gold-200),
124
- var(--lol-color-gold-100)
125
- );
126
- --lol-gradient-gold-press: linear-gradient(
127
- to top,
128
- var(--lol-color-gold-600),
129
- var(--lol-color-gold-600),
130
- var(--lol-color-gold-500)
131
- );
132
-
133
- --lol-gradient-grey-300: linear-gradient(
134
- to top,
135
- var(--lol-color-grey-300),
136
- var(--lol-color-grey-300),
137
- var(--lol-color-grey-300)
138
- );
139
- --lol-gradient-grey-focus: linear-gradient(
140
- to top,
141
- var(--lol-color-grey-200),
142
- var(--lol-color-grey-300),
143
- var(--lol-color-grey-300)
144
- );
145
- --lol-gradient-hextech-black: linear-gradient(
146
- to top,
147
- var(--lol-color-hextech-black),
148
- var(--lol-color-hextech-black)
149
- );
150
- --lol-gradient-disabled: linear-gradient(
151
- to top,
152
- var(--lol-color-grey-150),
153
- var(--lol-color-grey-150),
154
- var(--lol-color-grey-150)
155
- );
156
- --lol-gradient-transparent: linear-gradient(
157
- to top,
158
- transparent,
159
- transparent
160
- );
161
-
162
- --lol-gradient-hextech: linear-gradient(
163
- to top,
164
- var(--lol-color-blue-200),
165
- var(--lol-color-blue-400)
166
- );
167
- --lol-gradient-hextech-hover: linear-gradient(
168
- to top,
169
- var(--lol-color-blue-100),
170
- var(--lol-color-blue-300)
171
- );
172
- --lol-gradient-hextech-press: linear-gradient(
173
- to top,
174
- var(--lol-color-blue-500),
175
- var(--lol-color-blue-400)
176
- );
177
-
178
- --lol-form-height-small: 2rem;
179
- --lol-form-height-medium: 2.25rem;
180
- --lol-form-height-large: 2.5rem;
181
- }
182
- }
183
1
  @layer lol {
184
2
  ._breadcrumbs_1gzfl_2 {
185
3
  display: flex;
@@ -2412,12 +2230,14 @@
2412
2230
  }
2413
2231
  }
2414
2232
  @layer lol {
2415
- ._resizableContainer_1iv6r_2 {
2233
+ ._resizableContainer_1ftu2_2 {
2416
2234
  overflow: auto;
2417
2235
  position: relative;
2418
2236
  }
2419
2237
 
2420
- ._table_1iv6r_7 {
2238
+ ._table_1ftu2_7 {
2239
+ --lol-table-indent: 1.125rem;
2240
+
2421
2241
  border-collapse: collapse;
2422
2242
  border-spacing: 0;
2423
2243
  width: 100%;
@@ -2433,9 +2253,38 @@
2433
2253
  outline: 1px solid var(--lol-color-gold-400);
2434
2254
  outline-offset: 0.25rem;
2435
2255
  }
2256
+
2257
+ /* The whole table is the drop target when a drag is dropped on it rather
2258
+ than between two of its rows. */
2259
+ &[data-drop-target] {
2260
+ outline: 1px solid var(--lol-color-gold-400);
2261
+ outline-offset: 0.25rem;
2262
+ }
2263
+ }
2264
+
2265
+ /* Inside a `Virtualizer` the table is a <div> whose rows are placed by the
2266
+ layout, and it scrolls them itself — which is what the virtualizer measures
2267
+ against, so it is the one table that needs a height of its own. */
2268
+ div._table_1ftu2_7 {
2269
+ overflow: auto;
2270
+ position: relative;
2271
+
2272
+ /* That also makes the header stick over the rows as they scroll past. The
2273
+ header cells tile the full width of the row, so frosting each one covers
2274
+ the strip; without it the rows read straight through the labels. The
2275
+ tint is the client's page black, which is what any surface the table
2276
+ sits on is a shade of. */
2277
+ & ._column_1ftu2_46 {
2278
+ background-color: color-mix(
2279
+ in srgb,
2280
+ var(--lol-color-hextech-black),
2281
+ transparent 4%
2282
+ );
2283
+ backdrop-filter: blur(12px);
2284
+ }
2436
2285
  }
2437
2286
 
2438
- ._row_1iv6r_25 {
2287
+ ._row_1ftu2_56 {
2439
2288
  color: var(--lol-color-grey-100);
2440
2289
  outline: none;
2441
2290
  transition: color 0.3s ease;
@@ -2488,13 +2337,28 @@
2488
2337
  cursor: default;
2489
2338
  }
2490
2339
 
2340
+ &[data-dragging] {
2341
+ opacity: 0.4;
2342
+ }
2343
+
2491
2344
  &[data-focus-visible] {
2492
2345
  outline: 1px solid var(--lol-color-gold-400);
2493
2346
  outline-offset: -1px;
2494
2347
  }
2348
+
2349
+ /* A row is only its own drop target when the table takes drops onto rows;
2350
+ reordering draws the `.dropIndicator` between them instead. */
2351
+ &[data-drop-target] {
2352
+ color: var(--lol-color-gold-100);
2353
+ --lol-table-row-highlight: linear-gradient(
2354
+ 90deg,
2355
+ rgb(from var(--lol-color-gold-400) r g b / 0.35),
2356
+ rgb(from var(--lol-color-gold-400) r g b / 0.1)
2357
+ );
2358
+ }
2495
2359
  }
2496
2360
 
2497
- ._cell_1iv6r_84 {
2361
+ ._cell_1ftu2_130 {
2498
2362
  /*
2499
2363
  * Collapsed borders are resolved between neighbours, and Chrome paints the
2500
2364
  * winning hairline once per edge when the losing side is styled `none`. The
@@ -2512,7 +2376,7 @@
2512
2376
  }
2513
2377
  }
2514
2378
 
2515
- ._resizer_1iv6r_102 {
2379
+ ._resizer_1ftu2_148 {
2516
2380
  position: absolute;
2517
2381
  inset-block: 0;
2518
2382
  inset-inline-end: 0;
@@ -2544,7 +2408,7 @@
2544
2408
  }
2545
2409
 
2546
2410
  /* Fixed footprint so toggling the sort direction never shifts the header. */
2547
- ._sortIndicator_1iv6r_134 {
2411
+ ._sortIndicator_1ftu2_180 {
2548
2412
  display: inline-block;
2549
2413
  vertical-align: middle;
2550
2414
  width: 0.5rem;
@@ -2568,7 +2432,7 @@
2568
2432
  }
2569
2433
  }
2570
2434
 
2571
- ._column_1iv6r_158 {
2435
+ ._column_1ftu2_46 {
2572
2436
  position: relative;
2573
2437
  font-family: var(--lol-font-family-beaufort);
2574
2438
  color: var(--lol-color-gold-100);
@@ -2604,15 +2468,15 @@
2604
2468
  color: var(--lol-color-gold-500);
2605
2469
  }
2606
2470
 
2607
- &[data-hovered] ._sortIndicator_1iv6r_134 {
2471
+ &[data-hovered] ._sortIndicator_1ftu2_180 {
2608
2472
  opacity: 0.5;
2609
2473
  }
2610
2474
 
2611
- &[data-sort-direction] ._sortIndicator_1iv6r_134 {
2475
+ &[data-sort-direction] ._sortIndicator_1ftu2_180 {
2612
2476
  opacity: 1;
2613
2477
  }
2614
2478
 
2615
- &[data-sort-direction="descending"] ._sortIndicator_1iv6r_134::after {
2479
+ &[data-sort-direction="descending"] ._sortIndicator_1ftu2_180::after {
2616
2480
  border-width: 0.375rem 0.25rem 0;
2617
2481
  border-top-color: currentColor;
2618
2482
  border-bottom-color: transparent;
@@ -2624,55 +2488,191 @@
2624
2488
  }
2625
2489
  }
2626
2490
 
2627
- ._footer_1iv6r_214 {
2628
- color: var(--lol-color-gold-300);
2629
-
2630
- & ._cell_1iv6r_84 {
2631
- border-top: 1px solid rgb(from var(--lol-color-grey-100) r g b / 0.25);
2632
- }
2491
+ /* The checkbox and the drag handle sit in columns of their own, added by
2492
+ `TableHeader` and `TableRow`. Both shrink to their content: a percentage
2493
+ width smaller than the content is the table layout's way of saying "as
2494
+ narrow as this can go". */
2495
+ ._selectionColumn_1ftu2_264,
2496
+ ._selectionCell_1ftu2_265,
2497
+ ._gripColumn_1ftu2_266,
2498
+ ._gripCell_1ftu2_267 {
2499
+ width: 1%;
2500
+ white-space: nowrap;
2633
2501
  }
2634
2502
 
2635
- ._empty_1iv6r_222 {
2636
- padding: 1rem 0.75rem;
2637
- text-align: center;
2503
+ ._selectionCell_1ftu2_265,
2504
+ ._gripCell_1ftu2_267 {
2505
+ padding-inline-end: 0;
2638
2506
  }
2639
2507
 
2640
- /* React aria renders the empty state in a row it builds itself, so that cell
2641
- never gets `.cell` and keeps the UA's 1px padding. */
2642
- ._table_1iv6r_7 [data-empty] > tr > td {
2508
+ ._grip_1ftu2_266 {
2509
+ /* A <button> we never paint: without this it falls back to the UA's
2510
+ `buttonface` slab, which is grey under `color-scheme: dark`. */
2511
+ appearance: none;
2512
+ border: 0;
2513
+ margin: 0;
2643
2514
  padding: 0;
2644
- }
2515
+ font: inherit;
2516
+ color: inherit;
2645
2517
 
2646
- ._start_1iv6r_233 {
2647
- text-align: start;
2518
+ display: block;
2519
+ width: 0.625rem;
2520
+ height: 0.75rem;
2521
+ outline: none;
2522
+ /* Three hairlines, the client's drag affordance. */
2523
+ background: repeating-linear-gradient(
2524
+ to bottom,
2525
+ currentColor 0 1px,
2526
+ transparent 1px 0.25rem
2527
+ );
2648
2528
  }
2649
2529
 
2650
- ._center_1iv6r_237 {
2651
- text-align: center;
2530
+ /* React aria drags the row itself and leaves the handle inert, so the cursor
2531
+ has to come from the row. */
2532
+ ._table_1ftu2_7[data-allows-dragging] ._row_1ftu2_56 {
2533
+ cursor: grab;
2652
2534
  }
2653
2535
 
2654
- ._end_1iv6r_241 {
2655
- text-align: end;
2536
+ /* The indicator is a row of its own with a single full-width cell, so the
2537
+ line is drawn by a pseudo element that takes up no space of its own. */
2538
+ ._dropIndicator_1ftu2_119 {
2539
+ & > td,
2540
+ & > th {
2541
+ position: relative;
2542
+ }
2543
+
2544
+ &[data-drop-target] > td::after,
2545
+ &[data-drop-target] > th::after {
2546
+ content: "";
2547
+ position: absolute;
2548
+ inset-inline: 0;
2549
+ top: -1px;
2550
+ height: 2px;
2551
+ background-color: var(--lol-color-gold-400);
2552
+ }
2656
2553
  }
2657
- }
2658
- @layer lol {
2659
- ._list_nrxix_2 {
2660
- margin-left: -1rem;
2554
+
2555
+ /* The expand chevron of a `treeColumn` cell, and the indent that puts a
2556
+ nested row under its parent. React aria sets `--table-row-level` on every
2557
+ row, starting at 1. */
2558
+ ._treeContent_1ftu2_327 {
2661
2559
  display: flex;
2560
+ align-items: center;
2561
+ gap: 0.375rem;
2562
+ padding-inline-start: calc(
2563
+ (var(--table-row-level, 1) - 1) *
2564
+ var(--lol-table-indent)
2565
+ );
2662
2566
  }
2663
2567
 
2664
- ._tab_nrxix_7 {
2665
- font-family: var(--lol-font-family-beaufort);
2666
- color: var(--lol-color-gold-300);
2667
- position: relative;
2668
- cursor: pointer;
2669
- user-select: none;
2670
- padding: 0.25rem 1rem;
2671
- font-size: 0.75rem;
2672
- font-weight: 500;
2673
- text-transform: uppercase;
2674
- letter-spacing: 0.1em;
2675
- line-height: 1rem;
2568
+ ._chevron_1ftu2_337 {
2569
+ appearance: none;
2570
+ border: 0;
2571
+ margin: 0;
2572
+ padding: 0;
2573
+ font: inherit;
2574
+ letter-spacing: inherit;
2575
+ color: inherit;
2576
+
2577
+ flex: none;
2578
+ width: 0.5rem;
2579
+ height: 0.75rem;
2580
+ outline: none;
2581
+ cursor: pointer;
2582
+
2583
+ --lol-table-chevron: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAoCAYAAADg+OpoAAABF0lEQVR42r3WMY7CQAxA0R8r2oobUMBB9hTLPegguQJUNHuJLbZb7RU4BvQIiZaKJiNFo0wy8dhYiiJNLD+N5RmlOv9sGYgtsAQajKJOICeg6p69BSQjCMAOOFpDMYIlJhOIGSbAqitSTeQWYQJcgQ3wzMhXY6F1f8CXJ9YfBlcsHm83TAbWXDBJrJtjMvLNFJOJAmaYZBQwwSRzaIoxmXEUijCZecDVmCiuLRVWKy/jgP0CHxmYakchHpm7ArhpoU/gH1hk5DbAUd6BaFqnQuZCamQOVITkQsVIDmSCTEFmyBhkiqQgc2QIckFiyA3pQ65IgNbeSIAuwLcn0m9dCxy8kHgYUlgxMjTeMWaCpP4Z2u59t0IAXn+VXtMKZ5riAAAAAElFTkSuQmCC");
2584
+ background: var(--lol-table-chevron) no-repeat center / contain;
2585
+ transition: rotate 0.15s ease;
2586
+
2587
+ @media (prefers-reduced-motion: reduce) {
2588
+ transition: none;
2589
+ }
2590
+
2591
+ &[data-focus-visible] {
2592
+ outline: 1px solid var(--lol-color-gold-400);
2593
+ outline-offset: 0.125rem;
2594
+ }
2595
+ }
2596
+
2597
+ ._chevronSpacer_1ftu2_366 {
2598
+ flex: none;
2599
+ width: 0.5rem;
2600
+ }
2601
+
2602
+ ._row_1ftu2_56[data-expanded] ._chevron_1ftu2_337 {
2603
+ rotate: 90deg;
2604
+ }
2605
+
2606
+ ._row_1ftu2_56[data-hovered] ._chevron_1ftu2_337,
2607
+ ._chevron_1ftu2_337[data-hovered],
2608
+ ._chevron_1ftu2_337[data-focus-visible] {
2609
+ --lol-table-chevron: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAoCAYAAADg+OpoAAABGElEQVR42r3WO47CMBCA4T+jaCtuQLEcZE+x3IOOxxVIRcM1tlvtPTgBNFQIQUu1TSxFVpw44xlGiiI5o/nk0dhK9bie6IkVMAe2GEWdQA5A1T4bC0gGEIA10FhDMYIlJiOIGSbAZ1ukGsktwgS4AEvglZGvxkLrfoFvT6w7DK5YPN5umPSsuWCSWDfHZOCbKSYjBcwwyShggknm0BRjMuEoFGEy8YCrMVFcWyqsVl7GAfsBPjIw1Y5CPDN3BXDTQl/AHzDLyN0CjbwD0bROhUyF1MgUqAjJhYqRHMgEGYPMkCHIFElB5kgf5ILEkBvShVyRAC28kQCdgaMn0m3dDth7IfEwpLBipG+8Y8wESf0z7Nr33QoB+AdPzF+bRdCP8QAAAABJRU5ErkJggg==");
2610
+ }
2611
+
2612
+ ._row_1ftu2_56[data-disabled] ._chevron_1ftu2_337 {
2613
+ cursor: default;
2614
+ filter: grayscale(100%);
2615
+ }
2616
+
2617
+ ._loadMore_1ftu2_386 > td,
2618
+ ._loadMore_1ftu2_386 > th {
2619
+ padding: 0.5rem;
2620
+ }
2621
+
2622
+ ._spinner_1ftu2_391 {
2623
+ width: 1.5rem;
2624
+ margin-inline: auto;
2625
+ }
2626
+
2627
+ ._footer_1ftu2_396 {
2628
+ color: var(--lol-color-gold-300);
2629
+
2630
+ & ._cell_1ftu2_130 {
2631
+ border-top: 1px solid rgb(from var(--lol-color-grey-100) r g b / 0.25);
2632
+ }
2633
+ }
2634
+
2635
+ ._empty_1ftu2_404 {
2636
+ padding: 1rem 0.75rem;
2637
+ text-align: center;
2638
+ }
2639
+
2640
+ /* React aria renders the empty state in a row it builds itself, so that cell
2641
+ never gets `.cell` and keeps the UA's 1px padding. */
2642
+ ._table_1ftu2_7 [data-empty] > tr > td {
2643
+ padding: 0;
2644
+ }
2645
+
2646
+ ._start_1ftu2_415 {
2647
+ text-align: start;
2648
+ }
2649
+
2650
+ ._center_1ftu2_419 {
2651
+ text-align: center;
2652
+ }
2653
+
2654
+ ._end_1ftu2_423 {
2655
+ text-align: end;
2656
+ }
2657
+ }
2658
+ @layer lol {
2659
+ ._list_nrxix_2 {
2660
+ margin-left: -1rem;
2661
+ display: flex;
2662
+ }
2663
+
2664
+ ._tab_nrxix_7 {
2665
+ font-family: var(--lol-font-family-beaufort);
2666
+ color: var(--lol-color-gold-300);
2667
+ position: relative;
2668
+ cursor: pointer;
2669
+ user-select: none;
2670
+ padding: 0.25rem 1rem;
2671
+ font-size: 0.75rem;
2672
+ font-weight: 500;
2673
+ text-transform: uppercase;
2674
+ letter-spacing: 0.1em;
2675
+ line-height: 1rem;
2676
2676
  outline: none;
2677
2677
 
2678
2678
  &[data-selected] {
@@ -3119,3 +3119,589 @@
3119
3119
  width: 1.5rem;
3120
3120
  }
3121
3121
  }
3122
+ @layer lol {
3123
+ ._table_v9mcp_2 {
3124
+ border-collapse: collapse;
3125
+ border-spacing: 0;
3126
+ width: 100%;
3127
+
3128
+ font-family: var(--lol-font-family-spiegel);
3129
+ font-size: var(--lol-font-size-sm);
3130
+ line-height: var(--lol-line-height-sm);
3131
+ letter-spacing: var(--lol-letter-spacing-sm);
3132
+ font-weight: var(--lol-font-weight-sm);
3133
+ color: var(--lol-color-grey-100);
3134
+ }
3135
+
3136
+ /*
3137
+ * Both headings are set the same way — the client's heading face, in gold
3138
+ * over the grey of the data. What tells them apart is only which edge of the
3139
+ * table they run along.
3140
+ *
3141
+ * The zero-width `solid` on the edges each one leaves alone is the guard the
3142
+ * table's own cells carry: collapsed borders are resolved between
3143
+ * neighbours, and Chrome paints the winning hairline once per edge when the
3144
+ * losing side is styled `none`, so a 25%-opacity line blends twice and comes
3145
+ * out twice as bright.
3146
+ */
3147
+ ._fieldHeader_v9mcp_26,
3148
+ ._recordHeader_v9mcp_27,
3149
+ ._corner_v9mcp_28 {
3150
+ border: 0 solid;
3151
+ }
3152
+
3153
+ ._fieldHeader_v9mcp_26,
3154
+ ._recordHeader_v9mcp_27 {
3155
+ font-family: var(--lol-font-family-beaufort);
3156
+ color: var(--lol-color-gold-100);
3157
+ font-size: 0.75rem;
3158
+ font-weight: 700;
3159
+ letter-spacing: 0.075em;
3160
+ line-height: 1rem;
3161
+ text-transform: uppercase;
3162
+ white-space: nowrap;
3163
+ padding: 0.375rem 0.75rem;
3164
+ }
3165
+
3166
+ /* The field names head their rows, so the hairline that separates the
3167
+ heading from the data runs down the table rather than across it. */
3168
+ ._fieldHeader_v9mcp_26 {
3169
+ text-align: start;
3170
+ border-inline-end: 1px solid
3171
+ rgb(from var(--lol-color-grey-100) r g b / 0.25);
3172
+ /* Shrink to the names: a percentage under the content width is the table
3173
+ layout's way of saying "as narrow as this can go". */
3174
+ width: 1%;
3175
+ }
3176
+
3177
+ ._recordHeader_v9mcp_27 {
3178
+ border-bottom: 1px solid rgb(from var(--lol-color-grey-100) r g b / 0.25);
3179
+ }
3180
+
3181
+ /* The blank corner over the field names carries both hairlines, so the one
3182
+ under the record names and the one beside the field names meet instead of
3183
+ stopping short of each other. */
3184
+ ._corner_v9mcp_28 {
3185
+ padding: 0;
3186
+ border-bottom: 1px solid rgb(from var(--lol-color-grey-100) r g b / 0.25);
3187
+ border-inline-end: 1px solid
3188
+ rgb(from var(--lol-color-grey-100) r g b / 0.25);
3189
+ }
3190
+
3191
+ ._cell_v9mcp_70 {
3192
+ border: 0 solid;
3193
+ padding: 0.375rem 0.75rem;
3194
+ vertical-align: middle;
3195
+ }
3196
+
3197
+ ._start_v9mcp_76 {
3198
+ text-align: start;
3199
+ }
3200
+
3201
+ ._center_v9mcp_80 {
3202
+ text-align: center;
3203
+ }
3204
+
3205
+ ._end_v9mcp_84 {
3206
+ text-align: end;
3207
+ }
3208
+ }
3209
+ @layer lol {
3210
+ /*
3211
+ * "Metal linework as a framing element to support and draw focus towards
3212
+ * key pieces of information." The frame is a one-pixel hairline and nothing
3213
+ * more: a gradient painted into the border box, the plot painted into the
3214
+ * padding box. Anything heavier would compete with the data.
3215
+ */
3216
+ ._frame_7dkb0_8 {
3217
+ display: flex;
3218
+ flex-direction: column;
3219
+ position: relative;
3220
+ border: 1px solid transparent;
3221
+ background:
3222
+ var(--lol-chart-frame-fill) padding-box,
3223
+ var(--lol-chart-frame-border) border-box;
3224
+ color: var(--lol-chart-foreground);
3225
+ font-family: var(--lol-chart-font-body);
3226
+ /* A <figure>: the UA gives it 1em block and 40px inline margins. */
3227
+ margin: 0;
3228
+ padding: 1rem 1.125rem 1.125rem;
3229
+ gap: 0.75rem;
3230
+ }
3231
+
3232
+ /* Unframed: the same type and colours, no metal. For charts that already
3233
+ * sit inside a panel of their own. */
3234
+ ._bare_7dkb0_26 {
3235
+ border-color: transparent;
3236
+ background: none;
3237
+ padding: 0;
3238
+ }
3239
+
3240
+ /*
3241
+ * The diamond is the language's accent piece — it "guides attention toward
3242
+ * key information". Four of them pin the frame's corners to the grid the
3243
+ * square establishes. They are decoration, so they are hidden from the
3244
+ * accessibility tree by the component.
3245
+ */
3246
+ ._corner_7dkb0_38 {
3247
+ position: absolute;
3248
+ width: 5px;
3249
+ height: 5px;
3250
+ rotate: 45deg;
3251
+ border: 1px solid var(--lol-chart-frame-accent);
3252
+ background: var(--lol-chart-surface);
3253
+ }
3254
+
3255
+ ._bare_7dkb0_26 ._corner_7dkb0_38 {
3256
+ display: none;
3257
+ }
3258
+
3259
+ ._cornerTopLeft_7dkb0_51 {
3260
+ top: -3px;
3261
+ left: -3px;
3262
+ }
3263
+
3264
+ ._cornerTopRight_7dkb0_56 {
3265
+ top: -3px;
3266
+ right: -3px;
3267
+ }
3268
+
3269
+ ._cornerBottomLeft_7dkb0_61 {
3270
+ bottom: -3px;
3271
+ left: -3px;
3272
+ }
3273
+
3274
+ ._cornerBottomRight_7dkb0_66 {
3275
+ bottom: -3px;
3276
+ right: -3px;
3277
+ }
3278
+
3279
+ ._header_7dkb0_71 {
3280
+ display: flex;
3281
+ align-items: flex-start;
3282
+ justify-content: space-between;
3283
+ gap: 1rem;
3284
+ }
3285
+
3286
+ ._headings_7dkb0_78 {
3287
+ display: flex;
3288
+ flex-direction: column;
3289
+ gap: 0.125rem;
3290
+ min-width: 0;
3291
+ }
3292
+
3293
+ /* Beaufort, spaced and uppercased — the client's voice for anything that
3294
+ * names a thing rather than measures it. */
3295
+ ._title_7dkb0_87 {
3296
+ margin: 0;
3297
+ font-family: var(--lol-chart-font-display);
3298
+ font-size: var(--lol-font-size-h5, 1.1667rem);
3299
+ line-height: var(--lol-line-height-h5, 1.5);
3300
+ letter-spacing: var(--lol-letter-spacing-h5, 0.075em);
3301
+ font-weight: var(--lol-font-weight-h5, 700);
3302
+ text-transform: uppercase;
3303
+ color: var(--lol-chart-foreground);
3304
+ }
3305
+
3306
+ ._subtitle_7dkb0_98 {
3307
+ margin: 0;
3308
+ font-size: var(--lol-font-size-sm, 0.875rem);
3309
+ line-height: var(--lol-line-height-sm, 1.1025rem);
3310
+ letter-spacing: var(--lol-letter-spacing-sm, 0.02em);
3311
+ color: var(--lol-chart-muted);
3312
+ }
3313
+
3314
+ ._actions_7dkb0_106 {
3315
+ display: flex;
3316
+ align-items: center;
3317
+ gap: 0.5rem;
3318
+ flex-shrink: 0;
3319
+ }
3320
+
3321
+ /* A rule terminated at both ends by a diamond: the same figure the client
3322
+ * draws under every panel heading. */
3323
+ ._rule_7dkb0_115 {
3324
+ display: flex;
3325
+ align-items: center;
3326
+ gap: 0.375rem;
3327
+ }
3328
+
3329
+ ._ruleLine_7dkb0_121 {
3330
+ height: 1px;
3331
+ flex-grow: 1;
3332
+ border: none;
3333
+ margin: 0;
3334
+ background-image: linear-gradient(
3335
+ to right,
3336
+ transparent,
3337
+ var(--lol-chart-frame-rule) 15%,
3338
+ var(--lol-chart-frame-rule) 85%,
3339
+ transparent
3340
+ );
3341
+ }
3342
+
3343
+ ._ruleDiamond_7dkb0_135 {
3344
+ width: 4px;
3345
+ height: 4px;
3346
+ rotate: 45deg;
3347
+ border: 1px solid var(--lol-chart-frame-rule);
3348
+ flex-shrink: 0;
3349
+ }
3350
+
3351
+ ._body_7dkb0_143 {
3352
+ display: flex;
3353
+ flex-direction: column;
3354
+ min-width: 0;
3355
+ }
3356
+
3357
+ ._footer_7dkb0_149 {
3358
+ display: flex;
3359
+ flex-wrap: wrap;
3360
+ align-items: center;
3361
+ justify-content: space-between;
3362
+ gap: 0.5rem 1rem;
3363
+ }
3364
+ }
3365
+ @layer lol {
3366
+ ._legend_1rk8r_2 {
3367
+ display: flex;
3368
+ flex-wrap: wrap;
3369
+ align-items: center;
3370
+ gap: 0.375rem 1.25rem;
3371
+ /* A <ul>: the UA gives it block margins and a list marker. */
3372
+ margin: 0;
3373
+ padding: 0;
3374
+ list-style: none;
3375
+ }
3376
+
3377
+ ._item_1rk8r_13 {
3378
+ display: inline-flex;
3379
+ align-items: center;
3380
+ gap: 0.5rem;
3381
+ /* Never the series colour. Identity comes from the swatch beside the
3382
+ * label; a light teal or gold set as text would not clear contrast. */
3383
+ color: var(--lol-chart-muted);
3384
+ font-size: var(--lol-font-size-sm, 0.875rem);
3385
+ line-height: var(--lol-line-height-sm, 1.1025rem);
3386
+ letter-spacing: var(--lol-letter-spacing-sm, 0.02em);
3387
+ }
3388
+
3389
+ /* The diamond again, at series scale, lit by the hue it stands for. */
3390
+ ._swatch_1rk8r_26 {
3391
+ width: 0.5rem;
3392
+ height: 0.5rem;
3393
+ flex-shrink: 0;
3394
+ rotate: 45deg;
3395
+ background: var(--lol-chart-legend-color);
3396
+ box-shadow: 0 0 5px var(--lol-chart-legend-color);
3397
+ }
3398
+
3399
+ ._square_1rk8r_35 {
3400
+ rotate: none;
3401
+ }
3402
+
3403
+ ._line_1rk8r_39 {
3404
+ width: 0.875rem;
3405
+ height: 2px;
3406
+ rotate: none;
3407
+ box-shadow: none;
3408
+ }
3409
+ }
3410
+ @layer lol {
3411
+ ._chart_1mnqy_2 {
3412
+ width: 100%;
3413
+ min-width: 0;
3414
+ }
3415
+ }
3416
+ @layer lol {
3417
+ /* ----- CSS reset ----- */
3418
+ *,
3419
+ *::before,
3420
+ *::after {
3421
+ box-sizing: border-box;
3422
+ }
3423
+
3424
+ /* ----- Default CSS variables ----- */
3425
+
3426
+ :root {
3427
+ color-scheme: dark;
3428
+
3429
+ --lol-z-index-app: 100;
3430
+ --lol-z-index-modal: 200;
3431
+ --lol-z-index-popover: 300;
3432
+ --lol-z-index-overlay: 400;
3433
+ --lol-z-index-max: 9999;
3434
+
3435
+ --lol-scale: 1;
3436
+
3437
+ --lol-color-blue-100: #cdfafa;
3438
+ --lol-color-blue-200: #0ac8b9;
3439
+ --lol-color-blue-300: #0397ab;
3440
+ --lol-color-blue-400: #005a82;
3441
+ --lol-color-blue-500: #0a323c;
3442
+ --lol-color-blue-600: #091428;
3443
+ --lol-color-blue-700: #0a1428;
3444
+
3445
+ --lol-color-grey-100: #a09b8c;
3446
+ --lol-color-grey-150: #5b5a56;
3447
+ --lol-color-grey-200: #3c3c41;
3448
+ --lol-color-grey-300: #1e2328;
3449
+ --lol-color-grey-cool: #1e282d;
3450
+
3451
+ --lol-color-hextech-black: #010a13;
3452
+
3453
+ --lol-color-gold-100: #f0e6d2;
3454
+ --lol-color-gold-200: #c8aa6e;
3455
+ --lol-color-gold-300: #cdbe91;
3456
+ --lol-color-gold-400: #c89b3c;
3457
+ --lol-color-gold-500: #785a28;
3458
+ --lol-color-gold-600: #463714;
3459
+ --lol-color-gold-700: #32281e;
3460
+
3461
+ --lol-font-size-h1: 3.3333rem;
3462
+ --lol-line-height-h1: 3.5rem;
3463
+ --lol-letter-spacing-h1: 0.05em;
3464
+ --lol-font-weight-h1: 700;
3465
+
3466
+ --lol-font-size-h2: 2.3333rem;
3467
+ --lol-line-height-h2: 2.6667rem;
3468
+ --lol-letter-spacing-h2: 0.05em;
3469
+ --lol-font-weight-h2: 700;
3470
+
3471
+ --lol-font-size-h3: 1.9167rem;
3472
+ --lol-line-height-h3: 2.3333rem;
3473
+ --lol-letter-spacing-h3: 0.05em;
3474
+ --lol-font-weight-h3: 700;
3475
+
3476
+ --lol-font-size-h4: 1.5rem;
3477
+ --lol-line-height-h4: 1.8333rem;
3478
+ --lol-letter-spacing-h4: 0.05em;
3479
+ --lol-font-weight-h4: 700;
3480
+
3481
+ --lol-font-size-h5: 1.1667rem;
3482
+ --lol-line-height-h5: 1.5rem;
3483
+ --lol-letter-spacing-h5: 0.075em;
3484
+ --lol-font-weight-h5: 700;
3485
+
3486
+ --lol-font-size-label: 0.9167rem;
3487
+ --lol-line-height-label: 1.3333rem;
3488
+ --lol-letter-spacing-label: 0.05em;
3489
+ --lol-font-weight-label: 700;
3490
+
3491
+ --lol-font-size-stat: 1.1667rem;
3492
+ --lol-line-height-stat: 1.6667rem;
3493
+ --lol-letter-spacing-stat: 0.05em;
3494
+ --lol-font-weight-stat: 700;
3495
+
3496
+ --lol-font-size-large-number: 4.75rem;
3497
+ --lol-line-height-large-number: 5.1667rem;
3498
+ --lol-letter-spacing-large-number: 0.025em;
3499
+ --lol-font-weight-large-number: 500;
3500
+
3501
+ --lol-font-size-xs: 0.75rem;
3502
+ --lol-line-height-xs: 1rem;
3503
+ --lol-letter-spacing-xs: 0.025em;
3504
+ --lol-font-weight-xs: 400;
3505
+
3506
+ --lol-font-size-sm: 0.875rem;
3507
+ --lol-line-height-sm: 1.1025rem;
3508
+ --lol-letter-spacing-sm: 0.02em;
3509
+ --lol-font-weight-sm: 400;
3510
+
3511
+ --lol-font-size-base: 1rem;
3512
+ --lol-line-height-base: 1.24rem;
3513
+ --lol-letter-spacing-base: 0.01em;
3514
+ --lol-font-weight-base: 400;
3515
+
3516
+ --lol-font-size-md: 1.1667rem;
3517
+ --lol-line-height-md: 1.6667rem;
3518
+ --lol-letter-spacing-md: 0.025em;
3519
+ --lol-font-weight-md: 400;
3520
+
3521
+ --lol-font-size-lg: 1.5rem;
3522
+ --lol-line-height-lg: 1.875rem;
3523
+ --lol-letter-spacing-lg: 0.025em;
3524
+ --lol-font-weight-lg: 400;
3525
+
3526
+ --lol-font-family-beaufort: "beaufort";
3527
+ --lol-font-family-spiegel: "spiegel";
3528
+
3529
+ --lol-gradient-gold: linear-gradient(
3530
+ to top,
3531
+ var(--lol-color-gold-500),
3532
+ var(--lol-color-gold-400),
3533
+ var(--lol-color-gold-200)
3534
+ );
3535
+ --lol-gradient-gold-hover: linear-gradient(
3536
+ to top,
3537
+ var(--lol-color-gold-400),
3538
+ var(--lol-color-gold-200),
3539
+ var(--lol-color-gold-100)
3540
+ );
3541
+ --lol-gradient-gold-press: linear-gradient(
3542
+ to top,
3543
+ var(--lol-color-gold-600),
3544
+ var(--lol-color-gold-600),
3545
+ var(--lol-color-gold-500)
3546
+ );
3547
+
3548
+ --lol-gradient-grey-300: linear-gradient(
3549
+ to top,
3550
+ var(--lol-color-grey-300),
3551
+ var(--lol-color-grey-300),
3552
+ var(--lol-color-grey-300)
3553
+ );
3554
+ --lol-gradient-grey-focus: linear-gradient(
3555
+ to top,
3556
+ var(--lol-color-grey-200),
3557
+ var(--lol-color-grey-300),
3558
+ var(--lol-color-grey-300)
3559
+ );
3560
+ --lol-gradient-hextech-black: linear-gradient(
3561
+ to top,
3562
+ var(--lol-color-hextech-black),
3563
+ var(--lol-color-hextech-black)
3564
+ );
3565
+ --lol-gradient-disabled: linear-gradient(
3566
+ to top,
3567
+ var(--lol-color-grey-150),
3568
+ var(--lol-color-grey-150),
3569
+ var(--lol-color-grey-150)
3570
+ );
3571
+ --lol-gradient-transparent: linear-gradient(
3572
+ to top,
3573
+ transparent,
3574
+ transparent
3575
+ );
3576
+
3577
+ --lol-gradient-hextech: linear-gradient(
3578
+ to top,
3579
+ var(--lol-color-blue-200),
3580
+ var(--lol-color-blue-400)
3581
+ );
3582
+ --lol-gradient-hextech-hover: linear-gradient(
3583
+ to top,
3584
+ var(--lol-color-blue-100),
3585
+ var(--lol-color-blue-300)
3586
+ );
3587
+ --lol-gradient-hextech-press: linear-gradient(
3588
+ to top,
3589
+ var(--lol-color-blue-500),
3590
+ var(--lol-color-blue-400)
3591
+ );
3592
+
3593
+ --lol-form-height-small: 2rem;
3594
+ --lol-form-height-medium: 2.25rem;
3595
+ --lol-form-height-large: 2.5rem;
3596
+
3597
+ /* ----- Charts -----
3598
+ *
3599
+ * Hextech separates the interface into two materials: metal linework
3600
+ * that *frames* information, and hextech magic that *is* it. A chart
3601
+ * maps onto that split exactly — gold for the frame, the axes and the
3602
+ * grid; the magic palette for the marks — so the ink and frame tokens
3603
+ * below are gold and the series tokens are not.
3604
+ *
3605
+ * Used by `@lolmath/ui/charts`, but defined here so a host page can
3606
+ * retune them from one place, and so a chart built by hand against
3607
+ * TanStack Charts picks them up too. */
3608
+
3609
+ /* Parchment gold for what you read, dimmer gold for what merely
3610
+ * orients you. The chart engine paints tick labels at 0.68 opacity on
3611
+ * top of these, so `muted` is deliberately brighter than it looks. */
3612
+ --lol-chart-foreground: var(--lol-color-gold-100);
3613
+ --lol-chart-muted: var(--lol-color-gold-300);
3614
+ /* The grid is painted at 0.11 opacity — it has to start bright to
3615
+ * survive that and still read as gold rather than grey. */
3616
+ --lol-chart-grid: var(--lol-color-gold-200);
3617
+ --lol-chart-surface: var(--lol-color-hextech-black);
3618
+
3619
+ --lol-chart-frame-fill: linear-gradient(
3620
+ 180deg,
3621
+ var(--lol-color-blue-600) 0%,
3622
+ var(--lol-color-hextech-black) 100%
3623
+ );
3624
+ --lol-chart-frame-border: linear-gradient(
3625
+ 180deg,
3626
+ var(--lol-color-gold-500) 0%,
3627
+ var(--lol-color-gold-600) 55%,
3628
+ var(--lol-color-gold-500) 100%
3629
+ );
3630
+ --lol-chart-frame-accent: var(--lol-color-gold-400);
3631
+ --lol-chart-frame-rule: var(--lol-color-gold-500);
3632
+
3633
+ /* Six categorical slots in a fixed order, assigned in sequence and
3634
+ * never cycled. Slots 1 and 2 are the Hextech signature (teal energy,
3635
+ * Piltover gold); the rest reach into the wider Runeterra palette,
3636
+ * because a palette that stayed inside gold and teal could not be told
3637
+ * apart. The set is validated on the hextech-black surface for the
3638
+ * OKLCH lightness band, the chroma floor, protan/deutan separation and
3639
+ * contrast — see the readme before changing a value. */
3640
+ --lol-chart-series-1: #0aa89b;
3641
+ --lol-chart-series-2: #ba8c2e;
3642
+ --lol-chart-series-3: #8e6be8;
3643
+ --lol-chart-series-4: #e8574f;
3644
+ --lol-chart-series-5: #1e8fd5;
3645
+ --lol-chart-series-6: #4fa83a;
3646
+
3647
+ /* Reserved meanings. Never spend these on "series 4". */
3648
+ --lol-chart-positive: #2e9e63;
3649
+ --lol-chart-negative: #d6453c;
3650
+
3651
+ --lol-chart-font-display:
3652
+ var(--lol-font-family-beaufort), "Times New Roman", serif;
3653
+ --lol-chart-font-body:
3654
+ var(--lol-font-family-spiegel), system-ui, sans-serif;
3655
+
3656
+ /* Bridge to TanStack Charts' own defaults, so a chart definition
3657
+ * written by hand — one that never sets a theme — still picks up the
3658
+ * Hextech palette and tooltip. */
3659
+ --ts-chart-1: var(--lol-chart-series-1);
3660
+ --ts-chart-2: var(--lol-chart-series-2);
3661
+ --ts-chart-3: var(--lol-chart-series-3);
3662
+ --ts-chart-4: var(--lol-chart-series-4);
3663
+ --ts-chart-5: var(--lol-chart-series-5);
3664
+ --ts-chart-6: var(--lol-chart-series-6);
3665
+ --ts-chart-focus-fill: var(--lol-chart-surface);
3666
+ --ts-chart-crosshair-marker-fill: var(--lol-chart-surface);
3667
+ --ts-chart-crosshair-label-halo: var(--lol-chart-surface);
3668
+
3669
+ --ts-chart-tooltip-background: var(--lol-chart-surface);
3670
+ --ts-chart-tooltip-border: 1px solid var(--lol-color-gold-500);
3671
+ --ts-chart-tooltip-border-radius: 0;
3672
+ --ts-chart-tooltip-color: var(--lol-chart-foreground);
3673
+ --ts-chart-tooltip-padding: 0.5rem 0.7rem;
3674
+ --ts-chart-tooltip-shadow:
3675
+ 0 0 0 1px var(--lol-color-hextech-black), 0 8px 24px rgb(1 10 19 / 0.75);
3676
+ --ts-chart-tooltip-font: 400 0.8125rem / 1.35 var(--lol-chart-font-body);
3677
+ }
3678
+
3679
+ /*
3680
+ * The scene TanStack Charts paints is plain SVG with stable class names on
3681
+ * it, so the parts CSS does better than JS — line caps, the magic glow —
3682
+ * are done here. `[data-lol-chart]` is set by `HextechChart`; nothing
3683
+ * outside a Hextech chart is touched.
3684
+ */
3685
+ [data-lol-chart] {
3686
+ font-family: var(--lol-chart-font-body);
3687
+ color: var(--lol-chart-foreground);
3688
+ }
3689
+
3690
+ [data-lol-chart] .ts-chart__line {
3691
+ stroke-linecap: round;
3692
+ stroke-linejoin: round;
3693
+ }
3694
+
3695
+ /*
3696
+ * "Its brightest executions are reserved for pivotal moments." The glow is
3697
+ * the one place the marks are allowed to be loud, so it stays faint.
3698
+ */
3699
+ [data-lol-chart-glow="true"] .ts-chart__line,
3700
+ [data-lol-chart-glow="true"] .ts-chart__area {
3701
+ filter: drop-shadow(0 0 3px rgb(10 168 155 / 0.18));
3702
+ }
3703
+
3704
+ [data-lol-chart] .ts-chart__crosshair {
3705
+ pointer-events: none;
3706
+ }
3707
+ }