@oh-my-pi/omp-stats 18.3.4 → 18.4.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.
Files changed (192) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +13 -11
  3. package/build.ts +5 -49
  4. package/dist/client/index.css +1 -1
  5. package/dist/client/index.html +2 -2
  6. package/dist/client/index.js +105 -126
  7. package/dist/types/aggregator.d.ts +25 -22
  8. package/dist/types/client/api.d.ts +11 -7
  9. package/dist/types/client/app/LiveChip.d.ts +2 -0
  10. package/dist/types/client/app/Shell.d.ts +16 -0
  11. package/dist/types/client/app/ThemeToggle.d.ts +1 -0
  12. package/dist/types/client/app/nav.d.ts +18 -0
  13. package/dist/types/client/charts/BarList.d.ts +17 -0
  14. package/dist/types/client/charts/Chart.d.ts +49 -0
  15. package/dist/types/client/charts/Legend.d.ts +16 -0
  16. package/dist/types/client/charts/ShareBar.d.ts +11 -0
  17. package/dist/types/client/charts/Sparkline.d.ts +11 -0
  18. package/dist/types/client/charts/TimeChart.d.ts +9 -0
  19. package/dist/types/client/charts/index.d.ts +7 -0
  20. package/dist/types/client/charts/types.d.ts +25 -0
  21. package/dist/types/client/charts/useWidth.d.ts +3 -0
  22. package/dist/types/client/data/colors.d.ts +25 -0
  23. package/dist/types/client/data/formatters.d.ts +9 -1
  24. package/dist/types/client/data/live.d.ts +29 -0
  25. package/dist/types/client/data/query.d.ts +35 -0
  26. package/dist/types/client/data/range.d.ts +31 -0
  27. package/dist/types/client/data/series.d.ts +28 -0
  28. package/dist/types/client/data/useHashRoute.d.ts +18 -4
  29. package/dist/types/client/data/view-models.d.ts +111 -28
  30. package/dist/types/client/index.d.ts +0 -1
  31. package/dist/types/client/routes/CostsRoute.d.ts +2 -2
  32. package/dist/types/client/routes/ErrorsRoute.d.ts +2 -2
  33. package/dist/types/client/routes/FrustrationRoute.d.ts +7 -0
  34. package/dist/types/client/routes/GainRoute.d.ts +1 -2
  35. package/dist/types/client/routes/ModelsRoute.d.ts +2 -2
  36. package/dist/types/client/routes/OverviewRoute.d.ts +1 -2
  37. package/dist/types/client/routes/ProjectsRoute.d.ts +2 -2
  38. package/dist/types/client/routes/ProvidersRoute.d.ts +2 -2
  39. package/dist/types/client/routes/RequestsRoute.d.ts +1 -2
  40. package/dist/types/client/routes/ToolsRoute.d.ts +2 -2
  41. package/dist/types/client/routes/TracesRoute.d.ts +2 -2
  42. package/dist/types/client/routes/index.d.ts +1 -1
  43. package/dist/types/client/traces/AggregatesPanel.d.ts +4 -3
  44. package/dist/types/client/traces/SummaryStrip.d.ts +2 -2
  45. package/dist/types/client/traces/trace-colors.d.ts +18 -12
  46. package/dist/types/client/ui/Badge.d.ts +19 -0
  47. package/dist/types/client/ui/Card.d.ts +25 -0
  48. package/dist/types/client/ui/Drawer.d.ts +25 -0
  49. package/dist/types/client/ui/JsonBlock.d.ts +2 -2
  50. package/dist/types/client/ui/Modal.d.ts +23 -0
  51. package/dist/types/client/ui/RequestDrawer.d.ts +10 -1
  52. package/dist/types/client/ui/SearchInput.d.ts +8 -0
  53. package/dist/types/client/ui/Segmented.d.ts +15 -0
  54. package/dist/types/client/ui/Stat.d.ts +36 -0
  55. package/dist/types/client/ui/States.d.ts +41 -0
  56. package/dist/types/client/ui/Table.d.ts +48 -0
  57. package/dist/types/client/ui/index.d.ts +9 -10
  58. package/dist/types/db.d.ts +90 -106
  59. package/dist/types/frustration.d.ts +70 -0
  60. package/dist/types/index.d.ts +3 -1
  61. package/dist/types/live.d.ts +30 -0
  62. package/dist/types/rollup.d.ts +115 -0
  63. package/dist/types/server.d.ts +6 -1
  64. package/dist/types/shared-types.d.ts +116 -56
  65. package/dist/types/types.d.ts +4 -0
  66. package/dist/types/user-metrics.d.ts +8 -0
  67. package/package.json +7 -13
  68. package/src/aggregator.ts +276 -211
  69. package/src/client/App.tsx +38 -80
  70. package/src/client/api.ts +65 -7
  71. package/src/client/app/LiveChip.tsx +97 -0
  72. package/src/client/app/Shell.tsx +181 -0
  73. package/src/client/app/ThemeToggle.tsx +5 -2
  74. package/src/client/app/nav.ts +78 -0
  75. package/src/client/charts/BarList.tsx +48 -0
  76. package/src/client/charts/Chart.tsx +388 -0
  77. package/src/client/charts/Legend.tsx +61 -0
  78. package/src/client/charts/ShareBar.tsx +26 -0
  79. package/src/client/charts/Sparkline.tsx +38 -0
  80. package/src/client/charts/TimeChart.tsx +22 -0
  81. package/src/client/charts/index.ts +7 -0
  82. package/src/client/charts/types.ts +27 -0
  83. package/src/client/charts/useWidth.ts +19 -0
  84. package/src/client/data/colors.ts +45 -0
  85. package/src/client/data/formatters.ts +30 -9
  86. package/src/client/data/live.tsx +85 -0
  87. package/src/client/data/query.ts +166 -0
  88. package/src/client/data/range.ts +82 -0
  89. package/src/client/data/series.ts +85 -0
  90. package/src/client/data/useHashRoute.ts +41 -83
  91. package/src/client/data/view-models.ts +347 -140
  92. package/src/client/index.tsx +3 -6
  93. package/src/client/routes/CostsRoute.tsx +394 -222
  94. package/src/client/routes/ErrorsRoute.tsx +401 -98
  95. package/src/client/routes/FrustrationRoute.tsx +924 -0
  96. package/src/client/routes/GainRoute.tsx +209 -206
  97. package/src/client/routes/ModelsRoute.tsx +540 -431
  98. package/src/client/routes/OverviewRoute.tsx +283 -311
  99. package/src/client/routes/ProjectsRoute.tsx +298 -156
  100. package/src/client/routes/ProvidersRoute.tsx +948 -416
  101. package/src/client/routes/RequestsRoute.tsx +295 -107
  102. package/src/client/routes/ToolsRoute.tsx +495 -398
  103. package/src/client/routes/TracesRoute.tsx +136 -117
  104. package/src/client/routes/costs.css +24 -0
  105. package/src/client/routes/errors.css +60 -0
  106. package/src/client/routes/frustration.css +123 -0
  107. package/src/client/routes/index.ts +1 -1
  108. package/src/client/routes/models.css +43 -0
  109. package/src/client/routes/projects.css +6 -0
  110. package/src/client/routes/providers.css +28 -0
  111. package/src/client/routes/tools.css +14 -0
  112. package/src/client/styles.css +1396 -1299
  113. package/src/client/traces/AggregatesPanel.tsx +55 -74
  114. package/src/client/traces/Minimap.tsx +6 -15
  115. package/src/client/traces/SpanDrawer.tsx +128 -194
  116. package/src/client/traces/SummaryStrip.tsx +21 -24
  117. package/src/client/traces/TimelineCanvas.tsx +27 -44
  118. package/src/client/traces/TraceView.tsx +175 -130
  119. package/src/client/traces/TranscriptList.tsx +13 -41
  120. package/src/client/traces/trace-colors.ts +60 -53
  121. package/src/client/traces/traces.css +279 -0
  122. package/src/client/ui/Badge.tsx +29 -0
  123. package/src/client/ui/Card.tsx +61 -0
  124. package/src/client/ui/Drawer.tsx +93 -0
  125. package/src/client/ui/JsonBlock.tsx +26 -44
  126. package/src/client/ui/Modal.tsx +106 -0
  127. package/src/client/ui/RequestDrawer.tsx +163 -188
  128. package/src/client/ui/SearchInput.tsx +25 -0
  129. package/src/client/ui/Segmented.tsx +61 -0
  130. package/src/client/ui/Stat.tsx +104 -0
  131. package/src/client/ui/States.tsx +81 -0
  132. package/src/client/ui/Table.tsx +229 -0
  133. package/src/client/ui/index.ts +9 -10
  134. package/src/client/ui/modal.css +54 -0
  135. package/src/client/ui/request-drawer.css +40 -0
  136. package/src/db.ts +379 -983
  137. package/src/frustration.ts +473 -0
  138. package/src/index.ts +22 -22
  139. package/src/live.ts +259 -0
  140. package/src/parser.ts +55 -66
  141. package/src/rollup.ts +951 -0
  142. package/src/server.ts +123 -40
  143. package/src/shared-types.ts +120 -56
  144. package/src/trace.ts +14 -7
  145. package/src/types.ts +4 -0
  146. package/src/user-metrics.ts +13 -0
  147. package/dist/client/styles.css +0 -1976
  148. package/dist/types/client/app/AppLayout.d.ts +0 -16
  149. package/dist/types/client/app/NavRail.d.ts +0 -7
  150. package/dist/types/client/app/RangeControl.d.ts +0 -7
  151. package/dist/types/client/app/SyncButton.d.ts +0 -14
  152. package/dist/types/client/app/TopBar.d.ts +0 -15
  153. package/dist/types/client/app/routes.d.ts +0 -12
  154. package/dist/types/client/components/AgentTokenShare.d.ts +0 -5
  155. package/dist/types/client/components/chart-shared.d.ts +0 -178
  156. package/dist/types/client/components/models-table-shared.d.ts +0 -175
  157. package/dist/types/client/components/range-meta.d.ts +0 -21
  158. package/dist/types/client/data/charts.d.ts +0 -1
  159. package/dist/types/client/data/useResource.d.ts +0 -13
  160. package/dist/types/client/routes/BehaviorRoute.d.ts +0 -7
  161. package/dist/types/client/ui/AsyncBoundary.d.ts +0 -12
  162. package/dist/types/client/ui/DataTable.d.ts +0 -17
  163. package/dist/types/client/ui/EmptyState.d.ts +0 -7
  164. package/dist/types/client/ui/ErrorState.d.ts +0 -6
  165. package/dist/types/client/ui/MetricCluster.d.ts +0 -5
  166. package/dist/types/client/ui/Panel.d.ts +0 -7
  167. package/dist/types/client/ui/SegmentedControl.d.ts +0 -12
  168. package/dist/types/client/ui/Skeleton.d.ts +0 -8
  169. package/dist/types/client/ui/StatusPill.d.ts +0 -7
  170. package/src/client/app/AppLayout.tsx +0 -93
  171. package/src/client/app/NavRail.tsx +0 -44
  172. package/src/client/app/RangeControl.tsx +0 -39
  173. package/src/client/app/SyncButton.tsx +0 -75
  174. package/src/client/app/TopBar.tsx +0 -73
  175. package/src/client/app/routes.ts +0 -93
  176. package/src/client/components/AgentTokenShare.tsx +0 -68
  177. package/src/client/components/chart-shared.tsx +0 -273
  178. package/src/client/components/models-table-shared.tsx +0 -255
  179. package/src/client/components/range-meta.ts +0 -73
  180. package/src/client/data/charts.ts +0 -14
  181. package/src/client/data/useResource.ts +0 -154
  182. package/src/client/routes/BehaviorRoute.tsx +0 -623
  183. package/src/client/ui/AsyncBoundary.tsx +0 -54
  184. package/src/client/ui/DataTable.tsx +0 -122
  185. package/src/client/ui/EmptyState.tsx +0 -16
  186. package/src/client/ui/ErrorState.tsx +0 -25
  187. package/src/client/ui/MetricCluster.tsx +0 -92
  188. package/src/client/ui/Panel.tsx +0 -24
  189. package/src/client/ui/SegmentedControl.tsx +0 -36
  190. package/src/client/ui/Skeleton.tsx +0 -17
  191. package/src/client/ui/StatusPill.tsx +0 -15
  192. package/tailwind.config.js +0 -40
@@ -1,1976 +0,0 @@
1
- /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
- @layer properties;
3
- @layer theme, base, components, utilities;
4
- @layer theme {
5
- :root, :host {
6
- --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue",
7
- "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
8
- "Segoe UI Symbol", "Noto Color Emoji";
9
- --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
10
- "Courier New", monospace;
11
- --spacing: 0.25rem;
12
- --text-xs: 0.75rem;
13
- --text-xs--line-height: calc(1 / 0.75);
14
- --text-sm: 0.875rem;
15
- --text-sm--line-height: calc(1.25 / 0.875);
16
- --text-lg: 1.125rem;
17
- --text-lg--line-height: calc(1.75 / 1.125);
18
- --text-2xl: 1.5rem;
19
- --text-2xl--line-height: calc(2 / 1.5);
20
- --font-weight-medium: 500;
21
- --font-weight-semibold: 600;
22
- --font-weight-bold: 700;
23
- --tracking-wider: 0.05em;
24
- --radius-sm: 0.25rem;
25
- --radius-md: 0.375rem;
26
- --radius-lg: 0.5rem;
27
- --default-transition-duration: 150ms;
28
- --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
29
- --default-font-family: var(--font-sans);
30
- --default-mono-font-family: var(--font-mono);
31
- }
32
- }
33
- @layer base {
34
- *, ::after, ::before, ::backdrop, ::file-selector-button {
35
- box-sizing: border-box;
36
- margin: 0;
37
- padding: 0;
38
- border: 0 solid;
39
- }
40
- html, :host {
41
- line-height: 1.5;
42
- -webkit-text-size-adjust: 100%;
43
- tab-size: 4;
44
- font-family: var(--default-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
45
- font-feature-settings: var(--default-font-feature-settings, normal);
46
- font-variation-settings: var(--default-font-variation-settings, normal);
47
- -webkit-tap-highlight-color: transparent;
48
- }
49
- hr {
50
- height: 0;
51
- color: inherit;
52
- border-top-width: 1px;
53
- }
54
- abbr:where([title]) {
55
- -webkit-text-decoration: underline dotted;
56
- text-decoration: underline dotted;
57
- }
58
- h1, h2, h3, h4, h5, h6 {
59
- font-size: inherit;
60
- font-weight: inherit;
61
- }
62
- a {
63
- color: inherit;
64
- -webkit-text-decoration: inherit;
65
- text-decoration: inherit;
66
- }
67
- b, strong {
68
- font-weight: bolder;
69
- }
70
- code, kbd, samp, pre {
71
- font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
72
- font-feature-settings: var(--default-mono-font-feature-settings, normal);
73
- font-variation-settings: var(--default-mono-font-variation-settings, normal);
74
- font-size: 1em;
75
- }
76
- small {
77
- font-size: 80%;
78
- }
79
- sub, sup {
80
- font-size: 75%;
81
- line-height: 0;
82
- position: relative;
83
- vertical-align: baseline;
84
- }
85
- sub {
86
- bottom: -0.25em;
87
- }
88
- sup {
89
- top: -0.5em;
90
- }
91
- table {
92
- text-indent: 0;
93
- border-color: inherit;
94
- border-collapse: collapse;
95
- }
96
- :-moz-focusring:where(:not(iframe)) {
97
- outline: auto;
98
- }
99
- progress {
100
- vertical-align: baseline;
101
- }
102
- summary {
103
- display: list-item;
104
- }
105
- ol, ul, menu {
106
- list-style: none;
107
- }
108
- img, svg, video, canvas, audio, iframe, embed, object {
109
- display: block;
110
- vertical-align: middle;
111
- }
112
- img, video {
113
- max-width: 100%;
114
- height: auto;
115
- }
116
- button, input, select, optgroup, textarea, ::file-selector-button {
117
- font: inherit;
118
- font-feature-settings: inherit;
119
- font-variation-settings: inherit;
120
- letter-spacing: inherit;
121
- color: inherit;
122
- border-radius: 0;
123
- background-color: transparent;
124
- opacity: 1;
125
- }
126
- :where(select:is([multiple], [size])) optgroup {
127
- font-weight: bolder;
128
- }
129
- :where(select:is([multiple], [size])) optgroup option {
130
- padding-inline-start: 20px;
131
- }
132
- ::file-selector-button {
133
- margin-inline-end: 4px;
134
- }
135
- ::placeholder {
136
- opacity: 1;
137
- }
138
- @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
139
- ::placeholder {
140
- color: currentcolor;
141
- @supports (color: color-mix(in lab, red, red)) {
142
- color: color-mix(in oklab, currentcolor 50%, transparent);
143
- }
144
- }
145
- }
146
- textarea {
147
- resize: vertical;
148
- }
149
- ::-webkit-search-decoration {
150
- -webkit-appearance: none;
151
- }
152
- ::-webkit-date-and-time-value {
153
- min-height: 1lh;
154
- text-align: inherit;
155
- }
156
- ::-webkit-datetime-edit {
157
- display: inline-flex;
158
- }
159
- ::-webkit-datetime-edit-fields-wrapper {
160
- padding: 0;
161
- }
162
- ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
163
- padding-block: 0;
164
- }
165
- ::-webkit-calendar-picker-indicator {
166
- line-height: 1;
167
- }
168
- :-moz-ui-invalid {
169
- box-shadow: none;
170
- }
171
- button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
172
- appearance: button;
173
- }
174
- ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
175
- height: auto;
176
- }
177
- [hidden]:where(:not([hidden="until-found"])) {
178
- display: none !important;
179
- }
180
- }
181
- @layer utilities {
182
- .mt-0\.5 {
183
- margin-top: calc(var(--spacing) * 0.5);
184
- }
185
- .mt-1 {
186
- margin-top: var(--spacing);
187
- }
188
- .mt-2 {
189
- margin-top: calc(var(--spacing) * 2);
190
- }
191
- .mb-1 {
192
- margin-bottom: var(--spacing);
193
- }
194
- .mb-2 {
195
- margin-bottom: calc(var(--spacing) * 2);
196
- }
197
- .mb-4 {
198
- margin-bottom: calc(var(--spacing) * 4);
199
- }
200
- .ml-auto {
201
- margin-left: auto;
202
- }
203
- .flex {
204
- display: flex;
205
- }
206
- .grid {
207
- display: grid;
208
- }
209
- .h-1 {
210
- height: var(--spacing);
211
- }
212
- .h-2\.5 {
213
- height: calc(var(--spacing) * 2.5);
214
- }
215
- .h-3 {
216
- height: calc(var(--spacing) * 3);
217
- }
218
- .h-10 {
219
- height: calc(var(--spacing) * 10);
220
- }
221
- .h-\[200px\] {
222
- height: 200px;
223
- }
224
- .h-\[260px\] {
225
- height: 260px;
226
- }
227
- .h-\[280px\] {
228
- height: 280px;
229
- }
230
- .h-\[300px\] {
231
- height: 300px;
232
- }
233
- .h-full {
234
- height: 100%;
235
- }
236
- .max-h-\[280px\] {
237
- max-height: 280px;
238
- }
239
- .max-h-\[calc\(100vh-300px\)\] {
240
- max-height: calc(100vh - 300px);
241
- }
242
- .w-2\.5 {
243
- width: calc(var(--spacing) * 2.5);
244
- }
245
- .w-24 {
246
- width: calc(var(--spacing) * 24);
247
- }
248
- .w-full {
249
- width: 100%;
250
- }
251
- .max-w-\[280px\] {
252
- max-width: 280px;
253
- }
254
- .max-w-\[440px\] {
255
- max-width: 440px;
256
- }
257
- .min-w-0 {
258
- min-width: 0px;
259
- }
260
- .flex-1 {
261
- flex: 1;
262
- }
263
- .flex-shrink-0 {
264
- flex-shrink: 0;
265
- }
266
- .cursor-pointer {
267
- cursor: pointer;
268
- }
269
- .grid-cols-1 {
270
- grid-template-columns: repeat(1, minmax(0, 1fr));
271
- }
272
- .grid-cols-2 {
273
- grid-template-columns: repeat(2, minmax(0, 1fr));
274
- }
275
- .flex-wrap {
276
- flex-wrap: wrap;
277
- }
278
- .items-baseline {
279
- align-items: baseline;
280
- }
281
- .items-center {
282
- align-items: center;
283
- }
284
- .items-start {
285
- align-items: flex-start;
286
- }
287
- .justify-between {
288
- justify-content: space-between;
289
- }
290
- .justify-center {
291
- justify-content: center;
292
- }
293
- .gap-2 {
294
- gap: calc(var(--spacing) * 2);
295
- }
296
- .gap-3 {
297
- gap: calc(var(--spacing) * 3);
298
- }
299
- .gap-4 {
300
- gap: calc(var(--spacing) * 4);
301
- }
302
- .gap-6 {
303
- gap: calc(var(--spacing) * 6);
304
- }
305
- :where(.space-y-0\.5 > :not(:last-child)) {
306
- --tw-space-y-reverse: 0;
307
- margin-block-start: calc(calc(var(--spacing) * 0.5) * var(--tw-space-y-reverse));
308
- margin-block-end: calc(calc(var(--spacing) * 0.5) * calc(1 - var(--tw-space-y-reverse)));
309
- }
310
- :where(.space-y-1 > :not(:last-child)) {
311
- --tw-space-y-reverse: 0;
312
- margin-block-start: calc(var(--spacing) * var(--tw-space-y-reverse));
313
- margin-block-end: calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)));
314
- }
315
- :where(.space-y-2 > :not(:last-child)) {
316
- --tw-space-y-reverse: 0;
317
- margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));
318
- margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));
319
- }
320
- :where(.space-y-4 > :not(:last-child)) {
321
- --tw-space-y-reverse: 0;
322
- margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));
323
- margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));
324
- }
325
- :where(.space-y-6 > :not(:last-child)) {
326
- --tw-space-y-reverse: 0;
327
- margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));
328
- margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));
329
- }
330
- .truncate {
331
- overflow: hidden;
332
- text-overflow: ellipsis;
333
- white-space: nowrap;
334
- }
335
- .overflow-hidden {
336
- overflow: hidden;
337
- }
338
- .overflow-x-auto {
339
- overflow-x: auto;
340
- }
341
- .overflow-y-auto {
342
- overflow-y: auto;
343
- }
344
- .rounded {
345
- border-radius: 0.25rem;
346
- }
347
- .rounded-full {
348
- border-radius: calc(infinity * 1px);
349
- }
350
- .border-t {
351
- border-top-style: var(--tw-border-style);
352
- border-top-width: 1px;
353
- }
354
- .border-b {
355
- border-bottom-style: var(--tw-border-style);
356
- border-bottom-width: 1px;
357
- }
358
- .border-none {
359
- --tw-border-style: none;
360
- border-style: none;
361
- }
362
- .border-\[var\(--border-subtle\)\] {
363
- border-color: var(--border-subtle);
364
- }
365
- .bg-\[var\(--bg-elevated\)\] {
366
- background-color: var(--bg-elevated);
367
- }
368
- .bg-transparent {
369
- background-color: transparent;
370
- }
371
- .p-2 {
372
- padding: calc(var(--spacing) * 2);
373
- }
374
- .px-4 {
375
- padding-inline: calc(var(--spacing) * 4);
376
- }
377
- .px-5 {
378
- padding-inline: calc(var(--spacing) * 5);
379
- }
380
- .py-3 {
381
- padding-block: calc(var(--spacing) * 3);
382
- }
383
- .py-4 {
384
- padding-block: calc(var(--spacing) * 4);
385
- }
386
- .py-8 {
387
- padding-block: calc(var(--spacing) * 8);
388
- }
389
- .pr-2 {
390
- padding-right: calc(var(--spacing) * 2);
391
- }
392
- .text-center {
393
- text-align: center;
394
- }
395
- .text-left {
396
- text-align: left;
397
- }
398
- .text-right {
399
- text-align: right;
400
- }
401
- .font-mono {
402
- font-family: var(--font-mono);
403
- }
404
- .text-2xl {
405
- font-size: var(--text-2xl);
406
- line-height: var(--tw-leading, var(--text-2xl--line-height));
407
- }
408
- .text-lg {
409
- font-size: var(--text-lg);
410
- line-height: var(--tw-leading, var(--text-lg--line-height));
411
- }
412
- .text-sm {
413
- font-size: var(--text-sm);
414
- line-height: var(--tw-leading, var(--text-sm--line-height));
415
- }
416
- .text-xs {
417
- font-size: var(--text-xs);
418
- line-height: var(--tw-leading, var(--text-xs--line-height));
419
- }
420
- .font-bold {
421
- --tw-font-weight: var(--font-weight-bold);
422
- font-weight: var(--font-weight-bold);
423
- }
424
- .font-medium {
425
- --tw-font-weight: var(--font-weight-medium);
426
- font-weight: var(--font-weight-medium);
427
- }
428
- .font-semibold {
429
- --tw-font-weight: var(--font-weight-semibold);
430
- font-weight: var(--font-weight-semibold);
431
- }
432
- .tracking-wider {
433
- --tw-tracking: var(--tracking-wider);
434
- letter-spacing: var(--tracking-wider);
435
- }
436
- .whitespace-nowrap {
437
- white-space: nowrap;
438
- }
439
- .text-\[var\(--text-muted\)\] {
440
- color: var(--text-muted);
441
- }
442
- .text-\[var\(--text-primary\)\] {
443
- color: var(--text-primary);
444
- }
445
- .text-\[var\(--text-secondary\)\] {
446
- color: var(--text-secondary);
447
- }
448
- .uppercase {
449
- text-transform: uppercase;
450
- }
451
- .tabular-nums {
452
- --tw-numeric-spacing: tabular-nums;
453
- font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);
454
- }
455
- .transition-colors {
456
- transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
457
- transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
458
- transition-duration: var(--tw-duration, var(--default-transition-duration));
459
- }
460
- @media (hover: hover) {
461
- .hover\:bg-\[var\(--bg-hover\)\]:hover {
462
- background-color: var(--bg-hover);
463
- }
464
- }
465
- @media (width >= 48rem) {
466
- .md\:grid-cols-3 {
467
- grid-template-columns: repeat(3, minmax(0, 1fr));
468
- }
469
- .md\:grid-cols-6 {
470
- grid-template-columns: repeat(6, minmax(0, 1fr));
471
- }
472
- }
473
- @media (width >= 64rem) {
474
- .lg\:col-span-2 {
475
- grid-column: span 2 / span 2;
476
- }
477
- .lg\:grid-cols-3 {
478
- grid-template-columns: repeat(3, minmax(0, 1fr));
479
- }
480
- }
481
- }
482
- :root {
483
- color-scheme: dark;
484
- --page: oklch(0.16 0.02 307);
485
- --surface: oklch(0.19 0.022 307);
486
- --surface-2: oklch(0.235 0.026 307);
487
- --border: oklch(1 0 0 / 9%);
488
- --border-strong: oklch(1 0 0 / 13%);
489
- --text: oklch(0.92 0.01 307);
490
- --muted: oklch(0.71 0.016 307);
491
- --dim: oklch(0.53 0.018 307);
492
- --accent: oklch(0.674 0.23 341);
493
- --accent-fg: oklch(0.2 0.07 341);
494
- --accent-muted: oklch(0.674 0.23 341 / 18%);
495
- --link: oklch(0.817 0.112 205);
496
- --success: oklch(0.76 0.14 150);
497
- --danger: oklch(0.66 0.19 25);
498
- --warning: oklch(0.79 0.14 85);
499
- --text-primary: var(--text);
500
- --text-secondary: var(--muted);
501
- --text-muted: var(--dim);
502
- --border-subtle: var(--border);
503
- --accent-red: var(--danger);
504
- --accent-green: var(--success);
505
- --accent-cyan: var(--link);
506
- --bg-hover: var(--surface-2);
507
- --bg-elevated: var(--surface-2);
508
- --select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23999' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
509
- --radius-sm: 3px;
510
- --radius-md: 6px;
511
- --radius-lg: 8px;
512
- }
513
- @media (prefers-color-scheme: light) {
514
- :root:not([data-theme]) {
515
- color-scheme: light;
516
- --page: oklch(0.985 0.004 307);
517
- --surface: oklch(1 0 0);
518
- --surface-2: oklch(0.965 0.006 307);
519
- --border: oklch(0 0 0 / 10%);
520
- --border-strong: oklch(0 0 0 / 15%);
521
- --text: oklch(0.26 0.03 307);
522
- --muted: oklch(0.46 0.03 307);
523
- --dim: oklch(0.58 0.025 307);
524
- --accent: oklch(0.62 0.23 341);
525
- --accent-fg: oklch(0.99 0.01 341);
526
- --accent-muted: oklch(0.62 0.23 341 / 14%);
527
- --link: oklch(0.58 0.13 230);
528
- --success: oklch(0.55 0.13 150);
529
- --danger: oklch(0.55 0.19 25);
530
- --select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23555' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
531
- --warning: oklch(0.6 0.13 85);
532
- }
533
- }
534
- [data-theme="light"] {
535
- color-scheme: light;
536
- --page: oklch(0.985 0.004 307);
537
- --surface: oklch(1 0 0);
538
- --surface-2: oklch(0.965 0.006 307);
539
- --border: oklch(0 0 0 / 10%);
540
- --border-strong: oklch(0 0 0 / 15%);
541
- --text: oklch(0.26 0.03 307);
542
- --muted: oklch(0.46 0.03 307);
543
- --dim: oklch(0.58 0.025 307);
544
- --accent: oklch(0.62 0.23 341);
545
- --accent-fg: oklch(0.99 0.01 341);
546
- --accent-muted: oklch(0.62 0.23 341 / 14%);
547
- --link: oklch(0.58 0.13 230);
548
- --success: oklch(0.55 0.13 150);
549
- --danger: oklch(0.55 0.19 25);
550
- --select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23555' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
551
- --warning: oklch(0.6 0.13 85);
552
- }
553
- @layer base {
554
- * {
555
- box-sizing: border-box;
556
- }
557
- html {
558
- -webkit-font-smoothing: antialiased;
559
- -moz-osx-font-smoothing: grayscale;
560
- }
561
- body {
562
- font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
563
- background: var(--page);
564
- color: var(--text);
565
- margin: 0;
566
- min-height: 100vh;
567
- }
568
- button:focus-visible, a:focus-visible, [tabindex]:focus-visible {
569
- outline: 2px solid var(--link);
570
- outline-offset: 2px;
571
- }
572
- }
573
- .stats-app-container {
574
- display: flex;
575
- min-height: 100vh;
576
- background: var(--page);
577
- color: var(--text);
578
- }
579
- .stats-nav-rail {
580
- width: 240px;
581
- background: var(--surface);
582
- border-right: 1px solid var(--border);
583
- display: flex;
584
- flex-direction: column;
585
- flex-shrink: 0;
586
- }
587
- .stats-desktop-nav {
588
- display: flex;
589
- }
590
- @media (max-width: 1023px) {
591
- .stats-desktop-nav {
592
- display: none;
593
- }
594
- }
595
- .stats-nav-rail-header {
596
- padding: 20px 24px;
597
- border-bottom: 1px solid var(--border);
598
- height: 56px;
599
- display: flex;
600
- align-items: center;
601
- }
602
- .stats-logo-container {
603
- display: flex;
604
- flex-direction: column;
605
- }
606
- .stats-logo-text {
607
- font-size: 14px;
608
- font-weight: 700;
609
- letter-spacing: 0.1em;
610
- color: var(--text);
611
- }
612
- .stats-logo-subtext {
613
- font-size: 10px;
614
- text-transform: uppercase;
615
- letter-spacing: 0.05em;
616
- color: var(--muted);
617
- }
618
- .stats-nav-rail-menu {
619
- flex: 1;
620
- padding: 16px 12px;
621
- display: flex;
622
- flex-direction: column;
623
- gap: 4px;
624
- }
625
- .stats-nav-rail-item {
626
- display: flex;
627
- align-items: center;
628
- gap: 12px;
629
- padding: 10px 16px;
630
- font-size: 13px;
631
- font-weight: 500;
632
- color: var(--muted);
633
- background: transparent;
634
- border: none;
635
- border-radius: var(--radius-md);
636
- cursor: pointer;
637
- text-align: left;
638
- transition: all 0.15s ease;
639
- }
640
- .stats-nav-rail-item:hover {
641
- color: var(--text);
642
- background: var(--surface-2);
643
- }
644
- .stats-nav-rail-item[data-active="true"] {
645
- color: var(--accent);
646
- background: var(--accent-muted);
647
- position: relative;
648
- }
649
- .stats-nav-rail-item[data-active="true"]::before {
650
- content: "";
651
- position: absolute;
652
- left: 0;
653
- top: 50%;
654
- height: 18px;
655
- width: 3px;
656
- border-radius: 0 3px 3px 0;
657
- background: var(--accent);
658
- transform: translateY(-50%);
659
- }
660
- .stats-nav-rail-item-icon {
661
- flex-shrink: 0;
662
- }
663
- .stats-nav-rail-footer {
664
- padding: 16px 24px;
665
- border-top: 1px solid var(--border);
666
- }
667
- .stats-version-tag {
668
- font-size: 11px;
669
- color: var(--dim);
670
- }
671
- .stats-main-pane {
672
- flex: 1;
673
- display: flex;
674
- flex-direction: column;
675
- min-width: 0;
676
- }
677
- .stats-top-bar {
678
- height: 56px;
679
- background: var(--surface);
680
- border-bottom: 1px solid var(--border);
681
- display: flex;
682
- align-items: center;
683
- justify-content: space-between;
684
- padding: 0 24px;
685
- }
686
- @media (max-width: 767px) {
687
- .stats-top-bar {
688
- padding: 0 16px;
689
- flex-wrap: wrap;
690
- height: auto;
691
- min-height: 56px;
692
- padding-top: 8px;
693
- padding-bottom: 8px;
694
- gap: 12px;
695
- }
696
- }
697
- .stats-top-bar-left {
698
- display: flex;
699
- align-items: center;
700
- gap: 12px;
701
- }
702
- .stats-mobile-menu-btn {
703
- display: none;
704
- background: transparent;
705
- border: none;
706
- color: var(--text);
707
- padding: 4px;
708
- cursor: pointer;
709
- }
710
- @media (max-width: 1023px) {
711
- .stats-mobile-menu-btn {
712
- display: inline-flex;
713
- align-items: center;
714
- justify-content: center;
715
- }
716
- }
717
- .stats-page-title {
718
- font-size: 16px;
719
- font-weight: 600;
720
- color: var(--text);
721
- margin: 0;
722
- }
723
- .stats-top-bar-right {
724
- display: flex;
725
- align-items: center;
726
- gap: 16px;
727
- }
728
- @media (max-width: 767px) {
729
- .stats-top-bar-right {
730
- width: 100%;
731
- justify-content: space-between;
732
- gap: 8px;
733
- }
734
- }
735
- .stats-top-bar-meta {
736
- display: flex;
737
- align-items: center;
738
- }
739
- .stats-last-updated {
740
- font-size: 11px;
741
- color: var(--dim);
742
- font-variant-numeric: tabular-nums;
743
- }
744
- .stats-content-area {
745
- flex: 1;
746
- overflow-y: auto;
747
- }
748
- .stats-content-inner {
749
- max-width: 1560px;
750
- margin: 0 auto;
751
- padding: 24px;
752
- display: flex;
753
- flex-direction: column;
754
- gap: 24px;
755
- }
756
- @media (max-width: 767px) {
757
- .stats-content-inner {
758
- padding: 16px;
759
- gap: 16px;
760
- }
761
- }
762
- .stats-mobile-drawer-overlay {
763
- position: fixed;
764
- inset: 0;
765
- background: rgba(0, 0, 0, 0.4);
766
- backdrop-filter: none;
767
- z-index: 100;
768
- }
769
- .stats-mobile-drawer {
770
- position: absolute;
771
- left: 0;
772
- top: 0;
773
- bottom: 0;
774
- width: 260px;
775
- background: var(--surface);
776
- border-right: 1px solid var(--border);
777
- display: flex;
778
- flex-direction: column;
779
- z-index: 101;
780
- animation: slideIn 0.2s ease-out;
781
- }
782
- @keyframes slideIn {
783
- from {
784
- transform: translateX(-100%);
785
- }
786
- to {
787
- transform: translateX(0);
788
- }
789
- }
790
- .stats-mobile-drawer-header {
791
- height: 56px;
792
- display: flex;
793
- align-items: center;
794
- justify-content: space-between;
795
- padding: 0 16px 0 24px;
796
- border-bottom: 1px solid var(--border);
797
- }
798
- .stats-mobile-nav {
799
- display: flex;
800
- height: calc(100% - 56px);
801
- }
802
- .stats-button {
803
- display: inline-flex;
804
- align-items: center;
805
- justify-content: center;
806
- gap: 8px;
807
- padding: 8px 14px;
808
- font-size: 13px;
809
- font-weight: 500;
810
- border-radius: var(--radius-md);
811
- border: 1px solid transparent;
812
- cursor: pointer;
813
- transition: all 0.15s ease;
814
- font-family: inherit;
815
- }
816
- .stats-button:active:not(:disabled) {
817
- transform: translateY(1px);
818
- }
819
- .stats-button-primary {
820
- background: var(--accent);
821
- color: var(--accent-fg);
822
- }
823
- .stats-button-primary:hover:not(:disabled) {
824
- opacity: 0.9;
825
- }
826
- .stats-button-primary:disabled {
827
- opacity: 0.5;
828
- cursor: not-allowed;
829
- }
830
- .stats-button-secondary {
831
- background: var(--surface-2);
832
- color: var(--text);
833
- border-color: var(--border);
834
- }
835
- .stats-button-secondary:hover:not(:disabled) {
836
- background: var(--border);
837
- }
838
- .stats-button-secondary:disabled {
839
- opacity: 0.5;
840
- cursor: not-allowed;
841
- }
842
- .stats-range-control {
843
- display: flex;
844
- background: var(--surface-2);
845
- border: 1px solid var(--border);
846
- border-radius: var(--radius-md);
847
- padding: 2px;
848
- }
849
- .stats-range-control-btn {
850
- padding: 4px 10px;
851
- font-size: 12px;
852
- font-weight: 500;
853
- color: var(--muted);
854
- background: transparent;
855
- border: none;
856
- border-radius: var(--radius-sm);
857
- cursor: pointer;
858
- transition: all 0.1s ease;
859
- }
860
- .stats-range-control-btn:hover {
861
- color: var(--text);
862
- }
863
- .stats-range-control-btn[data-active="true"] {
864
- color: var(--text);
865
- background: var(--surface);
866
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.18);
867
- }
868
- .stats-select {
869
- appearance: none;
870
- padding: 6px 28px 6px 12px;
871
- font-size: 13px;
872
- font-weight: 500;
873
- font-family: inherit;
874
- color: var(--text);
875
- background-color: var(--surface-2);
876
- background-image: var(--select-chevron);
877
- background-repeat: no-repeat;
878
- background-position: right 10px center;
879
- border: 1px solid var(--border);
880
- border-radius: var(--radius-md);
881
- cursor: pointer;
882
- transition: border-color 0.15s ease, background-color 0.15s ease;
883
- max-width: 100%;
884
- text-overflow: ellipsis;
885
- }
886
- .stats-select:hover:not(:disabled) {
887
- border-color: var(--border-strong);
888
- background-color: var(--bg-hover);
889
- }
890
- .stats-select:focus-visible {
891
- outline: 2px solid var(--link);
892
- outline-offset: 1px;
893
- }
894
- .stats-select:disabled {
895
- opacity: 0.5;
896
- cursor: not-allowed;
897
- }
898
- @media (pointer: coarse) {
899
- .stats-select {
900
- font-size: 16px;
901
- }
902
- }
903
- .stats-select option {
904
- background-color: var(--surface);
905
- color: var(--text);
906
- }
907
- @media (forced-colors: active) {
908
- .stats-select {
909
- appearance: auto;
910
- }
911
- }
912
- .stats-sync-container {
913
- display: flex;
914
- align-items: center;
915
- gap: 12px;
916
- }
917
- .stats-sync-status-msg {
918
- font-size: 11px;
919
- font-variant-numeric: tabular-nums;
920
- max-width: 200px;
921
- white-space: nowrap;
922
- overflow: hidden;
923
- text-overflow: ellipsis;
924
- }
925
- .stats-sync-status-msg[data-type="success"] {
926
- color: var(--success);
927
- }
928
- .stats-sync-status-msg[data-type="error"] {
929
- color: var(--danger);
930
- }
931
- .stats-sync-icon {
932
- flex-shrink: 0;
933
- }
934
- .stats-spin {
935
- animation: spin 1s linear infinite;
936
- }
937
- @keyframes spin {
938
- to {
939
- transform: rotate(360deg);
940
- }
941
- }
942
- .stats-panel {
943
- background: var(--surface);
944
- border: 1px solid var(--border);
945
- border-radius: var(--radius-lg);
946
- display: flex;
947
- flex-direction: column;
948
- }
949
- .stats-panel-header {
950
- padding: 16px 20px;
951
- border-bottom: 1px solid var(--border);
952
- display: flex;
953
- align-items: center;
954
- justify-content: space-between;
955
- gap: 16px;
956
- }
957
- @media (max-width: 480px) {
958
- .stats-panel-header {
959
- flex-direction: column;
960
- align-items: flex-start;
961
- gap: 8px;
962
- }
963
- }
964
- .stats-panel-header-titles {
965
- display: flex;
966
- flex-direction: column;
967
- }
968
- .stats-panel-title {
969
- font-size: 14px;
970
- font-weight: 600;
971
- color: var(--text);
972
- margin: 0;
973
- }
974
- .stats-panel-subtitle {
975
- font-size: 12px;
976
- color: var(--muted);
977
- margin: 2px 0 0 0;
978
- }
979
- .stats-panel-actions {
980
- display: flex;
981
- align-items: center;
982
- gap: 12px;
983
- }
984
- .stats-panel-body {
985
- padding: 20px;
986
- }
987
- .stats-metric-cluster {
988
- display: flex;
989
- flex-direction: column;
990
- gap: 16px;
991
- }
992
- .stats-metric-primary-grid {
993
- display: grid;
994
- grid-template-columns: repeat(5, minmax(0, 1fr));
995
- gap: 16px;
996
- }
997
- @media (max-width: 1023px) {
998
- .stats-metric-primary-grid {
999
- grid-template-columns: repeat(2, 1fr);
1000
- }
1001
- }
1002
- @media (max-width: 480px) {
1003
- .stats-metric-primary-grid {
1004
- grid-template-columns: 1fr;
1005
- }
1006
- }
1007
- .stats-metric-secondary-grid {
1008
- display: grid;
1009
- grid-template-columns: repeat(8, 1fr);
1010
- gap: 12px;
1011
- }
1012
- @media (max-width: 1279px) {
1013
- .stats-metric-secondary-grid {
1014
- grid-template-columns: repeat(4, 1fr);
1015
- }
1016
- }
1017
- @media (max-width: 767px) {
1018
- .stats-metric-secondary-grid {
1019
- grid-template-columns: repeat(2, 1fr);
1020
- }
1021
- }
1022
- .stats-metric-card {
1023
- background: var(--surface);
1024
- border: 1px solid var(--border);
1025
- border-radius: var(--radius-lg);
1026
- padding: 16px;
1027
- display: flex;
1028
- flex-direction: column;
1029
- justify-content: space-between;
1030
- }
1031
- .stats-metric-card.primary {
1032
- padding: 20px 18px;
1033
- }
1034
- .stats-metric-card.primary .stats-metric-label {
1035
- color: var(--accent);
1036
- }
1037
- .stats-metric-card.secondary {
1038
- padding: 12px 14px;
1039
- }
1040
- .stats-metric-label {
1041
- font-size: 11px;
1042
- font-weight: 600;
1043
- text-transform: uppercase;
1044
- letter-spacing: 0.05em;
1045
- color: var(--muted);
1046
- margin-bottom: 8px;
1047
- }
1048
- .stats-metric-value {
1049
- font-size: 20px;
1050
- font-weight: 700;
1051
- color: var(--text);
1052
- font-variant-numeric: tabular-nums;
1053
- }
1054
- .stats-metric-card.secondary .stats-metric-value {
1055
- font-size: 15px;
1056
- font-weight: 600;
1057
- }
1058
- .stats-table-wrapper {
1059
- width: 100%;
1060
- }
1061
- .stats-table-container {
1062
- width: 100%;
1063
- overflow-x: auto;
1064
- }
1065
- .stats-table {
1066
- width: 100%;
1067
- border-collapse: collapse;
1068
- font-size: 13px;
1069
- font-variant-numeric: tabular-nums;
1070
- }
1071
- .stats-table-th {
1072
- font-size: 11px;
1073
- font-weight: 600;
1074
- text-transform: uppercase;
1075
- letter-spacing: 0.05em;
1076
- color: var(--muted);
1077
- padding: 12px 16px;
1078
- border-bottom: 2px solid var(--border);
1079
- }
1080
- .stats-table-td {
1081
- padding: 10px 16px;
1082
- border-bottom: 1px solid var(--border);
1083
- color: var(--text);
1084
- }
1085
- .stats-table-tr {
1086
- background: transparent;
1087
- }
1088
- .stats-table-tr-clickable {
1089
- cursor: pointer;
1090
- transition: background 0.12s ease, box-shadow 0.12s ease;
1091
- }
1092
- .stats-table-tr-clickable:hover {
1093
- background: var(--surface-2);
1094
- box-shadow: inset 2px 0 0 var(--accent);
1095
- }
1096
- .stats-text-left {
1097
- text-align: left;
1098
- }
1099
- .stats-text-right {
1100
- text-align: right;
1101
- }
1102
- .stats-table-empty {
1103
- padding: 40px;
1104
- text-align: center;
1105
- color: var(--muted);
1106
- font-size: 13px;
1107
- border: 1px dashed var(--border);
1108
- border-radius: var(--radius-lg);
1109
- }
1110
- .stats-progress-bar-track {
1111
- background: var(--surface-2);
1112
- border-radius: 999px;
1113
- overflow: hidden;
1114
- }
1115
- .stats-progress-bar-fill {
1116
- height: 100%;
1117
- border-radius: inherit;
1118
- transition: width 0.18s ease;
1119
- }
1120
- .stats-progress-bar-fill[data-variant="link"] {
1121
- background: var(--link);
1122
- }
1123
- .stats-progress-bar-fill[data-variant="success"] {
1124
- background: var(--success);
1125
- }
1126
- .stats-table-mobile-only {
1127
- display: none;
1128
- }
1129
- .stats-table-desktop-only {
1130
- width: 100%;
1131
- overflow-x: auto;
1132
- }
1133
- @media (max-width: 767px) {
1134
- .stats-table-desktop-only {
1135
- display: none;
1136
- }
1137
- .stats-table-mobile-only {
1138
- display: block;
1139
- }
1140
- }
1141
- .stats-table-mobile-list {
1142
- display: flex;
1143
- flex-direction: column;
1144
- gap: 12px;
1145
- }
1146
- .stats-table-mobile-card-wrapper {
1147
- background: var(--surface);
1148
- border: 1px solid var(--border);
1149
- border-radius: var(--radius-lg);
1150
- padding: 14px;
1151
- }
1152
- .stats-status-pill {
1153
- display: inline-flex;
1154
- align-items: center;
1155
- justify-content: center;
1156
- padding: 2px 8px;
1157
- font-size: 11px;
1158
- font-weight: 600;
1159
- border-radius: 100px;
1160
- line-height: 1.2;
1161
- }
1162
- .stats-status-pill[data-variant="success"] {
1163
- background: var(--success);
1164
- @supports (color: color-mix(in lab, red, red)) {
1165
- background: color-mix(in srgb, var(--success) 18%, transparent);
1166
- }
1167
- color: var(--success);
1168
- }
1169
- .stats-status-pill[data-variant="danger"] {
1170
- background: var(--danger);
1171
- @supports (color: color-mix(in lab, red, red)) {
1172
- background: color-mix(in srgb, var(--danger) 18%, transparent);
1173
- }
1174
- color: var(--danger);
1175
- }
1176
- .stats-status-pill[data-variant="warning"] {
1177
- background: var(--warning);
1178
- @supports (color: color-mix(in lab, red, red)) {
1179
- background: color-mix(in srgb, var(--warning) 18%, transparent);
1180
- }
1181
- color: var(--warning);
1182
- }
1183
- .stats-status-pill[data-variant="info"] {
1184
- background: var(--link);
1185
- @supports (color: color-mix(in lab, red, red)) {
1186
- background: color-mix(in srgb, var(--link) 18%, transparent);
1187
- }
1188
- color: var(--link);
1189
- }
1190
- .stats-status-pill[data-variant="default"] {
1191
- background: var(--surface-2);
1192
- color: var(--muted);
1193
- }
1194
- .stats-segmented-control {
1195
- display: flex;
1196
- background: var(--surface-2);
1197
- border: 1px solid var(--border);
1198
- border-radius: var(--radius-md);
1199
- padding: 2px;
1200
- gap: 2px;
1201
- }
1202
- .stats-segmented-control-btn {
1203
- padding: 6px 12px;
1204
- font-size: 12px;
1205
- font-weight: 500;
1206
- color: var(--muted);
1207
- background: transparent;
1208
- border: none;
1209
- border-radius: var(--radius-sm);
1210
- cursor: pointer;
1211
- transition: all 0.1s ease;
1212
- white-space: nowrap;
1213
- }
1214
- .stats-segmented-control-btn:hover {
1215
- color: var(--text);
1216
- }
1217
- .stats-segmented-control-btn[data-active="true"] {
1218
- color: var(--text);
1219
- background: var(--surface);
1220
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.18);
1221
- }
1222
- .stats-drawer-overlay {
1223
- position: fixed;
1224
- inset: 0;
1225
- background: rgba(0, 0, 0, 0.5);
1226
- z-index: 100;
1227
- display: flex;
1228
- justify-content: flex-end;
1229
- }
1230
- .stats-drawer {
1231
- width: 600px;
1232
- max-width: 100%;
1233
- height: 100%;
1234
- background: var(--surface);
1235
- border-left: 1px solid var(--border);
1236
- display: flex;
1237
- flex-direction: column;
1238
- animation: drawerSlide 0.25s cubic-bezier(0.16, 1, 0.3, 1);
1239
- box-shadow: -4px 0 24px rgba(0, 0, 0, 0.25);
1240
- }
1241
- @keyframes drawerSlide {
1242
- from {
1243
- transform: translateX(100%);
1244
- }
1245
- to {
1246
- transform: translateX(0);
1247
- }
1248
- }
1249
- .stats-drawer-header {
1250
- height: 56px;
1251
- border-bottom: 1px solid var(--border);
1252
- padding: 0 24px;
1253
- display: flex;
1254
- align-items: center;
1255
- justify-content: space-between;
1256
- background: var(--surface);
1257
- flex-shrink: 0;
1258
- }
1259
- .stats-drawer-header-left {
1260
- display: flex;
1261
- align-items: baseline;
1262
- gap: 12px;
1263
- }
1264
- .stats-drawer-title {
1265
- font-size: 15px;
1266
- font-weight: 600;
1267
- color: var(--text);
1268
- margin: 0;
1269
- }
1270
- .stats-drawer-id {
1271
- font-size: 11px;
1272
- color: var(--muted);
1273
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1274
- }
1275
- .stats-drawer-close-btn {
1276
- background: transparent;
1277
- border: none;
1278
- color: var(--muted);
1279
- cursor: pointer;
1280
- padding: 4px;
1281
- display: inline-flex;
1282
- align-items: center;
1283
- justify-content: center;
1284
- border-radius: var(--radius-sm);
1285
- transition: all 0.1s ease;
1286
- }
1287
- .stats-drawer-close-btn:hover {
1288
- color: var(--text);
1289
- background: var(--surface-2);
1290
- }
1291
- .stats-drawer-body {
1292
- flex: 1;
1293
- overflow-y: auto;
1294
- padding: 24px;
1295
- }
1296
- .stats-drawer-content {
1297
- display: flex;
1298
- flex-direction: column;
1299
- gap: 24px;
1300
- }
1301
- .stats-drawer-status-card {
1302
- background: var(--surface-2);
1303
- border: 1px solid var(--border);
1304
- border-radius: var(--radius-lg);
1305
- padding: 16px;
1306
- }
1307
- .stats-drawer-status-row {
1308
- display: flex;
1309
- justify-content: space-between;
1310
- align-items: flex-start;
1311
- gap: 16px;
1312
- }
1313
- .stats-drawer-model {
1314
- font-size: 16px;
1315
- font-weight: 700;
1316
- color: var(--text);
1317
- }
1318
- .stats-drawer-provider {
1319
- font-size: 12px;
1320
- color: var(--muted);
1321
- margin-top: 2px;
1322
- }
1323
- .stats-drawer-error-block {
1324
- margin-top: 14px;
1325
- border-top: 1px solid var(--border);
1326
- padding-top: 12px;
1327
- }
1328
- .stats-drawer-error-label {
1329
- font-size: 11px;
1330
- font-weight: 600;
1331
- text-transform: uppercase;
1332
- letter-spacing: 0.05em;
1333
- color: var(--danger);
1334
- margin-bottom: 4px;
1335
- }
1336
- .stats-drawer-error-text {
1337
- font-size: 12px;
1338
- color: var(--text);
1339
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1340
- white-space: pre-wrap;
1341
- word-break: break-all;
1342
- }
1343
- .stats-drawer-metrics-grid {
1344
- display: grid;
1345
- grid-template-columns: repeat(2, 1fr);
1346
- gap: 12px;
1347
- }
1348
- .stats-drawer-metric-card {
1349
- background: var(--surface);
1350
- border: 1px solid var(--border);
1351
- border-radius: var(--radius-lg);
1352
- padding: 14px;
1353
- display: flex;
1354
- flex-direction: column;
1355
- justify-content: center;
1356
- }
1357
- .stats-drawer-metric-label {
1358
- display: flex;
1359
- align-items: center;
1360
- gap: 6px;
1361
- font-size: 11px;
1362
- font-weight: 600;
1363
- text-transform: uppercase;
1364
- letter-spacing: 0.05em;
1365
- color: var(--muted);
1366
- margin-bottom: 6px;
1367
- }
1368
- .stats-drawer-metric-icon {
1369
- color: var(--dim);
1370
- }
1371
- .stats-drawer-metric-value {
1372
- font-size: 16px;
1373
- font-weight: 700;
1374
- color: var(--text);
1375
- font-variant-numeric: tabular-nums;
1376
- }
1377
- .stats-drawer-metric-sub {
1378
- font-size: 11px;
1379
- color: var(--muted);
1380
- margin-top: 2px;
1381
- font-variant-numeric: tabular-nums;
1382
- }
1383
- .stats-drawer-json-blocks {
1384
- display: flex;
1385
- flex-direction: column;
1386
- gap: 16px;
1387
- }
1388
- .stats-json-block {
1389
- border: 1px solid var(--border);
1390
- border-radius: var(--radius-lg);
1391
- background: var(--surface);
1392
- overflow: hidden;
1393
- }
1394
- .stats-json-block-header {
1395
- padding: 10px 16px;
1396
- background: var(--surface-2);
1397
- border-bottom: 1px solid var(--border);
1398
- display: flex;
1399
- justify-content: space-between;
1400
- align-items: center;
1401
- cursor: pointer;
1402
- user-select: none;
1403
- font-size: 12px;
1404
- font-weight: 600;
1405
- }
1406
- .stats-json-block-header:hover {
1407
- background: var(--border);
1408
- }
1409
- .stats-json-block-title {
1410
- color: var(--text);
1411
- }
1412
- .stats-json-block-toggle-indicator {
1413
- color: var(--muted);
1414
- }
1415
- .stats-json-block-content-wrapper {
1416
- padding: 16px;
1417
- background: var(--page);
1418
- overflow-x: auto;
1419
- }
1420
- .stats-json-block-content {
1421
- margin: 0;
1422
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1423
- font-size: 12px;
1424
- color: var(--text);
1425
- line-height: 1.5;
1426
- }
1427
- .stats-skeleton {
1428
- background: var(--surface-2);
1429
- position: relative;
1430
- overflow: hidden;
1431
- border-radius: var(--radius-sm);
1432
- }
1433
- .stats-skeleton[data-variant="text"] {
1434
- height: 14px;
1435
- margin-top: 4px;
1436
- margin-bottom: 4px;
1437
- }
1438
- .stats-skeleton[data-variant="circle"] {
1439
- border-radius: 50%;
1440
- }
1441
- .stats-skeleton::after {
1442
- content: "";
1443
- position: absolute;
1444
- inset: 0;
1445
- transform: translateX(-100%);
1446
- background: linear-gradient( 90deg, transparent 0%, rgba(255, 255, 255, 0.05) 50%, transparent 100% );
1447
- animation: shimmer 1.5s infinite;
1448
- }
1449
- @media (prefers-color-scheme: light) {
1450
- .stats-skeleton::after {
1451
- background: linear-gradient( 90deg, transparent 0%, rgba(0, 0, 0, 0.03) 50%, transparent 100% );
1452
- }
1453
- }
1454
- @keyframes shimmer {
1455
- 100% {
1456
- transform: translateX(100%);
1457
- }
1458
- }
1459
- @media (prefers-reduced-motion: reduce) {
1460
- .stats-skeleton::after {
1461
- animation: none;
1462
- }
1463
- }
1464
- .stats-boundary-skeleton {
1465
- padding: 20px;
1466
- border: 1px solid var(--border);
1467
- border-radius: var(--radius-lg);
1468
- background: var(--surface);
1469
- }
1470
- .stats-empty-state, .stats-error-state {
1471
- padding: 48px 24px;
1472
- display: flex;
1473
- flex-direction: column;
1474
- align-items: center;
1475
- justify-content: center;
1476
- text-align: center;
1477
- background: var(--surface);
1478
- border: 1px dashed var(--border);
1479
- border-radius: var(--radius-lg);
1480
- }
1481
- .stats-empty-state-message {
1482
- font-size: 13px;
1483
- color: var(--muted);
1484
- margin: 0;
1485
- }
1486
- .stats-error-state-content {
1487
- max-width: 360px;
1488
- }
1489
- .stats-error-state-title {
1490
- font-size: 14px;
1491
- font-weight: 600;
1492
- color: var(--text);
1493
- margin: 0 0 8px 0;
1494
- }
1495
- .stats-error-state-message {
1496
- font-size: 12px;
1497
- color: var(--danger);
1498
- margin: 0 0 16px 0;
1499
- word-break: break-word;
1500
- }
1501
- .stats-error-state-btn {
1502
- margin: 0 auto;
1503
- }
1504
- .stats-text-primary {
1505
- color: var(--text);
1506
- }
1507
- .stats-text-secondary {
1508
- color: var(--muted);
1509
- }
1510
- .stats-text-muted {
1511
- color: var(--dim);
1512
- }
1513
- .stats-text-warning {
1514
- color: var(--warning);
1515
- }
1516
- .stats-text-xs {
1517
- font-size: 12px;
1518
- }
1519
- .stats-font-medium {
1520
- font-weight: 500;
1521
- }
1522
- .stats-font-semibold {
1523
- font-weight: 600;
1524
- }
1525
- * {
1526
- scrollbar-width: thin;
1527
- scrollbar-color: var(--border-strong) transparent;
1528
- }
1529
- *::-webkit-scrollbar {
1530
- width: 10px;
1531
- height: 10px;
1532
- }
1533
- *::-webkit-scrollbar-track {
1534
- background: transparent;
1535
- }
1536
- *::-webkit-scrollbar-thumb {
1537
- background: var(--border-strong);
1538
- border: 2px solid transparent;
1539
- background-clip: padding-box;
1540
- border-radius: 999px;
1541
- }
1542
- *::-webkit-scrollbar-thumb:hover {
1543
- background: var(--dim);
1544
- border: 2px solid transparent;
1545
- background-clip: padding-box;
1546
- }
1547
- *::-webkit-scrollbar-corner {
1548
- background: transparent;
1549
- }
1550
- @media (prefers-reduced-motion: reduce) {
1551
- .stats-button, .stats-table-tr-clickable, .stats-nav-rail-item, .stats-range-control-btn, .stats-segmented-control-btn {
1552
- transition: none;
1553
- }
1554
- .stats-button:active:not(:disabled) {
1555
- transform: none;
1556
- }
1557
- .stats-mobile-drawer, .stats-drawer {
1558
- animation: none;
1559
- }
1560
- }
1561
- .stats-logo-container {
1562
- display: grid;
1563
- grid-template-columns: auto 1fr;
1564
- align-items: center;
1565
- column-gap: 10px;
1566
- }
1567
- .stats-logo-container::before {
1568
- content: "";
1569
- grid-row: 1 / 3;
1570
- width: 16px;
1571
- height: 16px;
1572
- border-radius: 4px;
1573
- background: linear-gradient(135deg, #ed4abf 0%, #9b4dff 50%, #5ad8e6 100%);
1574
- }
1575
- .stats-logo-text, .stats-logo-subtext {
1576
- grid-column: 2;
1577
- }
1578
- .stats-json-actions {
1579
- display: flex;
1580
- align-items: center;
1581
- gap: 12px;
1582
- }
1583
- .stats-json-copy-btn {
1584
- display: inline-flex;
1585
- align-items: center;
1586
- gap: 5px;
1587
- font-size: 11px;
1588
- font-weight: 600;
1589
- color: var(--muted);
1590
- background: transparent;
1591
- border: 1px solid var(--border);
1592
- border-radius: var(--radius-sm);
1593
- padding: 3px 8px;
1594
- cursor: pointer;
1595
- font-family: inherit;
1596
- transition: color 0.12s ease, background 0.12s ease;
1597
- }
1598
- .stats-json-copy-btn:hover {
1599
- color: var(--text);
1600
- background: var(--surface-2);
1601
- }
1602
- .stats-empty-state-icon {
1603
- color: var(--dim);
1604
- margin-bottom: 12px;
1605
- }
1606
- @media (prefers-reduced-motion: reduce) {
1607
- .stats-json-copy-btn {
1608
- transition: none;
1609
- }
1610
- }
1611
- .stats-theme-toggle {
1612
- display: inline-flex;
1613
- align-items: center;
1614
- justify-content: center;
1615
- width: 32px;
1616
- height: 32px;
1617
- flex-shrink: 0;
1618
- border: 1px solid var(--border);
1619
- border-radius: var(--radius-md);
1620
- background: var(--surface);
1621
- color: var(--muted);
1622
- cursor: pointer;
1623
- transition: color 0.14s ease, background 0.14s ease, border-color 0.14s ease;
1624
- }
1625
- .stats-theme-toggle:hover {
1626
- color: var(--text);
1627
- border-color: var(--border-strong);
1628
- }
1629
- @media (prefers-reduced-motion: reduce) {
1630
- .stats-theme-toggle {
1631
- transition: none;
1632
- }
1633
- }
1634
- .stats-trace-view {
1635
- display: flex;
1636
- flex-direction: column;
1637
- gap: 14px;
1638
- }
1639
- .stats-trace-header {
1640
- display: flex;
1641
- align-items: center;
1642
- gap: 12px;
1643
- flex-wrap: wrap;
1644
- min-width: 0;
1645
- }
1646
- .stats-trace-back {
1647
- display: inline-flex;
1648
- align-items: center;
1649
- gap: 6px;
1650
- padding: 6px 12px;
1651
- font-size: 12px;
1652
- color: var(--muted);
1653
- background: var(--surface);
1654
- border: 1px solid var(--border);
1655
- border-radius: var(--radius-md);
1656
- cursor: pointer;
1657
- transition: color 0.14s ease, border-color 0.14s ease;
1658
- }
1659
- .stats-trace-back:hover {
1660
- color: var(--text);
1661
- border-color: var(--border-strong);
1662
- }
1663
- .stats-trace-back:focus-visible {
1664
- outline: 2px solid var(--link);
1665
- outline-offset: 2px;
1666
- }
1667
- .stats-trace-title {
1668
- font-size: 15px;
1669
- font-weight: 600;
1670
- color: var(--text);
1671
- margin: 0;
1672
- min-width: 0;
1673
- overflow: hidden;
1674
- text-overflow: ellipsis;
1675
- white-space: nowrap;
1676
- }
1677
- .stats-trace-cwd {
1678
- font-size: 11px;
1679
- color: var(--dim);
1680
- border: 1px solid var(--border);
1681
- border-radius: 999px;
1682
- padding: 3px 10px;
1683
- max-width: 280px;
1684
- overflow: hidden;
1685
- text-overflow: ellipsis;
1686
- white-space: nowrap;
1687
- }
1688
- .stats-trace-summary {
1689
- display: flex;
1690
- flex-wrap: wrap;
1691
- background: var(--surface);
1692
- border: 1px solid var(--border);
1693
- border-radius: var(--radius-lg);
1694
- overflow: hidden;
1695
- }
1696
- .stats-trace-summary-cell {
1697
- display: flex;
1698
- flex-direction: column;
1699
- gap: 3px;
1700
- padding: 10px 16px;
1701
- border-right: 1px solid var(--border);
1702
- min-width: 76px;
1703
- }
1704
- .stats-trace-summary-cell:last-child {
1705
- border-right: none;
1706
- }
1707
- .stats-trace-summary-label {
1708
- font-size: 9px;
1709
- text-transform: uppercase;
1710
- letter-spacing: 0.07em;
1711
- color: var(--dim);
1712
- }
1713
- .stats-trace-summary-value {
1714
- font-size: 13px;
1715
- font-weight: 500;
1716
- color: var(--text);
1717
- font-variant-numeric: tabular-nums;
1718
- }
1719
- .stats-trace-toolbar {
1720
- display: flex;
1721
- align-items: center;
1722
- gap: 12px;
1723
- flex-wrap: wrap;
1724
- }
1725
- .stats-trace-toolbar-hint {
1726
- font-size: 10px;
1727
- color: var(--dim);
1728
- margin-left: auto;
1729
- }
1730
- .stats-trace-input {
1731
- background: var(--surface);
1732
- border: 1px solid var(--border);
1733
- border-radius: var(--radius-md);
1734
- color: var(--text);
1735
- font-family: inherit;
1736
- font-size: 12px;
1737
- padding: 6px 10px;
1738
- }
1739
- @media (pointer: coarse) {
1740
- .stats-trace-input {
1741
- font-size: 16px;
1742
- }
1743
- }
1744
- .stats-trace-input::-webkit-search-cancel-button {
1745
- filter: invert(1);
1746
- }
1747
- @media (prefers-color-scheme: light) {
1748
- :root:not([data-theme]) .stats-trace-input::-webkit-search-cancel-button {
1749
- filter: none;
1750
- }
1751
- }
1752
- [data-theme="light"] .stats-trace-input::-webkit-search-cancel-button {
1753
- filter: none;
1754
- }
1755
- .stats-trace-input:focus-visible {
1756
- outline: 2px solid var(--link);
1757
- outline-offset: 1px;
1758
- }
1759
- .stats-trace-input::placeholder {
1760
- color: var(--dim);
1761
- }
1762
- .stats-trace-check {
1763
- display: inline-flex;
1764
- align-items: center;
1765
- gap: 6px;
1766
- font-size: 12px;
1767
- color: var(--muted);
1768
- cursor: pointer;
1769
- user-select: none;
1770
- }
1771
- .stats-trace-check input[type="checkbox"] {
1772
- accent-color: var(--accent);
1773
- }
1774
- .stats-trace-icon-btn {
1775
- display: inline-flex;
1776
- align-items: center;
1777
- justify-content: center;
1778
- width: 26px;
1779
- height: 26px;
1780
- background: transparent;
1781
- border: 1px solid var(--border);
1782
- border-radius: var(--radius-md);
1783
- color: var(--muted);
1784
- cursor: pointer;
1785
- transition: color 0.14s ease, border-color 0.14s ease;
1786
- }
1787
- .stats-trace-icon-btn:hover:not(:disabled) {
1788
- color: var(--text);
1789
- border-color: var(--border-strong);
1790
- }
1791
- .stats-trace-icon-btn:focus-visible {
1792
- outline: 2px solid var(--link);
1793
- outline-offset: 2px;
1794
- }
1795
- .stats-trace-icon-btn:disabled {
1796
- opacity: 0.4;
1797
- cursor: default;
1798
- }
1799
- .stats-trace-timeline-card {
1800
- background: var(--surface);
1801
- border: 1px solid var(--border);
1802
- border-radius: var(--radius-lg);
1803
- padding: 12px;
1804
- display: flex;
1805
- flex-direction: column;
1806
- gap: 10px;
1807
- }
1808
- .stats-trace-timeline {
1809
- position: relative;
1810
- display: flex;
1811
- max-height: 560px;
1812
- overflow-y: auto;
1813
- overflow-x: hidden;
1814
- }
1815
- .stats-trace-canvas {
1816
- cursor: grab;
1817
- outline: none;
1818
- touch-action: none;
1819
- border-radius: var(--radius-sm);
1820
- }
1821
- .stats-trace-canvas:focus-visible {
1822
- outline: 2px solid var(--link);
1823
- outline-offset: 2px;
1824
- }
1825
- .stats-trace-canvas:active {
1826
- cursor: grabbing;
1827
- }
1828
- .stats-trace-chevron {
1829
- display: inline-flex;
1830
- background: none;
1831
- border: none;
1832
- padding: 0;
1833
- cursor: pointer;
1834
- color: var(--muted);
1835
- }
1836
- .stats-trace-chevron:hover {
1837
- color: var(--text);
1838
- }
1839
- .stats-trace-gutter-track {
1840
- font-size: 11px;
1841
- font-weight: 500;
1842
- color: var(--text);
1843
- }
1844
- .stats-trace-gutter-model {
1845
- font-size: 9px;
1846
- color: var(--dim);
1847
- }
1848
- .stats-trace-gutter-lane {
1849
- position: absolute;
1850
- font-size: 8px;
1851
- color: var(--dim);
1852
- text-transform: uppercase;
1853
- letter-spacing: 0.08em;
1854
- }
1855
- .stats-trace-list {
1856
- background: var(--surface);
1857
- border: 1px solid var(--border);
1858
- border-radius: var(--radius-lg);
1859
- height: 340px;
1860
- overflow-y: auto;
1861
- }
1862
- .stats-trace-row {
1863
- display: flex;
1864
- align-items: center;
1865
- gap: 10px;
1866
- height: 28px;
1867
- width: 100%;
1868
- padding: 0 12px;
1869
- background: transparent;
1870
- border: none;
1871
- border-bottom: 1px solid var(--border);
1872
- text-align: left;
1873
- cursor: pointer;
1874
- transition: background 0.1s ease;
1875
- }
1876
- .stats-trace-row:hover {
1877
- background: var(--bg-hover);
1878
- }
1879
- .stats-trace-row:focus-visible {
1880
- outline: 2px solid var(--link);
1881
- outline-offset: -2px;
1882
- }
1883
- .stats-trace-row[data-selected="true"] {
1884
- background: var(--accent-muted);
1885
- }
1886
- .stats-trace-row-static {
1887
- cursor: default;
1888
- }
1889
- .stats-trace-row-static:hover {
1890
- background: transparent;
1891
- }
1892
- .stats-trace-kind {
1893
- flex-shrink: 0;
1894
- width: 58px;
1895
- font-size: 8px;
1896
- text-transform: uppercase;
1897
- letter-spacing: 0.06em;
1898
- border-radius: 3px;
1899
- padding: 2px 0;
1900
- text-align: center;
1901
- overflow: hidden;
1902
- text-overflow: ellipsis;
1903
- white-space: nowrap;
1904
- }
1905
- .stats-trace-row-meta {
1906
- flex-shrink: 0;
1907
- margin-left: auto;
1908
- font-size: 10px;
1909
- color: var(--dim);
1910
- font-variant-numeric: tabular-nums;
1911
- display: flex;
1912
- gap: 10px;
1913
- }
1914
- @media (prefers-reduced-motion: reduce) {
1915
- .stats-trace-back, .stats-trace-icon-btn, .stats-trace-row {
1916
- transition: none;
1917
- }
1918
- }
1919
- @property --tw-space-y-reverse {
1920
- syntax: "*";
1921
- inherits: false;
1922
- initial-value: 0;
1923
- }
1924
- @property --tw-border-style {
1925
- syntax: "*";
1926
- inherits: false;
1927
- initial-value: solid;
1928
- }
1929
- @property --tw-font-weight {
1930
- syntax: "*";
1931
- inherits: false;
1932
- }
1933
- @property --tw-tracking {
1934
- syntax: "*";
1935
- inherits: false;
1936
- }
1937
- @property --tw-ordinal {
1938
- syntax: "*";
1939
- inherits: false;
1940
- }
1941
- @property --tw-slashed-zero {
1942
- syntax: "*";
1943
- inherits: false;
1944
- }
1945
- @property --tw-numeric-figure {
1946
- syntax: "*";
1947
- inherits: false;
1948
- }
1949
- @property --tw-numeric-spacing {
1950
- syntax: "*";
1951
- inherits: false;
1952
- }
1953
- @property --tw-numeric-fraction {
1954
- syntax: "*";
1955
- inherits: false;
1956
- }
1957
- @keyframes spin {
1958
- to {
1959
- transform: rotate(360deg);
1960
- }
1961
- }
1962
- @layer properties {
1963
- @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
1964
- *, ::before, ::after, ::backdrop {
1965
- --tw-space-y-reverse: 0;
1966
- --tw-border-style: solid;
1967
- --tw-font-weight: initial;
1968
- --tw-tracking: initial;
1969
- --tw-ordinal: initial;
1970
- --tw-slashed-zero: initial;
1971
- --tw-numeric-figure: initial;
1972
- --tw-numeric-spacing: initial;
1973
- --tw-numeric-fraction: initial;
1974
- }
1975
- }
1976
- }