@zenith-open/zenithcms-admin 1.0.0-beta.1
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.
- package/LICENSE +21 -0
- package/README.md +43 -0
- package/dist/assets/ApiExplorerPage-UJpoKRI0.js +42 -0
- package/dist/assets/ApiExplorerPage-UJpoKRI0.js.map +1 -0
- package/dist/assets/AuditLogPage-8xYlRl1I.js +1 -0
- package/dist/assets/AuditLogPage-8xYlRl1I.js.map +1 -0
- package/dist/assets/BlockBuilderPage-DcOo3Vnt.js +1 -0
- package/dist/assets/BlockBuilderPage-DcOo3Vnt.js.map +1 -0
- package/dist/assets/BuilderPage-Iu8F_bN1.js +1 -0
- package/dist/assets/BuilderPage-Iu8F_bN1.js.map +1 -0
- package/dist/assets/CollectionHooksPage-Dn_ujtlp.js +7 -0
- package/dist/assets/CollectionHooksPage-Dn_ujtlp.js.map +1 -0
- package/dist/assets/CollectionsPage-BSPHf7H2.js +1 -0
- package/dist/assets/CollectionsPage-BSPHf7H2.js.map +1 -0
- package/dist/assets/ComponentBuilderPage-CT6S12LA.js +14 -0
- package/dist/assets/ComponentBuilderPage-CT6S12LA.js.map +1 -0
- package/dist/assets/DashboardBuilder-Cbi9Ddiu.js +1 -0
- package/dist/assets/DashboardBuilder-Cbi9Ddiu.js.map +1 -0
- package/dist/assets/EmptyState-X_SXKpQY.js +1 -0
- package/dist/assets/EmptyState-X_SXKpQY.js.map +1 -0
- package/dist/assets/MediaLibrary-BzXE95xo.js +1 -0
- package/dist/assets/MediaLibrary-BzXE95xo.js.map +1 -0
- package/dist/assets/PluginsPage-5YRpbP-N.js +10 -0
- package/dist/assets/PluginsPage-5YRpbP-N.js.map +1 -0
- package/dist/assets/RedirectsPage-D_4jAdaI.js +1 -0
- package/dist/assets/RedirectsPage-D_4jAdaI.js.map +1 -0
- package/dist/assets/SchemaBuilderPage-EFA5XIAa.js +14 -0
- package/dist/assets/SchemaBuilderPage-EFA5XIAa.js.map +1 -0
- package/dist/assets/SettingsPage-BRpcMw48.js +33 -0
- package/dist/assets/SettingsPage-BRpcMw48.js.map +1 -0
- package/dist/assets/SetupWizard-D57HIkrs.js +62 -0
- package/dist/assets/SetupWizard-D57HIkrs.js.map +1 -0
- package/dist/assets/SpatialEditor-CPgS7Zrd.js +3 -0
- package/dist/assets/SpatialEditor-CPgS7Zrd.js.map +1 -0
- package/dist/assets/TemplatesPage-B-nNYv3o.js +1 -0
- package/dist/assets/TemplatesPage-B-nNYv3o.js.map +1 -0
- package/dist/assets/TrashPage-Ccusal1w.js +1 -0
- package/dist/assets/TrashPage-Ccusal1w.js.map +1 -0
- package/dist/assets/index-ChcKY5Xe.js +11 -0
- package/dist/assets/index-ChcKY5Xe.js.map +1 -0
- package/dist/assets/index-CxhwdV2K.css +1 -0
- package/dist/assets/login-bg.png +0 -0
- package/dist/assets/rolldown-runtime-CNC7AqOf.js +1 -0
- package/dist/assets/useUnsavedGuard-CMMKQT9a.js +1 -0
- package/dist/assets/useUnsavedGuard-CMMKQT9a.js.map +1 -0
- package/dist/assets/utils-fgvbH6CB.js +1 -0
- package/dist/assets/utils-fgvbH6CB.js.map +1 -0
- package/dist/assets/vendor-C-9IqjvY.js +1 -0
- package/dist/assets/vendor-C-9IqjvY.js.map +1 -0
- package/dist/assets/vendor-forms-BnBLxarY.js +1 -0
- package/dist/assets/vendor-forms-BnBLxarY.js.map +1 -0
- package/dist/assets/vendor-react-DQVTOTFO.js +195 -0
- package/dist/assets/vendor-react-DQVTOTFO.js.map +1 -0
- package/dist/favicon.svg +1 -0
- package/dist/icons.svg +24 -0
- package/dist/index.html +30 -0
- package/dist/logo/zenith.svg +9 -0
- package/dist/sw.js +3 -0
- package/dist/sw.js.map +1 -0
- package/dist/workbox-9c191d2f.js +3 -0
- package/dist/workbox-9c191d2f.js.map +1 -0
- package/dist/zenith.svg +9 -0
- package/package.json +60 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import "https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500;700&display=swap";*,:before,:after,::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:#3b82f680;--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: }*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--brand-font,"Inter"), 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{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){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,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family: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:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-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,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--z-bg-base:#000;--z-bg-sidebar:#0a0a0a;--z-bg-header:#0a0a0af2;--z-bg-panel:#0a0a0a;--z-bg-input:#000;--z-bg-hover:#171717;--z-bg-popover:#171717;--z-bg-tooltip:#262626;--z-bg-modal:#000000d9;--z-bg-row-hover:#111;--z-bg-selected:#10b98126;--z-bg-code:#050505;--z-border:#262626;--z-border-strong:#404040;--z-border-focus:#10b981;--z-border-input:#333;--z-text-primary:#fff;--z-text-secondary:#a3a3a3;--z-text-muted:#737373;--z-text-inverse:#000;--z-sidebar-text:#a3a3a3;--z-sidebar-text-hover:#fff;--z-scrollbar:#262626;--z-scrollbar-hover:#404040;--z-accent:#10b981;--z-accent-hsl:160 84% 39%;--z-active-bg:#10b981;--z-active-border:#059669;--z-active-text:#fff;--z-active-glow:0 0 0 2px #10b9814d;--z-logo-bg:var(--z-accent);--z-logo-text:#fff;--bg-app-rgb:0 0 0;--bg-surface-rgb:10 10 10;--bg-subtle-rgb:23 23 23;--text-primary-rgb:255 255 255;--text-secondary-rgb:163 163 163;--text-muted-rgb:115 115 115;--border-rgb:38 38 38;--bg-app:var(--z-bg-base);--bg-surface:var(--z-bg-panel);--bg-subtle:var(--z-bg-hover);--text-primary:var(--z-text-primary);--text-secondary:var(--z-text-secondary);--text-muted:var(--z-text-muted);--border:var(--z-border);--border-strong:var(--z-border-strong);--glass-bg:var(--z-bg-panel);--glass-border:var(--z-border);--glass-blur:0px;--shadow-premium:0 4px 6px -1px #00000080, 0 2px 4px -1px #0000004d;--status-green:#10b981;--status-red:#ef4444;--status-orange:#f59e0b;--status-blue:#3b82f6;--color-crimson-red:#ef4444}html.dark .bg-z-panel,html.dark .bg-surface,html.dark .bg-z-input{-webkit-backdrop-filter:blur(12px)!important;background-color:#000000a6!important;border-color:#ffffff14!important;box-shadow:0 4px 30px #0000001a!important}.light{--z-bg-base:#f9fafb;--z-bg-sidebar:#fff;--z-bg-header:#fffffff2;--z-bg-panel:#fff;--z-bg-input:#fff;--z-bg-hover:#0000000f;--z-bg-popover:#fff;--z-bg-tooltip:#18181b;--z-bg-modal:#0006;--z-bg-row-hover:#0000000a;--z-bg-selected:#10b9811f;--z-bg-code:#f4f4f5;--z-border:#0000001a;--z-border-strong:#000c;--z-border-focus:#10b981;--z-border-input:#0003;--z-text-primary:#111827;--z-text-secondary:#4b5563;--z-text-muted:#6b7280;--z-text-inverse:#fff;--z-sidebar-text:#52525b;--z-sidebar-text-hover:#09090b;--z-scrollbar:#00000026;--z-scrollbar-hover:#00000040;--z-accent:#059669;--z-accent-hsl:160 84% 39%;--z-active-bg:#111827;--z-active-border:#111827;--z-active-text:#fff;--z-active-glow:0 4px 12px #00000026;--z-logo-bg:var(--z-accent);--z-logo-text:#fff;--bg-app:var(--z-bg-base);--bg-surface:var(--z-bg-panel);--bg-subtle:var(--z-bg-hover);--text-primary:var(--z-text-primary);--text-secondary:var(--z-text-secondary);--text-muted:var(--z-text-muted);--border:var(--z-border);--border-strong:var(--z-border-strong);--glass-bg:var(--z-bg-panel);--glass-border:var(--z-border);--glass-blur:12px;--shadow-premium:0 4px 20px 0 #00000008;--status-green:#059669;--status-red:#ef4444;--status-orange:#d97706;--status-blue:#2563eb;--color-crimson-red:#ef4444;--bg-app-rgb:249 250 251;--bg-surface-rgb:255 255 255;--bg-subtle-rgb:0 0 0;--text-primary-rgb:17 24 39;--text-secondary-rgb:75 85 99;--text-muted-rgb:156 163 175;--border-rgb:0 0 0}*{border-color:var(--z-border);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}::selection{background-color:var(--z-accent,#8b5cf6)!important;color:#fff!important}::-moz-selection{background-color:var(--z-accent,#8b5cf6)!important;color:#fff!important}html,body{background-color:var(--bg-app);width:100vw;height:100vh;margin:0;padding:0;overflow:hidden}#root{background-color:var(--bg-app);flex-direction:column;width:100%;height:100%;display:flex}body{--tw-bg-opacity:1;background-color:rgb(var(--bg-app-rgb) / var(--tw-bg-opacity,1));font-family:var(--brand-font,"Inter"), ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;--tw-text-opacity:1;color:rgb(var(--text-primary-rgb) / var(--tw-text-opacity,1));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;letter-spacing:.02em;font-family:Outfit,sans-serif;font-size:15px;line-height:1.6;overflow-x:hidden}button,input,select,textarea,.z-card,label:has(input[type=file]),a[role=button]{border-style:solid;border-width:1px;border-color:var(--z-border);border-radius:0;transition:all .2s cubic-bezier(.4,0,.2,1);box-shadow:0 1px 2px #0000000d}input,select,textarea{background-color:var(--z-bg-input);color:var(--z-text-primary)}input:focus,select:focus,textarea:focus{border-color:var(--z-border-focus);box-shadow:0 0 0 1px var(--z-border-focus);outline:none}button:not(:disabled):hover,label:has(input[type=file]):hover,a[role=button]:hover{background-color:var(--z-bg-hover);border-color:var(--z-border-strong);box-shadow:0 4px 6px -1px #0000001a}.light button:not(:disabled):not([class*=bg-z-accent]):not([class*=bg-z-active]):hover,.light label:has(input[type=file]):hover,.light a[role=button]:hover{color:#fff!important;background-color:#111827!important;border-color:#000!important}button:not(:disabled):active,label:has(input[type=file]):active,a[role=button]:active{box-shadow:none;transform:scale(.96)translateY(1px)}button:disabled,a[role=button][aria-disabled=true]{opacity:.4;cursor:not-allowed;border-color:var(--z-border);filter:grayscale()}button[class*=bg-z-accent]:not(:disabled):hover,button[class*=bg-z-active]:not(:disabled):hover,label:has(input[type=file])[class*=bg-z-accent]:hover{filter:brightness(1.1)}.z-card{background:var(--z-bg-panel);-webkit-backdrop-filter:blur(12px);border:1px solid var(--z-border);border-radius:0;transition:background .3s,border-color .3s;box-shadow:0 4px 30px #0000001a}.z-card-interactive{cursor:pointer;transition:transform .15s,border-color .2s,box-shadow .2s}.z-card-interactive:hover{border-color:var(--z-active-border);box-shadow:var(--z-active-glow);transform:scale(1.01)}.z-input{background:var(--z-bg-input);border:1px solid var(--z-border-input);color:var(--z-text-primary);outline:none;transition:border-color .2s,box-shadow .2s}.z-input::placeholder{color:var(--z-text-muted)}.z-input:focus{border-color:var(--z-active-border);box-shadow:0 0 0 3px var(--z-active-bg)}.z-panel{background:var(--z-bg-panel);border:1px solid var(--z-border)}[data-design-style=classic] .z-card,[data-design-style=classic] .z-sidebar,[data-design-style=classic] .z-header,[data-design-style=classic] .glass,[data-design-style=classic] .card{-webkit-backdrop-filter:none}[data-design-style=classic] .z-card,[data-design-style=classic] .glass,[data-design-style=classic] .card{border-radius:4px;box-shadow:0 1px 3px #0000001a,0 1px 2px #0000000f}[data-design-style=classic] .z-card-interactive:hover,[data-design-style=classic] .card-interactive:hover{transform:translateY(-1px);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.card{background-color:var(--z-bg-panel);-webkit-backdrop-filter:blur(12px);border:1px solid var(--z-border);border-radius:0;transition:all .4s cubic-bezier(.16,1,.3,1);overflow:hidden;box-shadow:0 4px 30px #0000001a}.btn-primary{border-width:1px;border-color:var(--z-active-border);background-color:var(--z-accent);--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1));box-shadow:var(--shadow-premium);border-radius:16px;justify-content:center;align-items:center;gap:.5rem;padding:.625rem 1.5rem;font-size:14px;font-weight:700;transition-property:all;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1);display:flex}.btn-primary:hover{--tw-brightness:brightness(1.1);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)}.btn-primary:active{--tw-scale-x:.95;--tw-scale-y:.95;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))}table{border-collapse:separate;--tw-border-spacing-x:0px;--tw-border-spacing-y:0px;width:100%;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y);text-align:left}th{--tw-border-opacity:1;border-bottom-width:1px;border-color:rgb(var(--border-rgb) / var(--tw-border-opacity,1));text-transform:uppercase;letter-spacing:.2em;--tw-text-opacity:1;color:rgb(var(--text-secondary-rgb) / var(--tw-text-opacity,1));padding:1rem 1.5rem;font-size:11px;font-weight:900}td{--tw-border-opacity:1;border-bottom-width:1px;border-color:rgb(var(--border-rgb) / var(--tw-border-opacity,1));padding:1.25rem 1.5rem;font-size:14px;font-weight:500;transition-property:all;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1)}tr:hover td{background-color:var(--z-bg-row-hover)}h1{letter-spacing:-.025em;--tw-text-opacity:1;color:rgb(var(--text-primary-rgb) / var(--tw-text-opacity,1));font-size:2.25rem;font-weight:900;line-height:2.5rem}h2{letter-spacing:-.025em;--tw-text-opacity:1;color:rgb(var(--text-primary-rgb) / var(--tw-text-opacity,1));font-size:1.875rem;font-weight:900;line-height:2.25rem}h3{letter-spacing:-.025em;--tw-text-opacity:1;color:rgb(var(--text-primary-rgb) / var(--tw-text-opacity,1));font-size:1.5rem;font-weight:700;line-height:2rem}h4{letter-spacing:-.025em;--tw-text-opacity:1;color:rgb(var(--text-primary-rgb) / var(--tw-text-opacity,1));font-size:1.25rem;font-weight:700;line-height:1.75rem}.glass{background-color:var(--z-bg-panel);-webkit-backdrop-filter:blur(12px);border:1px solid var(--z-border);box-shadow:0 4px 30px #0000001a}.text-status-orange{color:var(--status-orange)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background-color:var(--z-scrollbar);background-clip:padding-box;border:2px solid #0000;border-radius:0;transition:background-color .2s}::-webkit-scrollbar-thumb:hover{background-color:var(--z-scrollbar-hover)}[data-design-style=classic] *{-webkit-backdrop-filter:none!important}[data-design-style=classic] .z-card,[data-design-style=classic] .z-panel,[data-design-style=classic] .z-sidebar,[data-design-style=classic] .z-header,[data-design-style=classic] .z-modal,[data-design-style=classic] .z-tooltip,[data-design-style=classic] .z-popover{background-color:var(--z-bg-panel)!important;border-radius:6px!important;box-shadow:0 1px 3px #0000001a,0 1px 2px -1px #0000001a!important}[data-design-style=classic] .z-input{border-radius:4px!important;box-shadow:0 1px 2px #0000000d!important}.dark ::-webkit-scrollbar-thumb{background-color:#8b5cf633;border-radius:0}.dark ::-webkit-scrollbar-thumb:hover{background-color:#8b5cf666}@keyframes fade-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.container{width:100%}@media (width>=640px){.container{max-width:640px}}@media (width>=768px){.container{max-width:768px}}@media (width>=1024px){.container{max-width:1024px}}@media (width>=1280px){.container{max-width:1280px}}@media (width>=1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:#1118271a;--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:#ffffff1a;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-4{inset:1rem}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-bottom-0\.5{bottom:-.125rem}.-bottom-16{bottom:-4rem}.-left-3\.5{left:-.875rem}.-right-0\.5{right:-.125rem}.-right-1\.5{right:-.375rem}.-right-16{right:-4rem}.-top-1\.5{top:-.375rem}.bottom-0{bottom:0}.bottom-2{bottom:.5rem}.bottom-3{bottom:.75rem}.bottom-\[-10\%\]{bottom:-10%}.left-0{left:0}.left-1\.5{left:.375rem}.left-1\/2{left:50%}.left-12{left:3rem}.left-2{left:.5rem}.left-2\.5{left:.625rem}.left-3{left:.75rem}.left-3\.5{left:.875rem}.left-4{left:1rem}.left-\[-10\%\]{left:-10%}.left-\[1\.5px\]{left:1.5px}.left-\[17px\]{left:17px}.left-full{left:100%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.right-6{right:1.5rem}.right-\[-10\%\]{right:-10%}.top-0{top:0}.top-0\.5{top:.125rem}.top-1{top:.25rem}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-2\.5{top:.625rem}.top-3{top:.75rem}.top-4{top:1rem}.top-6{top:1.5rem}.top-\[-10\%\]{top:-10%}.top-\[1\.5px\]{top:1.5px}.top-full{top:100%}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[1000\]{z-index:1000}.z-\[100\]{z-index:100}.z-\[1100\]{z-index:1100}.z-\[110\]{z-index:110}.z-\[120\]{z-index:120}.z-\[2500\]{z-index:2500}.z-\[600\]{z-index:600}.z-\[700\]{z-index:700}.z-\[800\]{z-index:800}.z-\[900\]{z-index:900}.z-\[9999\]{z-index:9999}.z-\[999\]{z-index:999}.z-\[99\]{z-index:99}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-full{grid-column:1/-1}.-m-4{margin:-1rem}.m-0{margin:0}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-1\.5{margin-left:.375rem;margin-right:.375rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-8{margin-top:2rem;margin-bottom:2rem}.my-auto{margin-top:auto;margin-bottom:auto}.-mb-px{margin-bottom:-1px}.-ml-2{margin-left:-.5rem}.-mt-1{margin-top:-.25rem}.-mt-4{margin-top:-1rem}.-mt-6{margin-top:-1.5rem}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-12{margin-bottom:3rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-14{margin-left:3.5rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-8{margin-left:2rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mr-4{margin-right:1rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!block{display:block!important}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-square{aspect-ratio:1}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-2\/3{height:66.6667%}.h-20{height:5rem}.h-24{height:6rem}.h-28{height:7rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-56{height:14rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-\[1px\]{height:1px}.h-\[2px\]{height:2px}.h-\[50\%\]{height:50%}.h-\[70vh\]{height:70vh}.h-\[80vh\]{height:80vh}.h-\[85vh\]{height:85vh}.h-\[calc\(100vh-4rem\)\]{height:calc(100vh - 4rem)}.h-\[calc\(100vh-64px\)\]{height:calc(100vh - 64px)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-32{max-height:8rem}.max-h-40{max-height:10rem}.max-h-48{max-height:12rem}.max-h-56{max-height:14rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.max-h-80{max-height:20rem}.max-h-\[220px\]{max-height:220px}.max-h-\[30vh\]{max-height:30vh}.max-h-\[320px\]{max-height:320px}.max-h-\[400px\]{max-height:400px}.max-h-\[50vh\]{max-height:50vh}.max-h-\[60vh\]{max-height:60vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-full{max-height:100%}.min-h-0{min-height:0}.min-h-16{min-height:4rem}.min-h-64{min-height:16rem}.min-h-\[100px\]{min-height:100px}.min-h-\[120px\]{min-height:120px}.min-h-\[12rem\]{min-height:12rem}.min-h-\[140px\]{min-height:140px}.min-h-\[160px\]{min-height:160px}.min-h-\[180px\]{min-height:180px}.min-h-\[220px\]{min-height:220px}.min-h-\[300px\]{min-height:300px}.min-h-\[320px\]{min-height:320px}.min-h-\[600px\]{min-height:600px}.min-h-\[700px\]{min-height:700px}.min-h-\[80vh\]{min-height:80vh}.min-h-\[calc\(100vh-65px\)\]{min-height:calc(100vh - 65px)}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-1\/3{width:33.3333%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-2\/3{width:66.6667%}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:1rem}.w-40{width:10rem}.w-44{width:11rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-5\/6{width:83.3333%}.w-52{width:13rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[240px\]{width:240px}.w-\[320px\]{width:320px}.w-\[340px\]{width:340px}.w-\[3px\]{width:3px}.w-\[450px\]{width:450px}.w-\[50\%\]{width:50%}.w-\[85vw\]{width:85vw}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0}.min-w-\[110px\]{min-width:110px}.min-w-\[140px\]{min-width:140px}.min-w-\[14px\]{min-width:14px}.min-w-\[160px\]{min-width:160px}.min-w-\[180px\]{min-width:180px}.min-w-\[200px\]{min-width:200px}.min-w-\[3ch\]{min-width:3ch}.min-w-\[80px\]{min-width:80px}.min-w-full{min-width:100%}.min-w-max{min-width:max-content}.max-w-20{max-width:5rem}.max-w-2xl{max-width:42rem}.max-w-32{max-width:8rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[100px\]{max-width:100px}.max-w-\[1100px\]{max-width:1100px}.max-w-\[120px\]{max-width:120px}.max-w-\[1400px\]{max-width:1400px}.max-w-\[140px\]{max-width:140px}.max-w-\[200px\]{max-width:200px}.max-w-\[300px\]{max-width:300px}.max-w-\[400px\]{max-width:400px}.max-w-\[60\%\]{max-width:60%}.max-w-\[90\%\]{max-width:90%}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-screen-2xl{max-width:1536px}.max-w-sm{max-width:24rem}.max-w-xs{max-width:20rem}.flex-1{flex:1}.flex-\[2\]{flex:2}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:-50%;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%;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-2{--tw-translate-y:.5rem;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))}.rotate-180{--tw-rotate:180deg;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))}.rotate-45{--tw-rotate:45deg;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))}.rotate-90{--tw-rotate:90deg;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))}.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))}.scale-75{--tw-scale-x:.75;--tw-scale-y:.75;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))}.scale-\[0\.98\]{--tw-scale-x:.98;--tw-scale-y:.98;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))}.scale-\[1\.005\]{--tw-scale-x:1.005;--tw-scale-y:1.005;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))}.scale-\[1\.02\]{--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))}.transform{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 bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}.animate-bounce{animation:1s infinite bounce}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}.animate-ping{animation:1s cubic-bezier(0,0,.2,1) infinite ping}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:2s cubic-bezier(.4,0,.6,1) infinite pulse}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:1s linear infinite spin}.cursor-col-resize{cursor:col-resize}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.select-none{user-select:none}.select-all{user-select:all}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.appearance-none{appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[1fr_1fr_80px_80px_100px_40px\]{grid-template-columns:1fr 1fr 80px 80px 100px 40px}.grid-cols-\[auto_1fr_100px_100px_100px\]{grid-template-columns:auto 1fr 100px 100px 100px}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-x-8{-moz-column-gap:2rem;column-gap:2rem}.gap-y-2{row-gap:.5rem}.gap-y-3{row-gap:.75rem}.gap-y-4{row-gap:1rem}.gap-y-5{row-gap:1.25rem}.gap-y-6{row-gap:1.5rem}.-space-x-2\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(-.625rem * var(--tw-space-x-reverse));margin-left:calc(-.625rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem * var(--tw-space-y-reverse))}.space-y-12>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(3rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(3rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem * calc(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 * calc(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 * calc(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 * calc(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 * calc(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 * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-z-border>:not([hidden])~:not([hidden]){border-color:var(--z-border)}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.scroll-smooth{scroll-behavior:smooth}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:12px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:16px}.rounded-md{border-radius:12px}.rounded-none{border-radius:0}.rounded-sm{border-radius:8px}.rounded-xl{border-radius:24px}.rounded-b-xl{border-bottom-right-radius:24px;border-bottom-left-radius:24px}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-4{border-width:4px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-t-0{border-top-width:0}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-\[rgba\(0\,112\,186\,0\.3\)\]{border-color:#0070ba4d}.border-\[rgba\(0\,112\,186\,0\.5\)\]{border-color:#0070ba80}.border-\[rgba\(255\,255\,255\,0\.1\)\]{border-color:#ffffff1a}.border-\[rgba\(51\,153\,204\,0\.3\)\]{border-color:#3399cc4d}.border-\[rgba\(51\,153\,204\,0\.5\)\]{border-color:#3399cc80}.border-\[var\(--z-accent\)\]{border-color:var(--z-accent)}.border-\[var\(--z-active-border\)\]{border-color:var(--z-active-border)}.border-\[var\(--z-border-strong\)\]{border-color:var(--z-border-strong)}.border-accent{border-color:var(--z-accent)}.border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}.border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.border-amber-400\/20{border-color:#fbbf2433}.border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1))}.border-amber-500\/10{border-color:#f59e0b1a}.border-amber-500\/20{border-color:#f59e0b33}.border-amber-500\/30{border-color:#f59e0b4d}.border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.border-blue-500\/30{border-color:#3b82f64d}.border-border{--tw-border-opacity:1;border-color:rgb(var(--border-rgb) / var(--tw-border-opacity,1))}.border-emerald-200{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.border-emerald-500\/20{border-color:#10b98133}.border-fuchsia-500\/30{border-color:#d946ef4d}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.border-green-500\/20{border-color:#22c55e33}.border-green-900\/40{border-color:#14532d66}.border-indigo-500{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity,1))}.border-inherit{border-color:inherit}.border-orange-400\/20{border-color:#fb923c33}.border-pink-500\/20{border-color:#ec489933}.border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.border-purple-500\/10{border-color:#a855f71a}.border-purple-500\/20{border-color:#a855f733}.border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.border-red-400\/20{border-color:#f8717133}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.border-red-500\/10{border-color:#ef44441a}.border-red-500\/20{border-color:#ef444433}.border-red-500\/30{border-color:#ef44444d}.border-red-500\/40{border-color:#ef444466}.border-red-900\/30{border-color:#7f1d1d4d}.border-red-900\/50{border-color:#7f1d1d80}.border-rose-100{--tw-border-opacity:1;border-color:rgb(255 228 230/var(--tw-border-opacity,1))}.border-rose-200{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity,1))}.border-rose-500\/10{border-color:#f43f5e1a}.border-rose-500\/20{border-color:#f43f5e33}.border-sky-500\/20{border-color:#0ea5e933}.border-teal-500\/20{border-color:#14b8a633}.border-transparent{border-color:#0000}.border-violet-500\/20{border-color:#8b5cf633}.border-yellow-500\/30{border-color:#eab3084d}.border-z-accent{border-color:var(--z-accent)}.border-z-active-border{border-color:var(--z-active-border)}.border-z-border{border-color:var(--z-border)}.border-z-border-strong{border-color:var(--z-border-strong)}.border-l-amber-500{--tw-border-opacity:1;border-left-color:rgb(245 158 11/var(--tw-border-opacity,1))}.border-l-rose-500{--tw-border-opacity:1;border-left-color:rgb(244 63 94/var(--tw-border-opacity,1))}.border-l-sky-500{--tw-border-opacity:1;border-left-color:rgb(14 165 233/var(--tw-border-opacity,1))}.border-t-transparent{border-top-color:#0000}.bg-\[\#030303\]{--tw-bg-opacity:1;background-color:rgb(3 3 3/var(--tw-bg-opacity,1))}.bg-\[\#050505\]{--tw-bg-opacity:1;background-color:rgb(5 5 5/var(--tw-bg-opacity,1))}.bg-\[\#060606\]{--tw-bg-opacity:1;background-color:rgb(6 6 6/var(--tw-bg-opacity,1))}.bg-\[\#080808\]{--tw-bg-opacity:1;background-color:rgb(8 8 8/var(--tw-bg-opacity,1))}.bg-\[\#080808\]\/80{background-color:#080808cc}.bg-\[\#080808\]\/90{background-color:#080808e6}.bg-\[\#08080a\]{--tw-bg-opacity:1;background-color:rgb(8 8 10/var(--tw-bg-opacity,1))}.bg-\[\#0A0A0A\]{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity,1))}.bg-\[\#0B0F19\]{--tw-bg-opacity:1;background-color:rgb(11 15 25/var(--tw-bg-opacity,1))}.bg-\[\#0F172A\]\/80{background-color:#0f172acc}.bg-\[\#0a0a0a\]{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity,1))}.bg-\[\#0d0d0d\]{--tw-bg-opacity:1;background-color:rgb(13 13 13/var(--tw-bg-opacity,1))}.bg-\[\#0d1117\]{--tw-bg-opacity:1;background-color:rgb(13 17 23/var(--tw-bg-opacity,1))}.bg-\[\#111111\],.bg-\[\#111\]{--tw-bg-opacity:1;background-color:rgb(17 17 17/var(--tw-bg-opacity,1))}.bg-\[\#151515\]{--tw-bg-opacity:1;background-color:rgb(21 21 21/var(--tw-bg-opacity,1))}.bg-\[\#15202b\]{--tw-bg-opacity:1;background-color:rgb(21 32 43/var(--tw-bg-opacity,1))}.bg-\[\#18181b\]{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity,1))}.bg-\[\#1E1E1E\]{--tw-bg-opacity:1;background-color:rgb(30 30 30/var(--tw-bg-opacity,1))}.bg-\[\#1c1c1c\]{--tw-bg-opacity:1;background-color:rgb(28 28 28/var(--tw-bg-opacity,1))}.bg-\[\#1c1e21\]{--tw-bg-opacity:1;background-color:rgb(28 30 33/var(--tw-bg-opacity,1))}.bg-\[\#242526\]{--tw-bg-opacity:1;background-color:rgb(36 37 38/var(--tw-bg-opacity,1))}.bg-\[\#2c2c2c\]{--tw-bg-opacity:1;background-color:rgb(44 44 44/var(--tw-bg-opacity,1))}.bg-\[\#f0f8ff\]{--tw-bg-opacity:1;background-color:rgb(240 248 255/var(--tw-bg-opacity,1))}.bg-\[\#f4fafe\]{--tw-bg-opacity:1;background-color:rgb(244 250 254/var(--tw-bg-opacity,1))}.bg-\[\#fafafa\]{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.bg-\[rgba\(255\,255\,255\,0\.1\)\]{background-color:#ffffff1a}.bg-\[var\(--z-accent\)\]{background-color:var(--z-accent)}.bg-\[var\(--z-active-bg\)\]{background-color:var(--z-active-bg)}.bg-\[var\(--z-bg-code\)\]{background-color:var(--z-bg-code)}.bg-\[var\(--z-bg-hover\)\]{background-color:var(--z-bg-hover)}.bg-\[var\(--z-bg-input\)\]{background-color:var(--z-bg-input)}.bg-\[var\(--z-bg-modal\)\]{background-color:var(--z-bg-modal)}.bg-\[var\(--z-border\)\]{background-color:var(--z-border)}.bg-\[var\(--z-border-strong\)\]{background-color:var(--z-border-strong)}.bg-accent{background-color:var(--z-accent)}.bg-amber-400{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity,1))}.bg-amber-400\/10{background-color:#fbbf241a}.bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity,1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/5{background-color:#f59e0b0d}.bg-amber-600{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity,1))}.bg-app{--tw-bg-opacity:1;background-color:rgb(var(--bg-app-rgb) / var(--tw-bg-opacity,1))}.bg-app\/0{background-color:rgb(var(--bg-app-rgb) / 0)}.bg-app\/10{background-color:rgb(var(--bg-app-rgb) / .1)}.bg-app\/20{background-color:rgb(var(--bg-app-rgb) / .2)}.bg-app\/30{background-color:rgb(var(--bg-app-rgb) / .3)}.bg-app\/40{background-color:rgb(var(--bg-app-rgb) / .4)}.bg-app\/5{background-color:rgb(var(--bg-app-rgb) / .05)}.bg-app\/50{background-color:rgb(var(--bg-app-rgb) / .5)}.bg-app\/60{background-color:rgb(var(--bg-app-rgb) / .6)}.bg-app\/65{background-color:rgb(var(--bg-app-rgb) / .65)}.bg-app\/70{background-color:rgb(var(--bg-app-rgb) / .7)}.bg-app\/75{background-color:rgb(var(--bg-app-rgb) / .75)}.bg-app\/80{background-color:rgb(var(--bg-app-rgb) / .8)}.bg-app\/85{background-color:rgb(var(--bg-app-rgb) / .85)}.bg-app\/90{background-color:rgb(var(--bg-app-rgb) / .9)}.bg-app\/95{background-color:rgb(var(--bg-app-rgb) / .95)}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.bg-black\/60{background-color:#0009}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.bg-blue-500\/10{background-color:#3b82f61a}.bg-border{--tw-bg-opacity:1;background-color:rgb(var(--border-rgb) / var(--tw-bg-opacity,1))}.bg-current{background-color:currentColor}.bg-emerald-400{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity,1))}.bg-emerald-50{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity,1))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.bg-fuchsia-500\/10{background-color:#d946ef1a}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.bg-green-500\/10{background-color:#22c55e1a}.bg-green-500\/40{background-color:#22c55e66}.bg-green-950\/20{background-color:#052e1633}.bg-indigo-500{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity,1))}.bg-inherit{background-color:inherit}.bg-orange-400\/10{background-color:#fb923c1a}.bg-pink-500{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity,1))}.bg-pink-500\/10{background-color:#ec48991a}.bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.bg-purple-500\/10{background-color:#a855f71a}.bg-purple-500\/5{background-color:#a855f70d}.bg-red-400\/10{background-color:#f871711a}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-red-500\/10{background-color:#ef44441a}.bg-red-500\/40{background-color:#ef444466}.bg-red-500\/5{background-color:#ef44440d}.bg-red-500\/\[0\.01\]{background-color:#ef444403}.bg-red-500\/\[0\.03\]{background-color:#ef444408}.bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.bg-red-950\/10{background-color:#450a0a1a}.bg-red-950\/20{background-color:#450a0a33}.bg-rose-400{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity,1))}.bg-rose-50{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity,1))}.bg-rose-50\/50{background-color:#fff1f280}.bg-rose-500{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity,1))}.bg-rose-500\/10{background-color:#f43f5e1a}.bg-rose-500\/5{background-color:#f43f5e0d}.bg-rose-500\/\[0\.03\]{background-color:#f43f5e08}.bg-rose-600{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity,1))}.bg-sky-500\/10{background-color:#0ea5e91a}.bg-sky-500\/5{background-color:#0ea5e90d}.bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity,1))}.bg-teal-500\/10{background-color:#14b8a61a}.bg-transparent{background-color:#0000}.bg-violet-500\/10{background-color:#8b5cf61a}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-white\/15{background-color:#ffffff26}.bg-white\/80{background-color:#fffc}.bg-white\/90{background-color:#ffffffe6}.bg-yellow-500\/10{background-color:#eab3081a}.bg-yellow-500\/40{background-color:#eab30866}.bg-z-accent{background-color:var(--z-accent)}.bg-z-active-bg{background-color:var(--z-active-bg)}.bg-z-base{background-color:var(--z-bg-base)}.bg-z-border{background-color:var(--z-border)}.bg-z-header{background-color:var(--z-bg-header)}.bg-z-hover{background-color:var(--z-bg-hover)}.bg-z-input{background-color:var(--z-bg-input)}.bg-z-panel{background-color:var(--z-bg-panel)}.bg-z-popover{background-color:var(--z-bg-popover)}.bg-z-primary{background-color:var(--z-text-primary)}.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))}.bg-gradient-to-t{background-image:linear-gradient(to top, var(--tw-gradient-stops))}.from-\[\#1a1a2e\]\/80{--tw-gradient-from:#1a1a2ecc var(--tw-gradient-from-position);--tw-gradient-to:#1a1a2e00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to)}.from-\[var\(--z-bg-panel\)\]{--tw-gradient-from:var(--z-bg-panel) var(--tw-gradient-from-position);--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to)}.from-amber-900\/60{--tw-gradient-from:#78350f99 var(--tw-gradient-from-position);--tw-gradient-to:#78350f00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to)}.from-amber-900\/70{--tw-gradient-from:#78350fb3 var(--tw-gradient-from-position);--tw-gradient-to:#78350f00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to)}.from-rose-900\/60{--tw-gradient-from:#88133799 var(--tw-gradient-from-position);--tw-gradient-to:#88133700 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to)}.from-rose-900\/70{--tw-gradient-from:#881337b3 var(--tw-gradient-from-position);--tw-gradient-to:#88133700 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to)}.from-transparent{--tw-gradient-from:transparent var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to)}.from-z-accent{--tw-gradient-from:var(--z-accent) var(--tw-gradient-from-position);--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to)}.via-\[var\(--z-bg-base\)\]{--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--z-bg-base) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-\[\#16213e\]\/60{--tw-gradient-to:#16213e99 var(--tw-gradient-to-position)}.to-\[var\(--z-bg-panel\)\]{--tw-gradient-to:var(--z-bg-panel) var(--tw-gradient-to-position)}.to-orange-900\/40{--tw-gradient-to:#7c2d1266 var(--tw-gradient-to-position)}.to-pink-900\/40{--tw-gradient-to:#83184366 var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-current{fill:currentColor}.stroke-\[3\]{stroke-width:3px}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-10{padding:2.5rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.px-9{padding-left:2.25rem;padding-right:2.25rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-14{padding-top:3.5rem;padding-bottom:3.5rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-px{padding-top:1px;padding-bottom:1px}.pb-0{padding-bottom:0}.pb-1{padding-bottom:.25rem}.pb-10{padding-bottom:2.5rem}.pb-12{padding-bottom:3rem}.pb-2{padding-bottom:.5rem}.pb-20{padding-bottom:5rem}.pb-24{padding-bottom:6rem}.pb-3{padding-bottom:.75rem}.pb-32{padding-bottom:8rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pb-6{padding-bottom:1.5rem}.pl-10{padding-left:2.5rem}.pl-11{padding-left:2.75rem}.pl-12{padding-left:3rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-7{padding-left:1.75rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-10{padding-right:2.5rem}.pr-11{padding-right:2.75rem}.pr-12{padding-right:3rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pr-6{padding-right:1.5rem}.pr-7{padding-right:1.75rem}.pr-8{padding-right:2rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-12{padding-top:3rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:var(--brand-font,"Inter"), ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[7\.5px\]{font-size:7.5px}.text-\[80px\]{font-size:80px}.text-\[9\.5px\]{font-size:9.5px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.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-black{font-weight:900}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-3{line-height:.75rem}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-\[1\.1\]{line-height:1.1}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-\[\#111827\]{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-\[\#1a0dab\]{--tw-text-opacity:1;color:rgb(26 13 171/var(--tw-text-opacity,1))}.text-\[\#A1B3CD\]{--tw-text-opacity:1;color:rgb(161 179 205/var(--tw-text-opacity,1))}.text-\[\#e6edf3\]{--tw-text-opacity:1;color:rgb(230 237 243/var(--tw-text-opacity,1))}.text-\[rgba\(0\,112\,186\,1\)\]{color:#0070ba}.text-\[rgba\(51\,153\,204\,1\)\]{color:#39c}.text-\[var\(--z-accent\)\]{color:var(--z-accent)}.text-\[var\(--z-active-text\)\]{color:var(--z-active-text)}.text-accent{color:var(--z-accent)}.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-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-danger{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-emerald-400{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity,1))}.text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.text-fuchsia-400{--tw-text-opacity:1;color:rgb(232 121 249/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-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.text-green-400\/80{color:#4ade80cc}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity,1))}.text-inherit{color:inherit}.text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity,1))}.text-pink-400{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity,1))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.text-red-100\/90{color:#fee2e2e6}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.text-red-400\/50{color:#f8717180}.text-red-400\/80{color:#f87171cc}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-red-500\/40{color:#ef444466}.text-red-500\/50{color:#ef444480}.text-red-500\/60{color:#ef444499}.text-red-500\/70{color:#ef4444b3}.text-red-500\/80{color:#ef4444cc}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.text-rose-400{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity,1))}.text-rose-400\/70{color:#fb7185b3}.text-rose-500{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity,1))}.text-rose-500\/50{color:#f43f5e80}.text-rose-500\/70{color:#f43f5eb3}.text-rose-600{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity,1))}.text-sky-400{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity,1))}.text-teal-400{--tw-text-opacity:1;color:rgb(45 212 191/var(--tw-text-opacity,1))}.text-transparent{color:#0000}.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))}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.text-z-accent{color:var(--z-accent)}.text-z-active-text{color:var(--z-active-text)}.text-z-inverse{color:var(--z-text-inverse)}.text-z-logo-text{color:var(--z-logo-text)}.text-z-muted{color:var(--z-text-muted)}.text-z-primary{color:var(--z-text-primary)}.text-z-secondary{color:var(--z-text-secondary)}.text-z-sidebar-text{color:var(--z-sidebar-text)}.underline{text-decoration-line:underline}.decoration-2{text-decoration-thickness:2px}.underline-offset-2{text-underline-offset:2px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.accent-gray-500{accent-color:#6b7280}.accent-z-accent{accent-color:var(--z-accent)}.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-100{opacity:1}.opacity-20{opacity:.2}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-5{opacity:.05}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-85{opacity:.85}.opacity-90{opacity:.9}.opacity-\[0\.01\]{opacity:.01}.opacity-\[0\.03\]{opacity:.03}.mix-blend-difference{mix-blend-mode:difference}.shadow{--tw-shadow:0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_10px_rgba\(255\,255\,255\,0\.3\)\]{--tw-shadow:0 0 10px #ffffff4d;--tw-shadow-colored:0 0 10px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_15px_rgba\(220\,38\,38\,0\.15\)\]{--tw-shadow:0 0 15px #dc262626;--tw-shadow-colored:0 0 15px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_16px_rgba\(79\,70\,229\,0\.3\)\]{--tw-shadow:0 0 16px #4f46e54d;--tw-shadow-colored:0 0 16px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_40px_rgba\(0\,0\,0\,0\.5\)\]{--tw-shadow:0 0 40px #00000080;--tw-shadow-colored:0 0 40px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_6px_\#ef4444\]{--tw-shadow:0 0 6px #ef4444;--tw-shadow-colored:0 0 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_6px_currentColor\]{--tw-shadow:0 0 6px currentColor;--tw-shadow-colored:0 0 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_8px_\#6b7280\]{--tw-shadow:0 0 8px #6b7280;--tw-shadow-colored:0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_8px_currentColor\]{--tw-shadow:0 0 8px currentColor;--tw-shadow-colored:0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(0\,112\,186\,0\.1\)\]{--tw-shadow:0 0 8px #0070ba1a;--tw-shadow-colored:0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(51\,153\,204\,0\.1\)\]{--tw-shadow:0 0 8px #3399cc1a;--tw-shadow-colored:0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(59\,130\,246\,0\.8\)\]{--tw-shadow:0 0 8px #3b82f6cc;--tw-shadow-colored:0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(99\,102\,241\,0\.8\)\]{--tw-shadow:0 0 8px #6366f1cc;--tw-shadow-colored:0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_4px_30px_rgba\(0\,0\,0\,0\.1\)\]{--tw-shadow:0 4px 30px #0000001a;--tw-shadow-colored:0 4px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 #0000000d;--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color);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 #0000001a, 0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[var\(--z-border\)\]{--tw-shadow-color:var(--z-border);--tw-shadow:var(--tw-shadow-colored)}.shadow-black\/60{--tw-shadow-color:#0009;--tw-shadow:var(--tw-shadow-colored)}.outline-none{outline-offset:2px;outline:2px solid #0000}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.ring-\[\#050505\]{--tw-ring-opacity:1;--tw-ring-color:rgb(5 5 5/var(--tw-ring-opacity,1))}.ring-\[var\(--z-accent\)\]{--tw-ring-color:var(--z-accent)}.ring-amber-500\/40{--tw-ring-color:#f59e0b66}.ring-z-active-border{--tw-ring-color:var(--z-active-border)}.ring-offset-2{--tw-ring-offset-width:2px}.ring-offset-\[\#0B0F19\]{--tw-ring-offset-color:#0b0f19}.blur{--tw-blur:blur(8px);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)}.blur-3xl{--tw-blur:blur(64px);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)}.blur-\[100px\]{--tw-blur:blur(100px);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)}.blur-\[120px\]{--tw-blur:blur(120px);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)}.blur-\[60px\]{--tw-blur:blur(60px);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)}.blur-lg{--tw-blur:blur(16px);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)}.saturate-50{--tw-saturate:saturate(.5);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)}.filter{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)}.backdrop-blur{--tw-backdrop-blur:blur(8px);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-3xl{--tw-backdrop-blur:blur(64px);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-\[12px\],.backdrop-blur-md{--tw-backdrop-blur:blur(12px);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-sm{--tw-backdrop-blur:blur(4px);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);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-filter{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)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-property:all;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-property:opacity;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-property:transform;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-100{transition-duration:.1s}.duration-1000{transition-duration:1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.zenith-lexical-editor .lexical-paragraph{margin:0 0 .5em;line-height:1.75}.zenith-lexical-editor .lexical-heading-1{letter-spacing:-.02em;text-transform:uppercase;margin:.75em 0 .4em;font-size:2.5em;font-weight:900;line-height:1.1}.zenith-lexical-editor .lexical-heading-2{letter-spacing:-.01em;text-transform:uppercase;margin:1em 0 .5em;font-size:1.75em;font-weight:900;line-height:1.2}.zenith-lexical-editor .lexical-heading-3{text-transform:uppercase;margin:1em 0 .5em;font-size:1.35em;font-weight:800;line-height:1.3}.zenith-lexical-editor .lexical-quote{border-left:3px solid var(--z-active-border);background:var(--z-active-bg);border-radius:0 8px 8px 0;margin:1em 0;padding:.5em 1em}.zenith-lexical-editor .lexical-list-ul,.zenith-lexical-editor .lexical-list-ol{margin:.5em 0;padding-left:1.5em}.zenith-lexical-editor .lexical-list-ul{list-style-type:disc}.zenith-lexical-editor .lexical-list-ol{list-style-type:decimal}.zenith-lexical-editor .lexical-list-item{margin:.25em 0;line-height:1.75}.zenith-lexical-editor .lexical-bold{font-weight:800}.zenith-lexical-editor .lexical-underline{text-decoration:underline}.zenith-lexical-editor .lexical-strikethrough{text-decoration:line-through}.zenith-lexical-editor .lexical-code-text{background:var(--z-active-bg);color:var(--z-active-text);border-radius:4px;padding:.15em .4em;font-family:JetBrains Mono,Fira Code,monospace;font-size:.85em}.zenith-lexical-editor .lexical-code{tab-size:2;background:#0000004d;border:1px solid #ffffff0f;border-radius:8px;margin:1em 0;padding:1em 1.25em;font-family:JetBrains Mono,Fira Code,monospace;font-size:.85em;line-height:1.7;overflow-x:auto}.dark .zenith-lexical-editor .lexical-code{background:#00000080;border-color:#ffffff14}.light .zenith-lexical-editor .lexical-code{background:#f8f9fa;border-color:#00000014}.zenith-lexical-editor .lexical-token-comment{color:#6b7280}.zenith-lexical-editor .lexical-token-keyword{color:#c084fc;font-weight:700}.zenith-lexical-editor .lexical-token-tag{color:#f472b6}.zenith-lexical-editor .lexical-token-punctuation{color:#9ca3af}.zenith-lexical-editor .lexical-token-property{color:#60a5fa}.zenith-lexical-editor .lexical-token-attr{color:#fbbf24}.zenith-lexical-editor .lexical-token-string{color:#34d399}.zenith-lexical-editor .lexical-token-selector{color:#f472b6}.zenith-lexical-editor .lexical-token-function{color:#60a5fa}.zenith-lexical-editor .lexical-token-variable{color:#fb923c}.zenith-lexical-editor .lexical-token-operator{color:#9ca3af}.zenith-lexical-editor .lexical-horizontal-rule{background:linear-gradient(90deg, transparent, var(--z-active-border), transparent);border:none;height:1px;margin:2em 0}.zenith-lexical-editor .lexical-link{color:var(--z-accent);text-transform:uppercase;cursor:pointer;transition:color .2s}.zenith-lexical-editor .lexical-link:hover{color:#a78bfa}.zenith-lexical-editor .lexical-image{border-radius:0;max-width:100%;height:auto;display:block}.zenith-lexical-editor .lexical-media-node{border-radius:0;margin:1em 0;display:block;overflow:hidden}.zenith-lexical-editor .lexical-media-image{max-width:100%;height:auto;display:block}.zenith-lexical-editor .lexical-media-video{border-radius:0;max-width:100%;display:block}.zenith-lexical-editor .lexical-media-file{background:var(--z-active-bg);color:var(--z-active-text);border:1px solid var(--z-active-border);border-radius:0;align-items:center;gap:.5em;padding:.6em 1em;font-size:.9em;font-weight:600;text-decoration:none;display:inline-flex}.zenith-lexical-editor .lexical-media-caption{color:var(--text-muted,#6b7280);text-align:center;margin-top:.5em;font-size:.8em;display:block}.zenith-lexical-editor .lexical-relationship-node{background:var(--z-active-bg);border:1px solid var(--z-active-border);color:var(--z-active-text);cursor:default;border-radius:0;align-items:center;gap:.5em;padding:.35em .75em;font-size:.85em;font-weight:700;display:inline-flex}.zenith-lexical-editor .lexical-relationship-icon{font-size:.9em}.zenith-lexical-editor .lexical-relationship-label{font-family:JetBrains Mono,Fira Code,monospace;font-size:.85em}.zenith-lexical-editor .lexical-relationship-status{text-transform:uppercase;border-radius:0;padding:.1em .5em;font-size:.7em;font-weight:800}.zenith-lexical-editor .lexical-relationship-status--published{color:var(--z-accent);background:#10b98126}.zenith-lexical-editor .lexical-relationship-status--draft{color:#f59e0b;background:#f59e0b26}.zenith-lexical-editor table{border-collapse:collapse;border:1px solid #ffffff14;border-radius:0;width:100%;margin:1em 0;overflow:hidden}.dark .zenith-lexical-editor table{border-color:#ffffff14}.light .zenith-lexical-editor table{border-color:#0000001a}.zenith-lexical-editor th{background:var(--z-active-bg);text-transform:uppercase;letter-spacing:.05em;text-align:left;border-bottom:2px solid var(--z-active-border);padding:.75em 1em;font-size:.8em;font-weight:800}.zenith-lexical-editor td{border-bottom:1px solid #ffffff0d;padding:.65em 1em;font-size:.9em}.light .zenith-lexical-editor td{border-bottom-color:#0000000f}.zenith-lexical-editor .lexical-hashtag{color:var(--z-accent);font-size:.9em;font-weight:600}.zenith-lexical-editor [contenteditable]:focus{outline:none}.zenith-lexical-editor .editor-placeholder{pointer-events:none;user-select:none;color:var(--text-muted,#4b5563);padding:inherit;position:absolute;top:0;left:0}html.dark .after\:bg-z-panel:after{content:var(--tw-content);-webkit-backdrop-filter:blur(12px)!important;background-color:#000000a6!important;border-color:#ffffff14!important;box-shadow:0 4px 30px #0000001a!important}html.dark .hover\:bg-z-panel:hover,html.dark .hover\:bg-z-input:hover{-webkit-backdrop-filter:blur(12px)!important;background-color:#000000a6!important;border-color:#ffffff14!important;box-shadow:0 4px 30px #0000001a!important}.hover\:text-status-red:hover{color:var(--status-red)}html.dark .focus\:bg-z-panel:focus,html.dark .focus-visible\:bg-z-panel:focus-visible{-webkit-backdrop-filter:blur(12px)!important;background-color:#000000a6!important;border-color:#ffffff14!important;box-shadow:0 4px 30px #0000001a!important}@media (prefers-color-scheme:dark){html.dark .dark\:bg-z-panel,html.dark .dark\:hover\:bg-z-panel:hover{-webkit-backdrop-filter:blur(12px)!important;background-color:#000000a6!important;border-color:#ffffff14!important;box-shadow:0 4px 30px #0000001a!important}}.placeholder\:text-z-muted::placeholder{color:var(--z-text-muted)}.placeholder\:text-z-primary::placeholder{color:var(--z-text-primary)}.placeholder\:text-z-secondary::placeholder{color:var(--z-text-secondary)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:left-\[2px\]:after{content:var(--tw-content);left:2px}.after\:left-\[4px\]:after{content:var(--tw-content);left:4px}.after\:top-\[2px\]:after{content:var(--tw-content);top:2px}.after\:top-\[4px\]:after{content:var(--tw-content);top:4px}.after\:h-3:after{content:var(--tw-content);height:.75rem}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:h-5:after{content:var(--tw-content);height:1.25rem}.after\:w-3\.5:after{content:var(--tw-content);width:.875rem}.after\:w-5:after{content:var(--tw-content);width:1.25rem}.after\:rounded-full:after{content:var(--tw-content);border-radius:9999px}.after\:rounded-none:after{content:var(--tw-content);border-radius:0}.after\:border:after{content:var(--tw-content);border-width:1px}.after\:border-gray-300:after{content:var(--tw-content);--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.after\:bg-\[var\(--z-bg-hover\)\]:after{content:var(--tw-content);background-color:var(--z-bg-hover)}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.after\:bg-z-panel:after{content:var(--tw-content);background-color:var(--z-bg-panel)}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.last\:border-0:last-child{border-width:0}.last\:border-b-0:last-child{border-bottom-width:0}.checked\:border-z-border:checked{border-color:var(--z-border)}.checked\:bg-\[var\(--z-bg-input\)\]:checked{background-color:var(--z-bg-input)}.focus-within\:border-z-accent:focus-within{border-color:var(--z-accent)}.hover\:z-10:hover{z-index:10}.hover\:-translate-y-0\.5:hover{--tw-translate-y:-.125rem;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\:-translate-y-1:hover{--tw-translate-y:-.25rem;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\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05;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\:scale-110:hover{--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))}.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\:scale-\[1\.04\]:hover{--tw-scale-x:1.04;--tw-scale-y:1.04;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-\[var\(--z-active-border\)\]:hover{border-color:var(--z-active-border)}.hover\:border-\[var\(--z-border-strong\)\]:hover{border-color:var(--z-border-strong)}.hover\:border-amber-400:hover{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity,1))}.hover\:border-amber-500:hover{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1))}.hover\:border-amber-500\/50:hover{border-color:#f59e0b80}.hover\:border-red-200:hover{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.hover\:border-red-500:hover{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.hover\:border-red-500\/20:hover{border-color:#ef444433}.hover\:border-red-500\/30:hover{border-color:#ef44444d}.hover\:border-red-500\/50:hover{border-color:#ef444480}.hover\:border-rose-200:hover{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity,1))}.hover\:border-rose-300:hover{--tw-border-opacity:1;border-color:rgb(253 164 175/var(--tw-border-opacity,1))}.hover\:border-rose-500\/20:hover{border-color:#f43f5e33}.hover\:border-rose-500\/30:hover{border-color:#f43f5e4d}.hover\:border-z-accent:hover{border-color:var(--z-accent)}.hover\:border-z-active-border:hover{border-color:var(--z-active-border)}.hover\:border-z-border:hover{border-color:var(--z-border)}.hover\:border-z-border-strong:hover{border-color:var(--z-border-strong)}.hover\:bg-\[\#059669\]:hover{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.hover\:bg-\[\#3c3c3c\]:hover{--tw-bg-opacity:1;background-color:rgb(60 60 60/var(--tw-bg-opacity,1))}.hover\:bg-\[rgba\(255\,255\,255\,0\.2\)\]:hover{background-color:#fff3}.hover\:bg-\[var\(--z-bg-hover\)\]:hover{background-color:var(--z-bg-hover)}.hover\:bg-\[var\(--z-bg-input\)\]:hover{background-color:var(--z-bg-input)}.hover\:bg-\[var\(--z-border\)\]:hover{background-color:var(--z-border)}.hover\:bg-amber-100:hover{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity,1))}.hover\:bg-amber-50:hover{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.hover\:bg-amber-500\/10:hover{background-color:#f59e0b1a}.hover\:bg-amber-500\/20:hover{background-color:#f59e0b33}.hover\:bg-app:hover{--tw-bg-opacity:1;background-color:rgb(var(--bg-app-rgb) / var(--tw-bg-opacity,1))}.hover\:bg-app\/5:hover{background-color:rgb(var(--bg-app-rgb) / .05)}.hover\:bg-app\/80:hover{background-color:rgb(var(--bg-app-rgb) / .8)}.hover\:bg-app\/85:hover{background-color:rgb(var(--bg-app-rgb) / .85)}.hover\:bg-app\/\[0\.02\]:hover{background-color:rgb(var(--bg-app-rgb) / .02)}.hover\:bg-emerald-400:hover{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity,1))}.hover\:bg-emerald-600:hover{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.hover\:bg-emerald-700:hover{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity,1))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.hover\:bg-red-100:hover{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.hover\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.hover\:bg-red-500:hover{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.hover\:bg-red-500\/10:hover{background-color:#ef44441a}.hover\:bg-red-500\/20:hover{background-color:#ef444433}.hover\:bg-red-500\/5:hover{background-color:#ef44440d}.hover\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.hover\:bg-red-950\/10:hover{background-color:#450a0a1a}.hover\:bg-rose-100:hover{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity,1))}.hover\:bg-rose-50:hover{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity,1))}.hover\:bg-rose-500:hover{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity,1))}.hover\:bg-rose-500\/10:hover{background-color:#f43f5e1a}.hover\:bg-rose-500\/20:hover{background-color:#f43f5e33}.hover\:bg-white\/20:hover{background-color:#fff3}.hover\:bg-z-accent:hover{background-color:var(--z-accent)}.hover\:bg-z-active-bg:hover{background-color:var(--z-active-bg)}.hover\:bg-z-base:hover{background-color:var(--z-bg-base)}.hover\:bg-z-border:hover{background-color:var(--z-border)}.hover\:bg-z-hover:hover{background-color:var(--z-bg-hover)}.hover\:bg-z-input:hover{background-color:var(--z-bg-input)}.hover\:bg-z-panel:hover{background-color:var(--z-bg-panel)}.hover\:text-\[var\(--z-active-text\)\]:hover{color:var(--z-active-text)}.hover\:text-accent:hover{color:var(--z-accent)}.hover\:text-amber-400:hover{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.hover\:text-amber-500:hover{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.hover\:text-amber-600:hover{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.hover\:text-danger:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.hover\:text-indigo-500:hover{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity,1))}.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))}.hover\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.hover\:text-red-600:hover{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.hover\:text-rose-400:hover{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity,1))}.hover\:text-rose-500:hover{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity,1))}.hover\:text-rose-600:hover{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity,1))}.hover\:text-z-accent:hover{color:var(--z-accent)}.hover\:text-z-active-text:hover{color:var(--z-active-text)}.hover\:text-z-logo-text:hover{color:var(--z-logo-text)}.hover\:text-z-muted:hover{color:var(--z-text-muted)}.hover\:text-z-primary:hover{color:var(--z-text-primary)}.hover\:text-z-secondary:hover{color:var(--z-text-secondary)}.hover\:text-z-sidebar-text:hover{color:var(--z-sidebar-text)}.hover\:text-z-sidebar-text-hover:hover{color:var(--z-sidebar-text-hover)}.hover\:underline:hover{text-decoration-line:underline}.hover\:\!opacity-100:hover{opacity:1!important}.hover\:opacity-100:hover{opacity:1}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.hover\:brightness-110:hover{--tw-brightness:brightness(1.1);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)}.hover\:shadow-premium:hover{box-shadow:var(--shadow-premium)}.focus\:border-\[rgba\(0\,112\,186\,1\)\]:focus{border-color:#0070ba}.focus\:border-\[rgba\(51\,153\,204\,1\)\]:focus{border-color:#39c}.focus\:border-accent:focus{border-color:var(--z-accent)}.focus\:border-red-500\/50:focus{border-color:#ef444480}.focus\:border-z-accent:focus{border-color:var(--z-accent)}.focus\:border-z-active-border:focus{border-color:var(--z-active-border)}.focus\:border-z-border:focus{border-color:var(--z-border)}.focus\:border-z-border-strong:focus{border-color:var(--z-border-strong)}.focus\:bg-app\/80:focus{background-color:rgb(var(--bg-app-rgb) / .8)}.focus\:bg-z-hover:focus{background-color:var(--z-bg-hover)}.focus\:bg-z-panel:focus{background-color:var(--z-bg-panel)}.focus\:outline-none:focus{outline-offset:2px;outline:2px solid #0000}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.focus\:ring-4:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.focus\:ring-z-active-border:focus{--tw-ring-color:var(--z-active-border)}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px}.focus-visible\:border-z-border:focus-visible{border-color:var(--z-border)}.focus-visible\:bg-z-panel:focus-visible{background-color:var(--z-bg-panel)}.focus-visible\:outline-none:focus-visible{outline-offset:2px;outline:2px solid #0000}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-indigo-500:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(99 102 241/var(--tw-ring-opacity,1))}.focus-visible\:ring-red-500\/50:focus-visible{--tw-ring-color:#ef444480}.focus-visible\:ring-z-active-border:focus-visible{--tw-ring-color:var(--z-active-border)}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px}.focus-visible\:ring-offset-black:focus-visible{--tw-ring-offset-color:#000}.active\:scale-95:active{--tw-scale-x:.95;--tw-scale-y:.95;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))}.active\:scale-\[0\.98\]:active{--tw-scale-x:.98;--tw-scale-y:.98;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))}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-z-hover:disabled{background-color:var(--z-bg-hover)}.disabled\:text-z-secondary:disabled{color:var(--z-text-secondary)}.disabled\:opacity-20:disabled{opacity:.2}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:hover\:scale-100:hover:disabled{--tw-scale-x:1;--tw-scale-y: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:focus-within .group-focus-within\:text-z-accent{color:var(--z-accent)}.group:focus-within .group-focus-within\:text-z-secondary{color:var(--z-text-secondary)}.group:hover .group-hover\:-translate-x-1{--tw-translate-x:-.25rem;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\:-translate-y-1{--tw-translate-y:-.25rem;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\:translate-x-0\.5{--tw-translate-x:.125rem;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\:translate-x-1{--tw-translate-x:.25rem;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\:translate-y-0{--tw-translate-y: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))}.group\/git:hover .group-hover\/git\:rotate-12{--tw-rotate:12deg;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\:scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05;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\: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\:scale-\[1\.01\]{--tw-scale-x:1.01;--tw-scale-y:1.01;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\:bg-\[var\(--z-bg-hover\)\]{background-color:var(--z-bg-hover)}.group:hover .group-hover\:bg-app\/40{background-color:rgb(var(--bg-app-rgb) / .4)}.group:hover .group-hover\:bg-z-active-bg{background-color:var(--z-active-bg)}.group:hover .group-hover\:bg-z-border{background-color:var(--z-border)}.group:hover .group-hover\:bg-z-hover{background-color:var(--z-bg-hover)}.group:hover .group-hover\:to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.group:hover .group-hover\:text-\[var\(--z-active-text\)\]{color:var(--z-active-text)}.group:hover .group-hover\:text-accent,.group:hover .group-hover\:text-z-accent{color:var(--z-accent)}.group:hover .group-hover\:text-z-active-text{color:var(--z-active-text)}.group:hover .group-hover\:text-z-muted{color:var(--z-text-muted)}.group:hover .group-hover\:text-z-primary{color:var(--z-text-primary)}.group:hover .group-hover\:text-z-secondary{color:var(--z-text-secondary)}.group\/git:hover .group-hover\/git\:opacity-100,.group\/item:hover .group-hover\/item\:opacity-100{opacity:1}.group\/item:hover .group-hover\/item\:opacity-40{opacity:.4}.group\/item:hover .group-hover\/item\:opacity-60{opacity:.6}.group:hover .group-hover\:opacity-10{opacity:.1}.group:hover .group-hover\:opacity-100{opacity:1}.group:hover .group-hover\:opacity-20{opacity:.2}.group:hover .group-hover\:saturate-100{--tw-saturate:saturate(1);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)}.peer:checked~.peer-checked\:bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.peer:checked~.peer-checked\:bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.peer:checked~.peer-checked\:bg-z-accent{background-color:var(--z-accent)}.peer:checked~.peer-checked\:after\:translate-x-full:after{content:var(--tw-content);--tw-translate-x:100%;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))}.peer:checked~.peer-checked\:after\:border-white:after{content:var(--tw-content);--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}@media not all and (width>=768px){.max-md\:z-\[100\]{z-index:100}.max-md\:\!w-\[280px\]{width:280px!important}.max-md\:shadow-2xl{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}}@media (width>=640px){.sm\:col-span-1{grid-column:span 1/span 1}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:table-cell{display:table-cell}.sm\:w-auto{width:auto}.sm\:flex-none{flex:none}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-start{align-items:flex-start}.sm\:items-center{align-items:center}.sm\:p-6{padding:1.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=768px){.md\:relative{position:relative}.md\:inset-10{inset:2.5rem}.md\:col-span-2{grid-column:span 2/span 2}.md\:mt-0{margin-top:0}.md\:flex{display:flex}.md\:table-cell{display:table-cell}.md\:hidden{display:none}.md\:w-80{width:20rem}.md\:w-auto{width:auto}.md\:max-w-xs{max-width:20rem}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:gap-8{gap:2rem}.md\:divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-right-width:calc(1px * var(--tw-divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}.md\:divide-y-0>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(0px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(0px * var(--tw-divide-y-reverse))}.md\:self-auto{align-self:auto}.md\:p-10{padding:2.5rem}.md\:p-12{padding:3rem}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:pt-0{padding-top:0}.md\:text-5xl{font-size:3rem;line-height:1}}@media (width>=1024px){.lg\:block{display:block}.lg\:flex{display:flex}.lg\:table-cell{display:table-cell}.lg\:hidden{display:none}.lg\:w-\[320px\]{width:320px}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.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\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:border-b-0{border-bottom-width:0}.lg\:border-l{border-left-width:1px}.lg\:border-r{border-right-width:1px}.lg\:border-t-0{border-top-width:0}.lg\:p-10{padding:2.5rem}.lg\:px-10{padding-left:2.5rem;padding-right:2.5rem}.lg\:pb-32{padding-bottom:8rem}.lg\:pt-10{padding-top:2.5rem}}@media (width>=1280px){.xl\:col-span-1{grid-column:span 1/span 1}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}}@media (width>=1536px){.\32 xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media (prefers-color-scheme:dark){.dark\:divide-z-border>:not([hidden])~:not([hidden]){border-color:var(--z-border)}.dark\:border-amber-500\/20{border-color:#f59e0b33}.dark\:border-blue-500\/20{border-color:#3b82f633}.dark\:border-emerald-500\/20{border-color:#10b98133}.dark\:border-red-500\/20{border-color:#ef444433}.dark\:border-rose-500\/20{border-color:#f43f5e33}.dark\:border-z-border{border-color:var(--z-border)}.dark\:bg-\[\#0a0a0a\]{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity,1))}.dark\:bg-\[var\(--z-bg-modal\)\]{background-color:var(--z-bg-modal)}.dark\:bg-amber-500\/10{background-color:#f59e0b1a}.dark\:bg-app{--tw-bg-opacity:1;background-color:rgb(var(--bg-app-rgb) / var(--tw-bg-opacity,1))}.dark\:bg-app\/40{background-color:rgb(var(--bg-app-rgb) / .4)}.dark\:bg-app\/50{background-color:rgb(var(--bg-app-rgb) / .5)}.dark\:bg-app\/60{background-color:rgb(var(--bg-app-rgb) / .6)}.dark\:bg-blue-500\/10{background-color:#3b82f61a}.dark\:bg-emerald-500\/10{background-color:#10b9811a}.dark\:bg-red-500\/10{background-color:#ef44441a}.dark\:bg-z-active-bg{background-color:var(--z-active-bg)}.dark\:bg-z-hover{background-color:var(--z-bg-hover)}.dark\:bg-z-panel{background-color:var(--z-bg-panel)}.dark\:text-\[\#66b3ff\]{--tw-text-opacity:1;color:rgb(102 179 255/var(--tw-text-opacity,1))}.dark\:text-\[\#88ccf0\]{--tw-text-opacity:1;color:rgb(136 204 240/var(--tw-text-opacity,1))}.dark\:text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.dark\:text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.dark\:text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.dark\:text-emerald-400{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity,1))}.dark\:text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity,1))}.dark\:text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.dark\:text-z-active-text{color:var(--z-active-text)}.dark\:text-z-muted{color:var(--z-text-muted)}.dark\:text-z-primary{color:var(--z-text-primary)}.dark\:text-z-secondary{color:var(--z-text-secondary)}.dark\:ring-z-active-border{--tw-ring-color:var(--z-active-border)}.dark\:placeholder\:text-z-secondary::placeholder{color:var(--z-text-secondary)}.dark\:hover\:border-red-500\/20:hover{border-color:#ef444433}.dark\:hover\:bg-\[var\(--z-bg-hover\)\]:hover{background-color:var(--z-bg-hover)}.dark\:hover\:bg-red-500\/10:hover{background-color:#ef44441a}.dark\:hover\:bg-rose-500\/10:hover{background-color:#f43f5e1a}.dark\:hover\:bg-z-hover:hover{background-color:var(--z-bg-hover)}.dark\:hover\:bg-z-panel:hover{background-color:var(--z-bg-panel)}.dark\:hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.dark\:hover\:text-z-primary:hover{color:var(--z-text-primary)}.dark\:hover\:text-z-secondary:hover{color:var(--z-text-secondary)}.group:hover .dark\:group-hover\:bg-z-border{background-color:var(--z-border)}.group:hover .dark\:group-hover\:text-z-primary{color:var(--z-text-primary)}}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},s=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),c=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},l=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},u=(n,r,a)=>(a=n==null?{}:e(i(n)),l(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),d=e=>a.call(e,`module.exports`)?e[`module.exports`]:l(t({},`__esModule`,{value:!0}),e);export{u as a,d as i,o as n,c as r,s as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{pr as t,xr as n}from"./vendor-react-DQVTOTFO.js";var r=e(n(),1);function i({hasUnsavedChanges:e,message:n}){t();let i=n??`You have unsaved changes. Are you sure you want to leave?`;(0,r.useEffect)(()=>{if(!e){try{sessionStorage.removeItem(`zenith_dirty_navigation`)}catch{}return}try{sessionStorage.setItem(`zenith_dirty_navigation`,`1`)}catch{}},[e]),(0,r.useEffect)(()=>{if(!e)return;let t=e=>(e.preventDefault(),e.returnValue=i,i);return window.addEventListener(`beforeunload`,t),()=>window.removeEventListener(`beforeunload`,t)},[e,i]),(0,r.useEffect)(()=>{if(!e)return;let t=e=>{let t=e.target.closest(`a`);if(e.target.closest(`button`),t){let n=t.getAttribute(`href`);n&&!n.startsWith(`http`)&&!n.startsWith(`mailto:`)&&(window.confirm(i)||(e.preventDefault(),e.stopPropagation()))}};return document.addEventListener(`click`,t,!0),()=>document.removeEventListener(`click`,t,!0)},[e,i])}export{i as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useUnsavedGuard-CMMKQT9a.js","names":[],"sources":["../../src/hooks/useUnsavedGuard.ts"],"sourcesContent":["import { useEffect } from 'react'\nimport { useLocation } from 'react-router-dom'\n\ninterface Options {\n hasUnsavedChanges: boolean\n message?: string\n}\n\n/**\n * Blocks navigation away when there are unsaved changes.\n *\n * Strategy (works with BrowserRouter, no data router required):\n * - beforeunload: catches tab close / browser refresh\n * - SessionStorage coordination: catches React Router <Link> clicks via prompt()\n */\nexport function useUnsavedGuard({ hasUnsavedChanges, message }: Options) {\n // Capture the pathname at mount so we know when it actually changes\n const location = useLocation()\n const prompt = message ?? 'You have unsaved changes. Are you sure you want to leave?'\n\n useEffect(() => {\n if (!hasUnsavedChanges) {\n try { sessionStorage.removeItem('zenith_dirty_navigation') } catch { /* ignore */ }\n return\n }\n\n // Communicate dirty state through sessionStorage so the beforeunload\n // handler (outside React) can also see it.\n try { sessionStorage.setItem('zenith_dirty_navigation', '1') } catch { /* ignore */ }\n }, [hasUnsavedChanges])\n\n // Intercept React Router navigation while dirty\n useEffect(() => {\n if (!hasUnsavedChanges) return\n\n const preventNavigation = (e: BeforeUnloadEvent) => {\n e.preventDefault()\n e.returnValue = prompt\n return prompt\n }\n\n window.addEventListener('beforeunload', preventNavigation)\n return () => window.removeEventListener('beforeunload', preventNavigation)\n }, [hasUnsavedChanges, prompt])\n\n // Intercept React Router <Link> clicks globally via capture phase\n useEffect(() => {\n if (!hasUnsavedChanges) return\n\n const handleGlobalClick = (e: MouseEvent) => {\n const target = (e.target as HTMLElement).closest('a')\n const button = (e.target as HTMLElement).closest('button')\n\n // Let normal buttons pass, we only care about navigation links.\n // Wait, some \"go back\" buttons use navigate(-1), so we might miss those\n // but catching all <a> tags covers 95% of accidental left-nav clicks.\n if (target) {\n const href = target.getAttribute('href')\n if (href && !href.startsWith('http') && !href.startsWith('mailto:')) {\n if (!window.confirm(prompt)) {\n e.preventDefault()\n e.stopPropagation()\n }\n }\n }\n }\n\n document.addEventListener('click', handleGlobalClick, true)\n return () => document.removeEventListener('click', handleGlobalClick, true)\n }, [hasUnsavedChanges, prompt])\n}\n"],"mappings":"0HAeA,SAAgB,EAAgB,CAAE,oBAAmB,WAAoB,CAEvD,EAAY,EAC7B,IAAM,EAAS,GAAW,6DAE1B,EAAA,EAAA,UAAA,KAAgB,CAChB,GAAI,CAAC,EAAmB,CACxB,GAAI,CAAE,eAAe,WAAW,yBAAyB,CAAE,MAAQ,CAAe,CAClF,MACA,CAIA,GAAI,CAAE,eAAe,QAAQ,0BAA2B,GAAG,CAAE,MAAQ,CAAe,CACpF,EAAG,CAAC,CAAiB,CAAC,GAGtB,EAAA,EAAA,UAAA,KAAgB,CAChB,GAAI,CAAC,EAAmB,OAExB,IAAM,EAAqB,IAC3B,EAAE,eAAe,EACjB,EAAE,YAAc,EACT,GAIP,OADA,OAAO,iBAAiB,eAAgB,CAAiB,MAC5C,OAAO,oBAAoB,eAAgB,CAAiB,CACzE,EAAG,CAAC,EAAmB,CAAM,CAAC,GAG9B,EAAA,EAAA,UAAA,KAAgB,CAChB,GAAI,CAAC,EAAmB,OAExB,IAAM,EAAqB,GAAkB,CAC7C,IAAM,EAAU,EAAE,OAAuB,QAAQ,GAAG,EAMpD,GALgB,EAAE,OAAuB,QAAQ,QAAQ,EAKrD,EAAQ,CACZ,IAAM,EAAO,EAAO,aAAa,MAAM,EACnC,GAAQ,CAAC,EAAK,WAAW,MAAM,GAAK,CAAC,EAAK,WAAW,SAAS,IAC7D,OAAO,QAAQ,CAAM,IAC1B,EAAE,eAAe,EACjB,EAAE,gBAAgB,GAGlB,CACA,EAGA,OADA,SAAS,iBAAiB,QAAS,EAAmB,EAAI,MAC7C,SAAS,oBAAoB,QAAS,EAAmB,EAAI,CAC1E,EAAG,CAAC,EAAmB,CAAM,CAAC,CAC/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{ar as t,or as n,vr as r,xr as i}from"./vendor-react-DQVTOTFO.js";import{i as a,r as o}from"./vendor-C-9IqjvY.js";function s(){try{return localStorage.getItem(`token`)}catch{return null}}function c(){try{return localStorage.getItem(`activeSiteId`)}catch{return null}}function l(){try{return localStorage.getItem(`activeSiteName`)}catch{return null}}var u=n()(t(e=>({token:s(),activeSiteId:c(),activeSiteName:l(),setToken:t=>e({token:t}),setActiveSiteId:(t,n)=>e(e=>({activeSiteId:t,activeSiteName:n??e.activeSiteName}))}),{name:`zenith-tenant-store`,partialize:e=>({activeSiteId:e.activeSiteId,activeSiteName:e.activeSiteName})})),d=class extends Error{status;code;response;constructor(e){super(e.message),this.name=`ApiError`,this.status=e.status??0,this.code=e.code??`ERR_UNKNOWN`,this.response=e.response}},f=!1,p=[],m=(e,t=null)=>{p.forEach(n=>{e?n.reject(e):n.resolve(t)}),p=[]},h=(e,t)=>{try{m(e,t)}catch{}},g=e=>{if(typeof document>`u`)return null;let t=document.cookie.match(RegExp(`(^| )`+e+`=([^;]+)`));return t?decodeURIComponent(t[2]):null},_=`/api/v1`;_.startsWith(`http://`)&&!_.includes(`localhost`)&&!_.includes(`127.0.0.1`)&&(console.warn(`Insecure HTTP API URL used in production. Upgrading to HTTPS.`),_=_.replace(`http://`,`https://`));function v(e,t){if(e.startsWith(`http`))return e;let n=`${_}${e}`;if(t?.params){let r=new URLSearchParams;for(let[e,n]of Object.entries(t.params))n!=null&&r.append(e,String(n));let i=r.toString();i&&(n+=(e.includes(`?`)?`&`:`?`)+i)}return n}function y(e){return typeof FormData<`u`&&e instanceof FormData}async function b(e,t,n,r){let i=v(t,r),a={"Content-Type":`application/json`,...r?.headers},o=u.getState().token;if(o&&(a.Authorization=`Bearer ${o}`),w.defaults.headers)for(let[e,t]of Object.entries(w.defaults.headers))t!==void 0&&!a[e]&&(a[e]=t);let s=u.getState().activeSiteId;s&&!a[`x-zenith-site-id`]&&(a[`x-zenith-site-id`]=s);let c=t.startsWith(`/auth`)||t===`/sites`||t.startsWith(`/sites?`)||t.startsWith(`/sites/`)||t.startsWith(`/uploads`)||t.startsWith(`/health`)||t.startsWith(`/system`)||t.startsWith(`/globals`)||t.startsWith(`/locks`)||t.startsWith(`/presence`)||t.startsWith(`/media`)||t.startsWith(`/versions`)||t.startsWith(`/releases`)||t.startsWith(`/workspaces`);if(!s&&!a[`x-zenith-site-id`]&&!c)throw new d({message:`Missing tenant context: x-zenith-site-id is required for this request. Ensure activeSiteId is set in localStorage before making API calls.`,code:`ERR_NO_TENANT`});if([`post`,`put`,`delete`,`patch`].includes(e.toLowerCase())){let e=g(`XSRF-TOKEN`);e&&(a[`x-csrf-token`]=e)}y(n)&&delete a[`Content-Type`];let l={method:e,headers:a,credentials:`include`};n!==void 0&&(l.body=y(n)?n:JSON.stringify(n));try{return await fetch(i,l).then(async e=>{let t;try{t=await e.json()}catch{t=null}return{data:t,status:e.status,headers:e.headers}})}catch{throw new d({message:`Network Error`,code:`ERR_NETWORK`})}}async function x(e,t,n,r){let i=await b(e,t,n,r);if(i.status===401&&!t.includes(`/login`)){if(f)return new Promise((e,t)=>{p.push({resolve:e,reject:t})}).then(async()=>b(e,t,n,r));f=!0;try{return h(null,await S()),b(e,t,n,r)}catch(e){throw h(e,null),e?.status===401&&!window.location.pathname.includes(`/login`)&&(localStorage.clear(),window.location.href=`/login`),e}finally{f=!1}}if(i.status>=400){let e=i.data?.error?.message||i.data?.message||``;throw i.status===403&&(e.includes(`Access denied to this site`)||e.includes(`site_access`)||e.includes(`Forbidden`))&&(u.getState().setActiveSiteId(``),localStorage.removeItem(`activeSiteId`),window.location.pathname.includes(`/sites`)||(window.location.href=`/sites`)),new d({message:i.data?.message||`Request failed with status ${i.status}`,status:i.status,code:`ERR_HTTP`,response:{data:i.data,status:i.status,headers:i.headers}})}return i}async function S(){let e=await fetch(`${_}/auth/refresh`,{method:`POST`,credentials:`include`,headers:{"Content-Type":`application/json`}});if(!e.ok)throw new d({message:`Token refresh failed`,status:e.status,code:`ERR_REFRESH`});let t=await e.json(),n=t?.token||t?.accessToken;return n&&u.getState().setToken(n),n||``}var C=()=>{if(typeof window<`u`&&window.localStorage){let e=u.getState().activeSiteId;if(e)return e;let t=window.localStorage.getItem(`activeSiteId`);if(t)return u.getState().setActiveSiteId(t),t}return``},w={defaults:{headers:{...C()?{"x-zenith-site-id":C()}:{}}},async get(e,t){return x(`GET`,e,void 0,t)},async post(e,t,n){return x(`POST`,e,t,n)},async patch(e,t,n){return x(`PATCH`,e,t,n)},async put(e,t,n){return x(`PUT`,e,t,n)},async delete(e,t){return x(`DELETE`,e,void 0,t)}},T=e(i(),1),E=r(),D=(0,T.createContext)(void 0),O=({children:e})=>{let[t,n]=(0,T.useState)(localStorage.getItem(`zenith_theme`)||`dark`);return(0,T.useEffect)(()=>{let e=window.document.documentElement;e.classList.remove(`light`,`dark`),e.classList.add(t),localStorage.setItem(`zenith_theme`,t)},[t]),(0,E.jsx)(D.Provider,{value:{theme:t,toggleTheme:()=>{n(e=>e===`dark`?`light`:`dark`)},setTheme:e=>{n(e)}},children:e})},k=()=>{let e=(0,T.useContext)(D);if(!e)throw Error(`useTheme must be used within ThemeProvider`);return e};function A(...e){return o(a(e))}function j(e){return e?typeof e==`string`?e:Array.isArray(e)?e.map(j).filter(Boolean).join(` `):typeof e==`object`?Object.values(e).map(j).filter(Boolean).join(` `):String(e):``}function M(){if(typeof crypto<`u`&&typeof crypto.randomUUID==`function`)try{return crypto.randomUUID()}catch{}return Math.random().toString(36).slice(2,10)+Date.now().toString(36)}export{k as a,O as i,j as n,w as o,M as r,u as s,A as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-fgvbH6CB.js","names":[],"sources":["../../src/lib/tenantStore.ts","../../src/lib/ApiError.ts","../../src/lib/api.ts","../../src/context/ThemeContext.tsx","../../src/lib/utils.ts"],"sourcesContent":["import { create } from 'zustand'\nimport { persist } from 'zustand/middleware'\n\n/**\n * Central store for authentication and multi‑tenant context.\n * It persists to localStorage so the values survive page reloads.\n */\ninterface TenantState {\n token: string | null\n activeSiteId: string | null\n activeSiteName: string | null\n setToken: (token: string | null) => void\n setActiveSiteId: (siteId: string | null, siteName?: string | null) => void\n}\n\nfunction getLegacyToken(): string | null {\n try {\n return localStorage.getItem('token')\n } catch {\n return null\n }\n}\n\nfunction getLegacySiteId(): string | null {\n try {\n return localStorage.getItem('activeSiteId')\n } catch {\n return null\n }\n}\n\nfunction getLegacySiteName(): string | null {\n try {\n return localStorage.getItem('activeSiteName')\n } catch {\n return null\n }\n}\n\nexport const useTenantStore = create<TenantState>()(\n persist(\n (set) => ({\n // First try the persisted store; fall back to legacy localStorage keys\n token: getLegacyToken(),\n activeSiteId: getLegacySiteId(),\n activeSiteName: getLegacySiteName(),\n setToken: (token) => set({ token }),\n setActiveSiteId: (siteId, siteName) =>\n set((state) => ({\n activeSiteId: siteId,\n activeSiteName: siteName ?? state.activeSiteName,\n })),\n }),\n {\n name: 'zenith-tenant-store',\n // SECURITY: Never persist the auth token to localStorage — it must live in\n // memory only. The server uses HttpOnly cookies for actual authentication.\n // Storing the token in localStorage makes it extractable via XSS attacks.\n partialize: (state) => ({\n activeSiteId: state.activeSiteId,\n activeSiteName: state.activeSiteName,\n }),\n }\n )\n)\n","/**\n * Unified, typed error for all API-layer failures.\n *\n * Every `api` call throws `ApiError` on failure, so callers can catch\n * with predictable properties instead of casting `unknown` / `any`.\n *\n * ```ts\n * import api from './api'\n * import { ApiError } from './ApiError'\n *\n * try {\n * await api.post('/collections', data)\n * } catch (err) {\n * if (err instanceof ApiError) {\n * console.error((err as { status?: number }).status, (err as { code?: string }).code, (err instanceof Error ? err.message : String(err)))\n * }\n * }\n * ```\n */\nexport class ApiError extends Error {\n /** HTTP status code, or 0 for network/tenant errors */\n status: number\n /** Machine-readable short code: 'ERR_NETWORK', 'ERR_NO_TENANT', 'ERR_CSRF', etc. */\n code: string\n /** The raw response payload (if any) */\n response?: { data: any; status: number; headers?: Headers }\n\n constructor(opts: {\n message: string\n status?: number\n code?: string\n response?: { data: any; status: number; headers?: Headers }\n }) {\n super(opts.message)\n this.name = 'ApiError'\n this.status = opts.status ?? 0\n this.code = opts.code ?? 'ERR_UNKNOWN'\n this.response = opts.response\n }\n}\n","import { useTenantStore } from './tenantStore'\nimport { ApiError } from './ApiError'\n\nlet isRefreshing = false\nlet failedQueue: { resolve: (value: any) => void; reject: (reason?: any) => void }[] = []\n\nconst processQueue = (error: any, _token: string | null = null) => {\n failedQueue.forEach((prom) => {\n if (error) {\n prom.reject(error)\n } else {\n prom.resolve(_token)\n }\n })\n failedQueue = []\n}\n\n// Wrapped version ensures rejection handler throws don't break the redirect\nconst safeProcessQueue = (error: any, token: string | null) => {\n try {\n processQueue(error, token)\n } catch { /* ignore — queue handlers should not throw */ }\n}\n\nconst getCookie = (name: string): string | null => {\n if (typeof document === 'undefined') return null\n const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'))\n return match ? decodeURIComponent(match[2]) : null\n}\n\n// Security: Never hardcode localhost as a fallback in production.\n// If VITE_API_URL is not set, fall back to '/api/v1' (same-host relative path).\n// If the admin and API are on different hosts, VITE_API_URL must be explicitly configured.\nlet BASE_URL = import.meta.env.VITE_API_URL || '/api/v1'\nif (import.meta.env.PROD && BASE_URL.startsWith('http://') && !BASE_URL.includes('localhost') && !BASE_URL.includes('127.0.0.1')) {\n console.warn('Insecure HTTP API URL used in production. Upgrading to HTTPS.')\n BASE_URL = BASE_URL.replace('http://', 'https://')\n}\n\ninterface ApiResponse<T = any> {\n data: T\n status: number\n headers: Headers\n}\n\nfunction buildUrl(path: string, config?: { params?: any }): string {\n if (path.startsWith('http')) return path\n let url = `${BASE_URL}${path}`\n if (config?.params) {\n const searchParams = new URLSearchParams()\n for (const [key, value] of Object.entries(config.params)) {\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value))\n }\n }\n const qs = searchParams.toString()\n if (qs) url += (path.includes('?') ? '&' : '?') + qs\n }\n return url\n}\n\nfunction isFormData(body: any): body is FormData {\n return typeof FormData !== 'undefined' && body instanceof FormData\n}\n\nasync function fetchWithAuth(method: string, path: string, body?: any, config?: { headers?: Record<string, string>; params?: any }): Promise<ApiResponse<any>> {\n const url = buildUrl(path, config)\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...config?.headers,\n }\n\n const storeToken = useTenantStore.getState().token\n if (storeToken) {\n headers['Authorization'] = `Bearer ${storeToken}`\n }\n\n // Apply default headers set dynamically via api.defaults.headers\n if (apiInstance.defaults.headers) {\n for (const [key, value] of Object.entries(apiInstance.defaults.headers)) {\n if (value !== undefined && !headers[key]) {\n headers[key] = value\n }\n }\n }\n\n // Ensure active site ID is dynamically set on every request to prevent tenant leaking\n const currentSiteId = useTenantStore.getState().activeSiteId\n if (currentSiteId && !headers['x-zenith-site-id']) {\n headers['x-zenith-site-id'] = currentSiteId\n }\n\n // Hard tenant guard — abort any tenant-scoped request missing x-zenith-site-id.\n // Exempt: auth, site listing, uploads, health, and protocol paths that run before\n // a site is selected (globals editor, document locks, collab presence, media proxy).\n const isTenantExempt =\n path.startsWith('/auth') ||\n path === '/sites' ||\n path.startsWith('/sites?') ||\n path.startsWith('/sites/') ||\n path.startsWith('/uploads') ||\n path.startsWith('/health') ||\n path.startsWith('/system') ||\n path.startsWith('/globals') ||\n path.startsWith('/locks') ||\n path.startsWith('/presence') ||\n path.startsWith('/media') ||\n path.startsWith('/versions') ||\n path.startsWith('/releases') ||\n path.startsWith('/workspaces')\n if (!currentSiteId && !headers['x-zenith-site-id'] && !isTenantExempt) {\n throw new ApiError({\n message:\n 'Missing tenant context: x-zenith-site-id is required for this request. ' +\n 'Ensure activeSiteId is set in localStorage before making API calls.',\n code: 'ERR_NO_TENANT',\n })\n }\n\n // Double-Submit Cookie CSRF for mutating requests\n if (['post', 'put', 'delete', 'patch'].includes(method.toLowerCase())) {\n const csrfToken = getCookie('XSRF-TOKEN')\n if (csrfToken) {\n headers['x-csrf-token'] = csrfToken\n }\n }\n\n // Don't set Content-Type for FormData (browser sets it with boundary)\n if (isFormData(body)) {\n delete headers['Content-Type']\n }\n\n const fetchOptions: RequestInit = {\n method,\n headers,\n credentials: 'include' as RequestCredentials,\n }\n if (body !== undefined) {\n fetchOptions.body = isFormData(body) ? body : JSON.stringify(body)\n }\n\n try {\n return await fetch(url, fetchOptions).then(async (response) => {\n let data: any\n try { data = await response.json() } catch { data = null }\n return { data, status: response.status, headers: response.headers }\n })\n } catch {\n // Network error — throw ApiError so callers catch a consistent shape\n throw new ApiError({ message: 'Network Error', code: 'ERR_NETWORK' })\n }\n}\n\nasync function request<T = any>(\n method: string,\n path: string,\n body?: any,\n config?: { headers?: Record<string, string>; params?: any }\n): Promise<ApiResponse<T>> {\n const result = await fetchWithAuth(method, path, body, config)\n\n // Handle 401 with token refresh (skip for login requests, as 401 means invalid credentials)\n if (result.status === 401 && !path.includes('/login')) {\n if (isRefreshing) {\n // Queue this request until refresh completes\n return new Promise<any>((resolve, reject) => {\n failedQueue.push({ resolve, reject })\n }).then(async () => {\n return fetchWithAuth(method, path, body, config) as Promise<ApiResponse<T>>\n })\n }\n\n isRefreshing = true\n try {\n const newToken = await refreshToken()\n safeProcessQueue(null, newToken)\n return fetchWithAuth(method, path, body, config) as Promise<ApiResponse<T>>\n } catch (refreshError: any) {\n safeProcessQueue(refreshError, null)\n if ((refreshError as any)?.status === 401 && !window.location.pathname.includes('/login')) {\n localStorage.clear()\n window.location.href = '/login'\n }\n throw refreshError\n } finally {\n isRefreshing = false\n }\n }\n\n // Throw for non-2xx status codes (ApiError with response payload)\n if (result.status >= 400) {\n const errorMsg = result.data?.error?.message || result.data?.message || '';\n if (result.status === 403 && (errorMsg.includes('Access denied to this site') || errorMsg.includes('site_access') || errorMsg.includes('Forbidden'))) {\n useTenantStore.getState().setActiveSiteId('')\n localStorage.removeItem('activeSiteId')\n if (!window.location.pathname.includes('/sites')) {\n window.location.href = '/sites'\n }\n }\n\n throw new ApiError({\n message: result.data?.message || `Request failed with status ${result.status}`,\n status: result.status,\n code: 'ERR_HTTP',\n response: { data: result.data, status: result.status, headers: result.headers },\n })\n }\n\n return result as ApiResponse<T>\n}\n\nasync function refreshToken(): Promise<string> {\n const res = await fetch(`${BASE_URL}/auth/refresh`, {\n method: 'POST',\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n })\n if (!res.ok) throw new ApiError({ message: 'Token refresh failed', status: res.status, code: 'ERR_REFRESH' })\n const body = await res.json()\n const newToken: string | undefined = body?.token || body?.accessToken\n if (newToken) {\n useTenantStore.getState().setToken(newToken)\n }\n return newToken || ''\n}\n\nconst getInitialSiteId = (): string => {\n if (typeof window !== 'undefined' && window.localStorage) {\n // First try from the store (which persists), fall back to raw localStorage for backward compatibility\n const storeSiteId = useTenantStore.getState().activeSiteId\n if (storeSiteId) return storeSiteId\n const legacySiteId = window.localStorage.getItem('activeSiteId')\n if (legacySiteId) {\n useTenantStore.getState().setActiveSiteId(legacySiteId)\n return legacySiteId\n }\n }\n return ''\n}\n\nconst apiInstance = {\n defaults: {\n headers: {\n ...(getInitialSiteId() ? { 'x-zenith-site-id': getInitialSiteId() } : {})\n } as Record<string, string>,\n },\n\n async get<T = any>(path: string, config?: { params?: any; headers?: Record<string, string> }): Promise<ApiResponse<T>> {\n return request<T>('GET', path, undefined, config)\n },\n\n async post<T = any>(path: string, body?: any, config?: { headers?: Record<string, string>; params?: any }): Promise<ApiResponse<T>> {\n return request<T>('POST', path, body, config)\n },\n\n async patch<T = any>(path: string, body?: any, config?: { headers?: Record<string, string>; params?: any }): Promise<ApiResponse<T>> {\n return request<T>('PATCH', path, body, config)\n },\n\n async put<T = any>(path: string, body?: any, config?: { headers?: Record<string, string>; params?: any }): Promise<ApiResponse<T>> {\n return request<T>('PUT', path, body, config)\n },\n\n async delete<T = any>(path: string, config?: { headers?: Record<string, string>; params?: any }): Promise<ApiResponse<T>> {\n return request<T>('DELETE', path, undefined, config)\n },\n}\n\nexport default apiInstance\n","import React, { createContext, useContext, useEffect, useState } from 'react'\n\ntype Theme = 'light' | 'dark'\n\ninterface ThemeContextType {\n theme: Theme\n toggleTheme: () => void\n setTheme: (theme: Theme) => void\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined)\n\nexport const ThemeProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const [theme, setThemeState] = useState<Theme>(\n (localStorage.getItem('zenith_theme') as Theme) || 'dark'\n )\n\n useEffect(() => {\n const root = window.document.documentElement\n root.classList.remove('light', 'dark')\n root.classList.add(theme)\n localStorage.setItem('zenith_theme', theme)\n }, [theme])\n\n const setTheme = (newTheme: Theme) => {\n setThemeState(newTheme)\n }\n\n const toggleTheme = () => {\n setThemeState(prev => prev === 'dark' ? 'light' : 'dark')\n }\n\n return (\n <ThemeContext.Provider value={{ theme, toggleTheme, setTheme }}>\n {children}\n </ThemeContext.Provider>\n )\n}\n\n \nexport const useTheme = () => {\n const context = useContext(ThemeContext)\n if (!context) throw new Error('useTheme must be used within ThemeProvider')\n return context\n}\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\n/**\n * Utility for merging Tailwind classes with clsx\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n/**\n * Extracts purely text strings from a nested JSON structure (e.g. Zenith blocks)\n * Ideal for passing document content to AI APIs.\n */\nexport function extractTextFromBlocks(content: any): string {\n if (!content) return ''\n if (typeof content === 'string') return content\n if (Array.isArray(content)) {\n return content.map(extractTextFromBlocks).filter(Boolean).join(' ')\n }\n if (typeof content === 'object') {\n return Object.values(content).map(extractTextFromBlocks).filter(Boolean).join(' ')\n }\n return String(content)\n}\n\n/**\n * Generate a stable unique ID. Uses crypto.randomUUID() with a safe fallback\n * for non-HTTPS contexts where the API throws a DOMException.\n */\nexport function uid(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n try {\n return crypto.randomUUID()\n } catch {\n // Fallback for non-secure contexts (http, localhost without HTTPS)\n }\n }\n return Math.random().toString(36).slice(2, 10) + Date.now().toString(36)\n}\n"],"mappings":"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"}
|