@stacksjs/ts-analytics 0.1.6

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 (237) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +361 -0
  4. package/bin/cli.ts +169 -0
  5. package/dist/Analytics.d.ts +558 -0
  6. package/dist/api.d.ts +109 -0
  7. package/dist/batching.d.ts +93 -0
  8. package/dist/chunk-2mx7fq49.js +4 -0
  9. package/dist/chunk-3z29508k.js +204 -0
  10. package/dist/chunk-deephkz6.js +56 -0
  11. package/dist/chunk-j261vgyp.js +305 -0
  12. package/dist/chunk-xga17tz7.js +207 -0
  13. package/dist/config.d.ts +132 -0
  14. package/dist/dashboard/components/index.d.ts +80 -0
  15. package/dist/dashboard/composables/useAnalytics.d.ts +99 -0
  16. package/dist/dashboard/index.d.ts +110 -0
  17. package/dist/dashboard/types/index.d.ts +144 -0
  18. package/dist/dashboard/utils/index.d.ts +81 -0
  19. package/dist/dynamodb.d.ts +86 -0
  20. package/dist/funnels.d.ts +104 -0
  21. package/dist/geolocation.d.ts +96 -0
  22. package/dist/index.d.ts +371 -0
  23. package/dist/index.js +10211 -0
  24. package/dist/infrastructure/cdk.d.ts +60 -0
  25. package/dist/infrastructure/cloudformation.d.ts +44 -0
  26. package/dist/infrastructure/index.d.ts +45 -0
  27. package/dist/infrastructure/setup.d.ts +133 -0
  28. package/dist/integrations/cloudflare.d.ts +76 -0
  29. package/dist/integrations/hono.d.ts +60 -0
  30. package/dist/integrations/index.d.ts +24 -0
  31. package/dist/integrations/nuxt.d.ts +7 -0
  32. package/dist/integrations/nuxt.js +42 -0
  33. package/dist/integrations/runtime/use-ts-analytics.d.ts +18 -0
  34. package/dist/integrations/runtime/use-ts-analytics.js +17 -0
  35. package/dist/integrations/stx.d.ts +88 -0
  36. package/dist/integrations/stx.js +18 -0
  37. package/dist/lib/crypto-random.d.ts +4 -0
  38. package/dist/lib/salt.d.ts +16 -0
  39. package/dist/local.d.ts +56 -0
  40. package/dist/model-connector.d.ts +145 -0
  41. package/dist/models/AggregatedStats.d.ts +9 -0
  42. package/dist/models/CampaignStats.d.ts +9 -0
  43. package/dist/models/Conversion.d.ts +11 -0
  44. package/dist/models/CustomEvent.d.ts +11 -0
  45. package/dist/models/DeviceStats.d.ts +9 -0
  46. package/dist/models/EventStats.d.ts +9 -0
  47. package/dist/models/GeoStats.d.ts +9 -0
  48. package/dist/models/Goal.d.ts +9 -0
  49. package/dist/models/GoalStats.d.ts +9 -0
  50. package/dist/models/PageStats.d.ts +11 -0
  51. package/dist/models/PageView.d.ts +13 -0
  52. package/dist/models/RealtimeStats.d.ts +9 -0
  53. package/dist/models/ReferrerStats.d.ts +9 -0
  54. package/dist/models/Session.d.ts +11 -0
  55. package/dist/models/Site.d.ts +11 -0
  56. package/dist/models/index.d.ts +28 -0
  57. package/dist/models/types.d.ts +60 -0
  58. package/dist/sqs-buffering.d.ts +243 -0
  59. package/dist/stacks-integration.d.ts +159 -0
  60. package/dist/tracking-script.d.ts +71 -0
  61. package/dist/tracking.d.ts +17 -0
  62. package/dist/tracking.js +26 -0
  63. package/dist/types.d.ts +595 -0
  64. package/dist/utils/geolocation.d.ts +111 -0
  65. package/dist/utils/user-agent.d.ts +17 -0
  66. package/dist/version.d.ts +7 -0
  67. package/package.json +119 -0
  68. package/src/Analytics.ts +3349 -0
  69. package/src/api.ts +1286 -0
  70. package/src/assets/crosswind.css +2220 -0
  71. package/src/batching.ts +452 -0
  72. package/src/components/dashboard/index.ts +18 -0
  73. package/src/config.ts +456 -0
  74. package/src/dashboard/Dashboard.stx +1517 -0
  75. package/src/dashboard/components/AlertCard.stx +177 -0
  76. package/src/dashboard/components/AnalyticsDashboard.stx +354 -0
  77. package/src/dashboard/components/AnimatedNumber.stx +86 -0
  78. package/src/dashboard/components/BarChart.stx +220 -0
  79. package/src/dashboard/components/BrowserBreakdown.stx +98 -0
  80. package/src/dashboard/components/BrowsersTable.stx +125 -0
  81. package/src/dashboard/components/CampaignBreakdown.stx +163 -0
  82. package/src/dashboard/components/CampaignTable.stx +238 -0
  83. package/src/dashboard/components/CountryList.stx +101 -0
  84. package/src/dashboard/components/DataTable.stx +226 -0
  85. package/src/dashboard/components/DateRangePicker.stx +77 -0
  86. package/src/dashboard/components/DeviceBreakdown.stx +94 -0
  87. package/src/dashboard/components/DevicesTable.stx +163 -0
  88. package/src/dashboard/components/DonutChart.stories.ts +55 -0
  89. package/src/dashboard/components/DonutChart.stx +157 -0
  90. package/src/dashboard/components/EmptyState.stx +90 -0
  91. package/src/dashboard/components/EngagementMetrics.stx +183 -0
  92. package/src/dashboard/components/EventsSection.stx +192 -0
  93. package/src/dashboard/components/FilterBar.stx +104 -0
  94. package/src/dashboard/components/FullAnalyticsDashboard.stx +455 -0
  95. package/src/dashboard/components/FunnelChart.stx +142 -0
  96. package/src/dashboard/components/GeoTable.stx +337 -0
  97. package/src/dashboard/components/GoalsPanel.stx +109 -0
  98. package/src/dashboard/components/Header.stx +39 -0
  99. package/src/dashboard/components/HeatmapChart.stx +140 -0
  100. package/src/dashboard/components/LiveActivityFeed.stx +172 -0
  101. package/src/dashboard/components/MetricComparison.stx +106 -0
  102. package/src/dashboard/components/MiniStats.stx +96 -0
  103. package/src/dashboard/components/OSBreakdown.stx +124 -0
  104. package/src/dashboard/components/PageDetailCard.stx +102 -0
  105. package/src/dashboard/components/PagesTable.stx +127 -0
  106. package/src/dashboard/components/ProgressRing.stx +89 -0
  107. package/src/dashboard/components/RealtimeCounter.stories.ts +45 -0
  108. package/src/dashboard/components/RealtimeCounter.stx +46 -0
  109. package/src/dashboard/components/ReferrersTable.stx +180 -0
  110. package/src/dashboard/components/SparklineChart.stx +160 -0
  111. package/src/dashboard/components/StatCard.stories.ts +58 -0
  112. package/src/dashboard/components/StatCard.stx +90 -0
  113. package/src/dashboard/components/SummaryStats.stx +81 -0
  114. package/src/dashboard/components/TabNav.stx +66 -0
  115. package/src/dashboard/components/ThemeSwitcher.stx +124 -0
  116. package/src/dashboard/components/TimeSeriesChart.stx +106 -0
  117. package/src/dashboard/components/TopList.stories.ts +58 -0
  118. package/src/dashboard/components/TopList.stx +74 -0
  119. package/src/dashboard/components/TrendIndicator.stx +84 -0
  120. package/src/dashboard/components/heatmap/ClickHeatmap.stx +264 -0
  121. package/src/dashboard/components/heatmap/ElementClickList.stx +125 -0
  122. package/src/dashboard/components/heatmap/HeatmapControls.stx +125 -0
  123. package/src/dashboard/components/heatmap/HeatmapLegend.stx +69 -0
  124. package/src/dashboard/components/heatmap/PageHeatmap.stx +264 -0
  125. package/src/dashboard/components/heatmap/ScrollHeatmap.stx +127 -0
  126. package/src/dashboard/components/heatmap/index.ts +12 -0
  127. package/src/dashboard/components/index.ts +86 -0
  128. package/src/dashboard/composables/useAnalytics.ts +465 -0
  129. package/src/dashboard/demo/DemoApp.stx +370 -0
  130. package/src/dashboard/demo/index.ts +8 -0
  131. package/src/dashboard/demo/mockData.ts +234 -0
  132. package/src/dashboard/index.ts +117 -0
  133. package/src/dashboard/stx-shim.d.ts +4 -0
  134. package/src/dashboard/types/index.ts +203 -0
  135. package/src/dashboard/utils/index.ts +426 -0
  136. package/src/dynamodb.ts +344 -0
  137. package/src/funnels.ts +534 -0
  138. package/src/geolocation.ts +515 -0
  139. package/src/handlers/alerts.ts +328 -0
  140. package/src/handlers/annotations.ts +128 -0
  141. package/src/handlers/api-keys.ts +240 -0
  142. package/src/handlers/auth.ts +1020 -0
  143. package/src/handlers/authz.ts +137 -0
  144. package/src/handlers/collect.ts +724 -0
  145. package/src/handlers/data.ts +625 -0
  146. package/src/handlers/experiments.ts +138 -0
  147. package/src/handlers/funnels.ts +216 -0
  148. package/src/handlers/goals.ts +218 -0
  149. package/src/handlers/heatmaps.ts +272 -0
  150. package/src/handlers/index.ts +56 -0
  151. package/src/handlers/lib/read-cache.ts +63 -0
  152. package/src/handlers/misc.ts +486 -0
  153. package/src/handlers/oauth.ts +233 -0
  154. package/src/handlers/performance.ts +388 -0
  155. package/src/handlers/sessions.ts +413 -0
  156. package/src/handlers/sharing.ts +198 -0
  157. package/src/handlers/stats.ts +1368 -0
  158. package/src/handlers/team.ts +161 -0
  159. package/src/handlers/uptime.ts +283 -0
  160. package/src/handlers/views.ts +390 -0
  161. package/src/handlers/webhooks.ts +226 -0
  162. package/src/heatmap/index.ts +32 -0
  163. package/src/heatmap/tracking-script.ts +452 -0
  164. package/src/heatmap/types.ts +79 -0
  165. package/src/index.ts +387 -0
  166. package/src/infrastructure/cdk.ts +496 -0
  167. package/src/infrastructure/cloudformation.ts +595 -0
  168. package/src/infrastructure/index.ts +48 -0
  169. package/src/infrastructure/setup.ts +611 -0
  170. package/src/integrations/cloudflare.ts +732 -0
  171. package/src/integrations/hono.ts +589 -0
  172. package/src/integrations/index.ts +27 -0
  173. package/src/integrations/nuxt.ts +78 -0
  174. package/src/integrations/runtime/use-ts-analytics.ts +32 -0
  175. package/src/integrations/stx.ts +138 -0
  176. package/src/jobs/index.ts +127 -0
  177. package/src/lib/crypto-random.ts +41 -0
  178. package/src/lib/ddb-errors.ts +20 -0
  179. package/src/lib/dynamodb.ts +216 -0
  180. package/src/lib/email.ts +38 -0
  181. package/src/lib/ga-import.ts +471 -0
  182. package/src/lib/ga4-api.ts +244 -0
  183. package/src/lib/goals.ts +205 -0
  184. package/src/lib/index.ts +6 -0
  185. package/src/lib/ingest-counters.ts +123 -0
  186. package/src/lib/log.ts +36 -0
  187. package/src/lib/membership.ts +98 -0
  188. package/src/lib/plans.ts +90 -0
  189. package/src/lib/quota.ts +46 -0
  190. package/src/lib/rate-limit.ts +27 -0
  191. package/src/lib/rollups.ts +472 -0
  192. package/src/lib/salt.ts +97 -0
  193. package/src/lib/scheduler.ts +97 -0
  194. package/src/lib/significance.ts +66 -0
  195. package/src/lib/site-retention.ts +56 -0
  196. package/src/local.ts +360 -0
  197. package/src/model-connector.ts +616 -0
  198. package/src/models/AggregatedStats.ts +162 -0
  199. package/src/models/CampaignStats.ts +141 -0
  200. package/src/models/Conversion.ts +135 -0
  201. package/src/models/CustomEvent.ts +123 -0
  202. package/src/models/DeviceStats.ts +105 -0
  203. package/src/models/EventStats.ts +108 -0
  204. package/src/models/GeoStats.ts +112 -0
  205. package/src/models/Goal.ts +105 -0
  206. package/src/models/GoalStats.ts +106 -0
  207. package/src/models/PageStats.ts +152 -0
  208. package/src/models/PageView.ts +277 -0
  209. package/src/models/RealtimeStats.ts +96 -0
  210. package/src/models/ReferrerStats.ts +115 -0
  211. package/src/models/Session.ts +235 -0
  212. package/src/models/Site.ts +115 -0
  213. package/src/models/index.ts +50 -0
  214. package/src/models/orm/index.ts +2043 -0
  215. package/src/models/types.ts +71 -0
  216. package/src/router.ts +521 -0
  217. package/src/sqs-buffering.ts +806 -0
  218. package/src/stacks-integration.ts +527 -0
  219. package/src/tracking-script.ts +944 -0
  220. package/src/tracking.ts +27 -0
  221. package/src/types/analytics.ts +219 -0
  222. package/src/types/api.ts +75 -0
  223. package/src/types/bun-router.d.ts +15 -0
  224. package/src/types/dashboard.ts +62 -0
  225. package/src/types/index.ts +66 -0
  226. package/src/types/stx.d.ts +27 -0
  227. package/src/types/window.d.ts +101 -0
  228. package/src/types.ts +911 -0
  229. package/src/utils/cache.ts +148 -0
  230. package/src/utils/date.ts +118 -0
  231. package/src/utils/filters.ts +71 -0
  232. package/src/utils/geolocation.ts +323 -0
  233. package/src/utils/index.ts +9 -0
  234. package/src/utils/response.ts +180 -0
  235. package/src/utils/timezone-country.ts +242 -0
  236. package/src/utils/user-agent.ts +110 -0
  237. package/src/version.ts +7 -0
@@ -0,0 +1,2220 @@
1
+ /*
2
+ ! Tailwind CSS Preflight | MIT License | https://tailwindcss.com
3
+ */
4
+
5
+ *,
6
+ ::before,
7
+ ::after {
8
+ box-sizing: border-box;
9
+ border-width: 0;
10
+ border-style: solid;
11
+ border-color: var(--border-color, currentColor);
12
+ }
13
+
14
+ ::before,
15
+ ::after {
16
+ --hw-content: '';
17
+ }
18
+
19
+ html,
20
+ :host {
21
+ line-height: 1.5;
22
+ -webkit-text-size-adjust: 100%;
23
+ -moz-tab-size: 4;
24
+ tab-size: 4;
25
+ font-family: ui-sans-serif, system-ui, sans-serif;
26
+ font-feature-settings: normal;
27
+ font-variation-settings: normal;
28
+ -webkit-tap-highlight-color: transparent;
29
+ }
30
+
31
+ body {
32
+ margin: 0;
33
+ line-height: inherit;
34
+ }
35
+
36
+ hr {
37
+ height: 0;
38
+ color: inherit;
39
+ border-top-width: 1px;
40
+ }
41
+
42
+ abbr:where([title]) {
43
+ text-decoration: underline dotted;
44
+ }
45
+
46
+ h1,
47
+ h2,
48
+ h3,
49
+ h4,
50
+ h5,
51
+ h6 {
52
+ font-size: inherit;
53
+ font-weight: inherit;
54
+ }
55
+
56
+ a {
57
+ color: inherit;
58
+ text-decoration: inherit;
59
+ }
60
+
61
+ b,
62
+ strong {
63
+ font-weight: bolder;
64
+ }
65
+
66
+ code,
67
+ kbd,
68
+ samp,
69
+ pre {
70
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
71
+ font-feature-settings: normal;
72
+ font-variation-settings: normal;
73
+ font-size: 1em;
74
+ }
75
+
76
+ small {
77
+ font-size: 80%;
78
+ }
79
+
80
+ sub,
81
+ sup {
82
+ font-size: 75%;
83
+ line-height: 0;
84
+ position: relative;
85
+ vertical-align: baseline;
86
+ }
87
+
88
+ sub {
89
+ bottom: -0.25em;
90
+ }
91
+
92
+ sup {
93
+ top: -0.5em;
94
+ }
95
+
96
+ table {
97
+ text-indent: 0;
98
+ border-color: var(--border-color, inherit);
99
+ border-collapse: collapse;
100
+ }
101
+
102
+ button,
103
+ input,
104
+ optgroup,
105
+ select,
106
+ textarea {
107
+ font-family: inherit;
108
+ font-feature-settings: inherit;
109
+ font-variation-settings: inherit;
110
+ font-size: 100%;
111
+ font-weight: inherit;
112
+ line-height: inherit;
113
+ letter-spacing: inherit;
114
+ color: inherit;
115
+ margin: 0;
116
+ padding: 0;
117
+ }
118
+
119
+ button,
120
+ select {
121
+ text-transform: none;
122
+ }
123
+
124
+ button,
125
+ input:where([type='button']),
126
+ input:where([type='reset']),
127
+ input:where([type='submit']) {
128
+ -webkit-appearance: button;
129
+ background-color: transparent;
130
+ background-image: none;
131
+ }
132
+
133
+ :-moz-focusring {
134
+ outline: auto;
135
+ }
136
+
137
+ :-moz-ui-invalid {
138
+ box-shadow: none;
139
+ }
140
+
141
+ progress {
142
+ vertical-align: baseline;
143
+ }
144
+
145
+ ::-webkit-inner-spin-button,
146
+ ::-webkit-outer-spin-button {
147
+ height: auto;
148
+ }
149
+
150
+ [type='search'] {
151
+ -webkit-appearance: textfield;
152
+ outline-offset: -2px;
153
+ }
154
+
155
+ ::-webkit-search-decoration {
156
+ -webkit-appearance: none;
157
+ }
158
+
159
+ ::-webkit-file-upload-button {
160
+ -webkit-appearance: button;
161
+ font: inherit;
162
+ }
163
+
164
+ summary {
165
+ display: list-item;
166
+ }
167
+
168
+ blockquote,
169
+ dl,
170
+ dd,
171
+ h1,
172
+ h2,
173
+ h3,
174
+ h4,
175
+ h5,
176
+ h6,
177
+ hr,
178
+ figure,
179
+ p,
180
+ pre {
181
+ margin: 0;
182
+ }
183
+
184
+ fieldset {
185
+ margin: 0;
186
+ padding: 0;
187
+ }
188
+
189
+ legend {
190
+ padding: 0;
191
+ }
192
+
193
+ ol,
194
+ ul,
195
+ menu {
196
+ list-style: none;
197
+ margin: 0;
198
+ padding: 0;
199
+ }
200
+
201
+ dialog {
202
+ padding: 0;
203
+ }
204
+
205
+ textarea {
206
+ resize: vertical;
207
+ }
208
+
209
+ input::placeholder,
210
+ textarea::placeholder {
211
+ opacity: 1;
212
+ color: #9ca3af;
213
+ }
214
+
215
+ button,
216
+ [role="button"] {
217
+ cursor: pointer;
218
+ }
219
+
220
+ :disabled {
221
+ cursor: default;
222
+ }
223
+
224
+ img,
225
+ svg,
226
+ video,
227
+ canvas,
228
+ audio,
229
+ iframe,
230
+ embed,
231
+ object {
232
+ display: block;
233
+ vertical-align: middle;
234
+ }
235
+
236
+ img,
237
+ video {
238
+ max-width: 100%;
239
+ height: auto;
240
+ }
241
+
242
+ [hidden] {
243
+ display: none;
244
+ }
245
+
246
+ .font-sans {
247
+ font-family: ui-sans-serif, system-ui, sans-serif;
248
+ }
249
+
250
+ .min-h-screen {
251
+ min-height: 100vh;
252
+ }
253
+
254
+ .flex {
255
+ display: flex;
256
+ }
257
+
258
+ .items-center {
259
+ align-items: center;
260
+ }
261
+
262
+ .justify-center {
263
+ justify-content: center;
264
+ }
265
+
266
+ .bg-bg-2 {
267
+ background-color: var(--bg2);
268
+ }
269
+
270
+ .border {
271
+ border-width: 1px;
272
+ }
273
+
274
+ .border-border {
275
+ border-color: var(--border);
276
+ }
277
+
278
+ .rounded-xl {
279
+ border-radius: 0.75rem;
280
+ }
281
+
282
+ .p-10 {
283
+ padding: 2.5rem;
284
+ }
285
+
286
+ .w-full {
287
+ width: 100%;
288
+ }
289
+
290
+ .max-w-\[400px\] {
291
+ max-width: 400px;
292
+ }
293
+
294
+ .m-4 {
295
+ margin: 1rem;
296
+ }
297
+
298
+ .text-2xl {
299
+ font-size: 1.5rem;
300
+ line-height: 2rem;
301
+ }
302
+
303
+ .mb-2 {
304
+ margin-bottom: 0.5rem;
305
+ }
306
+
307
+ .text-text-2 {
308
+ color: var(--text2);
309
+ }
310
+
311
+ .text-sm {
312
+ font-size: 0.875rem;
313
+ line-height: 1.25rem;
314
+ }
315
+
316
+ .mb-8 {
317
+ margin-bottom: 2rem;
318
+ }
319
+
320
+ .bg-\[var\(--error-bg\)\] {
321
+ background-color: var(--error-bg);
322
+ }
323
+
324
+ .text-\[var\(--error-text\)\] {
325
+ font-size: var(--error-text);
326
+ }
327
+
328
+ .border-\[var\(--error-border\)\] {
329
+ border-color: var(--error-border);
330
+ }
331
+
332
+ .py-3 {
333
+ padding-top: 0.75rem;
334
+ padding-bottom: 0.75rem;
335
+ }
336
+
337
+ .px-4 {
338
+ padding-left: 1rem;
339
+ padding-right: 1rem;
340
+ }
341
+
342
+ .rounded-lg {
343
+ border-radius: 0.5rem;
344
+ }
345
+
346
+ .mb-6 {
347
+ margin-bottom: 1.5rem;
348
+ }
349
+
350
+ .mb-5 {
351
+ margin-bottom: 1.25rem;
352
+ }
353
+
354
+ .block {
355
+ display: block;
356
+ }
357
+
358
+ .font-medium {
359
+ font-weight: 500;
360
+ }
361
+
362
+ .mb-1\.5 {
363
+ margin-bottom: 0.375rem;
364
+ }
365
+
366
+ .py-2\.5 {
367
+ padding-top: 0.625rem;
368
+ padding-bottom: 0.625rem;
369
+ }
370
+
371
+ .px-3 {
372
+ padding-left: 0.75rem;
373
+ padding-right: 0.75rem;
374
+ }
375
+
376
+ .rounded-md {
377
+ border-radius: 0.375rem;
378
+ }
379
+
380
+ .transition-colors {
381
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
382
+ }
383
+
384
+ .duration-150 {
385
+ transition-duration: 150ms;
386
+ }
387
+
388
+ .focus\:outline-none:focus {
389
+ outline-style: none;
390
+ }
391
+
392
+ .px-3\.5 {
393
+ padding-left: 0.875rem;
394
+ padding-right: 0.875rem;
395
+ }
396
+
397
+ .bg-bg-3 {
398
+ background-color: var(--bg3);
399
+ }
400
+
401
+ .text-\[0\.9375rem\] {
402
+ font-size: 0.9375rem;
403
+ }
404
+
405
+ .outline-none {
406
+ outline-style: none;
407
+ }
408
+
409
+ .text-white {
410
+ color: #fff;
411
+ }
412
+
413
+ .border-none {
414
+ border-style: none;
415
+ }
416
+
417
+ .font-semibold {
418
+ font-weight: 600;
419
+ }
420
+
421
+ .cursor-pointer {
422
+ cursor: pointer;
423
+ }
424
+
425
+ .mt-2 {
426
+ margin-top: 0.5rem;
427
+ }
428
+
429
+ .p-8 {
430
+ padding: 2rem;
431
+ }
432
+
433
+ .antialiased {
434
+ -webkit-font-smoothing: antialiased;
435
+ -moz-osx-font-smoothing: grayscale;
436
+ }
437
+
438
+ .max-w-6xl {
439
+ max-width: 72rem;
440
+ }
441
+
442
+ .mx-auto {
443
+ margin-left: auto;
444
+ margin-right: auto;
445
+ }
446
+
447
+ .inline-flex {
448
+ display: inline-flex;
449
+ }
450
+
451
+ .gap-1 {
452
+ gap: 0.25rem;
453
+ }
454
+
455
+ .no-underline {
456
+ text-decoration-line: none;
457
+ }
458
+
459
+ .mb-4 {
460
+ margin-bottom: 1rem;
461
+ }
462
+
463
+ .w-4 {
464
+ width: 1rem;
465
+ }
466
+
467
+ .h-4 {
468
+ height: 1rem;
469
+ }
470
+
471
+ .font-mono {
472
+ font-family: ui-monospace, monospace;
473
+ }
474
+
475
+ .break-all {
476
+ word-break: break-all;
477
+ }
478
+
479
+ .gap-2 {
480
+ gap: 0.5rem;
481
+ }
482
+
483
+ .text-center {
484
+ text-align: center;
485
+ }
486
+
487
+ .text-muted {
488
+ color: var(--muted);
489
+ }
490
+
491
+ .text-error {
492
+ color: var(--error);
493
+ }
494
+
495
+ .flex-col {
496
+ flex-direction: column;
497
+ }
498
+
499
+ .gap-6 {
500
+ gap: 1.5rem;
501
+ }
502
+
503
+ .p-4 {
504
+ padding: 1rem;
505
+ }
506
+
507
+ .transition-all {
508
+ transition-property: all;
509
+ }
510
+
511
+ .justify-between {
512
+ justify-content: space-between;
513
+ }
514
+
515
+ .items-start {
516
+ align-items: flex-start;
517
+ }
518
+
519
+ .gap-4 {
520
+ gap: 1rem;
521
+ }
522
+
523
+ .flex-wrap {
524
+ flex-wrap: wrap;
525
+ }
526
+
527
+ .text-lg {
528
+ font-size: 1.125rem;
529
+ line-height: 1.75rem;
530
+ }
531
+
532
+ .flex-1 {
533
+ flex: 1 1 0%;
534
+ }
535
+
536
+ .min-w-\[200px\] {
537
+ min-width: 200px;
538
+ }
539
+
540
+ .py-1 {
541
+ padding-top: 0.25rem;
542
+ padding-bottom: 0.25rem;
543
+ }
544
+
545
+ .px-2 {
546
+ padding-left: 0.5rem;
547
+ padding-right: 0.5rem;
548
+ }
549
+
550
+ .rounded {
551
+ border-radius: 0.25rem;
552
+ }
553
+
554
+ .text-xs {
555
+ font-size: 0.75rem;
556
+ line-height: 1rem;
557
+ }
558
+
559
+ .py-2 {
560
+ padding-top: 0.5rem;
561
+ padding-bottom: 0.5rem;
562
+ }
563
+
564
+ .border-transparent {
565
+ border-color: transparent;
566
+ }
567
+
568
+ .bg-success {
569
+ background-color: var(--success);
570
+ }
571
+
572
+ .hover\:opacity-90:hover {
573
+ opacity: 0.9;
574
+ }
575
+
576
+ .hover\:bg-accent-2:hover {
577
+ background-color: var(--accent2);
578
+ }
579
+
580
+ .grid {
581
+ display: grid;
582
+ }
583
+
584
+ .grid-cols-2 {
585
+ grid-template-columns: repeat(2, minmax(0, 1fr));
586
+ }
587
+
588
+ .gap-3 {
589
+ gap: 0.75rem;
590
+ }
591
+
592
+ .p-3 {
593
+ padding: 0.75rem;
594
+ }
595
+
596
+ .mb-1 {
597
+ margin-bottom: 0.25rem;
598
+ }
599
+
600
+ .p-6 {
601
+ padding: 1.5rem;
602
+ }
603
+
604
+ .text-base {
605
+ font-size: 1rem;
606
+ line-height: 1.5rem;
607
+ }
608
+
609
+ .text-\[0\.8125rem\] {
610
+ font-size: 0.8125rem;
611
+ }
612
+
613
+ .min-w-\[100px\] {
614
+ min-width: 100px;
615
+ }
616
+
617
+ .h-5 {
618
+ height: 1.25rem;
619
+ }
620
+
621
+ .overflow-hidden {
622
+ overflow: hidden;
623
+ }
624
+
625
+ .h-full {
626
+ height: 100%;
627
+ }
628
+
629
+ .min-w-\[4px\] {
630
+ min-width: 4px;
631
+ }
632
+
633
+ .duration-300 {
634
+ transition-duration: 300ms;
635
+ }
636
+
637
+ .min-w-\[40px\] {
638
+ min-width: 40px;
639
+ }
640
+
641
+ .text-right {
642
+ text-align: right;
643
+ }
644
+
645
+ .truncate {
646
+ overflow: hidden;
647
+ text-overflow: ellipsis;
648
+ white-space: nowrap;
649
+ }
650
+
651
+ .mt-4 {
652
+ margin-top: 1rem;
653
+ }
654
+
655
+ .overflow-x-auto {
656
+ overflow-x: auto;
657
+ }
658
+
659
+ .whitespace-pre-wrap {
660
+ white-space: pre-wrap;
661
+ }
662
+
663
+ .break-words {
664
+ overflow-wrap: break-word;
665
+ }
666
+
667
+ .leading-relaxed {
668
+ line-height: 1.625;
669
+ }
670
+
671
+ .shrink-0 {
672
+ flex-shrink: 0;
673
+ }
674
+
675
+ .w-5 {
676
+ width: 1.25rem;
677
+ }
678
+
679
+ .min-w-0 {
680
+ min-width: 0;
681
+ }
682
+
683
+ .mr-2 {
684
+ margin-right: 0.5rem;
685
+ }
686
+
687
+ .list-none {
688
+ list-style-type: none;
689
+ }
690
+
691
+ .bg-gray-900 {
692
+ background-color: oklch(21% 0.034 264.665);
693
+ }
694
+
695
+ .text-gray-200 {
696
+ color: oklch(92.8% 0.006 264.531);
697
+ }
698
+
699
+ .max-w-3xl {
700
+ max-width: 48rem;
701
+ }
702
+
703
+ .text-blue-400 {
704
+ color: oklch(70.7% 0.165 254.624);
705
+ }
706
+
707
+ .hover\:text-blue-300:hover {
708
+ color: oklch(80.9% 0.105 251.813);
709
+ }
710
+
711
+ .text-gray-400 {
712
+ color: oklch(70.7% 0.022 261.325);
713
+ }
714
+
715
+ .bg-gray-800 {
716
+ background-color: oklch(27.8% 0.033 256.848);
717
+ }
718
+
719
+ .bg-blue-600 {
720
+ background-color: oklch(54.6% 0.245 262.881);
721
+ }
722
+
723
+ .hover\:bg-blue-500:hover {
724
+ background-color: oklch(62.3% 0.214 259.815);
725
+ }
726
+
727
+ .max-h-48 {
728
+ max-height: 12rem;
729
+ }
730
+
731
+ .overflow-y-auto {
732
+ overflow-y: auto;
733
+ }
734
+
735
+ .w-6 {
736
+ width: 1.5rem;
737
+ }
738
+
739
+ .h-6 {
740
+ height: 1.5rem;
741
+ }
742
+
743
+ .max-w-xs {
744
+ max-width: 20rem;
745
+ }
746
+
747
+ .border-collapse {
748
+ border-collapse: collapse;
749
+ }
750
+
751
+ .text-left {
752
+ text-align: left;
753
+ }
754
+
755
+ .border-b {
756
+ border-bottom-width: 1px;
757
+ }
758
+
759
+ .border-bg-3 {
760
+ border-color: var(--bg3);
761
+ }
762
+
763
+ .disabled\:opacity-50:disabled {
764
+ opacity: 0.5;
765
+ }
766
+
767
+ .hover\:bg-bg-2:hover {
768
+ background-color: var(--bg2);
769
+ }
770
+
771
+ .max-w-\[1400px\] {
772
+ max-width: 1400px;
773
+ }
774
+
775
+ .grid-cols-1 {
776
+ grid-template-columns: repeat(1, minmax(0, 1fr));
777
+ }
778
+
779
+ .border-gray-700 {
780
+ border-color: oklch(37.3% 0.034 259.733);
781
+ }
782
+
783
+ .last\:border-0:last-child {
784
+ border-width: 0px;
785
+ }
786
+
787
+ .mb-3 {
788
+ margin-bottom: 0.75rem;
789
+ }
790
+
791
+ .h-1\.5 {
792
+ height: 0.375rem;
793
+ }
794
+
795
+ .rounded-sm {
796
+ border-radius: 0.125rem;
797
+ }
798
+
799
+ .text-\[0\.6875rem\] {
800
+ font-size: 0.6875rem;
801
+ }
802
+
803
+ .py-1\.5 {
804
+ padding-top: 0.375rem;
805
+ padding-bottom: 0.375rem;
806
+ }
807
+
808
+ .max-w-\[100px\] {
809
+ max-width: 100px;
810
+ }
811
+
812
+ .text-ellipsis {
813
+ text-overflow: ellipsis;
814
+ }
815
+
816
+ .whitespace-nowrap {
817
+ white-space: nowrap;
818
+ }
819
+
820
+ .ml-auto {
821
+ margin-left: auto;
822
+ }
823
+
824
+ .max-w-\[500px\] {
825
+ max-width: 500px;
826
+ }
827
+
828
+ .hover\:bg-bg-3:hover {
829
+ background-color: var(--bg3);
830
+ }
831
+
832
+ .w-10 {
833
+ width: 2.5rem;
834
+ }
835
+
836
+ .h-10 {
837
+ height: 2.5rem;
838
+ }
839
+
840
+ .transition-transform {
841
+ transition-property: transform;
842
+ }
843
+
844
+ .uppercase {
845
+ text-transform: uppercase;
846
+ }
847
+
848
+ .tracking-wide {
849
+ letter-spacing: 0.025em;
850
+ }
851
+
852
+ .max-w-\[600px\] {
853
+ max-width: 600px;
854
+ }
855
+
856
+ .max-h-\[90vh\] {
857
+ max-height: 90vh;
858
+ }
859
+
860
+ .max-w-\[1000px\] {
861
+ max-width: 1000px;
862
+ }
863
+
864
+ .px-6 {
865
+ padding-left: 1.5rem;
866
+ padding-right: 1.5rem;
867
+ }
868
+
869
+ .py-4 {
870
+ padding-top: 1rem;
871
+ padding-bottom: 1rem;
872
+ }
873
+
874
+ .m-0 {
875
+ margin: 0;
876
+ }
877
+
878
+ .bg-transparent {
879
+ background-color: transparent;
880
+ }
881
+
882
+ .p-1\.5 {
883
+ padding: 0.375rem;
884
+ }
885
+
886
+ .grid-cols-4 {
887
+ grid-template-columns: repeat(4, minmax(0, 1fr));
888
+ }
889
+
890
+ .absolute {
891
+ position: absolute;
892
+ }
893
+
894
+ .inset-0 {
895
+ top: 0;
896
+ right: 0;
897
+ bottom: 0;
898
+ left: 0;
899
+ }
900
+
901
+ .bottom-2\.5 {
902
+ bottom: 0.625rem;
903
+ }
904
+
905
+ .right-2\.5 {
906
+ right: 0.625rem;
907
+ }
908
+
909
+ .max-h-\[300px\] {
910
+ max-height: 300px;
911
+ }
912
+
913
+ .p-5 {
914
+ padding: 1.25rem;
915
+ }
916
+
917
+ .duration-200 {
918
+ transition-duration: 200ms;
919
+ }
920
+
921
+ .text-xl {
922
+ font-size: 1.25rem;
923
+ line-height: 1.75rem;
924
+ }
925
+
926
+ .font-bold {
927
+ font-weight: 700;
928
+ }
929
+
930
+ .mt-1 {
931
+ margin-top: 0.25rem;
932
+ }
933
+
934
+ .p-2 {
935
+ padding: 0.5rem;
936
+ }
937
+
938
+ .text-success {
939
+ color: var(--success);
940
+ }
941
+
942
+ .py-0\.5 {
943
+ padding-top: 0.125rem;
944
+ padding-bottom: 0.125rem;
945
+ }
946
+
947
+ .px-1 {
948
+ padding-left: 0.25rem;
949
+ padding-right: 0.25rem;
950
+ }
951
+
952
+ .text-warning {
953
+ color: var(--warning);
954
+ }
955
+
956
+ .relative {
957
+ position: relative;
958
+ }
959
+
960
+ .pl-5 {
961
+ padding-left: 1.25rem;
962
+ }
963
+
964
+ .mt-0\.5 {
965
+ margin-top: 0.125rem;
966
+ }
967
+
968
+ .justify-end {
969
+ justify-content: flex-end;
970
+ }
971
+
972
+ .hover\:text-white:hover {
973
+ color: #fff;
974
+ }
975
+
976
+ .fixed {
977
+ position: fixed;
978
+ }
979
+
980
+ .bg-black\/70 {
981
+ background-color: rgb(0 0 0 / 0.7);
982
+ }
983
+
984
+ .z-\[1000\] {
985
+ z-index: 1000;
986
+ }
987
+
988
+ .backdrop-blur-sm {
989
+ backdrop-filter: blur(4px);
990
+ }
991
+
992
+ .border-t {
993
+ border-top-width: 1px;
994
+ }
995
+
996
+ .text-3xl {
997
+ font-size: 1.875rem;
998
+ line-height: 2.25rem;
999
+ }
1000
+
1001
+ .gap-1\.5 {
1002
+ gap: 0.375rem;
1003
+ }
1004
+
1005
+ .align-middle {
1006
+ vertical-align: middle;
1007
+ }
1008
+
1009
+ .opacity-50 {
1010
+ opacity: 0.5;
1011
+ }
1012
+
1013
+ .tabular-nums {
1014
+ font-variant-numeric: tabular-nums;
1015
+ }
1016
+
1017
+ .max-w-\[200px\] {
1018
+ max-width: 200px;
1019
+ }
1020
+
1021
+ .text-inherit {
1022
+ color: inherit;
1023
+ }
1024
+
1025
+ .w-3\.5 {
1026
+ width: 0.875rem;
1027
+ }
1028
+
1029
+ .h-3\.5 {
1030
+ height: 0.875rem;
1031
+ }
1032
+
1033
+ .flex-shrink-0 {
1034
+ flex-shrink: 0;
1035
+ }
1036
+
1037
+ .mr-1\.5 {
1038
+ margin-right: 0.375rem;
1039
+ }
1040
+
1041
+ .inline {
1042
+ display: inline;
1043
+ }
1044
+
1045
+ .leading-tight {
1046
+ line-height: 1.25;
1047
+ }
1048
+
1049
+ .mr-1 {
1050
+ margin-right: 0.25rem;
1051
+ }
1052
+
1053
+ .inline-block {
1054
+ display: inline-block;
1055
+ }
1056
+
1057
+ .shadow-lg {
1058
+ --hw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
1059
+ --hw-shadow-colored: 0 10px 15px -3px var(--hw-shadow-color), 0 4px 6px -4px var(--hw-shadow-color);
1060
+ box-shadow: var(--hw-ring-offset-shadow, 0 0 #0000), var(--hw-ring-shadow, 0 0 #0000), var(--hw-shadow);
1061
+ }
1062
+
1063
+ .pointer-events-none {
1064
+ pointer-events: none;
1065
+ }
1066
+
1067
+ .z-\[100\] {
1068
+ z-index: 100;
1069
+ }
1070
+
1071
+ .hidden {
1072
+ display: none;
1073
+ }
1074
+
1075
+ .ml-2 {
1076
+ margin-left: 0.5rem;
1077
+ }
1078
+
1079
+ .max-w-\[420px\] {
1080
+ max-width: 420px;
1081
+ }
1082
+
1083
+ .mt-1\.5 {
1084
+ margin-top: 0.375rem;
1085
+ }
1086
+
1087
+ .mt-6 {
1088
+ margin-top: 1.5rem;
1089
+ }
1090
+
1091
+ .hover\:text-error:hover {
1092
+ color: var(--error);
1093
+ }
1094
+
1095
+ .opacity-80 {
1096
+ opacity: 0.8;
1097
+ }
1098
+
1099
+ .max-sm\:flex-col {
1100
+ flex-direction: column;
1101
+ }
1102
+
1103
+ .max-sm\:items-stretch {
1104
+ align-items: stretch;
1105
+ }
1106
+
1107
+ .max-sm\:justify-center {
1108
+ justify-content: center;
1109
+ }
1110
+
1111
+ .border-l {
1112
+ border-left-width: 1px;
1113
+ }
1114
+
1115
+ .mx-2 {
1116
+ margin-left: 0.5rem;
1117
+ margin-right: 0.5rem;
1118
+ }
1119
+
1120
+ .max-sm\:justify-between {
1121
+ justify-content: space-between;
1122
+ }
1123
+
1124
+ .rounded-full {
1125
+ border-radius: 9999px;
1126
+ }
1127
+
1128
+ .p-12 {
1129
+ padding: 3rem;
1130
+ }
1131
+
1132
+ .text-accent-2 {
1133
+ color: var(--accent2);
1134
+ }
1135
+
1136
+ .pt-6 {
1137
+ padding-top: 1.5rem;
1138
+ }
1139
+
1140
+ .mb-0\.5 {
1141
+ margin-bottom: 0.125rem;
1142
+ }
1143
+
1144
+ .h-1 {
1145
+ height: 0.25rem;
1146
+ }
1147
+
1148
+ .bg-border {
1149
+ background-color: var(--border);
1150
+ }
1151
+
1152
+ .bg-accent-2 {
1153
+ background-color: var(--accent2);
1154
+ }
1155
+
1156
+ .min-w-\[50px\] {
1157
+ min-width: 50px;
1158
+ }
1159
+
1160
+ .pr-8 {
1161
+ padding-right: 2rem;
1162
+ }
1163
+
1164
+ .pl-3 {
1165
+ padding-left: 0.75rem;
1166
+ }
1167
+
1168
+ .appearance-none {
1169
+ appearance: none;
1170
+ }
1171
+
1172
+ .hover\:border-muted:hover {
1173
+ border-color: var(--muted);
1174
+ }
1175
+
1176
+ .min-w-\[140px\] {
1177
+ min-width: 140px;
1178
+ }
1179
+
1180
+ .max-w-7xl {
1181
+ max-width: 80rem;
1182
+ }
1183
+
1184
+ .max-w-\[20rem\] {
1185
+ max-width: 20rem;
1186
+ }
1187
+
1188
+ .placeholder\:text-muted::placeholder {
1189
+ color: var(--muted);
1190
+ }
1191
+
1192
+ .col-span-full {
1193
+ grid-column: 1 / -1;
1194
+ }
1195
+
1196
+ .tracking-wider {
1197
+ letter-spacing: 0.05em;
1198
+ }
1199
+
1200
+ .italic {
1201
+ font-style: italic;
1202
+ }
1203
+
1204
+ .bg-error {
1205
+ background-color: var(--error);
1206
+ }
1207
+
1208
+ .px-2\.5 {
1209
+ padding-left: 0.625rem;
1210
+ padding-right: 0.625rem;
1211
+ }
1212
+
1213
+ .py-10 {
1214
+ padding-top: 2.5rem;
1215
+ padding-bottom: 2.5rem;
1216
+ }
1217
+
1218
+ .px-8 {
1219
+ padding-left: 2rem;
1220
+ padding-right: 2rem;
1221
+ }
1222
+
1223
+ .flex-row {
1224
+ flex-direction: row;
1225
+ }
1226
+
1227
+ .py-12 {
1228
+ padding-top: 3rem;
1229
+ padding-bottom: 3rem;
1230
+ }
1231
+
1232
+ .text-\[0\.625rem\] {
1233
+ font-size: 0.625rem;
1234
+ }
1235
+
1236
+ .py-px {
1237
+ padding-top: 1px;
1238
+ padding-bottom: 1px;
1239
+ }
1240
+
1241
+ .px-1\.5 {
1242
+ padding-left: 0.375rem;
1243
+ padding-right: 0.375rem;
1244
+ }
1245
+
1246
+ .w-1\.5 {
1247
+ width: 0.375rem;
1248
+ }
1249
+
1250
+ .bg-muted {
1251
+ background-color: var(--muted);
1252
+ }
1253
+
1254
+ .gap-px {
1255
+ gap: 1px;
1256
+ }
1257
+
1258
+ .px-\[7px\] {
1259
+ padding-left: 7px;
1260
+ padding-right: 7px;
1261
+ }
1262
+
1263
+ .line-clamp-2 {
1264
+ overflow: hidden;
1265
+ display: -webkit-box;
1266
+ -webkit-box-orient: vertical;
1267
+ -webkit-line-clamp: 2;
1268
+ }
1269
+
1270
+ .opacity-60 {
1271
+ opacity: 0.6;
1272
+ }
1273
+
1274
+ .gap-0\.5 {
1275
+ gap: 0.125rem;
1276
+ }
1277
+
1278
+ .opacity-0 {
1279
+ opacity: 0;
1280
+ }
1281
+
1282
+ .transition-opacity {
1283
+ transition-property: opacity;
1284
+ }
1285
+
1286
+ .group:hover .group-hover\:opacity-100 {
1287
+ opacity: 1;
1288
+ }
1289
+
1290
+ .w-7 {
1291
+ width: 1.75rem;
1292
+ }
1293
+
1294
+ .h-7 {
1295
+ height: 1.75rem;
1296
+ }
1297
+
1298
+ .gap-8 {
1299
+ gap: 2rem;
1300
+ }
1301
+
1302
+ .pb-4 {
1303
+ padding-bottom: 1rem;
1304
+ }
1305
+
1306
+ .min-w-\[300px\] {
1307
+ min-width: 300px;
1308
+ }
1309
+
1310
+ .max-w-\[120px\] {
1311
+ max-width: 120px;
1312
+ }
1313
+
1314
+ .w-\[18px\] {
1315
+ width: 18px;
1316
+ }
1317
+
1318
+ .h-\[18px\] {
1319
+ height: 18px;
1320
+ }
1321
+
1322
+ .w-2 {
1323
+ width: 0.5rem;
1324
+ }
1325
+
1326
+ .h-2 {
1327
+ height: 0.5rem;
1328
+ }
1329
+
1330
+ .items-stretch {
1331
+ align-items: stretch;
1332
+ }
1333
+
1334
+ .min-w-\[120px\] {
1335
+ min-width: 120px;
1336
+ }
1337
+
1338
+ .leading-normal {
1339
+ line-height: 1.5;
1340
+ }
1341
+
1342
+ .grid-cols-6 {
1343
+ grid-template-columns: repeat(6, minmax(0, 1fr));
1344
+ }
1345
+
1346
+ .min-h-\[250px\] {
1347
+ min-height: 250px;
1348
+ }
1349
+
1350
+ .border-b-2 {
1351
+ border-bottom-width: 2px;
1352
+ }
1353
+
1354
+ .p-1 {
1355
+ padding: 0.25rem;
1356
+ }
1357
+
1358
+ .min-h-\[540px\] {
1359
+ min-height: 540px;
1360
+ }
1361
+
1362
+ .animate-pulse {
1363
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
1364
+ }
1365
+
1366
+ .text-gray-600 {
1367
+ color: oklch(44.6% 0.03 256.802);
1368
+ }
1369
+
1370
+ .w-2\.5 {
1371
+ width: 0.625rem;
1372
+ }
1373
+
1374
+ .h-2\.5 {
1375
+ height: 0.625rem;
1376
+ }
1377
+
1378
+ .bg-indigo-500 {
1379
+ background-color: oklch(58.5% 0.233 277.117);
1380
+ }
1381
+
1382
+ .bg-green-500 {
1383
+ background-color: oklch(72.3% 0.219 149.579);
1384
+ }
1385
+
1386
+ .bg-gray-200 {
1387
+ background-color: oklch(92.8% 0.006 264.531);
1388
+ }
1389
+
1390
+ .transform {
1391
+ transform: translate(var(--hw-translate-x), var(--hw-translate-y)) rotate(var(--hw-rotate)) skewX(var(--hw-skew-x)) skewY(var(--hw-skew-y)) scaleX(var(--hw-scale-x)) scaleY(var(--hw-scale-y));
1392
+ }
1393
+
1394
+ .-rotate-90 {
1395
+ transform: rotate(-90deg);
1396
+ }
1397
+
1398
+ .duration-500 {
1399
+ transition-duration: 500ms;
1400
+ }
1401
+
1402
+ .ease-out {
1403
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
1404
+ }
1405
+
1406
+ .text-gray-900 {
1407
+ color: oklch(21% 0.034 264.665);
1408
+ }
1409
+
1410
+ .text-gray-500 {
1411
+ color: oklch(55.1% 0.027 264.364);
1412
+ }
1413
+
1414
+ .space-y-4 > :not([hidden]) ~ :not([hidden]) {
1415
+ --hw-space-y-reverse: 0;
1416
+ margin-top: calc(1rem * calc(1 - var(--hw-space-y-reverse)));
1417
+ margin-bottom: calc(1rem * var(--hw-space-y-reverse));
1418
+ }
1419
+
1420
+ .w-20 {
1421
+ width: 5rem;
1422
+ }
1423
+
1424
+ .py-8 {
1425
+ padding-top: 2rem;
1426
+ padding-bottom: 2rem;
1427
+ }
1428
+
1429
+ .capitalize {
1430
+ text-transform: capitalize;
1431
+ }
1432
+
1433
+ .bg-gray-400 {
1434
+ background-color: oklch(70.7% 0.022 261.325);
1435
+ }
1436
+
1437
+ .text-gray-300 {
1438
+ color: oklch(87.2% 0.01 258.338);
1439
+ }
1440
+
1441
+ .overflow-visible {
1442
+ overflow: visible;
1443
+ }
1444
+
1445
+ .h-12 {
1446
+ height: 3rem;
1447
+ }
1448
+
1449
+ .space-y-2 > :not([hidden]) ~ :not([hidden]) {
1450
+ --hw-space-y-reverse: 0;
1451
+ margin-top: calc(0.5rem * calc(1 - var(--hw-space-y-reverse)));
1452
+ margin-bottom: calc(0.5rem * var(--hw-space-y-reverse));
1453
+ }
1454
+
1455
+ .-top-1 {
1456
+ top: -0.25rem;
1457
+ }
1458
+
1459
+ .text-red-500 {
1460
+ color: oklch(63.7% 0.237 25.331);
1461
+ }
1462
+
1463
+ .w-3 {
1464
+ width: 0.75rem;
1465
+ }
1466
+
1467
+ .h-3 {
1468
+ height: 0.75rem;
1469
+ }
1470
+
1471
+ .pt-4 {
1472
+ padding-top: 1rem;
1473
+ }
1474
+
1475
+ .border-gray-200 {
1476
+ border-color: oklch(92.8% 0.006 264.531);
1477
+ }
1478
+
1479
+ .grid-cols-3 {
1480
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1481
+ }
1482
+
1483
+ .w-12 {
1484
+ width: 3rem;
1485
+ }
1486
+
1487
+ .bg-white {
1488
+ background-color: #fff;
1489
+ }
1490
+
1491
+ .space-y-3 > :not([hidden]) ~ :not([hidden]) {
1492
+ --hw-space-y-reverse: 0;
1493
+ margin-top: calc(0.75rem * calc(1 - var(--hw-space-y-reverse)));
1494
+ margin-bottom: calc(0.75rem * var(--hw-space-y-reverse));
1495
+ }
1496
+
1497
+ .w-24 {
1498
+ width: 6rem;
1499
+ }
1500
+
1501
+ .w-16 {
1502
+ width: 4rem;
1503
+ }
1504
+
1505
+ .list-item {
1506
+ list-style-type: item;
1507
+ }
1508
+
1509
+ .list-label {
1510
+ list-style-type: label;
1511
+ }
1512
+
1513
+ .list-value {
1514
+ list-style-type: value;
1515
+ }
1516
+
1517
+ .ml-1 {
1518
+ margin-left: 0.25rem;
1519
+ }
1520
+
1521
+ .bg-gray-100 {
1522
+ background-color: oklch(96.7% 0.003 264.542);
1523
+ }
1524
+
1525
+ .h-8 {
1526
+ height: 2rem;
1527
+ }
1528
+
1529
+ .h-16 {
1530
+ height: 4rem;
1531
+ }
1532
+
1533
+ .text-green-300 {
1534
+ color: oklch(87.1% 0.15 154.449);
1535
+ }
1536
+
1537
+ .hover\:shadow-sm:hover {
1538
+ --hw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
1539
+ --hw-shadow-colored: 0 1px 2px 0 var(--hw-shadow-color);
1540
+ box-shadow: var(--hw-ring-offset-shadow, 0 0 #0000), var(--hw-ring-shadow, 0 0 #0000), var(--hw-shadow);
1541
+ }
1542
+
1543
+ .min-w-48 {
1544
+ min-width: 12rem;
1545
+ }
1546
+
1547
+ .left-3 {
1548
+ left: 0.75rem;
1549
+ }
1550
+
1551
+ .pl-10 {
1552
+ padding-left: 2.5rem;
1553
+ }
1554
+
1555
+ .pr-4 {
1556
+ padding-right: 1rem;
1557
+ }
1558
+
1559
+ .border-gray-300 {
1560
+ border-color: oklch(87.2% 0.01 258.338);
1561
+ }
1562
+
1563
+ .focus\:ring-2:focus {
1564
+ --hw-ring-offset-shadow: var(--hw-ring-inset) 0 0 0 var(--hw-ring-offset-width) var(--hw-ring-offset-color);
1565
+ --hw-ring-shadow: var(--hw-ring-inset) 0 0 0 calc(2px + var(--hw-ring-offset-width)) var(--hw-ring-color);
1566
+ box-shadow: var(--hw-ring-offset-shadow), var(--hw-ring-shadow), var(--hw-shadow, 0 0 #0000);
1567
+ }
1568
+
1569
+ .focus\:ring-primary-500:focus {
1570
+ --hw-ring-offset-shadow: var(--hw-ring-inset) 0 0 0 var(--hw-ring-offset-width) var(--hw-ring-offset-color);
1571
+ --hw-ring-shadow: var(--hw-ring-inset) 0 0 0 calc(primary-500 + var(--hw-ring-offset-width)) var(--hw-ring-color);
1572
+ box-shadow: var(--hw-ring-offset-shadow), var(--hw-ring-shadow), var(--hw-shadow, 0 0 #0000);
1573
+ }
1574
+
1575
+ .focus\:border-transparent:focus {
1576
+ border-color: transparent;
1577
+ }
1578
+
1579
+ .right-2 {
1580
+ right: 0.5rem;
1581
+ }
1582
+
1583
+ .hover\:text-gray-700:hover {
1584
+ color: oklch(37.3% 0.034 259.733);
1585
+ }
1586
+
1587
+ .hover\:bg-gray-100:hover {
1588
+ background-color: oklch(96.7% 0.003 264.542);
1589
+ }
1590
+
1591
+ .w-32 {
1592
+ width: 8rem;
1593
+ }
1594
+
1595
+ .right-0 {
1596
+ right: 0;
1597
+ }
1598
+
1599
+ .z-10 {
1600
+ z-index: 10;
1601
+ }
1602
+
1603
+ .hover\:bg-gray-50:hover {
1604
+ background-color: oklch(98.5% 0.002 247.839);
1605
+ }
1606
+
1607
+ .hover\:border-indigo-500:hover {
1608
+ border-color: oklch(58.5% 0.233 277.117);
1609
+ }
1610
+
1611
+ .focus\:ring-indigo-500:focus {
1612
+ --hw-ring-color: oklch(58.5% 0.233 277.117);
1613
+ }
1614
+
1615
+ .text-4xl {
1616
+ font-size: 2.25rem;
1617
+ line-height: 2.5rem;
1618
+ }
1619
+
1620
+ .animate-ping {
1621
+ animation: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
1622
+ }
1623
+
1624
+ .max-h-96 {
1625
+ max-height: 24rem;
1626
+ }
1627
+
1628
+ .w-8 {
1629
+ width: 2rem;
1630
+ }
1631
+
1632
+ .text-green-600 {
1633
+ color: oklch(62.7% 0.194 149.214);
1634
+ }
1635
+
1636
+ .bg-gray-50 {
1637
+ background-color: oklch(98.5% 0.002 247.839);
1638
+ }
1639
+
1640
+ .h-14 {
1641
+ height: 3.5rem;
1642
+ }
1643
+
1644
+ .border-gray-100 {
1645
+ border-color: oklch(96.7% 0.003 264.542);
1646
+ }
1647
+
1648
+ .max-w-48 {
1649
+ max-width: 12rem;
1650
+ }
1651
+
1652
+ .h-48 {
1653
+ height: 12rem;
1654
+ }
1655
+
1656
+ .min-w-max {
1657
+ min-width: max-content;
1658
+ }
1659
+
1660
+ .ml-12 {
1661
+ margin-left: 3rem;
1662
+ }
1663
+
1664
+ .space-y-1 > :not([hidden]) ~ :not([hidden]) {
1665
+ --hw-space-y-reverse: 0;
1666
+ margin-top: calc(0.25rem * calc(1 - var(--hw-space-y-reverse)));
1667
+ margin-bottom: calc(0.25rem * var(--hw-space-y-reverse));
1668
+ }
1669
+
1670
+ .aspect-square {
1671
+ aspect-ratio: 1 / 1;
1672
+ }
1673
+
1674
+ .hover\:scale-110:hover {
1675
+ transform: scale(1.1);
1676
+ }
1677
+
1678
+ .hover\:z-10:hover {
1679
+ z-index: 10;
1680
+ }
1681
+
1682
+ .max-w-sm {
1683
+ max-width: 24rem;
1684
+ }
1685
+
1686
+ .sticky {
1687
+ position: sticky;
1688
+ }
1689
+
1690
+ .top-0 {
1691
+ top: 0;
1692
+ }
1693
+
1694
+ .z-20 {
1695
+ z-index: 20;
1696
+ }
1697
+
1698
+ .bg-green-50 {
1699
+ background-color: oklch(98.2% 0.018 155.826);
1700
+ }
1701
+
1702
+ .text-green-700 {
1703
+ color: oklch(52.7% 0.154 150.069);
1704
+ }
1705
+
1706
+ .-mb-px {
1707
+ margin-bottom: -1px;
1708
+ }
1709
+
1710
+ .bg-red-50 {
1711
+ background-color: oklch(97.1% 0.013 17.38);
1712
+ }
1713
+
1714
+ .border-red-200 {
1715
+ border-color: oklch(88.5% 0.062 18.334);
1716
+ }
1717
+
1718
+ .text-red-700 {
1719
+ color: oklch(50.5% 0.213 27.518);
1720
+ }
1721
+
1722
+ .text-red-600 {
1723
+ color: oklch(57.7% 0.245 27.325);
1724
+ }
1725
+
1726
+ .hover\:text-red-800:hover {
1727
+ color: oklch(44.4% 0.177 26.899);
1728
+ }
1729
+
1730
+ .underline {
1731
+ text-decoration-line: underline;
1732
+ }
1733
+
1734
+ .space-y-6 > :not([hidden]) ~ :not([hidden]) {
1735
+ --hw-space-y-reverse: 0;
1736
+ margin-top: calc(1.5rem * calc(1 - var(--hw-space-y-reverse)));
1737
+ margin-bottom: calc(1.5rem * var(--hw-space-y-reverse));
1738
+ }
1739
+
1740
+ .h-80 {
1741
+ height: 20rem;
1742
+ }
1743
+
1744
+ .text-gray-700 {
1745
+ color: oklch(37.3% 0.034 259.733);
1746
+ }
1747
+
1748
+ .top-list {
1749
+ top: list;
1750
+ }
1751
+
1752
+ .gap-y-2 {
1753
+ row-gap: 0.5rem;
1754
+ }
1755
+
1756
+ .w-px {
1757
+ width: 1px;
1758
+ }
1759
+
1760
+ .first\:pl-0:first-child {
1761
+ padding-left: 0;
1762
+ }
1763
+
1764
+ .last\:pr-0:last-child {
1765
+ padding-right: 0;
1766
+ }
1767
+
1768
+ .items-end {
1769
+ align-items: flex-end;
1770
+ }
1771
+
1772
+ .hover\:bg-gray-200:hover {
1773
+ background-color: oklch(92.8% 0.006 264.531);
1774
+ }
1775
+
1776
+ .hover\:bg-red-50:hover {
1777
+ background-color: oklch(97.1% 0.013 17.38);
1778
+ }
1779
+
1780
+ .min-h-0 {
1781
+ min-height: 0;
1782
+ }
1783
+
1784
+ .min-h-\[400px\] {
1785
+ min-height: 400px;
1786
+ }
1787
+
1788
+ .object-cover {
1789
+ object-fit: cover;
1790
+ }
1791
+
1792
+ .object-top {
1793
+ object-position: top;
1794
+ }
1795
+
1796
+ .pt-3 {
1797
+ padding-top: 0.75rem;
1798
+ }
1799
+
1800
+ .last\:border-b-0:last-child {
1801
+ border-bottom-width: 0px;
1802
+ }
1803
+
1804
+ .text-\[10px\] {
1805
+ font-size: 10px;
1806
+ }
1807
+
1808
+ .text-indigo-600 {
1809
+ color: oklch(51.1% 0.262 276.966);
1810
+ }
1811
+
1812
+ .w-28 {
1813
+ width: 7rem;
1814
+ }
1815
+
1816
+ .bg-indigo-600 {
1817
+ background-color: oklch(51.1% 0.262 276.966);
1818
+ }
1819
+
1820
+ .border-2 {
1821
+ border-width: 2px;
1822
+ }
1823
+
1824
+ .animate-spin {
1825
+ animation: spin 1s linear infinite;
1826
+ }
1827
+
1828
+ .w-\[120px\] {
1829
+ width: 120px;
1830
+ }
1831
+
1832
+ .bg-gray-300 {
1833
+ background-color: oklch(87.2% 0.01 258.338);
1834
+ }
1835
+
1836
+ .h-\[calc\(100\%-2\.5rem\)\] {
1837
+ height: calc(100%-2.5rem);
1838
+ }
1839
+
1840
+ .border-dashed {
1841
+ border-style: dashed;
1842
+ }
1843
+
1844
+ .z-50 {
1845
+ z-index: 50;
1846
+ }
1847
+
1848
+ .dark .dark\:bg-gray-800 {
1849
+ background-color: oklch(27.8% 0.033 256.848);
1850
+ }
1851
+
1852
+ .dark .dark\:border-gray-700 {
1853
+ border-color: oklch(37.3% 0.034 259.733);
1854
+ }
1855
+
1856
+ .dark .dark\:text-white {
1857
+ color: #fff;
1858
+ }
1859
+
1860
+ .space-y-8 > :not([hidden]) ~ :not([hidden]) {
1861
+ --hw-space-y-reverse: 0;
1862
+ margin-top: calc(2rem * calc(1 - var(--hw-space-y-reverse)));
1863
+ margin-bottom: calc(2rem * var(--hw-space-y-reverse));
1864
+ }
1865
+
1866
+ @media (min-width: 768px) {
1867
+ .md\:grid-cols-3 {
1868
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1869
+ }
1870
+
1871
+ .md\:grid-cols-2 {
1872
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1873
+ }
1874
+ }
1875
+
1876
+ @media (min-width: 1024px) {
1877
+ .lg\:grid-cols-2 {
1878
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1879
+ }
1880
+
1881
+ .lg\:grid-cols-6 {
1882
+ grid-template-columns: repeat(6, minmax(0, 1fr));
1883
+ }
1884
+
1885
+ .lg\:grid-cols-3 {
1886
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1887
+ }
1888
+
1889
+ .lg\:px-8 {
1890
+ padding-left: 2rem;
1891
+ padding-right: 2rem;
1892
+ }
1893
+
1894
+ .lg\:grid-cols-\[1fr_320px\] {
1895
+ grid-template-columns: 1fr_320px;
1896
+ }
1897
+
1898
+ .lg\:max-h-none {
1899
+ max-height: none;
1900
+ }
1901
+
1902
+ .lg\:grid-cols-4 {
1903
+ grid-template-columns: repeat(4, minmax(0, 1fr));
1904
+ }
1905
+ }
1906
+
1907
+ @media (min-width: 640px) {
1908
+ .sm\:grid-cols-3 {
1909
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1910
+ }
1911
+
1912
+ .sm\:justify-start {
1913
+ justify-content: flex-start;
1914
+ }
1915
+
1916
+ .sm\:grid-cols-4 {
1917
+ grid-template-columns: repeat(4, minmax(0, 1fr));
1918
+ }
1919
+
1920
+ .sm\:px-6 {
1921
+ padding-left: 1.5rem;
1922
+ padding-right: 1.5rem;
1923
+ }
1924
+
1925
+ .sm\:grid-cols-2 {
1926
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1927
+ }
1928
+ }
1929
+ /* === Shortcut Classes === */
1930
+ .stat-card {
1931
+ background-color: var(--bg2);
1932
+ border-width: 1px;
1933
+ border-color: var(--border);
1934
+ border-radius: 0.75rem;
1935
+ padding: 1.25rem;
1936
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
1937
+ transition-duration: 200ms;
1938
+ }
1939
+ .panel {
1940
+ background-color: var(--bg2);
1941
+ border-width: 1px;
1942
+ border-color: var(--border);
1943
+ border-radius: 0.75rem;
1944
+ padding: 1.5rem;
1945
+ }
1946
+ .panel-header {
1947
+ display: flex;
1948
+ justify-content: space-between;
1949
+ align-items: center;
1950
+ margin-bottom: 1rem;
1951
+ }
1952
+ .panel-title {
1953
+ display: flex;
1954
+ align-items: center;
1955
+ gap: 0.5rem;
1956
+ font-weight: 600;
1957
+ font-size: 0.875rem;
1958
+ line-height: 1.25rem;
1959
+ }
1960
+ .icon-btn {
1961
+ background-color: transparent;
1962
+ border-style: none;
1963
+ padding: 0.375rem;
1964
+ cursor: pointer;
1965
+ color: var(--muted);
1966
+ display: inline-flex;
1967
+ align-items: center;
1968
+ justify-content: center;
1969
+ border-radius: 0.375rem;
1970
+ transition-property: all;
1971
+ transition-duration: 150ms;
1972
+ }
1973
+ .icon-btn:hover {
1974
+ background-color: var(--bg3);
1975
+ }
1976
+ .date-range-btn {
1977
+ padding-top: 0.375rem;
1978
+ padding-bottom: 0.375rem;
1979
+ padding-left: 0.75rem;
1980
+ padding-right: 0.75rem;
1981
+ background-color: var(--bg3);
1982
+ border-width: 1px;
1983
+ border-color: transparent;
1984
+ border-radius: 0.375rem;
1985
+ color: var(--text2);
1986
+ font-size: 0.75rem;
1987
+ line-height: 1rem;
1988
+ font-weight: 500;
1989
+ cursor: pointer;
1990
+ transition-property: all;
1991
+ transition-duration: 150ms;
1992
+ }
1993
+ .date-range-btn-active {
1994
+ color: #fff;
1995
+ }
1996
+ .filter-select {
1997
+ padding-top: 0.5rem;
1998
+ padding-bottom: 0.5rem;
1999
+ padding-right: 2rem;
2000
+ padding-left: 0.75rem;
2001
+ background-color: var(--bg2);
2002
+ border-width: 1px;
2003
+ border-color: var(--border);
2004
+ border-radius: 0.5rem;
2005
+ font-size: 0.8125rem;
2006
+ cursor: pointer;
2007
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
2008
+ transition-duration: 150ms;
2009
+ appearance: none;
2010
+ }
2011
+ .filter-select:hover {
2012
+ border-color: var(--muted);
2013
+ }
2014
+ .filter-select:focus {
2015
+ outline-style: none;
2016
+ }
2017
+ .badge {
2018
+ display: inline-flex;
2019
+ align-items: center;
2020
+ padding-top: 0.125rem;
2021
+ padding-bottom: 0.125rem;
2022
+ padding-left: 0.5rem;
2023
+ padding-right: 0.5rem;
2024
+ border-radius: 9999px;
2025
+ font-size: 0.6875rem;
2026
+ font-weight: 500;
2027
+ }
2028
+ .badge-success {
2029
+ background-color: var(--success);
2030
+ color: var(--success);
2031
+ }
2032
+ .badge-warning {
2033
+ background-color: var(--warning);
2034
+ color: var(--warning);
2035
+ }
2036
+ .badge-error {
2037
+ background-color: var(--error);
2038
+ color: var(--error);
2039
+ }
2040
+ .btn {
2041
+ display: inline-flex;
2042
+ align-items: center;
2043
+ justify-content: center;
2044
+ gap: 0.5rem;
2045
+ padding-top: 0.5rem;
2046
+ padding-bottom: 0.5rem;
2047
+ padding-left: 1rem;
2048
+ padding-right: 1rem;
2049
+ border-radius: 0.375rem;
2050
+ font-size: 0.875rem;
2051
+ line-height: 1.25rem;
2052
+ font-weight: 500;
2053
+ cursor: pointer;
2054
+ transition-property: all;
2055
+ transition-duration: 150ms;
2056
+ border-width: 1px;
2057
+ border-color: transparent;
2058
+ }
2059
+ .btn-primary {
2060
+ color: #fff;
2061
+ }
2062
+ .btn-primary:hover {
2063
+ background-color: var(--accent2);
2064
+ }
2065
+ .btn-secondary {
2066
+ background-color: var(--bg3);
2067
+ border-color: var(--border);
2068
+ }
2069
+ .btn-danger {
2070
+ background-color: var(--error);
2071
+ color: #fff;
2072
+ }
2073
+ .btn-danger:hover {
2074
+ opacity: 0.9;
2075
+ }
2076
+ .empty-state {
2077
+ text-align: center;
2078
+ padding: 2rem;
2079
+ color: var(--muted);
2080
+ }
2081
+ .progress-bar {
2082
+ height: 0.375rem;
2083
+ background-color: var(--bg3);
2084
+ border-radius: 0.125rem;
2085
+ overflow: hidden;
2086
+ }
2087
+ .progress-bar-fill {
2088
+ height: 100%;
2089
+ border-radius: 0.125rem;
2090
+ transition-duration: 300ms;
2091
+ }
2092
+ .tab-btn {
2093
+ padding-top: 0.5rem;
2094
+ padding-bottom: 0.5rem;
2095
+ padding-left: 1rem;
2096
+ padding-right: 1rem;
2097
+ background-color: transparent;
2098
+ border-style: none;
2099
+ color: var(--muted);
2100
+ font-size: 0.875rem;
2101
+ line-height: 1.25rem;
2102
+ font-weight: 500;
2103
+ cursor: pointer;
2104
+ border-bottom-width: 2px;
2105
+ transition-property: all;
2106
+ transition-duration: 150ms;
2107
+ }
2108
+ .form-input {
2109
+ width: 100%;
2110
+ padding-top: 0.625rem;
2111
+ padding-bottom: 0.625rem;
2112
+ padding-left: 0.75rem;
2113
+ padding-right: 0.75rem;
2114
+ background-color: var(--bg2);
2115
+ border-width: 1px;
2116
+ border-color: var(--border);
2117
+ border-radius: 0.375rem;
2118
+ font-size: 0.875rem;
2119
+ line-height: 1.25rem;
2120
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
2121
+ transition-duration: 150ms;
2122
+ }
2123
+ .form-input:focus {
2124
+ outline-style: none;
2125
+ }
2126
+ .modal-overlay {
2127
+ position: fixed;
2128
+ top: 0;
2129
+ right: 0;
2130
+ bottom: 0;
2131
+ left: 0;
2132
+ background-color: rgb(0 0 0 / 0.7);
2133
+ display: flex;
2134
+ align-items: center;
2135
+ justify-content: center;
2136
+ z-index: 1000;
2137
+ padding: 1rem;
2138
+ }
2139
+ .modal-content {
2140
+ border-width: 1px;
2141
+ border-color: var(--border);
2142
+ border-radius: 0.75rem;
2143
+ width: 100%;
2144
+ max-width: 600px;
2145
+ max-height: 90vh;
2146
+ overflow-y: auto;
2147
+ }
2148
+ .modal-header {
2149
+ display: flex;
2150
+ justify-content: space-between;
2151
+ align-items: center;
2152
+ padding-left: 1.5rem;
2153
+ padding-right: 1.5rem;
2154
+ padding-top: 1rem;
2155
+ padding-bottom: 1rem;
2156
+ border-bottom-width: 1px;
2157
+ border-color: var(--border);
2158
+ }
2159
+ .modal-body {
2160
+ padding: 1.5rem;
2161
+ }
2162
+ .modal-footer {
2163
+ display: flex;
2164
+ justify-content: flex-end;
2165
+ gap: 0.75rem;
2166
+ padding-left: 1.5rem;
2167
+ padding-right: 1.5rem;
2168
+ padding-top: 1rem;
2169
+ padding-bottom: 1rem;
2170
+ border-top-width: 1px;
2171
+ border-color: var(--border);
2172
+ }
2173
+ .session-card {
2174
+ background-color: var(--bg2);
2175
+ border-width: 1px;
2176
+ border-color: var(--border);
2177
+ border-radius: 0.5rem;
2178
+ padding: 1rem;
2179
+ cursor: pointer;
2180
+ transition-property: all;
2181
+ transition-duration: 150ms;
2182
+ }
2183
+ .session-card:hover {
2184
+ background-color: var(--bg3);
2185
+ }
2186
+ .vital-card {
2187
+ background-color: var(--bg2);
2188
+ border-width: 1px;
2189
+ border-color: var(--border);
2190
+ border-radius: 0.5rem;
2191
+ padding: 1rem;
2192
+ text-align: center;
2193
+ }
2194
+ .error-card {
2195
+ background-color: var(--bg2);
2196
+ border-width: 1px;
2197
+ border-color: var(--border);
2198
+ border-radius: 0.5rem;
2199
+ padding: 1rem;
2200
+ cursor: pointer;
2201
+ transition-property: all;
2202
+ transition-duration: 150ms;
2203
+ }
2204
+ .tooltip {
2205
+ position: absolute;
2206
+ border-width: 1px;
2207
+ border-color: var(--border);
2208
+ border-radius: 0.5rem;
2209
+ padding-top: 0.5rem;
2210
+ padding-bottom: 0.5rem;
2211
+ padding-left: 0.75rem;
2212
+ padding-right: 0.75rem;
2213
+ font-size: 0.75rem;
2214
+ line-height: 1rem;
2215
+ --hw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
2216
+ --hw-shadow-colored: 0 10px 15px -3px var(--hw-shadow-color), 0 4px 6px -4px var(--hw-shadow-color);
2217
+ box-shadow: var(--hw-ring-offset-shadow, 0 0 #0000), var(--hw-ring-shadow, 0 0 #0000), var(--hw-shadow);
2218
+ pointer-events: none;
2219
+ z-index: 100;
2220
+ }