@knpkv/herdr-usage 0.0.0-stage → 0.1.1

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 (76) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -2
  3. package/dist/app.d.ts +18 -0
  4. package/dist/app.d.ts.map +1 -0
  5. package/dist/app.js +77 -0
  6. package/dist/app.js.map +1 -0
  7. package/dist/bin.d.ts +3 -0
  8. package/dist/bin.d.ts.map +1 -0
  9. package/dist/bin.js +24 -0
  10. package/dist/bin.js.map +1 -0
  11. package/dist/client/client.css +2 -0
  12. package/dist/client/client.css.map +7 -0
  13. package/dist/client/client.js +180 -0
  14. package/dist/client/client.js.map +7 -0
  15. package/dist/client.d.ts +3 -0
  16. package/dist/client.d.ts.map +1 -0
  17. package/dist/client.js +88 -0
  18. package/dist/client.js.map +1 -0
  19. package/dist/host/failure.d.ts +15 -0
  20. package/dist/host/failure.d.ts.map +1 -0
  21. package/dist/host/failure.js +44 -0
  22. package/dist/host/failure.js.map +1 -0
  23. package/dist/host/limits.d.ts +59 -0
  24. package/dist/host/limits.d.ts.map +1 -0
  25. package/dist/host/limits.js +96 -0
  26. package/dist/host/limits.js.map +1 -0
  27. package/dist/host/usage.d.ts +93 -0
  28. package/dist/host/usage.d.ts.map +1 -0
  29. package/dist/host/usage.js +95 -0
  30. package/dist/host/usage.js.map +1 -0
  31. package/dist/host.d.ts +12 -0
  32. package/dist/host.d.ts.map +1 -0
  33. package/dist/host.js +12 -0
  34. package/dist/host.js.map +1 -0
  35. package/dist/options.d.ts +24 -0
  36. package/dist/options.d.ts.map +1 -0
  37. package/dist/options.js +28 -0
  38. package/dist/options.js.map +1 -0
  39. package/dist/selection.d.ts +8 -0
  40. package/dist/selection.d.ts.map +1 -0
  41. package/dist/selection.js +8 -0
  42. package/dist/selection.js.map +1 -0
  43. package/dist/views/usage-empty-art.d.ts +4 -0
  44. package/dist/views/usage-empty-art.d.ts.map +1 -0
  45. package/dist/views/usage-empty-art.js +8 -0
  46. package/dist/views/usage-empty-art.js.map +1 -0
  47. package/dist/views/usage-limits-chart-view.d.ts +12 -0
  48. package/dist/views/usage-limits-chart-view.d.ts.map +1 -0
  49. package/dist/views/usage-limits-chart-view.js +8 -0
  50. package/dist/views/usage-limits-chart-view.js.map +1 -0
  51. package/dist/views/usage-limits-chart.d.ts +28 -0
  52. package/dist/views/usage-limits-chart.d.ts.map +1 -0
  53. package/dist/views/usage-limits-chart.js +50 -0
  54. package/dist/views/usage-limits-chart.js.map +1 -0
  55. package/dist/views/usage-limits-page.d.ts +61 -0
  56. package/dist/views/usage-limits-page.d.ts.map +1 -0
  57. package/dist/views/usage-limits-page.js +275 -0
  58. package/dist/views/usage-limits-page.js.map +1 -0
  59. package/dist/views/usage-limits-view.d.ts +20 -0
  60. package/dist/views/usage-limits-view.d.ts.map +1 -0
  61. package/dist/views/usage-limits-view.js +36 -0
  62. package/dist/views/usage-limits-view.js.map +1 -0
  63. package/dist/views/usage-page.d.ts +53 -0
  64. package/dist/views/usage-page.d.ts.map +1 -0
  65. package/dist/views/usage-page.js +242 -0
  66. package/dist/views/usage-page.js.map +1 -0
  67. package/dist/views/usage-selection.d.ts +24 -0
  68. package/dist/views/usage-selection.d.ts.map +1 -0
  69. package/dist/views/usage-selection.js +51 -0
  70. package/dist/views/usage-selection.js.map +1 -0
  71. package/dist/views/views.css +1034 -0
  72. package/dist/views.d.ts +13 -0
  73. package/dist/views.d.ts.map +1 -0
  74. package/dist/views.js +13 -0
  75. package/dist/views.js.map +1 -0
  76. package/package.json +90 -3
@@ -0,0 +1,1034 @@
1
+ @layer fleet {
2
+ :where([data-app="usage"]) .usage-details {
3
+ --usage-gutter-start: max(var(--rly-space-40), env(safe-area-inset-left, 0px));
4
+ --usage-gutter-end: max(var(--rly-space-40), env(safe-area-inset-right, 0px));
5
+ container-type: inline-size;
6
+ display: grid;
7
+ align-content: start;
8
+ gap: var(--rly-space-24);
9
+ min-inline-size: 0;
10
+ padding-block: 0 var(--rly-space-40);
11
+ padding-inline: var(--usage-gutter-start) var(--usage-gutter-end);
12
+ color: var(--rly-color-text-1);
13
+ }
14
+
15
+ :where([data-app="usage"]) .usage-details[data-usage-page="by-tool"] {
16
+ gap: var(--rly-space-20);
17
+ }
18
+
19
+ :where([data-app="usage"]) .usage-details h1,
20
+ :where([data-app="usage"]) .usage-details h2,
21
+ :where([data-app="usage"]) .usage-details p,
22
+ :where([data-app="usage"]) .usage-details ul {
23
+ margin: 0;
24
+ }
25
+
26
+ :where([data-app="usage"]) .usage-by-tool-updating {
27
+ gap: var(--rly-space-8);
28
+ line-height: 1.5;
29
+ margin-block-start: -0.25rem;
30
+ font-size: 0.8125rem;
31
+ font-weight: 430;
32
+ }
33
+
34
+ :where([data-app="usage"]) .usage-by-tool-notice {
35
+ display: flex;
36
+ flex-wrap: wrap;
37
+ align-items: center;
38
+ justify-content: space-between;
39
+ gap: 0.6rem var(--rly-space-16);
40
+ padding: var(--rly-space-12) var(--rly-space-16);
41
+ border: 1px solid var(--rly-color-border-1);
42
+ border-radius: var(--rly-radius-group);
43
+ background: var(--rly-color-surface-1);
44
+ font-weight: 430;
45
+ }
46
+
47
+ :where([data-app="usage"]) .usage-by-tool-notice > div {
48
+ display: grid;
49
+ gap: 0.2rem;
50
+ min-inline-size: 0;
51
+ }
52
+
53
+ :where([data-app="usage"]) .usage-by-tool-notice > div > span:last-child {
54
+ font-size: 0.875rem;
55
+ line-height: 1.5;
56
+ }
57
+
58
+ :where([data-app="usage"]) .usage-details .usage-by-tool-notice time {
59
+ color: inherit;
60
+ }
61
+
62
+ :where([data-app="usage"]) .usage-by-tool-notice button {
63
+ min-block-size: 2.25rem;
64
+ font-size: 1rem;
65
+ font-weight: 430;
66
+ line-height: 1.5;
67
+ }
68
+
69
+ :where([data-app="usage"]) .usage-by-tool-updating svg {
70
+ inline-size: 0.75rem;
71
+ block-size: 0.75rem;
72
+ }
73
+
74
+ :where([data-app="usage"]) .usage-details-intro,
75
+ :where([data-app="usage"]) .usage-details-section,
76
+ :where([data-app="usage"]) .usage-details-footer {
77
+ display: grid;
78
+ gap: var(--rly-space-12);
79
+ min-inline-size: 0;
80
+ }
81
+
82
+ :where([data-app="usage"]) .usage-details h1 {
83
+ font-size: 1.75rem;
84
+ line-height: 1.2;
85
+ font-weight: 620;
86
+ letter-spacing: -0.035em;
87
+ }
88
+
89
+ :where([data-app="usage"]) .usage-details h2 {
90
+ font-size: 1.125rem;
91
+ line-height: 1.4;
92
+ font-weight: 600;
93
+ }
94
+
95
+ :where([data-app="usage"]) .usage-details p,
96
+ :where([data-app="usage"]) .usage-details small,
97
+ :where([data-app="usage"]) .usage-details time,
98
+ :where([data-app="usage"]) .usage-details-controls > span {
99
+ color: var(--rly-color-text-2);
100
+ }
101
+
102
+ :where([data-app="usage"]) .usage-details-mast {
103
+ display: contents;
104
+ }
105
+
106
+ :where([data-app="usage"])
107
+ .usage-details:is([data-usage-page="by-tool"], [data-usage-page="limits"])
108
+ .usage-details-mast {
109
+ display: grid;
110
+ gap: 0.9rem;
111
+ margin-inline: calc(-1 * var(--usage-gutter-start)) calc(-1 * var(--usage-gutter-end));
112
+ padding-inline: var(--usage-gutter-start) var(--usage-gutter-end);
113
+ border-block-end: 1px solid var(--rly-color-border-1);
114
+ }
115
+
116
+ :where([data-app="usage"])
117
+ .usage-details:is([data-usage-page="by-tool"], [data-usage-page="limits"])
118
+ .usage-details-intro {
119
+ gap: 0;
120
+ line-height: 1.5;
121
+ }
122
+
123
+ :where([data-app="usage"])
124
+ .usage-details:is([data-usage-page="by-tool"], [data-usage-page="limits"])
125
+ .usage-details-tabs {
126
+ gap: var(--rly-space-8);
127
+ margin-block-end: -1px;
128
+ border: 0;
129
+ font: 430 0.9375rem / 1.5 var(--rly-font-ui);
130
+ }
131
+
132
+ :where([data-app="usage"])
133
+ .usage-details:is([data-usage-page="by-tool"], [data-usage-page="limits"])
134
+ .usage-details-tabs
135
+ a {
136
+ padding-inline: var(--rly-space-4);
137
+ }
138
+
139
+ :where([data-app="usage"])
140
+ .usage-details:is([data-usage-page="by-tool"], [data-usage-page="limits"])
141
+ .usage-details-tabs
142
+ a[aria-current="page"] {
143
+ font-weight: 620;
144
+ }
145
+
146
+ :where([data-app="usage"]) .usage-details-intro {
147
+ gap: var(--rly-space-4);
148
+ padding-block: var(--rly-space-24) 0;
149
+ }
150
+
151
+ :where([data-app="usage"]) .usage-details-intro > p {
152
+ font-size: 0.9375rem;
153
+ }
154
+
155
+ :where([data-app="usage"]) .usage-details-tabs {
156
+ display: flex;
157
+ gap: var(--rly-space-24);
158
+ border-block-end: 1px solid var(--rly-color-border-1);
159
+ }
160
+
161
+ :where([data-app="usage"]) .usage-details-tabs a {
162
+ display: inline-flex;
163
+ align-items: center;
164
+ min-block-size: 2.75rem;
165
+ color: var(--rly-color-text-2);
166
+ text-decoration: none;
167
+ padding-block: var(--rly-space-8);
168
+ }
169
+
170
+ :where([data-app="usage"]) .usage-details-tabs a[aria-current="page"] {
171
+ color: var(--rly-color-text-1);
172
+ font-weight: 600;
173
+ background: linear-gradient(var(--rly-color-text-1), var(--rly-color-text-1)) center bottom / 100% 2px no-repeat;
174
+ }
175
+
176
+ :where([data-app="usage"]) .usage-by-tool {
177
+ gap: var(--rly-space-20);
178
+ font-weight: 430;
179
+ line-height: 1.5;
180
+ }
181
+
182
+ :where([data-app="usage"]) .usage-by-tool-reading {
183
+ display: grid;
184
+ gap: 0.1rem;
185
+ }
186
+
187
+ :where([data-app="usage"]) .usage-by-tool p {
188
+ font-size: 0.8125rem;
189
+ }
190
+
191
+ :where([data-app="usage"]) .usage-by-tool-total {
192
+ font-size: 1.75rem;
193
+ font-weight: 650;
194
+ letter-spacing: -0.03em;
195
+ }
196
+
197
+ :where([data-app="usage"]) .usage-by-tool table {
198
+ display: block;
199
+ border: 1px solid var(--rly-color-border-1);
200
+ border-radius: var(--rly-radius-group);
201
+ background: var(--rly-color-surface-1);
202
+ }
203
+
204
+ :where([data-app="usage"]) .usage-by-tool tbody {
205
+ display: block;
206
+ }
207
+
208
+ :where([data-app="usage"]) .usage-by-tool tr {
209
+ display: grid;
210
+ grid-template-columns: minmax(0, 1fr) auto auto;
211
+ gap: 0.4rem var(--rly-space-16);
212
+ align-items: center;
213
+ padding-block: 0.75rem;
214
+ padding-inline: 0.9rem;
215
+ }
216
+
217
+ :where([data-app="usage"]) .usage-by-tool tr + tr {
218
+ border-block-start: 1px solid var(--rly-color-border-1);
219
+ }
220
+
221
+ :where([data-app="usage"]) .usage-by-tool th,
222
+ :where([data-app="usage"]) .usage-by-tool td {
223
+ min-inline-size: 0;
224
+ padding: 0;
225
+ text-align: start;
226
+ overflow-wrap: break-word;
227
+ }
228
+
229
+ :where([data-app="usage"]) .usage-by-tool th {
230
+ font-size: 0.9375rem;
231
+ font-weight: 430;
232
+ }
233
+
234
+ :where([data-app="usage"]) .usage-by-tool td {
235
+ font-variant-numeric: tabular-nums;
236
+ font-weight: 620;
237
+ }
238
+
239
+ :where([data-app="usage"]) .usage-by-tool td:nth-child(3) {
240
+ font-size: 0.8125rem;
241
+ font-weight: 400;
242
+ color: var(--rly-color-text-2);
243
+ text-align: end;
244
+ }
245
+
246
+ :where([data-app="usage"]) .usage-by-tool .usage-by-tool-track {
247
+ grid-column: 1 / -1;
248
+ line-height: 0;
249
+ }
250
+
251
+ :where([data-app="usage"]) .usage-by-tool progress {
252
+ display: block;
253
+ inline-size: 100%;
254
+ block-size: 0.375rem;
255
+ border: 0;
256
+ border-radius: 0.1875rem;
257
+ appearance: none;
258
+ background: var(--rly-color-surface-3);
259
+ color: var(--rly-color-text-2);
260
+ }
261
+
262
+ :where([data-app="usage"]) .usage-by-tool progress::-webkit-progress-bar {
263
+ border-radius: 0.1875rem;
264
+ background: var(--rly-color-surface-3);
265
+ }
266
+
267
+ :where([data-app="usage"]) .usage-by-tool progress::-webkit-progress-value {
268
+ border-radius: 0.1875rem;
269
+ background: var(--rly-color-text-2);
270
+ }
271
+
272
+ :where([data-app="usage"]) .usage-by-tool progress::-moz-progress-bar {
273
+ border-radius: 0.1875rem;
274
+ background: var(--rly-color-text-2);
275
+ }
276
+
277
+ :where([data-app="usage"]) .usage-by-tool-heading,
278
+ :where([data-app="usage"]) .usage-by-tool thead {
279
+ position: absolute;
280
+ inline-size: 1px;
281
+ block-size: 1px;
282
+ padding: 0;
283
+ overflow: clip;
284
+ clip-path: inset(50%);
285
+ }
286
+
287
+ :where([data-app="usage"]) .usage-details[data-usage-page="by-tool"] .usage-details-footer {
288
+ display: none;
289
+ }
290
+
291
+ :where([data-app="usage"]) .usage-details-controls {
292
+ display: flex;
293
+ flex-wrap: wrap;
294
+ align-items: center;
295
+ gap: var(--rly-space-12) var(--rly-space-24);
296
+ }
297
+
298
+ :where([data-app="usage"]) .usage-details-controls label {
299
+ min-inline-size: 0;
300
+ max-inline-size: 100%;
301
+ display: flex;
302
+ align-items: center;
303
+ gap: var(--rly-space-8);
304
+ }
305
+
306
+ :where([data-app="usage"]) .usage-details-controls [role="radiogroup"] {
307
+ gap: var(--rly-space-8);
308
+ }
309
+
310
+ :where([data-app="usage"]) .usage-details-controls [role="radio"] {
311
+ min-block-size: 2.75rem;
312
+ border: 1px solid var(--rly-color-border-1);
313
+ border-radius: var(--rly-radius-field);
314
+ padding-inline: var(--rly-space-12);
315
+ background: var(--rly-color-surface-1);
316
+ font-size: 0.8125rem;
317
+ font-weight: 600;
318
+ }
319
+
320
+ :where([data-app="usage"]) .usage-details-controls [role="radio"][aria-checked="true"] {
321
+ background: var(--rly-color-text-1);
322
+ color: var(--rly-color-surface-1);
323
+ }
324
+
325
+ :where([data-app="usage"]) .usage-details-controls select {
326
+ min-inline-size: 0;
327
+ min-block-size: 2.75rem;
328
+ max-inline-size: 100%;
329
+ border: 1px solid var(--rly-color-border-1);
330
+ border-radius: var(--rly-radius-field);
331
+ padding-inline: var(--rly-space-12);
332
+ background: var(--rly-color-surface-1);
333
+ color: var(--rly-color-text-1);
334
+ font: inherit;
335
+ font-size: max(16px, 1rem);
336
+ }
337
+
338
+ :where([data-app="usage"]) .usage-details[data-usage-page="by-tool"] .usage-details-controls {
339
+ gap: var(--rly-space-8) var(--rly-space-16);
340
+ padding-block-start: var(--rly-space-4);
341
+ justify-content: space-between;
342
+ }
343
+
344
+ :where([data-app="usage"]) .usage-details[data-usage-page="by-tool"] .usage-details-controls label {
345
+ position: relative;
346
+ gap: 0.4rem;
347
+ font-size: 0.875rem;
348
+ font-weight: 430;
349
+ }
350
+
351
+ :where([data-app="usage"]) .usage-details[data-usage-page="by-tool"] .usage-details-controls select {
352
+ appearance: none;
353
+ field-sizing: content;
354
+ min-block-size: 2.5rem;
355
+ padding-inline: 0.7rem 1.775rem;
356
+ border-radius: var(--rly-radius-control);
357
+ font: 620 0.875rem / 1.5 var(--rly-font-ui);
358
+ }
359
+
360
+ :where([data-app="usage"]) .usage-details[data-usage-page="by-tool"] .usage-details-controls label .superapp-icon {
361
+ position: absolute;
362
+ inset-inline-end: 0.55rem;
363
+ inline-size: 0.875rem;
364
+ block-size: 0.875rem;
365
+ pointer-events: none;
366
+ }
367
+
368
+ :where([data-app="usage"]) .usage-details[data-usage-page="by-tool"] .usage-details-controls [role="radiogroup"] {
369
+ gap: 0;
370
+ border: 1px solid var(--rly-color-border-1);
371
+ border-radius: var(--rly-radius-control);
372
+ overflow: clip;
373
+ min-inline-size: 0;
374
+ }
375
+
376
+ :where([data-app="usage"]) .usage-details[data-usage-page="by-tool"] .usage-details-controls [role="radio"] {
377
+ min-block-size: 2.5rem;
378
+ min-inline-size: 0;
379
+ border: 0;
380
+ border-radius: 0;
381
+ padding-inline: 0.75rem;
382
+ background: transparent;
383
+ font: 430 0.8125rem / 1.5 var(--rly-font-ui);
384
+ white-space: normal;
385
+ }
386
+
387
+ :where([data-app="usage"])
388
+ .usage-details[data-usage-page="by-tool"]
389
+ .usage-details-controls
390
+ [role="radio"]
391
+ + [role="radio"] {
392
+ border-inline-start: 1px solid var(--rly-color-border-1);
393
+ }
394
+
395
+ :where([data-app="usage"])
396
+ .usage-details[data-usage-page="by-tool"]
397
+ .usage-details-controls
398
+ [role="radio"][aria-checked="true"] {
399
+ color: var(--rly-color-text-1);
400
+ background: var(--rly-color-surface-2);
401
+ font-weight: 620;
402
+ }
403
+
404
+ :where([data-app="usage"]) .usage-details[data-usage-page="by-tool"] .usage-details-time-zone {
405
+ position: absolute;
406
+ inline-size: 1px;
407
+ block-size: 1px;
408
+ overflow: clip;
409
+ clip-path: inset(50%);
410
+ }
411
+
412
+ :where([data-app="usage"]) .usage-details .usage-tab {
413
+ padding: 0;
414
+ max-inline-size: none;
415
+ inline-size: 100%;
416
+ margin-inline: 0;
417
+ }
418
+
419
+ :where([data-app="usage"]) .usage-details .usage-tab-panel,
420
+ :where([data-app="usage"]) .usage-details .usage-tab-host,
421
+ :where([data-app="usage"]) .usage-details-section li {
422
+ border: 1px solid var(--rly-color-border-1);
423
+ border-radius: var(--rly-radius-control);
424
+ padding: var(--rly-space-16);
425
+ background: var(--rly-color-surface-1);
426
+ }
427
+
428
+ :where([data-app="usage"]) .usage-details-section ul {
429
+ display: grid;
430
+ gap: var(--rly-space-12);
431
+ list-style: none;
432
+ padding: 0;
433
+ }
434
+
435
+ :where([data-app="usage"]) .usage-details-section li {
436
+ display: flex;
437
+ justify-content: space-between;
438
+ align-items: center;
439
+ gap: var(--rly-space-16);
440
+ }
441
+
442
+ :where([data-app="usage"]) .usage-details-section li > span {
443
+ display: grid;
444
+ grid-template-columns: minmax(0, 1fr);
445
+ gap: var(--rly-space-4);
446
+ min-inline-size: 0;
447
+ overflow-wrap: break-word;
448
+ }
449
+
450
+ :where([data-app="usage"]) .usage-details-section li > strong {
451
+ flex: none;
452
+ font-variant-numeric: tabular-nums;
453
+ }
454
+
455
+ :where([data-app="usage"]) .usage-details-footer {
456
+ border-block-start: 1px solid var(--rly-color-border-1);
457
+ padding-block-start: var(--rly-space-16);
458
+ font-size: 0.875rem;
459
+ }
460
+
461
+ :where([data-app="usage"]) .usage-details a {
462
+ color: var(--rly-color-text-1);
463
+ }
464
+
465
+ :where([data-app="usage"])
466
+ .usage-details:is([data-usage-page="by-tool"], [data-usage-page="limits"])
467
+ .usage-details-tabs
468
+ a:not([aria-current="page"]) {
469
+ color: var(--rly-color-text-2);
470
+ }
471
+
472
+ :where([data-app="usage"]) .usage-details-footer > a,
473
+ :where([data-app="usage"]) .usage-details-controls > a {
474
+ display: inline-flex;
475
+ align-items: center;
476
+ min-block-size: 2.75rem;
477
+ inline-size: fit-content;
478
+ }
479
+
480
+ :where([data-app="usage"]) .usage-details a:focus-visible,
481
+ :where([data-app="usage"]) .usage-details select:focus-visible {
482
+ outline: var(--rly-focus-ring-width) solid var(--rly-color-focus);
483
+ outline-offset: var(--rly-focus-ring-offset);
484
+ }
485
+
486
+ :where([data-app="usage"]) .usage-details a:active {
487
+ opacity: 0.75;
488
+ }
489
+
490
+ @media (hover: hover) and (pointer: fine) {
491
+ :where([data-app="usage"]) .usage-details a:hover {
492
+ text-decoration: underline;
493
+ }
494
+ }
495
+
496
+ @media (max-width: 40rem) {
497
+ :where([data-app="usage"]) .usage-details {
498
+ --usage-gutter-start: max(var(--rly-space-16), env(safe-area-inset-left, 0px));
499
+ --usage-gutter-end: max(var(--rly-space-16), env(safe-area-inset-right, 0px));
500
+ gap: var(--rly-space-20);
501
+ }
502
+
503
+ :where([data-app="usage"]) .usage-details[data-usage-page="by-tool"] {
504
+ gap: var(--rly-space-16);
505
+ }
506
+
507
+ :where([data-app="usage"]) .usage-by-tool-notice,
508
+ :where([data-app="usage"]) .usage-by-tool-updating {
509
+ margin-block-end: var(--rly-space-4);
510
+ }
511
+
512
+ :where([data-app="usage"]) .usage-by-tool-notice button {
513
+ min-block-size: 2.75rem;
514
+ }
515
+
516
+ /* Rule 45 refs: the title and purpose under the breadcrumb, tabs 0.9rem below, on the canvas. */
517
+ :where([data-app="usage"])
518
+ .usage-details:is([data-usage-page="by-tool"], [data-usage-page="limits"])
519
+ .usage-details-mast {
520
+ gap: 0.9rem;
521
+ }
522
+
523
+ :where([data-app="usage"]) .usage-details-intro,
524
+ :where([data-app="usage"])
525
+ .usage-details:is([data-usage-page="by-tool"], [data-usage-page="limits"])
526
+ .usage-details-intro {
527
+ gap: var(--rly-space-4);
528
+ padding-block-start: var(--rly-space-12);
529
+ }
530
+
531
+ :where([data-app="usage"])
532
+ .usage-details:is([data-usage-page="by-tool"], [data-usage-page="limits"])
533
+ .usage-details-tabs {
534
+ gap: 0;
535
+ margin-inline: calc(-1 * var(--usage-gutter-start)) calc(-1 * var(--usage-gutter-end));
536
+ padding-inline: max(var(--rly-space-8), env(safe-area-inset-left, 0px))
537
+ max(var(--rly-space-8), env(safe-area-inset-right, 0px));
538
+ }
539
+
540
+ :where([data-app="usage"])
541
+ .usage-details:is([data-usage-page="by-tool"], [data-usage-page="limits"])
542
+ .usage-details-tabs
543
+ a {
544
+ padding-inline: var(--rly-space-12);
545
+ }
546
+
547
+ :where([data-app="usage"]) .usage-details[data-usage-page="by-tool"] .usage-details-controls {
548
+ padding-block-start: 0;
549
+ padding-block-end: var(--rly-space-4);
550
+ }
551
+
552
+ :where([data-app="usage"]) .usage-details[data-usage-page="by-tool"] .usage-details-controls [role="radiogroup"] {
553
+ flex: 1 1 13rem;
554
+ min-inline-size: min(100%, 13rem);
555
+ }
556
+
557
+ :where([data-app="usage"]) .usage-details[data-usage-page="by-tool"] .usage-details-controls select,
558
+ :where([data-app="usage"]) .usage-details[data-usage-page="by-tool"] .usage-details-controls [role="radio"] {
559
+ min-block-size: 2.75rem;
560
+ }
561
+
562
+ :where([data-app="usage"]) .usage-details[data-usage-page="by-tool"] .usage-details-controls [role="radio"] {
563
+ flex: 1;
564
+ }
565
+ }
566
+
567
+ @media (forced-colors: active) {
568
+ :where([data-app="usage"]) .usage-details-controls [role="radio"][aria-checked="true"],
569
+ :where([data-app="usage"])
570
+ .usage-details[data-usage-page="by-tool"]
571
+ .usage-details-controls
572
+ [role="radio"][aria-checked="true"] {
573
+ forced-color-adjust: none;
574
+ background: Highlight;
575
+ color: HighlightText;
576
+ border-color: Highlight;
577
+ }
578
+
579
+ :where([data-app="usage"]) .usage-details-tabs a[aria-current="page"] {
580
+ background: none;
581
+ text-decoration: underline;
582
+ }
583
+ }
584
+
585
+ /* Limits (06 Usage reference): the verdict, one card per tool, the token chart and the footnote. */
586
+ :where([data-app="usage"]) .usage-details[data-usage-page="limits"] {
587
+ gap: 2rem;
588
+ padding-block-end: 1rem;
589
+ font-weight: 430;
590
+ line-height: 1.5;
591
+ }
592
+
593
+ :where([data-app="usage"]) .usage-limits-summary {
594
+ display: grid;
595
+ gap: 0.4rem;
596
+ max-inline-size: 46em;
597
+ }
598
+
599
+ :where([data-app="usage"]) .usage-limits-summary h2 {
600
+ margin: 0;
601
+ font-size: 1.9rem;
602
+ font-weight: 620;
603
+ letter-spacing: -0.03em;
604
+ line-height: 1.2;
605
+ text-wrap: balance;
606
+ }
607
+
608
+ :where([data-app="usage"]) .usage-limits-summary p,
609
+ :where([data-app="usage"]) .usage-limits-card p,
610
+ :where([data-app="usage"]) .usage-limits-card dl {
611
+ margin: 0;
612
+ }
613
+
614
+ :where([data-app="usage"]) .usage-limits-summary p {
615
+ color: var(--rly-color-text-2);
616
+ }
617
+
618
+ :where([data-app="usage"]) .usage-limits-notices {
619
+ display: grid;
620
+ gap: 2rem;
621
+ }
622
+
623
+ :where([data-app="usage"]) .usage-limits-cards {
624
+ display: grid;
625
+ grid-template-columns: repeat(2, minmax(0, 1fr));
626
+ gap: 1rem;
627
+ min-inline-size: 0;
628
+ }
629
+
630
+ :where([data-app="usage"]) .usage-limits-card {
631
+ display: grid;
632
+ gap: 0.85rem;
633
+ align-content: start;
634
+ padding-block: 1.1rem;
635
+ padding-inline: 1.15rem;
636
+ min-inline-size: 0;
637
+ border: 1px solid var(--rly-color-border-1);
638
+ border-radius: var(--rly-radius-group);
639
+ background: var(--rly-color-surface-1);
640
+ }
641
+
642
+ :where([data-app="usage"]) .usage-limits-card-head {
643
+ display: flex;
644
+ flex-wrap: wrap;
645
+ gap: 0.25rem 1rem;
646
+ align-items: baseline;
647
+ justify-content: space-between;
648
+ }
649
+
650
+ :where([data-app="usage"]) .usage-limits-card-head h2 {
651
+ margin: 0;
652
+ font-size: 1.25rem;
653
+ font-weight: 620;
654
+ letter-spacing: -0.02em;
655
+ line-height: 1.5;
656
+ }
657
+
658
+ :where([data-app="usage"]) .usage-limits-card-head small {
659
+ font-size: 0.75rem;
660
+ color: var(--rly-color-text-2);
661
+ }
662
+
663
+ :where([data-app="usage"]) .usage-limits-figure {
664
+ display: flex;
665
+ flex-wrap: wrap;
666
+ gap: 0.25rem 0.75rem;
667
+ align-items: baseline;
668
+ }
669
+
670
+ :where([data-app="usage"]) .usage-limits-figure b {
671
+ font-size: 2.6rem;
672
+ font-weight: 620;
673
+ letter-spacing: -0.04em;
674
+ line-height: 1;
675
+ font-variant-numeric: tabular-nums;
676
+ }
677
+
678
+ :where([data-app="usage"]) .usage-limits-figure span,
679
+ :where([data-app="usage"]) .usage-limits-note {
680
+ color: var(--rly-color-text-2);
681
+ }
682
+
683
+ :where([data-app="usage"]) .usage-limits-figure span {
684
+ font-size: 0.875rem;
685
+ }
686
+
687
+ :where([data-app="usage"]) .usage-limits-card dl {
688
+ display: grid;
689
+ }
690
+
691
+ :where([data-app="usage"]) .usage-limits-card dl > div {
692
+ display: flex;
693
+ justify-content: space-between;
694
+ gap: 1rem;
695
+ padding-block: 0.5rem;
696
+ border-block-start: 1px solid var(--rly-color-border-1);
697
+ font-size: 0.875rem;
698
+ }
699
+
700
+ :where([data-app="usage"]) .usage-limits-card dt {
701
+ color: var(--rly-color-text-2);
702
+ }
703
+
704
+ :where([data-app="usage"]) .usage-limits-card dd {
705
+ margin: 0;
706
+ font-weight: 520;
707
+ text-align: end;
708
+ }
709
+
710
+ :where([data-app="usage"]) .usage-limits-figure b[data-unknown],
711
+ :where([data-app="usage"]) .usage-limits-card dd[data-unknown] {
712
+ color: var(--rly-color-text-2);
713
+ }
714
+
715
+ :where([data-app="usage"]) .usage-limits-note {
716
+ font-size: 0.8125rem;
717
+ }
718
+
719
+ :where([data-app="usage"]) .usage-limits-sr {
720
+ position: absolute;
721
+ inline-size: 1px;
722
+ block-size: 1px;
723
+ overflow: clip;
724
+ clip-path: inset(50%);
725
+ white-space: nowrap;
726
+ }
727
+
728
+ :where([data-app="usage"]) .usage-limits-foot {
729
+ margin: 0;
730
+ padding-block-start: 0.8rem;
731
+ max-inline-size: 52em;
732
+ border-block-start: 1px solid var(--rly-color-border-1);
733
+ font-size: 0.8125rem;
734
+ color: var(--rly-color-text-2);
735
+ }
736
+
737
+ :where([data-app="usage"]) .usage-limits-loading {
738
+ display: grid;
739
+ gap: 0.75rem;
740
+ }
741
+
742
+ :where([data-app="usage"]) .usage-limits-unavailable {
743
+ display: grid;
744
+ gap: 1.5rem;
745
+ min-inline-size: 0;
746
+ }
747
+
748
+ :where([data-app="usage"]) .usage-limits-controls {
749
+ display: flex;
750
+ flex-wrap: wrap;
751
+ align-items: center;
752
+ justify-content: flex-end;
753
+ gap: 0.5rem 1.5rem;
754
+ min-block-size: 44px;
755
+ }
756
+
757
+ /* The reference's Retry takes the page's type (its page stylesheet sets button { font: inherit }). */
758
+ :where([data-app="usage"]) .usage-limits-controls > button {
759
+ font: inherit;
760
+ }
761
+
762
+ :where([data-app="usage"]) .usage-limits-retry {
763
+ margin: 0;
764
+ font-size: 0.75rem;
765
+ font-weight: 520;
766
+ line-height: 1rem;
767
+ color: var(--rly-color-text-2);
768
+ }
769
+
770
+ :where([data-app="usage"]) .usage-limits-chart {
771
+ display: grid;
772
+ gap: 0.9rem;
773
+ margin: 0;
774
+ padding-block: 1.1rem;
775
+ padding-inline: 1.15rem;
776
+ min-inline-size: 0;
777
+ border: 1px solid var(--rly-color-border-1);
778
+ border-radius: var(--rly-radius-group);
779
+ background: var(--rly-color-surface-1);
780
+ }
781
+
782
+ :where([data-app="usage"]) .usage-limits-chart-head {
783
+ display: flex;
784
+ flex-wrap: wrap;
785
+ gap: 0.25rem 1rem;
786
+ align-items: baseline;
787
+ justify-content: space-between;
788
+ }
789
+
790
+ :where([data-app="usage"]) .usage-limits-chart-head h2 {
791
+ margin: 0;
792
+ font-size: 1.1rem;
793
+ font-weight: 620;
794
+ line-height: 1.5;
795
+ }
796
+
797
+ :where([data-app="usage"]) .usage-limits-chart-head a {
798
+ display: inline-flex;
799
+ gap: 0.35rem;
800
+ align-items: center;
801
+ min-block-size: 44px;
802
+ font-size: 0.8125rem;
803
+ text-decoration: underline;
804
+ text-underline-offset: 0.2em;
805
+ }
806
+
807
+ :where([data-app="usage"]) .usage-limits-chart-head a svg {
808
+ inline-size: 14px;
809
+ block-size: 14px;
810
+ }
811
+
812
+ :where([data-app="usage"]) .usage-limits-bars {
813
+ display: grid;
814
+ gap: 0.5rem;
815
+ align-items: end;
816
+ block-size: 200px;
817
+ }
818
+
819
+ :where([data-app="usage"]) .usage-limits-bar {
820
+ display: grid;
821
+ gap: 0.3rem;
822
+ justify-items: center;
823
+ align-content: end;
824
+ block-size: 100%;
825
+ min-inline-size: 0;
826
+ }
827
+
828
+ :where([data-app="usage"]) .usage-limits-bar-value {
829
+ font-size: 0.75rem;
830
+ font-weight: 520;
831
+ font-variant-numeric: tabular-nums;
832
+ color: var(--rly-color-text-1);
833
+ }
834
+
835
+ :where([data-app="usage"]) .usage-limits-bar-fill {
836
+ display: block;
837
+ inline-size: 100%;
838
+ max-inline-size: 44px;
839
+ border-radius: 4px 4px 0 0;
840
+ background: var(--rly-color-text-3);
841
+ }
842
+
843
+ :where([data-app="usage"]) .usage-limits-bar-period {
844
+ font-size: 0.75rem;
845
+ text-align: center;
846
+ color: var(--rly-color-text-2);
847
+ }
848
+
849
+ :where([data-app="usage"]) .usage-limits-chart figcaption {
850
+ display: flex;
851
+ flex-wrap: wrap;
852
+ gap: 0.4rem 1.25rem;
853
+ font-size: 0.8125rem;
854
+ color: var(--rly-color-text-2);
855
+ }
856
+
857
+ :where([data-app="usage"]) .usage-limits-chart figcaption span {
858
+ color: var(--rly-color-text-1);
859
+ }
860
+
861
+ :where([data-app="usage"]) .usage-limits-chart figcaption [data-total] {
862
+ font-weight: 620;
863
+ }
864
+
865
+ :where([data-app="usage"]) .usage-limits-chart figcaption [data-unknown] {
866
+ color: var(--rly-color-text-2);
867
+ }
868
+
869
+ @media (max-width: 599px) {
870
+ /* The reference page ends 6rem under the footnote on phone; the shell's bottom-bar inset supplies the rest. */
871
+ :where([data-app="usage"]) .usage-details[data-usage-page="limits"] {
872
+ gap: 1.5rem;
873
+ padding-block: 0.9rem 1.25rem;
874
+ }
875
+
876
+ /* The phone page starts 0.9rem under the grouped header, without the slot's grid gap. */
877
+ :where([data-app="usage"]) .usage-details[data-usage-page="limits"] > .usage-details-mast-slot {
878
+ display: none;
879
+ }
880
+
881
+ :where([data-app="usage"]) .usage-limits-summary h2 {
882
+ font-size: 1.5rem;
883
+ }
884
+
885
+ :where([data-app="usage"]) .usage-limits-cards {
886
+ grid-template-columns: minmax(0, 1fr);
887
+ }
888
+ }
889
+
890
+ /* Usage's empty-reading page, moved from the hub with its details. */
891
+
892
+ /* Read by screen readers at every width; the header shows the same title as text the design draws. */
893
+ :where([data-app="usage"]) .usage-page-heading {
894
+ position: absolute;
895
+ inline-size: 1px;
896
+ block-size: 1px;
897
+ margin: 0;
898
+ overflow: clip;
899
+ clip-path: inset(50%);
900
+ white-space: nowrap;
901
+ }
902
+
903
+ :where([data-app="usage"]) .usage-limits-empty {
904
+ min-inline-size: 0;
905
+ color: var(--rly-color-text-1);
906
+ padding-block: 2rem 1rem;
907
+ padding-inline: 40px;
908
+ }
909
+
910
+ :where([data-app="usage"]) .usage-empty-mast {
911
+ display: grid;
912
+ gap: 0.9rem;
913
+ padding-block: 1.5rem 0;
914
+ padding-inline: 40px;
915
+ border-block-end: 1px solid var(--rly-color-border-1);
916
+ }
917
+
918
+ :where([data-app="usage"]) .usage-empty-title,
919
+ :where([data-app="usage"]) .usage-empty-titles p,
920
+ :where([data-app="usage"]) .usage-empty-notice h2,
921
+ :where([data-app="usage"]) .usage-empty-notice p {
922
+ margin: 0;
923
+ }
924
+
925
+ :where([data-app="usage"]) .usage-empty-title {
926
+ font-size: 1.75rem;
927
+ font-weight: 620;
928
+ letter-spacing: -0.035em;
929
+ line-height: 1.2;
930
+ }
931
+
932
+ :where([data-app="usage"]) .usage-empty-titles p {
933
+ color: var(--rly-color-text-2);
934
+ font-size: 0.9375rem;
935
+ }
936
+
937
+ :where([data-app="usage"]) .usage-empty-tabs {
938
+ display: flex;
939
+ gap: 0.5rem;
940
+ overflow: auto;
941
+ scrollbar-width: none;
942
+ margin-block-end: -1px;
943
+ }
944
+
945
+ :where([data-app="usage"]) .usage-empty-tabs a {
946
+ display: flex;
947
+ flex: none;
948
+ align-items: center;
949
+ min-block-size: 44px;
950
+ padding-inline: 0.25rem;
951
+ white-space: nowrap;
952
+ text-decoration: none;
953
+ font-size: 0.9375rem;
954
+ color: var(--rly-color-text-2);
955
+ border-block-end: 2px solid transparent;
956
+ }
957
+
958
+ :where([data-app="usage"]) .usage-empty-tabs a[aria-current="page"] {
959
+ font-weight: 620;
960
+ color: var(--rly-color-text-1);
961
+ border-block-end-color: var(--rly-color-text-1);
962
+ }
963
+
964
+ :where([data-app="usage"]) .usage-empty-notice {
965
+ display: grid;
966
+ justify-items: start;
967
+ gap: 1rem;
968
+ padding-block: 1.5rem;
969
+ max-inline-size: 34em;
970
+ }
971
+
972
+ :where([data-app="usage"]) .usage-empty-art {
973
+ display: block;
974
+ flex: none;
975
+ inline-size: 88px;
976
+ block-size: 88px;
977
+ line-height: 0;
978
+ }
979
+
980
+ :where([data-app="usage"]) .usage-empty-notice h2 {
981
+ font-size: 1.6rem;
982
+ font-weight: 620;
983
+ letter-spacing: -0.025em;
984
+ line-height: 1.25;
985
+ text-wrap: balance;
986
+ }
987
+
988
+ :where([data-app="usage"]) .usage-empty-notice p {
989
+ color: var(--rly-color-text-2);
990
+ }
991
+
992
+ :where([data-app="usage"]) .usage-empty-action {
993
+ justify-self: start;
994
+ display: inline-flex;
995
+ align-items: center;
996
+ gap: 0.4rem;
997
+ min-block-size: 44px;
998
+ padding-inline: 1rem;
999
+ border: 1px solid var(--rly-color-border-1);
1000
+ border-radius: var(--rly-radius-control);
1001
+ background: var(--rly-color-surface-1);
1002
+ font-size: 0.875rem;
1003
+ font-weight: 520;
1004
+ color: var(--rly-color-text-1);
1005
+ text-decoration: none;
1006
+ }
1007
+
1008
+ @media (max-width: 40rem) {
1009
+ :where([data-app="usage"]) .usage-limits-empty {
1010
+ padding-block: 0.9rem 6rem;
1011
+ padding-inline: 16px;
1012
+ }
1013
+
1014
+ /* Phone module heading (design rule 45 refs): title and purpose over the tabs, under the breadcrumb. */
1015
+ :where([data-app="usage"]) .usage-empty-mast {
1016
+ padding-block: 0.75rem 0;
1017
+ padding-inline: 16px;
1018
+ }
1019
+
1020
+ :where([data-app="usage"]) .usage-empty-titles {
1021
+ display: grid;
1022
+ gap: 0.25rem;
1023
+ }
1024
+
1025
+ :where([data-app="usage"]) .usage-empty-tabs {
1026
+ gap: 0;
1027
+ margin-inline: -8px;
1028
+ }
1029
+
1030
+ :where([data-app="usage"]) .usage-empty-tabs a {
1031
+ padding-inline: 0.75rem;
1032
+ }
1033
+ }
1034
+ }