made-refine 0.2.20 → 0.2.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.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,27 +4275,48 @@ function useSessionManager({
4244
4275
  selectElement(firstChild);
4245
4276
  }
4246
4277
  }, [getSelectableChild, selectElement]);
4278
+ const centerElementOnBody = React3.useCallback((element, size) => {
4279
+ const bodyRect = document.body.getBoundingClientRect();
4280
+ const scaleX = document.body.offsetWidth > 0 ? bodyRect.width / document.body.offsetWidth : 1;
4281
+ const scaleY = document.body.offsetHeight > 0 ? bodyRect.height / document.body.offsetHeight : 1;
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;
4287
+ const left = Math.round((window.innerWidth / 2 - bodyRect.left) / scaleX - width / 2);
4288
+ const top = Math.round((window.innerHeight / 2 - bodyRect.top) / scaleY - height / 2);
4289
+ element.style.left = `${left}px`;
4290
+ element.style.top = `${top}px`;
4291
+ }, []);
4247
4292
  const insertElement = React3.useCallback((kind) => {
4248
4293
  if (!stateRef.current.editModeActive) return;
4249
4294
  saveCurrentToSession();
4250
4295
  const restoreSelection = buildSelectionSnapshot();
4251
4296
  const selectedEl = stateRef.current.selectedElement;
4252
- const hasSelection = kind === "frame" && selectedEl !== null && selectedEl !== document.body && selectedEl.parentElement !== null;
4253
- const width = kind === "frame" ? 100 : 160;
4254
- const height = kind === "frame" ? 100 : 96;
4255
- const element = document.createElement("div");
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");
4256
4300
  element.id = nextGeneratedCanvasId(kind);
4257
4301
  element.setAttribute(GENERATED_CANVAS_NODE_ATTR, kind);
4258
- element.style.width = `${width}px`;
4259
- element.style.height = `${height}px`;
4260
4302
  element.style.boxSizing = "border-box";
4261
4303
  if (kind === "frame") {
4304
+ element.style.width = "100px";
4305
+ element.style.height = "100px";
4262
4306
  element.style.background = "#F5F5F5";
4263
4307
  element.style.border = "1px solid #E0E0E0";
4264
- } else {
4308
+ } else if (kind === "div") {
4309
+ element.style.width = "160px";
4310
+ element.style.height = "96px";
4265
4311
  element.style.borderRadius = "12px";
4266
4312
  element.style.border = "1px solid rgba(13, 153, 255, 0.35)";
4267
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";
4268
4320
  }
4269
4321
  if (hasSelection) {
4270
4322
  const insertionParent = selectedEl.parentElement;
@@ -4275,16 +4327,22 @@ function useSessionManager({
4275
4327
  insertionParent.appendChild(element);
4276
4328
  }
4277
4329
  } else {
4278
- const bodyRect = document.body.getBoundingClientRect();
4279
- const scaleX = document.body.offsetWidth > 0 ? bodyRect.width / document.body.offsetWidth : 1;
4280
- const scaleY = document.body.offsetHeight > 0 ? bodyRect.height / document.body.offsetHeight : 1;
4281
- const left = Math.round((window.innerWidth / 2 - bodyRect.left) / scaleX - width / 2);
4282
- const top = Math.round((window.innerHeight / 2 - bodyRect.top) / scaleY - height / 2);
4283
4330
  element.style.position = "absolute";
4284
- element.style.left = `${left}px`;
4285
- element.style.top = `${top}px`;
4286
4331
  element.style.zIndex = "1";
4287
- document.body.appendChild(element);
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
+ }
4288
4346
  }
4289
4347
  pushUndo({
4290
4348
  type: "structure",
@@ -4299,7 +4357,8 @@ function useSessionManager({
4299
4357
  primaryElement: element,
4300
4358
  pushUndo: false
4301
4359
  });
4302
- }, [applySelection, buildSelectionSnapshot, pushUndo, saveCurrentToSession, stateRef]);
4360
+ onElementInsertedRef.current?.(kind, element);
4361
+ }, [applySelection, buildSelectionSnapshot, centerElementOnBody, onElementInsertedRef, pushUndo, saveCurrentToSession, stateRef]);
4303
4362
  const groupSelection = React3.useCallback(() => {
4304
4363
  const selected = getSanitizedSelection(stateRef.current.selectedElements);
4305
4364
  if (selected.length < 2) return;
@@ -4395,9 +4454,17 @@ function useSessionManager({
4395
4454
  }));
4396
4455
  const sessionSnapshots = /* @__PURE__ */ new Map();
4397
4456
  for (const el of selected) {
4398
- const edit = sessionEditsRef.current.get(el);
4399
- if (edit) sessionSnapshots.set(el, edit);
4400
- 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
+ });
4401
4468
  }
4402
4469
  syncSessionItemCount();
4403
4470
  for (const { element } of snapshots) {
@@ -4418,7 +4485,8 @@ function useSessionManager({
4418
4485
  }
4419
4486
  }
4420
4487
  for (const [el, edit] of sessionSnapshots) {
4421
- sessionEditsRef.current.set(el, edit);
4488
+ if (edit) sessionEditsRef.current.set(el, edit);
4489
+ else sessionEditsRef.current.delete(el);
4422
4490
  }
4423
4491
  syncSessionItemCount();
4424
4492
  }
@@ -4809,7 +4877,7 @@ function useSessionManager({
4809
4877
  saveCurrentToSession();
4810
4878
  const edits = [];
4811
4879
  for (const edit of sessionEditsRef.current.values()) {
4812
- if (!edit.element.isConnected) {
4880
+ if (!edit.element.isConnected && !edit.deleted) {
4813
4881
  sessionEditsRef.current.delete(edit.element);
4814
4882
  continue;
4815
4883
  }
@@ -4978,6 +5046,7 @@ ${exportMarkdown}`);
4978
5046
 
4979
5047
  // src/use-text-and-comments.ts
4980
5048
  import * as React4 from "react";
5049
+ var GENERATED_CANVAS_NODE_ATTR2 = "data-made-refine-canvas-node";
4981
5050
  function clampUnit(value) {
4982
5051
  if (!Number.isFinite(value)) return 0;
4983
5052
  return Math.max(0, Math.min(1, value));
@@ -5013,6 +5082,94 @@ function useTextAndComments({
5013
5082
  editingElement.style.outlineOffset = "";
5014
5083
  editingElement.style.cursor = originalCursor;
5015
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
+ }
5016
5173
  if (newText !== previousText) {
5017
5174
  pushUndo({ type: "textEdit", element: editingElement, originalText, previousText });
5018
5175
  removedSessionEditsRef.current.delete(editingElement);
@@ -5531,28 +5688,30 @@ async function toClientResponse(response) {
5531
5688
  const data = await readJsonRecord(response);
5532
5689
  const bodyOk = data?.ok;
5533
5690
  const parsedOk = typeof bodyOk === "boolean" ? bodyOk : response.ok;
5691
+ const ok = parsedOk && response.ok;
5534
5692
  return {
5535
- ok: parsedOk && response.ok,
5536
- id: readString(data, "id") ?? ""
5693
+ ok,
5694
+ id: readString(data, "id") ?? "",
5695
+ ...!ok ? { errorKind: "rejected" } : {}
5537
5696
  };
5538
5697
  }
5539
5698
  async function postWithSessionToken(path, payload) {
5540
5699
  const idempotencyKey = createIdempotencyKey();
5541
5700
  let session = await bootstrapSession();
5542
- if (!session) return { ok: false, id: "" };
5701
+ if (!session) return { ok: false, id: "", errorKind: "network" };
5543
5702
  let response;
5544
5703
  try {
5545
5704
  response = await sendAnnotationRequest(session, path, payload, idempotencyKey);
5546
5705
  } catch {
5547
- return { ok: false, id: "" };
5706
+ return { ok: false, id: "", errorKind: "network" };
5548
5707
  }
5549
5708
  if (response.status === 401 || response.status === 403) {
5550
5709
  session = await refreshSessionToken(session) ?? await bootstrapSession(true);
5551
- if (!session) return { ok: false, id: "" };
5710
+ if (!session) return { ok: false, id: "", errorKind: "network" };
5552
5711
  try {
5553
5712
  response = await sendAnnotationRequest(session, path, payload, idempotencyKey);
5554
5713
  } catch {
5555
- return { ok: false, id: "" };
5714
+ return { ok: false, id: "", errorKind: "network" };
5556
5715
  }
5557
5716
  }
5558
5717
  return toClientResponse(response);
@@ -5605,8 +5764,10 @@ function buildLocatorPayload(locator) {
5605
5764
  }
5606
5765
  function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrentToSession, removeSessionEdit, deleteComment }) {
5607
5766
  const [agentAvailable, setAgentAvailable] = React5.useState(false);
5767
+ const [lastSendFailure, setLastSendFailure] = React5.useState(null);
5608
5768
  const isMountedRef = React5.useRef(true);
5609
5769
  React5.useEffect(() => {
5770
+ isMountedRef.current = true;
5610
5771
  return () => {
5611
5772
  isMountedRef.current = false;
5612
5773
  };
@@ -5663,7 +5824,7 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5663
5824
  const resolvedPlanContext = movePlanContext ?? buildMovePlanContext(editsForPlan);
5664
5825
  const includeBatchMoveEnvelope = Boolean(options?.includeBatchMoveEnvelope && sessionEdit.move);
5665
5826
  const isBatchSend = Boolean(allEdits && allEdits.length > 1);
5666
- const exportMarkdown = sessionEdit.move ? buildSessionExport(
5827
+ const exportMarkdown = sessionEdit.move || sessionEdit.deleted ? buildSessionExport(
5667
5828
  includeBatchMoveEnvelope ? editsForPlan : [sessionEdit],
5668
5829
  [],
5669
5830
  {
@@ -5679,7 +5840,7 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5679
5840
  }));
5680
5841
  const moveIntent = sessionEdit.move ? getMoveIntentForEdit(sessionEdit, resolvedPlanContext) : null;
5681
5842
  const movePlan = includeBatchMoveEnvelope ? resolvedPlanContext.movePlan : null;
5682
- const hasMeaningfulPayload = changes.length > 0 || sessionEdit.textEdit != null || moveIntent != null;
5843
+ const hasMeaningfulPayload = changes.length > 0 || sessionEdit.textEdit != null || moveIntent != null || Boolean(sessionEdit.deleted);
5683
5844
  if (!hasMeaningfulPayload) return true;
5684
5845
  const profile = getExportContentProfile(
5685
5846
  [sessionEdit],
@@ -5693,17 +5854,44 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5693
5854
  textChange: sessionEdit.textEdit ?? null,
5694
5855
  moveIntent,
5695
5856
  ...movePlan ? { movePlan } : {},
5857
+ ...sessionEdit.deleted ? { deleted: true } : {},
5696
5858
  exportMarkdown: withInstruction(profile, exportMarkdown)
5697
5859
  });
5698
5860
  if (result.ok) {
5699
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
+ }
5700
5876
  }
5701
- return updateAgentAvailability(result.ok);
5702
- } catch {
5703
- 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;
5704
5892
  }
5705
5893
  }, [updateAgentAvailability, removeSessionEdit]);
5706
- const sendSessionCommentToAgent = React5.useCallback(async (comment) => {
5894
+ const sendSessionCommentToAgent = React5.useCallback(async (comment, _options) => {
5707
5895
  const exportMarkdown = buildCommentExport(comment.locator, comment.text, comment.replies);
5708
5896
  const commentProfile = { hasCssEdits: false, hasTextEdits: false, hasMoves: false, hasComments: true };
5709
5897
  try {
@@ -5715,13 +5903,40 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5715
5903
  });
5716
5904
  if (result.ok) {
5717
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
+ }
5718
5920
  }
5719
- return updateAgentAvailability(result.ok);
5720
- } catch {
5721
- 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;
5722
5936
  }
5723
5937
  }, [updateAgentAvailability, deleteComment]);
5724
5938
  const sendEditToAgent2 = React5.useCallback(async () => {
5939
+ if (isMountedRef.current) setLastSendFailure(null);
5725
5940
  const current = stateRef.current;
5726
5941
  if (current.selectedElements.length > 1) {
5727
5942
  saveCurrentToSession();
@@ -5756,9 +5971,28 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5756
5971
  removeSessionEdit(el);
5757
5972
  }
5758
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
+ }
5759
5985
  }
5760
- return updateAgentAvailability(result.ok);
5986
+ return result.ok;
5761
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
+ }
5762
5996
  return updateAgentAvailability(false);
5763
5997
  }
5764
5998
  }
@@ -5781,11 +6015,13 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5781
6015
  return sendSessionEditToAgent(editToSend);
5782
6016
  }, [canSendEditToAgent, sendSessionEditToAgent, saveCurrentToSession]);
5783
6017
  const sendCommentToAgent2 = React5.useCallback(async (id) => {
6018
+ if (isMountedRef.current) setLastSendFailure(null);
5784
6019
  const comment = stateRef.current.comments.find((c) => c.id === id);
5785
6020
  if (!comment) return false;
5786
6021
  return sendSessionCommentToAgent(comment);
5787
6022
  }, [sendSessionCommentToAgent]);
5788
6023
  const sendAllSessionItemsToAgent = React5.useCallback(async () => {
6024
+ if (isMountedRef.current) setLastSendFailure(null);
5789
6025
  const items = getSessionItems();
5790
6026
  const current = stateRef.current;
5791
6027
  const contextOnlyBlocks = getContextOnlyBlocks(current.selectedElements, items);
@@ -5794,25 +6030,44 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5794
6030
  const movePlanContext = buildMovePlanContext(allEdits);
5795
6031
  let moveEnvelopeSent = false;
5796
6032
  let allSucceeded = true;
6033
+ const failedEditElements = [];
6034
+ const failedCommentIds = [];
6035
+ let anyThrown = false;
6036
+ const batchFailKinds = [];
5797
6037
  for (const item of items) {
5798
6038
  let succeeded;
5799
6039
  if (item.type === "edit") {
5800
6040
  const hasMoveIntent = Boolean(item.edit.move && getMoveIntentForEdit(item.edit, movePlanContext));
5801
6041
  const includeBatchMoveEnvelope = hasMoveIntent && !moveEnvelopeSent;
5802
- succeeded = await sendSessionEditToAgent(
5803
- item.edit,
5804
- allEdits,
5805
- movePlanContext,
5806
- { includeBatchMoveEnvelope }
5807
- );
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
+ }
5808
6055
  if (includeBatchMoveEnvelope) moveEnvelopeSent = true;
5809
6056
  } else {
5810
- 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
+ }
5811
6065
  }
5812
6066
  if (!succeeded) {
5813
6067
  allSucceeded = false;
5814
6068
  }
5815
6069
  }
6070
+ let contextBlockFailed = false;
5816
6071
  if (contextOnlyBlocks.length > 0) {
5817
6072
  const primaryEl = current.selectedElements.find(
5818
6073
  (el) => el.isConnected && !allEdits.some((e) => e.element === el)
@@ -5826,16 +6081,39 @@ function useAgentComms({ stateRef, sessionEditsRef, getSessionItems, saveCurrent
5826
6081
  moveIntent: null,
5827
6082
  exportMarkdown: contextOnlyBlocks.join("\n\n")
5828
6083
  });
5829
- 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
+ }
5830
6091
  } catch {
6092
+ updateAgentAvailability(false);
5831
6093
  allSucceeded = false;
6094
+ anyThrown = true;
6095
+ contextBlockFailed = true;
5832
6096
  }
5833
6097
  }
5834
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
+ }
5835
6108
  return allSucceeded;
5836
- }, [getSessionItems, sendSessionCommentToAgent, sendSessionEditToAgent]);
6109
+ }, [getSessionItems, sendSessionCommentToAgent, sendSessionEditToAgent, updateAgentAvailability]);
6110
+ const clearSendFailure = React5.useCallback(() => {
6111
+ if (isMountedRef.current) setLastSendFailure(null);
6112
+ }, []);
5837
6113
  return {
5838
6114
  agentAvailable,
6115
+ lastSendFailure,
6116
+ clearSendFailure,
5839
6117
  canSendEditToAgent,
5840
6118
  sendEditToAgent: sendEditToAgent2,
5841
6119
  sendCommentToAgent: sendCommentToAgent2,
@@ -5882,7 +6160,9 @@ function useKeyboardShortcuts({
5882
6160
  const s = stateRef.current;
5883
6161
  const undoShortcutPressed = usesMetaForUndo ? e.metaKey && !e.ctrlKey && !e.altKey : e.ctrlKey && !e.metaKey && !e.altKey;
5884
6162
  if (undoShortcutPressed && e.key === "z" && !e.shiftKey) {
6163
+ if (!s.editModeActive) return;
5885
6164
  if (s.textEditingElement) return;
6165
+ if (isInputFocused()) return;
5886
6166
  e.preventDefault();
5887
6167
  undo();
5888
6168
  return;
@@ -5937,6 +6217,11 @@ function useKeyboardShortcuts({
5937
6217
  insertElement("frame");
5938
6218
  return;
5939
6219
  }
6220
+ if (lowerKey === "t") {
6221
+ e.preventDefault();
6222
+ insertElement("text");
6223
+ return;
6224
+ }
5940
6225
  if (lowerKey === "d") {
5941
6226
  e.preventDefault();
5942
6227
  insertElement("div");
@@ -6599,6 +6884,10 @@ function DirectEditProvider({ children }) {
6599
6884
  const undoStackRef = React8.useRef([]);
6600
6885
  const sessionEditsRef = React8.useRef(/* @__PURE__ */ new Map());
6601
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);
6602
6891
  const [sessionEditCount, setSessionEditCount] = React8.useState(0);
6603
6892
  const stateRef = React8.useRef(state);
6604
6893
  React8.useEffect(() => {
@@ -6633,12 +6922,13 @@ function DirectEditProvider({ children }) {
6633
6922
  clearSessionEdits,
6634
6923
  groupSelection,
6635
6924
  deleteSelection,
6636
- insertElement
6925
+ insertElement: insertElementBase
6637
6926
  } = useSessionManager({
6638
6927
  stateRef,
6639
6928
  sessionEditsRef,
6640
6929
  removedSessionEditsRef,
6641
6930
  undoStackRef,
6931
+ onElementInsertedRef,
6642
6932
  pushUndo,
6643
6933
  setState,
6644
6934
  setSessionEditCount
@@ -6688,6 +6978,41 @@ function DirectEditProvider({ children }) {
6688
6978
  syncSessionItemCount,
6689
6979
  setState
6690
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
+ }, []);
6691
7016
  const { toggleCanvas, enterCanvas, exitCanvas, setCanvasZoom, fitCanvasToViewport, zoomCanvasTo100 } = useCanvas({
6692
7017
  stateRef,
6693
7018
  setState
@@ -6824,6 +7149,8 @@ function DirectEditProvider({ children }) {
6824
7149
  }, [state.editModeActive]);
6825
7150
  const {
6826
7151
  agentAvailable,
7152
+ lastSendFailure,
7153
+ clearSendFailure,
6827
7154
  canSendEditToAgent,
6828
7155
  sendEditToAgent: sendEditToAgent2,
6829
7156
  sendCommentToAgent: sendCommentToAgent2,
@@ -6850,6 +7177,16 @@ function DirectEditProvider({ children }) {
6850
7177
  } catch {
6851
7178
  }
6852
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]);
6853
7190
  useKeyboardShortcuts({
6854
7191
  stateRef,
6855
7192
  toggleEditMode,
@@ -6879,9 +7216,10 @@ function DirectEditProvider({ children }) {
6879
7216
  const stateContextValue = React8.useMemo(() => ({
6880
7217
  ...state,
6881
7218
  agentAvailable,
7219
+ lastSendFailure,
6882
7220
  sessionEditCount,
6883
7221
  multiSelectContextCount
6884
- }), [agentAvailable, state, sessionEditCount, multiSelectContextCount]);
7222
+ }), [agentAvailable, lastSendFailure, state, sessionEditCount, multiSelectContextCount]);
6885
7223
  const actionsContextValue = React8.useMemo(() => ({
6886
7224
  selectElement,
6887
7225
  selectElements,
@@ -6904,6 +7242,7 @@ function DirectEditProvider({ children }) {
6904
7242
  updateTypographyProperty,
6905
7243
  resetToOriginal,
6906
7244
  exportEdits,
7245
+ clearSendFailure,
6907
7246
  canSendEditToAgent,
6908
7247
  sendEditToAgent: sendEditToAgent2,
6909
7248
  sendAllSessionItemsToAgent,
@@ -6928,6 +7267,8 @@ function DirectEditProvider({ children }) {
6928
7267
  removeSessionEdit,
6929
7268
  startTextEditing,
6930
7269
  commitTextEditing,
7270
+ setCommentDraftText,
7271
+ setCommentDraftBlockedHandler,
6931
7272
  groupSelection,
6932
7273
  deleteSelection,
6933
7274
  insertElement,
@@ -6957,6 +7298,7 @@ function DirectEditProvider({ children }) {
6957
7298
  updateTypographyProperty,
6958
7299
  resetToOriginal,
6959
7300
  exportEdits,
7301
+ clearSendFailure,
6960
7302
  canSendEditToAgent,
6961
7303
  sendEditToAgent2,
6962
7304
  sendAllSessionItemsToAgent,
@@ -6981,6 +7323,8 @@ function DirectEditProvider({ children }) {
6981
7323
  removeSessionEdit,
6982
7324
  startTextEditing,
6983
7325
  commitTextEditing,
7326
+ setCommentDraftText,
7327
+ setCommentDraftBlockedHandler,
6984
7328
  groupSelection,
6985
7329
  deleteSelection,
6986
7330
  insertElement,
@@ -7413,6 +7757,7 @@ function useMove({ onMoveComplete }) {
7413
7757
  { x: 0, y: 0, scaleX: 1, scaleY: 1 }
7414
7758
  );
7415
7759
  const originalTransformRef = React12.useRef("");
7760
+ const composeBaseRef = React12.useRef("");
7416
7761
  const reorderPreviewRef = React12.useRef(/* @__PURE__ */ new Map());
7417
7762
  React12.useEffect(() => {
7418
7763
  dragStateRef.current = dragState;
@@ -7507,6 +7852,7 @@ function useMove({ onMoveComplete }) {
7507
7852
  }
7508
7853
  clearReorderPreview();
7509
7854
  originalTransformRef.current = "";
7855
+ composeBaseRef.current = "";
7510
7856
  initialRectRef.current = { x: 0, y: 0, scaleX: 1, scaleY: 1 };
7511
7857
  dragOptionsRef.current = DEFAULT_DRAG_OPTIONS;
7512
7858
  dragGuardRef.current.deactivate();
@@ -7528,6 +7874,7 @@ function useMove({ onMoveComplete }) {
7528
7874
  draggedElement.style.opacity = "";
7529
7875
  clearReorderPreview();
7530
7876
  originalTransformRef.current = "";
7877
+ composeBaseRef.current = "";
7531
7878
  initialRectRef.current = { x: 0, y: 0, scaleX: 1, scaleY: 1 };
7532
7879
  const dragMode = dragOptionsRef.current.mode;
7533
7880
  dragOptionsRef.current = DEFAULT_DRAG_OPTIONS;
@@ -7588,7 +7935,14 @@ function useMove({ onMoveComplete }) {
7588
7935
  scaleX: element.offsetWidth > 0 ? rect.width / element.offsetWidth : 1,
7589
7936
  scaleY: element.offsetHeight > 0 ? rect.height / element.offsetHeight : 1
7590
7937
  };
7591
- 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
+ }
7592
7946
  dragGuardRef.current.activate();
7593
7947
  setDragState({
7594
7948
  isDragging: true,
@@ -7621,7 +7975,8 @@ function useMove({ onMoveComplete }) {
7621
7975
  const { x, y, scaleX, scaleY } = initialRectRef.current;
7622
7976
  const dx = (e.clientX - dragOffset.x - x) / scaleX;
7623
7977
  const dy = (e.clientY - dragOffset.y - y) / scaleY;
7624
- 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)`;
7625
7980
  }
7626
7981
  if (dragOptionsRef.current.mode === "position") {
7627
7982
  let container2 = findLayoutContainerAtPoint(
@@ -8488,6 +8843,7 @@ function SelectedCommentComposer({
8488
8843
  comment,
8489
8844
  attentionNonce,
8490
8845
  draftRef,
8846
+ onDraftTextChange,
8491
8847
  onSubmit,
8492
8848
  onCancel
8493
8849
  }) {
@@ -8533,7 +8889,8 @@ function SelectedCommentComposer({
8533
8889
  }, [attentionNonce]);
8534
8890
  React17.useEffect(() => {
8535
8891
  if (draftRef) draftRef.current = text;
8536
- }, [draftRef, text]);
8892
+ onDraftTextChange?.(text);
8893
+ }, [draftRef, onDraftTextChange, text]);
8537
8894
  const submit = React17.useCallback(() => {
8538
8895
  const nextText = text.trim();
8539
8896
  if (!nextText) return;
@@ -11917,6 +12274,7 @@ function PanelFooter({
11917
12274
  onExportEdits,
11918
12275
  onSendToAgent,
11919
12276
  showSendButton = true,
12277
+ sendFailureReason,
11920
12278
  onPointerDown,
11921
12279
  onPointerMove,
11922
12280
  onPointerUp,
@@ -11925,6 +12283,13 @@ function PanelFooter({
11925
12283
  const [copied, setCopied] = React30.useState(false);
11926
12284
  const [copyError, setCopyError] = React30.useState(false);
11927
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]);
11928
12293
  const handleCopy = async () => {
11929
12294
  if (!onExportEdits) return;
11930
12295
  const success = await onExportEdits();
@@ -11938,6 +12303,7 @@ function PanelFooter({
11938
12303
  setCopyError(true);
11939
12304
  setTimeout(() => setCopyError(false), 2e3);
11940
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";
11941
12307
  const handleSendToAgent = async () => {
11942
12308
  if (!onSendToAgent || sendStatus === "sending") return;
11943
12309
  setSendStatus("sending");
@@ -11947,7 +12313,6 @@ function PanelFooter({
11947
12313
  setTimeout(() => setSendStatus("idle"), 2e3);
11948
12314
  } else {
11949
12315
  setSendStatus("offline");
11950
- setTimeout(() => setSendStatus("idle"), 2e3);
11951
12316
  }
11952
12317
  };
11953
12318
  return /* @__PURE__ */ jsxs18(
@@ -11975,7 +12340,7 @@ function PanelFooter({
11975
12340
  children: copyError ? /* @__PURE__ */ jsx24(X3, { className: "text-red-500" }) : copied ? /* @__PURE__ */ jsx24(Check3, { className: "text-green-500" }) : /* @__PURE__ */ jsx24(Copy2, {})
11976
12341
  }
11977
12342
  ) }),
11978
- 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(
11979
12344
  Button,
11980
12345
  {
11981
12346
  variant: "outline",
@@ -12692,6 +13057,7 @@ function DirectEditPanelInner({
12692
13057
  onSendToAgent,
12693
13058
  canSendToAgent = false,
12694
13059
  showSendButton = true,
13060
+ sendFailureReason,
12695
13061
  className,
12696
13062
  style,
12697
13063
  panelRef,
@@ -12845,6 +13211,7 @@ function DirectEditPanelInner({
12845
13211
  onExportEdits,
12846
13212
  onSendToAgent,
12847
13213
  showSendButton,
13214
+ sendFailureReason,
12848
13215
  onPointerDown: onHeaderPointerDown,
12849
13216
  onPointerMove: onHeaderPointerMove,
12850
13217
  onPointerUp: onHeaderPointerUp,
@@ -12879,7 +13246,8 @@ function DirectEditPanelContent() {
12879
13246
  comments,
12880
13247
  activeCommentId,
12881
13248
  textEditingElement,
12882
- agentAvailable
13249
+ agentAvailable,
13250
+ lastSendFailure
12883
13251
  } = useDirectEditState();
12884
13252
  const {
12885
13253
  selectParent,
@@ -12911,7 +13279,9 @@ function DirectEditPanelContent() {
12911
13279
  setActiveCommentId,
12912
13280
  startTextEditing,
12913
13281
  toggleEditMode,
12914
- deleteSelection
13282
+ deleteSelection,
13283
+ setCommentDraftText,
13284
+ setCommentDraftBlockedHandler
12915
13285
  } = useDirectEditActions();
12916
13286
  const {
12917
13287
  position,
@@ -12933,7 +13303,8 @@ function DirectEditPanelContent() {
12933
13303
  });
12934
13304
  React34.useEffect(() => {
12935
13305
  commentDraftRef.current = "";
12936
- }, [activeCommentId]);
13306
+ setCommentDraftText("");
13307
+ }, [activeCommentId, setCommentDraftText]);
12937
13308
  const activeDraftComment = React34.useMemo(() => {
12938
13309
  if (!commentTargetElement || !activeCommentId) return null;
12939
13310
  const active = comments.find((comment) => comment.id === activeCommentId);
@@ -12953,6 +13324,18 @@ function DirectEditPanelContent() {
12953
13324
  const triggerCommentInputAttention = React34.useCallback((commentId) => {
12954
13325
  setCommentInputAttention((prev) => prev?.commentId === commentId ? { commentId, nonce: prev.nonce + 1 } : { commentId, nonce: 1 });
12955
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]);
12956
13339
  const hasPendingCommentDraft = React34.useCallback((nextCommentId = null) => {
12957
13340
  if (!activeCommentId) return false;
12958
13341
  if (nextCommentId && nextCommentId === activeCommentId) return false;
@@ -13062,6 +13445,7 @@ function DirectEditPanelContent() {
13062
13445
  comment: activeDraftComment,
13063
13446
  attentionNonce: commentInputAttention?.commentId === activeDraftComment.id ? commentInputAttention.nonce : 0,
13064
13447
  draftRef: commentDraftRef,
13448
+ onDraftTextChange: setCommentDraftText,
13065
13449
  onSubmit: (text) => submitCommentDraft(activeDraftComment.id, text),
13066
13450
  onCancel: () => handleSetActiveComment(null)
13067
13451
  }
@@ -14148,7 +14532,7 @@ function useToolbarDock(toolbarRef) {
14148
14532
  }
14149
14533
 
14150
14534
  // src/toolbar.tsx
14151
- 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";
14152
14536
 
14153
14537
  // src/toolbar/edits-popover.tsx
14154
14538
  import * as React38 from "react";
@@ -14211,7 +14595,8 @@ function EditsPopover({
14211
14595
  onExportAllEdits,
14212
14596
  onClearSessionEdits,
14213
14597
  onRemoveSessionEdit,
14214
- onDeleteComment
14598
+ onDeleteComment,
14599
+ sendFailure
14215
14600
  }) {
14216
14601
  const [copied, setCopied] = React38.useState(false);
14217
14602
  const editsPopupRef = React38.useRef(null);
@@ -14224,6 +14609,7 @@ function EditsPopover({
14224
14609
  const visibleItems = React38.useMemo(() => {
14225
14610
  return editsSnapshot.filter((item) => {
14226
14611
  if (item.type === "comment") return true;
14612
+ if (item.edit.deleted) return true;
14227
14613
  if (!item.edit.move) return true;
14228
14614
  const moveIntent = getMoveIntentForEdit(item.edit, movePlanContext);
14229
14615
  const hasStyleOrText = Object.keys(item.edit.pendingStyles).length > 0 || item.edit.textEdit != null;
@@ -14328,12 +14714,15 @@ ${text}`);
14328
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: [
14329
14715
  visibleItems.map((item, i) => {
14330
14716
  const isEdit = item.type === "edit";
14717
+ const isDeleted = isEdit && Boolean(item.edit.deleted);
14331
14718
  const moveIntent = isEdit && item.edit.move ? getMoveIntentForEdit(item.edit, movePlanContext) : null;
14332
14719
  const isMoved = Boolean(moveIntent);
14333
14720
  const locator = isEdit ? item.edit.locator : item.comment.locator;
14334
14721
  const componentName = locator.reactStack[0]?.name ?? locator.tagName;
14335
14722
  let valueSummary = "";
14336
- if (isEdit) {
14723
+ if (isEdit && isDeleted) {
14724
+ valueSummary = locator.textPreview || locator.domSelector || locator.tagName;
14725
+ } else if (isEdit) {
14337
14726
  const entries = Object.entries(item.edit.pendingStyles);
14338
14727
  const editValues = [];
14339
14728
  for (const [prop, value] of entries) {
@@ -14354,6 +14743,7 @@ ${text}`);
14354
14743
  }
14355
14744
  valueSummary = commentValues.join(", ");
14356
14745
  }
14746
+ const failed = isEdit ? sendFailure?.failedEditElements.includes(item.edit.element) : sendFailure?.failedCommentIds.includes(item.comment.id);
14357
14747
  return /* @__PURE__ */ jsxs25(
14358
14748
  "div",
14359
14749
  {
@@ -14372,13 +14762,16 @@ ${text}`);
14372
14762
  },
14373
14763
  children: [
14374
14764
  /* @__PURE__ */ jsxs25("div", { className: "min-w-0 flex flex-1 flex-col items-start gap-[4px]", children: [
14375
- /* @__PURE__ */ jsxs25(Badge, { variant: "secondary", className: "h-6 shrink-0 px-1.5 text-xs", children: [
14376
- "@<",
14377
- componentName,
14378
- ">"
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" })
14379
14772
  ] }),
14380
14773
  /* @__PURE__ */ jsxs25("span", { className: "min-w-0 max-w-full truncate text-xs text-muted-foreground", children: [
14381
- isEdit ? isMoved ? "moved: " : "edit: " : "comment: ",
14774
+ isEdit ? isDeleted ? "deleted: " : isMoved ? "moved: " : "edit: " : "comment: ",
14382
14775
  truncateText(valueSummary, 128)
14383
14776
  ] })
14384
14777
  ] }),
@@ -14643,6 +15036,7 @@ function SettingsPopover({
14643
15036
  { label: "Undo", keys: isMac ? [/* @__PURE__ */ jsx33(Command, { className: "size-2.5" }, "cmd"), "Z"] : ["Ctrl", "Z"] },
14644
15037
  { label: "Group selection", keys: isMac ? [/* @__PURE__ */ jsx33(Command, { className: "size-2.5" }, "cmd"), "G"] : ["Ctrl", "G"] },
14645
15038
  { label: "Add frame", keys: ["F"] },
15039
+ { label: "Add text", keys: ["T"] },
14646
15040
  { label: "Add div", keys: ["D"] },
14647
15041
  { label: "Add to selection", keys: [/* @__PURE__ */ jsx33(ArrowBigUp, { className: "size-3" }, "shift"), "Click"] },
14648
15042
  { label: "Marquee select", keys: ["Drag"] },
@@ -14685,6 +15079,8 @@ function DirectEditToolbarInner({
14685
15079
  onExportAllEdits,
14686
15080
  onSendAllToAgents,
14687
15081
  agentAvailable = true,
15082
+ sendFailureReason,
15083
+ sendFailure,
14688
15084
  onClearSessionEdits,
14689
15085
  onRemoveSessionEdit,
14690
15086
  onDeleteComment,
@@ -14694,7 +15090,8 @@ function DirectEditToolbarInner({
14694
15090
  onToggleCanvas,
14695
15091
  onSetCanvasZoom,
14696
15092
  onZoomTo100,
14697
- onFitToViewport
15093
+ onFitToViewport,
15094
+ onInsertElement
14698
15095
  }) {
14699
15096
  const container = usePortalContainer();
14700
15097
  const toolbarRef = React40.useRef(null);
@@ -14703,7 +15100,8 @@ function DirectEditToolbarInner({
14703
15100
  const [activePopover, setActivePopover] = React40.useState(null);
14704
15101
  const [applyStatus, setApplyStatus] = React40.useState("idle");
14705
15102
  const applyTimerRef = React40.useRef(null);
14706
- const showApplyButton = agentAvailable && Boolean(onSendAllToAgents);
15103
+ const showApplyButton = (agentAvailable || applyStatus !== "idle") && Boolean(onSendAllToAgents);
15104
+ const showInsertButtons = Boolean(onInsertElement);
14707
15105
  const totalItemCount = sessionEditCount + multiSelectCount;
14708
15106
  const sizeCacheRef = React40.useRef({});
14709
15107
  React40.useEffect(() => {
@@ -14757,6 +15155,16 @@ function DirectEditToolbarInner({
14757
15155
  setApplyStatus("idle");
14758
15156
  }, 2e3);
14759
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";
14760
15168
  const handleApplyAll = React40.useCallback(async () => {
14761
15169
  if (!onSendAllToAgents || totalItemCount === 0 || applyStatus === "sending") return;
14762
15170
  setApplyStatus("sending");
@@ -14766,8 +15174,12 @@ function DirectEditToolbarInner({
14766
15174
  } catch {
14767
15175
  success = false;
14768
15176
  }
14769
- setApplyStatus(success ? "sent" : "offline");
14770
- scheduleApplyReset();
15177
+ if (success) {
15178
+ setApplyStatus("sent");
15179
+ scheduleApplyReset();
15180
+ } else {
15181
+ setApplyStatus("offline");
15182
+ }
14771
15183
  }, [applyStatus, onSendAllToAgents, scheduleApplyReset, totalItemCount]);
14772
15184
  const dragHandlers = React40.useMemo(() => ({
14773
15185
  onPointerDown: handlePointerDown,
@@ -14848,6 +15260,38 @@ function DirectEditToolbarInner({
14848
15260
  },
14849
15261
  ...dragHandlers,
14850
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
+ ] }),
14851
15295
  /* @__PURE__ */ jsx34(
14852
15296
  EditsPopover,
14853
15297
  {
@@ -14860,7 +15304,8 @@ function DirectEditToolbarInner({
14860
15304
  onExportAllEdits,
14861
15305
  onClearSessionEdits,
14862
15306
  onRemoveSessionEdit,
14863
- onDeleteComment
15307
+ onDeleteComment,
15308
+ sendFailure
14864
15309
  }
14865
15310
  ),
14866
15311
  showApplyButton && /* @__PURE__ */ jsxs27(Tooltip, { children: [
@@ -14884,7 +15329,7 @@ function DirectEditToolbarInner({
14884
15329
  ]
14885
15330
  }
14886
15331
  ),
14887
- /* @__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 }) })
14888
15333
  ] }),
14889
15334
  /* @__PURE__ */ jsx34(
14890
15335
  "div",
@@ -14946,7 +15391,7 @@ function DirectEditToolbarInner({
14946
15391
  return toolbar;
14947
15392
  }
14948
15393
  function DirectEditToolbarContent() {
14949
- const { editModeActive, theme, sessionEditCount, multiSelectContextCount, selectedElements, canvas, agentAvailable } = useDirectEditState();
15394
+ const { editModeActive, theme, sessionEditCount, multiSelectContextCount, selectedElements, canvas, agentAvailable, lastSendFailure } = useDirectEditState();
14950
15395
  const {
14951
15396
  toggleEditMode,
14952
15397
  setTheme,
@@ -14956,6 +15401,7 @@ function DirectEditToolbarContent() {
14956
15401
  clearSessionEdits,
14957
15402
  removeSessionEdit,
14958
15403
  deleteComment,
15404
+ insertElement,
14959
15405
  toggleCanvas,
14960
15406
  setCanvasZoom,
14961
15407
  zoomCanvasTo100,
@@ -14978,6 +15424,8 @@ function DirectEditToolbarContent() {
14978
15424
  onExportAllEdits: exportAllEdits,
14979
15425
  onSendAllToAgents: sendAllSessionItemsToAgent,
14980
15426
  agentAvailable,
15427
+ sendFailureReason: lastSendFailure?.reason ?? null,
15428
+ sendFailure: lastSendFailure,
14981
15429
  onClearSessionEdits: clearSessionEdits,
14982
15430
  onRemoveSessionEdit: removeSessionEdit,
14983
15431
  onDeleteComment: deleteComment,
@@ -14986,7 +15434,8 @@ function DirectEditToolbarContent() {
14986
15434
  onToggleCanvas: toggleCanvas,
14987
15435
  onSetCanvasZoom: setCanvasZoom,
14988
15436
  onZoomTo100: zoomCanvasTo100,
14989
- onFitToViewport: fitCanvasToViewport
15437
+ onFitToViewport: fitCanvasToViewport,
15438
+ onInsertElement: insertElement
14990
15439
  }
14991
15440
  );
14992
15441
  }