@chenpu17/cc-gw 0.8.29 → 0.9.0-beta.0
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/package.json +8 -8
- package/src/cli/dist/index.js +15 -1
- package/src/web/dist/assets/About-DY21fypB.js +1 -0
- package/src/web/dist/assets/ApiKeys-FWkRLPTy.js +1 -0
- package/src/web/dist/assets/{ConfirmDialog-BYuZwgWC.js → ConfirmDialog-CyTpXZeT.js} +1 -1
- package/src/web/dist/assets/Dashboard-FKM-9UNt.js +1 -0
- package/src/web/dist/assets/DialogShell-CM92wXHo.js +1 -0
- package/src/web/dist/assets/Events-x_fSf1mz.js +1 -0
- package/src/web/dist/assets/Help-BMgllYJq.js +4 -0
- package/src/web/dist/assets/Login-DrtDFqbk.js +1 -0
- package/src/web/dist/assets/Logs-18flgbiW.js +1 -0
- package/src/web/dist/assets/PageSection-N34Nu8NO.js +1 -0
- package/src/web/dist/assets/PageState-CFLrRswm.js +1 -0
- package/src/web/dist/assets/{PageToolbar-DATSQ0uI.js → PageToolbar-CWw40AFL.js} +1 -1
- package/src/web/dist/assets/ProvidersWorkbench-aHO5-ApY.js +1 -0
- package/src/web/dist/assets/Settings-iEjCAGgm.js +1 -0
- package/src/web/dist/assets/Setup-B1j2zExa.js +2 -0
- package/src/web/dist/assets/apiKeys-k1jIJuDa.js +1 -0
- package/src/web/dist/assets/app-Citq5KW4.js +61 -0
- package/src/web/dist/assets/badge-DpUlf_NW.js +1 -0
- package/src/web/dist/assets/card-D4YOc5eB.js +1 -0
- package/src/web/dist/assets/{charts-core-CK8TVJro.js → charts-core-BTTtAoo-.js} +1 -1
- package/src/web/dist/assets/{charts-engine-CWjgwbj5.js → charts-engine-CFhx8nba.js} +1 -1
- package/src/web/dist/assets/{charts-react-CmmN-08P.js → charts-react-BQP6-BFp.js} +1 -1
- package/src/web/dist/assets/disclosure-l5qsWhr7.js +1 -0
- package/src/web/dist/assets/{gateway-DhxavTUf.js → gateway-i49olSPp.js} +1 -1
- package/src/web/dist/assets/{global-DA-0y145.js → global-BCehxTGJ.js} +1 -1
- package/src/web/dist/assets/global-CIVH6GQV.css +1 -0
- package/src/web/dist/assets/{i18n-C8tBby0x.js → i18n-PeX9kBVO.js} +1 -1
- package/src/web/dist/assets/label-DSVzZIex.js +1 -0
- package/src/web/dist/assets/landing-W4f2Nx8j.js +17 -0
- package/src/web/dist/assets/metric-card-G1bbpbiR.js +1 -0
- package/src/web/dist/assets/package-B2CgmdJ7.js +1 -0
- package/src/web/dist/assets/popover-QZXvcPr8.js +1 -0
- package/src/web/dist/assets/{query-QCek5MsK.js → query-DZF7K6hv.js} +1 -1
- package/src/web/dist/assets/radix-Bux_1C5J.js +5 -0
- package/src/web/dist/assets/router-BoBrmro7.js +19 -0
- package/src/web/dist/assets/segmented-control-13KTib6k.js +1 -0
- package/src/web/dist/assets/select-sOwKYsgI.js +1 -0
- package/src/web/dist/assets/shared-Cuakym23.js +1 -0
- package/src/web/dist/assets/switch-7PH_rDz6.js +1 -0
- package/src/web/dist/assets/{table-BGY9lGZo.js → table-CVuTTP1s.js} +1 -1
- package/src/web/dist/assets/tabs-UWyz9J_W.js +1 -0
- package/src/web/dist/assets/types-DYz12j32.js +1 -0
- package/src/web/dist/assets/useAppMutation-CEN5Oa4S.js +1 -0
- package/src/web/dist/assets/useEventStream-BYg6oKvQ.js +1 -0
- package/src/web/dist/assets/useProviderForm-DZEYuRhD.js +1 -0
- package/src/web/dist/assets/utils-B_Q3Hhgb.js +3 -0
- package/src/web/dist/assets/vendor-CITafuNQ.js +409 -0
- package/src/web/dist/index.html +15 -9
- package/src/web/dist/landing.html +5 -5
- package/src/web/dist/assets/About-Cm8SdgXs.js +0 -1
- package/src/web/dist/assets/ApiKeys-Buc2uXF3.js +0 -1
- package/src/web/dist/assets/Dashboard-DShNHNh0.js +0 -1
- package/src/web/dist/assets/DialogShell-C0YGDw-Y.js +0 -1
- package/src/web/dist/assets/Events-TZCjFq06.js +0 -1
- package/src/web/dist/assets/Help-Bwzt4gRi.js +0 -4
- package/src/web/dist/assets/Login-DTIGK-8_.js +0 -1
- package/src/web/dist/assets/Logs-CTGZCZ3d.js +0 -1
- package/src/web/dist/assets/ModelManagement-Bu4yl0en.js +0 -1
- package/src/web/dist/assets/PageSection-D4eaagP4.js +0 -1
- package/src/web/dist/assets/PageState-B8pYAtQ5.js +0 -1
- package/src/web/dist/assets/Profiler-B-Lg2yQp.js +0 -1
- package/src/web/dist/assets/RoutingManagement-RFMTV2o6.js +0 -1
- package/src/web/dist/assets/Settings-iT-oQVjg.js +0 -1
- package/src/web/dist/assets/Skeleton-9Z0ltPLO.js +0 -1
- package/src/web/dist/assets/app-CUHICvDo.js +0 -61
- package/src/web/dist/assets/card-DPI7HeM2.js +0 -1
- package/src/web/dist/assets/global-DvELjyJN.css +0 -1
- package/src/web/dist/assets/input-CRm3Lt3O.js +0 -1
- package/src/web/dist/assets/label-D0KXM_V7.js +0 -1
- package/src/web/dist/assets/landing-aXQw-el0.js +0 -17
- package/src/web/dist/assets/live-en-events-DJwaP-WW.png +0 -0
- package/src/web/dist/assets/live-events-D_njD291.png +0 -0
- package/src/web/dist/assets/package-BcqrltRw.js +0 -1
- package/src/web/dist/assets/popover-DVsRdElU.js +0 -1
- package/src/web/dist/assets/queryKeys-DLyolp-A.js +0 -1
- package/src/web/dist/assets/radix-C0Bt6n-I.js +0 -5
- package/src/web/dist/assets/router-D2Fb4U0L.js +0 -19
- package/src/web/dist/assets/select-C4IDwhTu.js +0 -1
- package/src/web/dist/assets/switch-W7ZoAE3i.js +0 -1
- package/src/web/dist/assets/useApiQuery-DhdisbOK.js +0 -1
- package/src/web/dist/assets/useAppMutation-CJrALOdE.js +0 -1
- package/src/web/dist/assets/useModelManagementState-DFFjS9uq.js +0 -1
- package/src/web/dist/assets/utils-DNPbJsD2.js +0 -3
- package/src/web/dist/assets/vendor-DdPBfMMb.js +0 -437
|
@@ -1 +0,0 @@
|
|
|
1
|
-
*,:before,:after{--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: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,SF Pro Display,ui-sans-serif,system-ui,-apple-system,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:Inter,SF Mono,IBM Plex Mono,JetBrains Mono,ui-monospace,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,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{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 220 14% 96%;--foreground: 224 71% 4%;--card: 0 0% 100%;--card-foreground: 224 71% 4%;--popover: 0 0% 100%;--popover-foreground: 224 71% 4%;--primary: 234 89% 54%;--primary-foreground: 0 0% 100%;--secondary: 220 13% 95%;--secondary-foreground: 224 71% 4%;--muted: 220 13% 91%;--muted-foreground: 220 9% 46%;--accent: 220 13% 95%;--accent-foreground: 234 89% 54%;--destructive: 0 84% 60%;--destructive-foreground: 0 0% 100%;--border: 220 13% 91%;--input: 220 13% 91%;--ring: 234 89% 54%;--radius: .5rem;--success: 152 69% 31%;--success-bg: 152 68% 96%;--warning: 38 92% 50%;--warning-bg: 48 96% 96%;--error: 0 84% 60%;--error-bg: 0 86% 97%;--info: 234 89% 54%;--info-bg: 234 85% 97%;--chart-1: 234 89% 54%;--chart-2: 152 69% 31%;--chart-3: 38 92% 50%;--chart-4: 0 84% 60%;--chart-5: 280 67% 51%;--surface-shadow: 0 1px 3px rgba(0, 0, 0, .02), 0 4px 12px rgba(0, 0, 0, .04);--surface-shadow-lg: 0 2px 6px rgba(0, 0, 0, .03), 0 8px 24px rgba(0, 0, 0, .06);--surface-border: rgba(0, 0, 0, .06)}.dark,[data-theme=dark]{--background: 224 71% 4%;--foreground: 210 20% 98%;--card: 224 48% 8%;--card-foreground: 210 20% 98%;--popover: 224 48% 8%;--popover-foreground: 210 20% 98%;--primary: 234 89% 74%;--primary-foreground: 224 71% 4%;--secondary: 215 28% 14%;--secondary-foreground: 210 20% 98%;--muted: 215 28% 17%;--muted-foreground: 218 11% 58%;--accent: 215 28% 17%;--accent-foreground: 234 89% 74%;--destructive: 0 72% 65%;--destructive-foreground: 0 0% 100%;--border: 215 28% 17%;--input: 215 28% 17%;--ring: 234 89% 74%;--chart-1: 234 89% 74%;--chart-2: 152 60% 50%;--chart-3: 38 92% 60%;--chart-4: 0 72% 65%;--chart-5: 280 67% 65%;--surface-shadow: 0 1px 3px rgba(0, 0, 0, .3), 0 1px 2px rgba(0, 0, 0, .2);--surface-shadow-lg: 0 4px 12px rgba(0, 0, 0, .4), 0 1px 3px rgba(0, 0, 0, .2);--surface-border: rgba(255, 255, 255, .08)}*{border-color:hsl(var(--border))}html,body,#root{height:100%;width:100%;overflow-x:hidden}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:Inter,SF Pro Display,PingFang SC,Noto Sans SC,system-ui,-apple-system,sans-serif;font-feature-settings:"rlig" 1,"calt" 1,"cv11" 1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-10{left:2.5rem;right:2.5rem}.inset-y-0{top:0;bottom:0}.-bottom-40{bottom:-10rem}.-right-1{right:-.25rem}.-top-1{top:-.25rem}.-top-10{top:-2.5rem}.-top-40{top:-10rem}.bottom-4{bottom:1rem}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:.5rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-3{right:.75rem}.right-4{right:1rem}.right-6{right:1.5rem}.top-0{top:0}.top-20{top:5rem}.top-3{top:.75rem}.top-4{top:1rem}.top-6{top:1.5rem}.top-\[-3px\]{top:-3px}.top-\[-6px\]{top:-6px}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.m-4{margin:1rem}.m-5{margin:1.25rem}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-2\.5{margin-bottom:.625rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.ml-1{margin-left:.25rem}.ml-3{margin-left:.75rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.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-14{margin-top:3.5rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-7{margin-top:1.75rem}.mt-8{margin-top:2rem}.mt-9{margin-top:2.25rem}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.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}.hidden{display:none}.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-2{height:.5rem}.h-2\.5{height:.625rem}.h-20{height:5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[1px\]{height:1px}.h-\[280px\]{height:280px}.h-\[320px\]{height:320px}.h-\[40vh\]{height:40vh}.h-\[460px\]{height:460px}.h-\[640px\]{height:640px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-40{max-height:10rem}.max-h-56{max-height:14rem}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.max-h-80{max-height:20rem}.max-h-96{max-height:24rem}.max-h-\[240px\]{max-height:240px}.max-h-\[420px\]{max-height:420px}.max-h-\[78vh\]{max-height:78vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[min\(28rem\,var\(--radix-popover-content-available-height\)\)\]{max-height:min(28rem,var(--radix-popover-content-available-height))}.max-h-screen{max-height:100vh}.min-h-0{min-height:0px}.min-h-10{min-height:2.5rem}.min-h-\[116px\]{min-height:116px}.min-h-\[120px\]{min-height:120px}.min-h-\[160px\]{min-height:160px}.min-h-\[180px\]{min-height:180px}.min-h-\[188px\]{min-height:188px}.min-h-\[200px\]{min-height:200px}.min-h-\[220px\]{min-height:220px}.min-h-\[240px\]{min-height:240px}.min-h-\[260px\]{min-height:260px}.min-h-\[280px\]{min-height:280px}.min-h-\[320px\]{min-height:320px}.min-h-\[76px\]{min-height:76px}.min-h-\[80px\]{min-height:80px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.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-20{width:5rem}.w-24{width:6rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-52{width:13rem}.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-\[1100px\]{width:1100px}.w-\[132px\]{width:132px}.w-\[168px\]{width:168px}.w-\[1px\]{width:1px}.w-\[220px\]{width:220px}.w-\[3px\]{width:3px}.w-\[440px\]{width:440px}.w-\[80px\]{width:80px}.w-\[900px\]{width:900px}.w-\[min\(96vw\,1200px\)\]{width:min(96vw,1200px)}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.min-w-0{min-width:0px}.min-w-10{min-width:2.5rem}.min-w-14{min-width:3.5rem}.min-w-5{min-width:1.25rem}.min-w-\[1480px\]{min-width:1480px}.min-w-\[2rem\]{min-width:2rem}.min-w-\[8rem\]{min-width:8rem}.min-w-\[980px\]{min-width:980px}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-\[100px\]{max-width:100px}.max-w-\[1200px\]{max-width:1200px}.max-w-\[120px\]{max-width:120px}.max-w-\[130px\]{max-width:130px}.max-w-\[180px\]{max-width:180px}.max-w-\[220px\]{max-width:220px}.max-w-\[90px\]{max-width:90px}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1\/2,.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(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)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize{resize:both}.list-none{list-style-type:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.grid-cols-\[minmax\(0\,1fr\)_auto_minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr) auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.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:0px}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-10{gap:2.5rem}.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-px{gap:1px}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-2{row-gap:.5rem}.gap-y-3{row-gap:.75rem}.gap-y-5{row-gap:1.25rem}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-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-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-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.625rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem * 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))}.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-border\/50>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .5)}.divide-slate-200>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(226 232 240 / var(--tw-divide-opacity, 1))}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[0\.75rem\]{border-radius:.75rem}.rounded-\[0\.85rem\]{border-radius:.85rem}.rounded-\[0\.8rem\]{border-radius:.8rem}.rounded-\[0\.95rem\]{border-radius:.95rem}.rounded-\[0\.9rem\]{border-radius:.9rem}.rounded-\[1\.05rem\]{border-radius:1.05rem}.rounded-\[1\.15rem\]{border-radius:1.15rem}.rounded-\[1\.1rem\]{border-radius:1.1rem}.rounded-\[1\.25rem\]{border-radius:1.25rem}.rounded-\[1\.2rem\]{border-radius:1.2rem}.rounded-\[1\.35rem\]{border-radius:1.35rem}.rounded-\[1rem\]{border-radius:1rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-\[color\:var\(--surface-border\)\]{border-color:var(--surface-border)}.border-\[hsl\(var\(--success\)\/0\.2\)\]{border-color:hsl(var(--success)/.2)}.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-300\/50{border-color:#fcd34d80}.border-amber-400{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.border-border{border-color:hsl(var(--border))}.border-border\/30{border-color:hsl(var(--border) / .3)}.border-border\/45{border-color:hsl(var(--border) / .45)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-border\/55{border-color:hsl(var(--border) / .55)}.border-border\/60{border-color:hsl(var(--border) / .6)}.border-border\/65{border-color:hsl(var(--border) / .65)}.border-border\/70{border-color:hsl(var(--border) / .7)}.border-cyan-200{--tw-border-opacity: 1;border-color:rgb(165 243 252 / var(--tw-border-opacity, 1))}.border-destructive\/15{border-color:hsl(var(--destructive) / .15)}.border-destructive\/20{border-color:hsl(var(--destructive) / .2)}.border-destructive\/25{border-color:hsl(var(--destructive) / .25)}.border-destructive\/30{border-color:hsl(var(--destructive) / .3)}.border-destructive\/40{border-color:hsl(var(--destructive) / .4)}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-emerald-200{--tw-border-opacity: 1;border-color:rgb(167 243 208 / var(--tw-border-opacity, 1))}.border-emerald-200\/70{border-color:#a7f3d0b3}.border-emerald-300{--tw-border-opacity: 1;border-color:rgb(110 231 183 / var(--tw-border-opacity, 1))}.border-indigo-200{--tw-border-opacity: 1;border-color:rgb(199 210 254 / var(--tw-border-opacity, 1))}.border-indigo-500\/30{border-color:#6366f14d}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/10{border-color:hsl(var(--primary) / .1)}.border-primary\/15{border-color:hsl(var(--primary) / .15)}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / 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-300{--tw-border-opacity: 1;border-color:rgb(253 164 175 / var(--tw-border-opacity, 1))}.border-sky-200{--tw-border-opacity: 1;border-color:rgb(186 230 253 / var(--tw-border-opacity, 1))}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-200\/70{border-color:#e2e8f0b3}.border-slate-200\/80{border-color:#e2e8f0cc}.border-transparent{border-color:transparent}.border-violet-200{--tw-border-opacity: 1;border-color:rgb(221 214 254 / var(--tw-border-opacity, 1))}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.border-white\/10{border-color:#ffffff1a}.border-white\/15{border-color:#ffffff26}.border-white\/20{border-color:#fff3}.border-white\/45{border-color:#ffffff73}.border-white\/70{border-color:#ffffffb3}.border-white\/80{border-color:#fffc}.border-l-amber-500{--tw-border-opacity: 1;border-left-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.border-l-destructive{border-left-color:hsl(var(--destructive))}.border-l-emerald-500{--tw-border-opacity: 1;border-left-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#1E1E2E\]{--tw-bg-opacity: 1;background-color:rgb(30 30 46 / var(--tw-bg-opacity, 1))}.bg-\[hsl\(var\(--success-bg\)\)\]{background-color:hsl(var(--success-bg))}.bg-accent{background-color:hsl(var(--accent))}.bg-accent\/90{background-color:hsl(var(--accent) / .9)}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-200{--tw-bg-opacity: 1;background-color:rgb(253 230 138 / var(--tw-bg-opacity, 1))}.bg-amber-300\/70{background-color:#fcd34db3}.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-background{background-color:hsl(var(--background))}.bg-background\/50{background-color:hsl(var(--background) / .5)}.bg-background\/60{background-color:hsl(var(--background) / .6)}.bg-background\/70{background-color:hsl(var(--background) / .7)}.bg-background\/80{background-color:hsl(var(--background) / .8)}.bg-background\/85{background-color:hsl(var(--background) / .85)}.bg-background\/95{background-color:hsl(var(--background) / .95)}.bg-black\/10{background-color:#0000001a}.bg-blue-200{--tw-bg-opacity: 1;background-color:rgb(191 219 254 / var(--tw-bg-opacity, 1))}.bg-border{background-color:hsl(var(--border))}.bg-border\/55{background-color:hsl(var(--border) / .55)}.bg-card{background-color:hsl(var(--card))}.bg-card\/70{background-color:hsl(var(--card) / .7)}.bg-card\/80{background-color:hsl(var(--card) / .8)}.bg-card\/85{background-color:hsl(var(--card) / .85)}.bg-card\/90{background-color:hsl(var(--card) / .9)}.bg-card\/95{background-color:hsl(var(--card) / .95)}.bg-cyan-50\/60{background-color:#ecfeff99}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-destructive\/5{background-color:hsl(var(--destructive) / .05)}.bg-emerald-100{--tw-bg-opacity: 1;background-color:rgb(209 250 229 / var(--tw-bg-opacity, 1))}.bg-emerald-400{--tw-bg-opacity: 1;background-color:rgb(52 211 153 / var(--tw-bg-opacity, 1))}.bg-emerald-400\/70{background-color:#34d399b3}.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-500\/15{background-color:#10b98126}.bg-indigo-100{--tw-bg-opacity: 1;background-color:rgb(224 231 255 / var(--tw-bg-opacity, 1))}.bg-indigo-50{--tw-bg-opacity: 1;background-color:rgb(238 242 255 / var(--tw-bg-opacity, 1))}.bg-indigo-50\/60{background-color:#eef2ff99}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground\/70{background-color:hsl(var(--muted-foreground) / .7)}.bg-muted\/30{background-color:hsl(var(--muted) / .3)}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-muted\/60{background-color:hsl(var(--muted) / .6)}.bg-pink-100{--tw-bg-opacity: 1;background-color:rgb(252 231 243 / var(--tw-bg-opacity, 1))}.bg-popover{background-color:hsl(var(--popover))}.bg-popover\/95{background-color:hsl(var(--popover) / .95)}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/15{background-color:hsl(var(--primary) / .15)}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.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-rose-400\/70{background-color:#fb7185b3}.bg-rose-50{--tw-bg-opacity: 1;background-color:rgb(255 241 242 / var(--tw-bg-opacity, 1))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-secondary\/20{background-color:hsl(var(--secondary) / .2)}.bg-secondary\/30{background-color:hsl(var(--secondary) / .3)}.bg-secondary\/35{background-color:hsl(var(--secondary) / .35)}.bg-secondary\/40{background-color:hsl(var(--secondary) / .4)}.bg-secondary\/45{background-color:hsl(var(--secondary) / .45)}.bg-secondary\/50{background-color:hsl(var(--secondary) / .5)}.bg-secondary\/55{background-color:hsl(var(--secondary) / .55)}.bg-secondary\/60{background-color:hsl(var(--secondary) / .6)}.bg-secondary\/65{background-color:hsl(var(--secondary) / .65)}.bg-secondary\/70{background-color:hsl(var(--secondary) / .7)}.bg-secondary\/80{background-color:hsl(var(--secondary) / .8)}.bg-sky-50{--tw-bg-opacity: 1;background-color:rgb(240 249 255 / var(--tw-bg-opacity, 1))}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-200{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.bg-slate-200\/70{background-color:#e2e8f0b3}.bg-slate-50{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.bg-slate-50\/60{background-color:#f8fafc99}.bg-slate-900\/60{background-color:#0f172a99}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-slate-950\/95{background-color:#020617f2}.bg-transparent{background-color:transparent}.bg-violet-100{--tw-bg-opacity: 1;background-color:rgb(237 233 254 / var(--tw-bg-opacity, 1))}.bg-violet-50{--tw-bg-opacity: 1;background-color:rgb(245 243 255 / var(--tw-bg-opacity, 1))}.bg-violet-500{--tw-bg-opacity: 1;background-color:rgb(139 92 246 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/10{background-color:#ffffff1a}.bg-white\/5{background-color:#ffffff0d}.bg-white\/70{background-color:#ffffffb3}.bg-white\/85{background-color:#ffffffd9}.bg-\[linear-gradient\(135deg\,hsl\(var\(--accent\)\/0\.55\)_0\%\,rgba\(255\,255\,255\,0\.7\)_100\%\)\]{background-image:linear-gradient(135deg,hsl(var(--accent)/.55),#ffffffb3)}.bg-\[linear-gradient\(135deg\,hsl\(var\(--primary\)\/0\.08\)\,hsl\(var\(--accent\)\/0\.72\)\)\]{background-image:linear-gradient(135deg,hsl(var(--primary)/.08),hsl(var(--accent)/.72))}.bg-\[linear-gradient\(135deg\,hsl\(var\(--primary\)\/0\.1\)\,rgba\(255\,255\,255\,0\.78\)\)\]{background-image:linear-gradient(135deg,hsl(var(--primary)/.1),#ffffffc7)}.bg-\[linear-gradient\(135deg\,hsl\(var\(--primary\)\/0\.1\)\,rgba\(255\,255\,255\,0\.95\)_46\%\,rgba\(236\,253\,245\,0\.74\)\)\]{background-image:linear-gradient(135deg,hsl(var(--primary)/.1),#fffffff2 46%,#ecfdf5bd)}.bg-\[linear-gradient\(135deg\,rgba\(255\,255\,255\,0\.98\)\,hsl\(var\(--primary\)\/0\.08\)\)\]{background-image:linear-gradient(135deg,#fffffffa,hsl(var(--primary)/.08))}.bg-\[linear-gradient\(135deg\,rgba\(255\,255\,255\,0\.98\)\,hsl\(var\(--primary\)\/0\.08\)\,rgba\(236\,253\,245\,0\.8\)\)\]{background-image:linear-gradient(135deg,#fffffffa,hsl(var(--primary)/.08),#ecfdf5cc)}.bg-\[linear-gradient\(145deg\,rgba\(236\,253\,245\,0\.98\)_0\%\,rgba\(255\,255\,255\,0\.94\)_100\%\)\]{background-image:linear-gradient(145deg,#ecfdf5fa,#fffffff0)}.bg-\[linear-gradient\(145deg\,rgba\(254\,242\,242\,0\.98\)_0\%\,rgba\(255\,255\,255\,0\.94\)_100\%\)\]{background-image:linear-gradient(145deg,#fef2f2fa,#fffffff0)}.bg-\[linear-gradient\(180deg\,rgba\(255\,255\,255\,0\.97\)_0\%\,rgba\(250\,251\,253\,0\.94\)_100\%\)\]{background-image:linear-gradient(180deg,#fffffff7,#fafbfdf0)}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-amber-500\/20{--tw-gradient-from: rgb(245 158 11 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-500\/20{--tw-gradient-from: rgb(6 182 212 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 182 212 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-emerald-100{--tw-gradient-from: #d1fae5 var(--tw-gradient-from-position);--tw-gradient-to: rgb(209 250 229 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-emerald-50{--tw-gradient-from: #ecfdf5 var(--tw-gradient-from-position);--tw-gradient-to: rgb(236 253 245 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-emerald-500\/20{--tw-gradient-from: rgb(16 185 129 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(16 185 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-indigo-100{--tw-gradient-from: #e0e7ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(224 231 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-indigo-300{--tw-gradient-from: #a5b4fc var(--tw-gradient-from-position);--tw-gradient-to: rgb(165 180 252 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-indigo-50{--tw-gradient-from: #eef2ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(238 242 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-indigo-500\/10{--tw-gradient-from: rgb(99 102 241 / .1) var(--tw-gradient-from-position);--tw-gradient-to: rgb(99 102 241 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-indigo-500\/30{--tw-gradient-from: rgb(99 102 241 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(99 102 241 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-slate-50{--tw-gradient-from: #f8fafc var(--tw-gradient-from-position);--tw-gradient-to: rgb(248 250 252 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-violet-100{--tw-gradient-from: #ede9fe var(--tw-gradient-from-position);--tw-gradient-to: rgb(237 233 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-violet-300{--tw-gradient-to: rgb(196 181 253 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #c4b5fd var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-violet-500\/25{--tw-gradient-to: rgb(139 92 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(139 92 246 / .25) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-white{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #fff var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-cyan-100{--tw-gradient-to: #cffafe var(--tw-gradient-to-position)}.to-cyan-300{--tw-gradient-to: #67e8f9 var(--tw-gradient-to-position)}.to-cyan-50{--tw-gradient-to: #ecfeff var(--tw-gradient-to-position)}.to-cyan-500\/10{--tw-gradient-to: rgb(6 182 212 / .1) var(--tw-gradient-to-position)}.to-cyan-500\/30{--tw-gradient-to: rgb(6 182 212 / .3) var(--tw-gradient-to-position)}.to-fuchsia-100{--tw-gradient-to: #fae8ff var(--tw-gradient-to-position)}.to-indigo-500\/20{--tw-gradient-to: rgb(99 102 241 / .2) var(--tw-gradient-to-position)}.to-rose-500\/20{--tw-gradient-to: rgb(244 63 94 / .2) var(--tw-gradient-to-position)}.to-teal-500\/20{--tw-gradient-to: rgb(20 184 166 / .2) var(--tw-gradient-to-position)}.to-white{--tw-gradient-to: #fff var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.fill-amber-50{fill:#fffbeb}.fill-amber-500{fill:#f59e0b}.fill-amber-700{fill:#b45309}.fill-background{fill:hsl(var(--background))}.fill-current{fill:currentColor}.fill-emerald-400\/40{fill:#34d39966}.fill-emerald-500{fill:#10b981}.fill-emerald-700{fill:#047857}.fill-foreground\/\[0\.06\]{fill:hsl(var(--foreground) / .06)}.fill-indigo-50{fill:#eef2ff}.fill-indigo-500{fill:#6366f1}.fill-indigo-700{fill:#4338ca}.fill-muted{fill:hsl(var(--muted))}.fill-muted-foreground{fill:hsl(var(--muted-foreground))}.fill-muted-foreground\/60{fill:hsl(var(--muted-foreground) / .6)}.fill-rose-500{fill:#f43f5e}.fill-rose-700{fill:#be123c}.fill-transparent{fill:transparent}.fill-violet-400\/40{fill:#a78bfa66}.fill-violet-50{fill:#f5f3ff}.fill-violet-500{fill:#8b5cf6}.fill-violet-700{fill:#6d28d9}.stroke-amber-300{stroke:#fcd34d}.stroke-amber-500{stroke:#f59e0b}.stroke-border{stroke:hsl(var(--border))}.stroke-emerald-500{stroke:#10b981}.stroke-indigo-300{stroke:#a5b4fc}.stroke-indigo-500{stroke:#6366f1}.stroke-rose-500{stroke:#f43f5e}.stroke-violet-300{stroke:#c4b5fd}.stroke-violet-500{stroke:#8b5cf6}.p-0{padding:0}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.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-7{padding:1.75rem}.p-8{padding:2rem}.p-\[1px\]{padding:1px}.px-0{padding-left:0;padding-right:0}.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-3\.5{padding-left:.875rem;padding-right:.875rem}.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}.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}.pb-0{padding-bottom:0}.pb-1{padding-bottom:.25rem}.pb-10{padding-bottom:2.5rem}.pb-2\.5{padding-bottom:.625rem}.pb-24{padding-bottom:6rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pb-6{padding-bottom:1.5rem}.pl-4{padding-left:1rem}.pl-8{padding-left:2rem}.pr-14{padding-right:3.5rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-2{padding-top:.5rem}.pt-20{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}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:Inter,SF Mono,IBM Plex Mono,JetBrains Mono,ui-monospace,monospace}.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-\[0\.95em\]{font-size:.95em}.text-\[1\.85rem\]{font-size:1.85rem}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[2\.4rem\]{font-size:2.4rem}.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-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.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-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-8{line-height:2rem}.leading-\[1\.05\]{line-height:1.05}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-\[-0\.01em\]{letter-spacing:-.01em}.tracking-\[-0\.02em\]{letter-spacing:-.02em}.tracking-\[-0\.035em\]{letter-spacing:-.035em}.tracking-\[-0\.03em\]{letter-spacing:-.03em}.tracking-\[0\.08em\]{letter-spacing:.08em}.tracking-\[0\.14em\]{letter-spacing:.14em}.tracking-\[0\.16em\]{letter-spacing:.16em}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-\[0\.22em\]{letter-spacing:.22em}.tracking-\[0\.34em\]{letter-spacing:.34em}.tracking-\[0\.3em\]{letter-spacing:.3em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-\[hsl\(var\(--success\)\/1\)\]{color:hsl(var(--success)/1)}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-amber-100{--tw-text-opacity: 1;color:rgb(254 243 199 / 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-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-amber-900{--tw-text-opacity: 1;color:rgb(120 53 15 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-border{color:hsl(var(--border))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-cyan-600{--tw-text-opacity: 1;color:rgb(8 145 178 / var(--tw-text-opacity, 1))}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-300{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-700{--tw-text-opacity: 1;color:rgb(4 120 87 / var(--tw-text-opacity, 1))}.text-emerald-800{--tw-text-opacity: 1;color:rgb(6 95 70 / var(--tw-text-opacity, 1))}.text-emerald-950{--tw-text-opacity: 1;color:rgb(2 44 34 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/50{color:hsl(var(--foreground) / .5)}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-indigo-300{--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.text-indigo-600{--tw-text-opacity: 1;color:rgb(79 70 229 / var(--tw-text-opacity, 1))}.text-indigo-700{--tw-text-opacity: 1;color:rgb(67 56 202 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/50{color:hsl(var(--muted-foreground) / .5)}.text-muted-foreground\/60{color:hsl(var(--muted-foreground) / .6)}.text-muted-foreground\/70{color:hsl(var(--muted-foreground) / .7)}.text-muted-foreground\/75{color:hsl(var(--muted-foreground) / .75)}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-pink-700{--tw-text-opacity: 1;color:rgb(190 24 93 / var(--tw-text-opacity, 1))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-primary\/70{color:hsl(var(--primary) / .7)}.text-primary\/75{color:hsl(var(--primary) / .75)}.text-primary\/80{color:hsl(var(--primary) / .8)}.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-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-rose-500{--tw-text-opacity: 1;color:rgb(244 63 94 / var(--tw-text-opacity, 1))}.text-rose-600{--tw-text-opacity: 1;color:rgb(225 29 72 / var(--tw-text-opacity, 1))}.text-rose-700{--tw-text-opacity: 1;color:rgb(190 18 60 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sky-700{--tw-text-opacity: 1;color:rgb(3 105 161 / var(--tw-text-opacity, 1))}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-700{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.text-slate-950{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-violet-600{--tw-text-opacity: 1;color:rgb(124 58 237 / var(--tw-text-opacity, 1))}.text-violet-700{--tw-text-opacity: 1;color:rgb(109 40 217 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.line-through{text-decoration-line:line-through}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.accent-\[hsl\(var\(--primary\)\)\],.accent-primary{accent-color:hsl(var(--primary))}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-45{opacity:.45}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-\[0\.18\]{opacity:.18}.shadow-\[0_0_10px_rgba\(52\,211\,153\,0\.8\)\]{--tw-shadow: 0 0 10px rgba(52,211,153,.8);--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_10px_24px_-22px_rgba\(15\,23\,42\,0\.28\)\]{--tw-shadow: 0 10px 24px -22px rgba(15,23,42,.28);--tw-shadow-colored: 0 10px 24px -22px 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_10px_30px_-18px_rgba\(79\,70\,229\,0\.4\)\]{--tw-shadow: 0 10px 30px -18px rgba(79,70,229,.4);--tw-shadow-colored: 0 10px 30px -18px 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_12px_28px_-24px_rgba\(15\,23\,42\,0\.32\)\]{--tw-shadow: 0 12px 28px -24px rgba(15,23,42,.32);--tw-shadow-colored: 0 12px 28px -24px 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_12px_28px_rgba\(15\,23\,42\,0\.06\)\]{--tw-shadow: 0 12px 28px rgba(15,23,42,.06);--tw-shadow-colored: 0 12px 28px 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_14px_32px_-30px_rgba\(15\,23\,42\,0\.2\)\]{--tw-shadow: 0 14px 32px -30px rgba(15,23,42,.2);--tw-shadow-colored: 0 14px 32px -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-\[0_14px_34px_-28px_rgba\(15\,23\,42\,0\.3\)\]{--tw-shadow: 0 14px 34px -28px rgba(15,23,42,.3);--tw-shadow-colored: 0 14px 34px -28px 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_14px_34px_-30px_rgba\(59\,130\,246\,0\.32\)\]{--tw-shadow: 0 14px 34px -30px rgba(59,130,246,.32);--tw-shadow-colored: 0 14px 34px -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-\[0_16px_40px_-34px_rgba\(15\,23\,42\,0\.18\)\]{--tw-shadow: 0 16px 40px -34px rgba(15,23,42,.18);--tw-shadow-colored: 0 16px 40px -34px 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_18px_38px_-34px_rgba\(15\,23\,42\,0\.2\)\]{--tw-shadow: 0 18px 38px -34px rgba(15,23,42,.2);--tw-shadow-colored: 0 18px 38px -34px 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_18px_42px_-36px_rgba\(15\,23\,42\,0\.24\)\]{--tw-shadow: 0 18px 42px -36px rgba(15,23,42,.24);--tw-shadow-colored: 0 18px 42px -36px 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_18px_42px_-38px_rgba\(15\,23\,42\,0\.22\)\]{--tw-shadow: 0 18px 42px -38px rgba(15,23,42,.22);--tw-shadow-colored: 0 18px 42px -38px 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_18px_42px_rgba\(15\,23\,42\,0\.06\)\]{--tw-shadow: 0 18px 42px rgba(15,23,42,.06);--tw-shadow-colored: 0 18px 42px 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_20px_48px_-40px_rgba\(15\,23\,42\,0\.24\)\]{--tw-shadow: 0 20px 48px -40px rgba(15,23,42,.24);--tw-shadow-colored: 0 20px 48px -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_20px_48px_-42px_rgba\(15\,23\,42\,0\.24\)\]{--tw-shadow: 0 20px 48px -42px rgba(15,23,42,.24);--tw-shadow-colored: 0 20px 48px -42px 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_20px_48px_-42px_rgba\(15\,23\,42\,0\.26\)\]{--tw-shadow: 0 20px 48px -42px rgba(15,23,42,.26);--tw-shadow-colored: 0 20px 48px -42px 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_20px_50px_-42px_rgba\(15\,23\,42\,0\.24\)\]{--tw-shadow: 0 20px 50px -42px rgba(15,23,42,.24);--tw-shadow-colored: 0 20px 50px -42px 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_22px_56px_-40px_rgba\(15\,23\,42\,0\.24\)\]{--tw-shadow: 0 22px 56px -40px rgba(15,23,42,.24);--tw-shadow-colored: 0 22px 56px -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_22px_56px_-46px_rgba\(15\,23\,42\,0\.22\)\]{--tw-shadow: 0 22px 56px -46px rgba(15,23,42,.22);--tw-shadow-colored: 0 22px 56px -46px 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_22px_56px_-46px_rgba\(15\,23\,42\,0\.24\)\]{--tw-shadow: 0 22px 56px -46px rgba(15,23,42,.24);--tw-shadow-colored: 0 22px 56px -46px 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_30px_80px_-30px_rgba\(15\,23\,42\,0\.45\)\]{--tw-shadow: 0 30px 80px -30px rgba(15,23,42,.45);--tw-shadow-colored: 0 30px 80px -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-\[0_3px_10px_rgba\(15\,23\,42\,0\.18\)\]{--tw-shadow: 0 3px 10px rgba(15,23,42,.18);--tw-shadow-colored: 0 3px 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_40px_100px_-40px_rgba\(15\,23\,42\,0\.5\)\]{--tw-shadow: 0 40px 100px -40px rgba(15,23,42,.5);--tw-shadow-colored: 0 40px 100px -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_40px_120px_-20px_rgba\(2\,6\,23\,0\.8\)\]{--tw-shadow: 0 40px 120px -20px rgba(2,6,23,.8);--tw-shadow-colored: 0 40px 120px -20px 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-\[inset_0_0_0_1px_rgba\(15\,23\,42\,0\.06\)\]{--tw-shadow: inset 0 0 0 1px rgba(15,23,42,.06);--tw-shadow-colored: inset 0 0 0 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-\[inset_0_1px_0_rgba\(255\,255\,255\,0\.55\)\]{--tw-shadow: inset 0 1px 0 rgba(255,255,255,.55);--tw-shadow-colored: inset 0 1px 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-\[inset_0_1px_0_rgba\(255\,255\,255\,0\.58\)\]{--tw-shadow: inset 0 1px 0 rgba(255,255,255,.58);--tw-shadow-colored: inset 0 1px 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-\[inset_0_1px_0_rgba\(255\,255\,255\,0\.6\)\]{--tw-shadow: inset 0 1px 0 rgba(255,255,255,.6);--tw-shadow-colored: inset 0 1px 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-\[inset_0_1px_0_rgba\(255\,255\,255\,0\.62\)\]{--tw-shadow: inset 0 1px 0 rgba(255,255,255,.62);--tw-shadow-colored: inset 0 1px 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 rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--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-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;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 rgb(0 0 0 / .05);--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 rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--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\(--surface-shadow\)\]{--tw-shadow-color: var(--surface-shadow);--tw-shadow: var(--tw-shadow-colored)}.shadow-\[var\(--surface-shadow-lg\)\]{--tw-shadow-color: var(--surface-shadow-lg);--tw-shadow: var(--tw-shadow-colored)}.shadow-indigo-500\/20{--tw-shadow-color: rgb(99 102 241 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--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)}.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-inset{--tw-ring-inset: inset}.ring-amber-200\/50{--tw-ring-color: rgb(253 230 138 / .5)}.ring-destructive\/20{--tw-ring-color: hsl(var(--destructive) / .2)}.ring-destructive\/30{--tw-ring-color: hsl(var(--destructive) / .3)}.ring-indigo-100{--tw-ring-opacity: 1;--tw-ring-color: rgb(224 231 255 / var(--tw-ring-opacity, 1))}.ring-indigo-500\/10{--tw-ring-color: rgb(99 102 241 / .1)}.ring-indigo-500\/15{--tw-ring-color: rgb(99 102 241 / .15)}.ring-primary\/10{--tw-ring-color: hsl(var(--primary) / .1)}.ring-ring{--tw-ring-color: hsl(var(--ring))}.ring-slate-200{--tw-ring-opacity: 1;--tw-ring-color: rgb(226 232 240 / var(--tw-ring-opacity, 1))}.ring-violet-500\/35{--tw-ring-color: rgb(139 92 246 / .35)}.ring-white{--tw-ring-opacity: 1;--tw-ring-color: rgb(255 255 255 / var(--tw-ring-opacity, 1))}.ring-white\/5{--tw-ring-color: rgb(255 255 255 / .05)}.ring-white\/70{--tw-ring-color: rgb(255 255 255 / .7)}.ring-offset-2{--tw-ring-offset-width: 2px}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.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)}.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);-webkit-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: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);-webkit-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: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);-webkit-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: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-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in,.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.slide-in-from-left{--tw-enter-translate-x: -100%}.slide-in-from-top-2{--tw-enter-translate-y: -.5rem}.duration-150{animation-duration:.15s}.duration-200{animation-duration:.2s}.running{animation-play-state:running}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background-color:transparent}::-webkit-scrollbar-thumb{border-radius:9999px;background-color:hsl(var(--border))}::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--muted-foreground) / .4)}*:focus-visible{outline:2px solid transparent;outline-offset:2px;--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);--tw-ring-color: hsl(var(--primary));--tw-ring-offset-width: 2px;--tw-ring-offset-color: hsl(var(--background))}::-moz-selection{background-color:#818cf859}::selection{background-color:#818cf859}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideInUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in{animation:fadeIn .2s ease-out}.animate-slide-in{animation:slideInUp .25s ease-out}.metric-number{font-family:Inter,SF Mono,IBM Plex Mono,JetBrains Mono,ui-monospace,monospace;font-variant-numeric:tabular-nums;letter-spacing:-.02em}.table-container{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}@media (hover: none) and (pointer: coarse){button,a,[role=button]{min-height:44px}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}@keyframes toastIn{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}@keyframes toastOut{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(100%)}}.animate-toast-in{animation:toastIn .3s ease-out}.animate-toast-out{animation:toastOut .2s ease-in forwards}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground\/50::-moz-placeholder{color:hsl(var(--muted-foreground) / .5)}.placeholder\:text-muted-foreground\/50::placeholder{color:hsl(var(--muted-foreground) / .5)}.placeholder\:text-muted-foreground\/70::-moz-placeholder{color:hsl(var(--muted-foreground) / .7)}.placeholder\:text-muted-foreground\/70::placeholder{color:hsl(var(--muted-foreground) / .7)}.before\:h-1\.5:before{content:var(--tw-content);height:.375rem}.before\:w-1\.5:before{content:var(--tw-content);width:.375rem}.before\:rounded-full:before{content:var(--tw-content);border-radius:9999px}.before\:bg-emerald-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.focus-within\:bg-accent:focus-within{background-color:hsl(var(--accent))}.hover\:-translate-y-0\.5:hover{--tw-translate-y: -.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-border\/60:hover{border-color:hsl(var(--border) / .6)}.hover\:border-primary\/20:hover{border-color:hsl(var(--primary) / .2)}.hover\:border-slate-300:hover{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-accent\/50:hover{background-color:hsl(var(--accent) / .5)}.hover\:bg-accent\/80:hover{background-color:hsl(var(--accent) / .8)}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-primary\/5:hover{background-color:hsl(var(--primary) / .05)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-red-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/45:hover{background-color:hsl(var(--secondary) / .45)}.hover\:bg-secondary\/50:hover{background-color:hsl(var(--secondary) / .5)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-slate-100:hover{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-800:hover{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.hover\:bg-transparent:hover{background-color:transparent}.hover\:bg-white\/10:hover{background-color:#ffffff1a}.hover\:bg-white\/15:hover{background-color:#ffffff26}.hover\:bg-white\/20:hover{background-color:#fff3}.hover\:bg-white\/70:hover{background-color:#ffffffb3}.hover\:fill-foreground\/\[0\.04\]:hover{fill:hsl(var(--foreground) / .04)}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-primary\/80:hover{color:hsl(var(--primary) / .8)}.hover\:text-red-700:hover{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.hover\:text-red-800:hover{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.hover\:text-slate-900:hover{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.hover\:text-slate-950:hover{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_20px_38px_-32px_rgba\(59\,130\,246\,0\.18\)\]:hover{--tw-shadow: 0 20px 38px -32px rgba(59,130,246,.18);--tw-shadow-colored: 0 20px 38px -32px 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-\[0_20px_50px_-30px_rgba\(15\,23\,42\,0\.25\)\]:hover{--tw-shadow: 0 20px 50px -30px rgba(15,23,42,.25);--tw-shadow-colored: 0 20px 50px -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)}.hover\:shadow-\[0_24px_48px_-38px_rgba\(59\,130\,246\,0\.2\)\]:hover{--tw-shadow: 0 24px 48px -38px rgba(59,130,246,.2);--tw-shadow-colored: 0 24px 48px -38px 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-\[var\(--surface-shadow-lg\)\]:hover{--tw-shadow-color: var(--surface-shadow-lg);--tw-shadow: var(--tw-shadow-colored)}.focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.focus\:absolute:focus{position:absolute}.focus\:z-50:focus{z-index:50}.focus\:m-4:focus{margin:1rem}.focus\:rounded-md:focus{border-radius:calc(var(--radius) - 2px)}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:bg-accent\/80:focus{background-color:hsl(var(--accent) / .8)}.focus\:bg-primary:focus{background-color:hsl(var(--primary))}.focus\:px-4:focus{padding-left:1rem;padding-right:1rem}.focus\:py-2:focus{padding-top:.5rem;padding-bottom:.5rem}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:text-primary-foreground:focus{color:hsl(var(--primary-foreground))}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.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-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.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-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.group[open] .group-open\:bg-primary\/10{background-color:hsl(var(--primary) / .1)}.group[open] .group-open\:text-primary{color:hsl(var(--primary))}.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)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:opacity-100{opacity:1}.group.destructive .group-\[\.destructive\]\:border-destructive\/20{border-color:hsl(var(--destructive) / .2)}.group.destructive .group-\[\.destructive\]\:text-destructive{color:hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:hover\:border-destructive\/30:hover{border-color:hsl(var(--destructive) / .3)}.group.destructive .group-\[\.destructive\]\:hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.group.destructive .group-\[\.destructive\]\:hover\:text-destructive:hover{color:hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:focus\:ring-destructive:focus{--tw-ring-color: hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:focus\:ring-red-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(248 113 113 / var(--tw-ring-opacity, 1))}.group.destructive .group-\[\.destructive\]\:focus\:ring-offset-red-600:focus{--tw-ring-offset-color: #dc2626}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.data-\[disabled\]\:pointer-events-none[data-disabled],.data-\[state\=closed\]\:pointer-events-none[data-state=closed]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x: 1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x: var(--radix-toast-swipe-end-x);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x: var(--radix-toast-swipe-move-x);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=active\]\:border-primary[data-state=active]{border-color:hsl(var(--primary))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent\/80[data-state=open]{background-color:hsl(var(--accent) / .8)}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[state\=active\]\:font-semibold[data-state=active]{font-weight:600}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed],.data-\[swipe\=end\]\:animate-out[data-swipe=end]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=closed\]\:fade-out-80[data-state=closed]{--tw-exit-opacity: .8}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right-full[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-top-full[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=inactive\]\:hover\:text-foreground:hover[data-state=inactive]{color:hsl(var(--foreground))}.dark\:border-amber-500\/30:is([data-theme=dark] *){border-color:#f59e0b4d}.dark\:border-amber-700:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(180 83 9 / var(--tw-border-opacity, 1))}.dark\:border-amber-800:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(146 64 14 / var(--tw-border-opacity, 1))}.dark\:border-amber-900\/50:is([data-theme=dark] *){border-color:#78350f80}.dark\:border-border:is([data-theme=dark] *){border-color:hsl(var(--border))}.dark\:border-emerald-500\/30:is([data-theme=dark] *){border-color:#10b9814d}.dark\:border-emerald-700:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(4 120 87 / var(--tw-border-opacity, 1))}.dark\:border-indigo-500\/30:is([data-theme=dark] *){border-color:#6366f14d}.dark\:border-red-400\/20:is([data-theme=dark] *){border-color:#f8717133}.dark\:border-red-700:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity, 1))}.dark\:border-rose-500\/30:is([data-theme=dark] *){border-color:#f43f5e4d}.dark\:border-sky-400\/20:is([data-theme=dark] *){border-color:#38bdf833}.dark\:border-violet-400\/20:is([data-theme=dark] *){border-color:#a78bfa33}.dark\:border-violet-500\/30:is([data-theme=dark] *){border-color:#8b5cf64d}.dark\:border-white\/10:is([data-theme=dark] *){border-color:#ffffff1a}.dark\:\!bg-card:is([data-theme=dark] *){background-color:hsl(var(--card))!important}.dark\:\!bg-slate-950\/90:is([data-theme=dark] *){background-color:#020617e6!important}.dark\:bg-amber-500\/10:is([data-theme=dark] *){background-color:#f59e0b1a}.dark\:bg-amber-500\/15:is([data-theme=dark] *){background-color:#f59e0b26}.dark\:bg-amber-950:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(69 26 3 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-950\/30:is([data-theme=dark] *){background-color:#451a034d}.dark\:bg-amber-950\/40:is([data-theme=dark] *){background-color:#451a0366}.dark\:bg-emerald-500\/15:is([data-theme=dark] *){background-color:#10b98126}.dark\:bg-emerald-950:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(2 44 34 / var(--tw-bg-opacity, 1))}.dark\:bg-emerald-950\/30:is([data-theme=dark] *){background-color:#022c224d}.dark\:bg-emerald-950\/40:is([data-theme=dark] *){background-color:#022c2266}.dark\:bg-emerald-950\/85:is([data-theme=dark] *){background-color:#022c22d9}.dark\:bg-indigo-500\/15:is([data-theme=dark] *){background-color:#6366f126}.dark\:bg-indigo-950\/40:is([data-theme=dark] *){background-color:#1e1b4b66}.dark\:bg-pink-950\/40:is([data-theme=dark] *){background-color:#50072466}.dark\:bg-red-950:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(69 10 10 / var(--tw-bg-opacity, 1))}.dark\:bg-red-950\/40:is([data-theme=dark] *){background-color:#450a0a66}.dark\:bg-rose-500\/15:is([data-theme=dark] *){background-color:#f43f5e26}.dark\:bg-secondary:is([data-theme=dark] *){background-color:hsl(var(--secondary))}.dark\:bg-slate-900:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-900\/\[0\.34\]:is([data-theme=dark] *){background-color:#0f172a57}.dark\:bg-slate-900\/\[0\.42\]:is([data-theme=dark] *){background-color:#0f172a6b}.dark\:bg-slate-900\/\[0\.52\]:is([data-theme=dark] *){background-color:#0f172a85}.dark\:bg-slate-900\/\[0\.58\]:is([data-theme=dark] *){background-color:#0f172a94}.dark\:bg-slate-900\/\[0\.5\]:is([data-theme=dark] *){background-color:#0f172a80}.dark\:bg-slate-950\/50:is([data-theme=dark] *){background-color:#02061780}.dark\:bg-slate-950\/90:is([data-theme=dark] *){background-color:#020617e6}.dark\:bg-slate-950\/\[0\.58\]:is([data-theme=dark] *){background-color:#02061794}.dark\:bg-slate-950\/\[0\.62\]:is([data-theme=dark] *){background-color:#0206179e}.dark\:bg-violet-500\/15:is([data-theme=dark] *){background-color:#8b5cf626}.dark\:bg-violet-950\/40:is([data-theme=dark] *){background-color:#2e106566}.dark\:\!bg-none:is([data-theme=dark] *){background-image:none!important}.dark\:bg-\[linear-gradient\(135deg\,rgba\(14\,165\,233\,0\.12\)\,rgba\(15\,23\,42\,0\.72\)\)\]:is([data-theme=dark] *){background-image:linear-gradient(135deg,#0ea5e91f,#0f172ab8)}.dark\:bg-\[linear-gradient\(135deg\,rgba\(14\,165\,233\,0\.14\)\,rgba\(15\,23\,42\,0\.72\)\)\]:is([data-theme=dark] *){background-image:linear-gradient(135deg,#0ea5e924,#0f172ab8)}.dark\:bg-\[linear-gradient\(180deg\,rgba\(15\,23\,42\,0\.92\)_0\%\,rgba\(2\,6\,23\,0\.88\)_100\%\)\]:is([data-theme=dark] *){background-image:linear-gradient(180deg,#0f172aeb,#020617e0)}.dark\:fill-amber-300:is([data-theme=dark] *){fill:#fcd34d}.dark\:fill-amber-500\/10:is([data-theme=dark] *){fill:#f59e0b1a}.dark\:fill-emerald-300:is([data-theme=dark] *){fill:#6ee7b7}.dark\:fill-emerald-500\/25:is([data-theme=dark] *){fill:#10b98140}.dark\:fill-indigo-300:is([data-theme=dark] *){fill:#a5b4fc}.dark\:fill-indigo-500\/10:is([data-theme=dark] *){fill:#6366f11a}.dark\:fill-rose-300:is([data-theme=dark] *){fill:#fda4af}.dark\:fill-violet-300:is([data-theme=dark] *){fill:#c4b5fd}.dark\:fill-violet-500\/10:is([data-theme=dark] *){fill:#8b5cf61a}.dark\:fill-violet-500\/30:is([data-theme=dark] *){fill:#8b5cf64d}.dark\:stroke-amber-500\/40:is([data-theme=dark] *){stroke:#f59e0b66}.dark\:stroke-indigo-500\/40:is([data-theme=dark] *){stroke:#6366f166}.dark\:stroke-violet-500\/40:is([data-theme=dark] *){stroke:#8b5cf666}.dark\:text-amber-200:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:text-amber-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-amber-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.dark\:text-emerald-100:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(209 250 229 / var(--tw-text-opacity, 1))}.dark\:text-emerald-200:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(167 243 208 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-indigo-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.dark\:text-indigo-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.dark\:text-pink-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(244 114 182 / var(--tw-text-opacity, 1))}.dark\:text-red-200:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:text-red-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-rose-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(253 164 175 / var(--tw-text-opacity, 1))}.dark\:text-rose-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.dark\:text-sky-100:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(224 242 254 / var(--tw-text-opacity, 1))}.dark\:text-sky-200:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(186 230 253 / var(--tw-text-opacity, 1))}.dark\:text-sky-200\/75:is([data-theme=dark] *){color:#bae6fdbf}.dark\:text-sky-200\/80:is([data-theme=dark] *){color:#bae6fdcc}.dark\:text-slate-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.dark\:text-slate-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.dark\:text-slate-50:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity, 1))}.dark\:text-violet-200:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(221 214 254 / var(--tw-text-opacity, 1))}.dark\:text-violet-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.dark\:text-violet-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(167 139 250 / var(--tw-text-opacity, 1))}.dark\:shadow-\[0_12px_28px_rgba\(0\,0\,0\,0\.28\)\]:is([data-theme=dark] *){--tw-shadow: 0 12px 28px rgba(0,0,0,.28);--tw-shadow-colored: 0 12px 28px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-\[0_18px_42px_-36px_rgba\(0\,0\,0\,0\.72\)\]:is([data-theme=dark] *){--tw-shadow: 0 18px 42px -36px rgba(0,0,0,.72);--tw-shadow-colored: 0 18px 42px -36px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-\[inset_0_1px_0_rgba\(255\,255\,255\,0\.04\)\]:is([data-theme=dark] *){--tw-shadow: inset 0 1px 0 rgba(255,255,255,.04);--tw-shadow-colored: inset 0 1px 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)}.dark\:ring-amber-500\/20:is([data-theme=dark] *){--tw-ring-color: rgb(245 158 11 / .2)}.dark\:ring-white\/10:is([data-theme=dark] *){--tw-ring-color: rgb(255 255 255 / .1)}.dark\:hover\:bg-red-500\/20:hover:is([data-theme=dark] *){background-color:#ef444433}.dark\:hover\:text-red-200:hover:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:hover\:shadow-\[0_24px_48px_-38px_rgba\(59\,130\,246\,0\.28\)\]:hover:is([data-theme=dark] *){--tw-shadow: 0 24px 48px -38px rgba(59,130,246,.28);--tw-shadow-colored: 0 24px 48px -38px 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 (min-width: 640px){.sm\:bottom-0{bottom:0}.sm\:right-0{right:0}.sm\:top-auto{top:auto}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mt-2\.5{margin-top:.625rem}.sm\:line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:h-8{height:2rem}.sm\:w-56{width:14rem}.sm\:w-7{width:1.75rem}.sm\:w-8{width:2rem}.sm\:w-9{width:2.25rem}.sm\:w-auto{width:auto}.sm\:max-w-\[520px\]{max-width:520px}.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\:flex-row{flex-direction:row}.sm\:flex-col{flex-direction:column}.sm\:flex-wrap{flex-wrap:wrap}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-between{justify-content:space-between}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:self-auto{align-self:auto}.sm\:rounded-\[0\.85rem\]{border-radius:.85rem}.sm\:p-3\.5{padding:.875rem}.sm\:p-5{padding:1.25rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-3\.5{padding-left:.875rem;padding-right:.875rem}.sm\:px-8{padding-left:2rem;padding-right:2rem}.sm\:text-left{text-align:left}.sm\:text-4xl{font-size:2.25rem;line-height:2.5rem}.sm\:text-6xl{font-size:3.75rem;line-height:1}.sm\:text-\[13px\]{font-size:13px}.sm\:text-\[15px\]{font-size:15px}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:text-xs{font-size:.75rem;line-height:1rem}.sm\:leading-5{line-height:1.25rem}.data-\[state\=open\]\:sm\:slide-in-from-bottom-full[data-state=open]{--tw-enter-translate-y: 100%}}@media (min-width: 768px){.md\:col-span-2{grid-column:span 2 / span 2}.md\:block{display:block}.md\:flex{display:flex}.md\:inline-flex{display:inline-flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:w-48{width:12rem}.md\:w-\[160px\]{width:160px}.md\:w-\[220px\]{width:220px}.md\:w-auto{width:auto}.md\:max-w-\[420px\]{max-width:420px}.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-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-\[minmax\(0\,1fr\)_auto_minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr) auto}.md\:flex-row{flex-direction:row}.md\:flex-wrap{flex-wrap:wrap}.md\:items-start{align-items:flex-start}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:px-0{padding-left:0;padding-right:0}}@media (min-width: 1024px){.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:ml-3{margin-left:.75rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:max-h-none{max-height:none}.lg\:min-h-0{min-height:0px}.lg\:w-\[300px\]{width:300px}.lg\:w-auto{width:auto}.lg\:max-w-3xl{max-width:48rem}.lg\:max-w-\[680px\]{max-width:680px}.lg\:flex-1{flex:1 1 0%}.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-\[1\.2fr_auto\]{grid-template-columns:1.2fr auto}.lg\:grid-cols-\[1\.4fr_repeat\(3\,minmax\(0\,1fr\)\)\]{grid-template-columns:1.4fr repeat(3,minmax(0,1fr))}.lg\:grid-cols-\[1fr_auto_1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr auto 1fr}.lg\:grid-cols-\[280px_minmax\(0\,1fr\)\]{grid-template-columns:280px minmax(0,1fr)}.lg\:grid-cols-\[minmax\(0\,0\.82fr\)_auto\]{grid-template-columns:minmax(0,.82fr) auto}.lg\:grid-cols-\[minmax\(0\,1\.05fr\)_minmax\(0\,0\.95fr\)\]{grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr)}.lg\:grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.lg\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,0\.85fr\)\]{grid-template-columns:minmax(0,1fr) minmax(0,.85fr)}.lg\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,1\.05fr\)\]{grid-template-columns:minmax(0,1fr) minmax(0,1.05fr)}.lg\:grid-cols-\[minmax\(0\,1fr\)_minmax\(280px\,0\.6fr\)\]{grid-template-columns:minmax(0,1fr) minmax(280px,.6fr)}.lg\:grid-cols-\[minmax\(0\,1fr\)_minmax\(400px\,0\.8fr\)\]{grid-template-columns:minmax(0,1fr) minmax(400px,.8fr)}.lg\:flex-row{flex-direction:row}.lg\:flex-col{flex-direction:column}.lg\:flex-wrap{flex-wrap:wrap}.lg\:items-start{align-items:flex-start}.lg\:items-end{align-items:flex-end}.lg\:items-center{align-items:center}.lg\:items-stretch{align-items:stretch}.lg\:justify-end{justify-content:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:gap-0{gap:0px}.lg\:justify-self-start{justify-self:start}.lg\:overflow-hidden{overflow:hidden}.lg\:overflow-visible{overflow:visible}.lg\:border-b-0{border-bottom-width:0px}.lg\:border-r{border-right-width:1px}.lg\:p-10{padding:2.5rem}.lg\:px-10{padding-left:2.5rem;padding-right:2.5rem}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:py-24{padding-top:6rem;padding-bottom:6rem}.lg\:pb-0{padding-bottom:0}.lg\:pt-28{padding-top:7rem}.lg\:text-right{text-align:right}}@media (min-width: 1280px){.xl\:sticky{position:sticky}.xl\:top-4{top:1rem}.xl\:col-span-1{grid-column:span 1 / span 1}.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:block{display:block}.xl\:hidden{display:none}.xl\:w-auto{width:auto}.xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.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-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-\[200px_1fr\]{grid-template-columns:200px 1fr}.xl\:grid-cols-\[208px_minmax\(0\,1fr\)\]{grid-template-columns:208px minmax(0,1fr)}.xl\:grid-cols-\[minmax\(0\,0\.95fr\)_auto_auto\]{grid-template-columns:minmax(0,.95fr) auto auto}.xl\:grid-cols-\[minmax\(0\,0\.9fr\)_minmax\(0\,1\.1fr\)\]{grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr)}.xl\:grid-cols-\[minmax\(0\,1\.2fr\)_minmax\(300px\,0\.8fr\)\]{grid-template-columns:minmax(0,1.2fr) minmax(300px,.8fr)}.xl\:grid-cols-\[minmax\(0\,1\.35fr\)_minmax\(320px\,0\.85fr\)\]{grid-template-columns:minmax(0,1.35fr) minmax(320px,.85fr)}.xl\:grid-cols-\[minmax\(0\,1fr\)_280px\]{grid-template-columns:minmax(0,1fr) 280px}.xl\:flex-row{flex-direction:row}.xl\:flex-nowrap{flex-wrap:nowrap}.xl\:items-start{align-items:flex-start}.xl\:items-center{align-items:center}.xl\:justify-start{justify-content:flex-start}.xl\:justify-self-end{justify-self:end}.xl\:justify-self-center{justify-self:center}}@media (min-width: 1536px){.\32xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.\32xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0px}.\[\&_\:\:selection\]\:bg-blue-500\/40 ::-moz-selection{background-color:#3b82f666}.\[\&_\:\:selection\]\:bg-blue-500\/40 ::selection{background-color:#3b82f666}.\[\&_\:\:selection\]\:bg-indigo-400\/40 ::-moz-selection{background-color:#818cf866}.\[\&_\:\:selection\]\:bg-indigo-400\/40 ::selection{background-color:#818cf866}.\[\&_\:\:selection\]\:text-white ::-moz-selection{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.\[\&_\:\:selection\]\:text-white ::selection{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0px}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}.\[\&_tr\]\:border-border tr{border-color:hsl(var(--border))}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as i,j as s}from"./vendor-DdPBfMMb.js";import{c as n}from"./global-DA-0y145.js";const f=i.forwardRef(({className:e,type:r,...o},t)=>s.jsx("input",{type:r,className:n("flex h-9 w-full rounded-lg border border-border bg-card px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground",e),ref:t,...o}));f.displayName="Input";export{f as I};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as o,j as r}from"./vendor-DdPBfMMb.js";import{c as t}from"./global-DA-0y145.js";const l=o.forwardRef(({className:e,...a},s)=>r.jsx("label",{ref:s,className:t("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",e),...a}));l.displayName="Label";export{l as L};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import{B as v,c as p}from"./global-DA-0y145.js";import{r as u,j as e,a6 as O,aa as T,ab as N,ac as g,ad as b,ae as w,P as L,af as P,ag as _,ah as K,ai as R,aj as E,ak as D,al as q,am as k,a9 as U,q as B}from"./vendor-DdPBfMMb.js";import{c as A}from"./clipboard-BnAnBk_-.js";import{p as F}from"./package-BcqrltRw.js";const S="/assets/live-dashboard-B7vLOY_S.png",G="/assets/live-logs-PRpgTV6S.png",W="/assets/live-model-management-xkBDeuLk.png",Y="/assets/live-api-keys-CJUuaCev.png",H="/assets/live-events-D_njD291.png",C="/assets/live-en-dashboard-CJoX7IQT.png",$="/assets/live-en-logs-BGGL53ab.png",M="/assets/live-en-model-management-BpjNblfR.png",Q="/assets/live-en-api-keys-Bx8N-eoh.png",J="/assets/live-en-events-DJwaP-WW.png",j=F.version,Z=(l,r)=>r[l],s={nav:{why:{zh:"现状",en:"The mess"},how:{zh:"怎么用",en:"How"},debug:{zh:"排查",en:"Debug"},local:{zh:"本地优先",en:"Local-first"},start:{zh:"开始",en:"Start"},faq:{zh:"FAQ",en:"FAQ"}},ctaConsole:{zh:"打开控制台",en:"Open console"},ctaInstall:{zh:"立即安装",en:"Install now"},ctaPreview:{zh:"看看控制台长什么样",en:"Preview the console"},hero:{badge:{zh:"v"+j+" · Rust 内核 · 完全开源",en:"v"+j+" · Rust core · Open source"},h1Top:{zh:"你的 API Key",en:"Your API key"},h1Bottom:{zh:"不该躺在 30 个 .env 里",en:"shouldn’t live in 30 .env files"},lead:{zh:"cc-gw 在你的机器上跑一个本地网关。Claude Code、OpenAI SDK、Anthropic SDK 全部指向同一个地址。换模型、换 provider、查日志,再也不用翻业务代码。",en:"cc-gw runs a small gateway right on your machine. Point Claude Code, the OpenAI SDK, and the Anthropic SDK at one address — then swap models, switch providers, and trace requests without touching your app code."},note:{zh:"不需要本机有 Rust 环境,npm 自动拉对应平台的预编译二进制。",en:"No Rust toolchain needed — npm pulls the right prebuilt binary for your platform."},proof:[{zh:"一条命令装好,本机就能跑",en:"One command to install, runs on your laptop"},{zh:"客户端只改 baseURL,不动业务逻辑",en:"Clients only change baseURL — your code stays put"},{zh:"所有数据都在 ~/.cc-gw 下,不走云",en:"Everything lives under ~/.cc-gw — nothing leaves your box"}],works:{zh:"已经在以下客户端里跑通",en:"Tested with"}},why:{eyebrow:{zh:"现状",en:"The mess"},title:{zh:"AI 接进来不难,难的是接进来之后",en:"Wiring up AI is easy. Living with it isn’t."},description:{zh:"你大概率已经踩过下面这三件事里的至少两件。这就是为什么有了 cc-gw。",en:"You’ve probably hit at least two of these. That’s why cc-gw exists."},cards:[{title:{zh:"Key 散在各个 .env 里",en:"Keys scattered across .env files"},body:{zh:"每个项目自己一份 baseURL、自己一份 key、自己一份模型名。时间一长,没人敢动,也没人记得清。",en:"Every project keeps its own baseURL, its own key, its own model name. Six months in, nobody dares touch it."},sample:`OPENAI_BASE_URL=https://...
|
|
2
|
-
ANTHROPIC_API_KEY=sk-ant-...
|
|
3
|
-
MODEL=gpt-4o-2024-08-06`},{title:{zh:"出错只能猜",en:"Debugging is just guessing"},body:{zh:"是 payload 错?协议不对?上游挂了?key 被收回了?没有统一日志,只能 curl 一遍试一遍。",en:"Bad payload? Wrong protocol? Upstream down? Key revoked? Without one log to look at, you curl your way through every theory."},sample:`$ curl ... 401
|
|
4
|
-
# 是 key 过期?还是 endpoint 写错了?
|
|
5
|
-
# Or has the key been rotated?`},{title:{zh:"换模型像拆地雷",en:"Swapping models is a minefield"},body:{zh:"想从 GPT-4o 换 Claude Sonnet?要么 grep 30 个文件挨个改,要么改一堆环境变量然后祈祷。",en:"Want to try Claude Sonnet instead of GPT-4o? Either grep 30 files or rotate a pile of env vars and pray."},sample:`- model: gpt-4o
|
|
6
|
-
+ model: claude-sonnet-4-5
|
|
7
|
-
// 30 处需要同步修改…`}]},how:{eyebrow:{zh:"怎么解决",en:"The fix"},title:{zh:"一个本地入口,背后什么都能换",en:"One local endpoint. Anything behind it can change."},description:{zh:"客户端只认 cc-gw。模型、provider、路由策略,全都在网关里调,业务代码不动。",en:"Your clients only know cc-gw. Models, providers, routing rules — all live in the gateway. Your code never moves."},diagramLabels:{clients:{zh:"你的客户端",en:"Your clients"},gateway:{zh:"本地网关",en:"Local gateway"},providers:{zh:"上游 Provider",en:"Upstream providers"}},differentiator:{eyebrow:{zh:"一个真正的差异化",en:"A real superpower"},title:{zh:"用 Anthropic 的代码,调 GPT-4o;反过来也行",en:"Write Anthropic code, route to GPT-4o. Or the other way around."},body:{zh:"cc-gw 在网关层完成 Anthropic ↔ OpenAI Chat ↔ OpenAI Responses 三端六方向的协议转换,包括 SSE 流式。所以 Claude Code 里写的代码可以路由到 GPT-4o,OpenAI SDK 写的代码也可以路由到 Claude。",en:"cc-gw does full bidirectional translation across Anthropic, OpenAI Chat, and OpenAI Responses — including SSE streaming. So your Claude Code can run on GPT-4o, and your OpenAI SDK can run on Claude."},example:{zh:"示例:客户端协议 → 上游模型",en:"Example: client protocol → upstream model"}},flowSteps:[{zh:"客户端发起请求",en:"Client sends request"},{zh:"按规则匹配 Provider",en:"Routes to the right provider"},{zh:"协议转换 + 流式透传",en:"Translates protocol + streams through"},{zh:"回包同时落日志",en:"Logs the round-trip on the way back"}]},debug:{eyebrow:{zh:"排查",en:"Observability"},title:{zh:"出了事,能看到一整段对话",en:"When things break, see the whole conversation"},description:{zh:"不只是一条请求的耗时。Profiler 把多轮对话的每一 turn 串成 session,TTFT、TPOT、token 用量全都记下来。",en:"Not just a single request. The Profiler stitches every turn of a multi-turn conversation into one session, with TTFT, TPOT, and token counts all recorded."},payload:{title:{zh:"四段 payload,分开存",en:"Four payloads, stored separately"},body:{zh:"每个请求都会保留:客户端发出的、网关转给上游的、上游回来的、再转回客户端的。跨协议有 bug?两侧对照一下就清楚了。",en:"For every request we keep four blobs: what the client sent, what we sent upstream, what came back, and what the client finally received. Cross-protocol bug? Compare both sides — done."},stages:[{zh:"客户端请求",en:"Client request"},{zh:"上游请求",en:"Upstream request"},{zh:"上游响应",en:"Upstream response"},{zh:"客户端响应",en:"Client response"}],clientSide:{zh:"客户端侧",en:"client side"},upstreamSide:{zh:"上游侧",en:"upstream side"}},pillars:[{icon:L,title:{zh:"Logs",en:"Logs"},body:{zh:"按 endpoint / Key / 状态码筛选,定位失败请求只要几秒。可选保留完整 payload。",en:"Filter by endpoint, key, or status code. Optional full-payload capture."}},{icon:P,title:{zh:"Profiler",en:"Profiler"},body:{zh:"按 session 聚合多轮 turn。每轮 TTFT / TPOT / tokens 一目了然,慢的那 turn 一眼能挑出。",en:"Multi-turn sessions, one row per turn. TTFT, TPOT, tokens — spot the slow turn instantly."}},{icon:_,title:{zh:"Events",en:"Events"},body:{zh:"配置变更、Key 增删、鉴权失败、并发拒绝,全部以事件形式可追溯。",en:"Config changes, key edits, auth failures, concurrency rejects — all auditable as events."}}]},local:{eyebrow:{zh:"本地优先",en:"Local-first"},title:{zh:"所有东西都在你机器的 ~/.cc-gw 下",en:"Everything lives under ~/.cc-gw on your machine"},description:{zh:"没有云端,没有遥测,没有外部依赖。配置可以版本管理,数据库可以直接打开,要离线跑就离线跑。",en:"No cloud. No telemetry. No external dependencies. Version-control your config, open the SQLite file with any tool, run it offline if you want to."},pillars:[{icon:K,title:{zh:"Key 加密落库",en:"Keys encrypted at rest"},body:{zh:"API Key 用 AES-256-GCM 加密存储,索引只走 SHA-256 哈希,明文永不落盘。",en:"API keys encrypted with AES-256-GCM. Lookups go through SHA-256 hashes — plaintext never hits disk."}},{icon:R,title:{zh:"按客户端独立 Key",en:"Per-client API keys"},body:{zh:"为不同客户端、环境、成员发独立 Key。可设并发上限,可配 endpoint 白名单,停用即时生效。",en:"Issue separate keys per client, env, or teammate. Set concurrency caps, restrict to specific endpoints, revoke instantly."}},{icon:E,title:{zh:"配置热改,无需重启",en:"Hot reload — no restart"},body:{zh:"改路由、加自定义 endpoint、调默认模型,控制台保存即生效。Rust 后端常驻,开发机也能长期挂着。",en:"Edit routing, add custom endpoints, change defaults — saves apply live. The Rust process is light enough to leave running on your laptop."}},{icon:D,title:{zh:"老用户数据无痛迁移",en:"Old data just works"},body:{zh:"从旧 Node 版本升级?config.json 和 gateway.db 直接继承,自动做 schema 迁移,历史日志一条不丢。",en:"Upgrading from the old Node build? Your config.json and gateway.db carry over — schema is migrated in place, no log loss."}}],treeCaption:{zh:"一切都在这个目录下,备份它就等于备份了整个 cc-gw。",en:"Back up this folder and you’ve backed up your entire cc-gw setup."}},start:{eyebrow:{zh:"开始",en:"Get started"},title:{zh:"4 步跑起来",en:"Up and running in four steps"},description:{zh:"不用先改团队流程。先让一个客户端走通,看到价值再往后扩。",en:"No team-wide migration. Get one client through first — expand from there."},steps:[{title:{zh:"安装",en:"Install"},body:{zh:"一条命令搞定,npm 会自动拉对应平台的预编译二进制。",en:"One command. npm grabs the prebuilt binary for your platform automatically."},code:"npm install -g @chenpu17/cc-gw"},{title:{zh:"启动",en:"Start"},body:{zh:"前台模式方便观察日志;想常驻就 `--daemon`。默认绑定 127.0.0.1:4100。",en:"Foreground for live logs, or `--daemon` to keep it running. Binds to 127.0.0.1:4100 by default."},code:"cc-gw start --foreground --port 4100"},{title:{zh:"加 Provider",en:"Add a provider"},body:{zh:"打开控制台,把你的 OpenAI / Anthropic / 兼容 provider 填进去。",en:"Open the console and plug in your OpenAI, Anthropic, or any compatible provider."},code:"open http://127.0.0.1:4100/ui"},{title:{zh:"指过去",en:"Point your client"},body:{zh:"客户端只改 baseURL。Anthropic 协议走根路径,OpenAI 协议加 /openai/v1 前缀。",en:"Just change baseURL. Anthropic protocol uses the root path; OpenAI uses /openai/v1."},code:`ANTHROPIC_BASE_URL='http://127.0.0.1:4100'
|
|
8
|
-
OPENAI_BASE_URL='http://127.0.0.1:4100/openai/v1'`}]},console:{eyebrow:{zh:"控制台",en:"Console"},title:{zh:"不是摆设,是你每天用的地方",en:"Not for show — you’ll be in here daily"},description:{zh:"请求进来之后,趋势、日志、路由、Key、Profiler 都在同一个台子里。",en:"Once requests start flowing, trends, logs, routing, keys, and profiler all live under one roof."}},fit:{eyebrow:{zh:"适合谁",en:"Who it’s for"},title:{zh:"诚实地说:它不是为所有人做的",en:"Honestly: it’s not for everyone"},description:{zh:"如果你的 AI 调用已经开始扩张,但又没到要上组织级治理平台的程度,cc-gw 多半正好卡在合适的位置。",en:"If your AI usage is growing but you’re not ready for an enterprise governance platform, cc-gw probably sits right where you need it."},yesTitle:{zh:"适合",en:"Good fit"},noTitle:{zh:"不适合",en:"Not a fit"},yes:[{zh:"同时在用 Claude Code、OpenAI SDK、Anthropic SDK",en:"Already juggling Claude Code, OpenAI SDK, and Anthropic SDK"},{zh:"2-10 人 AI 小队,需要共享入口和日志",en:"A 2–10 person AI team that needs a shared entrypoint and shared logs"},{zh:"10-100 人研发团队,开始多人共享模型调用",en:"A 10–100 dev team starting to share model calls across people"},{zh:"想自托管,对数据归属敏感",en:"You self-host. Data sovereignty matters."},{zh:"受不了把 key、baseURL 散在每个项目里",en:"You’re tired of keys and baseURLs sprinkled across every repo"}],no:[{zh:"需要跨 BU 治理、复杂审批流",en:"You need cross-BU governance and complex approval flows"},{zh:"需要企业 SSO 与组织级策略中台",en:"Enterprise SSO and org-level policy hubs"},{zh:"需要多副本 HA 集群",en:"High-availability multi-replica clusters"},{zh:"强 Compliance 场景(金融、医疗等)",en:"Heavily regulated industries (finance, healthcare)"},{zh:"希望一套大平台囊括所有 AI 成本结算",en:"A single platform to handle all AI cost reconciliation"}]},faq:{eyebrow:{zh:"FAQ",en:"FAQ"},title:{zh:"你可能想问",en:"You probably want to ask"},description:{zh:"从是否值得装、会不会绑死、数据放哪几个最常见的疑问开始。",en:"Starting with the questions people ask most: is it worth it, does it lock me in, where does my data live."},items:[{q:{zh:"我一个人用,也值得装吗?",en:"I’m a solo dev — is it still worth it?"},a:{zh:"只用一个 provider、一个项目,可能不需要。但只要你同时在用 Claude Code 和 OpenAI SDK,或者经常切模型,统一入口能省下来的维护时间会很可观。",en:"If you use one provider and one project, probably not. But the moment you’re juggling Claude Code and the OpenAI SDK — or switching models often — having one entrypoint pays back fast."}},{q:{zh:"会不会被 cc-gw 绑死?",en:"Will I get locked into cc-gw?"},a:{zh:"不会。客户端用的还是 OpenAI / Anthropic 标准协议,不要 cc-gw 也能工作。配置和数据都是 JSON + SQLite,可以直接读、直接迁。",en:"No. Your clients still speak standard OpenAI / Anthropic protocols and work fine without cc-gw. Your config is plain JSON, your data is plain SQLite — read or migrate it any time."}},{q:{zh:"数据存在哪里?会上传吗?",en:"Where does my data live? Does anything get uploaded?"},a:{zh:"全部在本机 ~/.cc-gw/ 下:config.json、SQLite 数据库、加密密钥、日志文件。请求只在你和上游 provider 之间转发,cc-gw 自己不发遥测。",en:"Everything is local under ~/.cc-gw/: config.json, the SQLite database, the encryption key, and log files. Requests flow only between you and the upstream provider — cc-gw sends no telemetry."}},{q:{zh:"它和 LiteLLM、One API 这些有啥区别?",en:"How is it different from LiteLLM or One API?"},a:{zh:"主要三点:(1) 默认本地优先、零云依赖;(2) 跨协议三端六方向真正双向转换,包括 SSE 流式;(3) 内置按 session 聚合的 Profiler 和四段 payload 存储,专门给跨协议排查用。",en:"Three things: (1) local-first by default, zero cloud dependency; (2) true bidirectional translation across Anthropic, OpenAI Chat, and OpenAI Responses — streaming included; (3) a built-in Profiler that groups multi-turn sessions, plus four-segment payload storage purpose-built for cross-protocol debugging."}},{q:{zh:"安装需要本机有 Rust 吗?",en:"Do I need Rust installed?"},a:{zh:"不需要。npm 包通过 optionalDependencies 自动拉对应平台的预编译二进制:macOS arm64、Linux x64/arm64、Windows x64。",en:"No. The npm package uses optionalDependencies to pull the right prebuilt binary for your platform: macOS arm64, Linux x64/arm64, and Windows x64."}}]},cta:{title:{zh:"今天就把这件事处理掉",en:"Take care of this today"},body:{zh:"一条命令就能装好。先在本地跑通一个客户端,看到价值再往后扩。",en:"One command to install. Get one client running locally, see if it pays back, then keep going."}},footer:{tagline:{zh:"cc-gw · 给开发者和小团队的本地优先 AI 网关",en:"cc-gw · A local-first AI gateway for developers and small teams"},console:{zh:"控制台",en:"Console"},changelog:{zh:"更新日志",en:"Changelog"}}},V=["Claude Code","OpenAI SDK","Anthropic SDK","cURL","LangChain","Vercel AI SDK"],X=[{client:"Anthropic SDK",upstream:{zh:"OpenAI · GPT-4o",en:"OpenAI · GPT-4o"},accent:"from-amber-500/20 to-rose-500/20 text-amber-600"},{client:"OpenAI SDK",upstream:{zh:"Anthropic · Claude Sonnet",en:"Anthropic · Claude Sonnet"},accent:"from-cyan-500/20 to-indigo-500/20 text-cyan-600"},{client:"Claude Code",upstream:{zh:"本地 Ollama / 自建模型",en:"Local Ollama / self-hosted"},accent:"from-emerald-500/20 to-teal-500/20 text-emerald-600"}],ee={zh:"兼容 provider · 自建模型",en:"Compatible providers · self-hosted"},z={copy:{zh:"复制",en:"Copy"},copied:{zh:"已复制",en:"Copied"}},te=`~/.cc-gw/
|
|
9
|
-
├── config.json # 直接编辑也行 / edit by hand if you like
|
|
10
|
-
├── encryption.key # 自动生成 / auto-generated
|
|
11
|
-
├── cc-gw.pid
|
|
12
|
-
├── data/
|
|
13
|
-
│ └── gateway.db # SQLite (WAL) — 直接 sqlite3 打开
|
|
14
|
-
└── logs/
|
|
15
|
-
└── cc-gw.log`,y=[{id:"dashboard",shot:{zh:S,en:C},label:{zh:"总览",en:"Dashboard"},blurb:{zh:"今天的请求量、延迟、健康状态,一屏看完。",en:"Today’s request volume, latency, and health — at a glance."}},{id:"logs",shot:{zh:G,en:$},label:{zh:"请求日志",en:"Logs"},blurb:{zh:"按 endpoint / Key / 状态码筛,几秒定位。",en:"Filter by endpoint, key, or status. Find issues in seconds."}},{id:"routing",shot:{zh:W,en:M},label:{zh:"模型路由",en:"Routing"},blurb:{zh:"别名、通配匹配、fallback 链全在 UI 里维护。",en:"Aliases, wildcards, and fallback chains — all in the UI."}},{id:"keys",shot:{zh:Y,en:Q},label:{zh:"API Keys",en:"API Keys"},blurb:{zh:"按客户端发独立 Key,可设并发上限。",en:"Per-client keys with concurrency caps."}},{id:"profiler",shot:{zh:H,en:J},label:{zh:"Profiler & Events",en:"Profiler & Events"},blurb:{zh:"多轮对话按 session 聚合,事件流可追溯。",en:"Sessions group multi-turn calls. Events keep an audit trail."}}];function se(l){if(l.trim().startsWith("#"))return e.jsx("span",{className:"text-slate-500",children:l});if(l.startsWith("$ "))return e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"select-none text-emerald-400",children:"$ "}),e.jsx("span",{className:"text-slate-100",children:l.slice(2)})]});const r=l.match(/^(\s*)([A-Z_][\w]*)(\s*=\s*)(.+)$/);if(r){const[,i,x,m,d]=r,t=d.startsWith("'")||d.startsWith('"');return e.jsxs(e.Fragment,{children:[e.jsx("span",{children:i}),e.jsx("span",{className:"text-indigo-300",children:x}),e.jsx("span",{className:"text-slate-400",children:m}),e.jsx("span",{className:t?"text-emerald-300":"text-slate-100",children:d})]})}return e.jsx("span",{className:"text-slate-100",children:l})}function ae({code:l,label:r,className:i,copyLabel:x,copiedLabel:m}){const[d,t]=u.useState(!1);async function c(){await A(l),t(!0),window.setTimeout(()=>t(!1),1800)}return e.jsxs("div",{className:p("relative min-w-0",i),children:[e.jsxs("button",{type:"button","aria-label":`Copy ${r}`,onClick:c,className:"absolute right-3 top-3 z-10 inline-flex items-center gap-1.5 rounded-lg border border-white/10 bg-white/10 px-2.5 py-1 text-[11px] font-medium text-slate-100 transition hover:bg-white/15",children:[d?e.jsx(b,{className:"h-3.5 w-3.5"}):e.jsx(k,{className:"h-3.5 w-3.5"}),d?m:x]}),e.jsx("pre",{className:"max-w-full overflow-x-auto rounded-2xl bg-slate-950 p-5 font-mono text-[13px] leading-7 text-slate-100 ring-1 ring-white/5 [&_::selection]:bg-blue-500/40 [&_::selection]:text-white",children:e.jsx("code",{children:l.split(`
|
|
16
|
-
`).map((f,a)=>e.jsx("span",{className:"block",children:se(f)??" "},a))})})]})}function ne(){const[l,r]=u.useState(!1),i="npm install -g @chenpu17/cc-gw";async function x(){await A(i),r(!0),window.setTimeout(()=>r(!1),1800)}return e.jsxs("div",{className:"inline-flex w-full max-w-md items-center gap-2 rounded-2xl border border-white/15 bg-white/5 py-2 pl-4 pr-2 backdrop-blur-sm",children:[e.jsx("span",{className:"select-none font-mono text-emerald-400",children:"$"}),e.jsx("span",{className:"select-all truncate font-mono text-sm text-slate-100",children:i}),e.jsx("button",{type:"button","aria-label":"Copy install command",onClick:x,className:"ml-auto inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-lg bg-white/10 text-slate-200 transition hover:bg-white/20",children:l?e.jsx(b,{className:"h-3.5 w-3.5 text-emerald-400"}):e.jsx(k,{className:"h-3.5 w-3.5"})})]})}function h({eyebrow:l,title:r,description:i}){return e.jsxs("div",{className:"max-w-3xl",children:[e.jsx("div",{className:"font-mono text-xs font-semibold uppercase tracking-[0.22em] text-indigo-600",children:l}),e.jsx("h2",{className:"mt-4 text-3xl font-semibold tracking-[-0.02em] text-slate-950 sm:text-4xl",children:r}),e.jsx("p",{className:"mt-4 text-base leading-8 text-slate-600 sm:text-lg",children:i})]})}function le(){const[l,r]=u.useState("zh"),[i,x]=u.useState(y[0].id),[m,d]=u.useState(0),t=a=>Z(l,a),c=y.find(a=>a.id===i)??y[0],f=[{href:"#why",label:t(s.nav.why)},{href:"#how",label:t(s.nav.how)},{href:"#debug",label:t(s.nav.debug)},{href:"#local",label:t(s.nav.local)},{href:"#start",label:t(s.nav.start)},{href:"#faq",label:t(s.nav.faq)}];return e.jsxs("div",{className:"min-h-screen bg-white text-slate-950 antialiased",children:[e.jsxs("header",{className:"sticky top-0 z-30 border-b border-slate-200/70 bg-white/85 backdrop-blur-xl",children:[e.jsxs("div",{className:"mx-auto flex w-full max-w-6xl items-center justify-between gap-4 px-6 py-3.5 sm:px-8 lg:px-10",children:[e.jsxs("a",{href:"#top",className:"flex items-center gap-2.5",children:[e.jsx(v,{className:"h-9 w-9",title:"cc-gw"}),e.jsxs("div",{className:"leading-tight",children:[e.jsx("div",{className:"text-[15px] font-semibold tracking-tight",children:"cc-gw"}),e.jsx("div",{className:"font-mono text-[10px] uppercase tracking-[0.18em] text-slate-500",children:"local-first ai gateway"})]})]}),e.jsx("nav",{className:"hidden items-center gap-1 lg:flex",children:f.map(a=>e.jsx("a",{href:a.href,className:"rounded-lg px-3 py-1.5 text-sm text-slate-600 transition hover:bg-slate-100 hover:text-slate-900",children:a.label},a.href))}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("button",{type:"button",onClick:()=>r(l==="zh"?"en":"zh"),"aria-label":"Toggle language",className:"inline-flex items-center gap-1.5 rounded-lg border border-slate-200 bg-white px-2.5 py-1.5 text-xs font-semibold text-slate-700 transition hover:border-slate-300",children:[e.jsx(O,{className:"h-3.5 w-3.5"}),l==="zh"?"EN":"中文"]}),e.jsx("a",{href:"/ui/",className:"hidden rounded-lg border border-slate-200 bg-white px-3.5 py-1.5 text-sm font-medium text-slate-700 transition hover:border-slate-300 hover:text-slate-950 sm:inline-flex",children:t(s.ctaConsole)}),e.jsxs("a",{href:"https://github.com/chenpu17/cc-gw2",className:"inline-flex items-center gap-1.5 rounded-lg bg-slate-950 px-3.5 py-1.5 text-sm font-medium text-white transition hover:bg-slate-800",children:[e.jsx(T,{className:"h-4 w-4"}),"GitHub"]})]})]}),e.jsx("nav",{"aria-label":"Mobile section navigation",className:"flex gap-1.5 overflow-x-auto border-t border-slate-200/70 px-4 py-2 lg:hidden",children:[...f,{href:"/ui/",label:t(s.ctaConsole)}].map(a=>e.jsx("a",{href:a.href,className:"shrink-0 rounded-lg bg-slate-100 px-3 py-1 text-xs font-medium text-slate-700",children:a.label},a.href))})]}),e.jsxs("main",{id:"top",children:[e.jsxs("section",{className:"relative overflow-hidden bg-slate-950 text-white [&_::selection]:bg-indigo-400/40 [&_::selection]:text-white",children:[e.jsx("div",{"aria-hidden":!0,className:"absolute inset-0 opacity-[0.18]",style:{backgroundImage:"linear-gradient(to right, rgba(148,163,184,0.18) 1px, transparent 1px), linear-gradient(to bottom, rgba(148,163,184,0.18) 1px, transparent 1px)",backgroundSize:"48px 48px",maskImage:"radial-gradient(ellipse at center top, black 30%, transparent 75%)",WebkitMaskImage:"radial-gradient(ellipse at center top, black 30%, transparent 75%)"}}),e.jsx("div",{"aria-hidden":!0,className:"pointer-events-none absolute -top-40 left-1/2 h-[640px] w-[1100px] -translate-x-1/2 rounded-full opacity-60 blur-[120px]",style:{background:"radial-gradient(closest-side, rgba(99,102,241,0.55), transparent 70%), radial-gradient(closest-side at 70% 60%, rgba(34,211,238,0.35), transparent 70%)"}}),e.jsxs("div",{className:"relative mx-auto w-full max-w-6xl px-6 pb-24 pt-20 sm:px-8 lg:px-10 lg:pt-28",children:[e.jsxs("div",{className:"mx-auto max-w-3xl text-center",children:[e.jsxs("span",{className:"inline-flex items-center gap-2 rounded-full border border-white/15 bg-white/5 px-3.5 py-1 text-xs font-medium text-slate-200 backdrop-blur-sm",children:[e.jsx("span",{className:"inline-flex h-1.5 w-1.5 rounded-full bg-emerald-400 shadow-[0_0_10px_rgba(52,211,153,0.8)]"}),t(s.hero.badge)]}),e.jsxs("h1",{className:"mt-7 text-[2.4rem] font-bold leading-[1.05] tracking-[-0.035em] sm:text-6xl",children:[t(s.hero.h1Top),e.jsx("span",{className:"mt-2 block bg-gradient-to-r from-indigo-300 via-violet-300 to-cyan-300 bg-clip-text text-transparent",children:t(s.hero.h1Bottom)})]}),e.jsx("p",{className:"mx-auto mt-6 max-w-2xl text-base leading-8 text-slate-300 sm:text-lg",children:t(s.hero.lead)}),e.jsxs("div",{className:"mt-9 flex flex-col items-center justify-center gap-3 sm:flex-row",children:[e.jsxs("a",{href:"#start",className:"group inline-flex items-center justify-center gap-2 rounded-xl bg-white px-5 py-3 text-sm font-semibold text-slate-950 shadow-lg shadow-indigo-500/20 transition hover:bg-slate-100",children:[e.jsx(N,{className:"h-4 w-4"}),t(s.ctaInstall),e.jsx(g,{className:"h-4 w-4 transition-transform group-hover:translate-x-0.5"})]}),e.jsx("a",{href:"#console",className:"inline-flex items-center justify-center gap-2 rounded-xl border border-white/20 bg-white/5 px-5 py-3 text-sm font-semibold text-white backdrop-blur-sm transition hover:bg-white/10",children:t(s.ctaPreview)})]}),e.jsxs("div",{className:"mt-7 flex flex-col items-center gap-2",children:[e.jsx(ne,{}),e.jsx("p",{className:"font-mono text-[11px] text-slate-400",children:t(s.hero.note)})]}),e.jsx("ul",{className:"mt-10 grid gap-3 text-left sm:grid-cols-3",children:s.hero.proof.map((a,n)=>e.jsxs("li",{className:"flex items-start gap-2 rounded-xl border border-white/10 bg-white/5 px-4 py-3 text-[13px] leading-6 text-slate-200 backdrop-blur-sm",children:[e.jsx(b,{className:"mt-0.5 h-4 w-4 shrink-0 text-emerald-400"}),e.jsx("span",{children:t(a)})]},n))})]}),e.jsxs("div",{className:"relative mx-auto mt-16 max-w-5xl",children:[e.jsx("div",{"aria-hidden":!0,className:"absolute inset-x-10 -top-10 h-40 rounded-full bg-gradient-to-r from-indigo-500/30 via-violet-500/25 to-cyan-500/30 blur-3xl"}),e.jsxs("div",{className:"relative overflow-hidden rounded-2xl border border-white/15 bg-slate-900/60 p-1.5 shadow-[0_40px_120px_-20px_rgba(2,6,23,0.8)] ring-1 ring-white/5 backdrop-blur",children:[e.jsxs("div",{className:"flex items-center gap-1.5 border-b border-white/10 px-4 py-2.5",children:[e.jsx("span",{className:"h-2.5 w-2.5 rounded-full bg-rose-400/70"}),e.jsx("span",{className:"h-2.5 w-2.5 rounded-full bg-amber-300/70"}),e.jsx("span",{className:"h-2.5 w-2.5 rounded-full bg-emerald-400/70"}),e.jsx("div",{className:"ml-3 flex-1 truncate rounded-md bg-white/5 px-3 py-1 text-center font-mono text-[11px] text-slate-300",children:"127.0.0.1:4100/ui/"})]}),e.jsx("img",{src:l==="en"?C:S,alt:"cc-gw dashboard screenshot",className:"block w-full rounded-b-xl",loading:"eager"})]})]}),e.jsxs("div",{className:"mt-16",children:[e.jsx("p",{className:"text-center font-mono text-[11px] uppercase tracking-[0.22em] text-slate-400",children:t(s.hero.works)}),e.jsx("div",{className:"mt-5 flex flex-wrap items-center justify-center gap-2",children:V.map(a=>e.jsx("span",{className:"rounded-full border border-white/10 bg-white/5 px-3.5 py-1.5 text-sm text-slate-200 backdrop-blur-sm",children:a},a))})]})]})]}),e.jsxs("section",{id:"why",className:"mx-auto w-full max-w-6xl px-6 py-20 sm:px-8 lg:px-10 lg:py-24",children:[e.jsx(h,{eyebrow:t(s.why.eyebrow),title:t(s.why.title),description:t(s.why.description)}),e.jsx("div",{className:"mt-12 grid gap-5 md:grid-cols-3",children:s.why.cards.map(a=>e.jsxs("div",{className:"group relative overflow-hidden rounded-2xl border border-slate-200 bg-white p-6 transition hover:border-slate-300 hover:shadow-[0_20px_50px_-30px_rgba(15,23,42,0.25)]",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(w,{className:"h-4 w-4 text-rose-500"}),e.jsx("h3",{className:"text-base font-semibold text-slate-950",children:t(a.title)})]}),e.jsx("p",{className:"mt-3 text-sm leading-7 text-slate-600",children:t(a.body)}),e.jsx("pre",{className:"mt-5 overflow-hidden rounded-lg bg-slate-50 p-3 font-mono text-[11.5px] leading-6 text-slate-500 ring-1 ring-slate-200",children:a.sample})]},a.title.en))})]}),e.jsx("section",{id:"how",className:"border-y border-slate-200/80 bg-slate-50/60",children:e.jsxs("div",{className:"mx-auto w-full max-w-6xl px-6 py-20 sm:px-8 lg:px-10 lg:py-24",children:[e.jsx(h,{eyebrow:t(s.how.eyebrow),title:t(s.how.title),description:t(s.how.description)}),e.jsxs("div",{className:"mt-12 grid gap-6 lg:grid-cols-[1fr_auto_1fr_auto_1fr] lg:items-stretch",children:[e.jsxs("div",{className:"rounded-2xl border border-slate-200 bg-white p-5",children:[e.jsx("div",{className:"font-mono text-[11px] font-semibold uppercase tracking-[0.18em] text-slate-500",children:t(s.how.diagramLabels.clients)}),e.jsxs("ul",{className:"mt-3 space-y-2 text-sm text-slate-700",children:[e.jsx("li",{className:"rounded-lg bg-slate-50 px-3 py-2",children:"Claude Code"}),e.jsx("li",{className:"rounded-lg bg-slate-50 px-3 py-2",children:"OpenAI SDK"}),e.jsx("li",{className:"rounded-lg bg-slate-50 px-3 py-2",children:"Anthropic SDK"}),e.jsx("li",{className:"rounded-lg bg-slate-50 px-3 py-2 text-slate-500",children:"cURL · LangChain · …"})]})]}),e.jsx("div",{className:"hidden flex-col items-center justify-center text-slate-300 lg:flex",children:e.jsx(g,{className:"h-6 w-6"})}),e.jsxs("div",{className:"rounded-2xl border border-indigo-200 bg-gradient-to-br from-indigo-50 via-white to-cyan-50 p-5 ring-1 ring-indigo-100",children:[e.jsx("div",{className:"font-mono text-[11px] font-semibold uppercase tracking-[0.18em] text-indigo-600",children:t(s.how.diagramLabels.gateway)}),e.jsx("div",{className:"mt-3 rounded-xl bg-slate-950 px-4 py-3 font-mono text-[12px] text-slate-100",children:"127.0.0.1:4100"}),e.jsx("ul",{className:"mt-3 space-y-1.5 text-[13px] text-slate-700",children:s.how.flowSteps.map((a,n)=>e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"mt-1 inline-flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-indigo-100 font-mono text-[10px] font-semibold text-indigo-700",children:n+1}),e.jsx("span",{children:t(a)})]},n))})]}),e.jsx("div",{className:"hidden flex-col items-center justify-center text-slate-300 lg:flex",children:e.jsx(g,{className:"h-6 w-6"})}),e.jsxs("div",{className:"rounded-2xl border border-slate-200 bg-white p-5",children:[e.jsx("div",{className:"font-mono text-[11px] font-semibold uppercase tracking-[0.18em] text-slate-500",children:t(s.how.diagramLabels.providers)}),e.jsxs("ul",{className:"mt-3 space-y-2 text-sm text-slate-700",children:[e.jsx("li",{className:"rounded-lg bg-slate-50 px-3 py-2",children:"OpenAI"}),e.jsx("li",{className:"rounded-lg bg-slate-50 px-3 py-2",children:"Anthropic"}),e.jsx("li",{className:"rounded-lg bg-slate-50 px-3 py-2",children:"Azure / Bedrock"}),e.jsx("li",{className:"rounded-lg bg-slate-50 px-3 py-2 text-slate-500",children:t(ee)})]})]})]}),e.jsx("div",{className:"mt-14 overflow-hidden rounded-3xl border border-slate-200 bg-white",children:e.jsxs("div",{className:"grid gap-0 lg:grid-cols-[minmax(0,1fr)_minmax(0,1.05fr)]",children:[e.jsxs("div",{className:"border-b border-slate-200 p-8 lg:border-b-0 lg:border-r lg:p-10",children:[e.jsx("div",{className:"font-mono text-[11px] font-semibold uppercase tracking-[0.22em] text-indigo-600",children:t(s.how.differentiator.eyebrow)}),e.jsx("h3",{className:"mt-3 text-2xl font-semibold tracking-[-0.01em] text-slate-950",children:t(s.how.differentiator.title)}),e.jsx("p",{className:"mt-4 text-sm leading-7 text-slate-600",children:t(s.how.differentiator.body)})]}),e.jsxs("div",{className:"bg-slate-50/60 p-8 lg:p-10",children:[e.jsx("div",{className:"font-mono text-[11px] font-semibold uppercase tracking-[0.18em] text-slate-500",children:t(s.how.differentiator.example)}),e.jsx("ul",{className:"mt-4 space-y-3",children:X.map(a=>e.jsxs("li",{className:"flex items-center gap-3 rounded-xl bg-white px-4 py-3 ring-1 ring-slate-200",children:[e.jsx("span",{className:"rounded-md bg-slate-100 px-2 py-1 font-mono text-xs text-slate-700",children:a.client}),e.jsx(g,{className:"h-3.5 w-3.5 text-slate-400"}),e.jsx("span",{className:"rounded-md bg-gradient-to-r px-2 py-1 font-mono text-xs ring-1 ring-inset ring-slate-200 bg-slate-950 text-slate-100",children:t(a.upstream)})]},a.client))})]})]})})]})}),e.jsxs("section",{id:"debug",className:"mx-auto w-full max-w-6xl px-6 py-20 sm:px-8 lg:px-10 lg:py-24",children:[e.jsx(h,{eyebrow:t(s.debug.eyebrow),title:t(s.debug.title),description:t(s.debug.description)}),e.jsx("div",{className:"mt-12 grid gap-px overflow-hidden rounded-2xl bg-slate-200 ring-1 ring-slate-200 md:grid-cols-3",children:s.debug.pillars.map(({icon:a,title:n,body:o})=>e.jsxs("div",{className:"bg-white p-7",children:[e.jsx("div",{className:"inline-flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-indigo-500/10 to-cyan-500/10 text-indigo-600 ring-1 ring-indigo-500/15",children:e.jsx(a,{className:"h-5 w-5"})}),e.jsx("h3",{className:"mt-5 text-base font-semibold text-slate-950",children:t(n)}),e.jsx("p",{className:"mt-2 text-sm leading-7 text-slate-600",children:t(o)})]},n.en))}),e.jsxs("div",{className:"mt-10 overflow-hidden rounded-2xl border border-slate-200 bg-gradient-to-br from-slate-50 to-white p-8",children:[e.jsx("h3",{className:"text-xl font-semibold text-slate-950",children:t(s.debug.payload.title)}),e.jsx("p",{className:"mt-3 max-w-3xl text-sm leading-7 text-slate-600",children:t(s.debug.payload.body)}),e.jsx("div",{className:"mt-6 grid gap-3 sm:grid-cols-2 lg:grid-cols-4",children:s.debug.payload.stages.map((a,n)=>{const o=n===0||n===3;return e.jsxs("div",{className:p("rounded-xl border px-4 py-4",o?"border-cyan-200 bg-cyan-50/60":"border-indigo-200 bg-indigo-50/60"),children:[e.jsxs("div",{className:"font-mono text-[10px] font-semibold uppercase tracking-[0.18em] text-slate-500",children:["payload [",n+1,"/4]"]}),e.jsx("div",{className:"mt-2 text-sm font-semibold text-slate-900",children:t(a)}),e.jsx("div",{className:"mt-1 font-mono text-[11px] text-slate-500",children:t(o?s.debug.payload.clientSide:s.debug.payload.upstreamSide)})]},n)})})]})]}),e.jsx("section",{id:"local",className:"border-y border-slate-200/80 bg-slate-50/60",children:e.jsxs("div",{className:"mx-auto w-full max-w-6xl px-6 py-20 sm:px-8 lg:px-10 lg:py-24",children:[e.jsx(h,{eyebrow:t(s.local.eyebrow),title:t(s.local.title),description:t(s.local.description)}),e.jsxs("div",{className:"mt-12 grid gap-8 lg:grid-cols-[minmax(0,1.05fr)_minmax(0,0.95fr)] lg:items-start",children:[e.jsx("div",{className:"grid gap-px overflow-hidden rounded-2xl bg-slate-200 ring-1 ring-slate-200 sm:grid-cols-2",children:s.local.pillars.map(({icon:a,title:n,body:o})=>e.jsxs("div",{className:"bg-white p-6",children:[e.jsx("div",{className:"inline-flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-indigo-500/10 to-cyan-500/10 text-indigo-600 ring-1 ring-indigo-500/15",children:e.jsx(a,{className:"h-5 w-5"})}),e.jsx("h3",{className:"mt-4 text-base font-semibold text-slate-950",children:t(n)}),e.jsx("p",{className:"mt-2 text-sm leading-7 text-slate-600",children:t(o)})]},n.en))}),e.jsxs("div",{children:[e.jsxs("div",{className:"overflow-hidden rounded-2xl border border-white/10 bg-slate-950 p-1.5 shadow-[0_30px_80px_-30px_rgba(15,23,42,0.45)]",children:[e.jsxs("div",{className:"flex items-center gap-1.5 px-3 py-2",children:[e.jsx("span",{className:"h-2.5 w-2.5 rounded-full bg-rose-400/70"}),e.jsx("span",{className:"h-2.5 w-2.5 rounded-full bg-amber-300/70"}),e.jsx("span",{className:"h-2.5 w-2.5 rounded-full bg-emerald-400/70"}),e.jsx("div",{className:"ml-3 flex-1 truncate rounded-md bg-white/5 px-3 py-1 font-mono text-[11px] text-slate-300",children:"~/.cc-gw"})]}),e.jsx("pre",{className:"overflow-x-auto px-5 pb-5 pt-2 font-mono text-[12.5px] leading-7 text-slate-100",children:e.jsx("code",{children:te.split(`
|
|
17
|
-
`).map((a,n)=>e.jsx("span",{className:"block",children:a.includes("#")?e.jsxs(e.Fragment,{children:[e.jsx("span",{children:a.slice(0,a.indexOf("#"))}),e.jsx("span",{className:"text-slate-500",children:a.slice(a.indexOf("#"))})]}):a},n))})})]}),e.jsx("p",{className:"mt-4 px-1 text-sm leading-7 text-slate-600",children:t(s.local.treeCaption)})]})]})]})}),e.jsxs("section",{id:"start",className:"mx-auto w-full max-w-6xl px-6 py-20 sm:px-8 lg:px-10 lg:py-24",children:[e.jsx(h,{eyebrow:t(s.start.eyebrow),title:t(s.start.title),description:t(s.start.description)}),e.jsx("ol",{className:"mt-12 grid gap-5 md:grid-cols-2",children:s.start.steps.map((a,n)=>e.jsxs("li",{className:"flex flex-col rounded-2xl border border-slate-200 bg-white p-6",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"inline-flex h-8 min-w-[2rem] items-center justify-center rounded-lg bg-slate-950 px-2 font-mono text-xs font-semibold text-white",children:String(n+1).padStart(2,"0")}),e.jsx("h3",{className:"text-base font-semibold text-slate-950",children:t(a.title)})]}),e.jsx("p",{className:"mt-3 text-sm leading-7 text-slate-600",children:t(a.body)}),e.jsx("div",{className:"mt-5",children:e.jsx(ae,{label:`step ${n+1}: ${a.title.en}`,code:a.code,copyLabel:t(z.copy),copiedLabel:t(z.copied)})})]},a.title.en))})]}),e.jsx("section",{id:"console",className:"border-y border-slate-200/80 bg-slate-50/60",children:e.jsxs("div",{className:"mx-auto w-full max-w-6xl px-6 py-20 sm:px-8 lg:px-10 lg:py-24",children:[e.jsx(h,{eyebrow:t(s.console.eyebrow),title:t(s.console.title),description:t(s.console.description)}),e.jsxs("div",{className:"mt-12 grid gap-8 lg:grid-cols-[280px_minmax(0,1fr)]",children:[e.jsx("div",{role:"tablist","aria-orientation":"vertical",className:"flex flex-col gap-1.5",children:y.map(a=>{const n=a.id===i;return e.jsxs("button",{type:"button",role:"tab",id:`console-tab-${a.id}`,"aria-selected":n,"aria-controls":`console-panel-${a.id}`,onClick:()=>x(a.id),className:p("rounded-xl border px-4 py-3 text-left transition",n?"border-indigo-500/30 bg-white shadow-[0_10px_30px_-18px_rgba(79,70,229,0.4)] ring-1 ring-indigo-500/10":"border-transparent bg-transparent hover:bg-white/70"),children:[e.jsx("div",{className:p("text-sm font-semibold",n?"text-slate-950":"text-slate-700"),children:t(a.label)}),e.jsx("div",{className:p("mt-1 text-xs leading-5",n?"text-slate-600":"text-slate-500"),children:t(a.blurb)})]},a.id)})}),e.jsxs("div",{role:"tabpanel",id:`console-panel-${c.id}`,"aria-labelledby":`console-tab-${c.id}`,className:"overflow-hidden rounded-2xl border border-slate-200 bg-slate-950 p-1.5 shadow-[0_30px_80px_-30px_rgba(15,23,42,0.45)]",children:[e.jsxs("div",{className:"flex items-center gap-1.5 px-3 py-2",children:[e.jsx("span",{className:"h-2.5 w-2.5 rounded-full bg-rose-400/70"}),e.jsx("span",{className:"h-2.5 w-2.5 rounded-full bg-amber-300/70"}),e.jsx("span",{className:"h-2.5 w-2.5 rounded-full bg-emerald-400/70"}),e.jsxs("div",{className:"ml-3 flex-1 truncate rounded-md bg-white/5 px-3 py-1 font-mono text-[11px] text-slate-300",children:["127.0.0.1:4100/ui/",c.id]})]}),e.jsx("img",{src:t(c.shot),alt:`${t(c.label)} screenshot`,className:"block w-full rounded-b-xl"},c.id+l)]})]})]})}),e.jsxs("section",{id:"fit",className:"mx-auto w-full max-w-6xl px-6 py-20 sm:px-8 lg:px-10 lg:py-24",children:[e.jsx(h,{eyebrow:t(s.fit.eyebrow),title:t(s.fit.title),description:t(s.fit.description)}),e.jsxs("div",{className:"mt-12 grid gap-5 md:grid-cols-2",children:[e.jsxs("div",{className:"rounded-2xl border border-emerald-200/70 bg-gradient-to-br from-emerald-50 to-white p-7",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-lg bg-emerald-500/15 text-emerald-600",children:e.jsx(b,{className:"h-4 w-4"})}),e.jsx("h3",{className:"text-base font-semibold text-slate-950",children:t(s.fit.yesTitle)})]}),e.jsx("ul",{className:"mt-5 space-y-3",children:s.fit.yes.map((a,n)=>e.jsxs("li",{className:"flex items-start gap-3 text-sm leading-7 text-slate-700",children:[e.jsx(b,{className:"mt-1 h-4 w-4 shrink-0 text-emerald-500"}),t(a)]},n))})]}),e.jsxs("div",{className:"rounded-2xl border border-slate-200 bg-white p-7",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-lg bg-slate-200/70 text-slate-500",children:e.jsx(w,{className:"h-4 w-4"})}),e.jsx("h3",{className:"text-base font-semibold text-slate-950",children:t(s.fit.noTitle)})]}),e.jsx("ul",{className:"mt-5 space-y-3",children:s.fit.no.map((a,n)=>e.jsxs("li",{className:"flex items-start gap-3 text-sm leading-7 text-slate-600",children:[e.jsx(w,{className:"mt-1 h-4 w-4 shrink-0 text-slate-400"}),t(a)]},n))})]})]})]}),e.jsx("section",{id:"faq",className:"border-y border-slate-200/80 bg-slate-50/60",children:e.jsxs("div",{className:"mx-auto w-full max-w-6xl px-6 py-20 sm:px-8 lg:px-10 lg:py-24",children:[e.jsx(h,{eyebrow:t(s.faq.eyebrow),title:t(s.faq.title),description:t(s.faq.description)}),e.jsx("div",{className:"mx-auto mt-12 max-w-3xl divide-y divide-slate-200 rounded-2xl border border-slate-200 bg-white",children:s.faq.items.map((a,n)=>{const o=m===n;return e.jsxs("div",{children:[e.jsxs("button",{type:"button",onClick:()=>d(o?null:n),"aria-expanded":o,className:"flex w-full items-center justify-between gap-6 px-6 py-5 text-left",children:[e.jsx("span",{className:"text-base font-semibold text-slate-900",children:t(a.q)}),e.jsx(q,{className:p("h-5 w-5 shrink-0 text-slate-400 transition-transform",o&&"rotate-180 text-slate-700")})]}),o&&e.jsx("div",{className:"px-6 pb-6 text-sm leading-7 text-slate-600",children:t(a.a)})]},n)})})]})}),e.jsx("section",{className:"px-6 py-24 sm:px-8 lg:px-10",children:e.jsxs("div",{className:"relative mx-auto w-full max-w-6xl overflow-hidden rounded-3xl bg-slate-950 px-8 py-14 text-white shadow-[0_40px_100px_-40px_rgba(15,23,42,0.5)] sm:px-12 [&_::selection]:bg-indigo-400/40 [&_::selection]:text-white",children:[e.jsx("div",{"aria-hidden":!0,className:"absolute inset-0 opacity-25",style:{backgroundImage:"linear-gradient(to right, rgba(148,163,184,0.16) 1px, transparent 1px), linear-gradient(to bottom, rgba(148,163,184,0.16) 1px, transparent 1px)",backgroundSize:"40px 40px",maskImage:"radial-gradient(ellipse at center, black 30%, transparent 75%)",WebkitMaskImage:"radial-gradient(ellipse at center, black 30%, transparent 75%)"}}),e.jsx("div",{"aria-hidden":!0,className:"pointer-events-none absolute -bottom-40 left-1/2 h-[460px] w-[900px] -translate-x-1/2 rounded-full opacity-50 blur-[100px]",style:{background:"radial-gradient(closest-side, rgba(99,102,241,0.6), transparent 70%), radial-gradient(closest-side at 70% 60%, rgba(34,211,238,0.4), transparent 70%)"}}),e.jsxs("div",{className:"relative grid gap-10 lg:grid-cols-[1.2fr_auto] lg:items-end",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-3xl font-semibold tracking-[-0.02em] sm:text-4xl",children:t(s.cta.title)}),e.jsx("p",{className:"mt-5 max-w-xl text-base leading-8 text-slate-300",children:t(s.cta.body)})]}),e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row lg:flex-col lg:items-end",children:[e.jsxs("a",{href:"https://www.npmjs.com/package/@chenpu17/cc-gw",className:"inline-flex items-center justify-center gap-2 rounded-xl bg-white px-5 py-3 text-sm font-semibold text-slate-950 transition hover:bg-slate-100",children:[e.jsx(N,{className:"h-4 w-4"}),t(s.ctaInstall)]}),e.jsxs("a",{href:"/ui/",className:"inline-flex items-center justify-center gap-2 rounded-xl border border-white/20 bg-white/5 px-5 py-3 text-sm font-semibold text-white transition hover:bg-white/10",children:[t(s.ctaConsole),e.jsx(g,{className:"h-4 w-4"})]})]})]})]})})]}),e.jsx("footer",{className:"border-t border-slate-200 bg-white",children:e.jsxs("div",{className:"mx-auto flex w-full max-w-6xl flex-col gap-4 px-6 py-10 text-sm text-slate-500 sm:px-8 lg:flex-row lg:items-center lg:justify-between lg:px-10",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(v,{className:"h-7 w-7",title:"cc-gw"}),e.jsxs("div",{children:[e.jsx("div",{className:"text-slate-700",children:t(s.footer.tagline)}),e.jsxs("div",{className:"font-mono text-[11px] text-slate-400",children:["v",j]})]})]}),e.jsxs("div",{className:"flex flex-wrap gap-5",children:[e.jsx("a",{href:"/ui/",className:"hover:text-slate-900",children:t(s.footer.console)}),e.jsx("a",{href:"https://www.npmjs.com/package/@chenpu17/cc-gw",className:"hover:text-slate-900",children:"npm"}),e.jsx("a",{href:"https://github.com/chenpu17/cc-gw2",className:"hover:text-slate-900",children:"GitHub"}),e.jsx("a",{href:"https://github.com/chenpu17/cc-gw2/releases",className:"hover:text-slate-900",children:t(s.footer.changelog)})]})]})})]})}const I=document.getElementById("landing-root");if(!I)throw new Error("Root element #landing-root not found");U.createRoot(I).render(e.jsx(B.StrictMode,{children:e.jsx(le,{})}));
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const o="0.8.29",s={version:o};export{s as p};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as n,j as o}from"./vendor-DdPBfMMb.js";import{l as i,m as p,n as m,o as t}from"./radix-C0Bt6n-I.js";import{c as l}from"./global-DA-0y145.js";const g=i,v=p,c=n.forwardRef(({className:a,align:e="center",sideOffset:r=4,...s},d)=>o.jsx(m,{children:o.jsx(t,{ref:d,align:e,sideOffset:r,className:l("z-50 w-72 rounded-[1.1rem] border border-[color:var(--surface-border)] bg-popover/96 p-4 text-popover-foreground shadow-[var(--surface-shadow-lg)] backdrop-blur outline-none data-[state=open]:animate-in data-[state=closed]:pointer-events-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",a),...s})}));c.displayName=t.displayName;export{g as P,v as a,c as b};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as a,$ as s}from"./vendor-DdPBfMMb.js";import{c as o}from"./global-DA-0y145.js";const i=s("inline-flex items-center rounded-md border-0 px-2 py-0.5 text-[11px] font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"bg-primary/10 text-primary",secondary:"border-transparent bg-secondary text-muted-foreground",destructive:"bg-red-100 text-red-700 dark:bg-red-950/40 dark:text-red-400",outline:"border border-border bg-transparent text-muted-foreground",success:"gap-1.5 bg-emerald-100 text-emerald-800 before:h-1.5 before:w-1.5 before:rounded-full before:bg-emerald-500 dark:bg-emerald-950/40 dark:text-emerald-400",warning:"bg-amber-100 text-amber-800 dark:bg-amber-950/40 dark:text-amber-400",info:"bg-indigo-100 text-indigo-700 dark:bg-indigo-950/40 dark:text-indigo-400",purple:"bg-violet-100 text-violet-700 dark:bg-violet-950/40 dark:text-violet-400",pink:"bg-pink-100 text-pink-700 dark:bg-pink-950/40 dark:text-pink-400"}},defaultVariants:{variant:"default"}});function l({className:e,variant:t,...r}){return a.jsx("div",{className:o(i({variant:t}),e),...r})}const g={auth:{session:()=>["auth","session"],web:()=>["auth","web"]},config:{full:()=>["config","full"],info:()=>["config","info"],exportTimeout:()=>["config","export-timeout"]},customEndpoints:{all:()=>["custom-endpoints"]},providers:{all:()=>["providers","all"]},stats:{overview:(e="all")=>["stats","overview",e],daily:(e,t="all")=>["stats","daily",e,t],model:(e,t,r="all")=>["stats","model",e,t,r]},status:{byEndpoint:(e="all")=>["status",e],gateway:()=>["status","gateway"]},db:{info:()=>["db","info"]},logs:{list:e=>["logs",e],recent:(e="all")=>["logs","recent",e],detail:e=>["logs","detail",e]},events:{list:e=>["events",e]},apiKeys:{all:()=>["api-keys"],overview:e=>["api-keys","overview",e],usage:e=>["api-keys","usage",e]},profiler:{status:()=>["profiler","status"],sessions:e=>["profiler","sessions",e],session:e=>["profiler","session",e]}};export{l as B,g as q};
|