@joycostudio/studio 0.1.4 → 0.1.6

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/react.js CHANGED
@@ -11,16 +11,24 @@ import {
11
11
  PlugZap,
12
12
  Unplug
13
13
  } from "lucide-react";
14
- import { useEffect as useEffect5, useRef as useRef3, useState as useState9 } from "react";
14
+ import { useEffect as useEffect6, useRef as useRef3, useState as useState10 } from "react";
15
15
 
16
16
  // package.json
17
- var version = "0.1.4";
17
+ var version = "0.1.6";
18
18
 
19
19
  // src/client/studio.ts
20
20
  import {
21
21
  button,
22
22
  schemaValues
23
23
  } from "@joycostudio/xyz/debug";
24
+
25
+ // src/client/share.ts
26
+ async function copyLink(url) {
27
+ if (navigator.clipboard?.writeText) return navigator.clipboard.writeText(url);
28
+ window.prompt("Copy this link", url);
29
+ }
30
+
31
+ // src/client/studio.ts
24
32
  var COMPARE_MESSAGE = "joyco-studio:compare";
25
33
  function postCompare(target, tool, showSaved) {
26
34
  const message = { type: COMPARE_MESSAGE, tool, showSaved };
@@ -73,73 +81,12 @@ function useToolConfig(handle) {
73
81
 
74
82
  // src/react/inspector.tsx
75
83
  import { bindDebugSchema } from "@joycostudio/xyz/debug";
76
- import { SquareSplitHorizontal } from "lucide-react";
77
- import { useEffect, useRef, useState as useState2 } from "react";
78
-
79
- // src/react/theme.ts
80
- var tweakpaneTheme = {
81
- "--tp-base-background-color": "transparent",
82
- "--tp-base-shadow-color": "transparent",
83
- "--tp-base-border-radius": "0px",
84
- "--tp-base-font-family": "var(--studio-font)",
85
- "--tp-blade-border-radius": "var(--radius)",
86
- "--tp-blade-horizontal-padding": "4px",
87
- "--tp-blade-value-width": "168px",
88
- "--tp-container-horizontal-padding": "8px",
89
- "--tp-container-vertical-padding": "6px",
90
- "--tp-container-unit-size": "22px",
91
- "--tp-container-unit-spacing": "6px",
92
- "--tp-container-background-color": "var(--card)",
93
- "--tp-container-background-color-hover": "var(--field)",
94
- "--tp-container-background-color-focus": "var(--field-hover)",
95
- "--tp-container-background-color-active": "var(--field-active)",
96
- "--tp-container-foreground-color": "var(--muted-foreground)",
97
- "--tp-input-background-color": "var(--field)",
98
- "--tp-input-background-color-hover": "var(--field-hover)",
99
- "--tp-input-background-color-focus": "var(--field-active)",
100
- "--tp-input-background-color-active": "var(--field-active)",
101
- "--tp-input-foreground-color": "var(--foreground)",
102
- // Buttons and slider knobs: lighter than fields so the knob reads against the track.
103
- "--tp-button-background-color": "var(--knob)",
104
- "--tp-button-background-color-hover": "var(--knob-hover)",
105
- "--tp-button-background-color-focus": "var(--knob-hover)",
106
- "--tp-button-background-color-active": "var(--muted-foreground)",
107
- "--tp-button-foreground-color": "var(--foreground)",
108
- "--tp-groove-foreground-color": "var(--border)",
109
- "--tp-label-foreground-color": "var(--muted-foreground)",
110
- "--tp-monitor-background-color": "var(--card)",
111
- "--tp-monitor-foreground-color": "var(--muted-foreground)"
112
- };
84
+ import { Check, Link, SquareSplitHorizontal } from "lucide-react";
85
+ import { useEffect as useEffect2, useRef, useState as useState3 } from "react";
113
86
 
114
- // src/react/tool-icon.tsx
115
- import { SlidersHorizontal } from "lucide";
116
- import { jsx } from "react/jsx-runtime";
117
- var camel = (name) => name.replace(/-([a-z])/g, (_, char) => char.toUpperCase());
118
- function ToolIcon({ icon = SlidersHorizontal, ...props }) {
119
- return /* @__PURE__ */ jsx(
120
- "svg",
121
- {
122
- viewBox: "0 0 24 24",
123
- fill: "none",
124
- stroke: "currentColor",
125
- strokeWidth: 2,
126
- strokeLinecap: "round",
127
- strokeLinejoin: "round",
128
- "aria-hidden": true,
129
- ...props,
130
- children: icon.map(([Tag, attrs], index) => {
131
- const Element = Tag;
132
- return /* @__PURE__ */ jsx(
133
- Element,
134
- {
135
- ...Object.fromEntries(Object.entries(attrs).map(([name, value]) => [camel(name), value]))
136
- },
137
- index
138
- );
139
- })
140
- }
141
- );
142
- }
87
+ // src/react/changes.tsx
88
+ import { ArrowRight, ChevronUp, Undo2 } from "lucide-react";
89
+ import { useEffect, useId, useState as useState2 } from "react";
143
90
 
144
91
  // src/react/ui/button.tsx
145
92
  import { cva } from "class-variance-authority";
@@ -153,7 +100,7 @@ function cn(...inputs) {
153
100
 
154
101
  // src/react/ui/button.tsx
155
102
  import { Slot } from "radix-ui";
156
- import { jsx as jsx2 } from "react/jsx-runtime";
103
+ import { jsx } from "react/jsx-runtime";
157
104
  var buttonVariants = cva(
158
105
  "inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
159
106
  {
@@ -191,7 +138,7 @@ function Button({
191
138
  ...props
192
139
  }) {
193
140
  const Comp = asChild ? Slot.Root : "button";
194
- return /* @__PURE__ */ jsx2(
141
+ return /* @__PURE__ */ jsx(
195
142
  Comp,
196
143
  {
197
144
  "data-slot": "button",
@@ -203,27 +150,6 @@ function Button({
203
150
  );
204
151
  }
205
152
 
206
- // src/react/ui/kbd.tsx
207
- import { jsx as jsx3 } from "react/jsx-runtime";
208
- function Kbd({ className, ...props }) {
209
- return /* @__PURE__ */ jsx3(
210
- "kbd",
211
- {
212
- "data-slot": "kbd",
213
- className: cn(
214
- "bg-muted text-muted-foreground border-border pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm border border-b-2 px-1 font-mono text-xs font-normal select-none",
215
- "[&_svg:not([class*='size-'])]:size-3",
216
- "[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10",
217
- className
218
- ),
219
- ...props
220
- }
221
- );
222
- }
223
- function KbdGroup({ className, ...props }) {
224
- return /* @__PURE__ */ jsx3("span", { "data-slot": "kbd-group", className: cn("inline-flex items-center gap-1", className), ...props });
225
- }
226
-
227
153
  // src/react/ui/tooltip.tsx
228
154
  import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip";
229
155
 
@@ -233,7 +159,7 @@ import { createPortal } from "react-dom";
233
159
 
234
160
  // src/react/generated/studio.css
235
161
  var studio_default = `/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
236
- @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-border-style:solid;--tw-font-weight:initial;--tw-tracking: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-content:"";--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--color-sky-400:oklch(74.6% .16 232.661);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--radius-xs:.125rem;--radius-lg:calc(var(--radius) + 2px);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--studio-font);--default-mono-font-family:var(--studio-font);--color-border:var(--border);--color-sidebar:var(--sidebar)}}@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%;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;-webkit-text-decoration: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]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklab, var(--ring) 50%, transparent)}}body{background-color:var(--background);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--foreground)}}@layer components{.studio-surface{border-radius:calc(var(--radius) - 2px);background:var(--card);padding:6px}.studio-toolbar{pointer-events:auto;flex-wrap:wrap;align-items:center;gap:4px;display:flex}.studio-toolbar>button:not([data-slot=select-trigger]),.studio-toolbar [data-slot=toolbar-action]{border-radius:calc(var(--radius) - 2px);min-height:28px;color:var(--muted-foreground);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;border:1px solid #0000;align-items:center;gap:6px;padding:4px 8px;font-size:11px;display:inline-flex}:is(.studio-toolbar>button:not([data-slot=select-trigger]),.studio-toolbar [data-slot=toolbar-action]):hover{color:var(--foreground);background:var(--field-hover)}:is(.studio-toolbar>button:not([data-slot=select-trigger]),.studio-toolbar [data-slot=toolbar-action]):is(:active,[aria-pressed=true]){color:var(--foreground);background:var(--field-active)}:is(.studio-toolbar>button:not([data-slot=select-trigger]),.studio-toolbar [data-slot=toolbar-action]):focus-visible{outline:2px solid var(--ring);outline-offset:2px}.studio-canvas-toolbar{z-index:20;min-width:0;color:var(--muted-foreground);pointer-events:none;flex-shrink:0;position:relative}.studio-canvas-actions{opacity:1;transition:opacity .2s ease-out,translate .2s ease-out;translate:0}.studio-canvas-toolbar[data-ghost]{position:absolute;inset:4px 4px auto}.studio-canvas-toolbar[data-ghost]:before{content:"";pointer-events:auto;height:24px;position:absolute;inset:-4px 0 auto}.studio-canvas-toolbar[data-ghost] .studio-canvas-actions{-webkit-backdrop-filter:blur(24px);backdrop-filter:blur(24px);opacity:0;transition-delay:3s;translate:0 calc(-100% - 8px)}.studio-canvas-toolbar[data-ghost]:is(:hover,:has(:focus-visible,[aria-expanded=true],[data-state=open])) .studio-canvas-actions{opacity:1;transition-delay:0s;translate:0}@media (hover:none){.studio-canvas-toolbar[data-ghost] .studio-canvas-actions{opacity:1;translate:0}}.studio-canvas-toolbar[data-expanded]{height:80px;position:absolute;inset:0 0 auto}.studio-canvas-toolbar[data-expanded] .studio-canvas-actions{pointer-events:none;background:0 0;height:100%;padding:0}.studio-canvas-toolbar[data-expanded] .studio-canvas-actions>:not(.studio-canvas-toggle){display:none}.studio-canvas-toolbar[data-expanded] .studio-canvas-toggle{width:min(280px,100%);height:100%;padding-top:max(12px, env(safe-area-inset-top));pointer-events:auto;justify-content:center;align-items:flex-start;margin-inline:auto;display:flex}.studio-canvas-toolbar[data-expanded] .studio-canvas-toggle>button{border-color:var(--sidebar-border);border-radius:var(--radius);min-height:30px;color:var(--foreground);background:var(--sidebar)}@supports (color:color-mix(in lab, red, red)){.studio-canvas-toolbar[data-expanded] .studio-canvas-toggle>button{background:color-mix(in srgb, var(--sidebar) 85%, transparent)}}.studio-canvas-toolbar[data-expanded] .studio-canvas-toggle>button{-webkit-backdrop-filter:blur(24px);backdrop-filter:blur(24px);font-size:inherit;opacity:0;transition:opacity .2s ease-out 3s,translate .2s ease-out 3s;translate:0 -8px;box-shadow:0 4px 12px #0006}.studio-canvas-toolbar[data-expanded] .studio-canvas-toggle>button:hover{background:var(--field-hover)}.studio-canvas-toolbar[data-expanded] .studio-canvas-toggle:hover>button,.studio-canvas-toolbar[data-expanded] .studio-canvas-toggle>button:focus-visible{opacity:1;transition-delay:0s;translate:0}@media (hover:none){.studio-canvas-toolbar[data-expanded] .studio-canvas-toggle>button{opacity:1;translate:0}}@media (prefers-reduced-motion:reduce){.studio-canvas-actions,.studio-canvas-toolbar[data-expanded] .studio-canvas-toggle>button{transition-duration:0s}}.studio-preview-canvas{border:1px solid var(--sidebar-border);border-radius:calc(var(--radius) + 2px);background:var(--sidebar);flex-direction:column;gap:4px;min-width:0;min-height:0;padding:4px;display:flex;position:relative;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.studio-preview-canvas{background:color-mix(in srgb, var(--sidebar) 85%, transparent)}}.studio-preview-canvas{font:12px/1.5 var(--studio-font);box-shadow:0 12px 24px #0006}.studio-preview-source{align-items:center;min-width:0;margin-right:auto;display:flex}.studio-preview-title{padding-inline:8px}.studio-preview-canvas>iframe{border-radius:calc(var(--radius) - 2px);background:var(--background);border:0;flex:1;width:100%;min-height:0}.studio-preview-canvas[data-expanded]{z-index:30;background:var(--background);border:0;border-radius:0;padding:0;position:fixed;inset:0}.studio-preview-canvas[data-expanded]>iframe{border-radius:0}}@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.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{inset:0}.inset-x-0{inset-inline:0}.inset-y-0{inset-block:0}.inset-y-2{inset-block:calc(var(--spacing) * 2)}.-top-0\\.5{top:calc(var(--spacing) * -.5)}.top-0{top:0}.top-1\\/2{top:50%}.top-4{top:calc(var(--spacing) * 4)}.-right-0\\.5{right:calc(var(--spacing) * -.5)}.right-0{right:0}.right-1{right:var(--spacing)}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:0}.left-0{left:0}.left-1{left:var(--spacing)}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.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}}.mt-1{margin-top:var(--spacing)}.mt-auto{margin-top:auto}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.size-1\\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2\\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3\\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.h-3\\.5{height:calc(var(--spacing) * 3.5)}.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-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-auto{height:auto}.h-full{height:100%}.h-svh{height:100svh}.max-h-\\(--available-height\\){max-height:var(--available-height)}.max-h-\\[300px\\]{max-height:300px}.min-h-0{min-height:0}.min-h-7{min-height:calc(var(--spacing) * 7)}.min-h-svh{min-height:100svh}.w-\\(--sidebar-width\\){width:var(--sidebar-width)}.w-\\(--studio-inspector-width\\){width:var(--studio-inspector-width)}.w-3\\/4{width:75%}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.max-w-full{max-width:100%}.min-w-\\(--anchor-width\\){min-width:var(--anchor-width)}.min-w-0{min-width:0}.min-w-5{min-width:calc(var(--spacing) * 5)}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.origin-\\(--transform-origin\\){transform-origin:var(--transform-origin)}.-translate-x-\\[calc\\(100\\%\\+0\\.25rem\\)\\]{--tw-translate-x:calc(calc(100% + .25rem) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-\\[calc\\(100\\%\\+1rem\\)\\]{--tw-translate-x:calc(calc(100% + 1rem) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-\\[calc\\(100\\%\\+0\\.25rem\\)\\]{--tw-translate-x:calc(100% + .25rem);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-\\[calc\\(100\\%\\+1rem\\)\\]{--tw-translate-x:calc(100% + 1rem);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\\[calc\\(-50\\%-2px\\)\\]{--tw-translate-y:calc(-50% - 2px);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-45{rotate:45deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.scroll-py-1{scroll-padding-block:var(--spacing)}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.place-items-center{place-items:center}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.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)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded-\\[2px\\]{border-radius:2px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:calc(var(--radius) + 2px)}.rounded-md{border-radius:var(--radius)}.rounded-sm{border-radius:calc(var(--radius) - 2px)}.rounded-xs{border-radius:var(--radius-xs)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-border{border-color:var(--border)}.border-input{border-color:var(--input)}.border-sidebar-border{border-color:var(--sidebar-border)}.bg-\\(--field\\){background-color:var(--field)}.bg-background{background-color:var(--background)}.bg-black\\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-current{background-color:currentColor}.bg-destructive{background-color:var(--destructive)}.bg-foreground{background-color:var(--foreground)}.bg-muted{background-color:var(--muted)}.bg-popover{background-color:var(--popover)}.bg-primary{background-color:var(--primary)}.bg-secondary{background-color:var(--secondary)}.bg-sidebar,.bg-sidebar\\/85{background-color:var(--sidebar)}@supports (color:color-mix(in lab, red, red)){.bg-sidebar\\/85{background-color:color-mix(in oklab, var(--sidebar) 85%, transparent)}}.bg-transparent{background-color:#0000}.bg-warning{background-color:var(--warning)}.fill-foreground{fill:var(--foreground)}.p-0{padding:0}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-4{padding:calc(var(--spacing) * 4)}.px-0{padding-inline:0}.px-1{padding-inline:var(--spacing)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0{padding-block:0}.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-3{padding-block:calc(var(--spacing) * 3)}.py-6{padding-block:calc(var(--spacing) * 6)}.ps-3{padding-inline-start:calc(var(--spacing) * 3)}.pe-3{padding-inline-end:calc(var(--spacing) * 3)}.pt-2\\.5{padding-top:calc(var(--spacing) * 2.5)}.pr-0{padding-right:0}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5\\.5{padding-left:calc(var(--spacing) * 5.5)}.text-center{text-align:center}.text-left{text-align:left}.font-\\(family-name\\:--studio-font\\),.font-mono{font-family:var(--studio-font)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\\[0\\.08em\\]{--tw-tracking:.08em;letter-spacing:.08em}.text-balance{text-wrap:balance}.text-clip\\!{text-overflow:clip!important}.whitespace-nowrap{white-space:nowrap}.text-background{color:var(--background)}.text-destructive{color:var(--destructive)}.text-faint{color:var(--faint)}.text-foreground{color:var(--foreground)}.text-muted-foreground{color:var(--muted-foreground)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-foreground{color:var(--sidebar-foreground)}.text-sidebar-primary{color:var(--sidebar-primary)}.text-sky-400{color:var(--color-sky-400)}.text-success{color:var(--success)}.text-warning{color:var(--warning)}.text-white{color:var(--color-white)}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.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-\\[0_0_0_1px_var\\(--sidebar-border\\)\\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,var(--sidebar-border));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-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px 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-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px 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-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-black\\/40{--tw-shadow-color:#0006}@supports (color:color-mix(in lab, red, red)){.shadow-black\\/40{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 40%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-sidebar-ring{--tw-ring-color:var(--sidebar-ring)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.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-xl{--tw-backdrop-blur:blur(var(--blur-xl));-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-\\[color\\,box-shadow\\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[left\\,right\\,width\\,translate\\]{transition-property:left,right,width,translate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[left\\,right\\,width\\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[padding\\]{transition-property:padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[translate\\,opacity\\]{transition-property:translate,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[width\\,height\\,padding\\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[width\\]{transition-property:width;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-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-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.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}.paused{animation-play-state:paused}.running{animation-play-state:running}.group-focus-within\\/menu-item\\:opacity-100:is(:where(.group\\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\\/edge\\:translate-x-0:is(:where(.group\\/edge):hover *){--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.group-hover\\/edge\\:opacity-100:is(:where(.group\\/edge):hover *),.group-hover\\/menu-item\\:opacity-100:is(:where(.group\\/menu-item):hover *){opacity:1}}.group-has-data-\\[sidebar\\=menu-action\\]\\/menu-item\\:pr-8:is(:where(.group\\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing) * 8)}.group-data-\\[collapsible\\=icon\\]\\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\\[collapsible\\=icon\\]\\:size-8\\!:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing) * 8)!important;height:calc(var(--spacing) * 8)!important}.group-data-\\[collapsible\\=icon\\]\\:w-\\(--sidebar-width-icon\\):is(:where(.group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)\\+\\(--spacing\\(4\\)\\)\\)\\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing) * 4)))}.group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)\\+\\(--spacing\\(4\\)\\)\\+2px\\)\\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing) * 4)) + 2px)}.group-data-\\[collapsible\\=icon\\]\\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\\[collapsible\\=icon\\]\\:p-0\\!:is(:where(.group)[data-collapsible=icon] *){padding:0!important}.group-data-\\[collapsible\\=icon\\]\\:p-2\\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing) * 2)!important}.group-data-\\[collapsible\\=icon\\]\\:pl-\\[calc\\(1\\.5rem-0\\.875rem\\*352\\/144\\/2\\)\\]:is(:where(.group)[data-collapsible=icon] *){padding-left:.430556rem}.group-data-\\[collapsible\\=offcanvas\\]\\:right-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width) * -1)}.group-data-\\[collapsible\\=offcanvas\\]\\:left-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width) * -1)}.group-data-\\[collapsible\\=offcanvas\\]\\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:0}.group-data-\\[side\\=left\\]\\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\\[side\\=right\\]\\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\\[side\\=right\\]\\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}@media (hover:hover){.peer-hover\\/menu-button\\:text-sidebar-accent-foreground:is(:where(.peer\\/menu-button):hover~*){color:var(--sidebar-accent-foreground)}}.peer-data-\\[active\\=true\\]\\/menu-button\\:text-sidebar-accent-foreground:is(:where(.peer\\/menu-button)[data-active=true]~*){color:var(--sidebar-accent-foreground)}.placeholder\\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.after\\:absolute:after{content:var(--tw-content);position:absolute}.after\\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing) * -2)}@media (hover:hover){.hover\\:bg-\\(--field-hover\\):hover{background-color:var(--field-hover)}.hover\\:bg-accent:hover{background-color:var(--accent)}.hover\\:bg-destructive\\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/90:hover{background-color:color-mix(in oklab, var(--destructive) 90%, transparent)}}.hover\\:bg-primary\\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/90:hover{background-color:color-mix(in oklab, var(--primary) 90%, transparent)}}.hover\\:bg-secondary\\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-secondary\\/80:hover{background-color:color-mix(in oklab, var(--secondary) 80%, transparent)}}.hover\\:bg-sidebar-accent:hover{background-color:var(--sidebar-accent)}.hover\\:bg-sidebar\\/95:hover{background-color:var(--sidebar)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-sidebar\\/95:hover{background-color:color-mix(in oklab, var(--sidebar) 95%, transparent)}}.hover\\:bg-transparent:hover{background-color:#0000}.hover\\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\\:text-foreground:hover{color:var(--foreground)}.hover\\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-100:hover{opacity:1}.hover\\:shadow-\\[0_0_0_1px_var\\(--sidebar-accent\\)\\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,var(--sidebar-accent));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}.focus\\:translate-x-0:focus{--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.focus\\:opacity-100:focus{opacity:1}.focus\\:ring-2:focus{--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\\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus-visible\\:border-ring:focus-visible{border-color:var(--ring)}.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-\\[3px\\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + 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-destructive\\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.active\\:bg-sidebar-accent:active{background-color:var(--sidebar-accent)}.active\\:bg-transparent:active{background-color:#0000}.active\\:text-sidebar-accent-foreground:active{color:var(--sidebar-accent-foreground)}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-50:disabled{opacity:.5}.has-data-\\[variant\\=inset\\]\\:bg-sidebar:has([data-variant=inset]){background-color:var(--sidebar)}.has-\\[\\>svg\\]\\:px-1\\.5:has(>svg){padding-inline:calc(var(--spacing) * 1.5)}.has-\\[\\>svg\\]\\:px-2\\.5:has(>svg){padding-inline:calc(var(--spacing) * 2.5)}.has-\\[\\>svg\\]\\:px-3:has(>svg){padding-inline:calc(var(--spacing) * 3)}.has-\\[\\>svg\\]\\:px-4:has(>svg){padding-inline:calc(var(--spacing) * 4)}.aria-disabled\\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\\:opacity-50[aria-disabled=true]{opacity:.5}.aria-invalid\\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.aria-pressed\\:bg-primary[aria-pressed=true]{background-color:var(--primary)}.aria-pressed\\:text-primary-foreground[aria-pressed=true]{color:var(--primary-foreground)}.data-closed\\:animate-out[data-closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-closed\\:duration-300[data-closed]{--tw-duration:.3s;transition-duration:.3s}.data-closed\\:fade-out-0[data-closed]{--tw-exit-opacity:0}.data-closed\\:zoom-out-95[data-closed]{--tw-exit-scale:.95}.data-closed\\:slide-out-to-bottom[data-closed]{--tw-exit-translate-y:100%}.data-closed\\:slide-out-to-left[data-closed]{--tw-exit-translate-x:-100%}.data-closed\\:slide-out-to-right[data-closed]{--tw-exit-translate-x:100%}.data-closed\\:slide-out-to-top[data-closed]{--tw-exit-translate-y:-100%}.data-open\\:animate-in[data-open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-open\\:duration-500[data-open]{--tw-duration:.5s;transition-duration:.5s}.data-open\\:fade-in-0[data-open]{--tw-enter-opacity:0}.data-open\\:zoom-in-95[data-open]{--tw-enter-scale:.95}.data-open\\:slide-in-from-bottom[data-open]{--tw-enter-translate-y:100%}.data-open\\:slide-in-from-left[data-open]{--tw-enter-translate-x:-100%}.data-open\\:slide-in-from-right[data-open]{--tw-enter-translate-x:100%}.data-open\\:slide-in-from-top[data-open]{--tw-enter-translate-y:-100%}.data-\\[active\\=true\\]\\:bg-sidebar-accent[data-active=true]{background-color:var(--sidebar-accent)}.data-\\[active\\=true\\]\\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\\[active\\=true\\]\\:text-sidebar-accent-foreground[data-active=true]{color:var(--sidebar-accent-foreground)}.data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}.data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.data-\\[disabled\\=true\\]\\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\\[disabled\\=true\\]\\:opacity-50[data-disabled=true]{opacity:.5}.data-\\[highlighted\\]\\:bg-\\(--field-hover\\)[data-highlighted]{background-color:var(--field-hover)}.data-\\[highlighted\\]\\:text-accent-foreground[data-highlighted]{color:var(--accent-foreground)}.data-\\[instant\\]\\:animate-none[data-instant]{animation:none}.data-\\[selected\\=true\\]\\:bg-accent[data-selected=true]{background-color:var(--accent)}.data-\\[selected\\=true\\]\\:text-accent-foreground[data-selected=true]{color:var(--accent-foreground)}.data-\\[side\\=bottom\\]\\:top-1[data-side=bottom]{top:var(--spacing)}.data-\\[side\\=bottom\\]\\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\\[side\\=left\\]\\:top-1\\/2\\![data-side=left]{top:50%!important}.data-\\[side\\=left\\]\\:-right-1[data-side=left]{right:calc(var(--spacing) * -1)}.data-\\[side\\=left\\]\\:-translate-y-1\\/2[data-side=left]{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\\[side\\=left\\]\\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\\[side\\=right\\]\\:top-1\\/2\\![data-side=right]{top:50%!important}.data-\\[side\\=right\\]\\:-left-1[data-side=right]{left:calc(var(--spacing) * -1)}.data-\\[side\\=right\\]\\:-translate-y-1\\/2[data-side=right]{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\\[side\\=right\\]\\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\\[side\\=top\\]\\:-bottom-2\\.5[data-side=top]{bottom:calc(var(--spacing) * -2.5)}.data-\\[side\\=top\\]\\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\\[state\\=open\\]\\:opacity-100[data-state=open]{opacity:1}@media (hover:hover){.data-\\[state\\=open\\]\\:hover\\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--sidebar-accent)}.data-\\[state\\=open\\]\\:hover\\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--sidebar-accent-foreground)}}@media (prefers-reduced-motion:reduce){.motion-reduce\\:transition-none{transition-property:none}}@media (min-width:40rem){.sm\\:max-w-sm{max-width:var(--container-sm)}}@media (min-width:48rem){.md\\:block{display:block}.md\\:flex{display:flex}.md\\:opacity-0{opacity:0}.md\\:after\\:hidden:after{content:var(--tw-content);display:none}}@media (prefers-color-scheme:dark){.dark\\:border-input{border-color:var(--input)}.dark\\:bg-destructive\\/60{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-destructive\\/60{background-color:color-mix(in oklab, var(--destructive) 60%, transparent)}}.dark\\:bg-input\\/30{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-input\\/30{background-color:color-mix(in oklab, var(--input) 30%, transparent)}}@media (hover:hover){.dark\\:hover\\:bg-accent\\/50:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-accent\\/50:hover{background-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.dark\\:hover\\:bg-input\\/50:hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-input\\/50:hover{background-color:color-mix(in oklab, var(--input) 50%, transparent)}}}.dark\\:focus-visible\\:ring-destructive\\/40:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:focus-visible\\:ring-destructive\\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.dark\\:aria-invalid\\:ring-destructive\\/40[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:aria-invalid\\:ring-destructive\\/40[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}}.\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-3 svg:not([class*=size-]){width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'text-\\'\\]\\)\\]\\:text-muted-foreground svg:not([class*=text-]){color:var(--muted-foreground)}.\\[\\&\\>button\\]\\:hidden>button{display:none}.\\[\\&\\>span\\:first-child\\]\\:truncate>span:first-child,.\\[\\&\\>span\\:last-child\\]\\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\\[\\&\\>svg\\]\\:size-3>svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\\[\\&\\>svg\\]\\:size-4>svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\\[\\&\\>svg\\]\\:shrink-0>svg{flex-shrink:0}@media (hover:none){.\\[\\@media\\(hover\\:none\\)\\]\\:translate-x-0{--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.\\[\\@media\\(hover\\:none\\)\\]\\:opacity-100{opacity:1}}[data-slot=tooltip-content] .\\[\\[data-slot\\=tooltip-content\\]_\\&\\]\\:bg-background\\/20{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){[data-slot=tooltip-content] .\\[\\[data-slot\\=tooltip-content\\]_\\&\\]\\:bg-background\\/20{background-color:color-mix(in oklab, var(--background) 20%, transparent)}}[data-slot=tooltip-content] .\\[\\[data-slot\\=tooltip-content\\]_\\&\\]\\:text-background{color:var(--background)}@media (prefers-color-scheme:dark){[data-slot=tooltip-content] .dark\\:\\[\\[data-slot\\=tooltip-content\\]_\\&\\]\\:bg-background\\/10{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){[data-slot=tooltip-content] .dark\\:\\[\\[data-slot\\=tooltip-content\\]_\\&\\]\\:bg-background\\/10{background-color:color-mix(in oklab, var(--background) 10%, transparent)}}}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}.studio-workspace{color:var(--foreground);background:var(--background);font:12px/1.5 var(--studio-font);cursor:default}.studio-workspace [data-slot=studio-config-file][href]{cursor:pointer;text-underline-offset:3px;text-decoration:none}.studio-workspace [data-slot=studio-config-file][href]:is(:hover,:focus-visible){text-decoration-line:underline}.studio-workspace [data-slot=studio-config-file][href]:focus-visible{outline:2px solid var(--ring);outline-offset:2px}.studio-workspace :is([data-slot=sidebar-header],[data-slot=sidebar-footer]){isolation:isolate;flex-shrink:0;position:relative}.studio-workspace :is([data-slot=sidebar-header],[data-slot=sidebar-footer]):before{content:"";z-index:-1;border-radius:calc(var(--radius-lg) - .25rem);background:var(--card);pointer-events:none;position:absolute;inset:4px}.studio-workspace [data-slot=sidebar-content] [data-slot=sidebar-menu-button]{min-height:36px;color:var(--muted-foreground);gap:10px;font-size:13px;line-height:20px}.studio-workspace [data-slot=sidebar-content] [data-slot=sidebar-menu-button]>span:first-child{flex-shrink:0;display:flex}.studio-workspace [data-slot=sidebar-content] [data-slot=sidebar-menu-button]:is(:hover,:focus-visible,[data-active=true]){color:var(--sidebar-accent-foreground)}.studio-workspace{--studio-inspector-width:20rem;--preview-left:8px;--preview-right:8px;--preview-bottom:8px;position:relative}@media (min-width:768px){.studio-workspace[data-sidebar-panel=shown]{--preview-left:var(--sidebar-width)}.studio-workspace[data-sidebar-panel=shown]:has([data-slot=sidebar][data-state=collapsed]){--preview-left:calc(var(--sidebar-width-icon) + 1rem + 2px)}}@media (min-width:1024px){.studio-workspace:has([data-slot=studio-inspector][aria-hidden=false]){--preview-right:calc(var(--studio-inspector-width) + 1rem)}}@media (max-width:1023px){.studio-workspace:is(:has(>[data-slot=preview-canvas]:not([data-expanded])),[data-preview-layout=custom]):has([data-slot=studio-inspector][aria-hidden=false]){--preview-bottom:40%}.studio-workspace:is(:has(>[data-slot=preview-canvas]:not([data-expanded])),[data-preview-layout=custom]) [data-slot=studio-inspector]{inset:calc(60% + 8px) 8px 8px var(--preview-left);width:auto}}.studio-workspace>[data-slot=preview-canvas]{z-index:0}.studio-workspace>[data-slot=preview-canvas]:not([data-expanded]){inset:8px var(--preview-right) var(--preview-bottom) var(--preview-left);position:absolute}.studio-workspace>iframe[data-slot=studio-preview]{background:var(--background);border:0;width:100%;height:100%;position:absolute;inset:0}.studio-workspace[data-preview-layout=custom]>iframe[data-slot=studio-preview]{inset:0 calc(var(--preview-right) - 8px) calc(var(--preview-bottom) - 8px) calc(var(--preview-left) - 8px);width:calc(100% - var(--preview-left) - var(--preview-right) + 16px);height:calc(100% - var(--preview-bottom) + 8px)}:root{--background:#000;--foreground:#d6d7dc;--card:#ffffff0a;--card-foreground:#d6d7dc;--popover:#18191c;--popover-foreground:#d6d7dc;--primary:#e6e7ea;--primary-foreground:#000;--secondary:#ffffff14;--secondary-foreground:#d6d7dc;--muted:#18191c;--muted-foreground:#8b8c94;--faint:#5d5e66;--accent:#18191c;--accent-foreground:#d6d7dc;--destructive:#f87171;--success:#4ade80;--warning:#facc15;--border:#26272b;--input:#26272b;--ring:#5d5e66;--radius:.5rem;--field:#ffffff0f;--field-hover:#ffffff17;--field-active:#ffffff1f;--knob:#4a4b52;--knob-hover:#5a5b63;--sidebar:#000;--sidebar-foreground:#8b8c94;--sidebar-primary:#e6e7ea;--sidebar-primary-foreground:#000;--sidebar-accent:#ffffff14;--sidebar-accent-foreground:#d6d7dc;--sidebar-border:#26272b;--sidebar-ring:#5d5e66;--studio-font:ui-monospace, SFMono-Regular, Menlo, monospace;color-scheme:dark}[data-slot=studio-controls] :is(.tp-lblv_l,.tp-fldv_t):first-letter{text-transform:uppercase}[data-slot=studio-command-overlay]{z-index:1000;background:#0000004d;position:fixed;inset:0}[data-slot=studio-command-menu]{z-index:1001;border:1px solid var(--sidebar-border);border-radius:calc(var(--radius) + 2px);background:var(--sidebar);width:min(480px,100vw - 32px);max-height:calc(100dvh - min(20vh,160px) - 16px);position:fixed;top:min(20vh,160px);left:50%;overflow:auto;transform:translate(-50%)}@supports (color:color-mix(in lab, red, red)){[data-slot=studio-command-menu]{background:color-mix(in srgb, var(--sidebar) 85%, transparent)}}[data-slot=studio-command-menu]{color:var(--foreground);color-scheme:dark;font:12px/1.5 var(--studio-font);-webkit-backdrop-filter:blur(24px);backdrop-filter:blur(24px);box-shadow:0 20px 25px -5px #0006,0 8px 10px -6px #0006}[data-slot=studio-command-menu],[data-slot=studio-command-menu] *{box-sizing:border-box}[data-slot=studio-command-menu] svg{width:16px;height:16px;color:inherit;flex-shrink:0}[data-slot=studio-command-menu] [data-slot=kbd]{pointer-events:none;border:1px solid var(--border);border-radius:calc(var(--radius) - 2px);background:var(--muted);width:fit-content;min-width:20px;height:20px;font:inherit;color:var(--muted-foreground);-webkit-user-select:none;user-select:none;border-bottom-width:2px;justify-content:center;align-items:center;gap:4px;padding:0 4px;font-size:12px;font-weight:400;display:inline-flex}[data-slot=studio-command-menu] [data-slot=kbd-group]{align-items:center;gap:4px;display:inline-flex}[data-slot=studio-command-menu] button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:4px}[data-slot=studio-command-menu] button:focus-visible{outline:2px solid var(--sidebar-ring);outline-offset:2px}[data-slot=studio-command-menu] [data-slot=studio-command-heading]{align-items:center;gap:8px;height:40px;padding:0 12px 0 16px;display:flex}[data-slot=studio-command-menu] [data-slot=studio-command-heading] h2{font:inherit;flex:1;align-items:center;gap:10px;margin:0;display:flex}[data-slot=studio-command-menu] [data-slot=studio-command-heading] svg{width:auto;height:14px}[data-slot=studio-command-menu] [data-slot=studio-command-heading] strong{letter-spacing:.08em;white-space:nowrap;font-weight:700}[data-slot=studio-command-menu] [data-slot=studio-command-heading] button{padding:0}[data-slot=studio-command-menu] [data-slot=studio-command-heading] button:hover{background:var(--sidebar-accent)}[data-slot=studio-command-menu] [data-slot=studio-command-description]{display:none}[data-slot=studio-command-menu] [data-slot=command]{height:auto;color:inherit;background:0 0;flex-direction:column;display:flex;overflow:hidden}[data-slot=studio-command-menu] [data-slot=command-input-wrapper]{border-radius:var(--radius);background:var(--field);height:36px;color:var(--muted-foreground);border:1px solid #0000;align-items:center;gap:8px;margin:8px;padding:0 8px;display:flex}[data-slot=studio-command-menu] [data-slot=command-input-wrapper]:focus-within{border-color:var(--sidebar-ring)}[data-slot=studio-command-menu] [data-slot=command-input-wrapper] svg{opacity:1}[data-slot=studio-command-menu] [data-slot=command-input]{width:100%;min-width:0;height:100%;color:var(--sidebar-primary);font:inherit;background:0 0;border:0;outline:none;padding:0}[data-slot=studio-command-menu] [data-slot=command-input]::placeholder{color:var(--muted-foreground)}[data-slot=studio-command-menu] [data-slot=command-list]{overscroll-behavior:contain;max-height:300px;padding:0 8px 8px;scroll-padding:4px;overflow-y:auto}[data-slot=studio-command-menu] [data-slot=command-item]{border-radius:calc(var(--radius) - 2px);min-height:36px;font:inherit;color:var(--sidebar-foreground);cursor:pointer;align-items:center;gap:8px;padding:8px;display:flex}[data-slot=studio-command-menu] [data-slot=command-item][data-selected=true]{background:var(--sidebar-accent);color:var(--sidebar-accent-foreground)}[data-slot=studio-command-menu] [data-slot=studio-command-label]{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}[data-slot=studio-command-menu] [data-slot=command-empty]{text-align:center;font:inherit;color:var(--muted-foreground);padding:24px 8px}[data-slot=studio-command-menu] [data-slot=studio-command-footer]{border-top:1px solid var(--sidebar-border);color:var(--muted-foreground);align-items:center;gap:16px;padding:8px 12px;font-size:10px;display:flex}[data-slot=studio-command-menu] [data-slot=studio-command-footer]>span{align-items:center;gap:6px;display:inline-flex}[data-studio-root]{all:initial;color:var(--foreground);font:12px/1.5 var(--studio-font);color-scheme:dark;display:contents}@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-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{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-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@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));filter:blur(var(--tw-enter-blur,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));filter:blur(var(--tw-exit-blur,0))}}`;
162
+ @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-border-style:solid;--tw-font-weight:initial;--tw-tracking: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-content:"";--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--color-sky-400:oklch(74.6% .16 232.661);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--radius-xs:.125rem;--radius-lg:calc(var(--radius) + 2px);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--studio-font);--default-mono-font-family:var(--studio-font);--color-border:var(--border);--color-sidebar:var(--sidebar)}}@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%;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;-webkit-text-decoration: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]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklab, var(--ring) 50%, transparent)}}body{background-color:var(--background);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--foreground)}}@layer components{.studio-surface{border-radius:calc(var(--radius) - 2px);background:var(--card);padding:6px}.studio-toolbar{pointer-events:auto;flex-wrap:wrap;align-items:center;gap:4px;display:flex}.studio-toolbar>button:not([data-slot=select-trigger]),.studio-toolbar [data-slot=toolbar-action]{border-radius:calc(var(--radius) - 2px);min-height:28px;color:var(--muted-foreground);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;border:1px solid #0000;align-items:center;gap:6px;padding:4px 8px;font-size:11px;display:inline-flex}:is(.studio-toolbar>button:not([data-slot=select-trigger]),.studio-toolbar [data-slot=toolbar-action]):hover{color:var(--foreground);background:var(--field-hover)}:is(.studio-toolbar>button:not([data-slot=select-trigger]),.studio-toolbar [data-slot=toolbar-action]):is(:active,[aria-pressed=true]){color:var(--foreground);background:var(--field-active)}:is(.studio-toolbar>button:not([data-slot=select-trigger]),.studio-toolbar [data-slot=toolbar-action]):focus-visible{outline:2px solid var(--ring);outline-offset:2px}.studio-canvas-toolbar{z-index:20;min-width:0;color:var(--muted-foreground);pointer-events:none;flex-shrink:0;position:relative}.studio-canvas-actions{opacity:1;transition:opacity .2s ease-out,translate .2s ease-out;translate:0}.studio-canvas-toolbar[data-ghost]{position:absolute;inset:4px 4px auto}.studio-canvas-toolbar[data-ghost]:before{content:"";pointer-events:auto;height:24px;position:absolute;inset:-4px 0 auto}.studio-canvas-toolbar[data-ghost] .studio-canvas-actions{-webkit-backdrop-filter:blur(24px);backdrop-filter:blur(24px);opacity:0;transition-delay:3s;translate:0 calc(-100% - 8px)}.studio-canvas-toolbar[data-ghost]:is(:hover,:has(:focus-visible,[aria-expanded=true],[data-state=open])) .studio-canvas-actions{opacity:1;transition-delay:0s;translate:0}@media (hover:none){.studio-canvas-toolbar[data-ghost] .studio-canvas-actions{opacity:1;translate:0}}.studio-canvas-toolbar[data-expanded]{height:80px;position:absolute;inset:0 0 auto}.studio-canvas-toolbar[data-expanded] .studio-canvas-actions{pointer-events:none;background:0 0;height:100%;padding:0}.studio-canvas-toolbar[data-expanded] .studio-canvas-actions>:not(.studio-canvas-toggle){display:none}.studio-canvas-toolbar[data-expanded] .studio-canvas-toggle{width:min(280px,100%);height:100%;padding-top:max(12px, env(safe-area-inset-top));pointer-events:auto;justify-content:center;align-items:flex-start;margin-inline:auto;display:flex}.studio-canvas-toolbar[data-expanded] .studio-canvas-toggle>button{border-color:var(--sidebar-border);border-radius:var(--radius);min-height:30px;color:var(--foreground);background:var(--sidebar)}@supports (color:color-mix(in lab, red, red)){.studio-canvas-toolbar[data-expanded] .studio-canvas-toggle>button{background:color-mix(in srgb, var(--sidebar) 85%, transparent)}}.studio-canvas-toolbar[data-expanded] .studio-canvas-toggle>button{-webkit-backdrop-filter:blur(24px);backdrop-filter:blur(24px);font-size:inherit;opacity:0;transition:opacity .2s ease-out 3s,translate .2s ease-out 3s;translate:0 -8px;box-shadow:0 4px 12px #0006}.studio-canvas-toolbar[data-expanded] .studio-canvas-toggle>button:hover{background:var(--field-hover)}.studio-canvas-toolbar[data-expanded] .studio-canvas-toggle:hover>button,.studio-canvas-toolbar[data-expanded] .studio-canvas-toggle>button:focus-visible{opacity:1;transition-delay:0s;translate:0}@media (hover:none){.studio-canvas-toolbar[data-expanded] .studio-canvas-toggle>button{opacity:1;translate:0}}@media (prefers-reduced-motion:reduce){.studio-canvas-actions,.studio-canvas-toolbar[data-expanded] .studio-canvas-toggle>button{transition-duration:0s}}.studio-preview-canvas{border:1px solid var(--sidebar-border);border-radius:calc(var(--radius) + 2px);background:var(--sidebar);flex-direction:column;gap:4px;min-width:0;min-height:0;padding:4px;display:flex;position:relative;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.studio-preview-canvas{background:color-mix(in srgb, var(--sidebar) 85%, transparent)}}.studio-preview-canvas{font:12px/1.5 var(--studio-font);box-shadow:0 12px 24px #0006}.studio-preview-source{align-items:center;min-width:0;margin-right:auto;display:flex}.studio-preview-title{padding-inline:8px}.studio-preview-canvas>iframe{border-radius:calc(var(--radius) - 2px);background:var(--background);border:0;flex:1;width:100%;min-height:0}.studio-preview-canvas[data-expanded]{z-index:30;background:var(--background);border:0;border-radius:0;padding:0;position:fixed;inset:0}.studio-preview-canvas[data-expanded]>iframe{border-radius:0}}@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.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{inset:0}.inset-x-0{inset-inline:0}.inset-y-0{inset-block:0}.inset-y-2{inset-block:calc(var(--spacing) * 2)}.-top-0\\.5{top:calc(var(--spacing) * -.5)}.top-0{top:0}.top-1\\/2{top:50%}.top-4{top:calc(var(--spacing) * 4)}.-right-0\\.5{right:calc(var(--spacing) * -.5)}.right-0{right:0}.right-1{right:var(--spacing)}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:0}.left-0{left:0}.left-1{left:var(--spacing)}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.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-1{margin-inline:calc(var(--spacing) * -1)}.mt-1{margin-top:var(--spacing)}.mt-auto{margin-top:auto}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.size-1\\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2\\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.h-3\\.5{height:calc(var(--spacing) * 3.5)}.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-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-auto{height:auto}.h-full{height:100%}.h-svh{height:100svh}.max-h-\\(--available-height\\){max-height:var(--available-height)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-\\[300px\\]{max-height:300px}.min-h-0{min-height:0}.min-h-7{min-height:calc(var(--spacing) * 7)}.min-h-svh{min-height:100svh}.w-\\(--sidebar-width\\){width:var(--sidebar-width)}.w-\\(--studio-inspector-width\\){width:var(--studio-inspector-width)}.w-3\\/4{width:75%}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.max-w-full{max-width:100%}.min-w-\\(--anchor-width\\){min-width:var(--anchor-width)}.min-w-0{min-width:0}.min-w-5{min-width:calc(var(--spacing) * 5)}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.origin-\\(--transform-origin\\){transform-origin:var(--transform-origin)}.-translate-x-\\[calc\\(100\\%\\+0\\.25rem\\)\\]{--tw-translate-x:calc(calc(100% + .25rem) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-\\[calc\\(100\\%\\+1rem\\)\\]{--tw-translate-x:calc(calc(100% + 1rem) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-\\[calc\\(100\\%\\+0\\.25rem\\)\\]{--tw-translate-x:calc(100% + .25rem);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-\\[calc\\(100\\%\\+1rem\\)\\]{--tw-translate-x:calc(100% + 1rem);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\\[calc\\(-50\\%-2px\\)\\]{--tw-translate-y:calc(-50% - 2px);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-45{rotate:45deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.scroll-py-1{scroll-padding-block:var(--spacing)}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.place-items-center{place-items:center}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.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)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded-\\[2px\\]{border-radius:2px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:calc(var(--radius) + 2px)}.rounded-md{border-radius:var(--radius)}.rounded-sm{border-radius:calc(var(--radius) - 2px)}.rounded-xs{border-radius:var(--radius-xs)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-border{border-color:var(--border)}.border-input{border-color:var(--input)}.border-sidebar-border{border-color:var(--sidebar-border)}.border-white\\/15{border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.border-white\\/15{border-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.bg-\\(--field\\){background-color:var(--field)}.bg-background{background-color:var(--background)}.bg-black\\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-current{background-color:currentColor}.bg-destructive{background-color:var(--destructive)}.bg-foreground{background-color:var(--foreground)}.bg-muted{background-color:var(--muted)}.bg-popover{background-color:var(--popover)}.bg-primary{background-color:var(--primary)}.bg-secondary{background-color:var(--secondary)}.bg-sidebar,.bg-sidebar\\/85{background-color:var(--sidebar)}@supports (color:color-mix(in lab, red, red)){.bg-sidebar\\/85{background-color:color-mix(in oklab, var(--sidebar) 85%, transparent)}}.bg-transparent{background-color:#0000}.bg-warning{background-color:var(--warning)}.fill-foreground{fill:var(--foreground)}.p-0{padding:0}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-4{padding:calc(var(--spacing) * 4)}.px-0{padding-inline:0}.px-1{padding-inline:var(--spacing)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0{padding-block:0}.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-3{padding-block:calc(var(--spacing) * 3)}.py-6{padding-block:calc(var(--spacing) * 6)}.ps-3{padding-inline-start:calc(var(--spacing) * 3)}.pe-3{padding-inline-end:calc(var(--spacing) * 3)}.pt-2\\.5{padding-top:calc(var(--spacing) * 2.5)}.pr-0{padding-right:0}.pr-0\\.5{padding-right:calc(var(--spacing) * .5)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-1\\.5{padding-left:calc(var(--spacing) * 1.5)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5\\.5{padding-left:calc(var(--spacing) * 5.5)}.text-center{text-align:center}.text-left{text-align:left}.font-\\(family-name\\:--studio-font\\),.font-mono{font-family:var(--studio-font)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\\[0\\.08em\\]{--tw-tracking:.08em;letter-spacing:.08em}.text-balance{text-wrap:balance}.text-clip\\!{text-overflow:clip!important}.whitespace-nowrap{white-space:nowrap}.text-background{color:var(--background)}.text-destructive{color:var(--destructive)}.text-faint{color:var(--faint)}.text-foreground{color:var(--foreground)}.text-muted-foreground{color:var(--muted-foreground)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-foreground{color:var(--sidebar-foreground)}.text-sidebar-primary{color:var(--sidebar-primary)}.text-sky-400{color:var(--color-sky-400)}.text-success{color:var(--success)}.text-warning{color:var(--warning)}.text-white{color:var(--color-white)}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.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-\\[0_0_0_1px_var\\(--sidebar-border\\)\\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,var(--sidebar-border));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-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px 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-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px 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-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-black\\/40{--tw-shadow-color:#0006}@supports (color:color-mix(in lab, red, red)){.shadow-black\\/40{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 40%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-sidebar-ring{--tw-ring-color:var(--sidebar-ring)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.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-xl{--tw-backdrop-blur:blur(var(--blur-xl));-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-\\[color\\,box-shadow\\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[left\\,right\\,width\\,translate\\]{transition-property:left,right,width,translate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[left\\,right\\,width\\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[padding\\]{transition-property:padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[translate\\,opacity\\]{transition-property:translate,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[width\\,height\\,padding\\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[width\\]{transition-property:width;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-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-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.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}.paused{animation-play-state:paused}.running{animation-play-state:running}.group-focus-within\\/menu-item\\:opacity-100:is(:where(.group\\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\\/edge\\:translate-x-0:is(:where(.group\\/edge):hover *){--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.group-hover\\/edge\\:opacity-100:is(:where(.group\\/edge):hover *),.group-hover\\/menu-item\\:opacity-100:is(:where(.group\\/menu-item):hover *){opacity:1}}.group-has-data-\\[sidebar\\=menu-action\\]\\/menu-item\\:pr-8:is(:where(.group\\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing) * 8)}.group-data-\\[collapsible\\=icon\\]\\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\\[collapsible\\=icon\\]\\:size-8\\!:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing) * 8)!important;height:calc(var(--spacing) * 8)!important}.group-data-\\[collapsible\\=icon\\]\\:w-\\(--sidebar-width-icon\\):is(:where(.group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)\\+\\(--spacing\\(4\\)\\)\\)\\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing) * 4)))}.group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)\\+\\(--spacing\\(4\\)\\)\\+2px\\)\\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing) * 4)) + 2px)}.group-data-\\[collapsible\\=icon\\]\\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\\[collapsible\\=icon\\]\\:p-0\\!:is(:where(.group)[data-collapsible=icon] *){padding:0!important}.group-data-\\[collapsible\\=icon\\]\\:p-2\\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing) * 2)!important}.group-data-\\[collapsible\\=icon\\]\\:pl-\\[calc\\(1\\.5rem-0\\.875rem\\*352\\/144\\/2\\)\\]:is(:where(.group)[data-collapsible=icon] *){padding-left:.430556rem}.group-data-\\[collapsible\\=offcanvas\\]\\:right-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width) * -1)}.group-data-\\[collapsible\\=offcanvas\\]\\:left-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width) * -1)}.group-data-\\[collapsible\\=offcanvas\\]\\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:0}.group-data-\\[side\\=left\\]\\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\\[side\\=right\\]\\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\\[side\\=right\\]\\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}@media (hover:hover){.peer-hover\\/menu-button\\:text-sidebar-accent-foreground:is(:where(.peer\\/menu-button):hover~*){color:var(--sidebar-accent-foreground)}}.peer-data-\\[active\\=true\\]\\/menu-button\\:text-sidebar-accent-foreground:is(:where(.peer\\/menu-button)[data-active=true]~*){color:var(--sidebar-accent-foreground)}.placeholder\\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.after\\:absolute:after{content:var(--tw-content);position:absolute}.after\\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing) * -2)}@media (hover:hover){.hover\\:bg-\\(--field-hover\\):hover{background-color:var(--field-hover)}.hover\\:bg-accent:hover{background-color:var(--accent)}.hover\\:bg-destructive\\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/90:hover{background-color:color-mix(in oklab, var(--destructive) 90%, transparent)}}.hover\\:bg-primary\\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/90:hover{background-color:color-mix(in oklab, var(--primary) 90%, transparent)}}.hover\\:bg-secondary:hover,.hover\\:bg-secondary\\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-secondary\\/80:hover{background-color:color-mix(in oklab, var(--secondary) 80%, transparent)}}.hover\\:bg-sidebar-accent:hover{background-color:var(--sidebar-accent)}.hover\\:bg-sidebar\\/95:hover{background-color:var(--sidebar)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-sidebar\\/95:hover{background-color:color-mix(in oklab, var(--sidebar) 95%, transparent)}}.hover\\:bg-transparent:hover{background-color:#0000}.hover\\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\\:text-foreground:hover{color:var(--foreground)}.hover\\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-100:hover{opacity:1}.hover\\:shadow-\\[0_0_0_1px_var\\(--sidebar-accent\\)\\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,var(--sidebar-accent));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}.focus\\:translate-x-0:focus{--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.focus\\:opacity-100:focus{opacity:1}.focus\\:ring-2:focus{--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\\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus-visible\\:border-ring:focus-visible{border-color:var(--ring)}.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-\\[3px\\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + 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-destructive\\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.active\\:bg-sidebar-accent:active{background-color:var(--sidebar-accent)}.active\\:bg-transparent:active{background-color:#0000}.active\\:text-sidebar-accent-foreground:active{color:var(--sidebar-accent-foreground)}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-50:disabled{opacity:.5}.has-data-\\[variant\\=inset\\]\\:bg-sidebar:has([data-variant=inset]){background-color:var(--sidebar)}.has-\\[\\>svg\\]\\:px-1\\.5:has(>svg){padding-inline:calc(var(--spacing) * 1.5)}.has-\\[\\>svg\\]\\:px-2\\.5:has(>svg){padding-inline:calc(var(--spacing) * 2.5)}.has-\\[\\>svg\\]\\:px-3:has(>svg){padding-inline:calc(var(--spacing) * 3)}.has-\\[\\>svg\\]\\:px-4:has(>svg){padding-inline:calc(var(--spacing) * 4)}.aria-disabled\\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\\:opacity-50[aria-disabled=true]{opacity:.5}.aria-invalid\\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.aria-pressed\\:bg-primary[aria-pressed=true]{background-color:var(--primary)}.aria-pressed\\:text-primary-foreground[aria-pressed=true]{color:var(--primary-foreground)}.data-closed\\:animate-out[data-closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-closed\\:duration-300[data-closed]{--tw-duration:.3s;transition-duration:.3s}.data-closed\\:fade-out-0[data-closed]{--tw-exit-opacity:0}.data-closed\\:zoom-out-95[data-closed]{--tw-exit-scale:.95}.data-closed\\:slide-out-to-bottom[data-closed]{--tw-exit-translate-y:100%}.data-closed\\:slide-out-to-left[data-closed]{--tw-exit-translate-x:-100%}.data-closed\\:slide-out-to-right[data-closed]{--tw-exit-translate-x:100%}.data-closed\\:slide-out-to-top[data-closed]{--tw-exit-translate-y:-100%}.data-open\\:animate-in[data-open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-open\\:duration-500[data-open]{--tw-duration:.5s;transition-duration:.5s}.data-open\\:fade-in-0[data-open]{--tw-enter-opacity:0}.data-open\\:zoom-in-95[data-open]{--tw-enter-scale:.95}.data-open\\:slide-in-from-bottom[data-open]{--tw-enter-translate-y:100%}.data-open\\:slide-in-from-left[data-open]{--tw-enter-translate-x:-100%}.data-open\\:slide-in-from-right[data-open]{--tw-enter-translate-x:100%}.data-open\\:slide-in-from-top[data-open]{--tw-enter-translate-y:-100%}.data-\\[active\\=true\\]\\:bg-sidebar-accent[data-active=true]{background-color:var(--sidebar-accent)}.data-\\[active\\=true\\]\\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\\[active\\=true\\]\\:text-sidebar-accent-foreground[data-active=true]{color:var(--sidebar-accent-foreground)}.data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}.data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.data-\\[disabled\\=true\\]\\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\\[disabled\\=true\\]\\:opacity-50[data-disabled=true]{opacity:.5}.data-\\[highlighted\\]\\:bg-\\(--field-hover\\)[data-highlighted]{background-color:var(--field-hover)}.data-\\[highlighted\\]\\:text-accent-foreground[data-highlighted]{color:var(--accent-foreground)}.data-\\[instant\\]\\:animate-none[data-instant]{animation:none}.data-\\[selected\\=true\\]\\:bg-accent[data-selected=true]{background-color:var(--accent)}.data-\\[selected\\=true\\]\\:text-accent-foreground[data-selected=true]{color:var(--accent-foreground)}.data-\\[side\\=bottom\\]\\:top-1[data-side=bottom]{top:var(--spacing)}.data-\\[side\\=bottom\\]\\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\\[side\\=left\\]\\:top-1\\/2\\![data-side=left]{top:50%!important}.data-\\[side\\=left\\]\\:-right-1[data-side=left]{right:calc(var(--spacing) * -1)}.data-\\[side\\=left\\]\\:-translate-y-1\\/2[data-side=left]{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\\[side\\=left\\]\\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\\[side\\=right\\]\\:top-1\\/2\\![data-side=right]{top:50%!important}.data-\\[side\\=right\\]\\:-left-1[data-side=right]{left:calc(var(--spacing) * -1)}.data-\\[side\\=right\\]\\:-translate-y-1\\/2[data-side=right]{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\\[side\\=right\\]\\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\\[side\\=top\\]\\:-bottom-2\\.5[data-side=top]{bottom:calc(var(--spacing) * -2.5)}.data-\\[side\\=top\\]\\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\\[state\\=open\\]\\:opacity-100[data-state=open]{opacity:1}@media (hover:hover){.data-\\[state\\=open\\]\\:hover\\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--sidebar-accent)}.data-\\[state\\=open\\]\\:hover\\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--sidebar-accent-foreground)}}@media (prefers-reduced-motion:reduce){.motion-reduce\\:transition-none{transition-property:none}}@media (min-width:40rem){.sm\\:max-w-sm{max-width:var(--container-sm)}}@media (min-width:48rem){.md\\:block{display:block}.md\\:flex{display:flex}.md\\:opacity-0{opacity:0}.md\\:after\\:hidden:after{content:var(--tw-content);display:none}}@media (prefers-color-scheme:dark){.dark\\:border-input{border-color:var(--input)}.dark\\:bg-destructive\\/60{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-destructive\\/60{background-color:color-mix(in oklab, var(--destructive) 60%, transparent)}}.dark\\:bg-input\\/30{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-input\\/30{background-color:color-mix(in oklab, var(--input) 30%, transparent)}}@media (hover:hover){.dark\\:hover\\:bg-accent\\/50:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-accent\\/50:hover{background-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.dark\\:hover\\:bg-input\\/50:hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-input\\/50:hover{background-color:color-mix(in oklab, var(--input) 50%, transparent)}}}.dark\\:focus-visible\\:ring-destructive\\/40:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:focus-visible\\:ring-destructive\\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.dark\\:aria-invalid\\:ring-destructive\\/40[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:aria-invalid\\:ring-destructive\\/40[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}}.\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-3 svg:not([class*=size-]){width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'text-\\'\\]\\)\\]\\:text-muted-foreground svg:not([class*=text-]){color:var(--muted-foreground)}.\\[\\&\\>button\\]\\:hidden>button{display:none}.\\[\\&\\>span\\:first-child\\]\\:truncate>span:first-child,.\\[\\&\\>span\\:last-child\\]\\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\\[\\&\\>svg\\]\\:size-3>svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\\[\\&\\>svg\\]\\:size-4>svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\\[\\&\\>svg\\]\\:shrink-0>svg{flex-shrink:0}@media (hover:none){.\\[\\@media\\(hover\\:none\\)\\]\\:translate-x-0{--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.\\[\\@media\\(hover\\:none\\)\\]\\:opacity-100{opacity:1}}[data-slot=tooltip-content] .\\[\\[data-slot\\=tooltip-content\\]_\\&\\]\\:bg-background\\/20{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){[data-slot=tooltip-content] .\\[\\[data-slot\\=tooltip-content\\]_\\&\\]\\:bg-background\\/20{background-color:color-mix(in oklab, var(--background) 20%, transparent)}}[data-slot=tooltip-content] .\\[\\[data-slot\\=tooltip-content\\]_\\&\\]\\:text-background{color:var(--background)}@media (prefers-color-scheme:dark){[data-slot=tooltip-content] .dark\\:\\[\\[data-slot\\=tooltip-content\\]_\\&\\]\\:bg-background\\/10{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){[data-slot=tooltip-content] .dark\\:\\[\\[data-slot\\=tooltip-content\\]_\\&\\]\\:bg-background\\/10{background-color:color-mix(in oklab, var(--background) 10%, transparent)}}}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}.studio-workspace{color:var(--foreground);background:var(--background);font:12px/1.5 var(--studio-font);cursor:default}.studio-workspace [data-slot=studio-config-file][href]{cursor:pointer;text-underline-offset:3px;text-decoration:none}.studio-workspace [data-slot=studio-config-file][href]:is(:hover,:focus-visible){text-decoration-line:underline}.studio-workspace [data-slot=studio-config-file][href]:focus-visible{outline:2px solid var(--ring);outline-offset:2px}.studio-workspace :is([data-slot=sidebar-header],[data-slot=sidebar-footer]){isolation:isolate;flex-shrink:0;position:relative}.studio-workspace :is([data-slot=sidebar-header],[data-slot=sidebar-footer]):before{content:"";z-index:-1;border-radius:calc(var(--radius-lg) - .25rem);background:var(--card);pointer-events:none;position:absolute;inset:4px}.studio-workspace [data-slot=sidebar-content] [data-slot=sidebar-menu-button]{min-height:36px;color:var(--muted-foreground);gap:10px;font-size:13px;line-height:20px}.studio-workspace [data-slot=sidebar-content] [data-slot=sidebar-menu-button]>span:first-child{flex-shrink:0;display:flex}.studio-workspace [data-slot=sidebar-content] [data-slot=sidebar-menu-button]:is(:hover,:focus-visible,[data-active=true]){color:var(--sidebar-accent-foreground)}.studio-workspace{--studio-inspector-width:20rem;--preview-left:8px;--preview-right:8px;--preview-bottom:8px;position:relative}@media (min-width:768px){.studio-workspace[data-sidebar-panel=shown]{--preview-left:var(--sidebar-width)}.studio-workspace[data-sidebar-panel=shown]:has([data-slot=sidebar][data-state=collapsed]){--preview-left:calc(var(--sidebar-width-icon) + 1rem + 2px)}}@media (min-width:1024px){.studio-workspace:has([data-slot=studio-inspector][aria-hidden=false]){--preview-right:calc(var(--studio-inspector-width) + 1rem)}}@media (max-width:1023px){.studio-workspace:is(:has(>[data-slot=preview-canvas]:not([data-expanded])),[data-preview-layout=custom]):has([data-slot=studio-inspector][aria-hidden=false]){--preview-bottom:40%}.studio-workspace:is(:has(>[data-slot=preview-canvas]:not([data-expanded])),[data-preview-layout=custom]) [data-slot=studio-inspector]{inset:calc(60% + 8px) 8px 8px var(--preview-left);width:auto}}.studio-workspace>[data-slot=preview-canvas]{z-index:0}.studio-workspace>[data-slot=preview-canvas]:not([data-expanded]){inset:8px var(--preview-right) var(--preview-bottom) var(--preview-left);position:absolute}.studio-workspace>iframe[data-slot=studio-preview]{background:var(--background);border:0;width:100%;height:100%;position:absolute;inset:0}.studio-workspace[data-preview-layout=custom]>iframe[data-slot=studio-preview]{inset:0 calc(var(--preview-right) - 8px) calc(var(--preview-bottom) - 8px) calc(var(--preview-left) - 8px);width:calc(100% - var(--preview-left) - var(--preview-right) + 16px);height:calc(100% - var(--preview-bottom) + 8px)}:root{--background:#000;--foreground:#d6d7dc;--card:#ffffff0a;--card-foreground:#d6d7dc;--popover:#18191c;--popover-foreground:#d6d7dc;--primary:#e6e7ea;--primary-foreground:#000;--secondary:#ffffff14;--secondary-foreground:#d6d7dc;--muted:#18191c;--muted-foreground:#8b8c94;--faint:#5d5e66;--accent:#18191c;--accent-foreground:#d6d7dc;--destructive:#f87171;--success:#4ade80;--warning:#facc15;--border:#26272b;--input:#26272b;--ring:#5d5e66;--radius:.5rem;--field:#ffffff0f;--field-hover:#ffffff17;--field-active:#ffffff1f;--knob:#4a4b52;--knob-hover:#5a5b63;--sidebar:#000;--sidebar-foreground:#8b8c94;--sidebar-primary:#e6e7ea;--sidebar-primary-foreground:#000;--sidebar-accent:#ffffff14;--sidebar-accent-foreground:#d6d7dc;--sidebar-border:#26272b;--sidebar-ring:#5d5e66;--studio-font:ui-monospace, SFMono-Regular, Menlo, monospace;color-scheme:dark}[data-slot=studio-controls] :is(.tp-lblv_l,.tp-fldv_t):first-letter{text-transform:uppercase}[data-slot=studio-command-overlay]{z-index:1000;background:#0000004d;position:fixed;inset:0}[data-slot=studio-command-menu]{z-index:1001;border:1px solid var(--sidebar-border);border-radius:calc(var(--radius) + 2px);background:var(--sidebar);width:min(480px,100vw - 32px);max-height:calc(100dvh - min(20vh,160px) - 16px);position:fixed;top:min(20vh,160px);left:50%;overflow:auto;transform:translate(-50%)}@supports (color:color-mix(in lab, red, red)){[data-slot=studio-command-menu]{background:color-mix(in srgb, var(--sidebar) 85%, transparent)}}[data-slot=studio-command-menu]{color:var(--foreground);color-scheme:dark;font:12px/1.5 var(--studio-font);-webkit-backdrop-filter:blur(24px);backdrop-filter:blur(24px);box-shadow:0 20px 25px -5px #0006,0 8px 10px -6px #0006}[data-slot=studio-command-menu],[data-slot=studio-command-menu] *{box-sizing:border-box}[data-slot=studio-command-menu] svg{width:16px;height:16px;color:inherit;flex-shrink:0}[data-slot=studio-command-menu] [data-slot=kbd]{pointer-events:none;border:1px solid var(--border);border-radius:calc(var(--radius) - 2px);background:var(--muted);width:fit-content;min-width:20px;height:20px;font:inherit;color:var(--muted-foreground);-webkit-user-select:none;user-select:none;border-bottom-width:2px;justify-content:center;align-items:center;gap:4px;padding:0 4px;font-size:12px;font-weight:400;display:inline-flex}[data-slot=studio-command-menu] [data-slot=kbd-group]{align-items:center;gap:4px;display:inline-flex}[data-slot=studio-command-menu] button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:4px}[data-slot=studio-command-menu] button:focus-visible{outline:2px solid var(--sidebar-ring);outline-offset:2px}[data-slot=studio-command-menu] [data-slot=studio-command-heading]{align-items:center;gap:8px;height:40px;padding:0 12px 0 16px;display:flex}[data-slot=studio-command-menu] [data-slot=studio-command-heading] h2{font:inherit;flex:1;align-items:center;gap:10px;margin:0;display:flex}[data-slot=studio-command-menu] [data-slot=studio-command-heading] svg{width:auto;height:14px}[data-slot=studio-command-menu] [data-slot=studio-command-heading] strong{letter-spacing:.08em;white-space:nowrap;font-weight:700}[data-slot=studio-command-menu] [data-slot=studio-command-heading] button{padding:0}[data-slot=studio-command-menu] [data-slot=studio-command-heading] button:hover{background:var(--sidebar-accent)}[data-slot=studio-command-menu] [data-slot=studio-command-description]{display:none}[data-slot=studio-command-menu] [data-slot=command]{height:auto;color:inherit;background:0 0;flex-direction:column;display:flex;overflow:hidden}[data-slot=studio-command-menu] [data-slot=command-input-wrapper]{border-radius:var(--radius);background:var(--field);height:36px;color:var(--muted-foreground);border:1px solid #0000;align-items:center;gap:8px;margin:8px;padding:0 8px;display:flex}[data-slot=studio-command-menu] [data-slot=command-input-wrapper]:focus-within{border-color:var(--sidebar-ring)}[data-slot=studio-command-menu] [data-slot=command-input-wrapper] svg{opacity:1}[data-slot=studio-command-menu] [data-slot=command-input]{width:100%;min-width:0;height:100%;color:var(--sidebar-primary);font:inherit;background:0 0;border:0;outline:none;padding:0}[data-slot=studio-command-menu] [data-slot=command-input]::placeholder{color:var(--muted-foreground)}[data-slot=studio-command-menu] [data-slot=command-list]{overscroll-behavior:contain;max-height:300px;padding:0 8px 8px;scroll-padding:4px;overflow-y:auto}[data-slot=studio-command-menu] [data-slot=command-item]{border-radius:calc(var(--radius) - 2px);min-height:36px;font:inherit;color:var(--sidebar-foreground);cursor:pointer;align-items:center;gap:8px;padding:8px;display:flex}[data-slot=studio-command-menu] [data-slot=command-item][data-selected=true]{background:var(--sidebar-accent);color:var(--sidebar-accent-foreground)}[data-slot=studio-command-menu] [data-slot=studio-command-label]{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}[data-slot=studio-command-menu] [data-slot=command-empty]{text-align:center;font:inherit;color:var(--muted-foreground);padding:24px 8px}[data-slot=studio-command-menu] [data-slot=studio-command-footer]{border-top:1px solid var(--sidebar-border);color:var(--muted-foreground);align-items:center;gap:16px;padding:8px 12px;font-size:10px;display:flex}[data-slot=studio-command-menu] [data-slot=studio-command-footer]>span{align-items:center;gap:6px;display:inline-flex}[data-studio-root]{all:initial;color:var(--foreground);font:12px/1.5 var(--studio-font);color-scheme:dark;display:contents}@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-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{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-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@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));filter:blur(var(--tw-enter-blur,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));filter:blur(var(--tw-exit-blur,0))}}`;
237
163
 
238
164
  // src/react/shadow-css.ts
239
165
  var ROOT_FONT_SIZE = 16;
@@ -253,7 +179,7 @@ function toShadowCss(css) {
253
179
  }
254
180
 
255
181
  // src/react/shadow-root.tsx
256
- import { jsx as jsx4 } from "react/jsx-runtime";
182
+ import { jsx as jsx2 } from "react/jsx-runtime";
257
183
  var sheet;
258
184
  function studioStyleSheet() {
259
185
  if (!sheet) {
@@ -280,7 +206,7 @@ function StudioShadowRoot({ children }) {
280
206
  }, []);
281
207
  return (
282
208
  // `display: contents` keeps the host out of layout; inline so host stylesheets can't override it.
283
- /* @__PURE__ */ jsx4("div", { ref: attach, "data-studio-host": "", style: { display: "contents" }, children: root && createPortal(/* @__PURE__ */ jsx4(PortalContainer.Provider, { value: root, children }), root) })
209
+ /* @__PURE__ */ jsx2("div", { ref: attach, "data-studio-host": "", style: { display: "contents" }, children: root && createPortal(/* @__PURE__ */ jsx2(PortalContainer.Provider, { value: root, children }), root) })
284
210
  );
285
211
  }
286
212
  function activeElement() {
@@ -291,15 +217,15 @@ function activeElement() {
291
217
  var eventTarget = (event) => event.composedPath()[0] ?? event.target;
292
218
 
293
219
  // src/react/ui/tooltip.tsx
294
- import { jsx as jsx5, jsxs } from "react/jsx-runtime";
220
+ import { jsx as jsx3, jsxs } from "react/jsx-runtime";
295
221
  function TooltipProvider({ delay = 0, ...props }) {
296
- return /* @__PURE__ */ jsx5(TooltipPrimitive.Provider, { "data-slot": "tooltip-provider", delay, ...props });
222
+ return /* @__PURE__ */ jsx3(TooltipPrimitive.Provider, { "data-slot": "tooltip-provider", delay, ...props });
297
223
  }
298
224
  function Tooltip({ ...props }) {
299
- return /* @__PURE__ */ jsx5(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props });
225
+ return /* @__PURE__ */ jsx3(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props });
300
226
  }
301
227
  function TooltipTrigger({ ...props }) {
302
- return /* @__PURE__ */ jsx5(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
228
+ return /* @__PURE__ */ jsx3(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
303
229
  }
304
230
  function TooltipContent({
305
231
  className,
@@ -310,7 +236,7 @@ function TooltipContent({
310
236
  children,
311
237
  ...props
312
238
  }) {
313
- return /* @__PURE__ */ jsx5(TooltipPrimitive.Portal, { container: usePortalContainer(), children: /* @__PURE__ */ jsx5(
239
+ return /* @__PURE__ */ jsx3(TooltipPrimitive.Portal, { container: usePortalContainer(), children: /* @__PURE__ */ jsx3(
314
240
  TooltipPrimitive.Positioner,
315
241
  {
316
242
  align,
@@ -329,7 +255,7 @@ function TooltipContent({
329
255
  ...props,
330
256
  children: [
331
257
  children,
332
- /* @__PURE__ */ jsx5(TooltipPrimitive.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" })
258
+ /* @__PURE__ */ jsx3(TooltipPrimitive.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" })
333
259
  ]
334
260
  }
335
261
  )
@@ -343,10 +269,183 @@ function Hint({
343
269
  ...props
344
270
  }) {
345
271
  return /* @__PURE__ */ jsxs(Tooltip, { disabled, children: [
346
- /* @__PURE__ */ jsx5(TooltipTrigger, { render: children }),
347
- /* @__PURE__ */ jsx5(TooltipContent, { ...props, children: content })
272
+ /* @__PURE__ */ jsx3(TooltipTrigger, { render: children }),
273
+ /* @__PURE__ */ jsx3(TooltipContent, { ...props, children: content })
274
+ ] });
275
+ }
276
+
277
+ // src/react/changes.tsx
278
+ import { Fragment, jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
279
+ var label = (path) => path.map((key) => key.charAt(0).toUpperCase() + key.slice(1)).join(" \u203A ");
280
+ var COLOR = /^(#|rgba?\(|hsla?\(|hwb\(|lab\(|lch\(|oklab\(|oklch\(|color\()/i;
281
+ function Value({ value, className }) {
282
+ const text = typeof value === "number" ? String(Number(value.toFixed(4))) : typeof value === "string" ? value : JSON.stringify(value) ?? "\u2014";
283
+ const color = typeof value === "string" && COLOR.test(value) && CSS.supports("color", value) ? value : null;
284
+ return /* @__PURE__ */ jsxs2("span", { className: cn("flex min-w-0 items-center gap-1", className), title: text, children: [
285
+ color && /* @__PURE__ */ jsx4(
286
+ "span",
287
+ {
288
+ "aria-hidden": true,
289
+ className: "size-2.5 shrink-0 rounded-sm border border-white/15",
290
+ style: { background: color }
291
+ }
292
+ ),
293
+ /* @__PURE__ */ jsx4("span", { className: "truncate", children: text })
348
294
  ] });
349
295
  }
296
+ function Changes({ handle }) {
297
+ const [open, setOpen] = useState2(false);
298
+ const list = useId();
299
+ const { diff, dirty } = handle;
300
+ useEffect(() => {
301
+ if (!dirty) setOpen(false);
302
+ }, [dirty]);
303
+ if (!diff.length) return null;
304
+ const names = diff.map(({ path }) => label(path)).join(", ");
305
+ return /* @__PURE__ */ jsxs2("div", { "data-slot": "studio-changes", className: "grid gap-1", children: [
306
+ open && /* @__PURE__ */ jsx4("ul", { id: list, "aria-label": "Unsaved changes", className: "-mx-1 grid max-h-64 overflow-y-auto", children: diff.map(({ path, before, after }) => {
307
+ const name = label(path);
308
+ return /* @__PURE__ */ jsxs2(
309
+ "li",
310
+ {
311
+ "data-slot": "studio-change",
312
+ className: "flex items-center gap-2 rounded-md py-1 pr-0.5 pl-1.5 hover:bg-secondary",
313
+ children: [
314
+ /* @__PURE__ */ jsxs2("div", { className: "grid min-w-0 flex-1 gap-0.5", children: [
315
+ /* @__PURE__ */ jsx4("span", { className: "truncate text-foreground", title: name, children: name }),
316
+ /* @__PURE__ */ jsxs2("span", { className: "flex min-w-0 items-center gap-1.5 text-[11px]", children: [
317
+ /* @__PURE__ */ jsx4(Value, { value: before, className: "text-muted-foreground" }),
318
+ /* @__PURE__ */ jsx4(ArrowRight, { "aria-label": "changed to", className: "size-3 shrink-0 text-faint" }),
319
+ /* @__PURE__ */ jsx4(Value, { value: after, className: "text-warning" })
320
+ ] })
321
+ ] }),
322
+ /* @__PURE__ */ jsx4(Hint, { content: "Revert to saved", side: "left", children: /* @__PURE__ */ jsx4(
323
+ Button,
324
+ {
325
+ variant: "ghost",
326
+ size: "icon-xs",
327
+ "aria-label": `Revert ${name}`,
328
+ disabled: handle.comparing,
329
+ className: "cursor-pointer text-muted-foreground hover:text-foreground",
330
+ onClick: () => handle.revert(path),
331
+ children: /* @__PURE__ */ jsx4(Undo2, {})
332
+ }
333
+ ) })
334
+ ]
335
+ },
336
+ JSON.stringify(path)
337
+ );
338
+ }) }),
339
+ /* @__PURE__ */ jsxs2(
340
+ "button",
341
+ {
342
+ type: "button",
343
+ "aria-expanded": open,
344
+ "aria-controls": list,
345
+ onClick: () => setOpen(!open),
346
+ title: open ? void 0 : names,
347
+ className: "flex min-w-0 cursor-pointer items-center gap-1.5 rounded-sm text-left text-muted-foreground outline-none hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring/50",
348
+ children: [
349
+ /* @__PURE__ */ jsx4(ChevronUp, { "aria-hidden": true, className: cn("size-3 shrink-0 transition-transform", open && "rotate-180") }),
350
+ /* @__PURE__ */ jsxs2("span", { className: "truncate", children: [
351
+ diff.length,
352
+ " changed",
353
+ !open && /* @__PURE__ */ jsxs2(Fragment, { children: [
354
+ ": ",
355
+ /* @__PURE__ */ jsx4("span", { className: "text-foreground", children: names })
356
+ ] })
357
+ ] })
358
+ ]
359
+ }
360
+ )
361
+ ] });
362
+ }
363
+
364
+ // src/react/theme.ts
365
+ var tweakpaneTheme = {
366
+ "--tp-base-background-color": "transparent",
367
+ "--tp-base-shadow-color": "transparent",
368
+ "--tp-base-border-radius": "0px",
369
+ "--tp-base-font-family": "var(--studio-font)",
370
+ "--tp-blade-border-radius": "var(--radius)",
371
+ "--tp-blade-horizontal-padding": "4px",
372
+ "--tp-blade-value-width": "168px",
373
+ "--tp-container-horizontal-padding": "8px",
374
+ "--tp-container-vertical-padding": "6px",
375
+ "--tp-container-unit-size": "22px",
376
+ "--tp-container-unit-spacing": "6px",
377
+ "--tp-container-background-color": "var(--card)",
378
+ "--tp-container-background-color-hover": "var(--field)",
379
+ "--tp-container-background-color-focus": "var(--field-hover)",
380
+ "--tp-container-background-color-active": "var(--field-active)",
381
+ "--tp-container-foreground-color": "var(--muted-foreground)",
382
+ "--tp-input-background-color": "var(--field)",
383
+ "--tp-input-background-color-hover": "var(--field-hover)",
384
+ "--tp-input-background-color-focus": "var(--field-active)",
385
+ "--tp-input-background-color-active": "var(--field-active)",
386
+ "--tp-input-foreground-color": "var(--foreground)",
387
+ // Buttons and slider knobs: lighter than fields so the knob reads against the track.
388
+ "--tp-button-background-color": "var(--knob)",
389
+ "--tp-button-background-color-hover": "var(--knob-hover)",
390
+ "--tp-button-background-color-focus": "var(--knob-hover)",
391
+ "--tp-button-background-color-active": "var(--muted-foreground)",
392
+ "--tp-button-foreground-color": "var(--foreground)",
393
+ "--tp-groove-foreground-color": "var(--border)",
394
+ "--tp-label-foreground-color": "var(--muted-foreground)",
395
+ "--tp-monitor-background-color": "var(--card)",
396
+ "--tp-monitor-foreground-color": "var(--muted-foreground)"
397
+ };
398
+
399
+ // src/react/tool-icon.tsx
400
+ import { SlidersHorizontal } from "lucide";
401
+ import { jsx as jsx5 } from "react/jsx-runtime";
402
+ var camel = (name) => name.replace(/-([a-z])/g, (_, char) => char.toUpperCase());
403
+ function ToolIcon({ icon = SlidersHorizontal, ...props }) {
404
+ return /* @__PURE__ */ jsx5(
405
+ "svg",
406
+ {
407
+ viewBox: "0 0 24 24",
408
+ fill: "none",
409
+ stroke: "currentColor",
410
+ strokeWidth: 2,
411
+ strokeLinecap: "round",
412
+ strokeLinejoin: "round",
413
+ "aria-hidden": true,
414
+ ...props,
415
+ children: icon.map(([Tag, attrs], index) => {
416
+ const Element = Tag;
417
+ return /* @__PURE__ */ jsx5(
418
+ Element,
419
+ {
420
+ ...Object.fromEntries(Object.entries(attrs).map(([name, value]) => [camel(name), value]))
421
+ },
422
+ index
423
+ );
424
+ })
425
+ }
426
+ );
427
+ }
428
+
429
+ // src/react/ui/kbd.tsx
430
+ import { jsx as jsx6 } from "react/jsx-runtime";
431
+ function Kbd({ className, ...props }) {
432
+ return /* @__PURE__ */ jsx6(
433
+ "kbd",
434
+ {
435
+ "data-slot": "kbd",
436
+ className: cn(
437
+ "bg-muted text-muted-foreground border-border pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm border border-b-2 px-1 font-mono text-xs font-normal select-none",
438
+ "[&_svg:not([class*='size-'])]:size-3",
439
+ "[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10",
440
+ className
441
+ ),
442
+ ...props
443
+ }
444
+ );
445
+ }
446
+ function KbdGroup({ className, ...props }) {
447
+ return /* @__PURE__ */ jsx6("span", { "data-slot": "kbd-group", className: cn("inline-flex items-center gap-1", className), ...props });
448
+ }
350
449
 
351
450
  // src/react/ui/panel.tsx
352
451
  import { Slot as Slot3 } from "radix-ui";
@@ -355,22 +454,22 @@ import { forwardRef as forwardRef2 } from "react";
355
454
  // src/react/surface.tsx
356
455
  import { Slot as Slot2 } from "radix-ui";
357
456
  import { forwardRef } from "react";
358
- import { jsx as jsx6 } from "react/jsx-runtime";
457
+ import { jsx as jsx7 } from "react/jsx-runtime";
359
458
  var StudioSurface = forwardRef(
360
459
  function StudioSurface2({ asChild = false, className, ...props }, ref) {
361
460
  const Comp = asChild ? Slot2.Root : "div";
362
- return /* @__PURE__ */ jsx6(Comp, { ref, "data-slot": "studio-surface", className: cn("studio-surface", className), ...props });
461
+ return /* @__PURE__ */ jsx7(Comp, { ref, "data-slot": "studio-surface", className: cn("studio-surface", className), ...props });
363
462
  }
364
463
  );
365
464
  var StudioToolbar = forwardRef(function StudioToolbar2({ className, ...props }, ref) {
366
- return /* @__PURE__ */ jsx6(StudioSurface, { ref, role: "group", className: cn("studio-toolbar", className), ...props });
465
+ return /* @__PURE__ */ jsx7(StudioSurface, { ref, role: "group", className: cn("studio-toolbar", className), ...props });
367
466
  });
368
467
 
369
468
  // src/react/ui/panel.tsx
370
- import { jsx as jsx7 } from "react/jsx-runtime";
469
+ import { jsx as jsx8 } from "react/jsx-runtime";
371
470
  var Panel = forwardRef2(function Panel2({ className, asChild = false, ...props }, ref) {
372
471
  const Comp = asChild ? Slot3.Root : "div";
373
- return /* @__PURE__ */ jsx7(
472
+ return /* @__PURE__ */ jsx8(
374
473
  Comp,
375
474
  {
376
475
  ref,
@@ -384,10 +483,10 @@ var Panel = forwardRef2(function Panel2({ className, asChild = false, ...props }
384
483
  );
385
484
  });
386
485
  function PanelHeader({ className, ...props }) {
387
- return /* @__PURE__ */ jsx7(StudioSurface, { asChild: true, className: cn("px-3 pt-2.5 pb-2", className), children: /* @__PURE__ */ jsx7("header", { "data-slot": "panel-header", ...props }) });
486
+ return /* @__PURE__ */ jsx8(StudioSurface, { asChild: true, className: cn("px-3 pt-2.5 pb-2", className), children: /* @__PURE__ */ jsx8("header", { "data-slot": "panel-header", ...props }) });
388
487
  }
389
488
  var PanelContent = forwardRef2(function PanelContent2({ className, ...props }, ref) {
390
- return /* @__PURE__ */ jsx7(
489
+ return /* @__PURE__ */ jsx8(
391
490
  "div",
392
491
  {
393
492
  ref,
@@ -398,18 +497,18 @@ var PanelContent = forwardRef2(function PanelContent2({ className, ...props }, r
398
497
  );
399
498
  });
400
499
  function PanelFooter({ className, ...props }) {
401
- return /* @__PURE__ */ jsx7(StudioSurface, { asChild: true, className: cn("grid gap-2 p-2", className), children: /* @__PURE__ */ jsx7("footer", { "data-slot": "panel-footer", ...props }) });
500
+ return /* @__PURE__ */ jsx8(StudioSurface, { asChild: true, className: cn("grid gap-2 p-2", className), children: /* @__PURE__ */ jsx8("footer", { "data-slot": "panel-footer", ...props }) });
402
501
  }
403
502
 
404
503
  // src/react/inspector.tsx
405
- import { Fragment, jsx as jsx8, jsxs as jsxs2 } from "react/jsx-runtime";
504
+ import { Fragment as Fragment2, jsx as jsx9, jsxs as jsxs3 } from "react/jsx-runtime";
406
505
  function describe(studio, handle) {
407
506
  const { state } = handle;
408
507
  if (handle.comparing) return { tone: "text-sky-400", text: "Showing saved" };
409
508
  if (studio.connection.phase !== "connected") return { tone: "text-faint", text: "Not persisting" };
410
509
  if (!state) return { tone: "text-destructive", text: "Restart studio dev" };
411
510
  if (state.conflict) return { tone: "text-destructive", text: "Changed on disk" };
412
- if (state.dirty) return { tone: "text-warning", text: "Unsaved" };
511
+ if (handle.dirty) return { tone: "text-warning", text: "Unsaved" };
413
512
  return { tone: "text-success", text: state.saved.hash ? "Saved" : "Not on disk yet" };
414
513
  }
415
514
  function adoptTweakpaneStyles(container) {
@@ -428,10 +527,29 @@ function Inspector({
428
527
  useStudio(studio);
429
528
  const container = useRef(null);
430
529
  const pane = useRef(null);
431
- const [failure, setFailure] = useState2(null);
432
- const run = (action) => void action.then((result) => setFailure(result.ok ? null : result.message ?? result.error));
433
- const save = (force = false) => run(handle.save({ force }));
434
- useEffect(() => {
530
+ const [failure, setFailure] = useState3(null);
531
+ const [copied, setCopied] = useState3(false);
532
+ const { definition, state } = handle;
533
+ const canDiscard = handle.dirty && !handle.comparing;
534
+ const canSave = canDiscard && !!state;
535
+ const save = (force = false) => void handle.save({ force }).then((result) => setFailure(result.ok ? null : result.message ?? result.error));
536
+ const share = () => {
537
+ const url = new URL(location.href);
538
+ url.hash = definition.id;
539
+ copyLink(handle.shareUrl(url)).then(
540
+ () => {
541
+ setFailure(null);
542
+ setCopied(true);
543
+ },
544
+ () => setFailure("Could not copy the share link")
545
+ );
546
+ };
547
+ useEffect2(() => {
548
+ if (!copied) return;
549
+ const timer = setTimeout(() => setCopied(false), 1500);
550
+ return () => clearTimeout(timer);
551
+ }, [copied]);
552
+ useEffect2(() => {
435
553
  let disposed = false;
436
554
  let teardown = () => {
437
555
  };
@@ -457,33 +575,28 @@ function Inspector({
457
575
  teardown();
458
576
  };
459
577
  }, [handle]);
460
- useEffect(() => {
578
+ useEffect2(() => {
461
579
  const onKeyDown = (event) => {
462
580
  if (event.key !== "s" || !(event.metaKey || event.ctrlKey)) return;
463
581
  event.preventDefault();
464
- if (handle.state?.dirty) save();
582
+ if (canSave) save();
465
583
  };
466
584
  addEventListener("keydown", onKeyDown);
467
585
  return () => removeEventListener("keydown", onKeyDown);
468
586
  });
469
- useEffect(() => {
587
+ useEffect2(() => {
470
588
  if (pane.current) pane.current.disabled = handle.comparing;
471
589
  });
472
- const { definition, state } = handle;
473
590
  const ConfigFile = fileHref ? "a" : "span";
474
591
  const status = describe(studio, handle);
475
- const editable2 = studio.connection.phase === "connected" && !!state?.dirty && !handle.comparing;
476
- const changes = handle.changes.map(
477
- (path) => path.split(".").map((key) => key.charAt(0).toUpperCase() + key.slice(1)).join(" \u203A ")
478
- );
479
- return /* @__PURE__ */ jsxs2(Fragment, { children: [
480
- /* @__PURE__ */ jsxs2(PanelHeader, { children: [
481
- /* @__PURE__ */ jsxs2("strong", { className: "flex min-w-0 items-center gap-2 text-foreground", children: [
482
- /* @__PURE__ */ jsx8(ToolIcon, { icon: definition.icon, className: "size-3.5 shrink-0" }),
483
- /* @__PURE__ */ jsx8("span", { className: "truncate", title: definition.title ?? definition.id, children: definition.title ?? definition.id })
592
+ return /* @__PURE__ */ jsxs3(Fragment2, { children: [
593
+ /* @__PURE__ */ jsxs3(PanelHeader, { children: [
594
+ /* @__PURE__ */ jsxs3("strong", { className: "flex min-w-0 items-center gap-2 text-foreground", children: [
595
+ /* @__PURE__ */ jsx9(ToolIcon, { icon: definition.icon, className: "size-3.5 shrink-0" }),
596
+ /* @__PURE__ */ jsx9("span", { className: "truncate", title: definition.title ?? definition.id, children: definition.title ?? definition.id })
484
597
  ] }),
485
- /* @__PURE__ */ jsxs2("div", { className: "mt-1 flex items-center gap-3 pl-5.5 text-[11px]", children: [
486
- /* @__PURE__ */ jsx8(
598
+ /* @__PURE__ */ jsxs3("div", { className: "mt-1 flex items-center gap-3 pl-5.5 text-[11px]", children: [
599
+ /* @__PURE__ */ jsx9(
487
600
  ConfigFile,
488
601
  {
489
602
  "data-slot": "studio-config-file",
@@ -493,37 +606,33 @@ function Inspector({
493
606
  children: definition.file
494
607
  }
495
608
  ),
496
- /* @__PURE__ */ jsxs2(
609
+ /* @__PURE__ */ jsxs3(
497
610
  "span",
498
611
  {
499
612
  className: `flex shrink-0 items-center gap-1.5 ${status.tone}`,
500
613
  title: state ? `Draft revision ${state.draft.revision}` : void 0,
501
614
  children: [
502
- /* @__PURE__ */ jsx8("span", { "aria-hidden": "true", className: "size-1.5 rounded-full bg-current" }),
615
+ /* @__PURE__ */ jsx9("span", { "aria-hidden": "true", className: "size-1.5 rounded-full bg-current" }),
503
616
  status.text
504
617
  ]
505
618
  }
506
619
  )
507
620
  ] })
508
621
  ] }),
509
- /* @__PURE__ */ jsx8(PanelContent, { ref: container, "data-slot": "studio-controls", style: tweakpaneTheme }),
510
- /* @__PURE__ */ jsxs2(PanelFooter, { children: [
511
- failure && /* @__PURE__ */ jsx8("div", { className: "text-destructive", children: failure }),
512
- changes.length > 0 && /* @__PURE__ */ jsxs2("div", { className: "truncate text-muted-foreground", title: changes.join(", "), children: [
513
- changes.length,
514
- " changed: ",
515
- /* @__PURE__ */ jsx8("span", { className: "text-foreground", children: changes.join(", ") })
516
- ] }),
517
- /* @__PURE__ */ jsxs2("div", { className: "flex gap-2", children: [
518
- /* @__PURE__ */ jsx8(
622
+ /* @__PURE__ */ jsx9(PanelContent, { ref: container, "data-slot": "studio-controls", style: tweakpaneTheme }),
623
+ /* @__PURE__ */ jsxs3(PanelFooter, { children: [
624
+ failure && /* @__PURE__ */ jsx9("div", { className: "text-destructive", children: failure }),
625
+ /* @__PURE__ */ jsx9(Changes, { handle }),
626
+ /* @__PURE__ */ jsxs3("div", { className: "flex gap-2", children: [
627
+ /* @__PURE__ */ jsx9(
519
628
  Hint,
520
629
  {
521
630
  className: "flex items-center gap-2",
522
- content: /* @__PURE__ */ jsxs2(Fragment, { children: [
631
+ content: /* @__PURE__ */ jsxs3(Fragment2, { children: [
523
632
  "Hold to compare with saved ",
524
- /* @__PURE__ */ jsx8(Kbd, { children: "\\" })
633
+ /* @__PURE__ */ jsx9(Kbd, { children: "\\" })
525
634
  ] }),
526
- children: /* @__PURE__ */ jsx8(
635
+ children: /* @__PURE__ */ jsx9(
527
636
  Button,
528
637
  {
529
638
  variant: "secondary",
@@ -538,27 +647,41 @@ function Inspector({
538
647
  },
539
648
  onPointerUp: () => onCompare(false),
540
649
  onPointerCancel: () => onCompare(false),
541
- children: /* @__PURE__ */ jsx8(SquareSplitHorizontal, {})
650
+ children: /* @__PURE__ */ jsx9(SquareSplitHorizontal, {})
542
651
  }
543
652
  )
544
653
  }
545
654
  ),
546
- /* @__PURE__ */ jsx8(
655
+ /* @__PURE__ */ jsx9(Hint, { content: copied ? "Link copied" : "Copy a link with this config", children: /* @__PURE__ */ jsx9(
656
+ Button,
657
+ {
658
+ variant: "secondary",
659
+ size: "icon-sm",
660
+ "aria-label": "Copy a link with this config",
661
+ className: "shrink-0",
662
+ onClick: share,
663
+ children: copied ? /* @__PURE__ */ jsx9(Check, { className: "text-success" }) : /* @__PURE__ */ jsx9(Link, {})
664
+ }
665
+ ) }),
666
+ /* @__PURE__ */ jsx9(
547
667
  Button,
548
668
  {
549
669
  variant: "secondary",
550
670
  size: "sm",
551
671
  className: "flex-1",
552
- disabled: !editable2,
553
- onClick: () => run(handle.discard()),
672
+ disabled: !canDiscard,
673
+ onClick: () => {
674
+ setFailure(null);
675
+ handle.discard();
676
+ },
554
677
  children: "Discard"
555
678
  }
556
679
  ),
557
- state?.conflict ? /* @__PURE__ */ jsx8(Button, { variant: "destructive", size: "sm", className: "flex-1", onClick: () => save(true), children: "Overwrite file" }) : /* @__PURE__ */ jsxs2(Button, { size: "sm", className: "flex-1", disabled: !editable2, onClick: () => save(), children: [
680
+ state?.conflict ? /* @__PURE__ */ jsx9(Button, { variant: "destructive", size: "sm", className: "flex-1", onClick: () => save(true), children: "Overwrite file" }) : /* @__PURE__ */ jsxs3(Button, { size: "sm", className: "flex-1", disabled: !canSave, onClick: () => save(), children: [
558
681
  "Save",
559
- /* @__PURE__ */ jsxs2(KbdGroup, { children: [
560
- /* @__PURE__ */ jsx8(Kbd, { children: "\u2318" }),
561
- /* @__PURE__ */ jsx8(Kbd, { children: "S" })
682
+ /* @__PURE__ */ jsxs3(KbdGroup, { children: [
683
+ /* @__PURE__ */ jsx9(Kbd, { children: "\u2318" }),
684
+ /* @__PURE__ */ jsx9(Kbd, { children: "S" })
562
685
  ] })
563
686
  ] })
564
687
  ] })
@@ -567,13 +690,13 @@ function Inspector({
567
690
  }
568
691
 
569
692
  // src/react/logo.tsx
570
- import { jsx as jsx9 } from "react/jsx-runtime";
693
+ import { jsx as jsx10 } from "react/jsx-runtime";
571
694
  function Logo(props) {
572
- return /* @__PURE__ */ jsx9("svg", { viewBox: "0 0 352 144", fill: "currentColor", "aria-label": "JOYCO", role: "img", ...props, children: /* @__PURE__ */ jsx9("path", { d: "M328 96L280 144H0V40H176V112H192V24H0V0H352V24H328V96Z" }) });
695
+ return /* @__PURE__ */ jsx10("svg", { viewBox: "0 0 352 144", fill: "currentColor", "aria-label": "JOYCO", role: "img", ...props, children: /* @__PURE__ */ jsx10("path", { d: "M328 96L280 144H0V40H176V112H192V24H0V0H352V24H328V96Z" }) });
573
696
  }
574
697
 
575
698
  // src/react/pinned-tools.ts
576
- import { useEffect as useEffect2, useState as useState3 } from "react";
699
+ import { useEffect as useEffect3, useState as useState4 } from "react";
577
700
  var STORAGE_KEY = "joyco-studio:pinned-tools";
578
701
  var CHANGE_EVENT = "joyco-studio:pins-changed";
579
702
  function readPins() {
@@ -585,8 +708,8 @@ function readPins() {
585
708
  }
586
709
  }
587
710
  function usePinnedTools(studio) {
588
- const [pins, setPins] = useState3([]);
589
- useEffect2(() => {
711
+ const [pins, setPins] = useState4([]);
712
+ useEffect3(() => {
590
713
  setPins(readPins());
591
714
  const onChange = (event) => setPins(event.detail);
592
715
  const onStorage = (event) => {
@@ -614,17 +737,17 @@ function usePinnedTools(studio) {
614
737
 
615
738
  // src/react/preview-canvas.tsx
616
739
  import { RotateCw } from "lucide-react";
617
- import { forwardRef as forwardRef3, useImperativeHandle, useRef as useRef2, useState as useState5 } from "react";
740
+ import { forwardRef as forwardRef3, useImperativeHandle, useRef as useRef2, useState as useState6 } from "react";
618
741
 
619
742
  // src/react/canvas-toolbar.tsx
620
743
  import { Maximize, Minimize, Pin, PinOff } from "lucide-react";
621
- import { useState as useState4 } from "react";
622
- import { jsx as jsx10, jsxs as jsxs3 } from "react/jsx-runtime";
623
- function CanvasToolbar({ label, expanded = false, onToggle, children }) {
624
- const [ghost, setGhost] = useState4(false);
744
+ import { useState as useState5 } from "react";
745
+ import { jsx as jsx11, jsxs as jsxs4 } from "react/jsx-runtime";
746
+ function CanvasToolbar({ label: label2, expanded = false, onToggle, children }) {
747
+ const [ghost, setGhost] = useState5(false);
625
748
  const ExpandIcon = expanded ? Minimize : Maximize;
626
749
  const PinIcon = ghost ? PinOff : Pin;
627
- return /* @__PURE__ */ jsx10(
750
+ return /* @__PURE__ */ jsx11(
628
751
  "div",
629
752
  {
630
753
  className: "studio-canvas-toolbar",
@@ -632,22 +755,22 @@ function CanvasToolbar({ label, expanded = false, onToggle, children }) {
632
755
  "data-expanded": expanded || void 0,
633
756
  "data-ghost": !expanded && ghost || void 0,
634
757
  role: "group",
635
- "aria-label": label,
636
- children: /* @__PURE__ */ jsxs3(StudioToolbar, { className: "studio-canvas-actions", children: [
758
+ "aria-label": label2,
759
+ children: /* @__PURE__ */ jsxs4(StudioToolbar, { className: "studio-canvas-actions", children: [
637
760
  children,
638
- onToggle && /* @__PURE__ */ jsx10("div", { className: "studio-canvas-toggle", children: /* @__PURE__ */ jsxs3("button", { "data-slot": "toolbar-action", type: "button", "aria-pressed": expanded, onClick: onToggle, children: [
639
- /* @__PURE__ */ jsx10(ExpandIcon, { size: 14, strokeWidth: 1.5, "aria-hidden": true }),
761
+ onToggle && /* @__PURE__ */ jsx11("div", { className: "studio-canvas-toggle", children: /* @__PURE__ */ jsxs4("button", { "data-slot": "toolbar-action", type: "button", "aria-pressed": expanded, onClick: onToggle, children: [
762
+ /* @__PURE__ */ jsx11(ExpandIcon, { size: 14, strokeWidth: 1.5, "aria-hidden": true }),
640
763
  expanded ? "Contain canvas" : "Expand"
641
764
  ] }) }),
642
- !expanded && /* @__PURE__ */ jsx10(
765
+ !expanded && /* @__PURE__ */ jsx11(
643
766
  "button",
644
767
  {
645
768
  type: "button",
646
- "aria-label": `Auto-hide ${label.toLowerCase()} header`,
769
+ "aria-label": `Auto-hide ${label2.toLowerCase()} header`,
647
770
  "aria-pressed": ghost,
648
771
  title: ghost ? "Pin header" : "Auto-hide header",
649
772
  onClick: () => setGhost(!ghost),
650
- children: /* @__PURE__ */ jsx10(PinIcon, { size: 14, strokeWidth: 1.5, "aria-hidden": true })
773
+ children: /* @__PURE__ */ jsx11(PinIcon, { size: 14, strokeWidth: 1.5, "aria-hidden": true })
651
774
  }
652
775
  )
653
776
  ] })
@@ -656,13 +779,13 @@ function CanvasToolbar({ label, expanded = false, onToggle, children }) {
656
779
  }
657
780
 
658
781
  // src/react/preview-canvas.tsx
659
- import { jsx as jsx11, jsxs as jsxs4 } from "react/jsx-runtime";
782
+ import { jsx as jsx12, jsxs as jsxs5 } from "react/jsx-runtime";
660
783
  var PreviewCanvas = forwardRef3(function PreviewCanvas2({ title = "Preview", expanded: controlled, onExpandedChange, onReload, toolbar, ...props }, ref) {
661
- const [localExpanded, setExpanded] = useState5(false);
784
+ const [localExpanded, setExpanded] = useState6(false);
662
785
  const expanded = controlled ?? localExpanded;
663
786
  const frame = useRef2(null);
664
787
  useImperativeHandle(ref, () => frame.current, []);
665
- return /* @__PURE__ */ jsxs4(
788
+ return /* @__PURE__ */ jsxs5(
666
789
  "section",
667
790
  {
668
791
  className: "studio-preview-canvas",
@@ -670,7 +793,7 @@ var PreviewCanvas = forwardRef3(function PreviewCanvas2({ title = "Preview", exp
670
793
  "data-expanded": expanded || void 0,
671
794
  "aria-label": `${title} canvas`,
672
795
  children: [
673
- /* @__PURE__ */ jsxs4(
796
+ /* @__PURE__ */ jsxs5(
674
797
  CanvasToolbar,
675
798
  {
676
799
  label: "Preview canvas",
@@ -680,7 +803,7 @@ var PreviewCanvas = forwardRef3(function PreviewCanvas2({ title = "Preview", exp
680
803
  onExpandedChange?.(!expanded);
681
804
  },
682
805
  children: [
683
- /* @__PURE__ */ jsx11(
806
+ /* @__PURE__ */ jsx12(
684
807
  "button",
685
808
  {
686
809
  type: "button",
@@ -690,30 +813,30 @@ var PreviewCanvas = forwardRef3(function PreviewCanvas2({ title = "Preview", exp
690
813
  onReload?.();
691
814
  if (frame.current) frame.current.src = frame.current.src;
692
815
  },
693
- children: /* @__PURE__ */ jsx11(RotateCw, { size: 14, strokeWidth: 1.5, "aria-hidden": true })
816
+ children: /* @__PURE__ */ jsx12(RotateCw, { size: 14, strokeWidth: 1.5, "aria-hidden": true })
694
817
  }
695
818
  ),
696
- /* @__PURE__ */ jsx11("div", { className: "studio-preview-source", children: toolbar ?? /* @__PURE__ */ jsx11("span", { className: "studio-preview-title", children: title }) })
819
+ /* @__PURE__ */ jsx12("div", { className: "studio-preview-source", children: toolbar ?? /* @__PURE__ */ jsx12("span", { className: "studio-preview-title", children: title }) })
697
820
  ]
698
821
  }
699
822
  ),
700
- /* @__PURE__ */ jsx11("iframe", { ...props, ref: frame, title })
823
+ /* @__PURE__ */ jsx12("iframe", { ...props, ref: frame, title })
701
824
  ]
702
825
  }
703
826
  );
704
827
  });
705
828
 
706
829
  // src/react/session-flag.ts
707
- import { useEffect as useEffect3, useState as useState6 } from "react";
830
+ import { useEffect as useEffect4, useState as useState7 } from "react";
708
831
  function useSessionFlag(key) {
709
- const [value, setValue] = useState6(() => {
832
+ const [value, setValue] = useState7(() => {
710
833
  try {
711
834
  return sessionStorage.getItem(key) === "true";
712
835
  } catch {
713
836
  return false;
714
837
  }
715
838
  });
716
- useEffect3(() => {
839
+ useEffect4(() => {
717
840
  try {
718
841
  sessionStorage.setItem(key, String(value));
719
842
  } catch {
@@ -747,15 +870,15 @@ function useIsMobile() {
747
870
  // src/react/ui/sheet.tsx
748
871
  import { XIcon } from "lucide-react";
749
872
  import { Dialog as SheetPrimitive } from "@base-ui/react/dialog";
750
- import { jsx as jsx12, jsxs as jsxs5 } from "react/jsx-runtime";
873
+ import { jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
751
874
  function Sheet({ ...props }) {
752
- return /* @__PURE__ */ jsx12(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
875
+ return /* @__PURE__ */ jsx13(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
753
876
  }
754
877
  function SheetPortal({ ...props }) {
755
- return /* @__PURE__ */ jsx12(SheetPrimitive.Portal, { "data-slot": "sheet-portal", container: usePortalContainer(), ...props });
878
+ return /* @__PURE__ */ jsx13(SheetPrimitive.Portal, { "data-slot": "sheet-portal", container: usePortalContainer(), ...props });
756
879
  }
757
880
  function SheetOverlay({ className, ...props }) {
758
- return /* @__PURE__ */ jsx12(
881
+ return /* @__PURE__ */ jsx13(
759
882
  SheetPrimitive.Backdrop,
760
883
  {
761
884
  "data-slot": "sheet-overlay",
@@ -774,9 +897,9 @@ function SheetContent({
774
897
  showCloseButton = true,
775
898
  ...props
776
899
  }) {
777
- return /* @__PURE__ */ jsxs5(SheetPortal, { children: [
778
- /* @__PURE__ */ jsx12(SheetOverlay, {}),
779
- /* @__PURE__ */ jsxs5(
900
+ return /* @__PURE__ */ jsxs6(SheetPortal, { children: [
901
+ /* @__PURE__ */ jsx13(SheetOverlay, {}),
902
+ /* @__PURE__ */ jsxs6(
780
903
  SheetPrimitive.Popup,
781
904
  {
782
905
  "data-slot": "sheet-content",
@@ -791,9 +914,9 @@ function SheetContent({
791
914
  ...props,
792
915
  children: [
793
916
  children,
794
- showCloseButton && /* @__PURE__ */ jsxs5(SheetPrimitive.Close, { className: "absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none", children: [
795
- /* @__PURE__ */ jsx12(XIcon, { className: "size-4" }),
796
- /* @__PURE__ */ jsx12("span", { className: "sr-only", children: "Close" })
917
+ showCloseButton && /* @__PURE__ */ jsxs6(SheetPrimitive.Close, { className: "absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none", children: [
918
+ /* @__PURE__ */ jsx13(XIcon, { className: "size-4" }),
919
+ /* @__PURE__ */ jsx13("span", { className: "sr-only", children: "Close" })
797
920
  ] })
798
921
  ]
799
922
  }
@@ -801,10 +924,10 @@ function SheetContent({
801
924
  ] });
802
925
  }
803
926
  function SheetHeader({ className, ...props }) {
804
- return /* @__PURE__ */ jsx12("div", { "data-slot": "sheet-header", className: cn("flex flex-col gap-1.5 p-4", className), ...props });
927
+ return /* @__PURE__ */ jsx13("div", { "data-slot": "sheet-header", className: cn("flex flex-col gap-1.5 p-4", className), ...props });
805
928
  }
806
929
  function SheetTitle({ className, ...props }) {
807
- return /* @__PURE__ */ jsx12(
930
+ return /* @__PURE__ */ jsx13(
808
931
  SheetPrimitive.Title,
809
932
  {
810
933
  "data-slot": "sheet-title",
@@ -814,7 +937,7 @@ function SheetTitle({ className, ...props }) {
814
937
  );
815
938
  }
816
939
  function SheetDescription({ className, ...props }) {
817
- return /* @__PURE__ */ jsx12(
940
+ return /* @__PURE__ */ jsx13(
818
941
  SheetPrimitive.Description,
819
942
  {
820
943
  "data-slot": "sheet-description",
@@ -825,7 +948,7 @@ function SheetDescription({ className, ...props }) {
825
948
  }
826
949
 
827
950
  // src/react/ui/sidebar.tsx
828
- import { jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
951
+ import { jsx as jsx14, jsxs as jsxs7 } from "react/jsx-runtime";
829
952
  var SIDEBAR_COOKIE_NAME = "sidebar_state";
830
953
  var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
831
954
  var SIDEBAR_WIDTH = "256px";
@@ -880,7 +1003,7 @@ function SidebarProvider({
880
1003
  }),
881
1004
  [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
882
1005
  );
883
- return /* @__PURE__ */ jsx13(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx13(TooltipProvider, { delay: 0, children: /* @__PURE__ */ jsx13(
1006
+ return /* @__PURE__ */ jsx14(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx14(TooltipProvider, { delay: 0, children: /* @__PURE__ */ jsx14(
884
1007
  "div",
885
1008
  {
886
1009
  "data-slot": "sidebar-wrapper",
@@ -906,7 +1029,7 @@ function Sidebar({
906
1029
  const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
907
1030
  const Surface = variant === "floating" ? Panel : "div";
908
1031
  if (collapsible === "none") {
909
- return /* @__PURE__ */ jsx13(
1032
+ return /* @__PURE__ */ jsx14(
910
1033
  "div",
911
1034
  {
912
1035
  "data-slot": "sidebar",
@@ -917,7 +1040,7 @@ function Sidebar({
917
1040
  );
918
1041
  }
919
1042
  if (isMobile) {
920
- return /* @__PURE__ */ jsx13(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: /* @__PURE__ */ jsxs6(
1043
+ return /* @__PURE__ */ jsx14(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: /* @__PURE__ */ jsxs7(
921
1044
  SheetContent,
922
1045
  {
923
1046
  "data-sidebar": "sidebar",
@@ -929,16 +1052,16 @@ function Sidebar({
929
1052
  },
930
1053
  side,
931
1054
  children: [
932
- /* @__PURE__ */ jsxs6(SheetHeader, { className: "sr-only", children: [
933
- /* @__PURE__ */ jsx13(SheetTitle, { children: "Sidebar" }),
934
- /* @__PURE__ */ jsx13(SheetDescription, { children: "Displays the mobile sidebar." })
1055
+ /* @__PURE__ */ jsxs7(SheetHeader, { className: "sr-only", children: [
1056
+ /* @__PURE__ */ jsx14(SheetTitle, { children: "Sidebar" }),
1057
+ /* @__PURE__ */ jsx14(SheetDescription, { children: "Displays the mobile sidebar." })
935
1058
  ] }),
936
- /* @__PURE__ */ jsx13("div", { className: "flex h-full w-full flex-col", children })
1059
+ /* @__PURE__ */ jsx14("div", { className: "flex h-full w-full flex-col", children })
937
1060
  ]
938
1061
  }
939
1062
  ) });
940
1063
  }
941
- return /* @__PURE__ */ jsxs6(
1064
+ return /* @__PURE__ */ jsxs7(
942
1065
  "div",
943
1066
  {
944
1067
  className: "group peer hidden text-sidebar-foreground md:block",
@@ -948,7 +1071,7 @@ function Sidebar({
948
1071
  "data-side": side,
949
1072
  "data-slot": "sidebar",
950
1073
  children: [
951
- /* @__PURE__ */ jsx13(
1074
+ /* @__PURE__ */ jsx14(
952
1075
  "div",
953
1076
  {
954
1077
  "data-slot": "sidebar-gap",
@@ -960,7 +1083,7 @@ function Sidebar({
960
1083
  )
961
1084
  }
962
1085
  ),
963
- /* @__PURE__ */ jsx13(
1086
+ /* @__PURE__ */ jsx14(
964
1087
  "div",
965
1088
  {
966
1089
  "data-slot": "sidebar-container",
@@ -972,7 +1095,7 @@ function Sidebar({
972
1095
  className
973
1096
  ),
974
1097
  ...props,
975
- children: /* @__PURE__ */ jsx13(
1098
+ children: /* @__PURE__ */ jsx14(
976
1099
  Surface,
977
1100
  {
978
1101
  "data-sidebar": "sidebar",
@@ -988,7 +1111,7 @@ function Sidebar({
988
1111
  );
989
1112
  }
990
1113
  function SidebarHeader({ className, ...props }) {
991
- return /* @__PURE__ */ jsx13(
1114
+ return /* @__PURE__ */ jsx14(
992
1115
  "div",
993
1116
  {
994
1117
  "data-slot": "sidebar-header",
@@ -999,7 +1122,7 @@ function SidebarHeader({ className, ...props }) {
999
1122
  );
1000
1123
  }
1001
1124
  function SidebarFooter({ className, ...props }) {
1002
- return /* @__PURE__ */ jsx13(
1125
+ return /* @__PURE__ */ jsx14(
1003
1126
  "div",
1004
1127
  {
1005
1128
  "data-slot": "sidebar-footer",
@@ -1010,7 +1133,7 @@ function SidebarFooter({ className, ...props }) {
1010
1133
  );
1011
1134
  }
1012
1135
  function SidebarContent({ className, ...props }) {
1013
- return /* @__PURE__ */ jsx13(
1136
+ return /* @__PURE__ */ jsx14(
1014
1137
  "div",
1015
1138
  {
1016
1139
  "data-slot": "sidebar-content",
@@ -1024,7 +1147,7 @@ function SidebarContent({ className, ...props }) {
1024
1147
  );
1025
1148
  }
1026
1149
  function SidebarGroup({ className, ...props }) {
1027
- return /* @__PURE__ */ jsx13(
1150
+ return /* @__PURE__ */ jsx14(
1028
1151
  "div",
1029
1152
  {
1030
1153
  "data-slot": "sidebar-group",
@@ -1035,7 +1158,7 @@ function SidebarGroup({ className, ...props }) {
1035
1158
  );
1036
1159
  }
1037
1160
  function SidebarMenu({ className, ...props }) {
1038
- return /* @__PURE__ */ jsx13(
1161
+ return /* @__PURE__ */ jsx14(
1039
1162
  "ul",
1040
1163
  {
1041
1164
  "data-slot": "sidebar-menu",
@@ -1046,7 +1169,7 @@ function SidebarMenu({ className, ...props }) {
1046
1169
  );
1047
1170
  }
1048
1171
  function SidebarMenuItem({ className, ...props }) {
1049
- return /* @__PURE__ */ jsx13(
1172
+ return /* @__PURE__ */ jsx14(
1050
1173
  "li",
1051
1174
  {
1052
1175
  "data-slot": "sidebar-menu-item",
@@ -1087,7 +1210,7 @@ function SidebarMenuButton({
1087
1210
  }) {
1088
1211
  const Comp = asChild ? Slot4.Root : "button";
1089
1212
  const { isMobile, state } = useSidebar();
1090
- const button2 = /* @__PURE__ */ jsx13(
1213
+ const button2 = /* @__PURE__ */ jsx14(
1091
1214
  Comp,
1092
1215
  {
1093
1216
  "data-slot": "sidebar-menu-button",
@@ -1100,7 +1223,7 @@ function SidebarMenuButton({
1100
1223
  );
1101
1224
  if (!tooltip) return button2;
1102
1225
  const { children, ...hint } = typeof tooltip === "string" ? { children: tooltip } : tooltip;
1103
- return /* @__PURE__ */ jsx13(Hint, { side: "right", align: "center", disabled: state !== "collapsed" || isMobile, ...hint, content: children, children: button2 });
1226
+ return /* @__PURE__ */ jsx14(Hint, { side: "right", align: "center", disabled: state !== "collapsed" || isMobile, ...hint, content: children, children: button2 });
1104
1227
  }
1105
1228
  function SidebarMenuAction({
1106
1229
  className,
@@ -1109,7 +1232,7 @@ function SidebarMenuAction({
1109
1232
  ...props
1110
1233
  }) {
1111
1234
  const Comp = asChild ? Slot4.Root : "button";
1112
- return /* @__PURE__ */ jsx13(
1235
+ return /* @__PURE__ */ jsx14(
1113
1236
  Comp,
1114
1237
  {
1115
1238
  "data-slot": "sidebar-menu-action",
@@ -1128,7 +1251,7 @@ function SidebarMenuAction({
1128
1251
  }
1129
1252
 
1130
1253
  // src/react/studio.tsx
1131
- import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs7 } from "react/jsx-runtime";
1254
+ import { Fragment as Fragment3, jsx as jsx15, jsxs as jsxs8 } from "react/jsx-runtime";
1132
1255
  var CONNECTION = {
1133
1256
  connected: { icon: PlugZap, tone: "text-success", label: "Runtime connected" },
1134
1257
  connecting: { icon: LoaderCircle, tone: "text-warning animate-spin", label: "Connecting to runtime" },
@@ -1137,22 +1260,22 @@ var CONNECTION = {
1137
1260
  };
1138
1261
  function StudioFooter({ connection }) {
1139
1262
  const { state, toggleSidebar } = useSidebar();
1140
- const { icon: Status, tone, label } = CONNECTION[connection.phase];
1263
+ const { icon: Status, tone, label: label2 } = CONNECTION[connection.phase];
1141
1264
  const Toggle = state === "expanded" ? PanelLeftClose : PanelLeftOpen;
1142
- return /* @__PURE__ */ jsx14(SidebarFooter, { children: /* @__PURE__ */ jsxs7(SidebarMenu, { children: [
1143
- /* @__PURE__ */ jsx14(SidebarMenuItem, { children: /* @__PURE__ */ jsxs7(SidebarMenuButton, { tooltip: label, className: "cursor-default hover:bg-transparent active:bg-transparent", children: [
1144
- /* @__PURE__ */ jsx14(Status, { className: tone }),
1145
- /* @__PURE__ */ jsx14("span", { className: "text-clip! group-data-[collapsible=icon]:hidden", children: label })
1265
+ return /* @__PURE__ */ jsx15(SidebarFooter, { children: /* @__PURE__ */ jsxs8(SidebarMenu, { children: [
1266
+ /* @__PURE__ */ jsx15(SidebarMenuItem, { children: /* @__PURE__ */ jsxs8(SidebarMenuButton, { tooltip: label2, className: "cursor-default hover:bg-transparent active:bg-transparent", children: [
1267
+ /* @__PURE__ */ jsx15(Status, { className: tone }),
1268
+ /* @__PURE__ */ jsx15("span", { className: "text-clip! group-data-[collapsible=icon]:hidden", children: label2 })
1146
1269
  ] }) }),
1147
- /* @__PURE__ */ jsx14(SidebarMenuItem, { children: /* @__PURE__ */ jsxs7(
1270
+ /* @__PURE__ */ jsx15(SidebarMenuItem, { children: /* @__PURE__ */ jsxs8(
1148
1271
  SidebarMenuButton,
1149
1272
  {
1150
1273
  "aria-label": `${state === "expanded" ? "Collapse" : "Expand"} sidebar`,
1151
1274
  tooltip: `${state === "expanded" ? "Collapse" : "Expand"} sidebar`,
1152
1275
  onClick: toggleSidebar,
1153
1276
  children: [
1154
- /* @__PURE__ */ jsx14(Toggle, {}),
1155
- /* @__PURE__ */ jsx14("span", { className: "text-clip! group-data-[collapsible=icon]:hidden", children: "Collapse" })
1277
+ /* @__PURE__ */ jsx15(Toggle, {}),
1278
+ /* @__PURE__ */ jsx15("span", { className: "text-clip! group-data-[collapsible=icon]:hidden", children: "Collapse" })
1156
1279
  ]
1157
1280
  }
1158
1281
  ) })
@@ -1182,11 +1305,11 @@ function forwardShortcuts(frame) {
1182
1305
  function Studio({ studio, previewComponent, getConfigFileHref }) {
1183
1306
  useStudio(studio);
1184
1307
  const { tools, pinned, togglePin } = usePinnedTools(studio);
1185
- const [mounted, setMounted] = useState9(false);
1308
+ const [mounted, setMounted] = useState10(false);
1186
1309
  const [sidebarHidden, setSidebarHidden] = useSessionFlag("joyco-studio:sidebar-hidden");
1187
1310
  const [inspectorHidden, setInspectorHidden] = useSessionFlag("joyco-studio:inspector-hidden");
1188
1311
  const [canvasExpanded, setCanvasExpanded] = useSessionFlag("joyco-studio:canvas-expanded");
1189
- const [selected, setSelected] = useState9(studio.definitions[0]?.id);
1312
+ const [selected, setSelected] = useState10(studio.definitions[0]?.id);
1190
1313
  const preview = useRef3(null);
1191
1314
  const definition = studio.definitions.find((tool) => tool.id === selected);
1192
1315
  const handle = studio.tools.find((tool) => tool.definition.id === selected);
@@ -1195,7 +1318,7 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1195
1318
  const show = { left: () => setSidebarHidden(false), right: () => setInspectorHidden(false) };
1196
1319
  const layout = useRef3(hidden);
1197
1320
  layout.current = hidden;
1198
- useEffect5(() => {
1321
+ useEffect6(() => {
1199
1322
  const onKey = (event) => {
1200
1323
  if (event.defaultPrevented || event.isComposing || event.altKey || !(event.metaKey || event.ctrlKey)) return;
1201
1324
  if (event.key.toLowerCase() !== "b") return;
@@ -1218,10 +1341,10 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1218
1341
  handle.compare(showSaved);
1219
1342
  postCompare(preview.current?.contentWindow, handle.definition.id, showSaved);
1220
1343
  };
1221
- useEffect5(() => () => handle?.compare(false), [handle]);
1344
+ useEffect6(() => () => handle?.compare(false), [handle]);
1222
1345
  const current = useRef3({ handle, compare });
1223
1346
  current.current = { handle, compare };
1224
- useEffect5(() => {
1347
+ useEffect6(() => {
1225
1348
  const onKey = (event) => {
1226
1349
  if (event.key !== COMPARE_KEY || editable(event) || event.repeat) return;
1227
1350
  event.preventDefault();
@@ -1239,7 +1362,7 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1239
1362
  removeEventListener("blur", release);
1240
1363
  };
1241
1364
  }, []);
1242
- useEffect5(() => {
1365
+ useEffect6(() => {
1243
1366
  const onKey = (event) => {
1244
1367
  const action = event.defaultPrevented ? null : historyAction(event);
1245
1368
  if (!action) return;
@@ -1249,7 +1372,7 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1249
1372
  addEventListener("keydown", onKey);
1250
1373
  return () => removeEventListener("keydown", onKey);
1251
1374
  }, []);
1252
- useEffect5(() => {
1375
+ useEffect6(() => {
1253
1376
  const fromHash = () => {
1254
1377
  const id = decodeURIComponent(location.hash.slice(1));
1255
1378
  if (studio.definitions.some((tool) => tool.id === id)) setSelected(id);
@@ -1261,7 +1384,7 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1261
1384
  }, [studio]);
1262
1385
  if (!mounted) return null;
1263
1386
  const sidebarOpen = !document.cookie.split("; ").includes("sidebar_state=false");
1264
- return /* @__PURE__ */ jsx14(StudioShadowRoot, { children: /* @__PURE__ */ jsxs7(
1387
+ return /* @__PURE__ */ jsx15(StudioShadowRoot, { children: /* @__PURE__ */ jsxs8(
1265
1388
  SidebarProvider,
1266
1389
  {
1267
1390
  defaultOpen: sidebarOpen,
@@ -1269,7 +1392,7 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1269
1392
  "data-sidebar-panel": hidden.left ? "hidden" : "shown",
1270
1393
  className: "studio-workspace relative h-svh min-h-0 overflow-hidden text-xs",
1271
1394
  children: [
1272
- definition?.preview ? /* @__PURE__ */ jsx14(
1395
+ definition?.preview ? /* @__PURE__ */ jsx15(
1273
1396
  Preview,
1274
1397
  {
1275
1398
  "data-slot": "studio-preview",
@@ -1280,44 +1403,44 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1280
1403
  ...Preview === PreviewCanvas && { expanded: canvasExpanded, onExpandedChange: setCanvasExpanded }
1281
1404
  },
1282
1405
  definition.id
1283
- ) : /* @__PURE__ */ jsx14("div", { className: "absolute inset-0 grid place-items-center text-faint", children: definition ? "This tool has no preview" : "No tools registered" }),
1406
+ ) : /* @__PURE__ */ jsx15("div", { className: "absolute inset-0 grid place-items-center text-faint", children: definition ? "This tool has no preview" : "No tools registered" }),
1284
1407
  ["left", "right"].filter((side) => hidden[side] && (side === "left" || handle)).map((side) => {
1285
1408
  const Chevron = side === "left" ? ChevronRight : ChevronLeft;
1286
- const label = side === "left" ? "Show tools" : "Show inspector";
1287
- return /* @__PURE__ */ jsx14(
1409
+ const label2 = side === "left" ? "Show tools" : "Show inspector";
1410
+ return /* @__PURE__ */ jsx15(
1288
1411
  "div",
1289
1412
  {
1290
1413
  "data-slot": "studio-panel-edge",
1291
1414
  "data-side": side,
1292
1415
  className: cn("group/edge absolute inset-y-0 z-20 w-8", side === "left" ? "left-0" : "right-0"),
1293
- children: /* @__PURE__ */ jsx14(
1416
+ children: /* @__PURE__ */ jsx15(
1294
1417
  Hint,
1295
1418
  {
1296
1419
  side: side === "left" ? "right" : "left",
1297
1420
  sideOffset: 8,
1298
1421
  className: "flex items-center gap-2",
1299
- content: /* @__PURE__ */ jsxs7(Fragment2, { children: [
1300
- label,
1422
+ content: /* @__PURE__ */ jsxs8(Fragment3, { children: [
1423
+ label2,
1301
1424
  " ",
1302
- /* @__PURE__ */ jsx14("span", { className: "text-faint", children: "\xB7 both" }),
1303
- /* @__PURE__ */ jsxs7(KbdGroup, { children: [
1304
- /* @__PURE__ */ jsx14(Kbd, { children: "\u2318/Ctrl" }),
1305
- /* @__PURE__ */ jsx14(Kbd, { children: "B" })
1425
+ /* @__PURE__ */ jsx15("span", { className: "text-faint", children: "\xB7 both" }),
1426
+ /* @__PURE__ */ jsxs8(KbdGroup, { children: [
1427
+ /* @__PURE__ */ jsx15(Kbd, { children: "\u2318/Ctrl" }),
1428
+ /* @__PURE__ */ jsx15(Kbd, { children: "B" })
1306
1429
  ] })
1307
1430
  ] }),
1308
- children: /* @__PURE__ */ jsx14(Panel, { asChild: true, children: /* @__PURE__ */ jsx14(
1431
+ children: /* @__PURE__ */ jsx15(Panel, { asChild: true, children: /* @__PURE__ */ jsx15(
1309
1432
  Button,
1310
1433
  {
1311
1434
  "data-slot": "studio-panel-reveal",
1312
1435
  variant: "ghost",
1313
1436
  size: "icon",
1314
- "aria-label": label,
1437
+ "aria-label": label2,
1315
1438
  onClick: show[side],
1316
1439
  className: cn(
1317
1440
  "absolute top-1/2 h-16 w-6 -translate-y-1/2 cursor-pointer px-0 text-sidebar-foreground opacity-0 transition-[translate,opacity] duration-200 ease-out hover:bg-sidebar/95 hover:text-foreground focus:translate-x-0 focus:opacity-100 group-hover/edge:translate-x-0 group-hover/edge:opacity-100 motion-reduce:transition-none [@media(hover:none)]:translate-x-0 [@media(hover:none)]:opacity-100",
1318
1441
  side === "left" ? "left-1 -translate-x-[calc(100%+0.25rem)]" : "right-1 translate-x-[calc(100%+0.25rem)]"
1319
1442
  ),
1320
- children: /* @__PURE__ */ jsx14(Chevron, { "aria-hidden": true })
1443
+ children: /* @__PURE__ */ jsx15(Chevron, { "aria-hidden": true })
1321
1444
  }
1322
1445
  ) })
1323
1446
  }
@@ -1326,7 +1449,7 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1326
1449
  side
1327
1450
  );
1328
1451
  }),
1329
- /* @__PURE__ */ jsxs7(
1452
+ /* @__PURE__ */ jsxs8(
1330
1453
  Sidebar,
1331
1454
  {
1332
1455
  collapsible: "icon",
@@ -1338,30 +1461,30 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1338
1461
  hidden.left && "-translate-x-[calc(100%+1rem)]"
1339
1462
  ),
1340
1463
  children: [
1341
- /* @__PURE__ */ jsx14(SidebarHeader, { className: "h-10 flex-row items-center overflow-hidden py-0 pr-0 pl-4 transition-[padding] duration-200 ease-out group-data-[collapsible=icon]:pl-[calc(1.5rem-0.875rem*352/144/2)] motion-reduce:transition-none", children: /* @__PURE__ */ jsxs7("span", { className: "flex items-center gap-2.5 text-foreground", children: [
1342
- /* @__PURE__ */ jsx14(Logo, { className: "h-3.5 w-auto shrink-0" }),
1343
- /* @__PURE__ */ jsx14("strong", { className: "tracking-[0.08em] whitespace-nowrap", children: "STUDIO" }),
1344
- /* @__PURE__ */ jsxs7("span", { "data-slot": "studio-version", className: "text-[10px] text-faint group-data-[collapsible=icon]:hidden", children: [
1464
+ /* @__PURE__ */ jsx15(SidebarHeader, { className: "h-10 flex-row items-center overflow-hidden py-0 pr-0 pl-4 transition-[padding] duration-200 ease-out group-data-[collapsible=icon]:pl-[calc(1.5rem-0.875rem*352/144/2)] motion-reduce:transition-none", children: /* @__PURE__ */ jsxs8("span", { className: "flex items-center gap-2.5 text-foreground", children: [
1465
+ /* @__PURE__ */ jsx15(Logo, { className: "h-3.5 w-auto shrink-0" }),
1466
+ /* @__PURE__ */ jsx15("strong", { className: "tracking-[0.08em] whitespace-nowrap", children: "STUDIO" }),
1467
+ /* @__PURE__ */ jsxs8("span", { "data-slot": "studio-version", className: "text-[10px] text-faint group-data-[collapsible=icon]:hidden", children: [
1345
1468
  "v",
1346
1469
  version
1347
1470
  ] })
1348
1471
  ] }) }),
1349
- /* @__PURE__ */ jsx14(SidebarContent, { children: /* @__PURE__ */ jsx14(SidebarGroup, { children: /* @__PURE__ */ jsx14(SidebarMenu, { children: tools.map((tool) => {
1472
+ /* @__PURE__ */ jsx15(SidebarContent, { children: /* @__PURE__ */ jsx15(SidebarGroup, { children: /* @__PURE__ */ jsx15(SidebarMenu, { children: tools.map((tool) => {
1350
1473
  const title = tool.title ?? tool.id;
1351
1474
  const isPinned = pinned.has(tool.id);
1352
1475
  const { state, dirty } = studio.tools.find((handle2) => handle2.definition.id === tool.id) ?? {};
1353
1476
  const pinLabel = `${isPinned ? "Unpin" : "Pin"} ${title}`;
1354
- return /* @__PURE__ */ jsxs7(SidebarMenuItem, { children: [
1355
- /* @__PURE__ */ jsxs7(
1477
+ return /* @__PURE__ */ jsxs8(SidebarMenuItem, { children: [
1478
+ /* @__PURE__ */ jsxs8(
1356
1479
  SidebarMenuButton,
1357
1480
  {
1358
1481
  isActive: tool.id === selected,
1359
1482
  tooltip: title,
1360
1483
  onClick: () => location.hash = tool.id,
1361
1484
  children: [
1362
- /* @__PURE__ */ jsxs7("span", { className: "relative", children: [
1363
- /* @__PURE__ */ jsx14(ToolIcon, { icon: tool.icon, className: "size-4" }),
1364
- dirty && /* @__PURE__ */ jsx14(
1485
+ /* @__PURE__ */ jsxs8("span", { className: "relative", children: [
1486
+ /* @__PURE__ */ jsx15(ToolIcon, { icon: tool.icon, className: "size-4" }),
1487
+ dirty && /* @__PURE__ */ jsx15(
1365
1488
  "span",
1366
1489
  {
1367
1490
  "aria-label": state?.conflict ? "Changed on disk" : "Unsaved",
@@ -1372,11 +1495,11 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1372
1495
  }
1373
1496
  )
1374
1497
  ] }),
1375
- /* @__PURE__ */ jsx14("span", { className: "text-clip! group-data-[collapsible=icon]:hidden", children: title })
1498
+ /* @__PURE__ */ jsx15("span", { className: "text-clip! group-data-[collapsible=icon]:hidden", children: title })
1376
1499
  ]
1377
1500
  }
1378
1501
  ),
1379
- /* @__PURE__ */ jsx14(Hint, { content: pinLabel, side: "right", children: /* @__PURE__ */ jsx14(
1502
+ /* @__PURE__ */ jsx15(Hint, { content: pinLabel, side: "right", children: /* @__PURE__ */ jsx15(
1380
1503
  SidebarMenuAction,
1381
1504
  {
1382
1505
  type: "button",
@@ -1388,16 +1511,16 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1388
1511
  "cursor-pointer [&>svg]:size-3 [@media(hover:none)]:opacity-100",
1389
1512
  isPinned && "text-sidebar-primary"
1390
1513
  ),
1391
- children: /* @__PURE__ */ jsx14(Pin2, { "aria-hidden": true, fill: isPinned ? "currentColor" : "none" })
1514
+ children: /* @__PURE__ */ jsx15(Pin2, { "aria-hidden": true, fill: isPinned ? "currentColor" : "none" })
1392
1515
  }
1393
1516
  ) })
1394
1517
  ] }, tool.id);
1395
1518
  }) }) }) }),
1396
- /* @__PURE__ */ jsx14(StudioFooter, { connection: studio.connection })
1519
+ /* @__PURE__ */ jsx15(StudioFooter, { connection: studio.connection })
1397
1520
  ]
1398
1521
  }
1399
1522
  ),
1400
- handle && /* @__PURE__ */ jsx14(Panel, { asChild: true, children: /* @__PURE__ */ jsx14(
1523
+ handle && /* @__PURE__ */ jsx15(Panel, { asChild: true, children: /* @__PURE__ */ jsx15(
1401
1524
  "aside",
1402
1525
  {
1403
1526
  "data-slot": "studio-inspector",
@@ -1407,7 +1530,7 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1407
1530
  "absolute inset-y-2 right-2 z-10 flex w-(--studio-inspector-width) flex-col gap-1 p-1 transition-transform duration-200 ease-out motion-reduce:transition-none",
1408
1531
  hidden.right && "translate-x-[calc(100%+1rem)]"
1409
1532
  ),
1410
- children: /* @__PURE__ */ jsx14(
1533
+ children: /* @__PURE__ */ jsx15(
1411
1534
  Inspector,
1412
1535
  {
1413
1536
  studio,
@@ -1426,9 +1549,9 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1426
1549
 
1427
1550
  // src/react/debug.tsx
1428
1551
  import { DebugManager } from "@joycostudio/xyz/debug";
1429
- import { useEffect as useEffect6 } from "react";
1552
+ import { useEffect as useEffect7 } from "react";
1430
1553
  function StudioDebug({ studio }) {
1431
- useEffect6(() => {
1554
+ useEffect7(() => {
1432
1555
  const debug = new DebugManager({
1433
1556
  createPane: async () => new (await import("tweakpane")).Pane({ title: "debug" }),
1434
1557
  binding: { registerFrame: everyFrame }
@@ -1442,15 +1565,15 @@ function StudioDebug({ studio }) {
1442
1565
  // src/react/command-menu.tsx
1443
1566
  import { Dialog } from "@base-ui/react/dialog";
1444
1567
  import { Pin as Pin3 } from "lucide-react";
1445
- import { useEffect as useEffect7, useRef as useRef4, useState as useState10 } from "react";
1568
+ import { useEffect as useEffect8, useRef as useRef4, useState as useState11 } from "react";
1446
1569
 
1447
1570
  // src/react/ui/command.tsx
1448
1571
  import * as React3 from "react";
1449
1572
  import { Command as CommandPrimitive } from "cmdk";
1450
1573
  import { SearchIcon } from "lucide-react";
1451
- import { jsx as jsx15, jsxs as jsxs8 } from "react/jsx-runtime";
1574
+ import { jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
1452
1575
  function Command({ className, ...props }) {
1453
- return /* @__PURE__ */ jsx15(
1576
+ return /* @__PURE__ */ jsx16(
1454
1577
  CommandPrimitive,
1455
1578
  {
1456
1579
  "data-slot": "command",
@@ -1463,9 +1586,9 @@ function Command({ className, ...props }) {
1463
1586
  );
1464
1587
  }
1465
1588
  var CommandInput = React3.forwardRef(function CommandInput2({ className, ...props }, ref) {
1466
- return /* @__PURE__ */ jsxs8("div", { "data-slot": "command-input-wrapper", className: "flex h-9 items-center gap-2 border-b px-3", children: [
1467
- /* @__PURE__ */ jsx15(SearchIcon, { "aria-hidden": true, className: "size-4 shrink-0 opacity-50" }),
1468
- /* @__PURE__ */ jsx15(
1589
+ return /* @__PURE__ */ jsxs9("div", { "data-slot": "command-input-wrapper", className: "flex h-9 items-center gap-2 border-b px-3", children: [
1590
+ /* @__PURE__ */ jsx16(SearchIcon, { "aria-hidden": true, className: "size-4 shrink-0 opacity-50" }),
1591
+ /* @__PURE__ */ jsx16(
1469
1592
  CommandPrimitive.Input,
1470
1593
  {
1471
1594
  ref,
@@ -1480,7 +1603,7 @@ var CommandInput = React3.forwardRef(function CommandInput2({ className, ...prop
1480
1603
  ] });
1481
1604
  });
1482
1605
  function CommandList({ className, ...props }) {
1483
- return /* @__PURE__ */ jsx15(
1606
+ return /* @__PURE__ */ jsx16(
1484
1607
  CommandPrimitive.List,
1485
1608
  {
1486
1609
  "data-slot": "command-list",
@@ -1490,10 +1613,10 @@ function CommandList({ className, ...props }) {
1490
1613
  );
1491
1614
  }
1492
1615
  function CommandEmpty({ ...props }) {
1493
- return /* @__PURE__ */ jsx15(CommandPrimitive.Empty, { "data-slot": "command-empty", className: "py-6 text-center text-sm", ...props });
1616
+ return /* @__PURE__ */ jsx16(CommandPrimitive.Empty, { "data-slot": "command-empty", className: "py-6 text-center text-sm", ...props });
1494
1617
  }
1495
1618
  function CommandItem({ className, ...props }) {
1496
- return /* @__PURE__ */ jsx15(
1619
+ return /* @__PURE__ */ jsx16(
1497
1620
  CommandPrimitive.Item,
1498
1621
  {
1499
1622
  "data-slot": "command-item",
@@ -1507,14 +1630,14 @@ function CommandItem({ className, ...props }) {
1507
1630
  }
1508
1631
 
1509
1632
  // src/react/command-menu.tsx
1510
- import { jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
1633
+ import { jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
1511
1634
  function StudioCommandMenu(props) {
1512
- return /* @__PURE__ */ jsx16(StudioShadowRoot, { children: /* @__PURE__ */ jsx16(CommandMenu, { ...props }) });
1635
+ return /* @__PURE__ */ jsx17(StudioShadowRoot, { children: /* @__PURE__ */ jsx17(CommandMenu, { ...props }) });
1513
1636
  }
1514
1637
  function CommandMenu({ studio, studioPath = "/studio", navigate }) {
1515
1638
  const { tools, pinned } = usePinnedTools(studio);
1516
- const [open, setOpen] = useState10(false);
1517
- const [session, setSession] = useState10(0);
1639
+ const [open, setOpen] = useState11(false);
1640
+ const [session, setSession] = useState11(0);
1518
1641
  const isOpen = useRef4(open);
1519
1642
  isOpen.current = open;
1520
1643
  const show = (next) => {
@@ -1522,7 +1645,7 @@ function CommandMenu({ studio, studioPath = "/studio", navigate }) {
1522
1645
  setOpen(next);
1523
1646
  };
1524
1647
  const input = useRef4(null);
1525
- useEffect7(() => {
1648
+ useEffect8(() => {
1526
1649
  if (window.frameElement?.getAttribute("data-slot") === "studio-preview") return;
1527
1650
  const onKey = (event) => {
1528
1651
  if (event.defaultPrevented || event.isComposing || event.altKey || !(event.metaKey || event.ctrlKey)) return;
@@ -1546,47 +1669,47 @@ function CommandMenu({ studio, studioPath = "/studio", navigate }) {
1546
1669
  window.location.assign(target.href);
1547
1670
  }
1548
1671
  };
1549
- return /* @__PURE__ */ jsx16(Dialog.Root, { open, onOpenChange: show, children: /* @__PURE__ */ jsxs9(Dialog.Portal, { container: usePortalContainer(), children: [
1550
- /* @__PURE__ */ jsx16(Dialog.Backdrop, { "data-slot": "studio-command-overlay" }),
1551
- /* @__PURE__ */ jsxs9(Dialog.Popup, { "data-slot": "studio-command-menu", initialFocus: input, children: [
1552
- /* @__PURE__ */ jsxs9("div", { "data-slot": "studio-command-heading", children: [
1553
- /* @__PURE__ */ jsxs9(Dialog.Title, { "aria-label": "Studio tools", children: [
1554
- /* @__PURE__ */ jsx16(Logo, { "aria-hidden": true }),
1555
- /* @__PURE__ */ jsx16("strong", { children: "STUDIO" })
1672
+ return /* @__PURE__ */ jsx17(Dialog.Root, { open, onOpenChange: show, children: /* @__PURE__ */ jsxs10(Dialog.Portal, { container: usePortalContainer(), children: [
1673
+ /* @__PURE__ */ jsx17(Dialog.Backdrop, { "data-slot": "studio-command-overlay" }),
1674
+ /* @__PURE__ */ jsxs10(Dialog.Popup, { "data-slot": "studio-command-menu", initialFocus: input, children: [
1675
+ /* @__PURE__ */ jsxs10("div", { "data-slot": "studio-command-heading", children: [
1676
+ /* @__PURE__ */ jsxs10(Dialog.Title, { "aria-label": "Studio tools", children: [
1677
+ /* @__PURE__ */ jsx17(Logo, { "aria-hidden": true }),
1678
+ /* @__PURE__ */ jsx17("strong", { children: "STUDIO" })
1556
1679
  ] }),
1557
- /* @__PURE__ */ jsx16(Dialog.Close, { "aria-label": "Close tool menu", children: /* @__PURE__ */ jsx16(Kbd, { children: "esc" }) })
1680
+ /* @__PURE__ */ jsx17(Dialog.Close, { "aria-label": "Close tool menu", children: /* @__PURE__ */ jsx17(Kbd, { children: "esc" }) })
1558
1681
  ] }),
1559
- /* @__PURE__ */ jsx16(Dialog.Description, { "data-slot": "studio-command-description", children: "Open a tool in Studio." }),
1560
- /* @__PURE__ */ jsxs9(Command, { label: "Studio tools", loop: true, vimBindings: false, children: [
1561
- /* @__PURE__ */ jsx16(CommandInput, { ref: input, placeholder: "Search tools\u2026" }),
1562
- /* @__PURE__ */ jsxs9(CommandList, { children: [
1563
- /* @__PURE__ */ jsx16(CommandEmpty, { children: studio.definitions.length ? "No tools found." : "No tools registered yet." }),
1564
- tools.map((tool) => /* @__PURE__ */ jsxs9(
1682
+ /* @__PURE__ */ jsx17(Dialog.Description, { "data-slot": "studio-command-description", children: "Open a tool in Studio." }),
1683
+ /* @__PURE__ */ jsxs10(Command, { label: "Studio tools", loop: true, vimBindings: false, children: [
1684
+ /* @__PURE__ */ jsx17(CommandInput, { ref: input, placeholder: "Search tools\u2026" }),
1685
+ /* @__PURE__ */ jsxs10(CommandList, { children: [
1686
+ /* @__PURE__ */ jsx17(CommandEmpty, { children: studio.definitions.length ? "No tools found." : "No tools registered yet." }),
1687
+ tools.map((tool) => /* @__PURE__ */ jsxs10(
1565
1688
  CommandItem,
1566
1689
  {
1567
1690
  value: tool.id,
1568
1691
  keywords: [tool.title ?? tool.id],
1569
1692
  onSelect: () => select(tool.id),
1570
1693
  children: [
1571
- /* @__PURE__ */ jsx16(ToolIcon, { icon: tool.icon }),
1572
- /* @__PURE__ */ jsx16("span", { "data-slot": "studio-command-label", children: tool.title ?? tool.id }),
1573
- pinned.has(tool.id) && /* @__PURE__ */ jsx16(Pin3, { "aria-hidden": true })
1694
+ /* @__PURE__ */ jsx17(ToolIcon, { icon: tool.icon }),
1695
+ /* @__PURE__ */ jsx17("span", { "data-slot": "studio-command-label", children: tool.title ?? tool.id }),
1696
+ pinned.has(tool.id) && /* @__PURE__ */ jsx17(Pin3, { "aria-hidden": true })
1574
1697
  ]
1575
1698
  },
1576
1699
  tool.id
1577
1700
  ))
1578
1701
  ] })
1579
1702
  ] }, session),
1580
- /* @__PURE__ */ jsxs9("div", { "data-slot": "studio-command-footer", "aria-hidden": true, children: [
1581
- /* @__PURE__ */ jsxs9("span", { children: [
1582
- /* @__PURE__ */ jsxs9(KbdGroup, { children: [
1583
- /* @__PURE__ */ jsx16(Kbd, { children: "\u2191" }),
1584
- /* @__PURE__ */ jsx16(Kbd, { children: "\u2193" })
1703
+ /* @__PURE__ */ jsxs10("div", { "data-slot": "studio-command-footer", "aria-hidden": true, children: [
1704
+ /* @__PURE__ */ jsxs10("span", { children: [
1705
+ /* @__PURE__ */ jsxs10(KbdGroup, { children: [
1706
+ /* @__PURE__ */ jsx17(Kbd, { children: "\u2191" }),
1707
+ /* @__PURE__ */ jsx17(Kbd, { children: "\u2193" })
1585
1708
  ] }),
1586
1709
  "navigate"
1587
1710
  ] }),
1588
- /* @__PURE__ */ jsxs9("span", { children: [
1589
- /* @__PURE__ */ jsx16(Kbd, { children: "\u21B5" }),
1711
+ /* @__PURE__ */ jsxs10("span", { children: [
1712
+ /* @__PURE__ */ jsx17(Kbd, { children: "\u21B5" }),
1590
1713
  " open tool"
1591
1714
  ] })
1592
1715
  ] })
@@ -1596,7 +1719,7 @@ function CommandMenu({ studio, studioPath = "/studio", navigate }) {
1596
1719
 
1597
1720
  // src/react/select.tsx
1598
1721
  import { Select } from "@base-ui/react/select";
1599
- import { Check, ChevronDown, ChevronUp } from "lucide-react";
1722
+ import { Check as Check2, ChevronDown, ChevronUp as ChevronUp2 } from "lucide-react";
1600
1723
 
1601
1724
  // src/react/select-labels.ts
1602
1725
  import { Children, isValidElement } from "react";
@@ -1610,41 +1733,41 @@ function itemLabels(children, labels = {}) {
1610
1733
  }
1611
1734
 
1612
1735
  // src/react/select.tsx
1613
- import { jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
1614
- function StudioSelect({ label, title, className, children, ...props }) {
1615
- return /* @__PURE__ */ jsxs10(Select.Root, { items: itemLabels(children), ...props, children: [
1616
- /* @__PURE__ */ jsxs10(
1736
+ import { jsx as jsx18, jsxs as jsxs11 } from "react/jsx-runtime";
1737
+ function StudioSelect({ label: label2, title, className, children, ...props }) {
1738
+ return /* @__PURE__ */ jsxs11(Select.Root, { items: itemLabels(children), ...props, children: [
1739
+ /* @__PURE__ */ jsxs11(
1617
1740
  Select.Trigger,
1618
1741
  {
1619
1742
  "data-slot": "select-trigger",
1620
- "aria-label": label,
1743
+ "aria-label": label2,
1621
1744
  title,
1622
1745
  className: cn(
1623
1746
  "border-input text-foreground focus-visible:border-ring focus-visible:ring-ring/50 flex h-7 max-w-full shrink-0 items-center justify-between gap-2 rounded-md border bg-(--field) px-2 text-xs whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-(--field-hover) focus-visible:ring-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span:first-child]:truncate",
1624
1747
  className
1625
1748
  ),
1626
1749
  children: [
1627
- /* @__PURE__ */ jsx17(Select.Value, {}),
1628
- /* @__PURE__ */ jsx17(Select.Icon, { children: /* @__PURE__ */ jsx17(ChevronDown, { className: "shrink-0 text-muted-foreground", size: 14, strokeWidth: 1.5, "aria-hidden": true }) })
1750
+ /* @__PURE__ */ jsx18(Select.Value, {}),
1751
+ /* @__PURE__ */ jsx18(Select.Icon, { children: /* @__PURE__ */ jsx18(ChevronDown, { className: "shrink-0 text-muted-foreground", size: 14, strokeWidth: 1.5, "aria-hidden": true }) })
1629
1752
  ]
1630
1753
  }
1631
1754
  ),
1632
- /* @__PURE__ */ jsx17(Select.Portal, { container: usePortalContainer(), children: /* @__PURE__ */ jsx17(Select.Positioner, { align: "end", sideOffset: 6, alignItemWithTrigger: false, className: "isolate z-50", children: /* @__PURE__ */ jsxs10(
1755
+ /* @__PURE__ */ jsx18(Select.Portal, { container: usePortalContainer(), children: /* @__PURE__ */ jsx18(Select.Positioner, { align: "end", sideOffset: 6, alignItemWithTrigger: false, className: "isolate z-50", children: /* @__PURE__ */ jsxs11(
1633
1756
  Select.Popup,
1634
1757
  {
1635
1758
  className: "relative max-h-(--available-height) min-w-(--anchor-width) overflow-y-auto rounded-md border border-border bg-popover p-1 font-(family-name:--studio-font) text-xs font-normal text-popover-foreground shadow-md outline-none",
1636
1759
  "data-slot": "select-content",
1637
1760
  children: [
1638
- /* @__PURE__ */ jsx17(Select.ScrollUpArrow, { className: "sticky top-0 z-10 flex w-full justify-center bg-popover py-1", children: /* @__PURE__ */ jsx17(ChevronUp, { size: 14, "aria-hidden": true }) }),
1639
- /* @__PURE__ */ jsx17(Select.List, { children }),
1640
- /* @__PURE__ */ jsx17(Select.ScrollDownArrow, { className: "sticky bottom-0 z-10 flex w-full justify-center bg-popover py-1", children: /* @__PURE__ */ jsx17(ChevronDown, { size: 14, "aria-hidden": true }) })
1761
+ /* @__PURE__ */ jsx18(Select.ScrollUpArrow, { className: "sticky top-0 z-10 flex w-full justify-center bg-popover py-1", children: /* @__PURE__ */ jsx18(ChevronUp2, { size: 14, "aria-hidden": true }) }),
1762
+ /* @__PURE__ */ jsx18(Select.List, { children }),
1763
+ /* @__PURE__ */ jsx18(Select.ScrollDownArrow, { className: "sticky bottom-0 z-10 flex w-full justify-center bg-popover py-1", children: /* @__PURE__ */ jsx18(ChevronDown, { size: 14, "aria-hidden": true }) })
1641
1764
  ]
1642
1765
  }
1643
1766
  ) }) })
1644
1767
  ] });
1645
1768
  }
1646
1769
  function StudioSelectItem({ className, children, ...props }) {
1647
- return /* @__PURE__ */ jsxs10(
1770
+ return /* @__PURE__ */ jsxs11(
1648
1771
  Select.Item,
1649
1772
  {
1650
1773
  "data-slot": "select-item",
@@ -1654,8 +1777,8 @@ function StudioSelectItem({ className, children, ...props }) {
1654
1777
  ),
1655
1778
  ...props,
1656
1779
  children: [
1657
- /* @__PURE__ */ jsx17(Select.ItemText, { children }),
1658
- /* @__PURE__ */ jsx17(Select.ItemIndicator, { className: "absolute right-2", children: /* @__PURE__ */ jsx17(Check, { size: 14, strokeWidth: 1.5, "aria-hidden": true }) })
1780
+ /* @__PURE__ */ jsx18(Select.ItemText, { children }),
1781
+ /* @__PURE__ */ jsx18(Select.ItemIndicator, { className: "absolute right-2", children: /* @__PURE__ */ jsx18(Check2, { size: 14, strokeWidth: 1.5, "aria-hidden": true }) })
1659
1782
  ]
1660
1783
  }
1661
1784
  );
@@ -1663,9 +1786,9 @@ function StudioSelectItem({ className, children, ...props }) {
1663
1786
 
1664
1787
  // src/react/ui/input.tsx
1665
1788
  import { forwardRef as forwardRef5 } from "react";
1666
- import { jsx as jsx18 } from "react/jsx-runtime";
1789
+ import { jsx as jsx19 } from "react/jsx-runtime";
1667
1790
  var Input = forwardRef5(function Input2({ className, ...props }, ref) {
1668
- return /* @__PURE__ */ jsx18(
1791
+ return /* @__PURE__ */ jsx19(
1669
1792
  "input",
1670
1793
  {
1671
1794
  ref,