solforge 0.2.4 → 0.2.5

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 (42) hide show
  1. package/README.md +471 -79
  2. package/cli.cjs +106 -78
  3. package/package.json +1 -1
  4. package/scripts/install.sh +1 -1
  5. package/scripts/postinstall.cjs +66 -58
  6. package/server/methods/program/get-token-accounts-by-owner.ts +7 -2
  7. package/server/ws-server.ts +4 -1
  8. package/src/api-server-entry.ts +91 -91
  9. package/src/cli/commands/rpc-start.ts +4 -1
  10. package/src/cli/main.ts +7 -3
  11. package/src/cli/run-solforge.ts +20 -6
  12. package/src/commands/add-program.ts +324 -328
  13. package/src/commands/init.ts +106 -106
  14. package/src/commands/list.ts +125 -125
  15. package/src/commands/mint.ts +246 -246
  16. package/src/commands/start.ts +834 -831
  17. package/src/commands/status.ts +80 -80
  18. package/src/commands/stop.ts +381 -382
  19. package/src/config/manager.ts +149 -149
  20. package/src/gui/public/app.css +1556 -1
  21. package/src/gui/public/build/main.css +1569 -1
  22. package/src/gui/server.ts +20 -21
  23. package/src/gui/src/app.tsx +56 -37
  24. package/src/gui/src/components/airdrop-mint-form.tsx +17 -11
  25. package/src/gui/src/components/clone-program-modal.tsx +6 -6
  26. package/src/gui/src/components/clone-token-modal.tsx +7 -7
  27. package/src/gui/src/components/modal.tsx +13 -11
  28. package/src/gui/src/components/programs-panel.tsx +27 -15
  29. package/src/gui/src/components/status-panel.tsx +31 -17
  30. package/src/gui/src/components/tokens-panel.tsx +25 -19
  31. package/src/gui/src/index.css +491 -463
  32. package/src/index.ts +161 -146
  33. package/src/rpc/start.ts +1 -1
  34. package/src/services/api-server.ts +470 -473
  35. package/src/services/port-manager.ts +167 -167
  36. package/src/services/process-registry.ts +143 -143
  37. package/src/services/program-cloner.ts +312 -312
  38. package/src/services/token-cloner.ts +799 -797
  39. package/src/services/validator.ts +288 -288
  40. package/src/types/config.ts +71 -71
  41. package/src/utils/shell.ts +75 -75
  42. package/src/utils/token-loader.ts +77 -77
@@ -1 +1,1556 @@
1
- *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.glass-panel{border-radius:1rem;border-width:1px;background:linear-gradient(135deg,hsla(0,0%,100%,.03),hsla(0,0%,100%,.01));border-color:var(--color-border-default);backdrop-filter:blur(20px);box-shadow:var(--shadow-xl),inset 0 1px 0 0 hsla(0,0%,100%,.05);transition:var(--transition-base)}.glass-panel:hover{border-color:var(--color-border-strong);box-shadow:var(--shadow-2xl),var(--shadow-glow),inset 0 1px 0 0 hsla(0,0%,100%,.08)}.card{border-radius:.75rem;padding:1.5rem;background:var(--color-bg-surface);border:1px solid var(--color-border-subtle);transition:var(--transition-smooth);animation:fadeIn .5s ease-out}.card:hover{background:var(--color-bg-elevated);border-color:var(--color-border-default);transform:translateY(-2px);box-shadow:var(--shadow-lg)}.btn-primary{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;border-radius:.75rem;padding:.625rem 1.25rem;font-weight:500;transition:var(--transition-base);position:relative;overflow:hidden;text-transform:none;letter-spacing:.01em;background:linear-gradient(135deg,var(--color-accent-primary),var(--color-accent-secondary));color:#fff;box-shadow:0 4px 15px rgba(139,92,246,.3)}.btn-primary:hover{box-shadow:0 6px 25px rgba(139,92,246,.5);transform:translateY(-2px)}.btn-primary:active{transform:translateY(0)}.btn-secondary{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;border-radius:.75rem;padding:.625rem 1.25rem;font-weight:500;transition:var(--transition-base);position:relative;overflow:hidden;text-transform:none;letter-spacing:.01em;background:var(--color-bg-elevated);color:var(--color-text-primary);border:1px solid var(--color-border-default)}.btn-secondary:hover{background:var(--color-bg-hover);border-color:var(--color-accent-primary);box-shadow:inset 0 0 0 1px var(--color-accent-primary)}.btn-icon{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:12px;background:var(--color-bg-elevated);border:1px solid var(--color-border-subtle);color:var(--color-text-secondary);transition:var(--transition-base)}.btn-icon:hover{background:var(--color-bg-hover);color:var(--color-accent-primary);border-color:var(--color-accent-primary);transform:scale(1.05)}.\!input,.input{width:100%;border-radius:.75rem;padding:.75rem 1rem;font-size:.875rem;line-height:1.25rem}.\!input{background:var(--color-bg-surface)!important;border:1px solid var(--color-border-subtle)!important;color:var(--color-text-primary)!important;transition:var(--transition-base)!important;font-family:Inter,sans-serif!important}.input{background:var(--color-bg-surface);border:1px solid var(--color-border-subtle);color:var(--color-text-primary);transition:var(--transition-base);font-family:Inter,sans-serif}.\!input:hover{background:var(--color-bg-elevated)!important;border-color:var(--color-border-default)!important}.input:hover{background:var(--color-bg-elevated);border-color:var(--color-border-default)}.\!input:focus{outline:none!important;border-color:var(--color-accent-primary)!important;box-shadow:0 0 0 3px var(--color-accent-glow)!important;background:var(--color-bg-elevated)!important}.input:focus{outline:none;border-color:var(--color-accent-primary);box-shadow:0 0 0 3px var(--color-accent-glow);background:var(--color-bg-elevated)}.\!input::-moz-placeholder{color:var(--color-text-muted)!important}.\!input::placeholder{color:var(--color-text-muted)!important}.input::-moz-placeholder{color:var(--color-text-muted)}.input::placeholder{color:var(--color-text-muted)}.select{width:100%;border-radius:.75rem;padding:.75rem 1rem;font-size:.875rem;line-height:1.25rem;background:var(--color-bg-surface);border:1px solid var(--color-border-subtle);color:var(--color-text-primary);transition:var(--transition-base);font-family:Inter,sans-serif}.select:hover{border-color:var(--color-border-default)}.select:focus,.select:hover{background:var(--color-bg-elevated)}.select:focus{outline:none;border-color:var(--color-accent-primary);box-shadow:0 0 0 3px var(--color-accent-glow)}.select::-moz-placeholder{color:var(--color-text-muted)}.select::placeholder{color:var(--color-text-muted)}.select{cursor:pointer;padding-right:40px;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");background-repeat:no-repeat;background-position:right 12px center;background-size:20px}.checkbox{height:1.25rem;width:1.25rem;border-radius:.375rem;background:var(--color-bg-surface);border:1px solid var(--color-border-default);cursor:pointer;transition:var(--transition-base)}.checkbox:checked{background:linear-gradient(135deg,var(--color-accent-primary),var(--color-accent-secondary));border-color:var(--color-accent-primary)}.checkbox:focus{outline:none;box-shadow:0 0 0 3px var(--color-accent-glow)}.table-modern{width:100%;border-collapse:separate;border-spacing:0}.table-modern thead{background:var(--color-bg-surface)}.table-modern th{text-align:left;font-size:.75rem;line-height:1rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-tertiary)}.table-modern td,.table-modern th{padding:.75rem 1rem;border-bottom:1px solid var(--color-border-subtle)}.table-modern td{font-size:.875rem;line-height:1.25rem;color:var(--color-text-primary)}.table-modern tbody tr{transition:var(--transition-base)}.badge,.table-modern tbody tr:hover{background:var(--color-bg-elevated)}.badge{display:inline-flex;align-items:center;gap:.375rem;border-radius:9999px;padding:.25rem .75rem;font-size:.75rem;line-height:1rem;font-weight:500;color:var(--color-text-secondary);border:1px solid var(--color-border-subtle)}.badge-success{background:rgba(16,185,129,.1);color:#10b981;border-color:rgba(16,185,129,.2)}.badge-warning{background:rgba(245,158,11,.1);color:#f59e0b;border-color:rgba(245,158,11,.2)}.badge-info{background:rgba(59,130,246,.1);color:#3b82f6;border-color:rgba(59,130,246,.2)}.spinner{border:3px solid var(--color-border-subtle);border-top-color:var(--color-accent-primary);border-radius:50%;width:20px;height:20px;animation:spin 1s linear infinite}.tooltip.show{opacity:1}.status-dot{display:inline-block;height:.5rem;width:.5rem;border-radius:9999px;animation:pulse 2s infinite}.status-dot.online{background:var(--color-success);box-shadow:0 0 8px var(--color-success)}.status-dot.offline{background:var(--color-text-muted)}.status-dot.error{background:var(--color-error);box-shadow:0 0 8px var(--color-error)}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.left-0{left:0}.left-3{left:.75rem}.left-4{left:1rem}.top-0{top:0}.top-1\/2{top:50%}.top-4{top:1rem}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-8{margin-left:2rem}.mr-1{margin-right:.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-6{margin-top:1.5rem}.block{display:block}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-full{height:100%}.max-h-\[60vh\]{max-height:60vh}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-5{width:1.25rem}.w-72{width:18rem}.w-full{width:100%}.max-w-7xl{max-width:80rem}.max-w-lg{max-width:32rem}.flex-1{flex:1 1 0%}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.-translate-y-1\/2{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))}.-translate-y-1\/2{--tw-translate-y:-50%}.translate-x-0{--tw-translate-x:0px}.transform,.translate-x-0{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))}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.scroll-mt-24{scroll-margin-top:6rem}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem*var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem*var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.break-all{word-break:break-all}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-none{border-radius:0}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-green-500\/30{border-color:rgba(34,197,94,.3)}.border-purple-500\/30{border-color:rgba(168,85,247,.3)}.border-red-500\/30{border-color:rgba(239,68,68,.3)}.border-white\/10{border-color:hsla(0,0%,100%,.1)}.border-white\/20{border-color:hsla(0,0%,100%,.2)}.border-white\/5{border-color:hsla(0,0%,100%,.05)}.bg-black\/50{background-color:rgba(0,0,0,.5)}.bg-black\/80{background-color:rgba(0,0,0,.8)}.bg-gray-900\/95{background-color:rgba(17,24,39,.95)}.bg-green-500\/10{background-color:rgba(34,197,94,.1)}.bg-red-500\/10{background-color:rgba(239,68,68,.1)}.bg-white\/5{background-color:hsla(0,0%,100%,.05)}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-amber-500\/20{--tw-gradient-from:rgba(245,158,11,.2) var(--tw-gradient-from-position);--tw-gradient-to:rgba(245,158,11,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-amber-600\/20{--tw-gradient-from:rgba(217,119,6,.2) var(--tw-gradient-from-position);--tw-gradient-to:rgba(217,119,6,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-blue-500\/20{--tw-gradient-from:rgba(59,130,246,.2) var(--tw-gradient-from-position);--tw-gradient-to:rgba(59,130,246,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-blue-600\/20{--tw-gradient-from:rgba(37,99,235,.2) var(--tw-gradient-from-position);--tw-gradient-to:rgba(37,99,235,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-gray-600\/20{--tw-gradient-from:rgba(75,85,99,.2) var(--tw-gradient-from-position);--tw-gradient-to:rgba(75,85,99,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-green-500\/20{--tw-gradient-from:rgba(34,197,94,.2) var(--tw-gradient-from-position);--tw-gradient-to:rgba(34,197,94,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-purple-400{--tw-gradient-from:#c084fc var(--tw-gradient-from-position);--tw-gradient-to:rgba(192,132,252,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-purple-500\/20{--tw-gradient-from:rgba(168,85,247,.2) var(--tw-gradient-from-position);--tw-gradient-to:rgba(168,85,247,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-purple-600{--tw-gradient-from:#9333ea var(--tw-gradient-from-position);--tw-gradient-to:rgba(147,51,234,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-purple-600\/20{--tw-gradient-from:rgba(147,51,234,.2) var(--tw-gradient-from-position);--tw-gradient-to:rgba(147,51,234,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-red-500\/10{--tw-gradient-from:rgba(239,68,68,.1) var(--tw-gradient-from-position);--tw-gradient-to:rgba(239,68,68,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-violet-500\/20{--tw-gradient-from:rgba(139,92,246,.2) var(--tw-gradient-from-position);--tw-gradient-to:rgba(139,92,246,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-white\/5{--tw-gradient-from:hsla(0,0%,100%,.05) var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-cyan-500\/20{--tw-gradient-to:rgba(6,182,212,.2) var(--tw-gradient-to-position)}.to-cyan-600\/20{--tw-gradient-to:rgba(8,145,178,.2) var(--tw-gradient-to-position)}.to-emerald-500\/20{--tw-gradient-to:rgba(16,185,129,.2) var(--tw-gradient-to-position)}.to-gray-700\/20{--tw-gradient-to:rgba(55,65,81,.2) var(--tw-gradient-to-position)}.to-orange-500\/20{--tw-gradient-to:rgba(249,115,22,.2) var(--tw-gradient-to-position)}.to-orange-600\/20{--tw-gradient-to:rgba(234,88,12,.2) var(--tw-gradient-to-position)}.to-pink-500\/10{--tw-gradient-to:rgba(236,72,153,.1) var(--tw-gradient-to-position)}.to-purple-500\/20{--tw-gradient-to:rgba(168,85,247,.2) var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.to-violet-400{--tw-gradient-to:#a78bfa var(--tw-gradient-to-position)}.to-violet-500\/20{--tw-gradient-to:rgba(139,92,246,.2) var(--tw-gradient-to-position)}.to-violet-600{--tw-gradient-to:#7c3aed var(--tw-gradient-to-position)}.to-violet-600\/20{--tw-gradient-to:rgba(124,58,237,.2) var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.p-0{padding:0}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pl-10{padding-left:2.5rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tracking-wider{letter-spacing:.05em}.text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity,1))}.text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity,1))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.text-transparent{color:transparent}.text-violet-300{--tw-text-opacity:1;color:rgb(196 181 253/var(--tw-text-opacity,1))}.text-violet-400{--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.opacity-50{opacity:.5}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-2xl,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.backdrop-blur-sm,.backdrop-blur-xl{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)}.backdrop-blur-xl{--tw-backdrop-blur:blur(24px)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}:root{color-scheme:dark;--color-bg-base:#0a0a0f;--color-bg-surface:#12121a;--color-bg-elevated:#1a1a24;--color-bg-hover:#22222e;--color-bg-active:#2a2a38;--color-accent-primary:#8b5cf6;--color-accent-secondary:#a78bfa;--color-accent-tertiary:#c4b5fd;--color-accent-glow:rgba(139,92,246,.4);--color-success:#10b981;--color-warning:#f59e0b;--color-error:#ef4444;--color-info:#3b82f6;--color-text-primary:#f3f4f6;--color-text-secondary:#9ca3af;--color-text-tertiary:#6b7280;--color-text-muted:#4b5563;--color-border-subtle:hsla(0,0%,100%,.06);--color-border-default:hsla(0,0%,100%,.1);--color-border-strong:hsla(0,0%,100%,.15);--shadow-sm:0 1px 2px 0 rgba(0,0,0,.05);--shadow-md:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--shadow-lg:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--shadow-xl:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--shadow-2xl:0 25px 50px -12px rgba(0,0,0,.25);--shadow-glow:0 0 50px rgba(139,92,246,.3);--transition-base:all 0.2s cubic-bezier(0.4,0,0.2,1);--transition-smooth:all 0.3s cubic-bezier(0.4,0,0.2,1);--transition-spring:all 0.5s cubic-bezier(0.68,-0.55,0.265,1.55)}*{box-sizing:border-box;margin:0;padding:0}html{font-family:Inter,system-ui,-apple-system,sans-serif;font-feature-settings:"cv11","ss01";font-variation-settings:"opsz" 32;scroll-behavior:smooth}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--color-bg-base);color:var(--color-text-primary);min-height:100vh;position:relative;overflow-x:hidden}body:before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;background:radial-gradient(ellipse at top left,rgba(139,92,246,.15) 0,transparent 50%),radial-gradient(ellipse at bottom right,rgba(167,139,250,.1) 0,transparent 50%);pointer-events:none;z-index:0}#root{position:relative;z-index:1}::-webkit-scrollbar{width:12px;height:12px}::-webkit-scrollbar-track{background:var(--color-bg-surface);border-radius:6px}::-webkit-scrollbar-thumb{background:linear-gradient(180deg,var(--color-accent-primary),var(--color-accent-secondary));border-radius:6px;border:2px solid var(--color-bg-surface)}::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,var(--color-accent-secondary),var(--color-accent-tertiary))}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes slideIn{0%{opacity:0;transform:translateX(-20px)}to{opacity:1;transform:translateX(0)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}@keyframes glow{0%,to{box-shadow:0 0 20px rgba(139,92,246,.5),inset 0 0 20px rgba(139,92,246,.1)}50%{box-shadow:0 0 40px rgba(139,92,246,.8),inset 0 0 30px rgba(139,92,246,.2)}}.text-mono{font-family:JetBrains Mono,monospace}:focus-visible{outline:2px solid var(--color-accent-primary);outline-offset:2px}::-moz-selection{background:var(--color-accent-primary);color:#fff}::selection{background:var(--color-accent-primary);color:#fff}.hover\:scale-\[1\.02\]:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;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))}.hover\:border-red-500\/30:hover{border-color:rgba(239,68,68,.3)}.hover\:bg-red-500\/20:hover{background-color:rgba(239,68,68,.2)}.hover\:bg-white\/5:hover{background-color:hsla(0,0%,100%,.05)}.hover\:text-red-300:hover{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.group:hover .group-hover\:scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1;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))}.group:hover .group-hover\:text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\:flex-initial{flex:0 1 auto}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}}@media (min-width:768px){.md\:block{display:block}.md\:hidden{display:none}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:p-8{padding:2rem}}@media (min-width:1024px){.lg\:ml-72{margin-left:18rem}.lg\:hidden{display:none}.lg\:translate-x-0{--tw-translate-x:0px;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))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}}
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) !important;
446
+ border: 1px solid var(--color-border-subtle) !important;
447
+ color: var(--color-text-primary) !important;
448
+ transition: var(--transition-base) !important;
449
+ font-family: Inter, sans-serif !important;
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) !important;
460
+ border-color: var(--color-border-default) !important;
461
+ }
462
+ .input:hover {
463
+ background: var(--color-bg-elevated);
464
+ border-color: var(--color-border-default);
465
+ }
466
+ .\!input:focus {
467
+ outline: none !important;
468
+ border-color: var(--color-accent-primary) !important;
469
+ box-shadow: 0 0 0 3px var(--color-accent-glow) !important;
470
+ background: var(--color-bg-elevated) !important;
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) !important;
480
+ }
481
+ .\!input::placeholder {
482
+ color: var(--color-text-muted) !important;
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
+ }