opmsec 0.1.3 → 0.1.4

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 (90) hide show
  1. package/.husky/pre-commit +1 -0
  2. package/bun.lock +4 -4
  3. package/docs/mint.json +2 -2
  4. package/package.json +7 -6
  5. package/packages/cli/src/commands/install.tsx +282 -24
  6. package/packages/cli/src/index.tsx +3 -1
  7. package/packages/cli/src/services/version.ts +156 -5
  8. package/packages/core/src/utils.ts +135 -0
  9. package/packages/scanner/src/services/openrouter.ts +18 -7
  10. package/packages/web/.next/BUILD_ID +1 -0
  11. package/packages/web/.next/app-build-manifest.json +18 -7
  12. package/packages/web/.next/app-path-routes-manifest.json +4 -0
  13. package/packages/web/.next/build-manifest.json +19 -6
  14. package/packages/web/.next/diagnostics/build-diagnostics.json +6 -0
  15. package/packages/web/.next/diagnostics/framework.json +1 -0
  16. package/packages/web/.next/export-marker.json +6 -0
  17. package/packages/web/.next/images-manifest.json +58 -0
  18. package/packages/web/.next/next-minimal-server.js.nft.json +1 -0
  19. package/packages/web/.next/next-server.js.nft.json +1 -0
  20. package/packages/web/.next/prerender-manifest.json +54 -4
  21. package/packages/web/.next/required-server-files.json +320 -0
  22. package/packages/web/.next/routes-manifest.json +53 -1
  23. package/packages/web/.next/server/app/_not-found/page.js +2 -0
  24. package/packages/web/.next/server/app/_not-found/page.js.nft.json +1 -0
  25. package/packages/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  26. package/packages/web/.next/server/app/_not-found.html +1 -0
  27. package/packages/web/.next/server/app/_not-found.meta +8 -0
  28. package/packages/web/.next/server/app/_not-found.rsc +16 -0
  29. package/packages/web/.next/server/app/index.html +1 -0
  30. package/packages/web/.next/server/app/index.meta +7 -0
  31. package/packages/web/.next/server/app/index.rsc +20 -0
  32. package/packages/web/.next/server/app/page.js +2 -272
  33. package/packages/web/.next/server/app/page.js.nft.json +1 -0
  34. package/packages/web/.next/server/app/page_client-reference-manifest.js +1 -1
  35. package/packages/web/.next/server/app-paths-manifest.json +1 -0
  36. package/packages/web/.next/server/chunks/611.js +6 -0
  37. package/packages/web/.next/server/chunks/778.js +30 -0
  38. package/packages/web/.next/server/functions-config-manifest.json +4 -0
  39. package/packages/web/.next/server/interception-route-rewrite-manifest.js +1 -1
  40. package/packages/web/.next/server/middleware-build-manifest.js +1 -22
  41. package/packages/web/.next/server/middleware-react-loadable-manifest.js +1 -1
  42. package/packages/web/.next/server/next-font-manifest.js +1 -1
  43. package/packages/web/.next/server/pages/404.html +1 -0
  44. package/packages/web/.next/server/pages/500.html +1 -0
  45. package/packages/web/.next/server/pages/_app.js +1 -0
  46. package/packages/web/.next/server/pages/_app.js.nft.json +1 -0
  47. package/packages/web/.next/server/pages/_document.js +1 -0
  48. package/packages/web/.next/server/pages/_document.js.nft.json +1 -0
  49. package/packages/web/.next/server/pages/_error.js +19 -0
  50. package/packages/web/.next/server/pages/_error.js.nft.json +1 -0
  51. package/packages/web/.next/server/pages-manifest.json +6 -1
  52. package/packages/web/.next/server/server-reference-manifest.js +1 -1
  53. package/packages/web/.next/server/server-reference-manifest.json +1 -5
  54. package/packages/web/.next/server/webpack-runtime.js +1 -209
  55. package/packages/web/.next/static/2XIFCTTKVZwN_RsNE-Rrr/_buildManifest.js +1 -0
  56. package/packages/web/.next/static/2XIFCTTKVZwN_RsNE-Rrr/_ssgManifest.js +1 -0
  57. package/packages/web/.next/static/chunks/255-0dc49b7a6e8e5c05.js +1 -0
  58. package/packages/web/.next/static/chunks/4bd1b696-382748cc942d8a14.js +1 -0
  59. package/packages/web/.next/static/chunks/app/_not-found/page-0da542be7eb33a64.js +1 -0
  60. package/packages/web/.next/static/chunks/app/layout-28a489fb4398663f.js +1 -0
  61. package/packages/web/.next/static/chunks/app/page-e58ccdb78625bce6.js +1 -0
  62. package/packages/web/.next/static/chunks/framework-ac73abd125e371fe.js +1 -0
  63. package/packages/web/.next/static/chunks/main-app-dd261207182e5a23.js +1 -0
  64. package/packages/web/.next/static/chunks/main-ee293fa6aa18bdd1.js +1 -0
  65. package/packages/web/.next/static/chunks/pages/_app-7d307437aca18ad4.js +1 -0
  66. package/packages/web/.next/static/chunks/pages/_error-cb2a52f75f2162e2.js +1 -0
  67. package/packages/web/.next/static/chunks/webpack-e1ae44446e7f7355.js +1 -0
  68. package/packages/web/.next/static/css/21d69157e271f2ab.css +3 -0
  69. package/packages/web/.next/trace +2 -5
  70. package/packages/web/app/page.tsx +5 -2
  71. package/packages/web/.next/server/vendor-chunks/@swc.js +0 -55
  72. package/packages/web/.next/server/vendor-chunks/next.js +0 -3010
  73. package/packages/web/.next/static/chunks/app/layout.js +0 -39
  74. package/packages/web/.next/static/chunks/app/page.js +0 -61
  75. package/packages/web/.next/static/chunks/app-pages-internals.js +0 -182
  76. package/packages/web/.next/static/chunks/main-app.js +0 -1882
  77. package/packages/web/.next/static/chunks/webpack.js +0 -1393
  78. package/packages/web/.next/static/css/app/layout.css +0 -1237
  79. package/packages/web/.next/static/development/_buildManifest.js +0 -1
  80. package/packages/web/.next/static/development/_ssgManifest.js +0 -1
  81. package/packages/web/.next/static/webpack/633457081244afec._.hot-update.json +0 -1
  82. package/packages/web/.next/static/webpack/6fee6306e0f98869.webpack.hot-update.json +0 -1
  83. package/packages/web/.next/static/webpack/73e341375c8d429e.webpack.hot-update.json +0 -1
  84. package/packages/web/.next/static/webpack/app/layout.6fee6306e0f98869.hot-update.js +0 -22
  85. package/packages/web/.next/static/webpack/app/layout.73e341375c8d429e.hot-update.js +0 -22
  86. package/packages/web/.next/static/webpack/app/page.6fee6306e0f98869.hot-update.js +0 -22
  87. package/packages/web/.next/static/webpack/app/page.73e341375c8d429e.hot-update.js +0 -22
  88. package/packages/web/.next/static/webpack/webpack.6fee6306e0f98869.hot-update.js +0 -12
  89. package/packages/web/.next/static/webpack/webpack.73e341375c8d429e.hot-update.js +0 -12
  90. /package/packages/web/.next/static/chunks/{polyfills.js → polyfills-42372ed130431b0a.js} +0 -0
@@ -1,1237 +0,0 @@
1
- /*!*************************************************************************************************************************************************************************************************************************************************************!*\
2
- !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[10].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[10].use[3]!./app/globals.css ***!
3
- \*************************************************************************************************************************************************************************************************************************************************************/
4
- *, ::before, ::after {
5
- --tw-border-spacing-x: 0;
6
- --tw-border-spacing-y: 0;
7
- --tw-translate-x: 0;
8
- --tw-translate-y: 0;
9
- --tw-rotate: 0;
10
- --tw-skew-x: 0;
11
- --tw-skew-y: 0;
12
- --tw-scale-x: 1;
13
- --tw-scale-y: 1;
14
- --tw-pan-x: ;
15
- --tw-pan-y: ;
16
- --tw-pinch-zoom: ;
17
- --tw-scroll-snap-strictness: proximity;
18
- --tw-gradient-from-position: ;
19
- --tw-gradient-via-position: ;
20
- --tw-gradient-to-position: ;
21
- --tw-ordinal: ;
22
- --tw-slashed-zero: ;
23
- --tw-numeric-figure: ;
24
- --tw-numeric-spacing: ;
25
- --tw-numeric-fraction: ;
26
- --tw-ring-inset: ;
27
- --tw-ring-offset-width: 0px;
28
- --tw-ring-offset-color: #fff;
29
- --tw-ring-color: rgb(59 130 246 / 0.5);
30
- --tw-ring-offset-shadow: 0 0 #0000;
31
- --tw-ring-shadow: 0 0 #0000;
32
- --tw-shadow: 0 0 #0000;
33
- --tw-shadow-colored: 0 0 #0000;
34
- --tw-blur: ;
35
- --tw-brightness: ;
36
- --tw-contrast: ;
37
- --tw-grayscale: ;
38
- --tw-hue-rotate: ;
39
- --tw-invert: ;
40
- --tw-saturate: ;
41
- --tw-sepia: ;
42
- --tw-drop-shadow: ;
43
- --tw-backdrop-blur: ;
44
- --tw-backdrop-brightness: ;
45
- --tw-backdrop-contrast: ;
46
- --tw-backdrop-grayscale: ;
47
- --tw-backdrop-hue-rotate: ;
48
- --tw-backdrop-invert: ;
49
- --tw-backdrop-opacity: ;
50
- --tw-backdrop-saturate: ;
51
- --tw-backdrop-sepia: ;
52
- --tw-contain-size: ;
53
- --tw-contain-layout: ;
54
- --tw-contain-paint: ;
55
- --tw-contain-style: ;
56
- }
57
-
58
- ::backdrop {
59
- --tw-border-spacing-x: 0;
60
- --tw-border-spacing-y: 0;
61
- --tw-translate-x: 0;
62
- --tw-translate-y: 0;
63
- --tw-rotate: 0;
64
- --tw-skew-x: 0;
65
- --tw-skew-y: 0;
66
- --tw-scale-x: 1;
67
- --tw-scale-y: 1;
68
- --tw-pan-x: ;
69
- --tw-pan-y: ;
70
- --tw-pinch-zoom: ;
71
- --tw-scroll-snap-strictness: proximity;
72
- --tw-gradient-from-position: ;
73
- --tw-gradient-via-position: ;
74
- --tw-gradient-to-position: ;
75
- --tw-ordinal: ;
76
- --tw-slashed-zero: ;
77
- --tw-numeric-figure: ;
78
- --tw-numeric-spacing: ;
79
- --tw-numeric-fraction: ;
80
- --tw-ring-inset: ;
81
- --tw-ring-offset-width: 0px;
82
- --tw-ring-offset-color: #fff;
83
- --tw-ring-color: rgb(59 130 246 / 0.5);
84
- --tw-ring-offset-shadow: 0 0 #0000;
85
- --tw-ring-shadow: 0 0 #0000;
86
- --tw-shadow: 0 0 #0000;
87
- --tw-shadow-colored: 0 0 #0000;
88
- --tw-blur: ;
89
- --tw-brightness: ;
90
- --tw-contrast: ;
91
- --tw-grayscale: ;
92
- --tw-hue-rotate: ;
93
- --tw-invert: ;
94
- --tw-saturate: ;
95
- --tw-sepia: ;
96
- --tw-drop-shadow: ;
97
- --tw-backdrop-blur: ;
98
- --tw-backdrop-brightness: ;
99
- --tw-backdrop-contrast: ;
100
- --tw-backdrop-grayscale: ;
101
- --tw-backdrop-hue-rotate: ;
102
- --tw-backdrop-invert: ;
103
- --tw-backdrop-opacity: ;
104
- --tw-backdrop-saturate: ;
105
- --tw-backdrop-sepia: ;
106
- --tw-contain-size: ;
107
- --tw-contain-layout: ;
108
- --tw-contain-paint: ;
109
- --tw-contain-style: ;
110
- }/*
111
- ! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
112
- *//*
113
- 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
114
- 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
115
- */
116
-
117
- *,
118
- ::before,
119
- ::after {
120
- box-sizing: border-box; /* 1 */
121
- border-width: 0; /* 2 */
122
- border-style: solid; /* 2 */
123
- border-color: #e5e7eb; /* 2 */
124
- }
125
-
126
- ::before,
127
- ::after {
128
- --tw-content: '';
129
- }
130
-
131
- /*
132
- 1. Use a consistent sensible line-height in all browsers.
133
- 2. Prevent adjustments of font size after orientation changes in iOS.
134
- 3. Use a more readable tab size.
135
- 4. Use the user's configured `sans` font-family by default.
136
- 5. Use the user's configured `sans` font-feature-settings by default.
137
- 6. Use the user's configured `sans` font-variation-settings by default.
138
- 7. Disable tap highlights on iOS
139
- */
140
-
141
- html,
142
- :host {
143
- line-height: 1.5; /* 1 */
144
- -webkit-text-size-adjust: 100%; /* 2 */
145
- -moz-tab-size: 4; /* 3 */
146
- -o-tab-size: 4;
147
- tab-size: 4; /* 3 */
148
- font-family: Inter, system-ui, -apple-system, sans-serif; /* 4 */
149
- font-feature-settings: normal; /* 5 */
150
- font-variation-settings: normal; /* 6 */
151
- -webkit-tap-highlight-color: transparent; /* 7 */
152
- }
153
-
154
- /*
155
- 1. Remove the margin in all browsers.
156
- 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
157
- */
158
-
159
- body {
160
- margin: 0; /* 1 */
161
- line-height: inherit; /* 2 */
162
- }
163
-
164
- /*
165
- 1. Add the correct height in Firefox.
166
- 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
167
- 3. Ensure horizontal rules are visible by default.
168
- */
169
-
170
- hr {
171
- height: 0; /* 1 */
172
- color: inherit; /* 2 */
173
- border-top-width: 1px; /* 3 */
174
- }
175
-
176
- /*
177
- Add the correct text decoration in Chrome, Edge, and Safari.
178
- */
179
-
180
- abbr:where([title]) {
181
- -webkit-text-decoration: underline dotted;
182
- text-decoration: underline dotted;
183
- }
184
-
185
- /*
186
- Remove the default font size and weight for headings.
187
- */
188
-
189
- h1,
190
- h2,
191
- h3,
192
- h4,
193
- h5,
194
- h6 {
195
- font-size: inherit;
196
- font-weight: inherit;
197
- }
198
-
199
- /*
200
- Reset links to optimize for opt-in styling instead of opt-out.
201
- */
202
-
203
- a {
204
- color: inherit;
205
- text-decoration: inherit;
206
- }
207
-
208
- /*
209
- Add the correct font weight in Edge and Safari.
210
- */
211
-
212
- b,
213
- strong {
214
- font-weight: bolder;
215
- }
216
-
217
- /*
218
- 1. Use the user's configured `mono` font-family by default.
219
- 2. Use the user's configured `mono` font-feature-settings by default.
220
- 3. Use the user's configured `mono` font-variation-settings by default.
221
- 4. Correct the odd `em` font sizing in all browsers.
222
- */
223
-
224
- code,
225
- kbd,
226
- samp,
227
- pre {
228
- font-family: JetBrains Mono, Menlo, monospace; /* 1 */
229
- font-feature-settings: normal; /* 2 */
230
- font-variation-settings: normal; /* 3 */
231
- font-size: 1em; /* 4 */
232
- }
233
-
234
- /*
235
- Add the correct font size in all browsers.
236
- */
237
-
238
- small {
239
- font-size: 80%;
240
- }
241
-
242
- /*
243
- Prevent `sub` and `sup` elements from affecting the line height in all browsers.
244
- */
245
-
246
- sub,
247
- sup {
248
- font-size: 75%;
249
- line-height: 0;
250
- position: relative;
251
- vertical-align: baseline;
252
- }
253
-
254
- sub {
255
- bottom: -0.25em;
256
- }
257
-
258
- sup {
259
- top: -0.5em;
260
- }
261
-
262
- /*
263
- 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
264
- 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
265
- 3. Remove gaps between table borders by default.
266
- */
267
-
268
- table {
269
- text-indent: 0; /* 1 */
270
- border-color: inherit; /* 2 */
271
- border-collapse: collapse; /* 3 */
272
- }
273
-
274
- /*
275
- 1. Change the font styles in all browsers.
276
- 2. Remove the margin in Firefox and Safari.
277
- 3. Remove default padding in all browsers.
278
- */
279
-
280
- button,
281
- input,
282
- optgroup,
283
- select,
284
- textarea {
285
- font-family: inherit; /* 1 */
286
- font-feature-settings: inherit; /* 1 */
287
- font-variation-settings: inherit; /* 1 */
288
- font-size: 100%; /* 1 */
289
- font-weight: inherit; /* 1 */
290
- line-height: inherit; /* 1 */
291
- letter-spacing: inherit; /* 1 */
292
- color: inherit; /* 1 */
293
- margin: 0; /* 2 */
294
- padding: 0; /* 3 */
295
- }
296
-
297
- /*
298
- Remove the inheritance of text transform in Edge and Firefox.
299
- */
300
-
301
- button,
302
- select {
303
- text-transform: none;
304
- }
305
-
306
- /*
307
- 1. Correct the inability to style clickable types in iOS and Safari.
308
- 2. Remove default button styles.
309
- */
310
-
311
- button,
312
- input:where([type='button']),
313
- input:where([type='reset']),
314
- input:where([type='submit']) {
315
- -webkit-appearance: button; /* 1 */
316
- background-color: transparent; /* 2 */
317
- background-image: none; /* 2 */
318
- }
319
-
320
- /*
321
- Use the modern Firefox focus style for all focusable elements.
322
- */
323
-
324
- :-moz-focusring {
325
- outline: auto;
326
- }
327
-
328
- /*
329
- Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
330
- */
331
-
332
- :-moz-ui-invalid {
333
- box-shadow: none;
334
- }
335
-
336
- /*
337
- Add the correct vertical alignment in Chrome and Firefox.
338
- */
339
-
340
- progress {
341
- vertical-align: baseline;
342
- }
343
-
344
- /*
345
- Correct the cursor style of increment and decrement buttons in Safari.
346
- */
347
-
348
- ::-webkit-inner-spin-button,
349
- ::-webkit-outer-spin-button {
350
- height: auto;
351
- }
352
-
353
- /*
354
- 1. Correct the odd appearance in Chrome and Safari.
355
- 2. Correct the outline style in Safari.
356
- */
357
-
358
- [type='search'] {
359
- -webkit-appearance: textfield; /* 1 */
360
- outline-offset: -2px; /* 2 */
361
- }
362
-
363
- /*
364
- Remove the inner padding in Chrome and Safari on macOS.
365
- */
366
-
367
- ::-webkit-search-decoration {
368
- -webkit-appearance: none;
369
- }
370
-
371
- /*
372
- 1. Correct the inability to style clickable types in iOS and Safari.
373
- 2. Change font properties to `inherit` in Safari.
374
- */
375
-
376
- ::-webkit-file-upload-button {
377
- -webkit-appearance: button; /* 1 */
378
- font: inherit; /* 2 */
379
- }
380
-
381
- /*
382
- Add the correct display in Chrome and Safari.
383
- */
384
-
385
- summary {
386
- display: list-item;
387
- }
388
-
389
- /*
390
- Removes the default spacing and border for appropriate elements.
391
- */
392
-
393
- blockquote,
394
- dl,
395
- dd,
396
- h1,
397
- h2,
398
- h3,
399
- h4,
400
- h5,
401
- h6,
402
- hr,
403
- figure,
404
- p,
405
- pre {
406
- margin: 0;
407
- }
408
-
409
- fieldset {
410
- margin: 0;
411
- padding: 0;
412
- }
413
-
414
- legend {
415
- padding: 0;
416
- }
417
-
418
- ol,
419
- ul,
420
- menu {
421
- list-style: none;
422
- margin: 0;
423
- padding: 0;
424
- }
425
-
426
- /*
427
- Reset default styling for dialogs.
428
- */
429
- dialog {
430
- padding: 0;
431
- }
432
-
433
- /*
434
- Prevent resizing textareas horizontally by default.
435
- */
436
-
437
- textarea {
438
- resize: vertical;
439
- }
440
-
441
- /*
442
- 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
443
- 2. Set the default placeholder color to the user's configured gray 400 color.
444
- */
445
-
446
- input::-moz-placeholder, textarea::-moz-placeholder {
447
- opacity: 1; /* 1 */
448
- color: #9ca3af; /* 2 */
449
- }
450
-
451
- input::placeholder,
452
- textarea::placeholder {
453
- opacity: 1; /* 1 */
454
- color: #9ca3af; /* 2 */
455
- }
456
-
457
- /*
458
- Set the default cursor for buttons.
459
- */
460
-
461
- button,
462
- [role="button"] {
463
- cursor: pointer;
464
- }
465
-
466
- /*
467
- Make sure disabled buttons don't get the pointer cursor.
468
- */
469
- :disabled {
470
- cursor: default;
471
- }
472
-
473
- /*
474
- 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
475
- 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
476
- This can trigger a poorly considered lint error in some tools but is included by design.
477
- */
478
-
479
- img,
480
- svg,
481
- video,
482
- canvas,
483
- audio,
484
- iframe,
485
- embed,
486
- object {
487
- display: block; /* 1 */
488
- vertical-align: middle; /* 2 */
489
- }
490
-
491
- /*
492
- Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
493
- */
494
-
495
- img,
496
- video {
497
- max-width: 100%;
498
- height: auto;
499
- }
500
-
501
- /* Make elements with the HTML hidden attribute stay hidden by default */
502
- [hidden]:where(:not([hidden="until-found"])) {
503
- display: none;
504
- }
505
- .fixed {
506
- position: fixed;
507
- }
508
- .absolute {
509
- position: absolute;
510
- }
511
- .relative {
512
- position: relative;
513
- }
514
- .-inset-0\.5 {
515
- inset: -0.125rem;
516
- }
517
- .inset-0 {
518
- inset: 0px;
519
- }
520
- .-right-2\.5 {
521
- right: -0.625rem;
522
- }
523
- .bottom-0 {
524
- bottom: 0px;
525
- }
526
- .left-0 {
527
- left: 0px;
528
- }
529
- .left-1\/2 {
530
- left: 50%;
531
- }
532
- .right-0 {
533
- right: 0px;
534
- }
535
- .top-0 {
536
- top: 0px;
537
- }
538
- .top-1\/2 {
539
- top: 50%;
540
- }
541
- .z-10 {
542
- z-index: 10;
543
- }
544
- .z-40 {
545
- z-index: 40;
546
- }
547
- .mx-auto {
548
- margin-left: auto;
549
- margin-right: auto;
550
- }
551
- .mb-1 {
552
- margin-bottom: 0.25rem;
553
- }
554
- .mb-12 {
555
- margin-bottom: 3rem;
556
- }
557
- .mb-2 {
558
- margin-bottom: 0.5rem;
559
- }
560
- .mb-20 {
561
- margin-bottom: 5rem;
562
- }
563
- .mb-3 {
564
- margin-bottom: 0.75rem;
565
- }
566
- .mb-4 {
567
- margin-bottom: 1rem;
568
- }
569
- .mb-6 {
570
- margin-bottom: 1.5rem;
571
- }
572
- .mb-8 {
573
- margin-bottom: 2rem;
574
- }
575
- .ml-2 {
576
- margin-left: 0.5rem;
577
- }
578
- .mt-0\.5 {
579
- margin-top: 0.125rem;
580
- }
581
- .mt-20 {
582
- margin-top: 5rem;
583
- }
584
- .block {
585
- display: block;
586
- }
587
- .flex {
588
- display: flex;
589
- }
590
- .inline-flex {
591
- display: inline-flex;
592
- }
593
- .grid {
594
- display: grid;
595
- }
596
- .hidden {
597
- display: none;
598
- }
599
- .h-1\.5 {
600
- height: 0.375rem;
601
- }
602
- .h-16 {
603
- height: 4rem;
604
- }
605
- .h-2 {
606
- height: 0.5rem;
607
- }
608
- .h-3 {
609
- height: 0.75rem;
610
- }
611
- .h-32 {
612
- height: 8rem;
613
- }
614
- .h-\[800px\] {
615
- height: 800px;
616
- }
617
- .h-full {
618
- height: 100%;
619
- }
620
- .h-px {
621
- height: 1px;
622
- }
623
- .min-h-screen {
624
- min-height: 100vh;
625
- }
626
- .w-1\.5 {
627
- width: 0.375rem;
628
- }
629
- .w-2 {
630
- width: 0.5rem;
631
- }
632
- .w-3 {
633
- width: 0.75rem;
634
- }
635
- .w-5 {
636
- width: 1.25rem;
637
- }
638
- .w-\[800px\] {
639
- width: 800px;
640
- }
641
- .max-w-2xl {
642
- max-width: 42rem;
643
- }
644
- .max-w-4xl {
645
- max-width: 56rem;
646
- }
647
- .max-w-6xl {
648
- max-width: 72rem;
649
- }
650
- .shrink-0 {
651
- flex-shrink: 0;
652
- }
653
- .-translate-x-1\/2 {
654
- --tw-translate-x: -50%;
655
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
656
- }
657
- .-translate-y-1\/2 {
658
- --tw-translate-y: -50%;
659
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
660
- }
661
- @keyframes fadeIn {
662
-
663
- from {
664
- opacity: 0;
665
- }
666
-
667
- to {
668
- opacity: 1;
669
- }
670
- }
671
- .animate-fade-in {
672
- animation: fadeIn 0.8s ease-out forwards;
673
- }
674
- @keyframes glowPulse {
675
-
676
- 0%, 100% {
677
- opacity: 0.4;
678
- }
679
-
680
- 50% {
681
- opacity: 0.8;
682
- }
683
- }
684
- .animate-glow-pulse {
685
- animation: glowPulse 3s ease-in-out infinite;
686
- }
687
- @keyframes pulse {
688
-
689
- 50% {
690
- opacity: .5;
691
- }
692
- }
693
- .animate-pulse {
694
- animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
695
- }
696
- @keyframes slideUp {
697
-
698
- from {
699
- opacity: 0;
700
- transform: translateY(20px);
701
- }
702
-
703
- to {
704
- opacity: 1;
705
- transform: translateY(0);
706
- }
707
- }
708
- .animate-slide-up {
709
- animation: slideUp 0.6s ease-out forwards;
710
- }
711
- .cursor-pointer {
712
- cursor: pointer;
713
- }
714
- .grid-cols-1 {
715
- grid-template-columns: repeat(1, minmax(0, 1fr));
716
- }
717
- .grid-cols-2 {
718
- grid-template-columns: repeat(2, minmax(0, 1fr));
719
- }
720
- .flex-col {
721
- flex-direction: column;
722
- }
723
- .items-center {
724
- align-items: center;
725
- }
726
- .justify-center {
727
- justify-content: center;
728
- }
729
- .justify-between {
730
- justify-content: space-between;
731
- }
732
- .gap-1\.5 {
733
- gap: 0.375rem;
734
- }
735
- .gap-16 {
736
- gap: 4rem;
737
- }
738
- .gap-2 {
739
- gap: 0.5rem;
740
- }
741
- .gap-2\.5 {
742
- gap: 0.625rem;
743
- }
744
- .gap-3 {
745
- gap: 0.75rem;
746
- }
747
- .gap-4 {
748
- gap: 1rem;
749
- }
750
- .gap-6 {
751
- gap: 1.5rem;
752
- }
753
- .gap-8 {
754
- gap: 2rem;
755
- }
756
- .gap-px {
757
- gap: 1px;
758
- }
759
- .space-y-3 > :not([hidden]) ~ :not([hidden]) {
760
- --tw-space-y-reverse: 0;
761
- margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
762
- margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
763
- }
764
- .overflow-hidden {
765
- overflow: hidden;
766
- }
767
- .rounded {
768
- border-radius: 0.25rem;
769
- }
770
- .rounded-2xl {
771
- border-radius: 1rem;
772
- }
773
- .rounded-full {
774
- border-radius: 9999px;
775
- }
776
- .rounded-lg {
777
- border-radius: 0.5rem;
778
- }
779
- .rounded-xl {
780
- border-radius: 0.75rem;
781
- }
782
- .border {
783
- border-width: 1px;
784
- }
785
- .border-b {
786
- border-bottom-width: 1px;
787
- }
788
- .border-t {
789
- border-top-width: 1px;
790
- }
791
- .border-border {
792
- --tw-border-opacity: 1;
793
- border-color: rgb(34 34 34 / var(--tw-border-opacity, 1));
794
- }
795
- .bg-\[\#28c840\] {
796
- --tw-bg-opacity: 1;
797
- background-color: rgb(40 200 64 / var(--tw-bg-opacity, 1));
798
- }
799
- .bg-\[\#febc2e\] {
800
- --tw-bg-opacity: 1;
801
- background-color: rgb(254 188 46 / var(--tw-bg-opacity, 1));
802
- }
803
- .bg-\[\#ff5f57\] {
804
- --tw-bg-opacity: 1;
805
- background-color: rgb(255 95 87 / var(--tw-bg-opacity, 1));
806
- }
807
- .bg-accent {
808
- --tw-bg-opacity: 1;
809
- background-color: rgb(237 237 237 / var(--tw-bg-opacity, 1));
810
- }
811
- .bg-bg {
812
- --tw-bg-opacity: 1;
813
- background-color: rgb(10 10 10 / var(--tw-bg-opacity, 1));
814
- }
815
- .bg-bg\/80 {
816
- background-color: rgb(10 10 10 / 0.8);
817
- }
818
- .bg-border {
819
- --tw-bg-opacity: 1;
820
- background-color: rgb(34 34 34 / var(--tw-bg-opacity, 1));
821
- }
822
- .bg-green-500 {
823
- --tw-bg-opacity: 1;
824
- background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1));
825
- }
826
- .bg-surface {
827
- --tw-bg-opacity: 1;
828
- background-color: rgb(17 17 17 / var(--tw-bg-opacity, 1));
829
- }
830
- .bg-surface\/50 {
831
- background-color: rgb(17 17 17 / 0.5);
832
- }
833
- .bg-gradient-to-b {
834
- background-image: linear-gradient(to bottom, var(--tw-gradient-stops));
835
- }
836
- .bg-gradient-to-r {
837
- background-image: linear-gradient(to right, var(--tw-gradient-stops));
838
- }
839
- .bg-gradient-to-t {
840
- background-image: linear-gradient(to top, var(--tw-gradient-stops));
841
- }
842
- .from-bg {
843
- --tw-gradient-from: #0a0a0a var(--tw-gradient-from-position);
844
- --tw-gradient-to: rgb(10 10 10 / 0) var(--tw-gradient-to-position);
845
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
846
- }
847
- .from-white {
848
- --tw-gradient-from: #fff var(--tw-gradient-from-position);
849
- --tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);
850
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
851
- }
852
- .from-white\/20 {
853
- --tw-gradient-from: rgb(255 255 255 / 0.2) var(--tw-gradient-from-position);
854
- --tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);
855
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
856
- }
857
- .from-white\/5 {
858
- --tw-gradient-from: rgb(255 255 255 / 0.05) var(--tw-gradient-from-position);
859
- --tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);
860
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
861
- }
862
- .from-white\/\[0\.02\] {
863
- --tw-gradient-from: rgb(255 255 255 / 0.02) var(--tw-gradient-from-position);
864
- --tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);
865
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
866
- }
867
- .via-white\/90 {
868
- --tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);
869
- --tw-gradient-stops: var(--tw-gradient-from), rgb(255 255 255 / 0.9) var(--tw-gradient-via-position), var(--tw-gradient-to);
870
- }
871
- .to-transparent {
872
- --tw-gradient-to: transparent var(--tw-gradient-to-position);
873
- }
874
- .to-white\/40 {
875
- --tw-gradient-to: rgb(255 255 255 / 0.4) var(--tw-gradient-to-position);
876
- }
877
- .to-white\/5 {
878
- --tw-gradient-to: rgb(255 255 255 / 0.05) var(--tw-gradient-to-position);
879
- }
880
- .bg-clip-text {
881
- -webkit-background-clip: text;
882
- background-clip: text;
883
- }
884
- .p-5 {
885
- padding: 1.25rem;
886
- }
887
- .p-6 {
888
- padding: 1.5rem;
889
- }
890
- .p-8 {
891
- padding: 2rem;
892
- }
893
- .px-1\.5 {
894
- padding-left: 0.375rem;
895
- padding-right: 0.375rem;
896
- }
897
- .px-3 {
898
- padding-left: 0.75rem;
899
- padding-right: 0.75rem;
900
- }
901
- .px-4 {
902
- padding-left: 1rem;
903
- padding-right: 1rem;
904
- }
905
- .px-5 {
906
- padding-left: 1.25rem;
907
- padding-right: 1.25rem;
908
- }
909
- .px-6 {
910
- padding-left: 1.5rem;
911
- padding-right: 1.5rem;
912
- }
913
- .py-0\.5 {
914
- padding-top: 0.125rem;
915
- padding-bottom: 0.125rem;
916
- }
917
- .py-1\.5 {
918
- padding-top: 0.375rem;
919
- padding-bottom: 0.375rem;
920
- }
921
- .py-12 {
922
- padding-top: 3rem;
923
- padding-bottom: 3rem;
924
- }
925
- .py-2 {
926
- padding-top: 0.5rem;
927
- padding-bottom: 0.5rem;
928
- }
929
- .py-3 {
930
- padding-top: 0.75rem;
931
- padding-bottom: 0.75rem;
932
- }
933
- .py-32 {
934
- padding-top: 8rem;
935
- padding-bottom: 8rem;
936
- }
937
- .text-center {
938
- text-align: center;
939
- }
940
- .font-mono {
941
- font-family: JetBrains Mono, Menlo, monospace;
942
- }
943
- .text-2xl {
944
- font-size: 1.5rem;
945
- line-height: 2rem;
946
- }
947
- .text-4xl {
948
- font-size: 2.25rem;
949
- line-height: 2.5rem;
950
- }
951
- .text-6xl {
952
- font-size: 3.75rem;
953
- line-height: 1;
954
- }
955
- .text-\[10px\] {
956
- font-size: 10px;
957
- }
958
- .text-lg {
959
- font-size: 1.125rem;
960
- line-height: 1.75rem;
961
- }
962
- .text-sm {
963
- font-size: 0.875rem;
964
- line-height: 1.25rem;
965
- }
966
- .text-xs {
967
- font-size: 0.75rem;
968
- line-height: 1rem;
969
- }
970
- .font-bold {
971
- font-weight: 700;
972
- }
973
- .font-medium {
974
- font-weight: 500;
975
- }
976
- .font-semibold {
977
- font-weight: 600;
978
- }
979
- .uppercase {
980
- text-transform: uppercase;
981
- }
982
- .leading-\[0\.9\] {
983
- line-height: 0.9;
984
- }
985
- .leading-relaxed {
986
- line-height: 1.625;
987
- }
988
- .tracking-tight {
989
- letter-spacing: -0.025em;
990
- }
991
- .tracking-tighter {
992
- letter-spacing: -0.05em;
993
- }
994
- .tracking-widest {
995
- letter-spacing: 0.1em;
996
- }
997
- .text-accent {
998
- --tw-text-opacity: 1;
999
- color: rgb(237 237 237 / var(--tw-text-opacity, 1));
1000
- }
1001
- .text-bg {
1002
- --tw-text-opacity: 1;
1003
- color: rgb(10 10 10 / var(--tw-text-opacity, 1));
1004
- }
1005
- .text-blue-400\/80 {
1006
- color: rgb(96 165 250 / 0.8);
1007
- }
1008
- .text-green-400 {
1009
- --tw-text-opacity: 1;
1010
- color: rgb(74 222 128 / var(--tw-text-opacity, 1));
1011
- }
1012
- .text-green-500\/80 {
1013
- color: rgb(34 197 94 / 0.8);
1014
- }
1015
- .text-muted {
1016
- --tw-text-opacity: 1;
1017
- color: rgb(136 136 136 / var(--tw-text-opacity, 1));
1018
- }
1019
- .text-muted\/50 {
1020
- color: rgb(136 136 136 / 0.5);
1021
- }
1022
- .text-muted\/60 {
1023
- color: rgb(136 136 136 / 0.6);
1024
- }
1025
- .text-purple-400\/80 {
1026
- color: rgb(192 132 252 / 0.8);
1027
- }
1028
- .text-transparent {
1029
- color: transparent;
1030
- }
1031
- .antialiased {
1032
- -webkit-font-smoothing: antialiased;
1033
- -moz-osx-font-smoothing: grayscale;
1034
- }
1035
- .opacity-0 {
1036
- opacity: 0;
1037
- }
1038
- .opacity-40 {
1039
- opacity: 0.4;
1040
- }
1041
- .blur-sm {
1042
- --tw-blur: blur(4px);
1043
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
1044
- }
1045
- .backdrop-blur-xl {
1046
- --tw-backdrop-blur: blur(24px);
1047
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
1048
- }
1049
- .transition-all {
1050
- transition-property: all;
1051
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1052
- transition-duration: 150ms;
1053
- }
1054
- .transition-colors {
1055
- transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
1056
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1057
- transition-duration: 150ms;
1058
- }
1059
- .transition-opacity {
1060
- transition-property: opacity;
1061
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1062
- transition-duration: 150ms;
1063
- }
1064
- .duration-300 {
1065
- transition-duration: 300ms;
1066
- }
1067
-
1068
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');
1069
-
1070
- :root {
1071
- --bg: #0a0a0a;
1072
- --surface: #111111;
1073
- --border: #222222;
1074
- --accent: #ededed;
1075
- --muted: #888888;
1076
- }
1077
-
1078
- * {
1079
- margin: 0;
1080
- padding: 0;
1081
- box-sizing: border-box;
1082
- }
1083
-
1084
- html {
1085
- scroll-behavior: smooth;
1086
- -webkit-font-smoothing: antialiased;
1087
- -moz-osx-font-smoothing: grayscale;
1088
- }
1089
-
1090
- body {
1091
- background: var(--bg);
1092
- color: var(--accent);
1093
- font-family: 'Inter', system-ui, -apple-system, sans-serif;
1094
- }
1095
-
1096
- ::-moz-selection {
1097
- background: rgba(237, 237, 237, 0.15);
1098
- color: #fff;
1099
- }
1100
-
1101
- ::selection {
1102
- background: rgba(237, 237, 237, 0.15);
1103
- color: #fff;
1104
- }
1105
-
1106
- .gradient-border {
1107
- position: relative;
1108
- }
1109
-
1110
- .gradient-border::before {
1111
- content: '';
1112
- position: absolute;
1113
- inset: 0;
1114
- border-radius: inherit;
1115
- padding: 1px;
1116
- background: linear-gradient(135deg, rgba(255,255,255,0.1), rgba(255,255,255,0.02));
1117
- -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
1118
- mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
1119
- -webkit-mask-composite: xor;
1120
- mask-composite: exclude;
1121
- pointer-events: none;
1122
- }
1123
-
1124
- .terminal-glow {
1125
- box-shadow: 0 0 60px -12px rgba(100, 255, 150, 0.08),
1126
- 0 0 120px -20px rgba(100, 255, 150, 0.04);
1127
- }
1128
-
1129
- .grid-bg {
1130
- background-image:
1131
- linear-gradient(rgba(255,255,255,0.02) 1px, transparent 1px),
1132
- linear-gradient(90deg, rgba(255,255,255,0.02) 1px, transparent 1px);
1133
- background-size: 60px 60px;
1134
- }
1135
-
1136
- .noise-overlay {
1137
- position: fixed;
1138
- inset: 0;
1139
- z-index: 50;
1140
- pointer-events: none;
1141
- opacity: 0.015;
1142
- background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
1143
- }
1144
-
1145
- .hover\:border-border-light:hover {
1146
- --tw-border-opacity: 1;
1147
- border-color: rgb(51 51 51 / var(--tw-border-opacity, 1));
1148
- }
1149
-
1150
- .hover\:bg-surface:hover {
1151
- --tw-bg-opacity: 1;
1152
- background-color: rgb(17 17 17 / var(--tw-bg-opacity, 1));
1153
- }
1154
-
1155
- .hover\:bg-surface-hover:hover {
1156
- --tw-bg-opacity: 1;
1157
- background-color: rgb(26 26 26 / var(--tw-bg-opacity, 1));
1158
- }
1159
-
1160
- .hover\:bg-white:hover {
1161
- --tw-bg-opacity: 1;
1162
- background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
1163
- }
1164
-
1165
- .hover\:text-accent:hover {
1166
- --tw-text-opacity: 1;
1167
- color: rgb(237 237 237 / var(--tw-text-opacity, 1));
1168
- }
1169
-
1170
- .hover\:opacity-80:hover {
1171
- opacity: 0.8;
1172
- }
1173
-
1174
- .group:hover .group-hover\:opacity-100 {
1175
- opacity: 1;
1176
- }
1177
-
1178
- @media (min-width: 640px) {
1179
-
1180
- .sm\:flex-row {
1181
- flex-direction: row;
1182
- }
1183
- }
1184
-
1185
- @media (min-width: 768px) {
1186
-
1187
- .md\:block {
1188
- display: block;
1189
- }
1190
-
1191
- .md\:grid-cols-2 {
1192
- grid-template-columns: repeat(2, minmax(0, 1fr));
1193
- }
1194
-
1195
- .md\:grid-cols-3 {
1196
- grid-template-columns: repeat(3, minmax(0, 1fr));
1197
- }
1198
-
1199
- .md\:grid-cols-4 {
1200
- grid-template-columns: repeat(4, minmax(0, 1fr));
1201
- }
1202
-
1203
- .md\:grid-cols-5 {
1204
- grid-template-columns: repeat(5, minmax(0, 1fr));
1205
- }
1206
-
1207
- .md\:flex-row {
1208
- flex-direction: row;
1209
- }
1210
-
1211
- .md\:text-5xl {
1212
- font-size: 3rem;
1213
- line-height: 1;
1214
- }
1215
-
1216
- .md\:text-8xl {
1217
- font-size: 6rem;
1218
- line-height: 1;
1219
- }
1220
-
1221
- .md\:text-xl {
1222
- font-size: 1.25rem;
1223
- line-height: 1.75rem;
1224
- }
1225
- }
1226
-
1227
- @media (min-width: 1024px) {
1228
-
1229
- .lg\:grid-cols-2 {
1230
- grid-template-columns: repeat(2, minmax(0, 1fr));
1231
- }
1232
-
1233
- .lg\:grid-cols-3 {
1234
- grid-template-columns: repeat(3, minmax(0, 1fr));
1235
- }
1236
- }
1237
-