@joycostudio/studio 0.1.5 → 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.5";
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";
84
+ import { Check, Link, SquareSplitHorizontal } from "lucide-react";
85
+ import { useEffect as useEffect2, useRef, useState as useState3 } from "react";
78
86
 
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
- };
113
-
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,11 +269,184 @@ 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 })
348
274
  ] });
349
275
  }
350
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 })
294
+ ] });
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
+ }
449
+
351
450
  // src/react/ui/panel.tsx
352
451
  import { Slot as Slot3 } from "radix-ui";
353
452
  import { forwardRef as forwardRef2 } from "react";
@@ -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,11 +497,11 @@ 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" };
@@ -428,12 +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);
530
+ const [failure, setFailure] = useState3(null);
531
+ const [copied, setCopied] = useState3(false);
432
532
  const { definition, state } = handle;
433
533
  const canDiscard = handle.dirty && !handle.comparing;
434
534
  const canSave = canDiscard && !!state;
435
535
  const save = (force = false) => void handle.save({ force }).then((result) => setFailure(result.ok ? null : result.message ?? result.error));
436
- useEffect(() => {
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(() => {
437
553
  let disposed = false;
438
554
  let teardown = () => {
439
555
  };
@@ -459,7 +575,7 @@ function Inspector({
459
575
  teardown();
460
576
  };
461
577
  }, [handle]);
462
- useEffect(() => {
578
+ useEffect2(() => {
463
579
  const onKeyDown = (event) => {
464
580
  if (event.key !== "s" || !(event.metaKey || event.ctrlKey)) return;
465
581
  event.preventDefault();
@@ -468,22 +584,19 @@ function Inspector({
468
584
  addEventListener("keydown", onKeyDown);
469
585
  return () => removeEventListener("keydown", onKeyDown);
470
586
  });
471
- useEffect(() => {
587
+ useEffect2(() => {
472
588
  if (pane.current) pane.current.disabled = handle.comparing;
473
589
  });
474
590
  const ConfigFile = fileHref ? "a" : "span";
475
591
  const status = describe(studio, handle);
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,12 +647,23 @@ 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",
@@ -557,11 +677,11 @@ function Inspector({
557
677
  children: "Discard"
558
678
  }
559
679
  ),
560
- 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: !canSave, 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: [
561
681
  "Save",
562
- /* @__PURE__ */ jsxs2(KbdGroup, { children: [
563
- /* @__PURE__ */ jsx8(Kbd, { children: "\u2318" }),
564
- /* @__PURE__ */ jsx8(Kbd, { children: "S" })
682
+ /* @__PURE__ */ jsxs3(KbdGroup, { children: [
683
+ /* @__PURE__ */ jsx9(Kbd, { children: "\u2318" }),
684
+ /* @__PURE__ */ jsx9(Kbd, { children: "S" })
565
685
  ] })
566
686
  ] })
567
687
  ] })
@@ -570,13 +690,13 @@ function Inspector({
570
690
  }
571
691
 
572
692
  // src/react/logo.tsx
573
- import { jsx as jsx9 } from "react/jsx-runtime";
693
+ import { jsx as jsx10 } from "react/jsx-runtime";
574
694
  function Logo(props) {
575
- 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" }) });
576
696
  }
577
697
 
578
698
  // src/react/pinned-tools.ts
579
- import { useEffect as useEffect2, useState as useState3 } from "react";
699
+ import { useEffect as useEffect3, useState as useState4 } from "react";
580
700
  var STORAGE_KEY = "joyco-studio:pinned-tools";
581
701
  var CHANGE_EVENT = "joyco-studio:pins-changed";
582
702
  function readPins() {
@@ -588,8 +708,8 @@ function readPins() {
588
708
  }
589
709
  }
590
710
  function usePinnedTools(studio) {
591
- const [pins, setPins] = useState3([]);
592
- useEffect2(() => {
711
+ const [pins, setPins] = useState4([]);
712
+ useEffect3(() => {
593
713
  setPins(readPins());
594
714
  const onChange = (event) => setPins(event.detail);
595
715
  const onStorage = (event) => {
@@ -617,17 +737,17 @@ function usePinnedTools(studio) {
617
737
 
618
738
  // src/react/preview-canvas.tsx
619
739
  import { RotateCw } from "lucide-react";
620
- 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";
621
741
 
622
742
  // src/react/canvas-toolbar.tsx
623
743
  import { Maximize, Minimize, Pin, PinOff } from "lucide-react";
624
- import { useState as useState4 } from "react";
625
- import { jsx as jsx10, jsxs as jsxs3 } from "react/jsx-runtime";
626
- function CanvasToolbar({ label, expanded = false, onToggle, children }) {
627
- 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);
628
748
  const ExpandIcon = expanded ? Minimize : Maximize;
629
749
  const PinIcon = ghost ? PinOff : Pin;
630
- return /* @__PURE__ */ jsx10(
750
+ return /* @__PURE__ */ jsx11(
631
751
  "div",
632
752
  {
633
753
  className: "studio-canvas-toolbar",
@@ -635,22 +755,22 @@ function CanvasToolbar({ label, expanded = false, onToggle, children }) {
635
755
  "data-expanded": expanded || void 0,
636
756
  "data-ghost": !expanded && ghost || void 0,
637
757
  role: "group",
638
- "aria-label": label,
639
- children: /* @__PURE__ */ jsxs3(StudioToolbar, { className: "studio-canvas-actions", children: [
758
+ "aria-label": label2,
759
+ children: /* @__PURE__ */ jsxs4(StudioToolbar, { className: "studio-canvas-actions", children: [
640
760
  children,
641
- onToggle && /* @__PURE__ */ jsx10("div", { className: "studio-canvas-toggle", children: /* @__PURE__ */ jsxs3("button", { "data-slot": "toolbar-action", type: "button", "aria-pressed": expanded, onClick: onToggle, children: [
642
- /* @__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 }),
643
763
  expanded ? "Contain canvas" : "Expand"
644
764
  ] }) }),
645
- !expanded && /* @__PURE__ */ jsx10(
765
+ !expanded && /* @__PURE__ */ jsx11(
646
766
  "button",
647
767
  {
648
768
  type: "button",
649
- "aria-label": `Auto-hide ${label.toLowerCase()} header`,
769
+ "aria-label": `Auto-hide ${label2.toLowerCase()} header`,
650
770
  "aria-pressed": ghost,
651
771
  title: ghost ? "Pin header" : "Auto-hide header",
652
772
  onClick: () => setGhost(!ghost),
653
- 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 })
654
774
  }
655
775
  )
656
776
  ] })
@@ -659,13 +779,13 @@ function CanvasToolbar({ label, expanded = false, onToggle, children }) {
659
779
  }
660
780
 
661
781
  // src/react/preview-canvas.tsx
662
- import { jsx as jsx11, jsxs as jsxs4 } from "react/jsx-runtime";
782
+ import { jsx as jsx12, jsxs as jsxs5 } from "react/jsx-runtime";
663
783
  var PreviewCanvas = forwardRef3(function PreviewCanvas2({ title = "Preview", expanded: controlled, onExpandedChange, onReload, toolbar, ...props }, ref) {
664
- const [localExpanded, setExpanded] = useState5(false);
784
+ const [localExpanded, setExpanded] = useState6(false);
665
785
  const expanded = controlled ?? localExpanded;
666
786
  const frame = useRef2(null);
667
787
  useImperativeHandle(ref, () => frame.current, []);
668
- return /* @__PURE__ */ jsxs4(
788
+ return /* @__PURE__ */ jsxs5(
669
789
  "section",
670
790
  {
671
791
  className: "studio-preview-canvas",
@@ -673,7 +793,7 @@ var PreviewCanvas = forwardRef3(function PreviewCanvas2({ title = "Preview", exp
673
793
  "data-expanded": expanded || void 0,
674
794
  "aria-label": `${title} canvas`,
675
795
  children: [
676
- /* @__PURE__ */ jsxs4(
796
+ /* @__PURE__ */ jsxs5(
677
797
  CanvasToolbar,
678
798
  {
679
799
  label: "Preview canvas",
@@ -683,7 +803,7 @@ var PreviewCanvas = forwardRef3(function PreviewCanvas2({ title = "Preview", exp
683
803
  onExpandedChange?.(!expanded);
684
804
  },
685
805
  children: [
686
- /* @__PURE__ */ jsx11(
806
+ /* @__PURE__ */ jsx12(
687
807
  "button",
688
808
  {
689
809
  type: "button",
@@ -693,30 +813,30 @@ var PreviewCanvas = forwardRef3(function PreviewCanvas2({ title = "Preview", exp
693
813
  onReload?.();
694
814
  if (frame.current) frame.current.src = frame.current.src;
695
815
  },
696
- 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 })
697
817
  }
698
818
  ),
699
- /* @__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 }) })
700
820
  ]
701
821
  }
702
822
  ),
703
- /* @__PURE__ */ jsx11("iframe", { ...props, ref: frame, title })
823
+ /* @__PURE__ */ jsx12("iframe", { ...props, ref: frame, title })
704
824
  ]
705
825
  }
706
826
  );
707
827
  });
708
828
 
709
829
  // src/react/session-flag.ts
710
- import { useEffect as useEffect3, useState as useState6 } from "react";
830
+ import { useEffect as useEffect4, useState as useState7 } from "react";
711
831
  function useSessionFlag(key) {
712
- const [value, setValue] = useState6(() => {
832
+ const [value, setValue] = useState7(() => {
713
833
  try {
714
834
  return sessionStorage.getItem(key) === "true";
715
835
  } catch {
716
836
  return false;
717
837
  }
718
838
  });
719
- useEffect3(() => {
839
+ useEffect4(() => {
720
840
  try {
721
841
  sessionStorage.setItem(key, String(value));
722
842
  } catch {
@@ -750,15 +870,15 @@ function useIsMobile() {
750
870
  // src/react/ui/sheet.tsx
751
871
  import { XIcon } from "lucide-react";
752
872
  import { Dialog as SheetPrimitive } from "@base-ui/react/dialog";
753
- import { jsx as jsx12, jsxs as jsxs5 } from "react/jsx-runtime";
873
+ import { jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
754
874
  function Sheet({ ...props }) {
755
- return /* @__PURE__ */ jsx12(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
875
+ return /* @__PURE__ */ jsx13(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
756
876
  }
757
877
  function SheetPortal({ ...props }) {
758
- 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 });
759
879
  }
760
880
  function SheetOverlay({ className, ...props }) {
761
- return /* @__PURE__ */ jsx12(
881
+ return /* @__PURE__ */ jsx13(
762
882
  SheetPrimitive.Backdrop,
763
883
  {
764
884
  "data-slot": "sheet-overlay",
@@ -777,9 +897,9 @@ function SheetContent({
777
897
  showCloseButton = true,
778
898
  ...props
779
899
  }) {
780
- return /* @__PURE__ */ jsxs5(SheetPortal, { children: [
781
- /* @__PURE__ */ jsx12(SheetOverlay, {}),
782
- /* @__PURE__ */ jsxs5(
900
+ return /* @__PURE__ */ jsxs6(SheetPortal, { children: [
901
+ /* @__PURE__ */ jsx13(SheetOverlay, {}),
902
+ /* @__PURE__ */ jsxs6(
783
903
  SheetPrimitive.Popup,
784
904
  {
785
905
  "data-slot": "sheet-content",
@@ -794,9 +914,9 @@ function SheetContent({
794
914
  ...props,
795
915
  children: [
796
916
  children,
797
- 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: [
798
- /* @__PURE__ */ jsx12(XIcon, { className: "size-4" }),
799
- /* @__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" })
800
920
  ] })
801
921
  ]
802
922
  }
@@ -804,10 +924,10 @@ function SheetContent({
804
924
  ] });
805
925
  }
806
926
  function SheetHeader({ className, ...props }) {
807
- 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 });
808
928
  }
809
929
  function SheetTitle({ className, ...props }) {
810
- return /* @__PURE__ */ jsx12(
930
+ return /* @__PURE__ */ jsx13(
811
931
  SheetPrimitive.Title,
812
932
  {
813
933
  "data-slot": "sheet-title",
@@ -817,7 +937,7 @@ function SheetTitle({ className, ...props }) {
817
937
  );
818
938
  }
819
939
  function SheetDescription({ className, ...props }) {
820
- return /* @__PURE__ */ jsx12(
940
+ return /* @__PURE__ */ jsx13(
821
941
  SheetPrimitive.Description,
822
942
  {
823
943
  "data-slot": "sheet-description",
@@ -828,7 +948,7 @@ function SheetDescription({ className, ...props }) {
828
948
  }
829
949
 
830
950
  // src/react/ui/sidebar.tsx
831
- import { jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
951
+ import { jsx as jsx14, jsxs as jsxs7 } from "react/jsx-runtime";
832
952
  var SIDEBAR_COOKIE_NAME = "sidebar_state";
833
953
  var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
834
954
  var SIDEBAR_WIDTH = "256px";
@@ -883,7 +1003,7 @@ function SidebarProvider({
883
1003
  }),
884
1004
  [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
885
1005
  );
886
- 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(
887
1007
  "div",
888
1008
  {
889
1009
  "data-slot": "sidebar-wrapper",
@@ -909,7 +1029,7 @@ function Sidebar({
909
1029
  const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
910
1030
  const Surface = variant === "floating" ? Panel : "div";
911
1031
  if (collapsible === "none") {
912
- return /* @__PURE__ */ jsx13(
1032
+ return /* @__PURE__ */ jsx14(
913
1033
  "div",
914
1034
  {
915
1035
  "data-slot": "sidebar",
@@ -920,7 +1040,7 @@ function Sidebar({
920
1040
  );
921
1041
  }
922
1042
  if (isMobile) {
923
- 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(
924
1044
  SheetContent,
925
1045
  {
926
1046
  "data-sidebar": "sidebar",
@@ -932,16 +1052,16 @@ function Sidebar({
932
1052
  },
933
1053
  side,
934
1054
  children: [
935
- /* @__PURE__ */ jsxs6(SheetHeader, { className: "sr-only", children: [
936
- /* @__PURE__ */ jsx13(SheetTitle, { children: "Sidebar" }),
937
- /* @__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." })
938
1058
  ] }),
939
- /* @__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 })
940
1060
  ]
941
1061
  }
942
1062
  ) });
943
1063
  }
944
- return /* @__PURE__ */ jsxs6(
1064
+ return /* @__PURE__ */ jsxs7(
945
1065
  "div",
946
1066
  {
947
1067
  className: "group peer hidden text-sidebar-foreground md:block",
@@ -951,7 +1071,7 @@ function Sidebar({
951
1071
  "data-side": side,
952
1072
  "data-slot": "sidebar",
953
1073
  children: [
954
- /* @__PURE__ */ jsx13(
1074
+ /* @__PURE__ */ jsx14(
955
1075
  "div",
956
1076
  {
957
1077
  "data-slot": "sidebar-gap",
@@ -963,7 +1083,7 @@ function Sidebar({
963
1083
  )
964
1084
  }
965
1085
  ),
966
- /* @__PURE__ */ jsx13(
1086
+ /* @__PURE__ */ jsx14(
967
1087
  "div",
968
1088
  {
969
1089
  "data-slot": "sidebar-container",
@@ -975,7 +1095,7 @@ function Sidebar({
975
1095
  className
976
1096
  ),
977
1097
  ...props,
978
- children: /* @__PURE__ */ jsx13(
1098
+ children: /* @__PURE__ */ jsx14(
979
1099
  Surface,
980
1100
  {
981
1101
  "data-sidebar": "sidebar",
@@ -991,7 +1111,7 @@ function Sidebar({
991
1111
  );
992
1112
  }
993
1113
  function SidebarHeader({ className, ...props }) {
994
- return /* @__PURE__ */ jsx13(
1114
+ return /* @__PURE__ */ jsx14(
995
1115
  "div",
996
1116
  {
997
1117
  "data-slot": "sidebar-header",
@@ -1002,7 +1122,7 @@ function SidebarHeader({ className, ...props }) {
1002
1122
  );
1003
1123
  }
1004
1124
  function SidebarFooter({ className, ...props }) {
1005
- return /* @__PURE__ */ jsx13(
1125
+ return /* @__PURE__ */ jsx14(
1006
1126
  "div",
1007
1127
  {
1008
1128
  "data-slot": "sidebar-footer",
@@ -1013,7 +1133,7 @@ function SidebarFooter({ className, ...props }) {
1013
1133
  );
1014
1134
  }
1015
1135
  function SidebarContent({ className, ...props }) {
1016
- return /* @__PURE__ */ jsx13(
1136
+ return /* @__PURE__ */ jsx14(
1017
1137
  "div",
1018
1138
  {
1019
1139
  "data-slot": "sidebar-content",
@@ -1027,7 +1147,7 @@ function SidebarContent({ className, ...props }) {
1027
1147
  );
1028
1148
  }
1029
1149
  function SidebarGroup({ className, ...props }) {
1030
- return /* @__PURE__ */ jsx13(
1150
+ return /* @__PURE__ */ jsx14(
1031
1151
  "div",
1032
1152
  {
1033
1153
  "data-slot": "sidebar-group",
@@ -1038,7 +1158,7 @@ function SidebarGroup({ className, ...props }) {
1038
1158
  );
1039
1159
  }
1040
1160
  function SidebarMenu({ className, ...props }) {
1041
- return /* @__PURE__ */ jsx13(
1161
+ return /* @__PURE__ */ jsx14(
1042
1162
  "ul",
1043
1163
  {
1044
1164
  "data-slot": "sidebar-menu",
@@ -1049,7 +1169,7 @@ function SidebarMenu({ className, ...props }) {
1049
1169
  );
1050
1170
  }
1051
1171
  function SidebarMenuItem({ className, ...props }) {
1052
- return /* @__PURE__ */ jsx13(
1172
+ return /* @__PURE__ */ jsx14(
1053
1173
  "li",
1054
1174
  {
1055
1175
  "data-slot": "sidebar-menu-item",
@@ -1090,7 +1210,7 @@ function SidebarMenuButton({
1090
1210
  }) {
1091
1211
  const Comp = asChild ? Slot4.Root : "button";
1092
1212
  const { isMobile, state } = useSidebar();
1093
- const button2 = /* @__PURE__ */ jsx13(
1213
+ const button2 = /* @__PURE__ */ jsx14(
1094
1214
  Comp,
1095
1215
  {
1096
1216
  "data-slot": "sidebar-menu-button",
@@ -1103,7 +1223,7 @@ function SidebarMenuButton({
1103
1223
  );
1104
1224
  if (!tooltip) return button2;
1105
1225
  const { children, ...hint } = typeof tooltip === "string" ? { children: tooltip } : tooltip;
1106
- 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 });
1107
1227
  }
1108
1228
  function SidebarMenuAction({
1109
1229
  className,
@@ -1112,7 +1232,7 @@ function SidebarMenuAction({
1112
1232
  ...props
1113
1233
  }) {
1114
1234
  const Comp = asChild ? Slot4.Root : "button";
1115
- return /* @__PURE__ */ jsx13(
1235
+ return /* @__PURE__ */ jsx14(
1116
1236
  Comp,
1117
1237
  {
1118
1238
  "data-slot": "sidebar-menu-action",
@@ -1131,7 +1251,7 @@ function SidebarMenuAction({
1131
1251
  }
1132
1252
 
1133
1253
  // src/react/studio.tsx
1134
- 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";
1135
1255
  var CONNECTION = {
1136
1256
  connected: { icon: PlugZap, tone: "text-success", label: "Runtime connected" },
1137
1257
  connecting: { icon: LoaderCircle, tone: "text-warning animate-spin", label: "Connecting to runtime" },
@@ -1140,22 +1260,22 @@ var CONNECTION = {
1140
1260
  };
1141
1261
  function StudioFooter({ connection }) {
1142
1262
  const { state, toggleSidebar } = useSidebar();
1143
- const { icon: Status, tone, label } = CONNECTION[connection.phase];
1263
+ const { icon: Status, tone, label: label2 } = CONNECTION[connection.phase];
1144
1264
  const Toggle = state === "expanded" ? PanelLeftClose : PanelLeftOpen;
1145
- return /* @__PURE__ */ jsx14(SidebarFooter, { children: /* @__PURE__ */ jsxs7(SidebarMenu, { children: [
1146
- /* @__PURE__ */ jsx14(SidebarMenuItem, { children: /* @__PURE__ */ jsxs7(SidebarMenuButton, { tooltip: label, className: "cursor-default hover:bg-transparent active:bg-transparent", children: [
1147
- /* @__PURE__ */ jsx14(Status, { className: tone }),
1148
- /* @__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 })
1149
1269
  ] }) }),
1150
- /* @__PURE__ */ jsx14(SidebarMenuItem, { children: /* @__PURE__ */ jsxs7(
1270
+ /* @__PURE__ */ jsx15(SidebarMenuItem, { children: /* @__PURE__ */ jsxs8(
1151
1271
  SidebarMenuButton,
1152
1272
  {
1153
1273
  "aria-label": `${state === "expanded" ? "Collapse" : "Expand"} sidebar`,
1154
1274
  tooltip: `${state === "expanded" ? "Collapse" : "Expand"} sidebar`,
1155
1275
  onClick: toggleSidebar,
1156
1276
  children: [
1157
- /* @__PURE__ */ jsx14(Toggle, {}),
1158
- /* @__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" })
1159
1279
  ]
1160
1280
  }
1161
1281
  ) })
@@ -1185,11 +1305,11 @@ function forwardShortcuts(frame) {
1185
1305
  function Studio({ studio, previewComponent, getConfigFileHref }) {
1186
1306
  useStudio(studio);
1187
1307
  const { tools, pinned, togglePin } = usePinnedTools(studio);
1188
- const [mounted, setMounted] = useState9(false);
1308
+ const [mounted, setMounted] = useState10(false);
1189
1309
  const [sidebarHidden, setSidebarHidden] = useSessionFlag("joyco-studio:sidebar-hidden");
1190
1310
  const [inspectorHidden, setInspectorHidden] = useSessionFlag("joyco-studio:inspector-hidden");
1191
1311
  const [canvasExpanded, setCanvasExpanded] = useSessionFlag("joyco-studio:canvas-expanded");
1192
- const [selected, setSelected] = useState9(studio.definitions[0]?.id);
1312
+ const [selected, setSelected] = useState10(studio.definitions[0]?.id);
1193
1313
  const preview = useRef3(null);
1194
1314
  const definition = studio.definitions.find((tool) => tool.id === selected);
1195
1315
  const handle = studio.tools.find((tool) => tool.definition.id === selected);
@@ -1198,7 +1318,7 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1198
1318
  const show = { left: () => setSidebarHidden(false), right: () => setInspectorHidden(false) };
1199
1319
  const layout = useRef3(hidden);
1200
1320
  layout.current = hidden;
1201
- useEffect5(() => {
1321
+ useEffect6(() => {
1202
1322
  const onKey = (event) => {
1203
1323
  if (event.defaultPrevented || event.isComposing || event.altKey || !(event.metaKey || event.ctrlKey)) return;
1204
1324
  if (event.key.toLowerCase() !== "b") return;
@@ -1221,10 +1341,10 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1221
1341
  handle.compare(showSaved);
1222
1342
  postCompare(preview.current?.contentWindow, handle.definition.id, showSaved);
1223
1343
  };
1224
- useEffect5(() => () => handle?.compare(false), [handle]);
1344
+ useEffect6(() => () => handle?.compare(false), [handle]);
1225
1345
  const current = useRef3({ handle, compare });
1226
1346
  current.current = { handle, compare };
1227
- useEffect5(() => {
1347
+ useEffect6(() => {
1228
1348
  const onKey = (event) => {
1229
1349
  if (event.key !== COMPARE_KEY || editable(event) || event.repeat) return;
1230
1350
  event.preventDefault();
@@ -1242,7 +1362,7 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1242
1362
  removeEventListener("blur", release);
1243
1363
  };
1244
1364
  }, []);
1245
- useEffect5(() => {
1365
+ useEffect6(() => {
1246
1366
  const onKey = (event) => {
1247
1367
  const action = event.defaultPrevented ? null : historyAction(event);
1248
1368
  if (!action) return;
@@ -1252,7 +1372,7 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1252
1372
  addEventListener("keydown", onKey);
1253
1373
  return () => removeEventListener("keydown", onKey);
1254
1374
  }, []);
1255
- useEffect5(() => {
1375
+ useEffect6(() => {
1256
1376
  const fromHash = () => {
1257
1377
  const id = decodeURIComponent(location.hash.slice(1));
1258
1378
  if (studio.definitions.some((tool) => tool.id === id)) setSelected(id);
@@ -1264,7 +1384,7 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1264
1384
  }, [studio]);
1265
1385
  if (!mounted) return null;
1266
1386
  const sidebarOpen = !document.cookie.split("; ").includes("sidebar_state=false");
1267
- return /* @__PURE__ */ jsx14(StudioShadowRoot, { children: /* @__PURE__ */ jsxs7(
1387
+ return /* @__PURE__ */ jsx15(StudioShadowRoot, { children: /* @__PURE__ */ jsxs8(
1268
1388
  SidebarProvider,
1269
1389
  {
1270
1390
  defaultOpen: sidebarOpen,
@@ -1272,7 +1392,7 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1272
1392
  "data-sidebar-panel": hidden.left ? "hidden" : "shown",
1273
1393
  className: "studio-workspace relative h-svh min-h-0 overflow-hidden text-xs",
1274
1394
  children: [
1275
- definition?.preview ? /* @__PURE__ */ jsx14(
1395
+ definition?.preview ? /* @__PURE__ */ jsx15(
1276
1396
  Preview,
1277
1397
  {
1278
1398
  "data-slot": "studio-preview",
@@ -1283,44 +1403,44 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1283
1403
  ...Preview === PreviewCanvas && { expanded: canvasExpanded, onExpandedChange: setCanvasExpanded }
1284
1404
  },
1285
1405
  definition.id
1286
- ) : /* @__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" }),
1287
1407
  ["left", "right"].filter((side) => hidden[side] && (side === "left" || handle)).map((side) => {
1288
1408
  const Chevron = side === "left" ? ChevronRight : ChevronLeft;
1289
- const label = side === "left" ? "Show tools" : "Show inspector";
1290
- return /* @__PURE__ */ jsx14(
1409
+ const label2 = side === "left" ? "Show tools" : "Show inspector";
1410
+ return /* @__PURE__ */ jsx15(
1291
1411
  "div",
1292
1412
  {
1293
1413
  "data-slot": "studio-panel-edge",
1294
1414
  "data-side": side,
1295
1415
  className: cn("group/edge absolute inset-y-0 z-20 w-8", side === "left" ? "left-0" : "right-0"),
1296
- children: /* @__PURE__ */ jsx14(
1416
+ children: /* @__PURE__ */ jsx15(
1297
1417
  Hint,
1298
1418
  {
1299
1419
  side: side === "left" ? "right" : "left",
1300
1420
  sideOffset: 8,
1301
1421
  className: "flex items-center gap-2",
1302
- content: /* @__PURE__ */ jsxs7(Fragment2, { children: [
1303
- label,
1422
+ content: /* @__PURE__ */ jsxs8(Fragment3, { children: [
1423
+ label2,
1304
1424
  " ",
1305
- /* @__PURE__ */ jsx14("span", { className: "text-faint", children: "\xB7 both" }),
1306
- /* @__PURE__ */ jsxs7(KbdGroup, { children: [
1307
- /* @__PURE__ */ jsx14(Kbd, { children: "\u2318/Ctrl" }),
1308
- /* @__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" })
1309
1429
  ] })
1310
1430
  ] }),
1311
- children: /* @__PURE__ */ jsx14(Panel, { asChild: true, children: /* @__PURE__ */ jsx14(
1431
+ children: /* @__PURE__ */ jsx15(Panel, { asChild: true, children: /* @__PURE__ */ jsx15(
1312
1432
  Button,
1313
1433
  {
1314
1434
  "data-slot": "studio-panel-reveal",
1315
1435
  variant: "ghost",
1316
1436
  size: "icon",
1317
- "aria-label": label,
1437
+ "aria-label": label2,
1318
1438
  onClick: show[side],
1319
1439
  className: cn(
1320
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",
1321
1441
  side === "left" ? "left-1 -translate-x-[calc(100%+0.25rem)]" : "right-1 translate-x-[calc(100%+0.25rem)]"
1322
1442
  ),
1323
- children: /* @__PURE__ */ jsx14(Chevron, { "aria-hidden": true })
1443
+ children: /* @__PURE__ */ jsx15(Chevron, { "aria-hidden": true })
1324
1444
  }
1325
1445
  ) })
1326
1446
  }
@@ -1329,7 +1449,7 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1329
1449
  side
1330
1450
  );
1331
1451
  }),
1332
- /* @__PURE__ */ jsxs7(
1452
+ /* @__PURE__ */ jsxs8(
1333
1453
  Sidebar,
1334
1454
  {
1335
1455
  collapsible: "icon",
@@ -1341,30 +1461,30 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1341
1461
  hidden.left && "-translate-x-[calc(100%+1rem)]"
1342
1462
  ),
1343
1463
  children: [
1344
- /* @__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: [
1345
- /* @__PURE__ */ jsx14(Logo, { className: "h-3.5 w-auto shrink-0" }),
1346
- /* @__PURE__ */ jsx14("strong", { className: "tracking-[0.08em] whitespace-nowrap", children: "STUDIO" }),
1347
- /* @__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: [
1348
1468
  "v",
1349
1469
  version
1350
1470
  ] })
1351
1471
  ] }) }),
1352
- /* @__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) => {
1353
1473
  const title = tool.title ?? tool.id;
1354
1474
  const isPinned = pinned.has(tool.id);
1355
1475
  const { state, dirty } = studio.tools.find((handle2) => handle2.definition.id === tool.id) ?? {};
1356
1476
  const pinLabel = `${isPinned ? "Unpin" : "Pin"} ${title}`;
1357
- return /* @__PURE__ */ jsxs7(SidebarMenuItem, { children: [
1358
- /* @__PURE__ */ jsxs7(
1477
+ return /* @__PURE__ */ jsxs8(SidebarMenuItem, { children: [
1478
+ /* @__PURE__ */ jsxs8(
1359
1479
  SidebarMenuButton,
1360
1480
  {
1361
1481
  isActive: tool.id === selected,
1362
1482
  tooltip: title,
1363
1483
  onClick: () => location.hash = tool.id,
1364
1484
  children: [
1365
- /* @__PURE__ */ jsxs7("span", { className: "relative", children: [
1366
- /* @__PURE__ */ jsx14(ToolIcon, { icon: tool.icon, className: "size-4" }),
1367
- dirty && /* @__PURE__ */ jsx14(
1485
+ /* @__PURE__ */ jsxs8("span", { className: "relative", children: [
1486
+ /* @__PURE__ */ jsx15(ToolIcon, { icon: tool.icon, className: "size-4" }),
1487
+ dirty && /* @__PURE__ */ jsx15(
1368
1488
  "span",
1369
1489
  {
1370
1490
  "aria-label": state?.conflict ? "Changed on disk" : "Unsaved",
@@ -1375,11 +1495,11 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1375
1495
  }
1376
1496
  )
1377
1497
  ] }),
1378
- /* @__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 })
1379
1499
  ]
1380
1500
  }
1381
1501
  ),
1382
- /* @__PURE__ */ jsx14(Hint, { content: pinLabel, side: "right", children: /* @__PURE__ */ jsx14(
1502
+ /* @__PURE__ */ jsx15(Hint, { content: pinLabel, side: "right", children: /* @__PURE__ */ jsx15(
1383
1503
  SidebarMenuAction,
1384
1504
  {
1385
1505
  type: "button",
@@ -1391,16 +1511,16 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1391
1511
  "cursor-pointer [&>svg]:size-3 [@media(hover:none)]:opacity-100",
1392
1512
  isPinned && "text-sidebar-primary"
1393
1513
  ),
1394
- children: /* @__PURE__ */ jsx14(Pin2, { "aria-hidden": true, fill: isPinned ? "currentColor" : "none" })
1514
+ children: /* @__PURE__ */ jsx15(Pin2, { "aria-hidden": true, fill: isPinned ? "currentColor" : "none" })
1395
1515
  }
1396
1516
  ) })
1397
1517
  ] }, tool.id);
1398
1518
  }) }) }) }),
1399
- /* @__PURE__ */ jsx14(StudioFooter, { connection: studio.connection })
1519
+ /* @__PURE__ */ jsx15(StudioFooter, { connection: studio.connection })
1400
1520
  ]
1401
1521
  }
1402
1522
  ),
1403
- handle && /* @__PURE__ */ jsx14(Panel, { asChild: true, children: /* @__PURE__ */ jsx14(
1523
+ handle && /* @__PURE__ */ jsx15(Panel, { asChild: true, children: /* @__PURE__ */ jsx15(
1404
1524
  "aside",
1405
1525
  {
1406
1526
  "data-slot": "studio-inspector",
@@ -1410,7 +1530,7 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1410
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",
1411
1531
  hidden.right && "translate-x-[calc(100%+1rem)]"
1412
1532
  ),
1413
- children: /* @__PURE__ */ jsx14(
1533
+ children: /* @__PURE__ */ jsx15(
1414
1534
  Inspector,
1415
1535
  {
1416
1536
  studio,
@@ -1429,9 +1549,9 @@ function Studio({ studio, previewComponent, getConfigFileHref }) {
1429
1549
 
1430
1550
  // src/react/debug.tsx
1431
1551
  import { DebugManager } from "@joycostudio/xyz/debug";
1432
- import { useEffect as useEffect6 } from "react";
1552
+ import { useEffect as useEffect7 } from "react";
1433
1553
  function StudioDebug({ studio }) {
1434
- useEffect6(() => {
1554
+ useEffect7(() => {
1435
1555
  const debug = new DebugManager({
1436
1556
  createPane: async () => new (await import("tweakpane")).Pane({ title: "debug" }),
1437
1557
  binding: { registerFrame: everyFrame }
@@ -1445,15 +1565,15 @@ function StudioDebug({ studio }) {
1445
1565
  // src/react/command-menu.tsx
1446
1566
  import { Dialog } from "@base-ui/react/dialog";
1447
1567
  import { Pin as Pin3 } from "lucide-react";
1448
- 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";
1449
1569
 
1450
1570
  // src/react/ui/command.tsx
1451
1571
  import * as React3 from "react";
1452
1572
  import { Command as CommandPrimitive } from "cmdk";
1453
1573
  import { SearchIcon } from "lucide-react";
1454
- import { jsx as jsx15, jsxs as jsxs8 } from "react/jsx-runtime";
1574
+ import { jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
1455
1575
  function Command({ className, ...props }) {
1456
- return /* @__PURE__ */ jsx15(
1576
+ return /* @__PURE__ */ jsx16(
1457
1577
  CommandPrimitive,
1458
1578
  {
1459
1579
  "data-slot": "command",
@@ -1466,9 +1586,9 @@ function Command({ className, ...props }) {
1466
1586
  );
1467
1587
  }
1468
1588
  var CommandInput = React3.forwardRef(function CommandInput2({ className, ...props }, ref) {
1469
- return /* @__PURE__ */ jsxs8("div", { "data-slot": "command-input-wrapper", className: "flex h-9 items-center gap-2 border-b px-3", children: [
1470
- /* @__PURE__ */ jsx15(SearchIcon, { "aria-hidden": true, className: "size-4 shrink-0 opacity-50" }),
1471
- /* @__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(
1472
1592
  CommandPrimitive.Input,
1473
1593
  {
1474
1594
  ref,
@@ -1483,7 +1603,7 @@ var CommandInput = React3.forwardRef(function CommandInput2({ className, ...prop
1483
1603
  ] });
1484
1604
  });
1485
1605
  function CommandList({ className, ...props }) {
1486
- return /* @__PURE__ */ jsx15(
1606
+ return /* @__PURE__ */ jsx16(
1487
1607
  CommandPrimitive.List,
1488
1608
  {
1489
1609
  "data-slot": "command-list",
@@ -1493,10 +1613,10 @@ function CommandList({ className, ...props }) {
1493
1613
  );
1494
1614
  }
1495
1615
  function CommandEmpty({ ...props }) {
1496
- 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 });
1497
1617
  }
1498
1618
  function CommandItem({ className, ...props }) {
1499
- return /* @__PURE__ */ jsx15(
1619
+ return /* @__PURE__ */ jsx16(
1500
1620
  CommandPrimitive.Item,
1501
1621
  {
1502
1622
  "data-slot": "command-item",
@@ -1510,14 +1630,14 @@ function CommandItem({ className, ...props }) {
1510
1630
  }
1511
1631
 
1512
1632
  // src/react/command-menu.tsx
1513
- import { jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
1633
+ import { jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
1514
1634
  function StudioCommandMenu(props) {
1515
- return /* @__PURE__ */ jsx16(StudioShadowRoot, { children: /* @__PURE__ */ jsx16(CommandMenu, { ...props }) });
1635
+ return /* @__PURE__ */ jsx17(StudioShadowRoot, { children: /* @__PURE__ */ jsx17(CommandMenu, { ...props }) });
1516
1636
  }
1517
1637
  function CommandMenu({ studio, studioPath = "/studio", navigate }) {
1518
1638
  const { tools, pinned } = usePinnedTools(studio);
1519
- const [open, setOpen] = useState10(false);
1520
- const [session, setSession] = useState10(0);
1639
+ const [open, setOpen] = useState11(false);
1640
+ const [session, setSession] = useState11(0);
1521
1641
  const isOpen = useRef4(open);
1522
1642
  isOpen.current = open;
1523
1643
  const show = (next) => {
@@ -1525,7 +1645,7 @@ function CommandMenu({ studio, studioPath = "/studio", navigate }) {
1525
1645
  setOpen(next);
1526
1646
  };
1527
1647
  const input = useRef4(null);
1528
- useEffect7(() => {
1648
+ useEffect8(() => {
1529
1649
  if (window.frameElement?.getAttribute("data-slot") === "studio-preview") return;
1530
1650
  const onKey = (event) => {
1531
1651
  if (event.defaultPrevented || event.isComposing || event.altKey || !(event.metaKey || event.ctrlKey)) return;
@@ -1549,47 +1669,47 @@ function CommandMenu({ studio, studioPath = "/studio", navigate }) {
1549
1669
  window.location.assign(target.href);
1550
1670
  }
1551
1671
  };
1552
- return /* @__PURE__ */ jsx16(Dialog.Root, { open, onOpenChange: show, children: /* @__PURE__ */ jsxs9(Dialog.Portal, { container: usePortalContainer(), children: [
1553
- /* @__PURE__ */ jsx16(Dialog.Backdrop, { "data-slot": "studio-command-overlay" }),
1554
- /* @__PURE__ */ jsxs9(Dialog.Popup, { "data-slot": "studio-command-menu", initialFocus: input, children: [
1555
- /* @__PURE__ */ jsxs9("div", { "data-slot": "studio-command-heading", children: [
1556
- /* @__PURE__ */ jsxs9(Dialog.Title, { "aria-label": "Studio tools", children: [
1557
- /* @__PURE__ */ jsx16(Logo, { "aria-hidden": true }),
1558
- /* @__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" })
1559
1679
  ] }),
1560
- /* @__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" }) })
1561
1681
  ] }),
1562
- /* @__PURE__ */ jsx16(Dialog.Description, { "data-slot": "studio-command-description", children: "Open a tool in Studio." }),
1563
- /* @__PURE__ */ jsxs9(Command, { label: "Studio tools", loop: true, vimBindings: false, children: [
1564
- /* @__PURE__ */ jsx16(CommandInput, { ref: input, placeholder: "Search tools\u2026" }),
1565
- /* @__PURE__ */ jsxs9(CommandList, { children: [
1566
- /* @__PURE__ */ jsx16(CommandEmpty, { children: studio.definitions.length ? "No tools found." : "No tools registered yet." }),
1567
- 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(
1568
1688
  CommandItem,
1569
1689
  {
1570
1690
  value: tool.id,
1571
1691
  keywords: [tool.title ?? tool.id],
1572
1692
  onSelect: () => select(tool.id),
1573
1693
  children: [
1574
- /* @__PURE__ */ jsx16(ToolIcon, { icon: tool.icon }),
1575
- /* @__PURE__ */ jsx16("span", { "data-slot": "studio-command-label", children: tool.title ?? tool.id }),
1576
- 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 })
1577
1697
  ]
1578
1698
  },
1579
1699
  tool.id
1580
1700
  ))
1581
1701
  ] })
1582
1702
  ] }, session),
1583
- /* @__PURE__ */ jsxs9("div", { "data-slot": "studio-command-footer", "aria-hidden": true, children: [
1584
- /* @__PURE__ */ jsxs9("span", { children: [
1585
- /* @__PURE__ */ jsxs9(KbdGroup, { children: [
1586
- /* @__PURE__ */ jsx16(Kbd, { children: "\u2191" }),
1587
- /* @__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" })
1588
1708
  ] }),
1589
1709
  "navigate"
1590
1710
  ] }),
1591
- /* @__PURE__ */ jsxs9("span", { children: [
1592
- /* @__PURE__ */ jsx16(Kbd, { children: "\u21B5" }),
1711
+ /* @__PURE__ */ jsxs10("span", { children: [
1712
+ /* @__PURE__ */ jsx17(Kbd, { children: "\u21B5" }),
1593
1713
  " open tool"
1594
1714
  ] })
1595
1715
  ] })
@@ -1599,7 +1719,7 @@ function CommandMenu({ studio, studioPath = "/studio", navigate }) {
1599
1719
 
1600
1720
  // src/react/select.tsx
1601
1721
  import { Select } from "@base-ui/react/select";
1602
- import { Check, ChevronDown, ChevronUp } from "lucide-react";
1722
+ import { Check as Check2, ChevronDown, ChevronUp as ChevronUp2 } from "lucide-react";
1603
1723
 
1604
1724
  // src/react/select-labels.ts
1605
1725
  import { Children, isValidElement } from "react";
@@ -1613,41 +1733,41 @@ function itemLabels(children, labels = {}) {
1613
1733
  }
1614
1734
 
1615
1735
  // src/react/select.tsx
1616
- import { jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
1617
- function StudioSelect({ label, title, className, children, ...props }) {
1618
- return /* @__PURE__ */ jsxs10(Select.Root, { items: itemLabels(children), ...props, children: [
1619
- /* @__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(
1620
1740
  Select.Trigger,
1621
1741
  {
1622
1742
  "data-slot": "select-trigger",
1623
- "aria-label": label,
1743
+ "aria-label": label2,
1624
1744
  title,
1625
1745
  className: cn(
1626
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",
1627
1747
  className
1628
1748
  ),
1629
1749
  children: [
1630
- /* @__PURE__ */ jsx17(Select.Value, {}),
1631
- /* @__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 }) })
1632
1752
  ]
1633
1753
  }
1634
1754
  ),
1635
- /* @__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(
1636
1756
  Select.Popup,
1637
1757
  {
1638
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",
1639
1759
  "data-slot": "select-content",
1640
1760
  children: [
1641
- /* @__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 }) }),
1642
- /* @__PURE__ */ jsx17(Select.List, { children }),
1643
- /* @__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 }) })
1644
1764
  ]
1645
1765
  }
1646
1766
  ) }) })
1647
1767
  ] });
1648
1768
  }
1649
1769
  function StudioSelectItem({ className, children, ...props }) {
1650
- return /* @__PURE__ */ jsxs10(
1770
+ return /* @__PURE__ */ jsxs11(
1651
1771
  Select.Item,
1652
1772
  {
1653
1773
  "data-slot": "select-item",
@@ -1657,8 +1777,8 @@ function StudioSelectItem({ className, children, ...props }) {
1657
1777
  ),
1658
1778
  ...props,
1659
1779
  children: [
1660
- /* @__PURE__ */ jsx17(Select.ItemText, { children }),
1661
- /* @__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 }) })
1662
1782
  ]
1663
1783
  }
1664
1784
  );
@@ -1666,9 +1786,9 @@ function StudioSelectItem({ className, children, ...props }) {
1666
1786
 
1667
1787
  // src/react/ui/input.tsx
1668
1788
  import { forwardRef as forwardRef5 } from "react";
1669
- import { jsx as jsx18 } from "react/jsx-runtime";
1789
+ import { jsx as jsx19 } from "react/jsx-runtime";
1670
1790
  var Input = forwardRef5(function Input2({ className, ...props }, ref) {
1671
- return /* @__PURE__ */ jsx18(
1791
+ return /* @__PURE__ */ jsx19(
1672
1792
  "input",
1673
1793
  {
1674
1794
  ref,