made-refine 0.2.19 → 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.mjs CHANGED
@@ -7,7 +7,7 @@ import * as React8 from "react";
7
7
  import * as React from "react";
8
8
 
9
9
  // dist/styles.css
10
- 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}}';
10
+ 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}}';
11
11
 
12
12
  // src/portal-container.tsx
13
13
  import { jsx } from "react/jsx-runtime";
@@ -397,10 +397,30 @@ function getSourceFromFiber(fiber) {
397
397
  if (fromDebugStack?.fileName) return fromDebugStack;
398
398
  return null;
399
399
  }
400
+ var REACT_FORWARD_REF_TYPE = /* @__PURE__ */ Symbol.for("react.forward_ref");
401
+ var REACT_MEMO_TYPE = /* @__PURE__ */ Symbol.for("react.memo");
402
+ function resolveComponentName(type) {
403
+ let current = type;
404
+ for (let depth = 0; depth < 4 && current != null; depth++) {
405
+ const name = current.displayName || (typeof current === "function" ? current.name : void 0);
406
+ if (name) return name;
407
+ if (typeof current !== "object") return null;
408
+ if (current.$$typeof === REACT_MEMO_TYPE) {
409
+ current = current.type;
410
+ continue;
411
+ }
412
+ if (current.$$typeof === REACT_FORWARD_REF_TYPE) {
413
+ current = current.render;
414
+ continue;
415
+ }
416
+ return null;
417
+ }
418
+ return null;
419
+ }
400
420
  function buildFrame(fiber) {
401
421
  const type = fiber?.type;
402
422
  if (typeof type !== "function" && typeof type !== "object") return null;
403
- const name = type?.displayName || type?.name || null;
423
+ const name = resolveComponentName(type);
404
424
  if (!name || name === "Fragment") return null;
405
425
  const frame = { name };
406
426
  const source = getSourceFromFiber(fiber);
@@ -2412,7 +2432,7 @@ function buildElementContext(locator) {
2412
2432
  return buildLocatorContextLines(locator).join("\n");
2413
2433
  }
2414
2434
  function hasSessionEditChanges(edit) {
2415
- return Object.keys(edit.pendingStyles).length > 0 || Boolean(edit.textEdit) || Boolean(edit.move);
2435
+ return Object.keys(edit.pendingStyles).length > 0 || Boolean(edit.textEdit) || Boolean(edit.move) || Boolean(edit.deleted);
2416
2436
  }
2417
2437
  function partitionMultiSelectedEdits(elements, sessionEditsRef) {
2418
2438
  const editsWithChanges = [];
@@ -2934,7 +2954,7 @@ function buildMoveEntries(edits) {
2934
2954
  let noopMoveCount = 0;
2935
2955
  for (const edit of edits) {
2936
2956
  const move = edit.move;
2937
- if (!move) continue;
2957
+ if (!move || edit.deleted) continue;
2938
2958
  const subject = buildAnchorRef(
2939
2959
  getElementDisplayName(edit.element) || edit.locator.tagName,
2940
2960
  edit.locator.domSelector,
@@ -3093,19 +3113,22 @@ function getExportContentProfile(edits, comments, movePlanOrContext) {
3093
3113
  hasCssEdits: edits.some((e) => Object.keys(e.pendingStyles).length > 0),
3094
3114
  hasTextEdits: edits.some((e) => e.textEdit != null),
3095
3115
  hasMoves: moveOpCount > 0,
3096
- hasComments: comments.length > 0
3116
+ hasComments: comments.length > 0,
3117
+ hasDeletes: edits.some((e) => e.deleted)
3097
3118
  };
3098
3119
  }
3099
3120
  function buildExportInstruction(profile) {
3100
3121
  const { hasCssEdits, hasTextEdits, hasMoves, hasComments } = profile;
3101
- if (!hasCssEdits && !hasTextEdits && !hasMoves && !hasComments) return "";
3102
- if (!hasCssEdits && !hasTextEdits && !hasMoves) {
3122
+ const hasDeletes = Boolean(profile.hasDeletes);
3123
+ if (!hasCssEdits && !hasTextEdits && !hasMoves && !hasComments && !hasDeletes) return "";
3124
+ if (!hasCssEdits && !hasTextEdits && !hasMoves && !hasDeletes) {
3103
3125
  return hasComments ? "Address this feedback on the UI. Use the provided source location and selector to find each element in the codebase." : "";
3104
3126
  }
3105
3127
  const parts = [];
3106
3128
  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.");
3107
3129
  if (hasTextEdits) parts.push("Update the text content as specified.");
3108
3130
  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.");
3131
+ 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).");
3109
3132
  if (hasComments) parts.push("Address the comments on the relevant elements.");
3110
3133
  return `${parts.join(" ")} Use the provided source locations, selectors, and context HTML to locate each element in the codebase.`;
3111
3134
  }
@@ -3140,6 +3163,13 @@ function buildSessionExport(edits, comments = [], options) {
3140
3163
  blocks.push(planLines.join("\n"));
3141
3164
  }
3142
3165
  for (const edit of edits) {
3166
+ if (edit.deleted) {
3167
+ const lines = buildLocatorContextLines(edit.locator);
3168
+ lines.push("");
3169
+ lines.push("action: delete this element \u2014 remove it from the source");
3170
+ blocks.push(lines.join("\n"));
3171
+ continue;
3172
+ }
3143
3173
  const moveIntent = getMoveIntentForEdit(edit, planContext);
3144
3174
  const hasMove = Boolean(moveIntent);
3145
3175
  const hasStyleOrText = Object.keys(edit.pendingStyles).length > 0 || edit.textEdit != null;
@@ -4048,6 +4078,7 @@ function useSessionManager({
4048
4078
  sessionEditsRef,
4049
4079
  removedSessionEditsRef,
4050
4080
  undoStackRef,
4081
+ onElementInsertedRef,
4051
4082
  pushUndo,
4052
4083
  setState,
4053
4084
  setSessionEditCount
@@ -4244,40 +4275,75 @@ function useSessionManager({
4244
4275
  selectElement(firstChild);
4245
4276
  }
4246
4277
  }, [getSelectableChild, selectElement]);
4247
- const insertElement = React3.useCallback((kind) => {
4248
- if (!stateRef.current.editModeActive) return;
4249
- saveCurrentToSession();
4250
- const restoreSelection = buildSelectionSnapshot();
4278
+ const centerElementOnBody = React3.useCallback((element, size) => {
4251
4279
  const bodyRect = document.body.getBoundingClientRect();
4252
4280
  const scaleX = document.body.offsetWidth > 0 ? bodyRect.width / document.body.offsetWidth : 1;
4253
4281
  const scaleY = document.body.offsetHeight > 0 ? bodyRect.height / document.body.offsetHeight : 1;
4254
- const width = kind === "frame" ? 240 : 160;
4255
- const height = kind === "frame" ? 160 : 96;
4282
+ const fallbackWidth = size?.width ?? element.offsetWidth ?? 0;
4283
+ const fallbackHeight = size?.height ?? element.offsetHeight ?? 0;
4284
+ const measuredRect = element.getBoundingClientRect();
4285
+ const width = measuredRect.width || fallbackWidth;
4286
+ const height = measuredRect.height || fallbackHeight;
4256
4287
  const left = Math.round((window.innerWidth / 2 - bodyRect.left) / scaleX - width / 2);
4257
4288
  const top = Math.round((window.innerHeight / 2 - bodyRect.top) / scaleY - height / 2);
4258
- const element = document.createElement("div");
4259
- element.id = nextGeneratedCanvasId(kind);
4260
- element.setAttribute(GENERATED_CANVAS_NODE_ATTR, kind);
4261
- element.style.position = "absolute";
4262
4289
  element.style.left = `${left}px`;
4263
4290
  element.style.top = `${top}px`;
4264
- element.style.width = `${width}px`;
4265
- element.style.height = `${height}px`;
4291
+ }, []);
4292
+ const insertElement = React3.useCallback((kind) => {
4293
+ if (!stateRef.current.editModeActive) return;
4294
+ saveCurrentToSession();
4295
+ const restoreSelection = buildSelectionSnapshot();
4296
+ const selectedEl = stateRef.current.selectedElement;
4297
+ const insertsAsSibling = kind === "frame" || kind === "text";
4298
+ const hasSelection = insertsAsSibling && selectedEl !== null && selectedEl !== document.body && selectedEl.parentElement !== null;
4299
+ const element = document.createElement(kind === "text" ? "p" : "div");
4300
+ element.id = nextGeneratedCanvasId(kind);
4301
+ element.setAttribute(GENERATED_CANVAS_NODE_ATTR, kind);
4266
4302
  element.style.boxSizing = "border-box";
4267
- element.style.borderRadius = kind === "frame" ? "16px" : "12px";
4268
- element.style.border = "1px solid rgba(13, 153, 255, 0.35)";
4269
- element.style.zIndex = "1";
4270
4303
  if (kind === "frame") {
4271
- element.style.display = "flex";
4272
- element.style.flexDirection = "column";
4273
- element.style.gap = "12px";
4274
- element.style.padding = "16px";
4275
- element.style.background = "rgba(255, 255, 255, 0.92)";
4276
- element.style.boxShadow = "0 10px 30px rgba(15, 23, 42, 0.10)";
4277
- } else {
4304
+ element.style.width = "100px";
4305
+ element.style.height = "100px";
4306
+ element.style.background = "#F5F5F5";
4307
+ element.style.border = "1px solid #E0E0E0";
4308
+ } else if (kind === "div") {
4309
+ element.style.width = "160px";
4310
+ element.style.height = "96px";
4311
+ element.style.borderRadius = "12px";
4312
+ element.style.border = "1px solid rgba(13, 153, 255, 0.35)";
4278
4313
  element.style.background = "rgba(13, 153, 255, 0.08)";
4314
+ } else {
4315
+ element.textContent = "Text";
4316
+ element.style.display = "inline-block";
4317
+ element.style.margin = "0";
4318
+ element.style.minHeight = "24px";
4319
+ element.style.textAlign = "center";
4320
+ }
4321
+ if (hasSelection) {
4322
+ const insertionParent = selectedEl.parentElement;
4323
+ const refNode = selectedEl.nextSibling;
4324
+ if (refNode) {
4325
+ insertionParent.insertBefore(element, refNode);
4326
+ } else {
4327
+ insertionParent.appendChild(element);
4328
+ }
4329
+ } else {
4330
+ element.style.position = "absolute";
4331
+ element.style.zIndex = "1";
4332
+ if (kind === "text") {
4333
+ element.style.left = "0px";
4334
+ element.style.top = "0px";
4335
+ element.style.visibility = "hidden";
4336
+ document.body.appendChild(element);
4337
+ centerElementOnBody(element);
4338
+ element.style.visibility = "";
4339
+ } else {
4340
+ centerElementOnBody(
4341
+ element,
4342
+ kind === "frame" ? { width: 100, height: 100 } : { width: 160, height: 96 }
4343
+ );
4344
+ document.body.appendChild(element);
4345
+ }
4279
4346
  }
4280
- document.body.appendChild(element);
4281
4347
  pushUndo({
4282
4348
  type: "structure",
4283
4349
  restoreSelection,
@@ -4291,7 +4357,8 @@ function useSessionManager({
4291
4357
  primaryElement: element,
4292
4358
  pushUndo: false
4293
4359
  });
4294
- }, [applySelection, buildSelectionSnapshot, pushUndo, saveCurrentToSession, stateRef]);
4360
+ onElementInsertedRef.current?.(kind, element);
4361
+ }, [applySelection, buildSelectionSnapshot, centerElementOnBody, onElementInsertedRef, pushUndo, saveCurrentToSession, stateRef]);
4295
4362
  const groupSelection = React3.useCallback(() => {
4296
4363
  const selected = getSanitizedSelection(stateRef.current.selectedElements);
4297
4364
  if (selected.length < 2) return;
@@ -4387,9 +4454,17 @@ function useSessionManager({
4387
4454
  }));
4388
4455
  const sessionSnapshots = /* @__PURE__ */ new Map();
4389
4456
  for (const el of selected) {
4390
- const edit = sessionEditsRef.current.get(el);
4391
- if (edit) sessionSnapshots.set(el, edit);
4392
- sessionEditsRef.current.delete(el);
4457
+ const existing = sessionEditsRef.current.get(el);
4458
+ sessionSnapshots.set(el, existing ?? null);
4459
+ sessionEditsRef.current.set(el, existing ? { ...existing, deleted: true } : {
4460
+ element: el,
4461
+ locator: getElementLocator(el),
4462
+ originalStyles: {},
4463
+ pendingStyles: {},
4464
+ move: null,
4465
+ textEdit: null,
4466
+ deleted: true
4467
+ });
4393
4468
  }
4394
4469
  syncSessionItemCount();
4395
4470
  for (const { element } of snapshots) {
@@ -4410,7 +4485,8 @@ function useSessionManager({
4410
4485
  }
4411
4486
  }
4412
4487
  for (const [el, edit] of sessionSnapshots) {
4413
- sessionEditsRef.current.set(el, edit);
4488
+ if (edit) sessionEditsRef.current.set(el, edit);
4489
+ else sessionEditsRef.current.delete(el);
4414
4490
  }
4415
4491
  syncSessionItemCount();
4416
4492
  }
@@ -4801,7 +4877,7 @@ function useSessionManager({
4801
4877
  saveCurrentToSession();
4802
4878
  const edits = [];
4803
4879
  for (const edit of sessionEditsRef.current.values()) {
4804
- if (!edit.element.isConnected) {
4880
+ if (!edit.element.isConnected && !edit.deleted) {
4805
4881
  sessionEditsRef.current.delete(edit.element);
4806
4882
  continue;
4807
4883
  }
@@ -4970,6 +5046,7 @@ ${exportMarkdown}`);
4970
5046
 
4971
5047
  // src/use-text-and-comments.ts
4972
5048
  import * as React4 from "react";
5049
+ var GENERATED_CANVAS_NODE_ATTR2 = "data-made-refine-canvas-node";
4973
5050
  function clampUnit(value) {
4974
5051
  if (!Number.isFinite(value)) return 0;
4975
5052
  return Math.max(0, Math.min(1, value));
@@ -5005,6 +5082,94 @@ function useTextAndComments({
5005
5082
  editingElement.style.outlineOffset = "";
5006
5083
  editingElement.style.cursor = originalCursor;
5007
5084
  editingElement.blur();
5085
+ const isGeneratedTextElement = editingElement.getAttribute(GENERATED_CANVAS_NODE_ATTR2) === "text";
5086
+ const shouldDeleteGeneratedText = isGeneratedTextElement && newText.trim().length === 0;
5087
+ if (shouldDeleteGeneratedText) {
5088
+ const parent = editingElement.parentElement;
5089
+ const nextSibling = editingElement.nextSibling;
5090
+ const current = stateRef.current;
5091
+ const removedComments = current.comments.filter((comment) => comment.element === editingElement);
5092
+ const removedCommentIds = new Set(removedComments.map((comment) => comment.id));
5093
+ const remainingComments = current.comments.filter((comment) => comment.element !== editingElement);
5094
+ const restoredActiveCommentId = current.activeCommentId && removedCommentIds.has(current.activeCommentId) ? current.activeCommentId : null;
5095
+ const existingSessionEdit = existing ? {
5096
+ ...existing,
5097
+ originalStyles: { ...existing.originalStyles },
5098
+ pendingStyles: { ...existing.pendingStyles },
5099
+ move: existing.move ? { ...existing.move } : null,
5100
+ textEdit: existing.textEdit ? { ...existing.textEdit } : null
5101
+ } : null;
5102
+ const restoreSelection = {
5103
+ isOpen: current.isOpen,
5104
+ selectedElement: current.selectedElement,
5105
+ selectedElements: [...current.selectedElements],
5106
+ selectionAnchorElement: current.selectionAnchorElement,
5107
+ originalStyles: { ...current.originalStyles },
5108
+ pendingStyles: { ...current.pendingStyles }
5109
+ };
5110
+ sessionEditsRef.current.delete(editingElement);
5111
+ if (editingElement.isConnected) {
5112
+ editingElement.remove();
5113
+ }
5114
+ pushUndo({
5115
+ type: "structure",
5116
+ restoreSelection,
5117
+ undo: () => {
5118
+ editingElement.textContent = previousText;
5119
+ if (!editingElement.isConnected && parent?.isConnected) {
5120
+ if (nextSibling && nextSibling.parentNode === parent) {
5121
+ parent.insertBefore(editingElement, nextSibling);
5122
+ } else {
5123
+ parent.appendChild(editingElement);
5124
+ }
5125
+ }
5126
+ if (existingSessionEdit) {
5127
+ sessionEditsRef.current.set(editingElement, existingSessionEdit);
5128
+ }
5129
+ setState((prev) => ({
5130
+ ...prev,
5131
+ comments: current.comments,
5132
+ activeCommentId: restoredActiveCommentId ?? prev.activeCommentId
5133
+ }));
5134
+ syncSessionItemCount(current.comments);
5135
+ }
5136
+ });
5137
+ syncSessionItemCount(remainingComments);
5138
+ setState((prev) => {
5139
+ const selectionContainsElement = prev.selectedElement === editingElement || prev.selectionAnchorElement === editingElement || prev.selectedElements.includes(editingElement);
5140
+ if (!selectionContainsElement) {
5141
+ return prev.textEditingElement === editingElement ? {
5142
+ ...prev,
5143
+ comments: prev.comments.filter((comment) => comment.element !== editingElement),
5144
+ activeCommentId: prev.activeCommentId && removedCommentIds.has(prev.activeCommentId) ? null : prev.activeCommentId,
5145
+ textEditingElement: null
5146
+ } : prev;
5147
+ }
5148
+ return {
5149
+ ...prev,
5150
+ isOpen: false,
5151
+ selectedElement: null,
5152
+ selectedElements: [],
5153
+ selectionAnchorElement: null,
5154
+ elementInfo: null,
5155
+ computedSpacing: null,
5156
+ computedBorderRadius: null,
5157
+ computedBorder: null,
5158
+ computedFlex: null,
5159
+ computedSizing: null,
5160
+ computedColor: null,
5161
+ computedBoxShadow: null,
5162
+ computedTypography: null,
5163
+ isComponentPrimitive: false,
5164
+ comments: remainingComments,
5165
+ activeCommentId: restoredActiveCommentId ? null : prev.activeCommentId,
5166
+ originalStyles: {},
5167
+ pendingStyles: {},
5168
+ textEditingElement: null
5169
+ };
5170
+ });
5171
+ return;
5172
+ }
5008
5173
  if (newText !== previousText) {
5009
5174
  pushUndo({ type: "textEdit", element: editingElement, originalText, previousText });
5010
5175
  removedSessionEditsRef.current.delete(editingElement);
@@ -5523,28 +5688,30 @@ async function toClientResponse(response) {
5523
5688
  const data = await readJsonRecord(response);
5524
5689
  const bodyOk = data?.ok;
5525
5690
  const parsedOk = typeof bodyOk === "boolean" ? bodyOk : response.ok;
5691
+ const ok = parsedOk && response.ok;
5526
5692
  return {
5527
- ok: parsedOk && response.ok,
5528
- id: readString(data, "id") ?? ""
5693
+ ok,
5694
+ id: readString(data, "id") ?? "",
5695
+ ...!ok ? { errorKind: "rejected" } : {}
5529
5696
  };
5530
5697
  }
5531
5698
  async function postWithSessionToken(path, payload) {
5532
5699
  const idempotencyKey = createIdempotencyKey();
5533
5700
  let session = await bootstrapSession();
5534
- if (!session) return { ok: false, id: "" };
5701
+ if (!session) return { ok: false, id: "", errorKind: "network" };
5535
5702
  let response;
5536
5703
  try {
5537
5704
  response = await sendAnnotationRequest(session, path, payload, idempotencyKey);
5538
5705
  } catch {
5539
- return { ok: false, id: "" };
5706
+ return { ok: false, id: "", errorKind: "network" };
5540
5707
  }
5541
5708
  if (response.status === 401 || response.status === 403) {
5542
5709
  session = await refreshSessionToken(session) ?? await bootstrapSession(true);
5543
- if (!session) return { ok: false, id: "" };
5710
+ if (!session) return { ok: false, id: "", errorKind: "network" };
5544
5711
  try {
5545
5712
  response = await sendAnnotationRequest(session, path, payload, idempotencyKey);
5546
5713
  } catch {
5547
- return { ok: false, id: "" };
5714
+ return { ok: false, id: "", errorKind: "network" };
5548
5715
  }
5549
5716
  }
5550
5717
  return toClientResponse(response);
@@ -5597,8 +5764,10 @@ function buildLocatorPayload(locator) {
5597
5764
  }
5598
5765
  function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrentToSession, removeSessionEdit, deleteComment }) {
5599
5766
  const [agentAvailable, setAgentAvailable] = React5.useState(false);
5767
+ const [lastSendFailure, setLastSendFailure] = React5.useState(null);
5600
5768
  const isMountedRef = React5.useRef(true);
5601
5769
  React5.useEffect(() => {
5770
+ isMountedRef.current = true;
5602
5771
  return () => {
5603
5772
  isMountedRef.current = false;
5604
5773
  };
@@ -5655,7 +5824,7 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5655
5824
  const resolvedPlanContext = movePlanContext ?? buildMovePlanContext(editsForPlan);
5656
5825
  const includeBatchMoveEnvelope = Boolean(options?.includeBatchMoveEnvelope && sessionEdit.move);
5657
5826
  const isBatchSend = Boolean(allEdits && allEdits.length > 1);
5658
- const exportMarkdown = sessionEdit.move ? buildSessionExport(
5827
+ const exportMarkdown = sessionEdit.move || sessionEdit.deleted ? buildSessionExport(
5659
5828
  includeBatchMoveEnvelope ? editsForPlan : [sessionEdit],
5660
5829
  [],
5661
5830
  {
@@ -5671,7 +5840,7 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5671
5840
  }));
5672
5841
  const moveIntent = sessionEdit.move ? getMoveIntentForEdit(sessionEdit, resolvedPlanContext) : null;
5673
5842
  const movePlan = includeBatchMoveEnvelope ? resolvedPlanContext.movePlan : null;
5674
- const hasMeaningfulPayload = changes.length > 0 || sessionEdit.textEdit != null || moveIntent != null;
5843
+ const hasMeaningfulPayload = changes.length > 0 || sessionEdit.textEdit != null || moveIntent != null || Boolean(sessionEdit.deleted);
5675
5844
  if (!hasMeaningfulPayload) return true;
5676
5845
  const profile = getExportContentProfile(
5677
5846
  [sessionEdit],
@@ -5685,17 +5854,44 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5685
5854
  textChange: sessionEdit.textEdit ?? null,
5686
5855
  moveIntent,
5687
5856
  ...movePlan ? { movePlan } : {},
5857
+ ...sessionEdit.deleted ? { deleted: true } : {},
5688
5858
  exportMarkdown: withInstruction(profile, exportMarkdown)
5689
5859
  });
5690
5860
  if (result.ok) {
5691
5861
  removeSessionEdit(sessionEdit.element);
5862
+ updateAgentAvailability(true);
5863
+ } else {
5864
+ const kind = result.errorKind === "network" ? "unreachable" : "rejected";
5865
+ updateAgentAvailability(result.errorKind === "network" ? false : true);
5866
+ if (options?._isBatchCall) {
5867
+ options._batchFailKinds?.push(result.errorKind ?? "rejected");
5868
+ } else if (isMountedRef.current) {
5869
+ setLastSendFailure({
5870
+ reason: kind,
5871
+ failedEditElements: [sessionEdit.element],
5872
+ failedCommentIds: [],
5873
+ at: Date.now()
5874
+ });
5875
+ }
5692
5876
  }
5693
- return updateAgentAvailability(result.ok);
5694
- } catch {
5695
- return updateAgentAvailability(false);
5877
+ return result.ok;
5878
+ } catch (err) {
5879
+ updateAgentAvailability(false);
5880
+ if (options?._isBatchCall) {
5881
+ throw err;
5882
+ }
5883
+ if (isMountedRef.current) {
5884
+ setLastSendFailure({
5885
+ reason: "unreachable",
5886
+ failedEditElements: [sessionEdit.element],
5887
+ failedCommentIds: [],
5888
+ at: Date.now()
5889
+ });
5890
+ }
5891
+ return false;
5696
5892
  }
5697
5893
  }, [updateAgentAvailability, removeSessionEdit]);
5698
- const sendSessionCommentToAgent = React5.useCallback(async (comment) => {
5894
+ const sendSessionCommentToAgent = React5.useCallback(async (comment, _options) => {
5699
5895
  const exportMarkdown = buildCommentExport(comment.locator, comment.text, comment.replies);
5700
5896
  const commentProfile = { hasCssEdits: false, hasTextEdits: false, hasMoves: false, hasComments: true };
5701
5897
  try {
@@ -5707,13 +5903,40 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5707
5903
  });
5708
5904
  if (result.ok) {
5709
5905
  deleteComment(comment.id);
5906
+ updateAgentAvailability(true);
5907
+ } else {
5908
+ const kind = result.errorKind === "network" ? "unreachable" : "rejected";
5909
+ updateAgentAvailability(result.errorKind === "network" ? false : true);
5910
+ if (_options?._isBatchCall) {
5911
+ _options._batchFailKinds?.push(result.errorKind ?? "rejected");
5912
+ } else if (isMountedRef.current) {
5913
+ setLastSendFailure({
5914
+ reason: kind,
5915
+ failedEditElements: [],
5916
+ failedCommentIds: [comment.id],
5917
+ at: Date.now()
5918
+ });
5919
+ }
5710
5920
  }
5711
- return updateAgentAvailability(result.ok);
5712
- } catch {
5713
- return updateAgentAvailability(false);
5921
+ return result.ok;
5922
+ } catch (err) {
5923
+ updateAgentAvailability(false);
5924
+ if (_options?._isBatchCall) {
5925
+ throw err;
5926
+ }
5927
+ if (isMountedRef.current) {
5928
+ setLastSendFailure({
5929
+ reason: "unreachable",
5930
+ failedEditElements: [],
5931
+ failedCommentIds: [comment.id],
5932
+ at: Date.now()
5933
+ });
5934
+ }
5935
+ return false;
5714
5936
  }
5715
5937
  }, [updateAgentAvailability, deleteComment]);
5716
5938
  const sendEditToAgent2 = React5.useCallback(async () => {
5939
+ if (isMountedRef.current) setLastSendFailure(null);
5717
5940
  const current = stateRef.current;
5718
5941
  if (current.selectedElements.length > 1) {
5719
5942
  saveCurrentToSession();
@@ -5748,9 +5971,28 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5748
5971
  removeSessionEdit(el);
5749
5972
  }
5750
5973
  }
5974
+ updateAgentAvailability(true);
5975
+ } else {
5976
+ updateAgentAvailability(result.errorKind === "network" ? false : true);
5977
+ if (isMountedRef.current) {
5978
+ setLastSendFailure({
5979
+ reason: result.errorKind === "network" ? "unreachable" : "rejected",
5980
+ failedEditElements: editsWithChanges.map((e) => e.element),
5981
+ failedCommentIds: [],
5982
+ at: Date.now()
5983
+ });
5984
+ }
5751
5985
  }
5752
- return updateAgentAvailability(result.ok);
5986
+ return result.ok;
5753
5987
  } catch {
5988
+ if (isMountedRef.current) {
5989
+ setLastSendFailure({
5990
+ reason: "unreachable",
5991
+ failedEditElements: editsWithChanges.map((e) => e.element),
5992
+ failedCommentIds: [],
5993
+ at: Date.now()
5994
+ });
5995
+ }
5754
5996
  return updateAgentAvailability(false);
5755
5997
  }
5756
5998
  }
@@ -5773,11 +6015,13 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5773
6015
  return sendSessionEditToAgent(editToSend);
5774
6016
  }, [canSendEditToAgent, sendSessionEditToAgent, saveCurrentToSession]);
5775
6017
  const sendCommentToAgent2 = React5.useCallback(async (id) => {
6018
+ if (isMountedRef.current) setLastSendFailure(null);
5776
6019
  const comment = stateRef.current.comments.find((c) => c.id === id);
5777
6020
  if (!comment) return false;
5778
6021
  return sendSessionCommentToAgent(comment);
5779
6022
  }, [sendSessionCommentToAgent]);
5780
6023
  const sendAllSessionItemsToAgent = React5.useCallback(async () => {
6024
+ if (isMountedRef.current) setLastSendFailure(null);
5781
6025
  const items = getSessionItems();
5782
6026
  const current = stateRef.current;
5783
6027
  const contextOnlyBlocks = getContextOnlyBlocks(current.selectedElements, items);
@@ -5786,25 +6030,44 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5786
6030
  const movePlanContext = buildMovePlanContext(allEdits);
5787
6031
  let moveEnvelopeSent = false;
5788
6032
  let allSucceeded = true;
6033
+ const failedEditElements = [];
6034
+ const failedCommentIds = [];
6035
+ let anyThrown = false;
6036
+ const batchFailKinds = [];
5789
6037
  for (const item of items) {
5790
6038
  let succeeded;
5791
6039
  if (item.type === "edit") {
5792
6040
  const hasMoveIntent = Boolean(item.edit.move && getMoveIntentForEdit(item.edit, movePlanContext));
5793
6041
  const includeBatchMoveEnvelope = hasMoveIntent && !moveEnvelopeSent;
5794
- succeeded = await sendSessionEditToAgent(
5795
- item.edit,
5796
- allEdits,
5797
- movePlanContext,
5798
- { includeBatchMoveEnvelope }
5799
- );
6042
+ try {
6043
+ succeeded = await sendSessionEditToAgent(
6044
+ item.edit,
6045
+ allEdits,
6046
+ movePlanContext,
6047
+ { includeBatchMoveEnvelope, _isBatchCall: true, _batchFailKinds: batchFailKinds }
6048
+ );
6049
+ if (!succeeded) failedEditElements.push(item.edit.element);
6050
+ } catch {
6051
+ succeeded = false;
6052
+ anyThrown = true;
6053
+ failedEditElements.push(item.edit.element);
6054
+ }
5800
6055
  if (includeBatchMoveEnvelope) moveEnvelopeSent = true;
5801
6056
  } else {
5802
- succeeded = await sendSessionCommentToAgent(item.comment);
6057
+ try {
6058
+ succeeded = await sendSessionCommentToAgent(item.comment, { _isBatchCall: true, _batchFailKinds: batchFailKinds });
6059
+ if (!succeeded) failedCommentIds.push(item.comment.id);
6060
+ } catch {
6061
+ succeeded = false;
6062
+ anyThrown = true;
6063
+ failedCommentIds.push(item.comment.id);
6064
+ }
5803
6065
  }
5804
6066
  if (!succeeded) {
5805
6067
  allSucceeded = false;
5806
6068
  }
5807
6069
  }
6070
+ let contextBlockFailed = false;
5808
6071
  if (contextOnlyBlocks.length > 0) {
5809
6072
  const primaryEl = current.selectedElements.find(
5810
6073
  (el) => el.isConnected && !allEdits.some((e) => e.element === el)
@@ -5818,16 +6081,39 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5818
6081
  moveIntent: null,
5819
6082
  exportMarkdown: contextOnlyBlocks.join("\n\n")
5820
6083
  });
5821
- if (!result.ok) allSucceeded = false;
6084
+ if (result.ok) {
6085
+ updateAgentAvailability(true);
6086
+ } else {
6087
+ updateAgentAvailability(result.errorKind === "network" ? false : true);
6088
+ allSucceeded = false;
6089
+ contextBlockFailed = true;
6090
+ }
5822
6091
  } catch {
6092
+ updateAgentAvailability(false);
5823
6093
  allSucceeded = false;
6094
+ anyThrown = true;
6095
+ contextBlockFailed = true;
5824
6096
  }
5825
6097
  }
5826
6098
  }
6099
+ if (!allSucceeded && isMountedRef.current) {
6100
+ const reason = anyThrown || batchFailKinds.includes("network") ? "unreachable" : "rejected";
6101
+ setLastSendFailure({
6102
+ reason,
6103
+ failedEditElements,
6104
+ failedCommentIds,
6105
+ at: Date.now()
6106
+ });
6107
+ }
5827
6108
  return allSucceeded;
5828
- }, [getSessionItems, sendSessionCommentToAgent, sendSessionEditToAgent]);
6109
+ }, [getSessionItems, sendSessionCommentToAgent, sendSessionEditToAgent, updateAgentAvailability]);
6110
+ const clearSendFailure = React5.useCallback(() => {
6111
+ if (isMountedRef.current) setLastSendFailure(null);
6112
+ }, []);
5829
6113
  return {
5830
6114
  agentAvailable,
6115
+ lastSendFailure,
6116
+ clearSendFailure,
5831
6117
  canSendEditToAgent,
5832
6118
  sendEditToAgent: sendEditToAgent2,
5833
6119
  sendCommentToAgent: sendCommentToAgent2,
@@ -5874,7 +6160,9 @@ function useKeyboardShortcuts({
5874
6160
  const s = stateRef.current;
5875
6161
  const undoShortcutPressed = usesMetaForUndo ? e.metaKey && !e.ctrlKey && !e.altKey : e.ctrlKey && !e.metaKey && !e.altKey;
5876
6162
  if (undoShortcutPressed && e.key === "z" && !e.shiftKey) {
6163
+ if (!s.editModeActive) return;
5877
6164
  if (s.textEditingElement) return;
6165
+ if (isInputFocused()) return;
5878
6166
  e.preventDefault();
5879
6167
  undo();
5880
6168
  return;
@@ -5929,6 +6217,11 @@ function useKeyboardShortcuts({
5929
6217
  insertElement("frame");
5930
6218
  return;
5931
6219
  }
6220
+ if (lowerKey === "t") {
6221
+ e.preventDefault();
6222
+ insertElement("text");
6223
+ return;
6224
+ }
5932
6225
  if (lowerKey === "d") {
5933
6226
  e.preventDefault();
5934
6227
  insertElement("div");
@@ -6591,6 +6884,10 @@ function DirectEditProvider({ children }) {
6591
6884
  const undoStackRef = React8.useRef([]);
6592
6885
  const sessionEditsRef = React8.useRef(/* @__PURE__ */ new Map());
6593
6886
  const removedSessionEditsRef = React8.useRef(/* @__PURE__ */ new WeakSet());
6887
+ const commentDraftTextRef = React8.useRef("");
6888
+ const commentDraftBlockedHandlerRef = React8.useRef(null);
6889
+ const onElementInsertedRef = React8.useRef(null);
6890
+ const textInsertRafRef = React8.useRef(null);
6594
6891
  const [sessionEditCount, setSessionEditCount] = React8.useState(0);
6595
6892
  const stateRef = React8.useRef(state);
6596
6893
  React8.useEffect(() => {
@@ -6625,12 +6922,13 @@ function DirectEditProvider({ children }) {
6625
6922
  clearSessionEdits,
6626
6923
  groupSelection,
6627
6924
  deleteSelection,
6628
- insertElement
6925
+ insertElement: insertElementBase
6629
6926
  } = useSessionManager({
6630
6927
  stateRef,
6631
6928
  sessionEditsRef,
6632
6929
  removedSessionEditsRef,
6633
6930
  undoStackRef,
6931
+ onElementInsertedRef,
6634
6932
  pushUndo,
6635
6933
  setState,
6636
6934
  setSessionEditCount
@@ -6680,6 +6978,41 @@ function DirectEditProvider({ children }) {
6680
6978
  syncSessionItemCount,
6681
6979
  setState
6682
6980
  });
6981
+ React8.useEffect(() => {
6982
+ onElementInsertedRef.current = (kind, element) => {
6983
+ if (kind === "text") {
6984
+ if (textInsertRafRef.current) {
6985
+ cancelAnimationFrame(textInsertRafRef.current);
6986
+ }
6987
+ textInsertRafRef.current = requestAnimationFrame(() => {
6988
+ textInsertRafRef.current = null;
6989
+ if (element.isConnected) {
6990
+ startTextEditing(element);
6991
+ }
6992
+ });
6993
+ }
6994
+ };
6995
+ return () => {
6996
+ if (textInsertRafRef.current) {
6997
+ cancelAnimationFrame(textInsertRafRef.current);
6998
+ textInsertRafRef.current = null;
6999
+ }
7000
+ onElementInsertedRef.current = null;
7001
+ };
7002
+ }, [startTextEditing]);
7003
+ const setCommentDraftText = React8.useCallback((text) => {
7004
+ commentDraftTextRef.current = text;
7005
+ }, []);
7006
+ const setCommentDraftBlockedHandler = React8.useCallback((handler) => {
7007
+ commentDraftBlockedHandlerRef.current = handler;
7008
+ }, []);
7009
+ const hasPendingCommentDraft = React8.useCallback(() => {
7010
+ const activeCommentId = stateRef.current.activeCommentId;
7011
+ if (!activeCommentId) return false;
7012
+ const active = stateRef.current.comments.find((comment) => comment.id === activeCommentId);
7013
+ if (!active) return false;
7014
+ return active.text.trim().length === 0 && commentDraftTextRef.current.trim().length > 0;
7015
+ }, []);
6683
7016
  const { toggleCanvas, enterCanvas, exitCanvas, setCanvasZoom, fitCanvasToViewport, zoomCanvasTo100 } = useCanvas({
6684
7017
  stateRef,
6685
7018
  setState
@@ -6816,6 +7149,8 @@ function DirectEditProvider({ children }) {
6816
7149
  }, [state.editModeActive]);
6817
7150
  const {
6818
7151
  agentAvailable,
7152
+ lastSendFailure,
7153
+ clearSendFailure,
6819
7154
  canSendEditToAgent,
6820
7155
  sendEditToAgent: sendEditToAgent2,
6821
7156
  sendCommentToAgent: sendCommentToAgent2,
@@ -6842,6 +7177,16 @@ function DirectEditProvider({ children }) {
6842
7177
  } catch {
6843
7178
  }
6844
7179
  }, []);
7180
+ const insertElement = React8.useCallback((kind) => {
7181
+ if (hasPendingCommentDraft()) {
7182
+ commentDraftBlockedHandlerRef.current?.();
7183
+ return;
7184
+ }
7185
+ if (stateRef.current.textEditingElement) {
7186
+ commitTextEditing();
7187
+ }
7188
+ insertElementBase(kind);
7189
+ }, [commitTextEditing, hasPendingCommentDraft, insertElementBase, stateRef]);
6845
7190
  useKeyboardShortcuts({
6846
7191
  stateRef,
6847
7192
  toggleEditMode,
@@ -6871,9 +7216,10 @@ function DirectEditProvider({ children }) {
6871
7216
  const stateContextValue = React8.useMemo(() => ({
6872
7217
  ...state,
6873
7218
  agentAvailable,
7219
+ lastSendFailure,
6874
7220
  sessionEditCount,
6875
7221
  multiSelectContextCount
6876
- }), [agentAvailable, state, sessionEditCount, multiSelectContextCount]);
7222
+ }), [agentAvailable, lastSendFailure, state, sessionEditCount, multiSelectContextCount]);
6877
7223
  const actionsContextValue = React8.useMemo(() => ({
6878
7224
  selectElement,
6879
7225
  selectElements,
@@ -6896,6 +7242,7 @@ function DirectEditProvider({ children }) {
6896
7242
  updateTypographyProperty,
6897
7243
  resetToOriginal,
6898
7244
  exportEdits,
7245
+ clearSendFailure,
6899
7246
  canSendEditToAgent,
6900
7247
  sendEditToAgent: sendEditToAgent2,
6901
7248
  sendAllSessionItemsToAgent,
@@ -6920,6 +7267,8 @@ function DirectEditProvider({ children }) {
6920
7267
  removeSessionEdit,
6921
7268
  startTextEditing,
6922
7269
  commitTextEditing,
7270
+ setCommentDraftText,
7271
+ setCommentDraftBlockedHandler,
6923
7272
  groupSelection,
6924
7273
  deleteSelection,
6925
7274
  insertElement,
@@ -6949,6 +7298,7 @@ function DirectEditProvider({ children }) {
6949
7298
  updateTypographyProperty,
6950
7299
  resetToOriginal,
6951
7300
  exportEdits,
7301
+ clearSendFailure,
6952
7302
  canSendEditToAgent,
6953
7303
  sendEditToAgent2,
6954
7304
  sendAllSessionItemsToAgent,
@@ -6973,6 +7323,8 @@ function DirectEditProvider({ children }) {
6973
7323
  removeSessionEdit,
6974
7324
  startTextEditing,
6975
7325
  commitTextEditing,
7326
+ setCommentDraftText,
7327
+ setCommentDraftBlockedHandler,
6976
7328
  groupSelection,
6977
7329
  deleteSelection,
6978
7330
  insertElement,
@@ -7405,6 +7757,7 @@ function useMove({ onMoveComplete }) {
7405
7757
  { x: 0, y: 0, scaleX: 1, scaleY: 1 }
7406
7758
  );
7407
7759
  const originalTransformRef = React12.useRef("");
7760
+ const composeBaseRef = React12.useRef("");
7408
7761
  const reorderPreviewRef = React12.useRef(/* @__PURE__ */ new Map());
7409
7762
  React12.useEffect(() => {
7410
7763
  dragStateRef.current = dragState;
@@ -7499,6 +7852,7 @@ function useMove({ onMoveComplete }) {
7499
7852
  }
7500
7853
  clearReorderPreview();
7501
7854
  originalTransformRef.current = "";
7855
+ composeBaseRef.current = "";
7502
7856
  initialRectRef.current = { x: 0, y: 0, scaleX: 1, scaleY: 1 };
7503
7857
  dragOptionsRef.current = DEFAULT_DRAG_OPTIONS;
7504
7858
  dragGuardRef.current.deactivate();
@@ -7520,6 +7874,7 @@ function useMove({ onMoveComplete }) {
7520
7874
  draggedElement.style.opacity = "";
7521
7875
  clearReorderPreview();
7522
7876
  originalTransformRef.current = "";
7877
+ composeBaseRef.current = "";
7523
7878
  initialRectRef.current = { x: 0, y: 0, scaleX: 1, scaleY: 1 };
7524
7879
  const dragMode = dragOptionsRef.current.mode;
7525
7880
  dragOptionsRef.current = DEFAULT_DRAG_OPTIONS;
@@ -7580,7 +7935,14 @@ function useMove({ onMoveComplete }) {
7580
7935
  scaleX: element.offsetWidth > 0 ? rect.width / element.offsetWidth : 1,
7581
7936
  scaleY: element.offsetHeight > 0 ? rect.height / element.offsetHeight : 1
7582
7937
  };
7583
- originalTransformRef.current = element.style.transform;
7938
+ const inlineTransform = element.style.transform;
7939
+ originalTransformRef.current = inlineTransform;
7940
+ if (inlineTransform) {
7941
+ composeBaseRef.current = inlineTransform;
7942
+ } else {
7943
+ const computed = getComputedStyle(element).transform;
7944
+ composeBaseRef.current = computed && computed !== "none" ? computed : "";
7945
+ }
7584
7946
  dragGuardRef.current.activate();
7585
7947
  setDragState({
7586
7948
  isDragging: true,
@@ -7613,7 +7975,8 @@ function useMove({ onMoveComplete }) {
7613
7975
  const { x, y, scaleX, scaleY } = initialRectRef.current;
7614
7976
  const dx = (e.clientX - dragOffset.x - x) / scaleX;
7615
7977
  const dy = (e.clientY - dragOffset.y - y) / scaleY;
7616
- draggedElement.style.transform = `translate(${dx}px, ${dy}px)`;
7978
+ const base = composeBaseRef.current;
7979
+ draggedElement.style.transform = base ? `translate(${dx}px, ${dy}px) ${base}` : `translate(${dx}px, ${dy}px)`;
7617
7980
  }
7618
7981
  if (dragOptionsRef.current.mode === "position") {
7619
7982
  let container2 = findLayoutContainerAtPoint(
@@ -8480,6 +8843,7 @@ function SelectedCommentComposer({
8480
8843
  comment,
8481
8844
  attentionNonce,
8482
8845
  draftRef,
8846
+ onDraftTextChange,
8483
8847
  onSubmit,
8484
8848
  onCancel
8485
8849
  }) {
@@ -8525,7 +8889,8 @@ function SelectedCommentComposer({
8525
8889
  }, [attentionNonce]);
8526
8890
  React17.useEffect(() => {
8527
8891
  if (draftRef) draftRef.current = text;
8528
- }, [draftRef, text]);
8892
+ onDraftTextChange?.(text);
8893
+ }, [draftRef, onDraftTextChange, text]);
8529
8894
  const submit = React17.useCallback(() => {
8530
8895
  const nextText = text.trim();
8531
8896
  if (!nextText) return;
@@ -8561,6 +8926,7 @@ function SelectedCommentComposer({
8561
8926
  {
8562
8927
  ref: inputRef,
8563
8928
  rows: 1,
8929
+ autoFocus: true,
8564
8930
  "aria-invalid": showError,
8565
8931
  className: cn(
8566
8932
  "min-h-[18px] min-w-0 flex-1 resize-none overflow-hidden bg-transparent px-1.5 py-1.5 text-xs leading-[18px] text-foreground placeholder:text-muted-foreground focus:outline-none",
@@ -8641,6 +9007,7 @@ function MoveOverlay({ dropIndicator }) {
8641
9007
 
8642
9008
  // src/selection-overlay.tsx
8643
9009
  import * as React19 from "react";
9010
+ import { MessageSquare } from "lucide-react";
8644
9011
 
8645
9012
  // src/use-selection-resize.ts
8646
9013
  import * as React18 from "react";
@@ -8933,7 +9300,10 @@ function SelectionOverlay({
8933
9300
  onSelectPageFrame,
8934
9301
  isComponentPrimitive = false,
8935
9302
  enableResizeHandles = false,
8936
- onResizeSizingChange
9303
+ onResizeSizingChange,
9304
+ showCommentPill = false,
9305
+ isCommentActive = false,
9306
+ onCommentPillClick
8937
9307
  }) {
8938
9308
  const selectionColor = isComponentPrimitive ? COMPONENT_PURPLE : BLUE3;
8939
9309
  const rectElement = isDragging && draggedElement ? draggedElement : selectedElement;
@@ -9297,7 +9667,7 @@ function SelectionOverlay({
9297
9667
  }
9298
9668
  }
9299
9669
  ),
9300
- !isTextEditing && /* @__PURE__ */ jsx9(
9670
+ !isTextEditing && /* @__PURE__ */ jsxs5(
9301
9671
  "div",
9302
9672
  {
9303
9673
  "data-direct-edit": "dimension-label",
@@ -9312,24 +9682,69 @@ function SelectionOverlay({
9312
9682
  alignItems: "center",
9313
9683
  gap: "4px"
9314
9684
  },
9315
- children: /* @__PURE__ */ jsx9(
9316
- "span",
9317
- {
9318
- style: {
9319
- background: selectionColor,
9320
- color: "white",
9321
- fontSize: "11px",
9322
- lineHeight: "20px",
9323
- padding: "0 6px",
9324
- borderRadius: "4px",
9325
- whiteSpace: "nowrap",
9326
- fontFamily: "system-ui, sans-serif",
9327
- fontWeight: 500,
9328
- letterSpacing: "-0.01em"
9329
- },
9330
- children: dimensionText
9331
- }
9332
- )
9685
+ children: [
9686
+ /* @__PURE__ */ jsx9(
9687
+ "span",
9688
+ {
9689
+ style: {
9690
+ background: selectionColor,
9691
+ color: "white",
9692
+ fontSize: "11px",
9693
+ lineHeight: "20px",
9694
+ padding: "0 6px",
9695
+ borderRadius: "4px",
9696
+ whiteSpace: "nowrap",
9697
+ fontFamily: "system-ui, sans-serif",
9698
+ fontWeight: 500,
9699
+ letterSpacing: "-0.01em"
9700
+ },
9701
+ children: dimensionText
9702
+ }
9703
+ ),
9704
+ showCommentPill && /* @__PURE__ */ jsx9(TooltipProvider, { delayDuration: 200, children: /* @__PURE__ */ jsxs5(Tooltip, { children: [
9705
+ /* @__PURE__ */ jsx9(
9706
+ TooltipTrigger,
9707
+ {
9708
+ render: /* @__PURE__ */ jsx9(
9709
+ "button",
9710
+ {
9711
+ type: "button",
9712
+ "data-direct-edit": "comment-pill",
9713
+ "aria-label": "Toggle comment",
9714
+ style: {
9715
+ display: "inline-flex",
9716
+ alignItems: "center",
9717
+ justifyContent: "center",
9718
+ background: isCommentActive ? "white" : selectionColor,
9719
+ color: isCommentActive ? selectionColor : "white",
9720
+ height: "20px",
9721
+ width: "24px",
9722
+ borderRadius: "4px",
9723
+ border: "none",
9724
+ boxSizing: "border-box",
9725
+ cursor: "pointer",
9726
+ pointerEvents: "auto",
9727
+ padding: 0,
9728
+ opacity: 1
9729
+ },
9730
+ onClick: (e) => {
9731
+ e.stopPropagation();
9732
+ onCommentPillClick?.();
9733
+ },
9734
+ onPointerEnter: (e) => {
9735
+ e.currentTarget.style.opacity = "0.85";
9736
+ },
9737
+ onPointerLeave: (e) => {
9738
+ e.currentTarget.style.opacity = "1";
9739
+ }
9740
+ }
9741
+ ),
9742
+ children: /* @__PURE__ */ jsx9(MessageSquare, { style: { width: 12, height: 12 }, strokeWidth: 2.5 })
9743
+ }
9744
+ ),
9745
+ /* @__PURE__ */ jsx9(TooltipContent, { side: "bottom", children: "Comment" })
9746
+ ] }) })
9747
+ ]
9333
9748
  }
9334
9749
  ),
9335
9750
  !isDragging && !isTextEditing && /* @__PURE__ */ jsxs5(
@@ -11859,6 +12274,7 @@ function PanelFooter({
11859
12274
  onExportEdits,
11860
12275
  onSendToAgent,
11861
12276
  showSendButton = true,
12277
+ sendFailureReason,
11862
12278
  onPointerDown,
11863
12279
  onPointerMove,
11864
12280
  onPointerUp,
@@ -11867,6 +12283,13 @@ function PanelFooter({
11867
12283
  const [copied, setCopied] = React30.useState(false);
11868
12284
  const [copyError, setCopyError] = React30.useState(false);
11869
12285
  const [sendStatus, setSendStatus] = React30.useState("idle");
12286
+ const prevCanTriggerSendRef = React30.useRef(canTriggerSend);
12287
+ React30.useEffect(() => {
12288
+ if (prevCanTriggerSendRef.current !== canTriggerSend) {
12289
+ prevCanTriggerSendRef.current = canTriggerSend;
12290
+ setSendStatus("idle");
12291
+ }
12292
+ }, [canTriggerSend]);
11870
12293
  const handleCopy = async () => {
11871
12294
  if (!onExportEdits) return;
11872
12295
  const success = await onExportEdits();
@@ -11880,6 +12303,7 @@ function PanelFooter({
11880
12303
  setCopyError(true);
11881
12304
  setTimeout(() => setCopyError(false), 2e3);
11882
12305
  };
12306
+ const sendTooltipLabel = sendStatus === "offline" ? sendFailureReason === "unreachable" ? "Agent unreachable \u2014 click to retry" : "Agent rejected the edit \u2014 click to retry" : "Apply changes via agent";
11883
12307
  const handleSendToAgent = async () => {
11884
12308
  if (!onSendToAgent || sendStatus === "sending") return;
11885
12309
  setSendStatus("sending");
@@ -11889,7 +12313,6 @@ function PanelFooter({
11889
12313
  setTimeout(() => setSendStatus("idle"), 2e3);
11890
12314
  } else {
11891
12315
  setSendStatus("offline");
11892
- setTimeout(() => setSendStatus("idle"), 2e3);
11893
12316
  }
11894
12317
  };
11895
12318
  return /* @__PURE__ */ jsxs18(
@@ -11917,7 +12340,7 @@ function PanelFooter({
11917
12340
  children: copyError ? /* @__PURE__ */ jsx24(X3, { className: "text-red-500" }) : copied ? /* @__PURE__ */ jsx24(Check3, { className: "text-green-500" }) : /* @__PURE__ */ jsx24(Copy2, {})
11918
12341
  }
11919
12342
  ) }),
11920
- showSendButton && onSendToAgent && /* @__PURE__ */ jsx24("span", { className: !canTriggerSend || sendStatus === "sending" ? "cursor-not-allowed" : void 0, children: /* @__PURE__ */ jsx24(Tip, { label: "Apply changes via agent", children: /* @__PURE__ */ jsx24(
12343
+ showSendButton && onSendToAgent && /* @__PURE__ */ jsx24("span", { className: !canTriggerSend || sendStatus === "sending" ? "cursor-not-allowed" : void 0, children: /* @__PURE__ */ jsx24(Tip, { label: sendTooltipLabel, children: /* @__PURE__ */ jsx24(
11921
12344
  Button,
11922
12345
  {
11923
12346
  variant: "outline",
@@ -12634,6 +13057,7 @@ function DirectEditPanelInner({
12634
13057
  onSendToAgent,
12635
13058
  canSendToAgent = false,
12636
13059
  showSendButton = true,
13060
+ sendFailureReason,
12637
13061
  className,
12638
13062
  style,
12639
13063
  panelRef,
@@ -12787,6 +13211,7 @@ function DirectEditPanelInner({
12787
13211
  onExportEdits,
12788
13212
  onSendToAgent,
12789
13213
  showSendButton,
13214
+ sendFailureReason,
12790
13215
  onPointerDown: onHeaderPointerDown,
12791
13216
  onPointerMove: onHeaderPointerMove,
12792
13217
  onPointerUp: onHeaderPointerUp,
@@ -12821,7 +13246,8 @@ function DirectEditPanelContent() {
12821
13246
  comments,
12822
13247
  activeCommentId,
12823
13248
  textEditingElement,
12824
- agentAvailable
13249
+ agentAvailable,
13250
+ lastSendFailure
12825
13251
  } = useDirectEditState();
12826
13252
  const {
12827
13253
  selectParent,
@@ -12853,7 +13279,9 @@ function DirectEditPanelContent() {
12853
13279
  setActiveCommentId,
12854
13280
  startTextEditing,
12855
13281
  toggleEditMode,
12856
- deleteSelection
13282
+ deleteSelection,
13283
+ setCommentDraftText,
13284
+ setCommentDraftBlockedHandler
12857
13285
  } = useDirectEditActions();
12858
13286
  const {
12859
13287
  position,
@@ -12875,7 +13303,8 @@ function DirectEditPanelContent() {
12875
13303
  });
12876
13304
  React34.useEffect(() => {
12877
13305
  commentDraftRef.current = "";
12878
- }, [activeCommentId]);
13306
+ setCommentDraftText("");
13307
+ }, [activeCommentId, setCommentDraftText]);
12879
13308
  const activeDraftComment = React34.useMemo(() => {
12880
13309
  if (!commentTargetElement || !activeCommentId) return null;
12881
13310
  const active = comments.find((comment) => comment.id === activeCommentId);
@@ -12895,6 +13324,18 @@ function DirectEditPanelContent() {
12895
13324
  const triggerCommentInputAttention = React34.useCallback((commentId) => {
12896
13325
  setCommentInputAttention((prev) => prev?.commentId === commentId ? { commentId, nonce: prev.nonce + 1 } : { commentId, nonce: 1 });
12897
13326
  }, []);
13327
+ React34.useEffect(() => {
13328
+ if (!activeCommentId) {
13329
+ setCommentDraftBlockedHandler(null);
13330
+ return;
13331
+ }
13332
+ setCommentDraftBlockedHandler(() => {
13333
+ triggerCommentInputAttention(activeCommentId);
13334
+ });
13335
+ return () => {
13336
+ setCommentDraftBlockedHandler(null);
13337
+ };
13338
+ }, [activeCommentId, setCommentDraftBlockedHandler, triggerCommentInputAttention]);
12898
13339
  const hasPendingCommentDraft = React34.useCallback((nextCommentId = null) => {
12899
13340
  if (!activeCommentId) return false;
12900
13341
  if (nextCommentId && nextCommentId === activeCommentId) return false;
@@ -12915,6 +13356,20 @@ function DirectEditPanelContent() {
12915
13356
  }
12916
13357
  setActiveCommentId(id);
12917
13358
  }, [activeCommentId, comments, hasPendingCommentDraft, deleteComment, setActiveCommentId]);
13359
+ const handleCommentPillClick = React34.useCallback(() => {
13360
+ if (activeDraftComment) {
13361
+ handleSetActiveComment(null);
13362
+ return;
13363
+ }
13364
+ if (hasPendingCommentDraft()) return;
13365
+ if (!commentTargetElement) return;
13366
+ const existingDraft = comments.find((comment) => comment.element === commentTargetElement && comment.text.trim().length === 0);
13367
+ if (existingDraft) {
13368
+ setActiveCommentId(existingDraft.id);
13369
+ return;
13370
+ }
13371
+ addComment(commentTargetElement, getElementCommentAnchor(commentTargetElement));
13372
+ }, [activeDraftComment, handleSetActiveComment, hasPendingCommentDraft, commentTargetElement, comments, setActiveCommentId, addComment]);
12918
13373
  React34.useEffect(() => {
12919
13374
  const previous = previousCommentTriggerRef.current;
12920
13375
  previousCommentTriggerRef.current = { editModeActive, commentTargetElement };
@@ -12930,18 +13385,18 @@ function DirectEditPanelContent() {
12930
13385
  setActiveCommentId(null);
12931
13386
  return;
12932
13387
  }
12933
- if (activeCommentId) return;
12934
- const existingDraft = comments.find((comment) => comment.element === commentTargetElement && comment.text.trim().length === 0);
12935
- if (existingDraft) {
12936
- setActiveCommentId(existingDraft.id);
12937
- return;
13388
+ if (activeCommentId) {
13389
+ const active = comments.find((comment) => comment.id === activeCommentId);
13390
+ if (active && active.text.trim().length === 0 && active.element !== commentTargetElement) {
13391
+ deleteComment(active.id);
13392
+ setActiveCommentId(null);
13393
+ }
12938
13394
  }
12939
- addComment(commentTargetElement, getElementCommentAnchor(commentTargetElement));
12940
13395
  }, [
12941
13396
  activeCommentId,
12942
- addComment,
12943
13397
  commentTargetElement,
12944
13398
  comments,
13399
+ deleteComment,
12945
13400
  editModeActive,
12946
13401
  setActiveCommentId,
12947
13402
  textEditingElement
@@ -12990,6 +13445,7 @@ function DirectEditPanelContent() {
12990
13445
  comment: activeDraftComment,
12991
13446
  attentionNonce: commentInputAttention?.commentId === activeDraftComment.id ? commentInputAttention.nonce : 0,
12992
13447
  draftRef: commentDraftRef,
13448
+ onDraftTextChange: setCommentDraftText,
12993
13449
  onSubmit: (text) => submitCommentDraft(activeDraftComment.id, text),
12994
13450
  onCancel: () => handleSetActiveComment(null)
12995
13451
  }
@@ -13134,7 +13590,10 @@ function DirectEditPanelContent() {
13134
13590
  },
13135
13591
  isComponentPrimitive,
13136
13592
  enableResizeHandles: true,
13137
- onResizeSizingChange: updateSizingProperties
13593
+ onResizeSizingChange: updateSizingProperties,
13594
+ showCommentPill: editModeActive,
13595
+ isCommentActive: Boolean(activeDraftComment),
13596
+ onCommentPillClick: handleCommentPillClick
13138
13597
  }
13139
13598
  ) : selectedElements.length > 1 && !textEditingElement ? /* @__PURE__ */ jsx29(MultiSelectionOverlay, { selectedElements }) : null;
13140
13599
  const selectionChrome = selectionChromeContent && container ? createPortal(selectionChromeContent, container) : null;
@@ -14073,7 +14532,7 @@ function useToolbarDock(toolbarRef) {
14073
14532
  }
14074
14533
 
14075
14534
  // src/toolbar.tsx
14076
- import { MousePointer2, Command as Command2, Send as Send3, Check as Check8, X as X5 } from "lucide-react";
14535
+ import { MousePointer2, Command as Command2, Send as Send3, Check as Check8, X as X5, Square as Square2, Type as Type2 } from "lucide-react";
14077
14536
 
14078
14537
  // src/toolbar/edits-popover.tsx
14079
14538
  import * as React38 from "react";
@@ -14136,7 +14595,8 @@ function EditsPopover({
14136
14595
  onExportAllEdits,
14137
14596
  onClearSessionEdits,
14138
14597
  onRemoveSessionEdit,
14139
- onDeleteComment
14598
+ onDeleteComment,
14599
+ sendFailure
14140
14600
  }) {
14141
14601
  const [copied, setCopied] = React38.useState(false);
14142
14602
  const editsPopupRef = React38.useRef(null);
@@ -14149,6 +14609,7 @@ function EditsPopover({
14149
14609
  const visibleItems = React38.useMemo(() => {
14150
14610
  return editsSnapshot.filter((item) => {
14151
14611
  if (item.type === "comment") return true;
14612
+ if (item.edit.deleted) return true;
14152
14613
  if (!item.edit.move) return true;
14153
14614
  const moveIntent = getMoveIntentForEdit(item.edit, movePlanContext);
14154
14615
  const hasStyleOrText = Object.keys(item.edit.pendingStyles).length > 0 || item.edit.textEdit != null;
@@ -14253,12 +14714,15 @@ ${text}`);
14253
14714
  visibleItems.length === 0 && multiSelectContextItems.length === 0 ? /* @__PURE__ */ jsx32("div", { className: "px-3 pb-3 pt-1 text-xs text-muted-foreground", children: "No edits or comments yet." }) : /* @__PURE__ */ jsxs25("div", { className: "max-h-[240px] overflow-y-auto px-1 py-1", children: [
14254
14715
  visibleItems.map((item, i) => {
14255
14716
  const isEdit = item.type === "edit";
14717
+ const isDeleted = isEdit && Boolean(item.edit.deleted);
14256
14718
  const moveIntent = isEdit && item.edit.move ? getMoveIntentForEdit(item.edit, movePlanContext) : null;
14257
14719
  const isMoved = Boolean(moveIntent);
14258
14720
  const locator = isEdit ? item.edit.locator : item.comment.locator;
14259
14721
  const componentName = locator.reactStack[0]?.name ?? locator.tagName;
14260
14722
  let valueSummary = "";
14261
- if (isEdit) {
14723
+ if (isEdit && isDeleted) {
14724
+ valueSummary = locator.textPreview || locator.domSelector || locator.tagName;
14725
+ } else if (isEdit) {
14262
14726
  const entries = Object.entries(item.edit.pendingStyles);
14263
14727
  const editValues = [];
14264
14728
  for (const [prop, value] of entries) {
@@ -14279,6 +14743,7 @@ ${text}`);
14279
14743
  }
14280
14744
  valueSummary = commentValues.join(", ");
14281
14745
  }
14746
+ const failed = isEdit ? sendFailure?.failedEditElements.includes(item.edit.element) : sendFailure?.failedCommentIds.includes(item.comment.id);
14282
14747
  return /* @__PURE__ */ jsxs25(
14283
14748
  "div",
14284
14749
  {
@@ -14297,13 +14762,16 @@ ${text}`);
14297
14762
  },
14298
14763
  children: [
14299
14764
  /* @__PURE__ */ jsxs25("div", { className: "min-w-0 flex flex-1 flex-col items-start gap-[4px]", children: [
14300
- /* @__PURE__ */ jsxs25(Badge, { variant: "secondary", className: "h-6 shrink-0 px-1.5 text-xs", children: [
14301
- "@<",
14302
- componentName,
14303
- ">"
14765
+ /* @__PURE__ */ jsxs25("div", { className: "flex items-center gap-1", children: [
14766
+ /* @__PURE__ */ jsxs25(Badge, { variant: "secondary", className: "h-6 shrink-0 px-1.5 text-xs", children: [
14767
+ "@<",
14768
+ componentName,
14769
+ ">"
14770
+ ] }),
14771
+ failed && /* @__PURE__ */ jsx32(Badge, { variant: "default", className: "h-6 shrink-0 px-1.5 text-xs bg-red-500 text-white border-transparent", children: "Failed" })
14304
14772
  ] }),
14305
14773
  /* @__PURE__ */ jsxs25("span", { className: "min-w-0 max-w-full truncate text-xs text-muted-foreground", children: [
14306
- isEdit ? isMoved ? "moved: " : "edit: " : "comment: ",
14774
+ isEdit ? isDeleted ? "deleted: " : isMoved ? "moved: " : "edit: " : "comment: ",
14307
14775
  truncateText(valueSummary, 128)
14308
14776
  ] })
14309
14777
  ] }),
@@ -14568,6 +15036,7 @@ function SettingsPopover({
14568
15036
  { label: "Undo", keys: isMac ? [/* @__PURE__ */ jsx33(Command, { className: "size-2.5" }, "cmd"), "Z"] : ["Ctrl", "Z"] },
14569
15037
  { label: "Group selection", keys: isMac ? [/* @__PURE__ */ jsx33(Command, { className: "size-2.5" }, "cmd"), "G"] : ["Ctrl", "G"] },
14570
15038
  { label: "Add frame", keys: ["F"] },
15039
+ { label: "Add text", keys: ["T"] },
14571
15040
  { label: "Add div", keys: ["D"] },
14572
15041
  { label: "Add to selection", keys: [/* @__PURE__ */ jsx33(ArrowBigUp, { className: "size-3" }, "shift"), "Click"] },
14573
15042
  { label: "Marquee select", keys: ["Drag"] },
@@ -14610,6 +15079,8 @@ function DirectEditToolbarInner({
14610
15079
  onExportAllEdits,
14611
15080
  onSendAllToAgents,
14612
15081
  agentAvailable = true,
15082
+ sendFailureReason,
15083
+ sendFailure,
14613
15084
  onClearSessionEdits,
14614
15085
  onRemoveSessionEdit,
14615
15086
  onDeleteComment,
@@ -14619,7 +15090,8 @@ function DirectEditToolbarInner({
14619
15090
  onToggleCanvas,
14620
15091
  onSetCanvasZoom,
14621
15092
  onZoomTo100,
14622
- onFitToViewport
15093
+ onFitToViewport,
15094
+ onInsertElement
14623
15095
  }) {
14624
15096
  const container = usePortalContainer();
14625
15097
  const toolbarRef = React40.useRef(null);
@@ -14628,7 +15100,8 @@ function DirectEditToolbarInner({
14628
15100
  const [activePopover, setActivePopover] = React40.useState(null);
14629
15101
  const [applyStatus, setApplyStatus] = React40.useState("idle");
14630
15102
  const applyTimerRef = React40.useRef(null);
14631
- const showApplyButton = agentAvailable && Boolean(onSendAllToAgents);
15103
+ const showApplyButton = (agentAvailable || applyStatus !== "idle") && Boolean(onSendAllToAgents);
15104
+ const showInsertButtons = Boolean(onInsertElement);
14632
15105
  const totalItemCount = sessionEditCount + multiSelectCount;
14633
15106
  const sizeCacheRef = React40.useRef({});
14634
15107
  React40.useEffect(() => {
@@ -14682,6 +15155,16 @@ function DirectEditToolbarInner({
14682
15155
  setApplyStatus("idle");
14683
15156
  }, 2e3);
14684
15157
  }, []);
15158
+ const prevTotalItemCountRef = React40.useRef(totalItemCount);
15159
+ React40.useEffect(() => {
15160
+ if (prevTotalItemCountRef.current !== totalItemCount) {
15161
+ prevTotalItemCountRef.current = totalItemCount;
15162
+ if (applyStatus === "offline") {
15163
+ setApplyStatus("idle");
15164
+ }
15165
+ }
15166
+ }, [totalItemCount, applyStatus]);
15167
+ 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";
14685
15168
  const handleApplyAll = React40.useCallback(async () => {
14686
15169
  if (!onSendAllToAgents || totalItemCount === 0 || applyStatus === "sending") return;
14687
15170
  setApplyStatus("sending");
@@ -14691,8 +15174,12 @@ function DirectEditToolbarInner({
14691
15174
  } catch {
14692
15175
  success = false;
14693
15176
  }
14694
- setApplyStatus(success ? "sent" : "offline");
14695
- scheduleApplyReset();
15177
+ if (success) {
15178
+ setApplyStatus("sent");
15179
+ scheduleApplyReset();
15180
+ } else {
15181
+ setApplyStatus("offline");
15182
+ }
14696
15183
  }, [applyStatus, onSendAllToAgents, scheduleApplyReset, totalItemCount]);
14697
15184
  const dragHandlers = React40.useMemo(() => ({
14698
15185
  onPointerDown: handlePointerDown,
@@ -14773,6 +15260,38 @@ function DirectEditToolbarInner({
14773
15260
  },
14774
15261
  ...dragHandlers,
14775
15262
  children: [
15263
+ showInsertButtons && /* @__PURE__ */ jsxs27(Fragment8, { children: [
15264
+ /* @__PURE__ */ jsxs27(Tooltip, { children: [
15265
+ /* @__PURE__ */ jsx34(
15266
+ TooltipTrigger,
15267
+ {
15268
+ className: cn(toolbarBtnClass, "text-muted-foreground hover:bg-muted hover:text-foreground"),
15269
+ onPointerDown: (e) => e.stopPropagation(),
15270
+ onClick: () => onInsertElement?.("frame"),
15271
+ children: /* @__PURE__ */ jsx34(Square2, { className: "size-4" })
15272
+ }
15273
+ ),
15274
+ /* @__PURE__ */ jsxs27(TooltipContent, { side: tooltipSide, className: "inline-flex items-center gap-1.5", children: [
15275
+ /* @__PURE__ */ jsx34("span", { children: "Add frame" }),
15276
+ /* @__PURE__ */ jsx34("kbd", { className: kbdClass, children: "F" })
15277
+ ] })
15278
+ ] }),
15279
+ /* @__PURE__ */ jsxs27(Tooltip, { children: [
15280
+ /* @__PURE__ */ jsx34(
15281
+ TooltipTrigger,
15282
+ {
15283
+ className: cn(toolbarBtnClass, "text-muted-foreground hover:bg-muted hover:text-foreground"),
15284
+ onPointerDown: (e) => e.stopPropagation(),
15285
+ onClick: () => onInsertElement?.("text"),
15286
+ children: /* @__PURE__ */ jsx34(Type2, { className: "size-4" })
15287
+ }
15288
+ ),
15289
+ /* @__PURE__ */ jsxs27(TooltipContent, { side: tooltipSide, className: "inline-flex items-center gap-1.5", children: [
15290
+ /* @__PURE__ */ jsx34("span", { children: "Add text" }),
15291
+ /* @__PURE__ */ jsx34("kbd", { className: kbdClass, children: "T" })
15292
+ ] })
15293
+ ] })
15294
+ ] }),
14776
15295
  /* @__PURE__ */ jsx34(
14777
15296
  EditsPopover,
14778
15297
  {
@@ -14785,7 +15304,8 @@ function DirectEditToolbarInner({
14785
15304
  onExportAllEdits,
14786
15305
  onClearSessionEdits,
14787
15306
  onRemoveSessionEdit,
14788
- onDeleteComment
15307
+ onDeleteComment,
15308
+ sendFailure
14789
15309
  }
14790
15310
  ),
14791
15311
  showApplyButton && /* @__PURE__ */ jsxs27(Tooltip, { children: [
@@ -14809,7 +15329,7 @@ function DirectEditToolbarInner({
14809
15329
  ]
14810
15330
  }
14811
15331
  ),
14812
- /* @__PURE__ */ jsx34(TooltipContent, { side: tooltipSide, children: /* @__PURE__ */ jsx34("span", { children: "Apply all changes via agent" }) })
15332
+ /* @__PURE__ */ jsx34(TooltipContent, { side: tooltipSide, children: /* @__PURE__ */ jsx34("span", { children: applyTooltipLabel }) })
14813
15333
  ] }),
14814
15334
  /* @__PURE__ */ jsx34(
14815
15335
  "div",
@@ -14871,7 +15391,7 @@ function DirectEditToolbarInner({
14871
15391
  return toolbar;
14872
15392
  }
14873
15393
  function DirectEditToolbarContent() {
14874
- const { editModeActive, theme, sessionEditCount, multiSelectContextCount, selectedElements, canvas, agentAvailable } = useDirectEditState();
15394
+ const { editModeActive, theme, sessionEditCount, multiSelectContextCount, selectedElements, canvas, agentAvailable, lastSendFailure } = useDirectEditState();
14875
15395
  const {
14876
15396
  toggleEditMode,
14877
15397
  setTheme,
@@ -14881,6 +15401,7 @@ function DirectEditToolbarContent() {
14881
15401
  clearSessionEdits,
14882
15402
  removeSessionEdit,
14883
15403
  deleteComment,
15404
+ insertElement,
14884
15405
  toggleCanvas,
14885
15406
  setCanvasZoom,
14886
15407
  zoomCanvasTo100,
@@ -14903,6 +15424,8 @@ function DirectEditToolbarContent() {
14903
15424
  onExportAllEdits: exportAllEdits,
14904
15425
  onSendAllToAgents: sendAllSessionItemsToAgent,
14905
15426
  agentAvailable,
15427
+ sendFailureReason: lastSendFailure?.reason ?? null,
15428
+ sendFailure: lastSendFailure,
14906
15429
  onClearSessionEdits: clearSessionEdits,
14907
15430
  onRemoveSessionEdit: removeSessionEdit,
14908
15431
  onDeleteComment: deleteComment,
@@ -14911,7 +15434,8 @@ function DirectEditToolbarContent() {
14911
15434
  onToggleCanvas: toggleCanvas,
14912
15435
  onSetCanvasZoom: setCanvasZoom,
14913
15436
  onZoomTo100: zoomCanvasTo100,
14914
- onFitToViewport: fitCanvasToViewport
15437
+ onFitToViewport: fitCanvasToViewport,
15438
+ onInsertElement: insertElement
14915
15439
  }
14916
15440
  );
14917
15441
  }