rivet-design 0.14.13 → 0.14.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-variants/contracts.d.ts +30 -30
- package/dist/cli/commands/mcpServe.d.ts +1 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -96
- package/dist/index.js.map +1 -1
- package/dist/proxy-middleware/proxy-config.d.ts.map +1 -1
- package/dist/proxy-middleware/proxy-config.js +33 -19
- package/dist/proxy-middleware/proxy-config.js.map +1 -1
- package/dist/server.d.ts +0 -19
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +17 -491
- package/dist/server.js.map +1 -1
- package/dist/services/AuthService.d.ts +1 -1
- package/dist/services/AuthService.d.ts.map +1 -1
- package/dist/services/AuthService.js +5 -4
- package/dist/services/AuthService.js.map +1 -1
- package/dist/services/MCPOnboardingTelemetry.d.ts +2 -2
- package/dist/services/MCPOnboardingTelemetry.d.ts.map +1 -1
- package/dist/services/MCPOnboardingTelemetry.js +0 -3
- package/dist/services/MCPOnboardingTelemetry.js.map +1 -1
- package/dist/services/TelemetryService.d.ts +1 -96
- package/dist/services/TelemetryService.d.ts.map +1 -1
- package/dist/services/TelemetryService.js +0 -198
- package/dist/services/TelemetryService.js.map +1 -1
- package/dist/services/accessTokenRefresh.d.ts +0 -11
- package/dist/services/accessTokenRefresh.d.ts.map +1 -1
- package/dist/services/accessTokenRefresh.js +4 -24
- package/dist/services/accessTokenRefresh.js.map +1 -1
- package/package.json +1 -3
- package/src/ui/dist/assets/main-CHUtDutm.js +422 -0
- package/src/ui/dist/assets/main-CrLtwwgK.css +1 -0
- package/src/ui/dist/index.html +2 -2
- package/dist/demo/sessionRuntime.d.ts +0 -2
- package/dist/demo/sessionRuntime.d.ts.map +0 -1
- package/dist/demo/sessionRuntime.js +0 -48
- package/dist/demo/sessionRuntime.js.map +0 -1
- package/dist/hosted-demo.d.ts +0 -2
- package/dist/hosted-demo.d.ts.map +0 -1
- package/dist/hosted-demo.js +0 -83
- package/dist/hosted-demo.js.map +0 -1
- package/dist/routes/demo.d.ts +0 -33
- package/dist/routes/demo.d.ts.map +0 -1
- package/dist/routes/demo.js +0 -180
- package/dist/routes/demo.js.map +0 -1
- package/dist/services/HostedDemoAuthSessionService.d.ts +0 -50
- package/dist/services/HostedDemoAuthSessionService.d.ts.map +0 -1
- package/dist/services/HostedDemoAuthSessionService.js +0 -192
- package/dist/services/HostedDemoAuthSessionService.js.map +0 -1
- package/dist/services/HostedDemoAuthSessionStore.d.ts +0 -44
- package/dist/services/HostedDemoAuthSessionStore.d.ts.map +0 -1
- package/dist/services/HostedDemoAuthSessionStore.js +0 -90
- package/dist/services/HostedDemoAuthSessionStore.js.map +0 -1
- package/dist/services/HostedDemoSessionService.d.ts +0 -91
- package/dist/services/HostedDemoSessionService.d.ts.map +0 -1
- package/dist/services/HostedDemoSessionService.js +0 -568
- package/dist/services/HostedDemoSessionService.js.map +0 -1
- package/dist/services/HostedDemoSessionStore.d.ts +0 -49
- package/dist/services/HostedDemoSessionStore.d.ts.map +0 -1
- package/dist/services/HostedDemoSessionStore.js +0 -90
- package/dist/services/HostedDemoSessionStore.js.map +0 -1
- package/dist/services/hostedDemoSessionAuthRefresh.d.ts +0 -18
- package/dist/services/hostedDemoSessionAuthRefresh.d.ts.map +0 -1
- package/dist/services/hostedDemoSessionAuthRefresh.js +0 -39
- package/dist/services/hostedDemoSessionAuthRefresh.js.map +0 -1
- package/dist/utils/shouldRecordHostedDemoSessionAction.d.ts +0 -8
- package/dist/utils/shouldRecordHostedDemoSessionAction.d.ts.map +0 -1
- package/dist/utils/shouldRecordHostedDemoSessionAction.js +0 -11
- package/dist/utils/shouldRecordHostedDemoSessionAction.js.map +0 -1
- package/src/ui/dist/assets/main-BfVGaiD6.js +0 -422
- package/src/ui/dist/assets/main-CobdEReL.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.la-scene{overflow:hidden;isolation:isolate;background:radial-gradient(130% 120% at 50% 42%,#fff 60%,#f0efec)}.la-obj{position:absolute;top:0;left:0;transform-origin:50% 50%;will-change:transform,opacity,filter;-webkit-user-select:none;user-select:none;pointer-events:none}.la-obj img{display:block;width:100%;height:auto;filter:drop-shadow(0 10px 12px rgba(40,33,28,.22)) drop-shadow(0 2px 3px rgba(40,33,28,.18))}.la-logo-stage{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);pointer-events:none}.la-mark{position:absolute;top:0;left:0;width:100%;height:100%}/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-500:oklch(63.7% .237 25.331);--color-emerald-500:oklch(69.6% .17 162.48);--color-neutral-700:oklch(37.1% 0 none);--color-neutral-800:oklch(26.9% 0 none);--color-neutral-900:oklch(20.5% 0 none);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-2xl:42rem;--container-3xl:48rem;--container-5xl:64rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}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;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*,:after,:before{border-color:var(--color-main-border,#232328)}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{inset-inline:0}.inset-y-0{inset-block:0}.top-0{top:0}.top-1{top:var(--spacing)}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.right-0{right:0}.right-1{right:var(--spacing)}.right-2{right:calc(var(--spacing) * 2)}.bottom-0{bottom:0}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.isolate{isolation:isolate}.z-0{z-index:0}.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-\[60\]{z-index:60}.z-\[100\]{z-index:100}.z-comment-preview{z-index:55}.z-max{z-index:999999}.z-tooltip{z-index:70}.order-first{order:-9999}.col-start-1{grid-column-start:1}.row-start-1{grid-row-start:1}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-\[18px\]{margin-top:18px}.-mr-0\.5{margin-right:calc(var(--spacing) * -.5)}.mr-1{margin-right:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-1{margin-left:var(--spacing)}.ml-auto{margin-left:auto}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide::-webkit-scrollbar{display:none}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.table{display:table}.aspect-\[4\/3\]{aspect-ratio:4/3}.h-1{height:var(--spacing)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-11{height:calc(var(--spacing) * 11)}.h-16{height:calc(var(--spacing) * 16)}.h-44{height:calc(var(--spacing) * 44)}.h-56{height:calc(var(--spacing) * 56)}.h-80{height:calc(var(--spacing) * 80)}.h-96{height:calc(var(--spacing) * 96)}.h-\[52px\]{height:52px}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-10{max-height:calc(var(--spacing) * 10)}.max-h-32{max-height:calc(var(--spacing) * 32)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.min-h-0{min-height:0}.min-h-\[38px\]{min-height:38px}.min-h-screen{min-height:100vh}.w-0\.5{width:calc(var(--spacing) * .5)}.w-1{width:var(--spacing)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-11{width:calc(var(--spacing) * 11)}.w-16{width:calc(var(--spacing) * 16)}.w-28{width:calc(var(--spacing) * 28)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-\[52px\]{width:52px}.w-\[360px\]{width:360px}.w-\[440px\]{width:440px}.w-\[560px\]{width:560px}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-\[8rem\]{max-width:8rem}.max-w-\[14rem\]{max-width:14rem}.max-w-\[180px\]{max-width:180px}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:0}.min-w-\[140px\]{min-width:140px}.min-w-\[180px\]{min-width:180px}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-auto{cursor:auto}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[minmax\(140px\,1fr\)_minmax\(110px\,auto\)_minmax\(220px\,2fr\)\]{grid-template-columns:minmax(140px,1fr) minmax(110px,auto) minmax(220px,2fr)}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-10{gap:calc(var(--spacing) * 10)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)){border-color:var(--border)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[22px\]{border-radius:22px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-\[\#6B97FF\]{border-color:#6b97ff}.border-accent-success\/40{border-color:#10b98166}.border-accent-warning\/40{border-color:#f59e0b66}.border-accent\/40{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.border-accent\/40{border-color:color-mix(in oklab,var(--accent) 40%,transparent)}}.border-black\/10{border-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.border-black\/10{border-color:color-mix(in oklab,var(--color-black) 10%,transparent)}}.border-border{border-color:var(--border)}.border-content-muted\/30{border-color:#d1d5db4d}.border-content-muted\/40{border-color:#d1d5db66}.border-current{border-color:currentColor}.border-divider{border-color:#4b5563}.border-hover{border-color:var(--hover)}.border-main-border{border-color:#232328}.border-primary{border-color:#f30}.border-primary\/40{border-color:#f306}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.border-white\/20{border-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.border-t-transparent{border-top-color:#0000}.bg-\[\#1c1c20\]{background-color:#1c1c20}.bg-\[\#18181b\]{background-color:#18181b}.bg-\[\#b1b1b1\]{background-color:#b1b1b1}.bg-\[\#e60023\]{background-color:#e60023}.bg-accent{background-color:var(--accent)}.bg-accent-error{background-color:#ef4444}.bg-accent-success{background-color:#10b981}.bg-accent-success\/10{background-color:#10b9811a}.bg-accent-warning{background-color:#f59e0b}.bg-accent-warning\/10{background-color:#f59e0b1a}.bg-accent\/10{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-accent\/10{background-color:color-mix(in oklab,var(--accent) 10%,transparent)}}.bg-accent\/20{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-accent\/20{background-color:color-mix(in oklab,var(--accent) 20%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-border{background-color:var(--border)}.bg-card{background-color:var(--card)}.bg-content-muted{background-color:#d1d5db}.bg-divider{background-color:#4b5563}.bg-foreground{background-color:var(--foreground)}.bg-hover{background-color:var(--hover)}.bg-input{background-color:var(--input)}.bg-main{background-color:#1c1c20}.bg-main-hover{background-color:#404040}.bg-main-input{background-color:#2e2e2e}.bg-main-input\/40{background-color:#2e2e2e66}.bg-main-light{background-color:#1e1e22}.bg-main\/90{background-color:#1c1c20e6}.bg-muted{background-color:var(--muted)}.bg-muted-foreground\/10{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/10{background-color:color-mix(in oklab,var(--muted-foreground) 10%,transparent)}}.bg-muted-foreground\/15{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/15{background-color:color-mix(in oklab,var(--muted-foreground) 15%,transparent)}}.bg-neutral-800\/70{background-color:#262626b3}@supports (color:color-mix(in lab,red,red)){.bg-neutral-800\/70{background-color:color-mix(in oklab,var(--color-neutral-800) 70%,transparent)}}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-primary{background-color:#f30}.bg-primary\/10{background-color:#ff33001a}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.bg-red-500\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/15{background-color:color-mix(in oklab,var(--color-red-500) 15%,transparent)}}.bg-secondary{background-color:var(--secondary)}.bg-selected{background-color:var(--selected)}.bg-surface-1{background-color:var(--surface-1)}.bg-surface-2{background-color:var(--surface-2)}.bg-surface-3{background-color:var(--surface-3)}.bg-surface-4{background-color:var(--surface-4)}.bg-surface-5{background-color:var(--surface-5)}.bg-surface-6{background-color:var(--surface-6)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/15{background-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.bg-white\/15{background-color:color-mix(in oklab,var(--color-white) 15%,transparent)}}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-\[18px\]{padding:18px}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-12{padding-bottom:calc(var(--spacing) * 12)}.pb-\[14vh\]{padding-bottom:14vh}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-7{padding-left:calc(var(--spacing) * 7)}.text-center{text-align:center}.text-left{text-align:left}.font-main{font-family:Satoshi,Inter,system-ui,-apple-system,Segoe UI,sans-serif}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-7{--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#18181b\]{color:#18181b}.text-\[\#71717a\]{color:#71717a}.text-accent{color:var(--accent)}.text-accent-success{color:#10b981}.text-accent-warning{color:#f59e0b}.text-content{color:#fff}.text-content-muted{color:#d1d5db}.text-content-subtle{color:#9ca3af}.text-emerald-500{color:var(--color-emerald-500)}.text-foreground{color:var(--foreground)}.text-muted-foreground{color:var(--muted-foreground)}.text-primary{color:#f30}.text-primary-foreground{color:var(--primary-foreground)}.text-red-200{color:var(--color-red-200)}.text-red-300{color:var(--color-red-300)}.text-red-500{color:var(--color-red-500)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.placeholder-content-subtle::placeholder{color:#9ca3af}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_2px_8px_rgba\(0\,0\,0\,0\.2\)\,0_4px_16px_rgba\(0\,0\,0\,0\.1\)\]{--tw-shadow:0 2px 8px var(--tw-shadow-color,#0003), 0 4px 16px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_12px_rgba\(0\,0\,0\,0\.28\)\,0_10px_24px_rgba\(0\,0\,0\,0\.16\)\]{--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000047), 0 10px 24px var(--tw-shadow-color,#00000029);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_8px_24px_rgba\(40\,33\,28\,0\.14\)\]{--tw-shadow:0 8px 24px var(--tw-shadow-color,#28211c24);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-surface-3{--tw-shadow:var(--shadow-surface-3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-surface-4{--tw-shadow:var(--shadow-surface-4);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-content-muted\/40{--tw-ring-color:oklab(87.1681% -.00188759 -.00914592/.4)}.ring-secondary{--tw-ring-color:var(--secondary)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.outline-transparent{outline-color:#0000}.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,)}.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-sm{--tw-backdrop-blur:blur(var(--blur-sm));-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,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[background-color\,box-shadow\]{transition-property:background-color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,font-variation-settings\]{transition-property:color,font-variation-settings;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,stroke-width\]{transition-property:color,stroke-width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[outline-color\]{transition-property:outline-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-80{--tw-duration:80ms;transition-duration:80ms}.duration-150{--tw-duration:.15s;transition-duration:.15s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}.ring-inset{--tw-ring-inset:inset}@media(hover:hover){.group-hover\:pointer-events-auto:is(:where(.group):hover *){pointer-events:auto}.group-hover\:border-content-muted:is(:where(.group):hover *){border-color:#d1d5db}.group-hover\:opacity-0:is(:where(.group):hover *){opacity:0}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/resize\:w-0\.5:is(:where(.group\/resize):hover *){width:calc(var(--spacing) * .5)}.group-hover\/resize\:bg-content-muted:is(:where(.group\/resize):hover *){background-color:#d1d5db}}.group-has-\[\:focus-visible\]\:opacity-0:is(:where(.group):has(:focus-visible) *){opacity:0}.placeholder\:text-content-muted::placeholder{color:#d1d5db}.placeholder\:text-content-subtle::placeholder{color:#9ca3af}.focus-within\:outline-white\/20:focus-within{outline-color:#fff3}@supports (color:color-mix(in lab,red,red)){.focus-within\:outline-white\/20:focus-within{outline-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}@media(hover:hover){.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:bg-\[\#2a2a2a\]:hover{background-color:#2a2a2a}.hover\:bg-\[\#faf9f7\]:hover{background-color:#faf9f7}.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-divider:hover{background-color:#4b5563}.hover\:bg-hover:hover{background-color:var(--hover)}.hover\:bg-main-border:hover{background-color:#232328}.hover\:bg-main-hover:hover{background-color:#404040}.hover\:bg-main-input:hover{background-color:#2e2e2e}.hover\:bg-main\/80:hover{background-color:#1c1c20cc}.hover\:bg-neutral-700\/90:hover{background-color:#404040e6}@supports (color:color-mix(in lab,red,red)){.hover\:bg-neutral-700\/90:hover{background-color:color-mix(in oklab,var(--color-neutral-700) 90%,transparent)}}.hover\:bg-primary-hover:hover{background-color:#c2410c}.hover\:bg-red-500\/10:hover{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/10:hover{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.hover\:bg-red-500\/25:hover{background-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/25:hover{background-color:color-mix(in oklab,var(--color-red-500) 25%,transparent)}}.hover\:bg-surface-3:hover{background-color:var(--surface-3)}.hover\:bg-surface-5:hover{background-color:var(--surface-5)}.hover\:text-accent-error:hover{color:#ef4444}.hover\:text-content:hover{color:#fff}.hover\:text-red-300:hover{color:var(--color-red-300)}}.focus\:border-primary:focus{border-color:#f30}.focus\:bg-hover:focus{background-color:var(--hover)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-content-muted\/40:focus{--tw-ring-color:oklab(87.1681% -.00188759 -.00914592/.4)}.focus\:ring-content-muted\/50:focus{--tw-ring-color:oklab(87.1681% -.00188759 -.00914592/.5)}.focus\:ring-primary\/30:focus{--tw-ring-color:oklab(64.6321% .202926 .129852/.3)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[\#6B97FF\]:focus-visible{--tw-ring-color:#6b97ff}.focus-visible\:ring-content-muted\/40:focus-visible{--tw-ring-color:oklab(87.1681% -.00188759 -.00914592/.4)}.focus-visible\:ring-white\/75:focus-visible{--tw-ring-color:#ffffffbf}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-white\/75:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-white) 75%, transparent)}}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-80:disabled{opacity:.8}.has-\[\:focus-visible\]\:pointer-events-auto:has(:focus-visible){pointer-events:auto}.has-\[\:focus-visible\]\:opacity-100:has(:focus-visible){opacity:1}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}@media(min-width:40rem){.sm\:col-span-3{grid-column:span 3/span 3}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media(min-width:64rem){.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-\[1fr_1fr\]{grid-template-columns:1fr 1fr}.lg\:flex-row{flex-direction:row}.lg\:items-end{align-items:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:px-8{padding-inline:calc(var(--spacing) * 8)}}@media(prefers-color-scheme:dark){.dark\:bg-accent\/12{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-accent\/12{background-color:color-mix(in oklab,var(--accent) 12%,transparent)}}}}:root{--background:#1c1c20;--foreground:#fff;--card:#1e1e22;--card-foreground:#fff;--bg-main:#1c1c20;--main-border:#232328;--popover:#232328;--popover-foreground:#fff;--primary:#f30;--primary-foreground:#fff;--secondary:#2e2e2e;--secondary-foreground:#fff;--muted:#2e2e2e;--muted-foreground:#9ca3af;--accent:#333;--accent-foreground:#fff;--selected:#404040;--border:#ffffff1f;--input:#404040;--ring:#404040;--destructive:#ef4444;--destructive-foreground:#fff;--destructive-light:#450a0a;--hover:#ffffff0f;--active:#ffffff1a;--checker-a:#1f1f1f;--checker-b:#2a2a2a;--surface-1:#1c1c20;--surface-2:#232328;--surface-3:#2a2a30;--surface-4:#313138;--surface-5:#383840;--surface-6:#3f3f48;--surface-7:#464650;--surface-8:#4d4d58;--dm-hi-base:#ffffff03;--dm-hi-mid:#ffffff05;--dm-hi-high:#ffffff0a;--dm-hi-peak:#ffffff0f;--dm-ring-base:#ffffff05;--dm-ring-mid:#ffffff0a;--dm-ring-high:#ffffff0f;--dm-drop:#0000002e;--shadow-surface-1:inset 0 0 0 1px var(--dm-ring-base);--shadow-surface-2:inset 0 1px 0 0 var(--dm-hi-base), inset 0 0 0 1px var(--dm-ring-base), 0 1px 1px -.5px var(--dm-drop);--shadow-surface-3:inset 0 1px 0 0 var(--dm-hi-mid), inset 0 0 0 1px var(--dm-ring-base), 0 0 0 1px #0000001f, 0 1px 1px -.5px var(--dm-drop), 0 3px 3px -1.5px var(--dm-drop);--shadow-surface-4:inset 0 1px 0 0 var(--dm-hi-mid), inset 0 0 0 1px var(--dm-ring-mid), 0 0 0 1px #00000024, 0 1px 1px -.5px var(--dm-drop), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop);--shadow-surface-5:inset 0 1px 0 0 var(--dm-hi-high), inset 0 0 0 1px var(--dm-ring-mid), 0 0 0 1px #00000029, 0 1px 1px -.5px var(--dm-drop), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop), 0 12px 12px -6px var(--dm-drop);--shadow-surface-6:inset 0 1px 0 0 var(--dm-hi-high), inset 0 0 0 1px var(--dm-ring-high), 0 0 0 1px #0000002e, 0 1px 1px -.5px var(--dm-drop), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop), 0 12px 12px -6px var(--dm-drop), 0 24px 24px -12px var(--dm-drop);--shadow-surface-7:inset 0 1px 0 0 var(--dm-hi-peak), inset 0 0 0 1px var(--dm-ring-high), 0 0 0 1px #0003, 0 1px 1px -.5px var(--dm-drop), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop), 0 12px 12px -6px var(--dm-drop), 0 24px 24px -12px var(--dm-drop), 0 48px 48px -24px var(--dm-drop);--shadow-surface-8:inset 0 1px 0 0 var(--dm-hi-peak), inset 0 0 0 1px var(--dm-ring-high), 0 0 0 1px #00000038, 0 1px 1px -.5px var(--dm-drop), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop), 0 12px 12px -6px var(--dm-drop), 0 24px 24px -12px var(--dm-drop), 0 48px 48px -24px var(--dm-drop), 0 96px 96px -48px var(--dm-drop)}html,body{background-color:var(--background);overflow:hidden}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;font-family:Satoshi,Inter,system-ui,sans-serif}@font-face{font-family:Satoshi;src:url(/fonts/Satoshi-Variable.woff2)format("woff2-variations");font-weight:300 900;font-style:normal;font-display:swap}@font-face{font-family:Satoshi;src:url(/fonts/Satoshi-VariableItalic.woff2)format("woff2-variations");font-weight:300 900;font-style:italic;font-display:swap}@font-face{font-family:Goldman;src:url(/fonts/Goldman-Regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Goldman;src:url(/fonts/Goldman-Bold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@keyframes rivet-token-highlight{0%{transform:scale(1.05);box-shadow:0 0 0 2px #facc15,0 0 0 6px #facc1580}50%{transform:scale(1.02);box-shadow:0 0 0 2px #facc15,0 0 0 8px #facc1599}to{transform:scale(1);box-shadow:0 0 #facc1500,0 0 #facc1500}}*{scrollbar-width:thin;scrollbar-color:#404040 transparent}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0;border-radius:4px}::-webkit-scrollbar-thumb{background:#3a3a3f padding-box padding-box;border:2px solid #0000;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#505058 padding-box padding-box;border:2px solid #0000}::-webkit-scrollbar-corner{background:0 0}.markdown-content{color:#fff;word-break:break-word;overflow-wrap:anywhere;min-width:0;font-size:.875rem;line-height:1.625}.markdown-content h1,.markdown-content h2,.markdown-content h3,.markdown-content h4,.markdown-content h5,.markdown-content h6{color:#fff;margin-top:1rem;margin-bottom:.25rem;font-weight:600;line-height:1.3}.markdown-content h1{font-size:1.25rem}.markdown-content h2{font-size:1.125rem}.markdown-content h3{font-size:1rem}.markdown-content p{margin:.5rem 0}.markdown-content strong{color:#fff;font-weight:600}.markdown-content em{font-style:italic}.markdown-content a{color:#60a5fa;text-decoration:underline}.markdown-content a:hover{color:#93bbfd}.markdown-content ul,.markdown-content ol{margin:.5rem 0;padding-left:1.25rem}.markdown-content ul{list-style-type:disc}.markdown-content ol{list-style-type:decimal}.markdown-content li{margin:.25rem 0}.markdown-content li>ul,.markdown-content li>ol{margin:0}.markdown-inline-code{color:#e5e7eb;overflow-wrap:anywhere;background:#ffffff1a;border-radius:.25rem;padding:.125rem .375rem;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;font-size:.8125rem}.markdown-content blockquote{color:#9ca3af;border-left:3px solid #4b5563;margin:.5rem 0;padding-left:.75rem}.markdown-content table{border-collapse:collapse;width:100%;margin:.5rem 0;font-size:.8125rem}.markdown-content th,.markdown-content td{text-align:left;border:1px solid #4b5563;padding:.375rem .625rem}.markdown-content th{color:#fff;background:#ffffff0d;font-weight:600}.markdown-content hr{border:none;border-top:1px solid #4b5563;margin:.75rem 0}.markdown-content del{color:#9ca3af;text-decoration:line-through}.markdown-content>:first-child{margin-top:0}.markdown-content>:last-child{margin-bottom:0}@keyframes rivet-sparkle-scroll{0%{transform:translateY(0)}to{transform:translateY(-6em)}}.rivet-sparkle-strip{animation:.9s steps(6,end) infinite rivet-sparkle-scroll}@media(prefers-reduced-motion:reduce){.rivet-sparkle-strip{animation:none}}.rivet-skeleton{background-color:#a3a3aa14;position:relative;overflow:hidden}.rivet-skeleton:after{content:"";background:linear-gradient(100deg,#0000 20%,#ffffff0f,#0000 80%);animation:1.6s ease-in-out infinite rivet-skeleton-sweep;position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%)}@keyframes rivet-skeleton-sweep{to{transform:translate(100%)}}@media(prefers-reduced-motion:reduce){.rivet-skeleton:after{animation:none}}@keyframes shimmer{0%{background-position:0 0}to{background-position:100% 0}}.shimmer-text{-webkit-text-fill-color:transparent;color:#0000;background:linear-gradient(90deg,#a3a3a3,#a3a3a3 35%,#525252,#a3a3a3 65%,#a3a3a3) 0 0/300% 100%;-webkit-background-clip:text;background-clip:text;animation:1.5s ease-in-out infinite shimmer}.glass-panel{-webkit-backdrop-filter:blur(20px);background:#ffffff04;border:1px solid #ffffff08}.active-push:active{transition:transform .1s;transform:scale(.98)}:root{--variant-split-ease:cubic-bezier(.4, 0, .2, 1);--variant-split-accent:var(--color-primary,#f30);--variant-split-zone-bg:#26262aeb;--variant-split-zone-border:#ffffff0a;--variant-split-zone-shadow:0 30px 60px -20px #0000008c, 0 0 90px 10px #ffdca00d}.variant-preview-region{isolation:isolate}.variant-preview-primary{transition:filter .2s var(--variant-split-ease)}.variant-preview-region.is-dragging .variant-preview-primary{filter:brightness(.92)saturate(.92)}.variant-preview-region.is-dragging iframe{pointer-events:none}.variant-preview-atmosphere{pointer-events:none;opacity:0;z-index:30;transition:opacity .2s var(--variant-split-ease);background:radial-gradient(60% 50%,#0000,#00000059);position:absolute;top:0;right:0;bottom:0;left:0}.variant-preview-region.is-dragging .variant-preview-atmosphere{opacity:1}.variant-drop-zones{pointer-events:none;z-index:50;position:absolute;top:16px;right:16px;bottom:16px;left:16px}.variant-drop-zone{background:var(--variant-split-zone-bg);border:1px solid var(--variant-split-zone-border);pointer-events:auto;opacity:0;filter:blur(12px);width:14%;min-width:130px;max-width:180px;box-shadow:var(--variant-split-zone-shadow);transition:opacity .32s var(--variant-split-ease),transform .32s var(--variant-split-ease),filter .32s var(--variant-split-ease),box-shadow .24s var(--variant-split-ease);border-radius:14px;justify-content:center;align-items:center;display:flex;position:absolute;top:0;bottom:0;transform:scale(.94)}.variant-drop-zone.is-left{left:8px}.variant-drop-zone.is-right{right:8px}.variant-drop-zones.is-visible .variant-drop-zone{opacity:1;filter:blur();transform:scale(1)}.variant-drop-zones.is-exiting .variant-drop-zone{opacity:0;filter:blur(8px);transition:opacity .2s var(--variant-split-ease),transform .2s var(--variant-split-ease),filter .2s var(--variant-split-ease);transform:scale(.97)}.variant-drop-zone.is-disabled{opacity:.6;filter:blur(2px)saturate(.6)}.variant-drop-zone-inner{opacity:0;filter:blur(4px);transition:opacity .22s var(--variant-split-ease),transform .22s var(--variant-split-ease),filter .22s var(--variant-split-ease);flex-direction:column;justify-content:center;align-items:center;gap:12px;display:flex;position:absolute;top:0;right:0;bottom:0;left:0;transform:translateY(6px)}.variant-drop-zones.is-visible .variant-drop-zone-inner{opacity:1;filter:blur();transition-delay:.18s;transform:translateY(0)}.variant-drop-zone.is-hover .variant-drop-zone-caption{color:var(--variant-split-accent)}.variant-drop-zone-icon{border:1.5px solid #ffffff73;border-radius:6px;width:36px;height:28px;position:relative;overflow:hidden}.variant-drop-zone-icon:after{content:"";background:#ffffff73;width:1.5px;position:absolute;top:0;bottom:0}.variant-drop-zone-icon.is-left:after{left:11px}.variant-drop-zone-icon.is-right:after{right:11px}.variant-drop-zone-icon.is-left:before{content:"";background:#ffffff14;width:11px;position:absolute;top:0;bottom:0;left:0}.variant-drop-zone-icon.is-right:before{content:"";background:#ffffff14;width:11px;position:absolute;top:0;bottom:0;right:0}.variant-drop-zone.is-hover .variant-drop-zone-icon{border-color:var(--variant-split-accent)}.variant-drop-zone.is-hover .variant-drop-zone-icon:after,.variant-drop-zone.is-hover .variant-drop-zone-icon.is-left:before,.variant-drop-zone.is-hover .variant-drop-zone-icon.is-right:before{background:var(--variant-split-accent)}@supports (color:color-mix(in lab,red,red)){.variant-drop-zone.is-hover .variant-drop-zone-icon.is-left:before,.variant-drop-zone.is-hover .variant-drop-zone-icon.is-right:before{background:color-mix(in srgb,var(--variant-split-accent) 22%,transparent)}}.variant-drop-zone-caption{letter-spacing:.02em;color:#fff9;text-align:center;max-width:80%;font-size:11.5px;line-height:1.35}.variant-drop-zone-border{border:2px dashed var(--variant-split-accent);opacity:0;transition:opacity .24s var(--variant-split-ease);pointer-events:none;border-radius:10px;position:absolute;top:4px;right:4px;bottom:4px;left:4px}.variant-drop-zone.is-hover .variant-drop-zone-border{opacity:1}.variant-drop-zone-preview{display:none}.variant-drag-ghost{pointer-events:none;z-index:60;background:#1f1f21f5;border:1px solid #ffffff0f;border-radius:10px;padding:8px 12px;position:fixed;top:0;left:0;box-shadow:inset 0 0 0 1px #ffffff05,0 24px 60px -10px #0009,0 0 80px 10px #ffdc8c0f}.variant-drag-ghost-body{flex-direction:column;min-width:0;display:flex}.variant-drag-ghost-row{align-items:center;gap:8px;min-width:0;display:flex}.variant-drag-ghost-title{color:#ffffffeb;white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;font-size:13px;font-weight:500;overflow:hidden}.variant-drag-ghost-tag{white-space:nowrap;border-radius:4px;flex-shrink:0;padding:1px 6px;font-size:10px;font-weight:500}.variant-drag-ghost-desc{color:#ffffff80;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-top:2px;font-size:12px;line-height:1.35;display:-webkit-box;overflow:hidden}.variant-split-secondary{border-left:1px solid var(--main-border,#ffffff0f);background:var(--bg-main,#0d0d0e);min-width:0;animation:variantSplitSecondaryEnter .42s var(--variant-split-ease) both;flex-direction:column;flex:1 1 0;display:flex;position:relative}.variant-preview-region.is-split>.variant-preview-row>.variant-preview-primary{border-right:1px solid var(--main-border,#ffffff0f)}@keyframes variantSplitSecondaryEnter{0%{opacity:0}to{opacity:1}}.variant-split-secondary-toolbar{background:var(--bg-main);border-bottom:1px solid var(--main-border);color:#9ca3af;flex:0 0 32px;justify-content:space-between;align-items:center;height:32px;padding:0 10px;font-size:11.5px;display:flex}.variant-split-secondary-label{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.variant-split-secondary-close{-webkit-appearance:none;-moz-appearance:none;appearance:none;color:#ffffff8c;cursor:pointer;transition:color .14s var(--variant-split-ease),background-color .14s var(--variant-split-ease);background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:4px;display:inline-flex}.variant-split-secondary-close:hover{color:#fff;background:#404040}.variant-split-secondary-iframe{background:#fff;border:0;flex:1;width:100%;height:100%}@media(prefers-reduced-motion:reduce){.variant-drop-zone,.variant-drop-zone-inner,.variant-drop-zone-preview,.variant-drop-zone-border,.variant-preview-primary,.variant-preview-atmosphere,.variant-split-secondary,.variant-split-secondary-close{filter:none!important;transition-duration:80ms!important;animation-duration:80ms!important;transform:none!important}.variant-drop-zones.is-visible .variant-drop-zone-inner{transition-delay:0s}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
|
package/src/ui/dist/index.html
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
|
8
8
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
9
9
|
<title>Rivet - The visual editor for design</title>
|
|
10
|
-
<script type="module" crossorigin src="/assets/main-
|
|
11
|
-
<link rel="stylesheet" crossorigin href="/assets/main-
|
|
10
|
+
<script type="module" crossorigin src="/assets/main-CHUtDutm.js"></script>
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/assets/main-CrLtwwgK.css">
|
|
12
12
|
</head>
|
|
13
13
|
<body>
|
|
14
14
|
<div id="root"></div>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sessionRuntime.d.ts","sourceRoot":"","sources":["../../src/demo/sessionRuntime.ts"],"names":[],"mappings":""}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const zod_1 = require("zod");
|
|
4
|
-
const index_core_1 = require("../index-core");
|
|
5
|
-
const server_1 = require("../server");
|
|
6
|
-
const TelemetryService_1 = require("../services/TelemetryService");
|
|
7
|
-
const log = (0, index_core_1.createLogger)('HostedDemoSessionRuntime');
|
|
8
|
-
const runtimeEnvSchema = zod_1.z.object({
|
|
9
|
-
RIVET_SESSION_ID: zod_1.z.string().min(1),
|
|
10
|
-
RIVET_SESSION_PROJECT_PATH: zod_1.z.string().min(1),
|
|
11
|
-
RIVET_SESSION_RIVET_PORT: zod_1.z.coerce.number().int().positive(),
|
|
12
|
-
});
|
|
13
|
-
const main = async () => {
|
|
14
|
-
const env = runtimeEnvSchema.parse(process.env);
|
|
15
|
-
const telemetry = new TelemetryService_1.TelemetryService({ source: 'tryout' });
|
|
16
|
-
const server = await (0, server_1.startServer)({
|
|
17
|
-
framework: 'static',
|
|
18
|
-
projectPath: env.RIVET_SESSION_PROJECT_PATH,
|
|
19
|
-
staticEntry: 'index.html',
|
|
20
|
-
rivetPort: env.RIVET_SESSION_RIVET_PORT,
|
|
21
|
-
telemetry,
|
|
22
|
-
skipProcessHandlers: true,
|
|
23
|
-
isGitEnabled: false,
|
|
24
|
-
});
|
|
25
|
-
telemetry.trackTryoutRuntimeStarted({
|
|
26
|
-
demoSessionId: env.RIVET_SESSION_ID,
|
|
27
|
-
rivetPort: env.RIVET_SESSION_RIVET_PORT,
|
|
28
|
-
deploymentEnv: process.env.NODE_ENV ?? 'development',
|
|
29
|
-
});
|
|
30
|
-
const shutdown = async (signal) => {
|
|
31
|
-
telemetry.trackTryoutRuntimeShutdown({
|
|
32
|
-
demoSessionId: env.RIVET_SESSION_ID,
|
|
33
|
-
signal,
|
|
34
|
-
deploymentEnv: process.env.NODE_ENV ?? 'development',
|
|
35
|
-
});
|
|
36
|
-
log.info(`Shutting down hosted session runtime ${env.RIVET_SESSION_ID}`);
|
|
37
|
-
await server.close();
|
|
38
|
-
process.exit(0);
|
|
39
|
-
};
|
|
40
|
-
process.on('SIGTERM', () => {
|
|
41
|
-
void shutdown('SIGTERM');
|
|
42
|
-
});
|
|
43
|
-
process.on('SIGINT', () => {
|
|
44
|
-
void shutdown('SIGINT');
|
|
45
|
-
});
|
|
46
|
-
};
|
|
47
|
-
void main();
|
|
48
|
-
//# sourceMappingURL=sessionRuntime.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sessionRuntime.js","sourceRoot":"","sources":["../../src/demo/sessionRuntime.ts"],"names":[],"mappings":";;AAAA,6BAAwB;AACxB,8CAA6C;AAC7C,sCAAwC;AACxC,mEAAgE;AAEhE,MAAM,GAAG,GAAG,IAAA,yBAAY,EAAC,0BAA0B,CAAC,CAAC;AAErD,MAAM,gBAAgB,GAAG,OAAC,CAAC,MAAM,CAAC;IAChC,gBAAgB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,0BAA0B,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,wBAAwB,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CAC7D,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;IACrC,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,mCAAgB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAW,EAAC;QAC/B,SAAS,EAAE,QAAQ;QACnB,WAAW,EAAE,GAAG,CAAC,0BAA0B;QAC3C,WAAW,EAAE,YAAY;QACzB,SAAS,EAAE,GAAG,CAAC,wBAAwB;QACvC,SAAS;QACT,mBAAmB,EAAE,IAAI;QACzB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IACH,SAAS,CAAC,yBAAyB,CAAC;QAClC,aAAa,EAAE,GAAG,CAAC,gBAAgB;QACnC,SAAS,EAAE,GAAG,CAAC,wBAAwB;QACvC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa;KACrD,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,KAAK,EAAE,MAA4B,EAAiB,EAAE;QACrE,SAAS,CAAC,0BAA0B,CAAC;YACnC,aAAa,EAAE,GAAG,CAAC,gBAAgB;YACnC,MAAM;YACN,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa;SACrD,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,wCAAwC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACzE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,KAAK,IAAI,EAAE,CAAC"}
|
package/dist/hosted-demo.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-demo.d.ts","sourceRoot":"","sources":["../src/hosted-demo.ts"],"names":[],"mappings":""}
|
package/dist/hosted-demo.js
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const zod_1 = require("zod");
|
|
4
|
-
const index_core_1 = require("./index-core");
|
|
5
|
-
const server_1 = require("./server");
|
|
6
|
-
const TelemetryService_1 = require("./services/TelemetryService");
|
|
7
|
-
const log = (0, index_core_1.createLogger)('HostedDemoBootstrap');
|
|
8
|
-
/**
|
|
9
|
-
* Optional Redis URLs let multiple hosts share state: auth cookie sessions (`DEMO_AUTH_REDIS_URL`)
|
|
10
|
-
* and demo session metadata (`DEMO_SESSION_REDIS_URL`, falling back to the auth URL when unset).
|
|
11
|
-
* When omitted, storage stays in-process for single-instance runs.
|
|
12
|
-
*/
|
|
13
|
-
const hostedDemoEnvSchema = zod_1.z.object({
|
|
14
|
-
PORT: zod_1.z.coerce.number().int().positive().default(4000),
|
|
15
|
-
DEMO_PROJECT_PATH: zod_1.z.string().min(1).default(process.cwd()),
|
|
16
|
-
DEMO_STATIC_ENTRY: zod_1.z
|
|
17
|
-
.string()
|
|
18
|
-
.min(1)
|
|
19
|
-
.default('examples/microsoft-paint/index.html'),
|
|
20
|
-
DEMO_TEMPLATE_PROJECT_PATH: zod_1.z
|
|
21
|
-
.string()
|
|
22
|
-
.min(1)
|
|
23
|
-
.default('examples/microsoft-paint'),
|
|
24
|
-
DEMO_WORKTREES_ROOT_PATH: zod_1.z.string().min(1).optional(),
|
|
25
|
-
DEMO_SESSION_TTL_MINUTES: zod_1.z.coerce.number().int().positive().default(43_200),
|
|
26
|
-
DEMO_SESSION_IDLE_TTL_MINUTES: zod_1.z.coerce.number().int().positive().default(15),
|
|
27
|
-
DEMO_SESSION_REDIS_URL: zod_1.z.string().optional(),
|
|
28
|
-
DEMO_SESSION_REDIS_KEY_PREFIX: zod_1.z
|
|
29
|
-
.string()
|
|
30
|
-
.min(1)
|
|
31
|
-
.default('rivet:hosted-demo:demo-session'),
|
|
32
|
-
DEMO_MAX_ACTIVE_SESSIONS: zod_1.z.coerce.number().int().positive().default(25),
|
|
33
|
-
DEMO_BASE_RIVET_PORT: zod_1.z.coerce.number().int().positive().default(5000),
|
|
34
|
-
DEMO_PUBLIC_BASE_URL: zod_1.z.string().default(''),
|
|
35
|
-
DEMO_AUTH_REDIS_URL: zod_1.z.string().optional(),
|
|
36
|
-
DEMO_AUTH_REDIS_KEY_PREFIX: zod_1.z
|
|
37
|
-
.string()
|
|
38
|
-
.min(1)
|
|
39
|
-
.default('rivet:hosted-demo:auth-session'),
|
|
40
|
-
DEMO_REQUIRE_SIGNED_IN_USERS: zod_1.z
|
|
41
|
-
.string()
|
|
42
|
-
.optional()
|
|
43
|
-
.transform((value) => value !== 'false'),
|
|
44
|
-
DEMO_DISABLE_TELEMETRY: zod_1.z
|
|
45
|
-
.string()
|
|
46
|
-
.optional()
|
|
47
|
-
.transform((value) => value === 'true'),
|
|
48
|
-
});
|
|
49
|
-
const main = async () => {
|
|
50
|
-
const env = hostedDemoEnvSchema.parse(process.env);
|
|
51
|
-
const telemetry = new TelemetryService_1.TelemetryService({
|
|
52
|
-
enabled: !env.DEMO_DISABLE_TELEMETRY,
|
|
53
|
-
source: 'tryout',
|
|
54
|
-
});
|
|
55
|
-
await (0, server_1.startServer)({
|
|
56
|
-
framework: 'static',
|
|
57
|
-
projectPath: env.DEMO_PROJECT_PATH,
|
|
58
|
-
staticEntry: env.DEMO_STATIC_ENTRY,
|
|
59
|
-
rivetPort: env.PORT,
|
|
60
|
-
telemetry,
|
|
61
|
-
isGitEnabled: false,
|
|
62
|
-
demoMode: {
|
|
63
|
-
enabled: true,
|
|
64
|
-
allowSessionProvisioning: true,
|
|
65
|
-
requireSignedInUsers: env.DEMO_REQUIRE_SIGNED_IN_USERS,
|
|
66
|
-
templateProjectPath: env.DEMO_TEMPLATE_PROJECT_PATH,
|
|
67
|
-
worktreesRootPath: env.DEMO_WORKTREES_ROOT_PATH,
|
|
68
|
-
sessionTtlMs: env.DEMO_SESSION_TTL_MINUTES * 60 * 1000,
|
|
69
|
-
sessionIdleTtlMs: env.DEMO_SESSION_IDLE_TTL_MINUTES * 60 * 1000,
|
|
70
|
-
maxActiveSessions: env.DEMO_MAX_ACTIVE_SESSIONS,
|
|
71
|
-
baseRivetPort: env.DEMO_BASE_RIVET_PORT,
|
|
72
|
-
publicBaseUrl: env.DEMO_PUBLIC_BASE_URL,
|
|
73
|
-
authRedisUrl: env.DEMO_AUTH_REDIS_URL,
|
|
74
|
-
authRedisKeyPrefix: env.DEMO_AUTH_REDIS_KEY_PREFIX,
|
|
75
|
-
sessionMetadataRedisUrl: env.DEMO_SESSION_REDIS_URL ?? env.DEMO_AUTH_REDIS_URL,
|
|
76
|
-
sessionMetadataRedisKeyPrefix: env.DEMO_SESSION_REDIS_KEY_PREFIX,
|
|
77
|
-
},
|
|
78
|
-
});
|
|
79
|
-
log.info(`Hosted demo server started on port ${env.PORT}`);
|
|
80
|
-
await new Promise(() => { });
|
|
81
|
-
};
|
|
82
|
-
void main();
|
|
83
|
-
//# sourceMappingURL=hosted-demo.js.map
|
package/dist/hosted-demo.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-demo.js","sourceRoot":"","sources":["../src/hosted-demo.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/demo.d.ts
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { Router, type Request, type Response } from 'express';
|
|
2
|
-
import { TelemetryService } from '../services/TelemetryService';
|
|
3
|
-
type DemoRouterSessionPayload = {
|
|
4
|
-
sessionId: string;
|
|
5
|
-
sessionUrl: string;
|
|
6
|
-
createdAt: number;
|
|
7
|
-
expiresAt: number;
|
|
8
|
-
};
|
|
9
|
-
type DemoRouterSessionManager = {
|
|
10
|
-
createSession: (userId: string) => Promise<DemoRouterSessionPayload>;
|
|
11
|
-
getSession: (sessionId: string) => {
|
|
12
|
-
sessionId: string;
|
|
13
|
-
userId: string;
|
|
14
|
-
createdAt: number;
|
|
15
|
-
expiresAt: number;
|
|
16
|
-
} | null;
|
|
17
|
-
getSessionOwnerUserId: (sessionId: string) => string | null;
|
|
18
|
-
getSessionUrl: (sessionId: string) => string;
|
|
19
|
-
getActiveSessionCount: () => number;
|
|
20
|
-
getTemplateProjectPath: () => string;
|
|
21
|
-
};
|
|
22
|
-
type DemoRouterOptions = {
|
|
23
|
-
requireSignedInUsers: boolean;
|
|
24
|
-
getActiveDemoSessionIdForRequest?: (req: Request) => string | null;
|
|
25
|
-
storeActiveDemoSessionIdForRequest?: (req: Request, res: Response, demoSessionId: string) => void;
|
|
26
|
-
clearActiveDemoSessionIdForRequest?: (req: Request, res: Response) => void;
|
|
27
|
-
telemetry?: TelemetryService;
|
|
28
|
-
deploymentEnv?: string;
|
|
29
|
-
};
|
|
30
|
-
export declare const resolveUserId: (authHeader: string | undefined, requireSignedInUsers: boolean) => Promise<string>;
|
|
31
|
-
export declare const createDemoRouter: (sessionManager: DemoRouterSessionManager, options: DemoRouterOptions) => Router;
|
|
32
|
-
export {};
|
|
33
|
-
//# sourceMappingURL=demo.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../../src/routes/demo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAIhE,KAAK,wBAAwB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,wBAAwB,GAAG;IAC9B,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACrE,UAAU,EAAE,CACV,SAAS,EAAE,MAAM,KACd;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACxF,qBAAqB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC5D,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,qBAAqB,EAAE,MAAM,MAAM,CAAC;IACpC,sBAAsB,EAAE,MAAM,MAAM,CAAC;CACtC,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,gCAAgC,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,CAAC;IACnE,kCAAkC,CAAC,EAAE,CACnC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,aAAa,EAAE,MAAM,KAClB,IAAI,CAAC;IACV,kCAAkC,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC3E,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAWF,eAAO,MAAM,aAAa,GACxB,YAAY,MAAM,GAAG,SAAS,EAC9B,sBAAsB,OAAO,KAC5B,OAAO,CAAC,MAAM,CAuChB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,gBAAgB,wBAAwB,EACxC,SAAS,iBAAiB,KACzB,MAgJF,CAAC"}
|
package/dist/routes/demo.js
DELETED
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createDemoRouter = exports.resolveUserId = void 0;
|
|
4
|
-
const express_1 = require("express");
|
|
5
|
-
const index_core_1 = require("../index-core");
|
|
6
|
-
const ConfigManager_1 = require("../services/ConfigManager");
|
|
7
|
-
const log = (0, index_core_1.createLogger)('DemoRoutes');
|
|
8
|
-
const toIso = (timestamp) => new Date(timestamp).toISOString();
|
|
9
|
-
const normalizeUserKey = (value) => value.trim().toLowerCase();
|
|
10
|
-
const resolveUserId = async (authHeader, requireSignedInUsers) => {
|
|
11
|
-
const configManager = (0, ConfigManager_1.getConfigManager)();
|
|
12
|
-
const headerToken = authHeader && authHeader.startsWith('Bearer ')
|
|
13
|
-
? authHeader.slice('Bearer '.length).trim()
|
|
14
|
-
: '';
|
|
15
|
-
const requestScopedToken = configManager.getAuthToken() ?? '';
|
|
16
|
-
const token = headerToken || requestScopedToken;
|
|
17
|
-
if (!token) {
|
|
18
|
-
if (requireSignedInUsers) {
|
|
19
|
-
throw new Error('Authentication required');
|
|
20
|
-
}
|
|
21
|
-
return 'anonymous';
|
|
22
|
-
}
|
|
23
|
-
const proxyUrl = configManager.getProxyUrl();
|
|
24
|
-
const response = await fetch(`${proxyUrl}/api/user/profile`, {
|
|
25
|
-
method: 'GET',
|
|
26
|
-
headers: {
|
|
27
|
-
Authorization: `Bearer ${token}`,
|
|
28
|
-
'Content-Type': 'application/json',
|
|
29
|
-
},
|
|
30
|
-
signal: AbortSignal.timeout(3_000),
|
|
31
|
-
});
|
|
32
|
-
if (!response.ok) {
|
|
33
|
-
throw new Error('Authentication required');
|
|
34
|
-
}
|
|
35
|
-
const payload = (await response.json());
|
|
36
|
-
const email = payload.user?.email;
|
|
37
|
-
const id = payload.user?.id;
|
|
38
|
-
if (email) {
|
|
39
|
-
return normalizeUserKey(email);
|
|
40
|
-
}
|
|
41
|
-
if (id) {
|
|
42
|
-
return normalizeUserKey(id);
|
|
43
|
-
}
|
|
44
|
-
return normalizeUserKey('signed-in-user');
|
|
45
|
-
};
|
|
46
|
-
exports.resolveUserId = resolveUserId;
|
|
47
|
-
const createDemoRouter = (sessionManager, options) => {
|
|
48
|
-
const router = (0, express_1.Router)();
|
|
49
|
-
router.post('/demo/session', async (req, res) => {
|
|
50
|
-
const startedAt = Date.now();
|
|
51
|
-
options.telemetry?.trackTryoutSessionProvisionStarted({
|
|
52
|
-
isAuthenticatedRequest: Boolean(req.headers.authorization?.startsWith('Bearer ')),
|
|
53
|
-
requireSignedInUsers: options.requireSignedInUsers,
|
|
54
|
-
deploymentEnv: options.deploymentEnv,
|
|
55
|
-
templateProject: sessionManager.getTemplateProjectPath(),
|
|
56
|
-
});
|
|
57
|
-
try {
|
|
58
|
-
const userId = await (0, exports.resolveUserId)(req.headers.authorization, options.requireSignedInUsers);
|
|
59
|
-
const existingSessionId = options.getActiveDemoSessionIdForRequest?.(req) ?? null;
|
|
60
|
-
if (existingSessionId) {
|
|
61
|
-
const existingSession = sessionManager.getSession(existingSessionId);
|
|
62
|
-
if (existingSession) {
|
|
63
|
-
if (existingSession.userId !== userId) {
|
|
64
|
-
options.clearActiveDemoSessionIdForRequest?.(req, res);
|
|
65
|
-
res.status(403).json({ error: 'Session access denied' });
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
res.json({
|
|
69
|
-
sessionId: existingSession.sessionId,
|
|
70
|
-
sessionUrl: sessionManager.getSessionUrl(existingSession.sessionId),
|
|
71
|
-
createdAt: toIso(existingSession.createdAt),
|
|
72
|
-
expiresAt: toIso(existingSession.expiresAt),
|
|
73
|
-
});
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
options.clearActiveDemoSessionIdForRequest?.(req, res);
|
|
77
|
-
}
|
|
78
|
-
const session = await sessionManager.createSession(userId);
|
|
79
|
-
options.storeActiveDemoSessionIdForRequest?.(req, res, session.sessionId);
|
|
80
|
-
options.telemetry?.trackTryoutSessionProvisionCompleted({
|
|
81
|
-
demoSessionId: session.sessionId,
|
|
82
|
-
timeToReadyMs: Date.now() - startedAt,
|
|
83
|
-
activeSessionsAfter: sessionManager.getActiveSessionCount(),
|
|
84
|
-
deploymentEnv: options.deploymentEnv,
|
|
85
|
-
templateProject: sessionManager.getTemplateProjectPath(),
|
|
86
|
-
});
|
|
87
|
-
res.json({
|
|
88
|
-
sessionId: session.sessionId,
|
|
89
|
-
sessionUrl: session.sessionUrl,
|
|
90
|
-
createdAt: toIso(session.createdAt),
|
|
91
|
-
expiresAt: toIso(session.expiresAt),
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
catch (error) {
|
|
95
|
-
const message = error instanceof Error ? error.message : 'Failed to create session';
|
|
96
|
-
let statusCode = 500;
|
|
97
|
-
if (message === 'Authentication required') {
|
|
98
|
-
statusCode = 401;
|
|
99
|
-
}
|
|
100
|
-
else if (message.includes('Maximum active demo sessions reached') ||
|
|
101
|
-
message.includes('Rate limit exceeded')) {
|
|
102
|
-
statusCode = 429;
|
|
103
|
-
}
|
|
104
|
-
options.telemetry?.trackTryoutSessionProvisionFailed({
|
|
105
|
-
errorType: message,
|
|
106
|
-
statusCode,
|
|
107
|
-
timeToFailureMs: Date.now() - startedAt,
|
|
108
|
-
deploymentEnv: options.deploymentEnv,
|
|
109
|
-
templateProject: sessionManager.getTemplateProjectPath(),
|
|
110
|
-
});
|
|
111
|
-
log.warn('Failed to create hosted demo session', error);
|
|
112
|
-
res.status(statusCode).json({ error: message });
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
router.get('/demo/session/:sessionId', (req, res) => {
|
|
116
|
-
const session = sessionManager.getSession(req.params.sessionId);
|
|
117
|
-
const sendFailure = (statusCode, error) => {
|
|
118
|
-
res.status(statusCode).json({ error });
|
|
119
|
-
};
|
|
120
|
-
if (options.requireSignedInUsers) {
|
|
121
|
-
void (0, exports.resolveUserId)(req.headers.authorization, true)
|
|
122
|
-
.then((userId) => {
|
|
123
|
-
if (!session) {
|
|
124
|
-
options.telemetry?.trackTryoutSessionMetadataRequested({
|
|
125
|
-
demoSessionId: req.params.sessionId,
|
|
126
|
-
found: false,
|
|
127
|
-
deploymentEnv: options.deploymentEnv,
|
|
128
|
-
});
|
|
129
|
-
sendFailure(404, 'Session not found');
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
if (session.userId !== userId) {
|
|
133
|
-
options.telemetry?.trackTryoutSessionMetadataRequested({
|
|
134
|
-
demoSessionId: req.params.sessionId,
|
|
135
|
-
found: false,
|
|
136
|
-
deploymentEnv: options.deploymentEnv,
|
|
137
|
-
});
|
|
138
|
-
sendFailure(403, 'Session access denied');
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
options.telemetry?.trackTryoutSessionMetadataRequested({
|
|
142
|
-
demoSessionId: req.params.sessionId,
|
|
143
|
-
found: true,
|
|
144
|
-
deploymentEnv: options.deploymentEnv,
|
|
145
|
-
});
|
|
146
|
-
res.json({
|
|
147
|
-
sessionId: session.sessionId,
|
|
148
|
-
createdAt: toIso(session.createdAt),
|
|
149
|
-
expiresAt: toIso(session.expiresAt),
|
|
150
|
-
});
|
|
151
|
-
})
|
|
152
|
-
.catch(() => {
|
|
153
|
-
options.telemetry?.trackTryoutSessionMetadataRequested({
|
|
154
|
-
demoSessionId: req.params.sessionId,
|
|
155
|
-
found: false,
|
|
156
|
-
deploymentEnv: options.deploymentEnv,
|
|
157
|
-
});
|
|
158
|
-
sendFailure(401, 'Authentication required');
|
|
159
|
-
});
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
options.telemetry?.trackTryoutSessionMetadataRequested({
|
|
163
|
-
demoSessionId: req.params.sessionId,
|
|
164
|
-
found: Boolean(session),
|
|
165
|
-
deploymentEnv: options.deploymentEnv,
|
|
166
|
-
});
|
|
167
|
-
if (!session) {
|
|
168
|
-
res.status(404).json({ error: 'Session not found' });
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
res.json({
|
|
172
|
-
sessionId: session.sessionId,
|
|
173
|
-
createdAt: toIso(session.createdAt),
|
|
174
|
-
expiresAt: toIso(session.expiresAt),
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
return router;
|
|
178
|
-
};
|
|
179
|
-
exports.createDemoRouter = createDemoRouter;
|
|
180
|
-
//# sourceMappingURL=demo.js.map
|
package/dist/routes/demo.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"demo.js","sourceRoot":"","sources":["../../src/routes/demo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import type { Request, Response } from 'express';
|
|
2
|
-
import { type HostedDemoAuthSessionStore, type HostedDemoAuthStoreValue } from './HostedDemoAuthSessionStore';
|
|
3
|
-
type HostedDemoAuthSessionValue = HostedDemoAuthStoreValue;
|
|
4
|
-
/**
|
|
5
|
-
* Stores browser-scoped auth state for hosted demo mode.
|
|
6
|
-
*/
|
|
7
|
-
export declare class HostedDemoAuthSessionService {
|
|
8
|
-
private readonly authBySessionId;
|
|
9
|
-
private readonly cleanupTimer;
|
|
10
|
-
private readonly store;
|
|
11
|
-
private readonly now;
|
|
12
|
-
constructor(options?: {
|
|
13
|
-
store?: HostedDemoAuthSessionStore;
|
|
14
|
-
now?: () => number;
|
|
15
|
-
});
|
|
16
|
-
initialize(): Promise<void>;
|
|
17
|
-
private getCookieSessionId;
|
|
18
|
-
private setCookieSessionId;
|
|
19
|
-
getOrCreateSessionId(req: Request, res: Response): string;
|
|
20
|
-
getAuthForRequest(req: Request): HostedDemoAuthSessionValue | null;
|
|
21
|
-
getAuthForSessionId(sessionId: string): HostedDemoAuthSessionValue | null;
|
|
22
|
-
storeAuthForRequest(req: Request, res: Response, auth: {
|
|
23
|
-
token: string;
|
|
24
|
-
email: string;
|
|
25
|
-
refreshToken?: string;
|
|
26
|
-
userId?: string;
|
|
27
|
-
}): string;
|
|
28
|
-
storeAuthForSessionId(sessionId: string, res: Response, auth: {
|
|
29
|
-
token: string;
|
|
30
|
-
email: string;
|
|
31
|
-
refreshToken?: string;
|
|
32
|
-
userId?: string;
|
|
33
|
-
}): string;
|
|
34
|
-
getActiveDemoSessionIdForRequest(req: Request): string | null;
|
|
35
|
-
storeActiveDemoSessionIdForRequest(req: Request, res: Response, demoSessionId: string): void;
|
|
36
|
-
storeActiveDemoSessionIdForSessionId(sessionId: string, res: Response, demoSessionId: string): void;
|
|
37
|
-
clearActiveDemoSessionIdForRequest(req: Request, res: Response): void;
|
|
38
|
-
clearActiveDemoSessionIdForSessionId(sessionId: string, res: Response): void;
|
|
39
|
-
/**
|
|
40
|
-
* Fully clears the browser-scoped auth for this request (logout): drops the
|
|
41
|
-
* in-memory + persisted record and expires the session cookie so the next
|
|
42
|
-
* /api/config read sees an unauthenticated session.
|
|
43
|
-
*/
|
|
44
|
-
clearAuthForRequest(req: Request, res: Response): void;
|
|
45
|
-
shutdown(): void;
|
|
46
|
-
private cleanupExpiredSessions;
|
|
47
|
-
private persist;
|
|
48
|
-
}
|
|
49
|
-
export {};
|
|
50
|
-
//# sourceMappingURL=HostedDemoAuthSessionService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HostedDemoAuthSessionService.d.ts","sourceRoot":"","sources":["../../src/services/HostedDemoAuthSessionService.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAE9B,MAAM,8BAA8B,CAAC;AAEtC,KAAK,0BAA0B,GAAG,wBAAwB,CAAC;AAO3D;;GAEG;AACH,qBAAa,4BAA4B;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiD;IACjF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiC;IAC9D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;gBAEvB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,0BAA0B,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;KAAE;IAS1E,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjC,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,kBAAkB;IAU1B,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,MAAM;IAYzD,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,0BAA0B,GAAG,IAAI;IAQlE,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,0BAA0B,GAAG,IAAI;IAmBzE,mBAAmB,CACjB,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7E,MAAM;IAKT,qBAAqB,CACnB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7E,MAAM;IAaT,gCAAgC,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAK7D,kCAAkC,CAChC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,aAAa,EAAE,MAAM,GACpB,IAAI;IAKP,oCAAoC,CAClC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,QAAQ,EACb,aAAa,EAAE,MAAM,GACpB,IAAI;IAeP,kCAAkC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI;IAQrE,oCAAoC,CAClC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,QAAQ,GACZ,IAAI;IAeP;;;;OAIG;IACH,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI;IAStD,QAAQ,IAAI,IAAI;IAMhB,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,OAAO;CAOhB"}
|