made-refine 0.2.20 → 0.2.21

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/index.js CHANGED
@@ -87,7 +87,7 @@ var React8 = __toESM(require("react"));
87
87
  var React = __toESM(require("react"));
88
88
 
89
89
  // dist/styles.css
90
- var styles_default = '/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--leading-relaxed:1.625;--radius-sm:calc(.5rem - 4px);--radius-md:calc(.5rem - 2px);--radius-xl:.75rem;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-border:#e6e6e6;--color-ring:#262626;--color-background:#fff;--color-foreground:#171717;--color-primary:#171717;--color-primary-foreground:#fafafa;--color-secondary-foreground:#171717;--color-destructive:#ef4444;--color-destructive-foreground:#fafafa;--color-muted:#f2f2f2;--color-muted-foreground:#737373;--color-popover-foreground:#171717}}@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,ui-sans-serif,system-ui,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{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}:root,:host{color-scheme:light;color:var(--color-foreground)}@media (prefers-color-scheme:dark){:root,:host(:not([data-theme])),:host([data-theme=system]){color-scheme:dark;color:var(--color-foreground);--color-border:#2e2e2e;--color-input:#2e2e2e;--color-ring:#d4d4d4;--color-background:#121212;--color-foreground:#fafafa;--color-primary:#fafafa;--color-primary-foreground:#171717;--color-secondary:#262626;--color-secondary-foreground:#fafafa;--color-destructive:#7f1d1d;--color-destructive-foreground:#fafafa;--color-muted:#262626;--color-muted-foreground:#a3a3a3;--color-accent:#262626;--color-accent-foreground:#fafafa;--color-popover:#171717;--color-popover-foreground:#fafafa}}:host([data-theme=dark]){color-scheme:dark;color:var(--color-foreground);--color-border:#2e2e2e;--color-input:#2e2e2e;--color-ring:#d4d4d4;--color-background:#121212;--color-foreground:#fafafa;--color-primary:#fafafa;--color-primary-foreground:#171717;--color-secondary:#262626;--color-secondary-foreground:#fafafa;--color-destructive:#7f1d1d;--color-destructive-foreground:#fafafa;--color-muted:#262626;--color-muted-foreground:#a3a3a3;--color-accent:#262626;--color-accent-foreground:#fafafa;--color-popover:#171717;--color-popover-foreground:#fafafa}*,:before,:after{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:var(--color-background);--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-duration:initial;border-color:var(--color-border)}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.top-1\\/2{top:50%}.left-1\\.5{left:calc(var(--spacing)*1.5)}.left-1\\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.z-\\[99990\\]{z-index:99990}.z-\\[99991\\]{z-index:99991}.z-\\[99998\\]{z-index:99998}.z-\\[99999\\]{z-index:99999}.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}}.m-4{margin:calc(var(--spacing)*4)}.mx-0\\.5{margin-inline:calc(var(--spacing)*.5)}.mx-2{margin-inline:calc(var(--spacing)*2)}.my-0\\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2\\.5{margin-top:calc(var(--spacing)*2.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.ml-0{margin-left:calc(var(--spacing)*0)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-1\\.5{margin-left:calc(var(--spacing)*1.5)}.ml-2{margin-left:calc(var(--spacing)*2)}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.size-1{width:calc(var(--spacing)*1);height:calc(var(--spacing)*1)}.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-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.size-full{width:100%;height:100%}.h-0\\.5{height:calc(var(--spacing)*.5)}.h-2{height:calc(var(--spacing)*2)}.h-3\\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-\\[150px\\]{height:150px}.h-auto{height:auto}.h-fit{height:fit-content}.h-full{height:100%}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-\\[240px\\]{max-height:240px}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\\[18px\\]{min-height:18px}.w-0\\.5{width:calc(var(--spacing)*.5)}.w-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-11{width:calc(var(--spacing)*11)}.w-14{width:calc(var(--spacing)*14)}.w-\\[1\\.5px\\]{width:1.5px}.w-\\[60px\\]{width:60px}.w-\\[68px\\]{width:68px}.w-\\[180px\\]{width:180px}.w-\\[200px\\]{width:200px}.w-\\[240px\\]{width:240px}.w-\\[260px\\]{width:260px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-full{max-width:100%}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\\[18px\\]{min-width:18px}.min-w-\\[20px\\]{min-width:20px}.min-w-\\[100px\\]{min-width:100px}.min-w-\\[120px\\]{min-width:120px}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.origin-\\(--transform-origin\\){transform-origin:var(--transform-origin)}.-translate-x-1\\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);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)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.\\[appearance\\:textfield\\]{appearance:textfield}.appearance-none{appearance:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\\[0fr\\]{grid-template-columns:0fr}.grid-cols-\\[1fr\\]{grid-template-columns:1fr}.grid-rows-\\[0fr\\]{grid-template-rows:0fr}.grid-rows-\\[1fr\\]{grid-template-rows:1fr}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-evenly{justify-content:space-evenly}.justify-start{justify-content:flex-start}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-4{gap:calc(var(--spacing)*4)}.gap-\\[2px\\]{gap:2px}.gap-\\[4px\\]{gap:4px}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-\\[6px\\]{border-radius:6px}.rounded-\\[8px\\]{border-radius:8px}.rounded-full{border-radius:3.40282e38px}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-tl{border-top-left-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-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-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-double{--tw-border-style:double;border-style:double}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.\\[border-top-style\\:solid\\]{border-top-style:solid}.\\[border-right-style\\:dashed\\]{border-right-style:dashed}.\\[border-bottom-style\\:dashed\\]{border-bottom-style:dashed}.\\[border-bottom-style\\:dotted\\]{border-bottom-style:dotted}.\\[border-bottom-style\\:solid\\]{border-bottom-style:solid}.\\[border-left-style\\:double\\]{border-left-style:double}.\\[border-left-style\\:solid\\]{border-left-style:solid}.border-border{border-color:var(--color-border)}.border-border\\/30{border-color:#e6e6e64d}@supports (color:color-mix(in lab, red, red)){.border-border\\/30{border-color:color-mix(in oklab,var(--color-border)30%,transparent)}}.border-border\\/50{border-color:#e6e6e680}@supports (color:color-mix(in lab, red, red)){.border-border\\/50{border-color:color-mix(in oklab,var(--color-border)50%,transparent)}}.border-foreground\\/10{border-color:#1717171a}@supports (color:color-mix(in lab, red, red)){.border-foreground\\/10{border-color:color-mix(in oklab,var(--color-foreground)10%,transparent)}}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.bg-\\[canvas\\]{background-color:canvas}.bg-background{background-color:var(--color-background)}.bg-background\\/85{background-color:#ffffffd9}@supports (color:color-mix(in lab, red, red)){.bg-background\\/85{background-color:color-mix(in oklab,var(--color-background)85%,transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-border{background-color:var(--color-border)}.bg-destructive{background-color:var(--color-destructive)}.bg-foreground{background-color:var(--color-foreground)}.bg-foreground\\/25{background-color:#17171740}@supports (color:color-mix(in lab, red, red)){.bg-foreground\\/25{background-color:color-mix(in oklab,var(--color-foreground)25%,transparent)}}.bg-muted{background-color:var(--color-muted)}.bg-muted-foreground\\/30{background-color:#7373734d}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\\/30{background-color:color-mix(in oklab,var(--color-muted-foreground)30%,transparent)}}.bg-primary{background-color:var(--color-primary)}.bg-transparent{background-color:#0000}.fill-border{fill:var(--color-border)}.p-0{padding:calc(var(--spacing)*0)}.p-0\\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-3\\.5{padding-block:calc(var(--spacing)*3.5)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-2\\.5{padding-top:calc(var(--spacing)*2.5)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-\\[13px\\]{padding-top:13px}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-1\\.5{padding-right:calc(var(--spacing)*1.5)}.pr-2{padding-right:calc(var(--spacing)*2)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-1\\.5{padding-bottom:calc(var(--spacing)*1.5)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pl-0{padding-left:calc(var(--spacing)*0)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-7{padding-left:calc(var(--spacing)*7)}.text-center{text-align:center}.text-justify{text-align:justify}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.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-\\[7px\\]{font-size:7px}.text-\\[9px\\]{font-size:9px}.text-\\[10px\\]{font-size:10px}.leading-\\[18px\\]{--tw-leading:18px;line-height:18px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.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)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.\\[overflow-wrap\\:anywhere\\]{overflow-wrap:anywhere}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-background{color:var(--color-background)}.text-blue-500{color:var(--color-blue-500)}.text-destructive-foreground{color:var(--color-destructive-foreground)}.text-foreground{color:var(--color-foreground)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-popover-foreground{color:var(--color-popover-foreground)}.text-primary{color:var(--color-primary)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-red-500{color:var(--color-red-500)}.text-secondary-foreground{color:var(--color-secondary-foreground)}.text-white{color:var(--color-white)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xs{--tw-shadow:0 1px 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-\\[0_0_0_1px_rgba\\(0\\,0\\,0\\,0\\.3\\)\\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_4px_6px_-1px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]{--tw-shadow:0 4px 6px -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-\\[inset_0_0_0_1px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]{--tw-shadow:inset 0 0 0 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-inner{--tw-shadow:inset 0 2px 4px 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-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-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-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)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-white{--tw-ring-color:var(--color-white)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.outline-border{outline-color:var(--color-border)}.outline-foreground\\/10{outline-color:#1717171a}@supports (color:color-mix(in lab, red, red)){.outline-foreground\\/10{outline-color:color-mix(in oklab,var(--color-foreground)10%,transparent)}}.outline-red-500\\/70{outline-color:#fb2c36b3}@supports (color:color-mix(in lab, red, red)){.outline-red-500\\/70{outline-color:color-mix(in oklab,var(--color-red-500)70%,transparent)}}.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\\,background-color\\]{transition-property:color,background-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[opacity\\,background-color\\,color\\]{transition-property:opacity,background-color,color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[transform\\,scale\\,opacity\\]{transition-property:transform,scale,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;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-150{--tw-duration:.15s;transition-duration:.15s}.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-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.animate-in{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\\[-ms-overflow-style\\:none\\]{-ms-overflow-style:none}.\\[scrollbar-width\\:none\\]{scrollbar-width:none}.duration-150{animation-duration:.15s}.duration-200{animation-duration:.2s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.fade-in-0{--tw-enter-opacity:0}.running{animation-play-state:running}.zoom-in-95{--tw-enter-scale:.95}@media (hover:hover){.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\\/pin\\:inline:is(:where(.group\\/pin):hover *){display:inline}}.file\\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\\:bg-transparent::file-selector-button{background-color:#0000}.file\\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\\:text-foreground::file-selector-button{color:var(--color-foreground)}.placeholder\\:text-muted-foreground::placeholder{color:var(--color-muted-foreground)}.placeholder\\:text-red-400::placeholder{color:var(--color-red-400)}.focus-within\\:ring-1:focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\\:ring-ring:focus-within{--tw-ring-color:var(--color-ring)}.focus-within\\:outline-none:focus-within{--tw-outline-style:none;outline-style:none}.focus-within\\:ring-inset:focus-within{--tw-ring-inset:inset}@media (hover:hover){.hover\\:scale-\\[1\\.67\\]:hover{scale:1.67}.hover\\:bg-blue-600:hover{background-color:var(--color-blue-600)}.hover\\:bg-destructive\\/90:hover{background-color:#ef4444e6}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/90:hover{background-color:color-mix(in oklab,var(--color-destructive)90%,transparent)}}.hover\\:bg-foreground\\/80:hover{background-color:#171717cc}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-foreground\\/80:hover{background-color:color-mix(in oklab,var(--color-foreground)80%,transparent)}}.hover\\:bg-muted:hover{background-color:var(--color-muted)}.hover\\:bg-muted-foreground\\/10:hover{background-color:#7373731a}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted-foreground\\/10:hover{background-color:color-mix(in oklab,var(--color-muted-foreground)10%,transparent)}}.hover\\:bg-muted\\/50:hover{background-color:#f2f2f280}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted\\/50:hover{background-color:color-mix(in oklab,var(--color-muted)50%,transparent)}}.hover\\:bg-muted\\/80:hover{background-color:#f2f2f2cc}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted\\/80:hover{background-color:color-mix(in oklab,var(--color-muted)80%,transparent)}}.hover\\:bg-primary\\/90:hover{background-color:#171717e6}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/90:hover{background-color:color-mix(in oklab,var(--color-primary)90%,transparent)}}.hover\\:text-foreground:hover{color:var(--color-foreground)}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:shadow-lg:hover{--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)}}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-ring:focus-visible{--tw-ring-color:var(--color-ring)}.focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.focus-visible\\:ring-inset:focus-visible{--tw-ring-inset:inset}.active\\:cursor-grabbing:active{cursor:grabbing}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-50:disabled{opacity:.5}.data-ending-style\\:scale-90[data-ending-style]{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-ending-style\\:opacity-0[data-ending-style]{opacity:0}.data-instant\\:transition-none[data-instant]{transition-property:none}.data-starting-style\\:scale-90[data-starting-style]{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-starting-style\\:opacity-0[data-starting-style]{opacity:0}.data-\\[highlighted\\]\\:bg-muted[data-highlighted]{background-color:var(--color-muted)}.data-\\[highlighted\\]\\:bg-muted\\/50[data-highlighted]{background-color:#f2f2f280}@supports (color:color-mix(in lab, red, red)){.data-\\[highlighted\\]\\:bg-muted\\/50[data-highlighted]{background-color:color-mix(in oklab,var(--color-muted)50%,transparent)}}.data-\\[highlighted\\]\\:text-foreground[data-highlighted]{color:var(--color-foreground)}@media (prefers-color-scheme:dark){.dark\\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark\\:-outline-offset-1{outline-offset:calc(1px*-1)}}.\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:size-3\\.5 svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.\\[\\&\\:\\:-webkit-inner-spin-button\\]\\:appearance-none::-webkit-inner-spin-button{appearance:none}.\\[\\&\\:\\:-webkit-outer-spin-button\\]\\:appearance-none::-webkit-outer-spin-button{appearance:none}.\\[\\&\\:\\:-webkit-scrollbar\\]\\:hidden::-webkit-scrollbar{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none;animation:none}}.lucide{stroke-width:1px}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0))}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes pulse{50%{opacity:.5}}';
90
+ var styles_default = '/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--leading-relaxed:1.625;--radius-sm:calc(.5rem - 4px);--radius-md:calc(.5rem - 2px);--radius-xl:.75rem;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-border:#e6e6e6;--color-ring:#262626;--color-background:#fff;--color-foreground:#171717;--color-primary:#171717;--color-primary-foreground:#fafafa;--color-secondary-foreground:#171717;--color-destructive:#ef4444;--color-destructive-foreground:#fafafa;--color-muted:#f2f2f2;--color-muted-foreground:#737373;--color-popover-foreground:#171717}}@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,ui-sans-serif,system-ui,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{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}:root,:host{color-scheme:light;color:var(--color-foreground)}@media (prefers-color-scheme:dark){:root,:host(:not([data-theme])),:host([data-theme=system]){color-scheme:dark;color:var(--color-foreground);--color-border:#2e2e2e;--color-input:#2e2e2e;--color-ring:#d4d4d4;--color-background:#121212;--color-foreground:#fafafa;--color-primary:#fafafa;--color-primary-foreground:#171717;--color-secondary:#262626;--color-secondary-foreground:#fafafa;--color-destructive:#7f1d1d;--color-destructive-foreground:#fafafa;--color-muted:#262626;--color-muted-foreground:#a3a3a3;--color-accent:#262626;--color-accent-foreground:#fafafa;--color-popover:#171717;--color-popover-foreground:#fafafa}}:host([data-theme=dark]){color-scheme:dark;color:var(--color-foreground);--color-border:#2e2e2e;--color-input:#2e2e2e;--color-ring:#d4d4d4;--color-background:#121212;--color-foreground:#fafafa;--color-primary:#fafafa;--color-primary-foreground:#171717;--color-secondary:#262626;--color-secondary-foreground:#fafafa;--color-destructive:#7f1d1d;--color-destructive-foreground:#fafafa;--color-muted:#262626;--color-muted-foreground:#a3a3a3;--color-accent:#262626;--color-accent-foreground:#fafafa;--color-popover:#171717;--color-popover-foreground:#fafafa}*,:before,:after{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:var(--color-background);--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-duration:initial;border-color:var(--color-border)}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.top-1\\/2{top:50%}.left-1\\.5{left:calc(var(--spacing)*1.5)}.left-1\\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.isolate{isolation:isolate}.z-\\[99990\\]{z-index:99990}.z-\\[99991\\]{z-index:99991}.z-\\[99998\\]{z-index:99998}.z-\\[99999\\]{z-index:99999}.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}}.m-4{margin:calc(var(--spacing)*4)}.mx-0\\.5{margin-inline:calc(var(--spacing)*.5)}.mx-2{margin-inline:calc(var(--spacing)*2)}.my-0\\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2\\.5{margin-top:calc(var(--spacing)*2.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.ml-0{margin-left:calc(var(--spacing)*0)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-1\\.5{margin-left:calc(var(--spacing)*1.5)}.ml-2{margin-left:calc(var(--spacing)*2)}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.size-1{width:calc(var(--spacing)*1);height:calc(var(--spacing)*1)}.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-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.size-full{width:100%;height:100%}.h-0\\.5{height:calc(var(--spacing)*.5)}.h-2{height:calc(var(--spacing)*2)}.h-3\\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-\\[150px\\]{height:150px}.h-auto{height:auto}.h-fit{height:fit-content}.h-full{height:100%}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-\\[240px\\]{max-height:240px}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\\[18px\\]{min-height:18px}.w-0\\.5{width:calc(var(--spacing)*.5)}.w-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-11{width:calc(var(--spacing)*11)}.w-14{width:calc(var(--spacing)*14)}.w-\\[1\\.5px\\]{width:1.5px}.w-\\[60px\\]{width:60px}.w-\\[68px\\]{width:68px}.w-\\[180px\\]{width:180px}.w-\\[200px\\]{width:200px}.w-\\[240px\\]{width:240px}.w-\\[260px\\]{width:260px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-full{max-width:100%}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\\[18px\\]{min-width:18px}.min-w-\\[20px\\]{min-width:20px}.min-w-\\[100px\\]{min-width:100px}.min-w-\\[120px\\]{min-width:120px}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.origin-\\(--transform-origin\\){transform-origin:var(--transform-origin)}.-translate-x-1\\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);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)}.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-pulse{animation:var(--animate-pulse)}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.\\[appearance\\:textfield\\]{appearance:textfield}.appearance-none{appearance:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\\[0fr\\]{grid-template-columns:0fr}.grid-cols-\\[1fr\\]{grid-template-columns:1fr}.grid-rows-\\[0fr\\]{grid-template-rows:0fr}.grid-rows-\\[1fr\\]{grid-template-rows:1fr}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-evenly{justify-content:space-evenly}.justify-start{justify-content:flex-start}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-4{gap:calc(var(--spacing)*4)}.gap-\\[2px\\]{gap:2px}.gap-\\[4px\\]{gap:4px}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-\\[6px\\]{border-radius:6px}.rounded-\\[8px\\]{border-radius:8px}.rounded-full{border-radius:3.40282e38px}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-tl{border-top-left-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-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-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-double{--tw-border-style:double;border-style:double}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.\\[border-top-style\\:solid\\]{border-top-style:solid}.\\[border-right-style\\:dashed\\]{border-right-style:dashed}.\\[border-bottom-style\\:dashed\\]{border-bottom-style:dashed}.\\[border-bottom-style\\:dotted\\]{border-bottom-style:dotted}.\\[border-bottom-style\\:solid\\]{border-bottom-style:solid}.\\[border-left-style\\:double\\]{border-left-style:double}.\\[border-left-style\\:solid\\]{border-left-style:solid}.border-border{border-color:var(--color-border)}.border-border\\/30{border-color:#e6e6e64d}@supports (color:color-mix(in lab, red, red)){.border-border\\/30{border-color:color-mix(in oklab,var(--color-border)30%,transparent)}}.border-border\\/50{border-color:#e6e6e680}@supports (color:color-mix(in lab, red, red)){.border-border\\/50{border-color:color-mix(in oklab,var(--color-border)50%,transparent)}}.border-foreground\\/10{border-color:#1717171a}@supports (color:color-mix(in lab, red, red)){.border-foreground\\/10{border-color:color-mix(in oklab,var(--color-foreground)10%,transparent)}}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.bg-\\[canvas\\]{background-color:canvas}.bg-background{background-color:var(--color-background)}.bg-background\\/85{background-color:#ffffffd9}@supports (color:color-mix(in lab, red, red)){.bg-background\\/85{background-color:color-mix(in oklab,var(--color-background)85%,transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-border{background-color:var(--color-border)}.bg-destructive{background-color:var(--color-destructive)}.bg-foreground{background-color:var(--color-foreground)}.bg-foreground\\/25{background-color:#17171740}@supports (color:color-mix(in lab, red, red)){.bg-foreground\\/25{background-color:color-mix(in oklab,var(--color-foreground)25%,transparent)}}.bg-muted{background-color:var(--color-muted)}.bg-muted-foreground\\/30{background-color:#7373734d}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\\/30{background-color:color-mix(in oklab,var(--color-muted-foreground)30%,transparent)}}.bg-primary{background-color:var(--color-primary)}.bg-red-500{background-color:var(--color-red-500)}.bg-transparent{background-color:#0000}.fill-border{fill:var(--color-border)}.p-0{padding:calc(var(--spacing)*0)}.p-0\\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-3\\.5{padding-block:calc(var(--spacing)*3.5)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-2\\.5{padding-top:calc(var(--spacing)*2.5)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-\\[13px\\]{padding-top:13px}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-1\\.5{padding-right:calc(var(--spacing)*1.5)}.pr-2{padding-right:calc(var(--spacing)*2)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-1\\.5{padding-bottom:calc(var(--spacing)*1.5)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pl-0{padding-left:calc(var(--spacing)*0)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-7{padding-left:calc(var(--spacing)*7)}.text-center{text-align:center}.text-justify{text-align:justify}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.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-\\[7px\\]{font-size:7px}.text-\\[9px\\]{font-size:9px}.text-\\[10px\\]{font-size:10px}.leading-\\[18px\\]{--tw-leading:18px;line-height:18px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.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)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.\\[overflow-wrap\\:anywhere\\]{overflow-wrap:anywhere}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-background{color:var(--color-background)}.text-blue-500{color:var(--color-blue-500)}.text-destructive-foreground{color:var(--color-destructive-foreground)}.text-foreground{color:var(--color-foreground)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-popover-foreground{color:var(--color-popover-foreground)}.text-primary{color:var(--color-primary)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-red-500{color:var(--color-red-500)}.text-secondary-foreground{color:var(--color-secondary-foreground)}.text-white{color:var(--color-white)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xs{--tw-shadow:0 1px 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-\\[0_0_0_1px_rgba\\(0\\,0\\,0\\,0\\.3\\)\\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_4px_6px_-1px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]{--tw-shadow:0 4px 6px -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-\\[inset_0_0_0_1px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]{--tw-shadow:inset 0 0 0 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-inner{--tw-shadow:inset 0 2px 4px 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-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-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-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)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-white{--tw-ring-color:var(--color-white)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.outline-border{outline-color:var(--color-border)}.outline-foreground\\/10{outline-color:#1717171a}@supports (color:color-mix(in lab, red, red)){.outline-foreground\\/10{outline-color:color-mix(in oklab,var(--color-foreground)10%,transparent)}}.outline-red-500\\/70{outline-color:#fb2c36b3}@supports (color:color-mix(in lab, red, red)){.outline-red-500\\/70{outline-color:color-mix(in oklab,var(--color-red-500)70%,transparent)}}.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\\,background-color\\]{transition-property:color,background-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[opacity\\,background-color\\,color\\]{transition-property:opacity,background-color,color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[transform\\,scale\\,opacity\\]{transition-property:transform,scale,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;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-150{--tw-duration:.15s;transition-duration:.15s}.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-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.animate-in{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\\[-ms-overflow-style\\:none\\]{-ms-overflow-style:none}.\\[scrollbar-width\\:none\\]{scrollbar-width:none}.duration-150{animation-duration:.15s}.duration-200{animation-duration:.2s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.fade-in-0{--tw-enter-opacity:0}.running{animation-play-state:running}.zoom-in-95{--tw-enter-scale:.95}@media (hover:hover){.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\\/pin\\:inline:is(:where(.group\\/pin):hover *){display:inline}}.file\\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\\:bg-transparent::file-selector-button{background-color:#0000}.file\\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\\:text-foreground::file-selector-button{color:var(--color-foreground)}.placeholder\\:text-muted-foreground::placeholder{color:var(--color-muted-foreground)}.placeholder\\:text-red-400::placeholder{color:var(--color-red-400)}.focus-within\\:ring-1:focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\\:ring-ring:focus-within{--tw-ring-color:var(--color-ring)}.focus-within\\:outline-none:focus-within{--tw-outline-style:none;outline-style:none}.focus-within\\:ring-inset:focus-within{--tw-ring-inset:inset}@media (hover:hover){.hover\\:scale-\\[1\\.67\\]:hover{scale:1.67}.hover\\:bg-blue-600:hover{background-color:var(--color-blue-600)}.hover\\:bg-destructive\\/90:hover{background-color:#ef4444e6}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/90:hover{background-color:color-mix(in oklab,var(--color-destructive)90%,transparent)}}.hover\\:bg-foreground\\/80:hover{background-color:#171717cc}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-foreground\\/80:hover{background-color:color-mix(in oklab,var(--color-foreground)80%,transparent)}}.hover\\:bg-muted:hover{background-color:var(--color-muted)}.hover\\:bg-muted-foreground\\/10:hover{background-color:#7373731a}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted-foreground\\/10:hover{background-color:color-mix(in oklab,var(--color-muted-foreground)10%,transparent)}}.hover\\:bg-muted\\/50:hover{background-color:#f2f2f280}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted\\/50:hover{background-color:color-mix(in oklab,var(--color-muted)50%,transparent)}}.hover\\:bg-muted\\/80:hover{background-color:#f2f2f2cc}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted\\/80:hover{background-color:color-mix(in oklab,var(--color-muted)80%,transparent)}}.hover\\:bg-primary\\/90:hover{background-color:#171717e6}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/90:hover{background-color:color-mix(in oklab,var(--color-primary)90%,transparent)}}.hover\\:text-foreground:hover{color:var(--color-foreground)}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:shadow-lg:hover{--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)}}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-ring:focus-visible{--tw-ring-color:var(--color-ring)}.focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.focus-visible\\:ring-inset:focus-visible{--tw-ring-inset:inset}.active\\:cursor-grabbing:active{cursor:grabbing}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-50:disabled{opacity:.5}.data-ending-style\\:scale-90[data-ending-style]{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-ending-style\\:opacity-0[data-ending-style]{opacity:0}.data-instant\\:transition-none[data-instant]{transition-property:none}.data-starting-style\\:scale-90[data-starting-style]{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-starting-style\\:opacity-0[data-starting-style]{opacity:0}.data-\\[highlighted\\]\\:bg-muted[data-highlighted]{background-color:var(--color-muted)}.data-\\[highlighted\\]\\:bg-muted\\/50[data-highlighted]{background-color:#f2f2f280}@supports (color:color-mix(in lab, red, red)){.data-\\[highlighted\\]\\:bg-muted\\/50[data-highlighted]{background-color:color-mix(in oklab,var(--color-muted)50%,transparent)}}.data-\\[highlighted\\]\\:text-foreground[data-highlighted]{color:var(--color-foreground)}@media (prefers-color-scheme:dark){.dark\\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark\\:-outline-offset-1{outline-offset:calc(1px*-1)}}.\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:size-3\\.5 svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.\\[\\&\\:\\:-webkit-inner-spin-button\\]\\:appearance-none::-webkit-inner-spin-button{appearance:none}.\\[\\&\\:\\:-webkit-outer-spin-button\\]\\:appearance-none::-webkit-outer-spin-button{appearance:none}.\\[\\&\\:\\:-webkit-scrollbar\\]\\:hidden::-webkit-scrollbar{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none;animation:none}}.lucide{stroke-width:1px}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0))}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes pulse{50%{opacity:.5}}';
91
91
 
92
92
  // src/portal-container.tsx
93
93
  var import_jsx_runtime = require("react/jsx-runtime");
@@ -477,10 +477,30 @@ function getSourceFromFiber(fiber) {
477
477
  if (fromDebugStack?.fileName) return fromDebugStack;
478
478
  return null;
479
479
  }
480
+ var REACT_FORWARD_REF_TYPE = /* @__PURE__ */ Symbol.for("react.forward_ref");
481
+ var REACT_MEMO_TYPE = /* @__PURE__ */ Symbol.for("react.memo");
482
+ function resolveComponentName(type) {
483
+ let current = type;
484
+ for (let depth = 0; depth < 4 && current != null; depth++) {
485
+ const name = current.displayName || (typeof current === "function" ? current.name : void 0);
486
+ if (name) return name;
487
+ if (typeof current !== "object") return null;
488
+ if (current.$$typeof === REACT_MEMO_TYPE) {
489
+ current = current.type;
490
+ continue;
491
+ }
492
+ if (current.$$typeof === REACT_FORWARD_REF_TYPE) {
493
+ current = current.render;
494
+ continue;
495
+ }
496
+ return null;
497
+ }
498
+ return null;
499
+ }
480
500
  function buildFrame(fiber) {
481
501
  const type = fiber?.type;
482
502
  if (typeof type !== "function" && typeof type !== "object") return null;
483
- const name = type?.displayName || type?.name || null;
503
+ const name = resolveComponentName(type);
484
504
  if (!name || name === "Fragment") return null;
485
505
  const frame = { name };
486
506
  const source = getSourceFromFiber(fiber);
@@ -2492,7 +2512,7 @@ function buildElementContext(locator) {
2492
2512
  return buildLocatorContextLines(locator).join("\n");
2493
2513
  }
2494
2514
  function hasSessionEditChanges(edit) {
2495
- return Object.keys(edit.pendingStyles).length > 0 || Boolean(edit.textEdit) || Boolean(edit.move);
2515
+ return Object.keys(edit.pendingStyles).length > 0 || Boolean(edit.textEdit) || Boolean(edit.move) || Boolean(edit.deleted);
2496
2516
  }
2497
2517
  function partitionMultiSelectedEdits(elements, sessionEditsRef) {
2498
2518
  const editsWithChanges = [];
@@ -3014,7 +3034,7 @@ function buildMoveEntries(edits) {
3014
3034
  let noopMoveCount = 0;
3015
3035
  for (const edit of edits) {
3016
3036
  const move = edit.move;
3017
- if (!move) continue;
3037
+ if (!move || edit.deleted) continue;
3018
3038
  const subject = buildAnchorRef(
3019
3039
  getElementDisplayName(edit.element) || edit.locator.tagName,
3020
3040
  edit.locator.domSelector,
@@ -3173,19 +3193,22 @@ function getExportContentProfile(edits, comments, movePlanOrContext) {
3173
3193
  hasCssEdits: edits.some((e) => Object.keys(e.pendingStyles).length > 0),
3174
3194
  hasTextEdits: edits.some((e) => e.textEdit != null),
3175
3195
  hasMoves: moveOpCount > 0,
3176
- hasComments: comments.length > 0
3196
+ hasComments: comments.length > 0,
3197
+ hasDeletes: edits.some((e) => e.deleted)
3177
3198
  };
3178
3199
  }
3179
3200
  function buildExportInstruction(profile) {
3180
3201
  const { hasCssEdits, hasTextEdits, hasMoves, hasComments } = profile;
3181
- if (!hasCssEdits && !hasTextEdits && !hasMoves && !hasComments) return "";
3182
- if (!hasCssEdits && !hasTextEdits && !hasMoves) {
3202
+ const hasDeletes = Boolean(profile.hasDeletes);
3203
+ if (!hasCssEdits && !hasTextEdits && !hasMoves && !hasComments && !hasDeletes) return "";
3204
+ if (!hasCssEdits && !hasTextEdits && !hasMoves && !hasDeletes) {
3183
3205
  return hasComments ? "Address this feedback on the UI. Use the provided source location and selector to find each element in the codebase." : "";
3184
3206
  }
3185
3207
  const parts = [];
3186
3208
  if (hasCssEdits) parts.push("Apply the CSS changes to the targeted elements using the project's existing styling approach (Tailwind, CSS modules, etc.). Map values to existing CSS variables, design tokens, or utility classes already used in the project whenever possible.");
3187
3209
  if (hasTextEdits) parts.push("Update the text content as specified.");
3188
3210
  if (hasMoves) parts.push("Implement the move plan below directly in source code. For `structural_move`, reorder/reparent elements using the target anchors. For `layout_refactor`, apply the listed flex/grid refactor steps. Do NOT simulate movement with absolute positioning, left/top offsets, transform, or margin hacks.");
3211
+ if (hasDeletes) parts.push("Delete the elements marked for deletion from the source code \u2014 remove their markup/JSX (and any now-dead props, handlers, or imports they solely used).");
3189
3212
  if (hasComments) parts.push("Address the comments on the relevant elements.");
3190
3213
  return `${parts.join(" ")} Use the provided source locations, selectors, and context HTML to locate each element in the codebase.`;
3191
3214
  }
@@ -3220,6 +3243,13 @@ function buildSessionExport(edits, comments = [], options) {
3220
3243
  blocks.push(planLines.join("\n"));
3221
3244
  }
3222
3245
  for (const edit of edits) {
3246
+ if (edit.deleted) {
3247
+ const lines = buildLocatorContextLines(edit.locator);
3248
+ lines.push("");
3249
+ lines.push("action: delete this element \u2014 remove it from the source");
3250
+ blocks.push(lines.join("\n"));
3251
+ continue;
3252
+ }
3223
3253
  const moveIntent = getMoveIntentForEdit(edit, planContext);
3224
3254
  const hasMove = Boolean(moveIntent);
3225
3255
  const hasStyleOrText = Object.keys(edit.pendingStyles).length > 0 || edit.textEdit != null;
@@ -4128,6 +4158,7 @@ function useSessionManager({
4128
4158
  sessionEditsRef,
4129
4159
  removedSessionEditsRef,
4130
4160
  undoStackRef,
4161
+ onElementInsertedRef,
4131
4162
  pushUndo,
4132
4163
  setState,
4133
4164
  setSessionEditCount
@@ -4324,27 +4355,48 @@ function useSessionManager({
4324
4355
  selectElement(firstChild);
4325
4356
  }
4326
4357
  }, [getSelectableChild, selectElement]);
4358
+ const centerElementOnBody = React3.useCallback((element, size) => {
4359
+ const bodyRect = document.body.getBoundingClientRect();
4360
+ const scaleX = document.body.offsetWidth > 0 ? bodyRect.width / document.body.offsetWidth : 1;
4361
+ const scaleY = document.body.offsetHeight > 0 ? bodyRect.height / document.body.offsetHeight : 1;
4362
+ const fallbackWidth = size?.width ?? element.offsetWidth ?? 0;
4363
+ const fallbackHeight = size?.height ?? element.offsetHeight ?? 0;
4364
+ const measuredRect = element.getBoundingClientRect();
4365
+ const width = measuredRect.width || fallbackWidth;
4366
+ const height = measuredRect.height || fallbackHeight;
4367
+ const left = Math.round((window.innerWidth / 2 - bodyRect.left) / scaleX - width / 2);
4368
+ const top = Math.round((window.innerHeight / 2 - bodyRect.top) / scaleY - height / 2);
4369
+ element.style.left = `${left}px`;
4370
+ element.style.top = `${top}px`;
4371
+ }, []);
4327
4372
  const insertElement = React3.useCallback((kind) => {
4328
4373
  if (!stateRef.current.editModeActive) return;
4329
4374
  saveCurrentToSession();
4330
4375
  const restoreSelection = buildSelectionSnapshot();
4331
4376
  const selectedEl = stateRef.current.selectedElement;
4332
- const hasSelection = kind === "frame" && selectedEl !== null && selectedEl !== document.body && selectedEl.parentElement !== null;
4333
- const width = kind === "frame" ? 100 : 160;
4334
- const height = kind === "frame" ? 100 : 96;
4335
- const element = document.createElement("div");
4377
+ const insertsAsSibling = kind === "frame" || kind === "text";
4378
+ const hasSelection = insertsAsSibling && selectedEl !== null && selectedEl !== document.body && selectedEl.parentElement !== null;
4379
+ const element = document.createElement(kind === "text" ? "p" : "div");
4336
4380
  element.id = nextGeneratedCanvasId(kind);
4337
4381
  element.setAttribute(GENERATED_CANVAS_NODE_ATTR, kind);
4338
- element.style.width = `${width}px`;
4339
- element.style.height = `${height}px`;
4340
4382
  element.style.boxSizing = "border-box";
4341
4383
  if (kind === "frame") {
4384
+ element.style.width = "100px";
4385
+ element.style.height = "100px";
4342
4386
  element.style.background = "#F5F5F5";
4343
4387
  element.style.border = "1px solid #E0E0E0";
4344
- } else {
4388
+ } else if (kind === "div") {
4389
+ element.style.width = "160px";
4390
+ element.style.height = "96px";
4345
4391
  element.style.borderRadius = "12px";
4346
4392
  element.style.border = "1px solid rgba(13, 153, 255, 0.35)";
4347
4393
  element.style.background = "rgba(13, 153, 255, 0.08)";
4394
+ } else {
4395
+ element.textContent = "Text";
4396
+ element.style.display = "inline-block";
4397
+ element.style.margin = "0";
4398
+ element.style.minHeight = "24px";
4399
+ element.style.textAlign = "center";
4348
4400
  }
4349
4401
  if (hasSelection) {
4350
4402
  const insertionParent = selectedEl.parentElement;
@@ -4355,16 +4407,22 @@ function useSessionManager({
4355
4407
  insertionParent.appendChild(element);
4356
4408
  }
4357
4409
  } else {
4358
- const bodyRect = document.body.getBoundingClientRect();
4359
- const scaleX = document.body.offsetWidth > 0 ? bodyRect.width / document.body.offsetWidth : 1;
4360
- const scaleY = document.body.offsetHeight > 0 ? bodyRect.height / document.body.offsetHeight : 1;
4361
- const left = Math.round((window.innerWidth / 2 - bodyRect.left) / scaleX - width / 2);
4362
- const top = Math.round((window.innerHeight / 2 - bodyRect.top) / scaleY - height / 2);
4363
4410
  element.style.position = "absolute";
4364
- element.style.left = `${left}px`;
4365
- element.style.top = `${top}px`;
4366
4411
  element.style.zIndex = "1";
4367
- document.body.appendChild(element);
4412
+ if (kind === "text") {
4413
+ element.style.left = "0px";
4414
+ element.style.top = "0px";
4415
+ element.style.visibility = "hidden";
4416
+ document.body.appendChild(element);
4417
+ centerElementOnBody(element);
4418
+ element.style.visibility = "";
4419
+ } else {
4420
+ centerElementOnBody(
4421
+ element,
4422
+ kind === "frame" ? { width: 100, height: 100 } : { width: 160, height: 96 }
4423
+ );
4424
+ document.body.appendChild(element);
4425
+ }
4368
4426
  }
4369
4427
  pushUndo({
4370
4428
  type: "structure",
@@ -4379,7 +4437,8 @@ function useSessionManager({
4379
4437
  primaryElement: element,
4380
4438
  pushUndo: false
4381
4439
  });
4382
- }, [applySelection, buildSelectionSnapshot, pushUndo, saveCurrentToSession, stateRef]);
4440
+ onElementInsertedRef.current?.(kind, element);
4441
+ }, [applySelection, buildSelectionSnapshot, centerElementOnBody, onElementInsertedRef, pushUndo, saveCurrentToSession, stateRef]);
4383
4442
  const groupSelection = React3.useCallback(() => {
4384
4443
  const selected = getSanitizedSelection(stateRef.current.selectedElements);
4385
4444
  if (selected.length < 2) return;
@@ -4475,9 +4534,17 @@ function useSessionManager({
4475
4534
  }));
4476
4535
  const sessionSnapshots = /* @__PURE__ */ new Map();
4477
4536
  for (const el of selected) {
4478
- const edit = sessionEditsRef.current.get(el);
4479
- if (edit) sessionSnapshots.set(el, edit);
4480
- sessionEditsRef.current.delete(el);
4537
+ const existing = sessionEditsRef.current.get(el);
4538
+ sessionSnapshots.set(el, existing ?? null);
4539
+ sessionEditsRef.current.set(el, existing ? { ...existing, deleted: true } : {
4540
+ element: el,
4541
+ locator: getElementLocator(el),
4542
+ originalStyles: {},
4543
+ pendingStyles: {},
4544
+ move: null,
4545
+ textEdit: null,
4546
+ deleted: true
4547
+ });
4481
4548
  }
4482
4549
  syncSessionItemCount();
4483
4550
  for (const { element } of snapshots) {
@@ -4498,7 +4565,8 @@ function useSessionManager({
4498
4565
  }
4499
4566
  }
4500
4567
  for (const [el, edit] of sessionSnapshots) {
4501
- sessionEditsRef.current.set(el, edit);
4568
+ if (edit) sessionEditsRef.current.set(el, edit);
4569
+ else sessionEditsRef.current.delete(el);
4502
4570
  }
4503
4571
  syncSessionItemCount();
4504
4572
  }
@@ -4889,7 +4957,7 @@ function useSessionManager({
4889
4957
  saveCurrentToSession();
4890
4958
  const edits = [];
4891
4959
  for (const edit of sessionEditsRef.current.values()) {
4892
- if (!edit.element.isConnected) {
4960
+ if (!edit.element.isConnected && !edit.deleted) {
4893
4961
  sessionEditsRef.current.delete(edit.element);
4894
4962
  continue;
4895
4963
  }
@@ -5058,6 +5126,7 @@ ${exportMarkdown}`);
5058
5126
 
5059
5127
  // src/use-text-and-comments.ts
5060
5128
  var React4 = __toESM(require("react"));
5129
+ var GENERATED_CANVAS_NODE_ATTR2 = "data-made-refine-canvas-node";
5061
5130
  function clampUnit(value) {
5062
5131
  if (!Number.isFinite(value)) return 0;
5063
5132
  return Math.max(0, Math.min(1, value));
@@ -5093,6 +5162,94 @@ function useTextAndComments({
5093
5162
  editingElement.style.outlineOffset = "";
5094
5163
  editingElement.style.cursor = originalCursor;
5095
5164
  editingElement.blur();
5165
+ const isGeneratedTextElement = editingElement.getAttribute(GENERATED_CANVAS_NODE_ATTR2) === "text";
5166
+ const shouldDeleteGeneratedText = isGeneratedTextElement && newText.trim().length === 0;
5167
+ if (shouldDeleteGeneratedText) {
5168
+ const parent = editingElement.parentElement;
5169
+ const nextSibling = editingElement.nextSibling;
5170
+ const current = stateRef.current;
5171
+ const removedComments = current.comments.filter((comment) => comment.element === editingElement);
5172
+ const removedCommentIds = new Set(removedComments.map((comment) => comment.id));
5173
+ const remainingComments = current.comments.filter((comment) => comment.element !== editingElement);
5174
+ const restoredActiveCommentId = current.activeCommentId && removedCommentIds.has(current.activeCommentId) ? current.activeCommentId : null;
5175
+ const existingSessionEdit = existing ? {
5176
+ ...existing,
5177
+ originalStyles: { ...existing.originalStyles },
5178
+ pendingStyles: { ...existing.pendingStyles },
5179
+ move: existing.move ? { ...existing.move } : null,
5180
+ textEdit: existing.textEdit ? { ...existing.textEdit } : null
5181
+ } : null;
5182
+ const restoreSelection = {
5183
+ isOpen: current.isOpen,
5184
+ selectedElement: current.selectedElement,
5185
+ selectedElements: [...current.selectedElements],
5186
+ selectionAnchorElement: current.selectionAnchorElement,
5187
+ originalStyles: { ...current.originalStyles },
5188
+ pendingStyles: { ...current.pendingStyles }
5189
+ };
5190
+ sessionEditsRef.current.delete(editingElement);
5191
+ if (editingElement.isConnected) {
5192
+ editingElement.remove();
5193
+ }
5194
+ pushUndo({
5195
+ type: "structure",
5196
+ restoreSelection,
5197
+ undo: () => {
5198
+ editingElement.textContent = previousText;
5199
+ if (!editingElement.isConnected && parent?.isConnected) {
5200
+ if (nextSibling && nextSibling.parentNode === parent) {
5201
+ parent.insertBefore(editingElement, nextSibling);
5202
+ } else {
5203
+ parent.appendChild(editingElement);
5204
+ }
5205
+ }
5206
+ if (existingSessionEdit) {
5207
+ sessionEditsRef.current.set(editingElement, existingSessionEdit);
5208
+ }
5209
+ setState((prev) => ({
5210
+ ...prev,
5211
+ comments: current.comments,
5212
+ activeCommentId: restoredActiveCommentId ?? prev.activeCommentId
5213
+ }));
5214
+ syncSessionItemCount(current.comments);
5215
+ }
5216
+ });
5217
+ syncSessionItemCount(remainingComments);
5218
+ setState((prev) => {
5219
+ const selectionContainsElement = prev.selectedElement === editingElement || prev.selectionAnchorElement === editingElement || prev.selectedElements.includes(editingElement);
5220
+ if (!selectionContainsElement) {
5221
+ return prev.textEditingElement === editingElement ? {
5222
+ ...prev,
5223
+ comments: prev.comments.filter((comment) => comment.element !== editingElement),
5224
+ activeCommentId: prev.activeCommentId && removedCommentIds.has(prev.activeCommentId) ? null : prev.activeCommentId,
5225
+ textEditingElement: null
5226
+ } : prev;
5227
+ }
5228
+ return {
5229
+ ...prev,
5230
+ isOpen: false,
5231
+ selectedElement: null,
5232
+ selectedElements: [],
5233
+ selectionAnchorElement: null,
5234
+ elementInfo: null,
5235
+ computedSpacing: null,
5236
+ computedBorderRadius: null,
5237
+ computedBorder: null,
5238
+ computedFlex: null,
5239
+ computedSizing: null,
5240
+ computedColor: null,
5241
+ computedBoxShadow: null,
5242
+ computedTypography: null,
5243
+ isComponentPrimitive: false,
5244
+ comments: remainingComments,
5245
+ activeCommentId: restoredActiveCommentId ? null : prev.activeCommentId,
5246
+ originalStyles: {},
5247
+ pendingStyles: {},
5248
+ textEditingElement: null
5249
+ };
5250
+ });
5251
+ return;
5252
+ }
5096
5253
  if (newText !== previousText) {
5097
5254
  pushUndo({ type: "textEdit", element: editingElement, originalText, previousText });
5098
5255
  removedSessionEditsRef.current.delete(editingElement);
@@ -5611,28 +5768,30 @@ async function toClientResponse(response) {
5611
5768
  const data = await readJsonRecord(response);
5612
5769
  const bodyOk = data?.ok;
5613
5770
  const parsedOk = typeof bodyOk === "boolean" ? bodyOk : response.ok;
5771
+ const ok = parsedOk && response.ok;
5614
5772
  return {
5615
- ok: parsedOk && response.ok,
5616
- id: readString(data, "id") ?? ""
5773
+ ok,
5774
+ id: readString(data, "id") ?? "",
5775
+ ...!ok ? { errorKind: "rejected" } : {}
5617
5776
  };
5618
5777
  }
5619
5778
  async function postWithSessionToken(path, payload) {
5620
5779
  const idempotencyKey = createIdempotencyKey();
5621
5780
  let session = await bootstrapSession();
5622
- if (!session) return { ok: false, id: "" };
5781
+ if (!session) return { ok: false, id: "", errorKind: "network" };
5623
5782
  let response;
5624
5783
  try {
5625
5784
  response = await sendAnnotationRequest(session, path, payload, idempotencyKey);
5626
5785
  } catch {
5627
- return { ok: false, id: "" };
5786
+ return { ok: false, id: "", errorKind: "network" };
5628
5787
  }
5629
5788
  if (response.status === 401 || response.status === 403) {
5630
5789
  session = await refreshSessionToken(session) ?? await bootstrapSession(true);
5631
- if (!session) return { ok: false, id: "" };
5790
+ if (!session) return { ok: false, id: "", errorKind: "network" };
5632
5791
  try {
5633
5792
  response = await sendAnnotationRequest(session, path, payload, idempotencyKey);
5634
5793
  } catch {
5635
- return { ok: false, id: "" };
5794
+ return { ok: false, id: "", errorKind: "network" };
5636
5795
  }
5637
5796
  }
5638
5797
  return toClientResponse(response);
@@ -5685,8 +5844,10 @@ function buildLocatorPayload(locator) {
5685
5844
  }
5686
5845
  function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrentToSession, removeSessionEdit, deleteComment }) {
5687
5846
  const [agentAvailable, setAgentAvailable] = React5.useState(false);
5847
+ const [lastSendFailure, setLastSendFailure] = React5.useState(null);
5688
5848
  const isMountedRef = React5.useRef(true);
5689
5849
  React5.useEffect(() => {
5850
+ isMountedRef.current = true;
5690
5851
  return () => {
5691
5852
  isMountedRef.current = false;
5692
5853
  };
@@ -5743,7 +5904,7 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5743
5904
  const resolvedPlanContext = movePlanContext ?? buildMovePlanContext(editsForPlan);
5744
5905
  const includeBatchMoveEnvelope = Boolean(options?.includeBatchMoveEnvelope && sessionEdit.move);
5745
5906
  const isBatchSend = Boolean(allEdits && allEdits.length > 1);
5746
- const exportMarkdown = sessionEdit.move ? buildSessionExport(
5907
+ const exportMarkdown = sessionEdit.move || sessionEdit.deleted ? buildSessionExport(
5747
5908
  includeBatchMoveEnvelope ? editsForPlan : [sessionEdit],
5748
5909
  [],
5749
5910
  {
@@ -5759,7 +5920,7 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5759
5920
  }));
5760
5921
  const moveIntent = sessionEdit.move ? getMoveIntentForEdit(sessionEdit, resolvedPlanContext) : null;
5761
5922
  const movePlan = includeBatchMoveEnvelope ? resolvedPlanContext.movePlan : null;
5762
- const hasMeaningfulPayload = changes.length > 0 || sessionEdit.textEdit != null || moveIntent != null;
5923
+ const hasMeaningfulPayload = changes.length > 0 || sessionEdit.textEdit != null || moveIntent != null || Boolean(sessionEdit.deleted);
5763
5924
  if (!hasMeaningfulPayload) return true;
5764
5925
  const profile = getExportContentProfile(
5765
5926
  [sessionEdit],
@@ -5773,17 +5934,44 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5773
5934
  textChange: sessionEdit.textEdit ?? null,
5774
5935
  moveIntent,
5775
5936
  ...movePlan ? { movePlan } : {},
5937
+ ...sessionEdit.deleted ? { deleted: true } : {},
5776
5938
  exportMarkdown: withInstruction(profile, exportMarkdown)
5777
5939
  });
5778
5940
  if (result.ok) {
5779
5941
  removeSessionEdit(sessionEdit.element);
5942
+ updateAgentAvailability(true);
5943
+ } else {
5944
+ const kind = result.errorKind === "network" ? "unreachable" : "rejected";
5945
+ updateAgentAvailability(result.errorKind === "network" ? false : true);
5946
+ if (options?._isBatchCall) {
5947
+ options._batchFailKinds?.push(result.errorKind ?? "rejected");
5948
+ } else if (isMountedRef.current) {
5949
+ setLastSendFailure({
5950
+ reason: kind,
5951
+ failedEditElements: [sessionEdit.element],
5952
+ failedCommentIds: [],
5953
+ at: Date.now()
5954
+ });
5955
+ }
5780
5956
  }
5781
- return updateAgentAvailability(result.ok);
5782
- } catch {
5783
- return updateAgentAvailability(false);
5957
+ return result.ok;
5958
+ } catch (err) {
5959
+ updateAgentAvailability(false);
5960
+ if (options?._isBatchCall) {
5961
+ throw err;
5962
+ }
5963
+ if (isMountedRef.current) {
5964
+ setLastSendFailure({
5965
+ reason: "unreachable",
5966
+ failedEditElements: [sessionEdit.element],
5967
+ failedCommentIds: [],
5968
+ at: Date.now()
5969
+ });
5970
+ }
5971
+ return false;
5784
5972
  }
5785
5973
  }, [updateAgentAvailability, removeSessionEdit]);
5786
- const sendSessionCommentToAgent = React5.useCallback(async (comment) => {
5974
+ const sendSessionCommentToAgent = React5.useCallback(async (comment, _options) => {
5787
5975
  const exportMarkdown = buildCommentExport(comment.locator, comment.text, comment.replies);
5788
5976
  const commentProfile = { hasCssEdits: false, hasTextEdits: false, hasMoves: false, hasComments: true };
5789
5977
  try {
@@ -5795,13 +5983,40 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5795
5983
  });
5796
5984
  if (result.ok) {
5797
5985
  deleteComment(comment.id);
5986
+ updateAgentAvailability(true);
5987
+ } else {
5988
+ const kind = result.errorKind === "network" ? "unreachable" : "rejected";
5989
+ updateAgentAvailability(result.errorKind === "network" ? false : true);
5990
+ if (_options?._isBatchCall) {
5991
+ _options._batchFailKinds?.push(result.errorKind ?? "rejected");
5992
+ } else if (isMountedRef.current) {
5993
+ setLastSendFailure({
5994
+ reason: kind,
5995
+ failedEditElements: [],
5996
+ failedCommentIds: [comment.id],
5997
+ at: Date.now()
5998
+ });
5999
+ }
5798
6000
  }
5799
- return updateAgentAvailability(result.ok);
5800
- } catch {
5801
- return updateAgentAvailability(false);
6001
+ return result.ok;
6002
+ } catch (err) {
6003
+ updateAgentAvailability(false);
6004
+ if (_options?._isBatchCall) {
6005
+ throw err;
6006
+ }
6007
+ if (isMountedRef.current) {
6008
+ setLastSendFailure({
6009
+ reason: "unreachable",
6010
+ failedEditElements: [],
6011
+ failedCommentIds: [comment.id],
6012
+ at: Date.now()
6013
+ });
6014
+ }
6015
+ return false;
5802
6016
  }
5803
6017
  }, [updateAgentAvailability, deleteComment]);
5804
6018
  const sendEditToAgent2 = React5.useCallback(async () => {
6019
+ if (isMountedRef.current) setLastSendFailure(null);
5805
6020
  const current = stateRef.current;
5806
6021
  if (current.selectedElements.length > 1) {
5807
6022
  saveCurrentToSession();
@@ -5836,9 +6051,28 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5836
6051
  removeSessionEdit(el);
5837
6052
  }
5838
6053
  }
6054
+ updateAgentAvailability(true);
6055
+ } else {
6056
+ updateAgentAvailability(result.errorKind === "network" ? false : true);
6057
+ if (isMountedRef.current) {
6058
+ setLastSendFailure({
6059
+ reason: result.errorKind === "network" ? "unreachable" : "rejected",
6060
+ failedEditElements: editsWithChanges.map((e) => e.element),
6061
+ failedCommentIds: [],
6062
+ at: Date.now()
6063
+ });
6064
+ }
5839
6065
  }
5840
- return updateAgentAvailability(result.ok);
6066
+ return result.ok;
5841
6067
  } catch {
6068
+ if (isMountedRef.current) {
6069
+ setLastSendFailure({
6070
+ reason: "unreachable",
6071
+ failedEditElements: editsWithChanges.map((e) => e.element),
6072
+ failedCommentIds: [],
6073
+ at: Date.now()
6074
+ });
6075
+ }
5842
6076
  return updateAgentAvailability(false);
5843
6077
  }
5844
6078
  }
@@ -5861,11 +6095,13 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5861
6095
  return sendSessionEditToAgent(editToSend);
5862
6096
  }, [canSendEditToAgent, sendSessionEditToAgent, saveCurrentToSession]);
5863
6097
  const sendCommentToAgent2 = React5.useCallback(async (id) => {
6098
+ if (isMountedRef.current) setLastSendFailure(null);
5864
6099
  const comment = stateRef.current.comments.find((c) => c.id === id);
5865
6100
  if (!comment) return false;
5866
6101
  return sendSessionCommentToAgent(comment);
5867
6102
  }, [sendSessionCommentToAgent]);
5868
6103
  const sendAllSessionItemsToAgent = React5.useCallback(async () => {
6104
+ if (isMountedRef.current) setLastSendFailure(null);
5869
6105
  const items = getSessionItems();
5870
6106
  const current = stateRef.current;
5871
6107
  const contextOnlyBlocks = getContextOnlyBlocks(current.selectedElements, items);
@@ -5874,25 +6110,44 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5874
6110
  const movePlanContext = buildMovePlanContext(allEdits);
5875
6111
  let moveEnvelopeSent = false;
5876
6112
  let allSucceeded = true;
6113
+ const failedEditElements = [];
6114
+ const failedCommentIds = [];
6115
+ let anyThrown = false;
6116
+ const batchFailKinds = [];
5877
6117
  for (const item of items) {
5878
6118
  let succeeded;
5879
6119
  if (item.type === "edit") {
5880
6120
  const hasMoveIntent = Boolean(item.edit.move && getMoveIntentForEdit(item.edit, movePlanContext));
5881
6121
  const includeBatchMoveEnvelope = hasMoveIntent && !moveEnvelopeSent;
5882
- succeeded = await sendSessionEditToAgent(
5883
- item.edit,
5884
- allEdits,
5885
- movePlanContext,
5886
- { includeBatchMoveEnvelope }
5887
- );
6122
+ try {
6123
+ succeeded = await sendSessionEditToAgent(
6124
+ item.edit,
6125
+ allEdits,
6126
+ movePlanContext,
6127
+ { includeBatchMoveEnvelope, _isBatchCall: true, _batchFailKinds: batchFailKinds }
6128
+ );
6129
+ if (!succeeded) failedEditElements.push(item.edit.element);
6130
+ } catch {
6131
+ succeeded = false;
6132
+ anyThrown = true;
6133
+ failedEditElements.push(item.edit.element);
6134
+ }
5888
6135
  if (includeBatchMoveEnvelope) moveEnvelopeSent = true;
5889
6136
  } else {
5890
- succeeded = await sendSessionCommentToAgent(item.comment);
6137
+ try {
6138
+ succeeded = await sendSessionCommentToAgent(item.comment, { _isBatchCall: true, _batchFailKinds: batchFailKinds });
6139
+ if (!succeeded) failedCommentIds.push(item.comment.id);
6140
+ } catch {
6141
+ succeeded = false;
6142
+ anyThrown = true;
6143
+ failedCommentIds.push(item.comment.id);
6144
+ }
5891
6145
  }
5892
6146
  if (!succeeded) {
5893
6147
  allSucceeded = false;
5894
6148
  }
5895
6149
  }
6150
+ let contextBlockFailed = false;
5896
6151
  if (contextOnlyBlocks.length > 0) {
5897
6152
  const primaryEl = current.selectedElements.find(
5898
6153
  (el) => el.isConnected && !allEdits.some((e) => e.element === el)
@@ -5906,16 +6161,39 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5906
6161
  moveIntent: null,
5907
6162
  exportMarkdown: contextOnlyBlocks.join("\n\n")
5908
6163
  });
5909
- if (!result.ok) allSucceeded = false;
6164
+ if (result.ok) {
6165
+ updateAgentAvailability(true);
6166
+ } else {
6167
+ updateAgentAvailability(result.errorKind === "network" ? false : true);
6168
+ allSucceeded = false;
6169
+ contextBlockFailed = true;
6170
+ }
5910
6171
  } catch {
6172
+ updateAgentAvailability(false);
5911
6173
  allSucceeded = false;
6174
+ anyThrown = true;
6175
+ contextBlockFailed = true;
5912
6176
  }
5913
6177
  }
5914
6178
  }
6179
+ if (!allSucceeded && isMountedRef.current) {
6180
+ const reason = anyThrown || batchFailKinds.includes("network") ? "unreachable" : "rejected";
6181
+ setLastSendFailure({
6182
+ reason,
6183
+ failedEditElements,
6184
+ failedCommentIds,
6185
+ at: Date.now()
6186
+ });
6187
+ }
5915
6188
  return allSucceeded;
5916
- }, [getSessionItems, sendSessionCommentToAgent, sendSessionEditToAgent]);
6189
+ }, [getSessionItems, sendSessionCommentToAgent, sendSessionEditToAgent, updateAgentAvailability]);
6190
+ const clearSendFailure = React5.useCallback(() => {
6191
+ if (isMountedRef.current) setLastSendFailure(null);
6192
+ }, []);
5917
6193
  return {
5918
6194
  agentAvailable,
6195
+ lastSendFailure,
6196
+ clearSendFailure,
5919
6197
  canSendEditToAgent,
5920
6198
  sendEditToAgent: sendEditToAgent2,
5921
6199
  sendCommentToAgent: sendCommentToAgent2,
@@ -5962,7 +6240,9 @@ function useKeyboardShortcuts({
5962
6240
  const s = stateRef.current;
5963
6241
  const undoShortcutPressed = usesMetaForUndo ? e.metaKey && !e.ctrlKey && !e.altKey : e.ctrlKey && !e.metaKey && !e.altKey;
5964
6242
  if (undoShortcutPressed && e.key === "z" && !e.shiftKey) {
6243
+ if (!s.editModeActive) return;
5965
6244
  if (s.textEditingElement) return;
6245
+ if (isInputFocused()) return;
5966
6246
  e.preventDefault();
5967
6247
  undo();
5968
6248
  return;
@@ -6017,6 +6297,11 @@ function useKeyboardShortcuts({
6017
6297
  insertElement("frame");
6018
6298
  return;
6019
6299
  }
6300
+ if (lowerKey === "t") {
6301
+ e.preventDefault();
6302
+ insertElement("text");
6303
+ return;
6304
+ }
6020
6305
  if (lowerKey === "d") {
6021
6306
  e.preventDefault();
6022
6307
  insertElement("div");
@@ -6679,6 +6964,10 @@ function DirectEditProvider({ children }) {
6679
6964
  const undoStackRef = React8.useRef([]);
6680
6965
  const sessionEditsRef = React8.useRef(/* @__PURE__ */ new Map());
6681
6966
  const removedSessionEditsRef = React8.useRef(/* @__PURE__ */ new WeakSet());
6967
+ const commentDraftTextRef = React8.useRef("");
6968
+ const commentDraftBlockedHandlerRef = React8.useRef(null);
6969
+ const onElementInsertedRef = React8.useRef(null);
6970
+ const textInsertRafRef = React8.useRef(null);
6682
6971
  const [sessionEditCount, setSessionEditCount] = React8.useState(0);
6683
6972
  const stateRef = React8.useRef(state);
6684
6973
  React8.useEffect(() => {
@@ -6713,12 +7002,13 @@ function DirectEditProvider({ children }) {
6713
7002
  clearSessionEdits,
6714
7003
  groupSelection,
6715
7004
  deleteSelection,
6716
- insertElement
7005
+ insertElement: insertElementBase
6717
7006
  } = useSessionManager({
6718
7007
  stateRef,
6719
7008
  sessionEditsRef,
6720
7009
  removedSessionEditsRef,
6721
7010
  undoStackRef,
7011
+ onElementInsertedRef,
6722
7012
  pushUndo,
6723
7013
  setState,
6724
7014
  setSessionEditCount
@@ -6768,6 +7058,41 @@ function DirectEditProvider({ children }) {
6768
7058
  syncSessionItemCount,
6769
7059
  setState
6770
7060
  });
7061
+ React8.useEffect(() => {
7062
+ onElementInsertedRef.current = (kind, element) => {
7063
+ if (kind === "text") {
7064
+ if (textInsertRafRef.current) {
7065
+ cancelAnimationFrame(textInsertRafRef.current);
7066
+ }
7067
+ textInsertRafRef.current = requestAnimationFrame(() => {
7068
+ textInsertRafRef.current = null;
7069
+ if (element.isConnected) {
7070
+ startTextEditing(element);
7071
+ }
7072
+ });
7073
+ }
7074
+ };
7075
+ return () => {
7076
+ if (textInsertRafRef.current) {
7077
+ cancelAnimationFrame(textInsertRafRef.current);
7078
+ textInsertRafRef.current = null;
7079
+ }
7080
+ onElementInsertedRef.current = null;
7081
+ };
7082
+ }, [startTextEditing]);
7083
+ const setCommentDraftText = React8.useCallback((text) => {
7084
+ commentDraftTextRef.current = text;
7085
+ }, []);
7086
+ const setCommentDraftBlockedHandler = React8.useCallback((handler) => {
7087
+ commentDraftBlockedHandlerRef.current = handler;
7088
+ }, []);
7089
+ const hasPendingCommentDraft = React8.useCallback(() => {
7090
+ const activeCommentId = stateRef.current.activeCommentId;
7091
+ if (!activeCommentId) return false;
7092
+ const active = stateRef.current.comments.find((comment) => comment.id === activeCommentId);
7093
+ if (!active) return false;
7094
+ return active.text.trim().length === 0 && commentDraftTextRef.current.trim().length > 0;
7095
+ }, []);
6771
7096
  const { toggleCanvas, enterCanvas, exitCanvas, setCanvasZoom, fitCanvasToViewport, zoomCanvasTo100 } = useCanvas({
6772
7097
  stateRef,
6773
7098
  setState
@@ -6904,6 +7229,8 @@ function DirectEditProvider({ children }) {
6904
7229
  }, [state.editModeActive]);
6905
7230
  const {
6906
7231
  agentAvailable,
7232
+ lastSendFailure,
7233
+ clearSendFailure,
6907
7234
  canSendEditToAgent,
6908
7235
  sendEditToAgent: sendEditToAgent2,
6909
7236
  sendCommentToAgent: sendCommentToAgent2,
@@ -6930,6 +7257,16 @@ function DirectEditProvider({ children }) {
6930
7257
  } catch {
6931
7258
  }
6932
7259
  }, []);
7260
+ const insertElement = React8.useCallback((kind) => {
7261
+ if (hasPendingCommentDraft()) {
7262
+ commentDraftBlockedHandlerRef.current?.();
7263
+ return;
7264
+ }
7265
+ if (stateRef.current.textEditingElement) {
7266
+ commitTextEditing();
7267
+ }
7268
+ insertElementBase(kind);
7269
+ }, [commitTextEditing, hasPendingCommentDraft, insertElementBase, stateRef]);
6933
7270
  useKeyboardShortcuts({
6934
7271
  stateRef,
6935
7272
  toggleEditMode,
@@ -6959,9 +7296,10 @@ function DirectEditProvider({ children }) {
6959
7296
  const stateContextValue = React8.useMemo(() => ({
6960
7297
  ...state,
6961
7298
  agentAvailable,
7299
+ lastSendFailure,
6962
7300
  sessionEditCount,
6963
7301
  multiSelectContextCount
6964
- }), [agentAvailable, state, sessionEditCount, multiSelectContextCount]);
7302
+ }), [agentAvailable, lastSendFailure, state, sessionEditCount, multiSelectContextCount]);
6965
7303
  const actionsContextValue = React8.useMemo(() => ({
6966
7304
  selectElement,
6967
7305
  selectElements,
@@ -6984,6 +7322,7 @@ function DirectEditProvider({ children }) {
6984
7322
  updateTypographyProperty,
6985
7323
  resetToOriginal,
6986
7324
  exportEdits,
7325
+ clearSendFailure,
6987
7326
  canSendEditToAgent,
6988
7327
  sendEditToAgent: sendEditToAgent2,
6989
7328
  sendAllSessionItemsToAgent,
@@ -7008,6 +7347,8 @@ function DirectEditProvider({ children }) {
7008
7347
  removeSessionEdit,
7009
7348
  startTextEditing,
7010
7349
  commitTextEditing,
7350
+ setCommentDraftText,
7351
+ setCommentDraftBlockedHandler,
7011
7352
  groupSelection,
7012
7353
  deleteSelection,
7013
7354
  insertElement,
@@ -7037,6 +7378,7 @@ function DirectEditProvider({ children }) {
7037
7378
  updateTypographyProperty,
7038
7379
  resetToOriginal,
7039
7380
  exportEdits,
7381
+ clearSendFailure,
7040
7382
  canSendEditToAgent,
7041
7383
  sendEditToAgent2,
7042
7384
  sendAllSessionItemsToAgent,
@@ -7061,6 +7403,8 @@ function DirectEditProvider({ children }) {
7061
7403
  removeSessionEdit,
7062
7404
  startTextEditing,
7063
7405
  commitTextEditing,
7406
+ setCommentDraftText,
7407
+ setCommentDraftBlockedHandler,
7064
7408
  groupSelection,
7065
7409
  deleteSelection,
7066
7410
  insertElement,
@@ -7493,6 +7837,7 @@ function useMove({ onMoveComplete }) {
7493
7837
  { x: 0, y: 0, scaleX: 1, scaleY: 1 }
7494
7838
  );
7495
7839
  const originalTransformRef = React12.useRef("");
7840
+ const composeBaseRef = React12.useRef("");
7496
7841
  const reorderPreviewRef = React12.useRef(/* @__PURE__ */ new Map());
7497
7842
  React12.useEffect(() => {
7498
7843
  dragStateRef.current = dragState;
@@ -7587,6 +7932,7 @@ function useMove({ onMoveComplete }) {
7587
7932
  }
7588
7933
  clearReorderPreview();
7589
7934
  originalTransformRef.current = "";
7935
+ composeBaseRef.current = "";
7590
7936
  initialRectRef.current = { x: 0, y: 0, scaleX: 1, scaleY: 1 };
7591
7937
  dragOptionsRef.current = DEFAULT_DRAG_OPTIONS;
7592
7938
  dragGuardRef.current.deactivate();
@@ -7608,6 +7954,7 @@ function useMove({ onMoveComplete }) {
7608
7954
  draggedElement.style.opacity = "";
7609
7955
  clearReorderPreview();
7610
7956
  originalTransformRef.current = "";
7957
+ composeBaseRef.current = "";
7611
7958
  initialRectRef.current = { x: 0, y: 0, scaleX: 1, scaleY: 1 };
7612
7959
  const dragMode = dragOptionsRef.current.mode;
7613
7960
  dragOptionsRef.current = DEFAULT_DRAG_OPTIONS;
@@ -7668,7 +8015,14 @@ function useMove({ onMoveComplete }) {
7668
8015
  scaleX: element.offsetWidth > 0 ? rect.width / element.offsetWidth : 1,
7669
8016
  scaleY: element.offsetHeight > 0 ? rect.height / element.offsetHeight : 1
7670
8017
  };
7671
- originalTransformRef.current = element.style.transform;
8018
+ const inlineTransform = element.style.transform;
8019
+ originalTransformRef.current = inlineTransform;
8020
+ if (inlineTransform) {
8021
+ composeBaseRef.current = inlineTransform;
8022
+ } else {
8023
+ const computed = getComputedStyle(element).transform;
8024
+ composeBaseRef.current = computed && computed !== "none" ? computed : "";
8025
+ }
7672
8026
  dragGuardRef.current.activate();
7673
8027
  setDragState({
7674
8028
  isDragging: true,
@@ -7701,7 +8055,8 @@ function useMove({ onMoveComplete }) {
7701
8055
  const { x, y, scaleX, scaleY } = initialRectRef.current;
7702
8056
  const dx = (e.clientX - dragOffset.x - x) / scaleX;
7703
8057
  const dy = (e.clientY - dragOffset.y - y) / scaleY;
7704
- draggedElement.style.transform = `translate(${dx}px, ${dy}px)`;
8058
+ const base = composeBaseRef.current;
8059
+ draggedElement.style.transform = base ? `translate(${dx}px, ${dy}px) ${base}` : `translate(${dx}px, ${dy}px)`;
7705
8060
  }
7706
8061
  if (dragOptionsRef.current.mode === "position") {
7707
8062
  let container2 = findLayoutContainerAtPoint(
@@ -8568,6 +8923,7 @@ function SelectedCommentComposer({
8568
8923
  comment,
8569
8924
  attentionNonce,
8570
8925
  draftRef,
8926
+ onDraftTextChange,
8571
8927
  onSubmit,
8572
8928
  onCancel
8573
8929
  }) {
@@ -8613,7 +8969,8 @@ function SelectedCommentComposer({
8613
8969
  }, [attentionNonce]);
8614
8970
  React17.useEffect(() => {
8615
8971
  if (draftRef) draftRef.current = text;
8616
- }, [draftRef, text]);
8972
+ onDraftTextChange?.(text);
8973
+ }, [draftRef, onDraftTextChange, text]);
8617
8974
  const submit = React17.useCallback(() => {
8618
8975
  const nextText = text.trim();
8619
8976
  if (!nextText) return;
@@ -11968,6 +12325,7 @@ function PanelFooter({
11968
12325
  onExportEdits,
11969
12326
  onSendToAgent,
11970
12327
  showSendButton = true,
12328
+ sendFailureReason,
11971
12329
  onPointerDown,
11972
12330
  onPointerMove,
11973
12331
  onPointerUp,
@@ -11976,6 +12334,13 @@ function PanelFooter({
11976
12334
  const [copied, setCopied] = React30.useState(false);
11977
12335
  const [copyError, setCopyError] = React30.useState(false);
11978
12336
  const [sendStatus, setSendStatus] = React30.useState("idle");
12337
+ const prevCanTriggerSendRef = React30.useRef(canTriggerSend);
12338
+ React30.useEffect(() => {
12339
+ if (prevCanTriggerSendRef.current !== canTriggerSend) {
12340
+ prevCanTriggerSendRef.current = canTriggerSend;
12341
+ setSendStatus("idle");
12342
+ }
12343
+ }, [canTriggerSend]);
11979
12344
  const handleCopy = async () => {
11980
12345
  if (!onExportEdits) return;
11981
12346
  const success = await onExportEdits();
@@ -11989,6 +12354,7 @@ function PanelFooter({
11989
12354
  setCopyError(true);
11990
12355
  setTimeout(() => setCopyError(false), 2e3);
11991
12356
  };
12357
+ const sendTooltipLabel = sendStatus === "offline" ? sendFailureReason === "unreachable" ? "Agent unreachable \u2014 click to retry" : "Agent rejected the edit \u2014 click to retry" : "Apply changes via agent";
11992
12358
  const handleSendToAgent = async () => {
11993
12359
  if (!onSendToAgent || sendStatus === "sending") return;
11994
12360
  setSendStatus("sending");
@@ -11998,7 +12364,6 @@ function PanelFooter({
11998
12364
  setTimeout(() => setSendStatus("idle"), 2e3);
11999
12365
  } else {
12000
12366
  setSendStatus("offline");
12001
- setTimeout(() => setSendStatus("idle"), 2e3);
12002
12367
  }
12003
12368
  };
12004
12369
  return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
@@ -12026,7 +12391,7 @@ function PanelFooter({
12026
12391
  children: copyError ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react11.X, { className: "text-red-500" }) : copied ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react11.Check, { className: "text-green-500" }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react11.Copy, {})
12027
12392
  }
12028
12393
  ) }),
12029
- showSendButton && onSendToAgent && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: !canTriggerSend || sendStatus === "sending" ? "cursor-not-allowed" : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Tip, { label: "Apply changes via agent", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
12394
+ showSendButton && onSendToAgent && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: !canTriggerSend || sendStatus === "sending" ? "cursor-not-allowed" : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Tip, { label: sendTooltipLabel, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
12030
12395
  Button,
12031
12396
  {
12032
12397
  variant: "outline",
@@ -12721,6 +13086,7 @@ function DirectEditPanelInner({
12721
13086
  onSendToAgent,
12722
13087
  canSendToAgent = false,
12723
13088
  showSendButton = true,
13089
+ sendFailureReason,
12724
13090
  className,
12725
13091
  style,
12726
13092
  panelRef,
@@ -12874,6 +13240,7 @@ function DirectEditPanelInner({
12874
13240
  onExportEdits,
12875
13241
  onSendToAgent,
12876
13242
  showSendButton,
13243
+ sendFailureReason,
12877
13244
  onPointerDown: onHeaderPointerDown,
12878
13245
  onPointerMove: onHeaderPointerMove,
12879
13246
  onPointerUp: onHeaderPointerUp,
@@ -12908,7 +13275,8 @@ function DirectEditPanelContent() {
12908
13275
  comments,
12909
13276
  activeCommentId,
12910
13277
  textEditingElement,
12911
- agentAvailable
13278
+ agentAvailable,
13279
+ lastSendFailure
12912
13280
  } = useDirectEditState();
12913
13281
  const {
12914
13282
  selectParent,
@@ -12940,7 +13308,9 @@ function DirectEditPanelContent() {
12940
13308
  setActiveCommentId,
12941
13309
  startTextEditing,
12942
13310
  toggleEditMode,
12943
- deleteSelection
13311
+ deleteSelection,
13312
+ setCommentDraftText,
13313
+ setCommentDraftBlockedHandler
12944
13314
  } = useDirectEditActions();
12945
13315
  const {
12946
13316
  position,
@@ -12962,7 +13332,8 @@ function DirectEditPanelContent() {
12962
13332
  });
12963
13333
  React34.useEffect(() => {
12964
13334
  commentDraftRef.current = "";
12965
- }, [activeCommentId]);
13335
+ setCommentDraftText("");
13336
+ }, [activeCommentId, setCommentDraftText]);
12966
13337
  const activeDraftComment = React34.useMemo(() => {
12967
13338
  if (!commentTargetElement || !activeCommentId) return null;
12968
13339
  const active = comments.find((comment) => comment.id === activeCommentId);
@@ -12982,6 +13353,18 @@ function DirectEditPanelContent() {
12982
13353
  const triggerCommentInputAttention = React34.useCallback((commentId) => {
12983
13354
  setCommentInputAttention((prev) => prev?.commentId === commentId ? { commentId, nonce: prev.nonce + 1 } : { commentId, nonce: 1 });
12984
13355
  }, []);
13356
+ React34.useEffect(() => {
13357
+ if (!activeCommentId) {
13358
+ setCommentDraftBlockedHandler(null);
13359
+ return;
13360
+ }
13361
+ setCommentDraftBlockedHandler(() => {
13362
+ triggerCommentInputAttention(activeCommentId);
13363
+ });
13364
+ return () => {
13365
+ setCommentDraftBlockedHandler(null);
13366
+ };
13367
+ }, [activeCommentId, setCommentDraftBlockedHandler, triggerCommentInputAttention]);
12985
13368
  const hasPendingCommentDraft = React34.useCallback((nextCommentId = null) => {
12986
13369
  if (!activeCommentId) return false;
12987
13370
  if (nextCommentId && nextCommentId === activeCommentId) return false;
@@ -13091,6 +13474,7 @@ function DirectEditPanelContent() {
13091
13474
  comment: activeDraftComment,
13092
13475
  attentionNonce: commentInputAttention?.commentId === activeDraftComment.id ? commentInputAttention.nonce : 0,
13093
13476
  draftRef: commentDraftRef,
13477
+ onDraftTextChange: setCommentDraftText,
13094
13478
  onSubmit: (text) => submitCommentDraft(activeDraftComment.id, text),
13095
13479
  onCancel: () => handleSetActiveComment(null)
13096
13480
  }
@@ -14240,7 +14624,8 @@ function EditsPopover({
14240
14624
  onExportAllEdits,
14241
14625
  onClearSessionEdits,
14242
14626
  onRemoveSessionEdit,
14243
- onDeleteComment
14627
+ onDeleteComment,
14628
+ sendFailure
14244
14629
  }) {
14245
14630
  const [copied, setCopied] = React38.useState(false);
14246
14631
  const editsPopupRef = React38.useRef(null);
@@ -14253,6 +14638,7 @@ function EditsPopover({
14253
14638
  const visibleItems = React38.useMemo(() => {
14254
14639
  return editsSnapshot.filter((item) => {
14255
14640
  if (item.type === "comment") return true;
14641
+ if (item.edit.deleted) return true;
14256
14642
  if (!item.edit.move) return true;
14257
14643
  const moveIntent = getMoveIntentForEdit(item.edit, movePlanContext);
14258
14644
  const hasStyleOrText = Object.keys(item.edit.pendingStyles).length > 0 || item.edit.textEdit != null;
@@ -14357,12 +14743,15 @@ ${text}`);
14357
14743
  visibleItems.length === 0 && multiSelectContextItems.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "px-3 pb-3 pt-1 text-xs text-muted-foreground", children: "No edits or comments yet." }) : /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "max-h-[240px] overflow-y-auto px-1 py-1", children: [
14358
14744
  visibleItems.map((item, i) => {
14359
14745
  const isEdit = item.type === "edit";
14746
+ const isDeleted = isEdit && Boolean(item.edit.deleted);
14360
14747
  const moveIntent = isEdit && item.edit.move ? getMoveIntentForEdit(item.edit, movePlanContext) : null;
14361
14748
  const isMoved = Boolean(moveIntent);
14362
14749
  const locator = isEdit ? item.edit.locator : item.comment.locator;
14363
14750
  const componentName = locator.reactStack[0]?.name ?? locator.tagName;
14364
14751
  let valueSummary = "";
14365
- if (isEdit) {
14752
+ if (isEdit && isDeleted) {
14753
+ valueSummary = locator.textPreview || locator.domSelector || locator.tagName;
14754
+ } else if (isEdit) {
14366
14755
  const entries = Object.entries(item.edit.pendingStyles);
14367
14756
  const editValues = [];
14368
14757
  for (const [prop, value] of entries) {
@@ -14383,6 +14772,7 @@ ${text}`);
14383
14772
  }
14384
14773
  valueSummary = commentValues.join(", ");
14385
14774
  }
14775
+ const failed = isEdit ? sendFailure?.failedEditElements.includes(item.edit.element) : sendFailure?.failedCommentIds.includes(item.comment.id);
14386
14776
  return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
14387
14777
  "div",
14388
14778
  {
@@ -14401,13 +14791,16 @@ ${text}`);
14401
14791
  },
14402
14792
  children: [
14403
14793
  /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "min-w-0 flex flex-1 flex-col items-start gap-[4px]", children: [
14404
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Badge, { variant: "secondary", className: "h-6 shrink-0 px-1.5 text-xs", children: [
14405
- "@<",
14406
- componentName,
14407
- ">"
14794
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-center gap-1", children: [
14795
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Badge, { variant: "secondary", className: "h-6 shrink-0 px-1.5 text-xs", children: [
14796
+ "@<",
14797
+ componentName,
14798
+ ">"
14799
+ ] }),
14800
+ failed && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Badge, { variant: "default", className: "h-6 shrink-0 px-1.5 text-xs bg-red-500 text-white border-transparent", children: "Failed" })
14408
14801
  ] }),
14409
14802
  /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("span", { className: "min-w-0 max-w-full truncate text-xs text-muted-foreground", children: [
14410
- isEdit ? isMoved ? "moved: " : "edit: " : "comment: ",
14803
+ isEdit ? isDeleted ? "deleted: " : isMoved ? "moved: " : "edit: " : "comment: ",
14411
14804
  truncateText(valueSummary, 128)
14412
14805
  ] })
14413
14806
  ] }),
@@ -14659,6 +15052,7 @@ function SettingsPopover({
14659
15052
  { label: "Undo", keys: isMac ? [/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react16.Command, { className: "size-2.5" }, "cmd"), "Z"] : ["Ctrl", "Z"] },
14660
15053
  { label: "Group selection", keys: isMac ? [/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react16.Command, { className: "size-2.5" }, "cmd"), "G"] : ["Ctrl", "G"] },
14661
15054
  { label: "Add frame", keys: ["F"] },
15055
+ { label: "Add text", keys: ["T"] },
14662
15056
  { label: "Add div", keys: ["D"] },
14663
15057
  { label: "Add to selection", keys: [/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react16.ArrowBigUp, { className: "size-3" }, "shift"), "Click"] },
14664
15058
  { label: "Marquee select", keys: ["Drag"] },
@@ -14701,6 +15095,8 @@ function DirectEditToolbarInner({
14701
15095
  onExportAllEdits,
14702
15096
  onSendAllToAgents,
14703
15097
  agentAvailable = true,
15098
+ sendFailureReason,
15099
+ sendFailure,
14704
15100
  onClearSessionEdits,
14705
15101
  onRemoveSessionEdit,
14706
15102
  onDeleteComment,
@@ -14710,7 +15106,8 @@ function DirectEditToolbarInner({
14710
15106
  onToggleCanvas,
14711
15107
  onSetCanvasZoom,
14712
15108
  onZoomTo100,
14713
- onFitToViewport
15109
+ onFitToViewport,
15110
+ onInsertElement
14714
15111
  }) {
14715
15112
  const container = usePortalContainer();
14716
15113
  const toolbarRef = React40.useRef(null);
@@ -14719,7 +15116,8 @@ function DirectEditToolbarInner({
14719
15116
  const [activePopover, setActivePopover] = React40.useState(null);
14720
15117
  const [applyStatus, setApplyStatus] = React40.useState("idle");
14721
15118
  const applyTimerRef = React40.useRef(null);
14722
- const showApplyButton = agentAvailable && Boolean(onSendAllToAgents);
15119
+ const showApplyButton = (agentAvailable || applyStatus !== "idle") && Boolean(onSendAllToAgents);
15120
+ const showInsertButtons = Boolean(onInsertElement);
14723
15121
  const totalItemCount = sessionEditCount + multiSelectCount;
14724
15122
  const sizeCacheRef = React40.useRef({});
14725
15123
  React40.useEffect(() => {
@@ -14773,6 +15171,16 @@ function DirectEditToolbarInner({
14773
15171
  setApplyStatus("idle");
14774
15172
  }, 2e3);
14775
15173
  }, []);
15174
+ const prevTotalItemCountRef = React40.useRef(totalItemCount);
15175
+ React40.useEffect(() => {
15176
+ if (prevTotalItemCountRef.current !== totalItemCount) {
15177
+ prevTotalItemCountRef.current = totalItemCount;
15178
+ if (applyStatus === "offline") {
15179
+ setApplyStatus("idle");
15180
+ }
15181
+ }
15182
+ }, [totalItemCount, applyStatus]);
15183
+ const applyTooltipLabel = applyStatus === "offline" ? sendFailureReason === "unreachable" ? "Agent unreachable \u2014 click to retry" : "Agent rejected the edit \u2014 click to retry" : "Apply all changes via agent";
14776
15184
  const handleApplyAll = React40.useCallback(async () => {
14777
15185
  if (!onSendAllToAgents || totalItemCount === 0 || applyStatus === "sending") return;
14778
15186
  setApplyStatus("sending");
@@ -14782,8 +15190,12 @@ function DirectEditToolbarInner({
14782
15190
  } catch {
14783
15191
  success = false;
14784
15192
  }
14785
- setApplyStatus(success ? "sent" : "offline");
14786
- scheduleApplyReset();
15193
+ if (success) {
15194
+ setApplyStatus("sent");
15195
+ scheduleApplyReset();
15196
+ } else {
15197
+ setApplyStatus("offline");
15198
+ }
14787
15199
  }, [applyStatus, onSendAllToAgents, scheduleApplyReset, totalItemCount]);
14788
15200
  const dragHandlers = React40.useMemo(() => ({
14789
15201
  onPointerDown: handlePointerDown,
@@ -14864,6 +15276,38 @@ function DirectEditToolbarInner({
14864
15276
  },
14865
15277
  ...dragHandlers,
14866
15278
  children: [
15279
+ showInsertButtons && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_jsx_runtime34.Fragment, { children: [
15280
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(Tooltip, { children: [
15281
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
15282
+ TooltipTrigger,
15283
+ {
15284
+ className: cn(toolbarBtnClass, "text-muted-foreground hover:bg-muted hover:text-foreground"),
15285
+ onPointerDown: (e) => e.stopPropagation(),
15286
+ onClick: () => onInsertElement?.("frame"),
15287
+ children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react17.Square, { className: "size-4" })
15288
+ }
15289
+ ),
15290
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(TooltipContent, { side: tooltipSide, className: "inline-flex items-center gap-1.5", children: [
15291
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { children: "Add frame" }),
15292
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("kbd", { className: kbdClass, children: "F" })
15293
+ ] })
15294
+ ] }),
15295
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(Tooltip, { children: [
15296
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
15297
+ TooltipTrigger,
15298
+ {
15299
+ className: cn(toolbarBtnClass, "text-muted-foreground hover:bg-muted hover:text-foreground"),
15300
+ onPointerDown: (e) => e.stopPropagation(),
15301
+ onClick: () => onInsertElement?.("text"),
15302
+ children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react17.Type, { className: "size-4" })
15303
+ }
15304
+ ),
15305
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(TooltipContent, { side: tooltipSide, className: "inline-flex items-center gap-1.5", children: [
15306
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { children: "Add text" }),
15307
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("kbd", { className: kbdClass, children: "T" })
15308
+ ] })
15309
+ ] })
15310
+ ] }),
14867
15311
  /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
14868
15312
  EditsPopover,
14869
15313
  {
@@ -14876,7 +15320,8 @@ function DirectEditToolbarInner({
14876
15320
  onExportAllEdits,
14877
15321
  onClearSessionEdits,
14878
15322
  onRemoveSessionEdit,
14879
- onDeleteComment
15323
+ onDeleteComment,
15324
+ sendFailure
14880
15325
  }
14881
15326
  ),
14882
15327
  showApplyButton && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(Tooltip, { children: [
@@ -14900,7 +15345,7 @@ function DirectEditToolbarInner({
14900
15345
  ]
14901
15346
  }
14902
15347
  ),
14903
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TooltipContent, { side: tooltipSide, children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { children: "Apply all changes via agent" }) })
15348
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TooltipContent, { side: tooltipSide, children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { children: applyTooltipLabel }) })
14904
15349
  ] }),
14905
15350
  /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
14906
15351
  "div",
@@ -14962,7 +15407,7 @@ function DirectEditToolbarInner({
14962
15407
  return toolbar;
14963
15408
  }
14964
15409
  function DirectEditToolbarContent() {
14965
- const { editModeActive, theme, sessionEditCount, multiSelectContextCount, selectedElements, canvas, agentAvailable } = useDirectEditState();
15410
+ const { editModeActive, theme, sessionEditCount, multiSelectContextCount, selectedElements, canvas, agentAvailable, lastSendFailure } = useDirectEditState();
14966
15411
  const {
14967
15412
  toggleEditMode,
14968
15413
  setTheme,
@@ -14972,6 +15417,7 @@ function DirectEditToolbarContent() {
14972
15417
  clearSessionEdits,
14973
15418
  removeSessionEdit,
14974
15419
  deleteComment,
15420
+ insertElement,
14975
15421
  toggleCanvas,
14976
15422
  setCanvasZoom,
14977
15423
  zoomCanvasTo100,
@@ -14994,6 +15440,8 @@ function DirectEditToolbarContent() {
14994
15440
  onExportAllEdits: exportAllEdits,
14995
15441
  onSendAllToAgents: sendAllSessionItemsToAgent,
14996
15442
  agentAvailable,
15443
+ sendFailureReason: lastSendFailure?.reason ?? null,
15444
+ sendFailure: lastSendFailure,
14997
15445
  onClearSessionEdits: clearSessionEdits,
14998
15446
  onRemoveSessionEdit: removeSessionEdit,
14999
15447
  onDeleteComment: deleteComment,
@@ -15002,7 +15450,8 @@ function DirectEditToolbarContent() {
15002
15450
  onToggleCanvas: toggleCanvas,
15003
15451
  onSetCanvasZoom: setCanvasZoom,
15004
15452
  onZoomTo100: zoomCanvasTo100,
15005
- onFitToViewport: fitCanvasToViewport
15453
+ onFitToViewport: fitCanvasToViewport,
15454
+ onInsertElement: insertElement
15006
15455
  }
15007
15456
  );
15008
15457
  }