solforge 0.2.12 → 0.2.14

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 (175) hide show
  1. package/package.json +1 -5
  2. package/start.cjs +19 -23
  3. package/docs/API.md +0 -379
  4. package/docs/CONFIGURATION.md +0 -407
  5. package/docs/bun-single-file-executable.md +0 -585
  6. package/docs/cli-plan.md +0 -154
  7. package/docs/data-indexing-plan.md +0 -214
  8. package/docs/gui-roadmap.md +0 -202
  9. package/scripts/decode-b58.ts +0 -10
  10. package/scripts/install.sh +0 -112
  11. package/server/index.ts +0 -5
  12. package/server/lib/base58.ts +0 -33
  13. package/server/lib/faucet.ts +0 -110
  14. package/server/lib/instruction-parser.ts +0 -328
  15. package/server/lib/parsers/spl-associated-token-account.ts +0 -50
  16. package/server/lib/parsers/spl-token.ts +0 -340
  17. package/server/lib/spl-token.ts +0 -57
  18. package/server/methods/TEMPLATE.md +0 -117
  19. package/server/methods/account/get-account-info.ts +0 -86
  20. package/server/methods/account/get-balance.ts +0 -23
  21. package/server/methods/account/get-multiple-accounts.ts +0 -84
  22. package/server/methods/account/get-parsed-account-info.ts +0 -17
  23. package/server/methods/account/index.ts +0 -12
  24. package/server/methods/account/parsers/index.ts +0 -52
  25. package/server/methods/account/parsers/loader-upgradeable.ts +0 -79
  26. package/server/methods/account/parsers/spl-token.ts +0 -256
  27. package/server/methods/account/parsers/system.ts +0 -4
  28. package/server/methods/account/request-airdrop.ts +0 -271
  29. package/server/methods/admin/adopt-mint-authority.ts +0 -94
  30. package/server/methods/admin/clone-program-accounts.ts +0 -55
  31. package/server/methods/admin/clone-program.ts +0 -152
  32. package/server/methods/admin/clone-token-accounts.ts +0 -117
  33. package/server/methods/admin/clone-token-mint.ts +0 -82
  34. package/server/methods/admin/create-mint.ts +0 -114
  35. package/server/methods/admin/create-token-account.ts +0 -137
  36. package/server/methods/admin/helpers.ts +0 -70
  37. package/server/methods/admin/index.ts +0 -10
  38. package/server/methods/admin/list-mints.ts +0 -21
  39. package/server/methods/admin/load-program.ts +0 -52
  40. package/server/methods/admin/mint-to.ts +0 -266
  41. package/server/methods/block/get-block-height.ts +0 -5
  42. package/server/methods/block/get-block.ts +0 -31
  43. package/server/methods/block/get-blocks-with-limit.ts +0 -19
  44. package/server/methods/block/get-latest-blockhash.ts +0 -12
  45. package/server/methods/block/get-slot.ts +0 -5
  46. package/server/methods/block/index.ts +0 -6
  47. package/server/methods/block/is-blockhash-valid.ts +0 -19
  48. package/server/methods/epoch/get-cluster-nodes.ts +0 -17
  49. package/server/methods/epoch/get-epoch-info.ts +0 -16
  50. package/server/methods/epoch/get-epoch-schedule.ts +0 -15
  51. package/server/methods/epoch/get-highest-snapshot-slot.ts +0 -9
  52. package/server/methods/epoch/get-leader-schedule.ts +0 -8
  53. package/server/methods/epoch/get-max-retransmit-slot.ts +0 -9
  54. package/server/methods/epoch/get-max-shred-insert-slot.ts +0 -9
  55. package/server/methods/epoch/get-slot-leader.ts +0 -6
  56. package/server/methods/epoch/get-slot-leaders.ts +0 -9
  57. package/server/methods/epoch/get-stake-activation.ts +0 -9
  58. package/server/methods/epoch/get-stake-minimum-delegation.ts +0 -9
  59. package/server/methods/epoch/get-vote-accounts.ts +0 -19
  60. package/server/methods/epoch/index.ts +0 -13
  61. package/server/methods/epoch/minimum-ledger-slot.ts +0 -5
  62. package/server/methods/fee/get-fee-calculator-for-blockhash.ts +0 -12
  63. package/server/methods/fee/get-fee-for-message.ts +0 -8
  64. package/server/methods/fee/get-fee-rate-governor.ts +0 -16
  65. package/server/methods/fee/get-fees.ts +0 -14
  66. package/server/methods/fee/get-recent-prioritization-fees.ts +0 -22
  67. package/server/methods/fee/index.ts +0 -5
  68. package/server/methods/get-address-lookup-table.ts +0 -27
  69. package/server/methods/index.ts +0 -265
  70. package/server/methods/performance/get-recent-performance-samples.ts +0 -25
  71. package/server/methods/performance/get-transaction-count.ts +0 -5
  72. package/server/methods/performance/index.ts +0 -2
  73. package/server/methods/program/get-block-commitment.ts +0 -9
  74. package/server/methods/program/get-block-production.ts +0 -14
  75. package/server/methods/program/get-block-time.ts +0 -21
  76. package/server/methods/program/get-blocks.ts +0 -11
  77. package/server/methods/program/get-first-available-block.ts +0 -9
  78. package/server/methods/program/get-genesis-hash.ts +0 -6
  79. package/server/methods/program/get-identity.ts +0 -6
  80. package/server/methods/program/get-inflation-governor.ts +0 -15
  81. package/server/methods/program/get-inflation-rate.ts +0 -10
  82. package/server/methods/program/get-inflation-reward.ts +0 -12
  83. package/server/methods/program/get-largest-accounts.ts +0 -8
  84. package/server/methods/program/get-parsed-program-accounts.ts +0 -12
  85. package/server/methods/program/get-parsed-token-accounts-by-delegate.ts +0 -12
  86. package/server/methods/program/get-parsed-token-accounts-by-owner.ts +0 -12
  87. package/server/methods/program/get-program-accounts.ts +0 -221
  88. package/server/methods/program/get-supply.ts +0 -13
  89. package/server/methods/program/get-token-account-balance.ts +0 -60
  90. package/server/methods/program/get-token-accounts-by-delegate.ts +0 -82
  91. package/server/methods/program/get-token-accounts-by-owner.ts +0 -416
  92. package/server/methods/program/get-token-largest-accounts.ts +0 -81
  93. package/server/methods/program/get-token-supply.ts +0 -39
  94. package/server/methods/program/index.ts +0 -21
  95. package/server/methods/solforge/index.ts +0 -158
  96. package/server/methods/system/get-health.ts +0 -5
  97. package/server/methods/system/get-minimum-balance-for-rent-exemption.ts +0 -13
  98. package/server/methods/system/get-version.ts +0 -9
  99. package/server/methods/system/index.ts +0 -3
  100. package/server/methods/transaction/get-confirmed-transaction.ts +0 -11
  101. package/server/methods/transaction/get-parsed-transaction.ts +0 -17
  102. package/server/methods/transaction/get-signature-statuses.ts +0 -79
  103. package/server/methods/transaction/get-signatures-for-address.ts +0 -41
  104. package/server/methods/transaction/get-transaction.ts +0 -639
  105. package/server/methods/transaction/index.ts +0 -7
  106. package/server/methods/transaction/inner-instructions.test.ts +0 -104
  107. package/server/methods/transaction/send-transaction.ts +0 -469
  108. package/server/methods/transaction/simulate-transaction.ts +0 -57
  109. package/server/rpc-server.ts +0 -521
  110. package/server/types.ts +0 -109
  111. package/server/ws-server.ts +0 -178
  112. package/src/api-server-entry.ts +0 -109
  113. package/src/cli/bootstrap.ts +0 -67
  114. package/src/cli/commands/airdrop.ts +0 -37
  115. package/src/cli/commands/config.ts +0 -39
  116. package/src/cli/commands/mint.ts +0 -187
  117. package/src/cli/commands/program-clone.ts +0 -122
  118. package/src/cli/commands/program-load.ts +0 -64
  119. package/src/cli/commands/rpc-start.ts +0 -49
  120. package/src/cli/commands/token-adopt-authority.ts +0 -37
  121. package/src/cli/commands/token-clone.ts +0 -112
  122. package/src/cli/commands/token-create.ts +0 -81
  123. package/src/cli/main.ts +0 -158
  124. package/src/cli/run-solforge.ts +0 -112
  125. package/src/cli/setup-utils.ts +0 -54
  126. package/src/cli/setup-wizard.ts +0 -258
  127. package/src/cli/utils/args.ts +0 -15
  128. package/src/commands/add-program.ts +0 -333
  129. package/src/commands/init.ts +0 -122
  130. package/src/commands/list.ts +0 -136
  131. package/src/commands/mint.ts +0 -287
  132. package/src/commands/start.ts +0 -881
  133. package/src/commands/status.ts +0 -99
  134. package/src/commands/stop.ts +0 -405
  135. package/src/config/index.ts +0 -146
  136. package/src/config/manager.ts +0 -157
  137. package/src/db/index.ts +0 -83
  138. package/src/db/schema/accounts.ts +0 -23
  139. package/src/db/schema/address-signatures.ts +0 -31
  140. package/src/db/schema/index.ts +0 -6
  141. package/src/db/schema/meta-kv.ts +0 -9
  142. package/src/db/schema/transactions.ts +0 -36
  143. package/src/db/schema/tx-account-states.ts +0 -23
  144. package/src/db/schema/tx-accounts.ts +0 -33
  145. package/src/db/tx-store.ts +0 -264
  146. package/src/gui/public/app.css +0 -1556
  147. package/src/gui/public/build/main.css +0 -1569
  148. package/src/gui/public/build/main.js +0 -303
  149. package/src/gui/public/build/main.js.txt +0 -231
  150. package/src/gui/public/index.html +0 -19
  151. package/src/gui/server.ts +0 -296
  152. package/src/gui/src/api.ts +0 -127
  153. package/src/gui/src/app.tsx +0 -441
  154. package/src/gui/src/components/airdrop-mint-form.tsx +0 -246
  155. package/src/gui/src/components/clone-program-modal.tsx +0 -202
  156. package/src/gui/src/components/clone-token-modal.tsx +0 -230
  157. package/src/gui/src/components/modal.tsx +0 -134
  158. package/src/gui/src/components/programs-panel.tsx +0 -124
  159. package/src/gui/src/components/status-panel.tsx +0 -136
  160. package/src/gui/src/components/tokens-panel.tsx +0 -122
  161. package/src/gui/src/hooks/use-interval.ts +0 -17
  162. package/src/gui/src/index.css +0 -557
  163. package/src/gui/src/main.tsx +0 -17
  164. package/src/index.ts +0 -216
  165. package/src/migrations-bundled.ts +0 -23
  166. package/src/rpc/start.ts +0 -44
  167. package/src/services/api-server.ts +0 -504
  168. package/src/services/port-manager.ts +0 -174
  169. package/src/services/process-registry.ts +0 -153
  170. package/src/services/program-cloner.ts +0 -317
  171. package/src/services/token-cloner.ts +0 -811
  172. package/src/services/validator.ts +0 -293
  173. package/src/types/config.ts +0 -110
  174. package/src/utils/shell.ts +0 -110
  175. package/src/utils/token-loader.ts +0 -115
@@ -1,1556 +0,0 @@
1
- *,
2
- :after,
3
- :before {
4
- --tw-border-spacing-x: 0;
5
- --tw-border-spacing-y: 0;
6
- --tw-translate-x: 0;
7
- --tw-translate-y: 0;
8
- --tw-rotate: 0;
9
- --tw-skew-x: 0;
10
- --tw-skew-y: 0;
11
- --tw-scale-x: 1;
12
- --tw-scale-y: 1;
13
- --tw-pan-x: ;
14
- --tw-pan-y: ;
15
- --tw-pinch-zoom: ;
16
- --tw-scroll-snap-strictness: proximity;
17
- --tw-gradient-from-position: ;
18
- --tw-gradient-via-position: ;
19
- --tw-gradient-to-position: ;
20
- --tw-ordinal: ;
21
- --tw-slashed-zero: ;
22
- --tw-numeric-figure: ;
23
- --tw-numeric-spacing: ;
24
- --tw-numeric-fraction: ;
25
- --tw-ring-inset: ;
26
- --tw-ring-offset-width: 0px;
27
- --tw-ring-offset-color: #fff;
28
- --tw-ring-color: rgba(59, 130, 246, 0.5);
29
- --tw-ring-offset-shadow: 0 0 #0000;
30
- --tw-ring-shadow: 0 0 #0000;
31
- --tw-shadow: 0 0 #0000;
32
- --tw-shadow-colored: 0 0 #0000;
33
- --tw-blur: ;
34
- --tw-brightness: ;
35
- --tw-contrast: ;
36
- --tw-grayscale: ;
37
- --tw-hue-rotate: ;
38
- --tw-invert: ;
39
- --tw-saturate: ;
40
- --tw-sepia: ;
41
- --tw-drop-shadow: ;
42
- --tw-backdrop-blur: ;
43
- --tw-backdrop-brightness: ;
44
- --tw-backdrop-contrast: ;
45
- --tw-backdrop-grayscale: ;
46
- --tw-backdrop-hue-rotate: ;
47
- --tw-backdrop-invert: ;
48
- --tw-backdrop-opacity: ;
49
- --tw-backdrop-saturate: ;
50
- --tw-backdrop-sepia: ;
51
- --tw-contain-size: ;
52
- --tw-contain-layout: ;
53
- --tw-contain-paint: ;
54
- --tw-contain-style: ;
55
- }
56
- ::backdrop {
57
- --tw-border-spacing-x: 0;
58
- --tw-border-spacing-y: 0;
59
- --tw-translate-x: 0;
60
- --tw-translate-y: 0;
61
- --tw-rotate: 0;
62
- --tw-skew-x: 0;
63
- --tw-skew-y: 0;
64
- --tw-scale-x: 1;
65
- --tw-scale-y: 1;
66
- --tw-pan-x: ;
67
- --tw-pan-y: ;
68
- --tw-pinch-zoom: ;
69
- --tw-scroll-snap-strictness: proximity;
70
- --tw-gradient-from-position: ;
71
- --tw-gradient-via-position: ;
72
- --tw-gradient-to-position: ;
73
- --tw-ordinal: ;
74
- --tw-slashed-zero: ;
75
- --tw-numeric-figure: ;
76
- --tw-numeric-spacing: ;
77
- --tw-numeric-fraction: ;
78
- --tw-ring-inset: ;
79
- --tw-ring-offset-width: 0px;
80
- --tw-ring-offset-color: #fff;
81
- --tw-ring-color: rgba(59, 130, 246, 0.5);
82
- --tw-ring-offset-shadow: 0 0 #0000;
83
- --tw-ring-shadow: 0 0 #0000;
84
- --tw-shadow: 0 0 #0000;
85
- --tw-shadow-colored: 0 0 #0000;
86
- --tw-blur: ;
87
- --tw-brightness: ;
88
- --tw-contrast: ;
89
- --tw-grayscale: ;
90
- --tw-hue-rotate: ;
91
- --tw-invert: ;
92
- --tw-saturate: ;
93
- --tw-sepia: ;
94
- --tw-drop-shadow: ;
95
- --tw-backdrop-blur: ;
96
- --tw-backdrop-brightness: ;
97
- --tw-backdrop-contrast: ;
98
- --tw-backdrop-grayscale: ;
99
- --tw-backdrop-hue-rotate: ;
100
- --tw-backdrop-invert: ;
101
- --tw-backdrop-opacity: ;
102
- --tw-backdrop-saturate: ;
103
- --tw-backdrop-sepia: ;
104
- --tw-contain-size: ;
105
- --tw-contain-layout: ;
106
- --tw-contain-paint: ;
107
- --tw-contain-style: ;
108
- } /*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/
109
- *,
110
- :after,
111
- :before {
112
- box-sizing: border-box;
113
- border: 0 solid #e5e7eb;
114
- }
115
- :after,
116
- :before {
117
- --tw-content: "";
118
- }
119
- :host,
120
- html {
121
- line-height: 1.5;
122
- -webkit-text-size-adjust: 100%;
123
- -moz-tab-size: 4;
124
- -o-tab-size: 4;
125
- tab-size: 4;
126
- font-family:
127
- ui-sans-serif,
128
- system-ui,
129
- sans-serif,
130
- Apple Color Emoji,
131
- Segoe UI Emoji,
132
- Segoe UI Symbol,
133
- Noto Color Emoji;
134
- font-feature-settings: normal;
135
- font-variation-settings: normal;
136
- -webkit-tap-highlight-color: transparent;
137
- }
138
- body {
139
- margin: 0;
140
- line-height: inherit;
141
- }
142
- hr {
143
- height: 0;
144
- color: inherit;
145
- border-top-width: 1px;
146
- }
147
- abbr:where([title]) {
148
- -webkit-text-decoration: underline dotted;
149
- text-decoration: underline dotted;
150
- }
151
- h1,
152
- h2,
153
- h3,
154
- h4,
155
- h5,
156
- h6 {
157
- font-size: inherit;
158
- font-weight: inherit;
159
- }
160
- a {
161
- color: inherit;
162
- text-decoration: inherit;
163
- }
164
- b,
165
- strong {
166
- font-weight: bolder;
167
- }
168
- code,
169
- kbd,
170
- pre,
171
- samp {
172
- font-family:
173
- ui-monospace,
174
- SFMono-Regular,
175
- Menlo,
176
- Monaco,
177
- Consolas,
178
- Liberation Mono,
179
- Courier New,
180
- monospace;
181
- font-feature-settings: normal;
182
- font-variation-settings: normal;
183
- font-size: 1em;
184
- }
185
- small {
186
- font-size: 80%;
187
- }
188
- sub,
189
- sup {
190
- font-size: 75%;
191
- line-height: 0;
192
- position: relative;
193
- vertical-align: baseline;
194
- }
195
- sub {
196
- bottom: -0.25em;
197
- }
198
- sup {
199
- top: -0.5em;
200
- }
201
- table {
202
- text-indent: 0;
203
- border-color: inherit;
204
- border-collapse: collapse;
205
- }
206
- button,
207
- input,
208
- optgroup,
209
- select,
210
- textarea {
211
- font-family: inherit;
212
- font-feature-settings: inherit;
213
- font-variation-settings: inherit;
214
- font-size: 100%;
215
- font-weight: inherit;
216
- line-height: inherit;
217
- letter-spacing: inherit;
218
- color: inherit;
219
- margin: 0;
220
- padding: 0;
221
- }
222
- button,
223
- select {
224
- text-transform: none;
225
- }
226
- button,
227
- input:where([type="button"]),
228
- input:where([type="reset"]),
229
- input:where([type="submit"]) {
230
- -webkit-appearance: button;
231
- background-color: transparent;
232
- background-image: none;
233
- }
234
- :-moz-focusring {
235
- outline: auto;
236
- }
237
- :-moz-ui-invalid {
238
- box-shadow: none;
239
- }
240
- progress {
241
- vertical-align: baseline;
242
- }
243
- ::-webkit-inner-spin-button,
244
- ::-webkit-outer-spin-button {
245
- height: auto;
246
- }
247
- [type="search"] {
248
- -webkit-appearance: textfield;
249
- outline-offset: -2px;
250
- }
251
- ::-webkit-search-decoration {
252
- -webkit-appearance: none;
253
- }
254
- ::-webkit-file-upload-button {
255
- -webkit-appearance: button;
256
- font: inherit;
257
- }
258
- summary {
259
- display: list-item;
260
- }
261
- blockquote,
262
- dd,
263
- dl,
264
- figure,
265
- h1,
266
- h2,
267
- h3,
268
- h4,
269
- h5,
270
- h6,
271
- hr,
272
- p,
273
- pre {
274
- margin: 0;
275
- }
276
- fieldset {
277
- margin: 0;
278
- }
279
- fieldset,
280
- legend {
281
- padding: 0;
282
- }
283
- menu,
284
- ol,
285
- ul {
286
- list-style: none;
287
- margin: 0;
288
- padding: 0;
289
- }
290
- dialog {
291
- padding: 0;
292
- }
293
- textarea {
294
- resize: vertical;
295
- }
296
- input::-moz-placeholder,
297
- textarea::-moz-placeholder {
298
- opacity: 1;
299
- color: #9ca3af;
300
- }
301
- input::placeholder,
302
- textarea::placeholder {
303
- opacity: 1;
304
- color: #9ca3af;
305
- }
306
- [role="button"],
307
- button {
308
- cursor: pointer;
309
- }
310
- :disabled {
311
- cursor: default;
312
- }
313
- audio,
314
- canvas,
315
- embed,
316
- iframe,
317
- img,
318
- object,
319
- svg,
320
- video {
321
- display: block;
322
- vertical-align: middle;
323
- }
324
- img,
325
- video {
326
- max-width: 100%;
327
- height: auto;
328
- }
329
- [hidden]:where(:not([hidden="until-found"])) {
330
- display: none;
331
- }
332
- .glass-panel {
333
- border-radius: 1rem;
334
- border-width: 1px;
335
- background: linear-gradient(
336
- 135deg,
337
- hsla(0, 0%, 100%, 0.03),
338
- hsla(0, 0%, 100%, 0.01)
339
- );
340
- border-color: var(--color-border-default);
341
- backdrop-filter: blur(20px);
342
- box-shadow:
343
- var(--shadow-xl),
344
- inset 0 1px 0 0 hsla(0, 0%, 100%, 0.05);
345
- transition: var(--transition-base);
346
- }
347
- .glass-panel:hover {
348
- border-color: var(--color-border-strong);
349
- box-shadow:
350
- var(--shadow-2xl),
351
- var(--shadow-glow),
352
- inset 0 1px 0 0 hsla(0, 0%, 100%, 0.08);
353
- }
354
- .card {
355
- border-radius: 0.75rem;
356
- padding: 1.5rem;
357
- background: var(--color-bg-surface);
358
- border: 1px solid var(--color-border-subtle);
359
- transition: var(--transition-smooth);
360
- animation: fadeIn 0.5s ease-out;
361
- }
362
- .card:hover {
363
- background: var(--color-bg-elevated);
364
- border-color: var(--color-border-default);
365
- transform: translateY(-2px);
366
- box-shadow: var(--shadow-lg);
367
- }
368
- .btn-primary {
369
- display: inline-flex;
370
- align-items: center;
371
- justify-content: center;
372
- gap: 0.5rem;
373
- border-radius: 0.75rem;
374
- padding: 0.625rem 1.25rem;
375
- font-weight: 500;
376
- transition: var(--transition-base);
377
- position: relative;
378
- overflow: hidden;
379
- text-transform: none;
380
- letter-spacing: 0.01em;
381
- background: linear-gradient(
382
- 135deg,
383
- var(--color-accent-primary),
384
- var(--color-accent-secondary)
385
- );
386
- color: #fff;
387
- box-shadow: 0 4px 15px rgba(139, 92, 246, 0.3);
388
- }
389
- .btn-primary:hover {
390
- box-shadow: 0 6px 25px rgba(139, 92, 246, 0.5);
391
- transform: translateY(-2px);
392
- }
393
- .btn-primary:active {
394
- transform: translateY(0);
395
- }
396
- .btn-secondary {
397
- display: inline-flex;
398
- align-items: center;
399
- justify-content: center;
400
- gap: 0.5rem;
401
- border-radius: 0.75rem;
402
- padding: 0.625rem 1.25rem;
403
- font-weight: 500;
404
- transition: var(--transition-base);
405
- position: relative;
406
- overflow: hidden;
407
- text-transform: none;
408
- letter-spacing: 0.01em;
409
- background: var(--color-bg-elevated);
410
- color: var(--color-text-primary);
411
- border: 1px solid var(--color-border-default);
412
- }
413
- .btn-secondary:hover {
414
- background: var(--color-bg-hover);
415
- border-color: var(--color-accent-primary);
416
- box-shadow: inset 0 0 0 1px var(--color-accent-primary);
417
- }
418
- .btn-icon {
419
- display: inline-flex;
420
- align-items: center;
421
- justify-content: center;
422
- width: 40px;
423
- height: 40px;
424
- border-radius: 12px;
425
- background: var(--color-bg-elevated);
426
- border: 1px solid var(--color-border-subtle);
427
- color: var(--color-text-secondary);
428
- transition: var(--transition-base);
429
- }
430
- .btn-icon:hover {
431
- background: var(--color-bg-hover);
432
- color: var(--color-accent-primary);
433
- border-color: var(--color-accent-primary);
434
- transform: scale(1.05);
435
- }
436
- .\!input,
437
- .input {
438
- width: 100%;
439
- border-radius: 0.75rem;
440
- padding: 0.75rem 1rem;
441
- font-size: 0.875rem;
442
- line-height: 1.25rem;
443
- }
444
- .\!input {
445
- background: var(--color-bg-surface);
446
- border: 1px solid var(--color-border-subtle);
447
- color: var(--color-text-primary);
448
- transition: var(--transition-base);
449
- font-family: Inter, sans-serif;
450
- }
451
- .input {
452
- background: var(--color-bg-surface);
453
- border: 1px solid var(--color-border-subtle);
454
- color: var(--color-text-primary);
455
- transition: var(--transition-base);
456
- font-family: Inter, sans-serif;
457
- }
458
- .\!input:hover {
459
- background: var(--color-bg-elevated);
460
- border-color: var(--color-border-default);
461
- }
462
- .input:hover {
463
- background: var(--color-bg-elevated);
464
- border-color: var(--color-border-default);
465
- }
466
- .\!input:focus {
467
- outline: none;
468
- border-color: var(--color-accent-primary);
469
- box-shadow: 0 0 0 3px var(--color-accent-glow);
470
- background: var(--color-bg-elevated);
471
- }
472
- .input:focus {
473
- outline: none;
474
- border-color: var(--color-accent-primary);
475
- box-shadow: 0 0 0 3px var(--color-accent-glow);
476
- background: var(--color-bg-elevated);
477
- }
478
- .\!input::-moz-placeholder {
479
- color: var(--color-text-muted);
480
- }
481
- .\!input::placeholder {
482
- color: var(--color-text-muted);
483
- }
484
- .input::-moz-placeholder {
485
- color: var(--color-text-muted);
486
- }
487
- .input::placeholder {
488
- color: var(--color-text-muted);
489
- }
490
- .select {
491
- width: 100%;
492
- border-radius: 0.75rem;
493
- padding: 0.75rem 1rem;
494
- font-size: 0.875rem;
495
- line-height: 1.25rem;
496
- background: var(--color-bg-surface);
497
- border: 1px solid var(--color-border-subtle);
498
- color: var(--color-text-primary);
499
- transition: var(--transition-base);
500
- font-family: Inter, sans-serif;
501
- }
502
- .select:hover {
503
- border-color: var(--color-border-default);
504
- }
505
- .select:focus,
506
- .select:hover {
507
- background: var(--color-bg-elevated);
508
- }
509
- .select:focus {
510
- outline: none;
511
- border-color: var(--color-accent-primary);
512
- box-shadow: 0 0 0 3px var(--color-accent-glow);
513
- }
514
- .select::-moz-placeholder {
515
- color: var(--color-text-muted);
516
- }
517
- .select::placeholder {
518
- color: var(--color-text-muted);
519
- }
520
- .select {
521
- cursor: pointer;
522
- padding-right: 40px;
523
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%239ca3af' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m19 9-7 7-7-7'/%3E%3C/svg%3E");
524
- background-repeat: no-repeat;
525
- background-position: right 12px center;
526
- background-size: 20px;
527
- }
528
- .checkbox {
529
- height: 1.25rem;
530
- width: 1.25rem;
531
- border-radius: 0.375rem;
532
- background: var(--color-bg-surface);
533
- border: 1px solid var(--color-border-default);
534
- cursor: pointer;
535
- transition: var(--transition-base);
536
- }
537
- .checkbox:checked {
538
- background: linear-gradient(
539
- 135deg,
540
- var(--color-accent-primary),
541
- var(--color-accent-secondary)
542
- );
543
- border-color: var(--color-accent-primary);
544
- }
545
- .checkbox:focus {
546
- outline: none;
547
- box-shadow: 0 0 0 3px var(--color-accent-glow);
548
- }
549
- .table-modern {
550
- width: 100%;
551
- border-collapse: separate;
552
- border-spacing: 0;
553
- }
554
- .table-modern thead {
555
- background: var(--color-bg-surface);
556
- }
557
- .table-modern th {
558
- text-align: left;
559
- font-size: 0.75rem;
560
- line-height: 1rem;
561
- font-weight: 600;
562
- text-transform: uppercase;
563
- letter-spacing: 0.05em;
564
- color: var(--color-text-tertiary);
565
- }
566
- .table-modern td,
567
- .table-modern th {
568
- padding: 0.75rem 1rem;
569
- border-bottom: 1px solid var(--color-border-subtle);
570
- }
571
- .table-modern td {
572
- font-size: 0.875rem;
573
- line-height: 1.25rem;
574
- color: var(--color-text-primary);
575
- }
576
- .table-modern tbody tr {
577
- transition: var(--transition-base);
578
- }
579
- .badge,
580
- .table-modern tbody tr:hover {
581
- background: var(--color-bg-elevated);
582
- }
583
- .badge {
584
- display: inline-flex;
585
- align-items: center;
586
- gap: 0.375rem;
587
- border-radius: 9999px;
588
- padding: 0.25rem 0.75rem;
589
- font-size: 0.75rem;
590
- line-height: 1rem;
591
- font-weight: 500;
592
- color: var(--color-text-secondary);
593
- border: 1px solid var(--color-border-subtle);
594
- }
595
- .badge-success {
596
- background: rgba(16, 185, 129, 0.1);
597
- color: #10b981;
598
- border-color: rgba(16, 185, 129, 0.2);
599
- }
600
- .badge-warning {
601
- background: rgba(245, 158, 11, 0.1);
602
- color: #f59e0b;
603
- border-color: rgba(245, 158, 11, 0.2);
604
- }
605
- .badge-info {
606
- background: rgba(59, 130, 246, 0.1);
607
- color: #3b82f6;
608
- border-color: rgba(59, 130, 246, 0.2);
609
- }
610
- .spinner {
611
- border: 3px solid var(--color-border-subtle);
612
- border-top-color: var(--color-accent-primary);
613
- border-radius: 50%;
614
- width: 20px;
615
- height: 20px;
616
- animation: spin 1s linear infinite;
617
- }
618
- .tooltip.show {
619
- opacity: 1;
620
- }
621
- .status-dot {
622
- display: inline-block;
623
- height: 0.5rem;
624
- width: 0.5rem;
625
- border-radius: 9999px;
626
- animation: pulse 2s infinite;
627
- }
628
- .status-dot.online {
629
- background: var(--color-success);
630
- box-shadow: 0 0 8px var(--color-success);
631
- }
632
- .status-dot.offline {
633
- background: var(--color-text-muted);
634
- }
635
- .status-dot.error {
636
- background: var(--color-error);
637
- box-shadow: 0 0 8px var(--color-error);
638
- }
639
- .fixed {
640
- position: fixed;
641
- }
642
- .absolute {
643
- position: absolute;
644
- }
645
- .relative {
646
- position: relative;
647
- }
648
- .inset-0 {
649
- inset: 0;
650
- }
651
- .left-0 {
652
- left: 0;
653
- }
654
- .left-3 {
655
- left: 0.75rem;
656
- }
657
- .left-4 {
658
- left: 1rem;
659
- }
660
- .top-0 {
661
- top: 0;
662
- }
663
- .top-1\/2 {
664
- top: 50%;
665
- }
666
- .top-4 {
667
- top: 1rem;
668
- }
669
- .z-30 {
670
- z-index: 30;
671
- }
672
- .z-40 {
673
- z-index: 40;
674
- }
675
- .z-50 {
676
- z-index: 50;
677
- }
678
- .mx-auto {
679
- margin-left: auto;
680
- margin-right: auto;
681
- }
682
- .mb-1 {
683
- margin-bottom: 0.25rem;
684
- }
685
- .mb-2 {
686
- margin-bottom: 0.5rem;
687
- }
688
- .mb-3 {
689
- margin-bottom: 0.75rem;
690
- }
691
- .mb-4 {
692
- margin-bottom: 1rem;
693
- }
694
- .mb-6 {
695
- margin-bottom: 1.5rem;
696
- }
697
- .ml-8 {
698
- margin-left: 2rem;
699
- }
700
- .mr-1 {
701
- margin-right: 0.25rem;
702
- }
703
- .mt-0\.5 {
704
- margin-top: 0.125rem;
705
- }
706
- .mt-1 {
707
- margin-top: 0.25rem;
708
- }
709
- .mt-2 {
710
- margin-top: 0.5rem;
711
- }
712
- .mt-6 {
713
- margin-top: 1.5rem;
714
- }
715
- .block {
716
- display: block;
717
- }
718
- .flex {
719
- display: flex;
720
- }
721
- .table {
722
- display: table;
723
- }
724
- .grid {
725
- display: grid;
726
- }
727
- .hidden {
728
- display: none;
729
- }
730
- .h-10 {
731
- height: 2.5rem;
732
- }
733
- .h-12 {
734
- height: 3rem;
735
- }
736
- .h-16 {
737
- height: 4rem;
738
- }
739
- .h-full {
740
- height: 100%;
741
- }
742
- .max-h-\[60vh\] {
743
- max-height: 60vh;
744
- }
745
- .min-h-screen {
746
- min-height: 100vh;
747
- }
748
- .w-10 {
749
- width: 2.5rem;
750
- }
751
- .w-12 {
752
- width: 3rem;
753
- }
754
- .w-16 {
755
- width: 4rem;
756
- }
757
- .w-5 {
758
- width: 1.25rem;
759
- }
760
- .w-72 {
761
- width: 18rem;
762
- }
763
- .w-full {
764
- width: 100%;
765
- }
766
- .max-w-7xl {
767
- max-width: 80rem;
768
- }
769
- .max-w-lg {
770
- max-width: 32rem;
771
- }
772
- .flex-1 {
773
- flex: 1 1 0%;
774
- }
775
- .-translate-x-full {
776
- --tw-translate-x: -100%;
777
- }
778
- .-translate-x-full,
779
- .-translate-y-1\/2 {
780
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
781
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
782
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
783
- }
784
- .-translate-y-1\/2 {
785
- --tw-translate-y: -50%;
786
- }
787
- .translate-x-0 {
788
- --tw-translate-x: 0px;
789
- }
790
- .transform,
791
- .translate-x-0 {
792
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
793
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
794
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
795
- }
796
- @keyframes spin {
797
- to {
798
- transform: rotate(1turn);
799
- }
800
- }
801
- .animate-spin {
802
- animation: spin 1s linear infinite;
803
- }
804
- .cursor-not-allowed {
805
- cursor: not-allowed;
806
- }
807
- .cursor-pointer {
808
- cursor: pointer;
809
- }
810
- .scroll-mt-24 {
811
- scroll-margin-top: 6rem;
812
- }
813
- .appearance-none {
814
- -webkit-appearance: none;
815
- -moz-appearance: none;
816
- appearance: none;
817
- }
818
- .flex-col {
819
- flex-direction: column;
820
- }
821
- .flex-wrap {
822
- flex-wrap: wrap;
823
- }
824
- .items-start {
825
- align-items: flex-start;
826
- }
827
- .items-center {
828
- align-items: center;
829
- }
830
- .items-stretch {
831
- align-items: stretch;
832
- }
833
- .justify-center {
834
- justify-content: center;
835
- }
836
- .justify-between {
837
- justify-content: space-between;
838
- }
839
- .gap-2 {
840
- gap: 0.5rem;
841
- }
842
- .gap-3 {
843
- gap: 0.75rem;
844
- }
845
- .gap-4 {
846
- gap: 1rem;
847
- }
848
- .space-y-2 > :not([hidden]) ~ :not([hidden]) {
849
- --tw-space-y-reverse: 0;
850
- margin-top: calc(0.5rem * (1 - var(--tw-space-y-reverse)));
851
- margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
852
- }
853
- .space-y-3 > :not([hidden]) ~ :not([hidden]) {
854
- --tw-space-y-reverse: 0;
855
- margin-top: calc(0.75rem * (1 - var(--tw-space-y-reverse)));
856
- margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
857
- }
858
- .space-y-4 > :not([hidden]) ~ :not([hidden]) {
859
- --tw-space-y-reverse: 0;
860
- margin-top: calc(1rem * (1 - var(--tw-space-y-reverse)));
861
- margin-bottom: calc(1rem * var(--tw-space-y-reverse));
862
- }
863
- .space-y-5 > :not([hidden]) ~ :not([hidden]) {
864
- --tw-space-y-reverse: 0;
865
- margin-top: calc(1.25rem * (1 - var(--tw-space-y-reverse)));
866
- margin-bottom: calc(1.25rem * var(--tw-space-y-reverse));
867
- }
868
- .space-y-6 > :not([hidden]) ~ :not([hidden]) {
869
- --tw-space-y-reverse: 0;
870
- margin-top: calc(1.5rem * (1 - var(--tw-space-y-reverse)));
871
- margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));
872
- }
873
- .space-y-8 > :not([hidden]) ~ :not([hidden]) {
874
- --tw-space-y-reverse: 0;
875
- margin-top: calc(2rem * (1 - var(--tw-space-y-reverse)));
876
- margin-bottom: calc(2rem * var(--tw-space-y-reverse));
877
- }
878
- .overflow-hidden {
879
- overflow: hidden;
880
- }
881
- .overflow-x-auto {
882
- overflow-x: auto;
883
- }
884
- .overflow-y-auto {
885
- overflow-y: auto;
886
- }
887
- .truncate {
888
- overflow: hidden;
889
- text-overflow: ellipsis;
890
- white-space: nowrap;
891
- }
892
- .break-all {
893
- word-break: break-all;
894
- }
895
- .rounded-2xl {
896
- border-radius: 1rem;
897
- }
898
- .rounded-full {
899
- border-radius: 9999px;
900
- }
901
- .rounded-lg {
902
- border-radius: 0.5rem;
903
- }
904
- .rounded-none {
905
- border-radius: 0;
906
- }
907
- .rounded-xl {
908
- border-radius: 0.75rem;
909
- }
910
- .border {
911
- border-width: 1px;
912
- }
913
- .border-b {
914
- border-bottom-width: 1px;
915
- }
916
- .border-r {
917
- border-right-width: 1px;
918
- }
919
- .border-t {
920
- border-top-width: 1px;
921
- }
922
- .border-green-500\/30 {
923
- border-color: rgba(34, 197, 94, 0.3);
924
- }
925
- .border-purple-500\/30 {
926
- border-color: rgba(168, 85, 247, 0.3);
927
- }
928
- .border-red-500\/30 {
929
- border-color: rgba(239, 68, 68, 0.3);
930
- }
931
- .border-white\/10 {
932
- border-color: hsla(0, 0%, 100%, 0.1);
933
- }
934
- .border-white\/20 {
935
- border-color: hsla(0, 0%, 100%, 0.2);
936
- }
937
- .border-white\/5 {
938
- border-color: hsla(0, 0%, 100%, 0.05);
939
- }
940
- .bg-black\/50 {
941
- background-color: rgba(0, 0, 0, 0.5);
942
- }
943
- .bg-black\/80 {
944
- background-color: rgba(0, 0, 0, 0.8);
945
- }
946
- .bg-gray-900\/95 {
947
- background-color: rgba(17, 24, 39, 0.95);
948
- }
949
- .bg-green-500\/10 {
950
- background-color: rgba(34, 197, 94, 0.1);
951
- }
952
- .bg-red-500\/10 {
953
- background-color: rgba(239, 68, 68, 0.1);
954
- }
955
- .bg-white\/5 {
956
- background-color: hsla(0, 0%, 100%, 0.05);
957
- }
958
- .bg-gradient-to-br {
959
- background-image: linear-gradient(to bottom right, var(--tw-gradient-stops));
960
- }
961
- .bg-gradient-to-r {
962
- background-image: linear-gradient(to right, var(--tw-gradient-stops));
963
- }
964
- .from-amber-500\/20 {
965
- --tw-gradient-from: rgba(245, 158, 11, 0.2) var(--tw-gradient-from-position);
966
- --tw-gradient-to: rgba(245, 158, 11, 0) var(--tw-gradient-to-position);
967
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
968
- }
969
- .from-amber-600\/20 {
970
- --tw-gradient-from: rgba(217, 119, 6, 0.2) var(--tw-gradient-from-position);
971
- --tw-gradient-to: rgba(217, 119, 6, 0) var(--tw-gradient-to-position);
972
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
973
- }
974
- .from-blue-500\/20 {
975
- --tw-gradient-from: rgba(59, 130, 246, 0.2) var(--tw-gradient-from-position);
976
- --tw-gradient-to: rgba(59, 130, 246, 0) var(--tw-gradient-to-position);
977
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
978
- }
979
- .from-blue-600\/20 {
980
- --tw-gradient-from: rgba(37, 99, 235, 0.2) var(--tw-gradient-from-position);
981
- --tw-gradient-to: rgba(37, 99, 235, 0) var(--tw-gradient-to-position);
982
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
983
- }
984
- .from-gray-600\/20 {
985
- --tw-gradient-from: rgba(75, 85, 99, 0.2) var(--tw-gradient-from-position);
986
- --tw-gradient-to: rgba(75, 85, 99, 0) var(--tw-gradient-to-position);
987
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
988
- }
989
- .from-green-500\/20 {
990
- --tw-gradient-from: rgba(34, 197, 94, 0.2) var(--tw-gradient-from-position);
991
- --tw-gradient-to: rgba(34, 197, 94, 0) var(--tw-gradient-to-position);
992
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
993
- }
994
- .from-purple-400 {
995
- --tw-gradient-from: #c084fc var(--tw-gradient-from-position);
996
- --tw-gradient-to: rgba(192, 132, 252, 0) var(--tw-gradient-to-position);
997
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
998
- }
999
- .from-purple-500\/20 {
1000
- --tw-gradient-from: rgba(168, 85, 247, 0.2) var(--tw-gradient-from-position);
1001
- --tw-gradient-to: rgba(168, 85, 247, 0) var(--tw-gradient-to-position);
1002
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1003
- }
1004
- .from-purple-600 {
1005
- --tw-gradient-from: #9333ea var(--tw-gradient-from-position);
1006
- --tw-gradient-to: rgba(147, 51, 234, 0) var(--tw-gradient-to-position);
1007
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1008
- }
1009
- .from-purple-600\/20 {
1010
- --tw-gradient-from: rgba(147, 51, 234, 0.2) var(--tw-gradient-from-position);
1011
- --tw-gradient-to: rgba(147, 51, 234, 0) var(--tw-gradient-to-position);
1012
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1013
- }
1014
- .from-red-500\/10 {
1015
- --tw-gradient-from: rgba(239, 68, 68, 0.1) var(--tw-gradient-from-position);
1016
- --tw-gradient-to: rgba(239, 68, 68, 0) var(--tw-gradient-to-position);
1017
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1018
- }
1019
- .from-violet-500\/20 {
1020
- --tw-gradient-from: rgba(139, 92, 246, 0.2) var(--tw-gradient-from-position);
1021
- --tw-gradient-to: rgba(139, 92, 246, 0) var(--tw-gradient-to-position);
1022
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1023
- }
1024
- .from-white\/5 {
1025
- --tw-gradient-from: hsla(0, 0%, 100%, 0.05) var(--tw-gradient-from-position);
1026
- --tw-gradient-to: hsla(0, 0%, 100%, 0) var(--tw-gradient-to-position);
1027
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1028
- }
1029
- .to-cyan-500\/20 {
1030
- --tw-gradient-to: rgba(6, 182, 212, 0.2) var(--tw-gradient-to-position);
1031
- }
1032
- .to-cyan-600\/20 {
1033
- --tw-gradient-to: rgba(8, 145, 178, 0.2) var(--tw-gradient-to-position);
1034
- }
1035
- .to-emerald-500\/20 {
1036
- --tw-gradient-to: rgba(16, 185, 129, 0.2) var(--tw-gradient-to-position);
1037
- }
1038
- .to-gray-700\/20 {
1039
- --tw-gradient-to: rgba(55, 65, 81, 0.2) var(--tw-gradient-to-position);
1040
- }
1041
- .to-orange-500\/20 {
1042
- --tw-gradient-to: rgba(249, 115, 22, 0.2) var(--tw-gradient-to-position);
1043
- }
1044
- .to-orange-600\/20 {
1045
- --tw-gradient-to: rgba(234, 88, 12, 0.2) var(--tw-gradient-to-position);
1046
- }
1047
- .to-pink-500\/10 {
1048
- --tw-gradient-to: rgba(236, 72, 153, 0.1) var(--tw-gradient-to-position);
1049
- }
1050
- .to-purple-500\/20 {
1051
- --tw-gradient-to: rgba(168, 85, 247, 0.2) var(--tw-gradient-to-position);
1052
- }
1053
- .to-transparent {
1054
- --tw-gradient-to: transparent var(--tw-gradient-to-position);
1055
- }
1056
- .to-violet-400 {
1057
- --tw-gradient-to: #a78bfa var(--tw-gradient-to-position);
1058
- }
1059
- .to-violet-500\/20 {
1060
- --tw-gradient-to: rgba(139, 92, 246, 0.2) var(--tw-gradient-to-position);
1061
- }
1062
- .to-violet-600 {
1063
- --tw-gradient-to: #7c3aed var(--tw-gradient-to-position);
1064
- }
1065
- .to-violet-600\/20 {
1066
- --tw-gradient-to: rgba(124, 58, 237, 0.2) var(--tw-gradient-to-position);
1067
- }
1068
- .bg-clip-text {
1069
- -webkit-background-clip: text;
1070
- background-clip: text;
1071
- }
1072
- .p-0 {
1073
- padding: 0;
1074
- }
1075
- .p-3 {
1076
- padding: 0.75rem;
1077
- }
1078
- .p-4 {
1079
- padding: 1rem;
1080
- }
1081
- .p-6 {
1082
- padding: 1.5rem;
1083
- }
1084
- .px-4 {
1085
- padding-left: 1rem;
1086
- padding-right: 1rem;
1087
- }
1088
- .py-12 {
1089
- padding-top: 3rem;
1090
- padding-bottom: 3rem;
1091
- }
1092
- .py-3 {
1093
- padding-top: 0.75rem;
1094
- padding-bottom: 0.75rem;
1095
- }
1096
- .pl-10 {
1097
- padding-left: 2.5rem;
1098
- }
1099
- .pt-2 {
1100
- padding-top: 0.5rem;
1101
- }
1102
- .pt-3 {
1103
- padding-top: 0.75rem;
1104
- }
1105
- .text-left {
1106
- text-align: left;
1107
- }
1108
- .text-center {
1109
- text-align: center;
1110
- }
1111
- .font-mono {
1112
- font-family:
1113
- ui-monospace,
1114
- SFMono-Regular,
1115
- Menlo,
1116
- Monaco,
1117
- Consolas,
1118
- Liberation Mono,
1119
- Courier New,
1120
- monospace;
1121
- }
1122
- .text-2xl {
1123
- font-size: 1.5rem;
1124
- line-height: 2rem;
1125
- }
1126
- .text-3xl {
1127
- font-size: 1.875rem;
1128
- line-height: 2.25rem;
1129
- }
1130
- .text-sm {
1131
- font-size: 0.875rem;
1132
- line-height: 1.25rem;
1133
- }
1134
- .text-xl {
1135
- font-size: 1.25rem;
1136
- line-height: 1.75rem;
1137
- }
1138
- .text-xs {
1139
- font-size: 0.75rem;
1140
- line-height: 1rem;
1141
- }
1142
- .font-bold {
1143
- font-weight: 700;
1144
- }
1145
- .font-medium {
1146
- font-weight: 500;
1147
- }
1148
- .font-semibold {
1149
- font-weight: 600;
1150
- }
1151
- .uppercase {
1152
- text-transform: uppercase;
1153
- }
1154
- .tracking-wider {
1155
- letter-spacing: 0.05em;
1156
- }
1157
- .text-amber-300 {
1158
- --tw-text-opacity: 1;
1159
- color: rgb(252 211 77 / var(--tw-text-opacity, 1));
1160
- }
1161
- .text-amber-400 {
1162
- --tw-text-opacity: 1;
1163
- color: rgb(251 191 36 / var(--tw-text-opacity, 1));
1164
- }
1165
- .text-amber-500 {
1166
- --tw-text-opacity: 1;
1167
- color: rgb(245 158 11 / var(--tw-text-opacity, 1));
1168
- }
1169
- .text-blue-300 {
1170
- --tw-text-opacity: 1;
1171
- color: rgb(147 197 253 / var(--tw-text-opacity, 1));
1172
- }
1173
- .text-blue-400 {
1174
- --tw-text-opacity: 1;
1175
- color: rgb(96 165 250 / var(--tw-text-opacity, 1));
1176
- }
1177
- .text-blue-500 {
1178
- --tw-text-opacity: 1;
1179
- color: rgb(59 130 246 / var(--tw-text-opacity, 1));
1180
- }
1181
- .text-gray-300 {
1182
- --tw-text-opacity: 1;
1183
- color: rgb(209 213 219 / var(--tw-text-opacity, 1));
1184
- }
1185
- .text-gray-400 {
1186
- --tw-text-opacity: 1;
1187
- color: rgb(156 163 175 / var(--tw-text-opacity, 1));
1188
- }
1189
- .text-gray-500 {
1190
- --tw-text-opacity: 1;
1191
- color: rgb(107 114 128 / var(--tw-text-opacity, 1));
1192
- }
1193
- .text-green-300 {
1194
- --tw-text-opacity: 1;
1195
- color: rgb(134 239 172 / var(--tw-text-opacity, 1));
1196
- }
1197
- .text-green-400 {
1198
- --tw-text-opacity: 1;
1199
- color: rgb(74 222 128 / var(--tw-text-opacity, 1));
1200
- }
1201
- .text-purple-300 {
1202
- --tw-text-opacity: 1;
1203
- color: rgb(216 180 254 / var(--tw-text-opacity, 1));
1204
- }
1205
- .text-purple-400 {
1206
- --tw-text-opacity: 1;
1207
- color: rgb(192 132 252 / var(--tw-text-opacity, 1));
1208
- }
1209
- .text-red-300 {
1210
- --tw-text-opacity: 1;
1211
- color: rgb(252 165 165 / var(--tw-text-opacity, 1));
1212
- }
1213
- .text-red-400 {
1214
- --tw-text-opacity: 1;
1215
- color: rgb(248 113 113 / var(--tw-text-opacity, 1));
1216
- }
1217
- .text-transparent {
1218
- color: transparent;
1219
- }
1220
- .text-violet-300 {
1221
- --tw-text-opacity: 1;
1222
- color: rgb(196 181 253 / var(--tw-text-opacity, 1));
1223
- }
1224
- .text-violet-400 {
1225
- --tw-text-opacity: 1;
1226
- color: rgb(167 139 250 / var(--tw-text-opacity, 1));
1227
- }
1228
- .text-white {
1229
- --tw-text-opacity: 1;
1230
- color: rgb(255 255 255 / var(--tw-text-opacity, 1));
1231
- }
1232
- .opacity-50 {
1233
- opacity: 0.5;
1234
- }
1235
- .shadow-2xl {
1236
- --tw-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
1237
- --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);
1238
- }
1239
- .shadow-2xl,
1240
- .shadow-lg {
1241
- box-shadow:
1242
- var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
1243
- var(--tw-shadow);
1244
- }
1245
- .shadow-lg {
1246
- --tw-shadow:
1247
- 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
1248
- --tw-shadow-colored:
1249
- 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px
1250
- var(--tw-shadow-color);
1251
- }
1252
- .backdrop-blur-sm {
1253
- --tw-backdrop-blur: blur(4px);
1254
- }
1255
- .backdrop-blur-sm,
1256
- .backdrop-blur-xl {
1257
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
1258
- var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale)
1259
- var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
1260
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
1261
- var(--tw-backdrop-sepia);
1262
- }
1263
- .backdrop-blur-xl {
1264
- --tw-backdrop-blur: blur(24px);
1265
- }
1266
- .transition-all {
1267
- transition-property: all;
1268
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1269
- transition-duration: 0.15s;
1270
- }
1271
- .transition-colors {
1272
- transition-property:
1273
- color, background-color, border-color, text-decoration-color, fill, stroke;
1274
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1275
- transition-duration: 0.15s;
1276
- }
1277
- .transition-transform {
1278
- transition-property: transform;
1279
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1280
- transition-duration: 0.15s;
1281
- }
1282
- .duration-200 {
1283
- transition-duration: 0.2s;
1284
- }
1285
- .duration-300 {
1286
- transition-duration: 0.3s;
1287
- }
1288
- .ease-out {
1289
- transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
1290
- }
1291
- :root {
1292
- color-scheme: dark;
1293
- --color-bg-base: #0a0a0f;
1294
- --color-bg-surface: #12121a;
1295
- --color-bg-elevated: #1a1a24;
1296
- --color-bg-hover: #22222e;
1297
- --color-bg-active: #2a2a38;
1298
- --color-accent-primary: #8b5cf6;
1299
- --color-accent-secondary: #a78bfa;
1300
- --color-accent-tertiary: #c4b5fd;
1301
- --color-accent-glow: rgba(139, 92, 246, 0.4);
1302
- --color-success: #10b981;
1303
- --color-warning: #f59e0b;
1304
- --color-error: #ef4444;
1305
- --color-info: #3b82f6;
1306
- --color-text-primary: #f3f4f6;
1307
- --color-text-secondary: #9ca3af;
1308
- --color-text-tertiary: #6b7280;
1309
- --color-text-muted: #4b5563;
1310
- --color-border-subtle: hsla(0, 0%, 100%, 0.06);
1311
- --color-border-default: hsla(0, 0%, 100%, 0.1);
1312
- --color-border-strong: hsla(0, 0%, 100%, 0.15);
1313
- --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
1314
- --shadow-md:
1315
- 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
1316
- --shadow-lg:
1317
- 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
1318
- --shadow-xl:
1319
- 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
1320
- --shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
1321
- --shadow-glow: 0 0 50px rgba(139, 92, 246, 0.3);
1322
- --transition-base: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
1323
- --transition-smooth: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1324
- --transition-spring: all 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);
1325
- }
1326
- * {
1327
- box-sizing: border-box;
1328
- margin: 0;
1329
- padding: 0;
1330
- }
1331
- html {
1332
- font-family: Inter, system-ui, -apple-system, sans-serif;
1333
- font-feature-settings: "cv11", "ss01";
1334
- font-variation-settings: "opsz" 32;
1335
- scroll-behavior: smooth;
1336
- }
1337
- body {
1338
- -webkit-font-smoothing: antialiased;
1339
- -moz-osx-font-smoothing: grayscale;
1340
- background: var(--color-bg-base);
1341
- color: var(--color-text-primary);
1342
- min-height: 100vh;
1343
- position: relative;
1344
- overflow-x: hidden;
1345
- }
1346
- body:before {
1347
- content: "";
1348
- position: fixed;
1349
- top: 0;
1350
- left: 0;
1351
- right: 0;
1352
- bottom: 0;
1353
- background:
1354
- radial-gradient(
1355
- ellipse at top left,
1356
- rgba(139, 92, 246, 0.15) 0,
1357
- transparent 50%
1358
- ),
1359
- radial-gradient(
1360
- ellipse at bottom right,
1361
- rgba(167, 139, 250, 0.1) 0,
1362
- transparent 50%
1363
- );
1364
- pointer-events: none;
1365
- z-index: 0;
1366
- }
1367
- #root {
1368
- position: relative;
1369
- z-index: 1;
1370
- }
1371
- ::-webkit-scrollbar {
1372
- width: 12px;
1373
- height: 12px;
1374
- }
1375
- ::-webkit-scrollbar-track {
1376
- background: var(--color-bg-surface);
1377
- border-radius: 6px;
1378
- }
1379
- ::-webkit-scrollbar-thumb {
1380
- background: linear-gradient(
1381
- 180deg,
1382
- var(--color-accent-primary),
1383
- var(--color-accent-secondary)
1384
- );
1385
- border-radius: 6px;
1386
- border: 2px solid var(--color-bg-surface);
1387
- }
1388
- ::-webkit-scrollbar-thumb:hover {
1389
- background: linear-gradient(
1390
- 180deg,
1391
- var(--color-accent-secondary),
1392
- var(--color-accent-tertiary)
1393
- );
1394
- }
1395
- @keyframes fadeIn {
1396
- 0% {
1397
- opacity: 0;
1398
- transform: translateY(10px);
1399
- }
1400
- to {
1401
- opacity: 1;
1402
- transform: translateY(0);
1403
- }
1404
- }
1405
- @keyframes slideIn {
1406
- 0% {
1407
- opacity: 0;
1408
- transform: translateX(-20px);
1409
- }
1410
- to {
1411
- opacity: 1;
1412
- transform: translateX(0);
1413
- }
1414
- }
1415
- @keyframes pulse {
1416
- 0%,
1417
- to {
1418
- opacity: 1;
1419
- }
1420
- 50% {
1421
- opacity: 0.5;
1422
- }
1423
- }
1424
- @keyframes shimmer {
1425
- 0% {
1426
- background-position: -1000px 0;
1427
- }
1428
- to {
1429
- background-position: 1000px 0;
1430
- }
1431
- }
1432
- @keyframes glow {
1433
- 0%,
1434
- to {
1435
- box-shadow:
1436
- 0 0 20px rgba(139, 92, 246, 0.5),
1437
- inset 0 0 20px rgba(139, 92, 246, 0.1);
1438
- }
1439
- 50% {
1440
- box-shadow:
1441
- 0 0 40px rgba(139, 92, 246, 0.8),
1442
- inset 0 0 30px rgba(139, 92, 246, 0.2);
1443
- }
1444
- }
1445
- .text-mono {
1446
- font-family:
1447
- JetBrains Mono,
1448
- monospace;
1449
- }
1450
- :focus-visible {
1451
- outline: 2px solid var(--color-accent-primary);
1452
- outline-offset: 2px;
1453
- }
1454
- ::-moz-selection {
1455
- background: var(--color-accent-primary);
1456
- color: #fff;
1457
- }
1458
- ::selection {
1459
- background: var(--color-accent-primary);
1460
- color: #fff;
1461
- }
1462
- .hover\:scale-\[1\.02\]:hover {
1463
- --tw-scale-x: 1.02;
1464
- --tw-scale-y: 1.02;
1465
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
1466
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
1467
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1468
- }
1469
- .hover\:border-red-500\/30:hover {
1470
- border-color: rgba(239, 68, 68, 0.3);
1471
- }
1472
- .hover\:bg-red-500\/20:hover {
1473
- background-color: rgba(239, 68, 68, 0.2);
1474
- }
1475
- .hover\:bg-white\/5:hover {
1476
- background-color: hsla(0, 0%, 100%, 0.05);
1477
- }
1478
- .hover\:text-red-300:hover {
1479
- --tw-text-opacity: 1;
1480
- color: rgb(252 165 165 / var(--tw-text-opacity, 1));
1481
- }
1482
- .hover\:text-red-400:hover {
1483
- --tw-text-opacity: 1;
1484
- color: rgb(248 113 113 / var(--tw-text-opacity, 1));
1485
- }
1486
- .group:hover .group-hover\:scale-110 {
1487
- --tw-scale-x: 1.1;
1488
- --tw-scale-y: 1.1;
1489
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
1490
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
1491
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1492
- }
1493
- .group:hover .group-hover\:text-purple-300 {
1494
- --tw-text-opacity: 1;
1495
- color: rgb(216 180 254 / var(--tw-text-opacity, 1));
1496
- }
1497
- @media (min-width: 640px) {
1498
- .sm\:flex-initial {
1499
- flex: 0 1 auto;
1500
- }
1501
- .sm\:grid-cols-2 {
1502
- grid-template-columns: repeat(2, minmax(0, 1fr));
1503
- }
1504
- .sm\:flex-row {
1505
- flex-direction: row;
1506
- }
1507
- .sm\:items-center {
1508
- align-items: center;
1509
- }
1510
- }
1511
- @media (min-width: 768px) {
1512
- .md\:block {
1513
- display: block;
1514
- }
1515
- .md\:hidden {
1516
- display: none;
1517
- }
1518
- .md\:flex-row {
1519
- flex-direction: row;
1520
- }
1521
- .md\:items-center {
1522
- align-items: center;
1523
- }
1524
- .md\:justify-between {
1525
- justify-content: space-between;
1526
- }
1527
- .md\:p-8 {
1528
- padding: 2rem;
1529
- }
1530
- }
1531
- @media (min-width: 1024px) {
1532
- .lg\:ml-72 {
1533
- margin-left: 18rem;
1534
- }
1535
- .lg\:hidden {
1536
- display: none;
1537
- }
1538
- .lg\:translate-x-0 {
1539
- --tw-translate-x: 0px;
1540
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
1541
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
1542
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1543
- }
1544
- .lg\:grid-cols-3 {
1545
- grid-template-columns: repeat(3, minmax(0, 1fr));
1546
- }
1547
- .lg\:grid-cols-4 {
1548
- grid-template-columns: repeat(4, minmax(0, 1fr));
1549
- }
1550
- .lg\:flex-row {
1551
- flex-direction: row;
1552
- }
1553
- .lg\:items-center {
1554
- align-items: center;
1555
- }
1556
- }