mesurer-solid 0.2.0-beta.11 → 0.2.0-beta.13

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/inject.js CHANGED
@@ -7679,6 +7679,16 @@ function ru(e) {
7679
7679
  }), n;
7680
7680
  }
7681
7681
  }), d), Z(d, f), Z(f, p), Q(c, Y(q, {
7682
+ get when() {
7683
+ return e.description;
7684
+ },
7685
+ get children() {
7686
+ var t = X("p", { class: "msr:m-0 msr:bg-white/60 msr:px-2 msr:pb-1.5 msr:pt-0.5 msr:text-[10px] msr:leading-4 msr:text-ink-500" });
7687
+ return Q(t, () => e.description), J(() => e.id, (e, n) => {
7688
+ $(t, "data-mesurer-plugin-description", e, n);
7689
+ }), t;
7690
+ }
7691
+ }), null), Q(c, Y(q, {
7682
7692
  get when() {
7683
7693
  return Ui(() => !!n())() ? t() : n();
7684
7694
  },
@@ -9843,7 +9853,7 @@ function zf(e) {
9843
9853
  }
9844
9854
  };
9845
9855
  }
9846
- var Bf = "/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --msr-font-sans: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\",\n \"Noto Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\",\n \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --msr-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\n --msr-color-red-50: oklch(97.1% 0.013 17.38);\n --msr-color-red-200: oklch(88.5% 0.062 18.334);\n --msr-color-red-600: oklch(57.7% 0.245 27.325);\n --msr-color-black: #000;\n --msr-color-white: #fff;\n --msr-spacing: 0.25rem;\n --msr-font-weight-normal: 400;\n --msr-font-weight-medium: 500;\n --msr-font-weight-semibold: 600;\n --msr-radius-md: 0.375rem;\n --msr-radius-lg: 0.5rem;\n --msr-default-transition-duration: 150ms;\n --msr-default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --msr-default-font-family: var(--msr-font-sans);\n --msr-default-mono-font-family: var(--msr-font-mono);\n --msr-color-ink-50: #f8fafc;\n --msr-color-ink-200: #e2e8f0;\n --msr-color-ink-500: #64748b;\n --msr-color-ink-700: #334155;\n --msr-color-ink-900: #0f172a;\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--msr-default-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--msr-default-font-feature-settings, normal);\n font-variation-settings: var(--msr-default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--msr-default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--msr-default-mono-font-feature-settings, normal);\n font-variation-settings: var(--msr-default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring:where(:not(iframe)) {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .msr\\:pointer-events-auto {\n pointer-events: auto;\n }\n .msr\\:pointer-events-none {\n pointer-events: none;\n }\n .msr\\:absolute {\n position: absolute;\n }\n .msr\\:fixed {\n position: fixed;\n }\n .msr\\:relative {\n position: relative;\n }\n .msr\\:inset-0 {\n inset: 0px;\n }\n .msr\\:top-0 {\n top: 0px;\n }\n .msr\\:top-1\\/2 {\n top: calc(1 / 2 * 100%);\n }\n .msr\\:top-\\[18px\\] {\n top: 18px;\n }\n .msr\\:top-full {\n top: 100%;\n }\n .msr\\:right-0 {\n right: 0px;\n }\n .msr\\:right-2 {\n right: calc(var(--msr-spacing) * 2);\n }\n .msr\\:right-\\[8px\\] {\n right: 8px;\n }\n .msr\\:bottom-0 {\n bottom: 0px;\n }\n .msr\\:bottom-full {\n bottom: 100%;\n }\n .msr\\:left-0 {\n left: 0px;\n }\n .msr\\:left-1\\/2 {\n left: calc(1 / 2 * 100%);\n }\n .msr\\:left-\\[8px\\] {\n left: 8px;\n }\n .msr\\:left-\\[18px\\] {\n left: 18px;\n }\n .msr\\:z-10 {\n z-index: 10;\n }\n .msr\\:z-\\[60\\] {\n z-index: 60;\n }\n .msr\\:z-\\[70\\] {\n z-index: 70;\n }\n .msr\\:z-\\[80\\] {\n z-index: 80;\n }\n .msr\\:z-\\[90\\] {\n z-index: 90;\n }\n .msr\\:z-\\[94\\] {\n z-index: 94;\n }\n .msr\\:z-\\[95\\] {\n z-index: 95;\n }\n .msr\\:col-span-2 {\n grid-column: span 2 / span 2;\n }\n .msr\\:col-start-1 {\n grid-column-start: 1;\n }\n .msr\\:col-start-2 {\n grid-column-start: 2;\n }\n .msr\\:col-start-3 {\n grid-column-start: 3;\n }\n .msr\\:m-0 {\n margin: 0px;\n }\n .msr\\:mx-1 {\n margin-inline: var(--msr-spacing);\n }\n .msr\\:mt-1 {\n margin-top: var(--msr-spacing);\n }\n .msr\\:mt-1\\.5 {\n margin-top: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:mt-2 {\n margin-top: calc(var(--msr-spacing) * 2);\n }\n .msr\\:mb-1 {\n margin-bottom: var(--msr-spacing);\n }\n .msr\\:mb-2 {\n margin-bottom: calc(var(--msr-spacing) * 2);\n }\n .msr\\:-ml-1 {\n margin-left: calc(var(--msr-spacing) * -1);\n }\n .msr\\:ml-1 {\n margin-left: var(--msr-spacing);\n }\n .msr\\:ml-2 {\n margin-left: calc(var(--msr-spacing) * 2);\n }\n .msr\\:ml-6 {\n margin-left: calc(var(--msr-spacing) * 6);\n }\n .msr\\:box-border {\n box-sizing: border-box;\n }\n .msr\\:block {\n display: block;\n }\n .msr\\:flex {\n display: flex;\n }\n .msr\\:grid {\n display: grid;\n }\n .msr\\:inline-flex {\n display: inline-flex;\n }\n .msr\\:size-1\\.5 {\n width: calc(var(--msr-spacing) * 1.5);\n height: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:size-3 {\n width: calc(var(--msr-spacing) * 3);\n height: calc(var(--msr-spacing) * 3);\n }\n .msr\\:size-4 {\n width: calc(var(--msr-spacing) * 4);\n height: calc(var(--msr-spacing) * 4);\n }\n .msr\\:size-6 {\n width: calc(var(--msr-spacing) * 6);\n height: calc(var(--msr-spacing) * 6);\n }\n .msr\\:size-7 {\n width: calc(var(--msr-spacing) * 7);\n height: calc(var(--msr-spacing) * 7);\n }\n .msr\\:size-8 {\n width: calc(var(--msr-spacing) * 8);\n height: calc(var(--msr-spacing) * 8);\n }\n .msr\\:size-\\[10px\\] {\n width: 10px;\n height: 10px;\n }\n .msr\\:size-\\[18px\\] {\n width: 18px;\n height: 18px;\n }\n .msr\\:size-full {\n width: 100%;\n height: 100%;\n }\n .msr\\:h-5 {\n height: calc(var(--msr-spacing) * 5);\n }\n .msr\\:h-6 {\n height: calc(var(--msr-spacing) * 6);\n }\n .msr\\:h-7 {\n height: calc(var(--msr-spacing) * 7);\n }\n .msr\\:h-8 {\n height: calc(var(--msr-spacing) * 8);\n }\n .msr\\:h-20 {\n height: calc(var(--msr-spacing) * 20);\n }\n .msr\\:h-\\[14px\\] {\n height: 14px;\n }\n .msr\\:h-\\[18px\\] {\n height: 18px;\n }\n .msr\\:h-\\[19px\\] {\n height: 19px;\n }\n .msr\\:h-full {\n height: 100%;\n }\n .msr\\:h-px {\n height: 1px;\n }\n .msr\\:max-h-36 {\n max-height: calc(var(--msr-spacing) * 36);\n }\n .msr\\:max-h-\\[220px\\] {\n max-height: 220px;\n }\n .msr\\:max-h-\\[calc\\(100vh-16px\\)\\] {\n max-height: calc(100vh - 16px);\n }\n .msr\\:max-h-\\[min\\(70vh\\,34rem\\)\\] {\n max-height: min(70vh, 34rem);\n }\n .msr\\:max-h-\\[min\\(320px\\,calc\\(100vh-16px\\)\\)\\] {\n max-height: min(320px, calc(100vh - 16px));\n }\n .msr\\:min-h-0 {\n min-height: 0px;\n }\n .msr\\:w-0 {\n width: 0px;\n }\n .msr\\:w-3 {\n width: calc(var(--msr-spacing) * 3);\n }\n .msr\\:w-4 {\n width: calc(var(--msr-spacing) * 4);\n }\n .msr\\:w-5 {\n width: calc(var(--msr-spacing) * 5);\n }\n .msr\\:w-6 {\n width: calc(var(--msr-spacing) * 6);\n }\n .msr\\:w-9 {\n width: calc(var(--msr-spacing) * 9);\n }\n .msr\\:w-12 {\n width: calc(var(--msr-spacing) * 12);\n }\n .msr\\:w-44 {\n width: calc(var(--msr-spacing) * 44);\n }\n .msr\\:w-60 {\n width: calc(var(--msr-spacing) * 60);\n }\n .msr\\:w-\\[18px\\] {\n width: 18px;\n }\n .msr\\:w-\\[26px\\] {\n width: 26px;\n }\n .msr\\:w-\\[272px\\] {\n width: 272px;\n }\n .msr\\:w-full {\n width: 100%;\n }\n .msr\\:w-px {\n width: 1px;\n }\n .msr\\:max-w-0 {\n max-width: 0px;\n }\n .msr\\:max-w-20 {\n max-width: calc(var(--msr-spacing) * 20);\n }\n .msr\\:max-w-\\[calc\\(100vw-16px\\)\\] {\n max-width: calc(100vw - 16px);\n }\n .msr\\:min-w-0 {\n min-width: 0px;\n }\n .msr\\:min-w-36 {\n min-width: calc(var(--msr-spacing) * 36);\n }\n .msr\\:flex-1 {\n flex: 1;\n }\n .msr\\:flex-none {\n flex: none;\n }\n .msr\\:shrink-0 {\n flex-shrink: 0;\n }\n .msr\\:-translate-x-1 {\n --tw-translate-x: calc(var(--msr-spacing) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .msr\\:-translate-x-1\\/2 {\n --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .msr\\:translate-x-0 {\n --tw-translate-x: 0px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .msr\\:-translate-y-1\\/2 {\n --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .msr\\:-rotate-90 {\n rotate: calc(90deg * -1);\n }\n .msr\\:rotate-45 {\n rotate: 45deg;\n }\n .msr\\:rotate-90 {\n rotate: 90deg;\n }\n .msr\\:rotate-180 {\n rotate: 180deg;\n }\n .msr\\:rotate-\\[45deg\\] {\n rotate: 45deg;\n }\n .msr\\:rotate-\\[135deg\\] {\n rotate: 135deg;\n }\n .msr\\:cursor-crosshair {\n cursor: crosshair;\n }\n .msr\\:cursor-default {\n cursor: default;\n }\n .msr\\:cursor-pointer {\n cursor: pointer;\n }\n .msr\\:touch-none {\n touch-action: none;\n }\n .msr\\:resize-none {\n resize: none;\n }\n .msr\\:list-none {\n list-style-type: none;\n }\n .msr\\:appearance-none {\n appearance: none;\n }\n .msr\\:grid-cols-\\[78px_150px\\] {\n grid-template-columns: 78px 150px;\n }\n .msr\\:grid-cols-\\[78px_156px\\] {\n grid-template-columns: 78px 156px;\n }\n .msr\\:grid-cols-\\[78px_minmax\\(0\\,1fr\\)\\] {\n grid-template-columns: 78px minmax(0,1fr);\n }\n .msr\\:grid-cols-\\[minmax\\(0\\,1fr\\)_28px_34px\\] {\n grid-template-columns: minmax(0,1fr) 28px 34px;\n }\n .msr\\:flex-col {\n flex-direction: column;\n }\n .msr\\:items-center {\n align-items: center;\n }\n .msr\\:items-start {\n align-items: flex-start;\n }\n .msr\\:items-stretch {\n align-items: stretch;\n }\n .msr\\:justify-between {\n justify-content: space-between;\n }\n .msr\\:justify-center {\n justify-content: center;\n }\n .msr\\:justify-end {\n justify-content: flex-end;\n }\n .msr\\:gap-0 {\n gap: 0px;\n }\n .msr\\:gap-0\\.5 {\n gap: calc(var(--msr-spacing) * 0.5);\n }\n .msr\\:gap-1 {\n gap: var(--msr-spacing);\n }\n .msr\\:gap-1\\.5 {\n gap: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:gap-2 {\n gap: calc(var(--msr-spacing) * 2);\n }\n .msr\\:gap-3 {\n gap: calc(var(--msr-spacing) * 3);\n }\n .msr\\:gap-px {\n gap: 1px;\n }\n .msr\\:gap-x-3 {\n column-gap: calc(var(--msr-spacing) * 3);\n }\n .msr\\:gap-y-1 {\n row-gap: var(--msr-spacing);\n }\n .msr\\:self-stretch {\n align-self: stretch;\n }\n .msr\\:justify-self-end {\n justify-self: flex-end;\n }\n .msr\\:truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .msr\\:overflow-auto {\n overflow: auto;\n }\n .msr\\:overflow-hidden {\n overflow: hidden;\n }\n .msr\\:overflow-visible {\n overflow: visible;\n }\n .msr\\:overflow-x-hidden {\n overflow-x: hidden;\n }\n .msr\\:overflow-y-auto {\n overflow-y: auto;\n }\n .msr\\:rounded {\n border-radius: 0.25rem;\n }\n .msr\\:rounded-\\[3px\\] {\n border-radius: 3px;\n }\n .msr\\:rounded-\\[5px\\] {\n border-radius: 5px;\n }\n .msr\\:rounded-\\[6px\\] {\n border-radius: 6px;\n }\n .msr\\:rounded-\\[7px\\] {\n border-radius: 7px;\n }\n .msr\\:rounded-\\[8px\\] {\n border-radius: 8px;\n }\n .msr\\:rounded-\\[10px\\] {\n border-radius: 10px;\n }\n .msr\\:rounded-\\[12px\\] {\n border-radius: 12px;\n }\n .msr\\:rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .msr\\:rounded-lg {\n border-radius: var(--msr-radius-lg);\n }\n .msr\\:rounded-md {\n border-radius: var(--msr-radius-md);\n }\n .msr\\:rounded-none {\n border-radius: 0;\n }\n .msr\\:border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .msr\\:border-0 {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n .msr\\:border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .msr\\:border-t-2 {\n border-top-style: var(--tw-border-style);\n border-top-width: 2px;\n }\n .msr\\:border-r {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n .msr\\:border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n .msr\\:border-l {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n .msr\\:border-dashed {\n --tw-border-style: dashed;\n border-style: dashed;\n }\n .msr\\:border-dotted {\n --tw-border-style: dotted;\n border-style: dotted;\n }\n .msr\\:border-solid {\n --tw-border-style: solid;\n border-style: solid;\n }\n .msr\\:border-\\[\\#0d99ff\\] {\n border-color: #0d99ff;\n }\n .msr\\:border-\\[\\#2563eb\\]\\/70 {\n border-color: color-mix(in oklab, #2563eb 70%, transparent);\n }\n .msr\\:border-black\\/8 {\n border-color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--msr-color-black) 8%, transparent);\n }\n }\n .msr\\:border-black\\/10 {\n border-color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--msr-color-black) 10%, transparent);\n }\n }\n .msr\\:border-black\\/15 {\n border-color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--msr-color-black) 15%, transparent);\n }\n }\n .msr\\:border-ink-200 {\n border-color: var(--msr-color-ink-200);\n }\n .msr\\:border-ink-500 {\n border-color: var(--msr-color-ink-500);\n }\n .msr\\:border-ink-700 {\n border-color: var(--msr-color-ink-700);\n }\n .msr\\:border-red-200 {\n border-color: var(--msr-color-red-200);\n }\n .msr\\:border-transparent {\n border-color: transparent;\n }\n .msr\\:bg-\\[\\#0d99ff\\] {\n background-color: #0d99ff;\n }\n .msr\\:bg-\\[\\#0d99ff\\]\\/10 {\n background-color: color-mix(in oklab, #0d99ff 10%, transparent);\n }\n .msr\\:bg-\\[\\#2563eb\\] {\n background-color: #2563eb;\n }\n .msr\\:bg-\\[\\#fff\\] {\n background-color: #fff;\n }\n .msr\\:bg-black {\n background-color: var(--msr-color-black);\n }\n .msr\\:bg-black\\/10 {\n background-color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--msr-color-black) 10%, transparent);\n }\n }\n .msr\\:bg-ink-50 {\n background-color: var(--msr-color-ink-50);\n }\n .msr\\:bg-ink-50\\/40 {\n background-color: var(--msr-color-ink-50);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--msr-color-ink-50) 40%, transparent);\n }\n }\n .msr\\:bg-ink-900\\/90 {\n background-color: var(--msr-color-ink-900);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--msr-color-ink-900) 90%, transparent);\n }\n }\n .msr\\:bg-transparent {\n background-color: transparent;\n }\n .msr\\:bg-white {\n background-color: var(--msr-color-white);\n }\n .msr\\:bg-white\\/60 {\n background-color: var(--msr-color-white);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--msr-color-white) 60%, transparent);\n }\n }\n .msr\\:p-0 {\n padding: 0px;\n }\n .msr\\:p-1 {\n padding: var(--msr-spacing);\n }\n .msr\\:p-1\\.5 {\n padding: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:p-2 {\n padding: calc(var(--msr-spacing) * 2);\n }\n .msr\\:p-3 {\n padding: calc(var(--msr-spacing) * 3);\n }\n .msr\\:p-px {\n padding: 1px;\n }\n .msr\\:px-0 {\n padding-inline: 0px;\n }\n .msr\\:px-0\\.5 {\n padding-inline: calc(var(--msr-spacing) * 0.5);\n }\n .msr\\:px-1 {\n padding-inline: var(--msr-spacing);\n }\n .msr\\:px-1\\.5 {\n padding-inline: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:px-2 {\n padding-inline: calc(var(--msr-spacing) * 2);\n }\n .msr\\:px-2\\.5 {\n padding-inline: calc(var(--msr-spacing) * 2.5);\n }\n .msr\\:py-0 {\n padding-block: 0px;\n }\n .msr\\:py-0\\.5 {\n padding-block: calc(var(--msr-spacing) * 0.5);\n }\n .msr\\:py-1 {\n padding-block: var(--msr-spacing);\n }\n .msr\\:py-1\\.5 {\n padding-block: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:py-2 {\n padding-block: calc(var(--msr-spacing) * 2);\n }\n .msr\\:pt-2 {\n padding-top: calc(var(--msr-spacing) * 2);\n }\n .msr\\:pr-2 {\n padding-right: calc(var(--msr-spacing) * 2);\n }\n .msr\\:pr-6 {\n padding-right: calc(var(--msr-spacing) * 6);\n }\n .msr\\:pb-1 {\n padding-bottom: var(--msr-spacing);\n }\n .msr\\:pb-2 {\n padding-bottom: calc(var(--msr-spacing) * 2);\n }\n .msr\\:text-center {\n text-align: center;\n }\n .msr\\:text-left {\n text-align: left;\n }\n .msr\\:font-mono {\n font-family: var(--msr-font-mono);\n }\n .msr\\:text-\\[9px\\] {\n font-size: 9px;\n }\n .msr\\:text-\\[10px\\] {\n font-size: 10px;\n }\n .msr\\:text-\\[11px\\] {\n font-size: 11px;\n }\n .msr\\:text-\\[12px\\] {\n font-size: 12px;\n }\n .msr\\:text-\\[14px\\] {\n font-size: 14px;\n }\n .msr\\:leading-4 {\n --tw-leading: calc(var(--msr-spacing) * 4);\n line-height: calc(var(--msr-spacing) * 4);\n }\n .msr\\:leading-\\[1\\.4\\] {\n --tw-leading: 1.4;\n line-height: 1.4;\n }\n .msr\\:leading-\\[1\\.45\\] {\n --tw-leading: 1.45;\n line-height: 1.45;\n }\n .msr\\:leading-\\[18px\\] {\n --tw-leading: 18px;\n line-height: 18px;\n }\n .msr\\:leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .msr\\:font-medium {\n --tw-font-weight: var(--msr-font-weight-medium);\n font-weight: var(--msr-font-weight-medium);\n }\n .msr\\:font-normal {\n --tw-font-weight: var(--msr-font-weight-normal);\n font-weight: var(--msr-font-weight-normal);\n }\n .msr\\:font-semibold {\n --tw-font-weight: var(--msr-font-weight-semibold);\n font-weight: var(--msr-font-weight-semibold);\n }\n .msr\\:text-ellipsis {\n text-overflow: ellipsis;\n }\n .msr\\:whitespace-nowrap {\n white-space: nowrap;\n }\n .msr\\:whitespace-pre-wrap {\n white-space: pre-wrap;\n }\n .msr\\:text-\\[\\#64748b\\] {\n color: #64748b;\n }\n .msr\\:text-black {\n color: var(--msr-color-black);\n }\n .msr\\:text-black\\/30 {\n color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--msr-color-black) 30%, transparent);\n }\n }\n .msr\\:text-black\\/45 {\n color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--msr-color-black) 45%, transparent);\n }\n }\n .msr\\:text-ink-50 {\n color: var(--msr-color-ink-50);\n }\n .msr\\:text-ink-500 {\n color: var(--msr-color-ink-500);\n }\n .msr\\:text-ink-700 {\n color: var(--msr-color-ink-700);\n }\n .msr\\:text-ink-900 {\n color: var(--msr-color-ink-900);\n }\n .msr\\:text-red-600 {\n color: var(--msr-color-red-600);\n }\n .msr\\:text-white {\n color: var(--msr-color-white);\n }\n .msr\\:text-white\\/60 {\n color: var(--msr-color-white);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--msr-color-white) 60%, transparent);\n }\n }\n .msr\\:tabular-nums {\n --tw-numeric-spacing: tabular-nums;\n font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);\n }\n .msr\\:opacity-0 {\n opacity: 0%;\n }\n .msr\\:opacity-60 {\n opacity: 60%;\n }\n .msr\\:opacity-80 {\n opacity: 80%;\n }\n .msr\\:opacity-100 {\n opacity: 100%;\n }\n .msr\\:shadow-lg {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .msr\\:outline-transparent {\n outline-color: transparent;\n }\n .msr\\:transition-\\[max-width\\,opacity\\,transform\\,padding\\] {\n transition-property: max-width,opacity,transform,padding;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-\\[width\\,opacity\\] {\n transition-property: width,opacity;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-opacity {\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-transform {\n transition-property: transform, translate, scale, rotate;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-none {\n transition-property: none;\n }\n .msr\\:duration-150 {\n --tw-duration: 150ms;\n transition-duration: 150ms;\n }\n .msr\\:ease-\\[ease\\] {\n --tw-ease: ease;\n transition-timing-function: ease;\n }\n .msr\\:outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .msr\\:select-none {\n -webkit-user-select: none;\n user-select: none;\n }\n @media (hover: hover) {\n .msr\\:group-hover\\:border-ink-200:is(:where(.msr\\:group):hover *) {\n border-color: var(--msr-color-ink-200);\n }\n }\n .msr\\:focus-within\\:rounded-l-\\[5px\\]:focus-within {\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n }\n .msr\\:focus-within\\:rounded-r-\\[5px\\]:focus-within {\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n }\n .msr\\:focus-within\\:outline:focus-within {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .msr\\:focus-within\\:outline-1:focus-within {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .msr\\:focus-within\\:outline-offset-\\[-1px\\]:focus-within {\n outline-offset: -1px;\n }\n .msr\\:focus-within\\:outline-\\[\\#0d99ff\\]:focus-within {\n outline-color: #0d99ff;\n }\n .msr\\:focus-within\\:outline-\\[var\\(--msr-accent\\)\\]:focus-within {\n outline-color: var(--msr-accent);\n }\n @media (hover: hover) {\n .msr\\:hover\\:border-ink-200:hover {\n border-color: var(--msr-color-ink-200);\n }\n .msr\\:hover\\:bg-\\[\\#0b8eea\\]:hover {\n background-color: #0b8eea;\n }\n .msr\\:hover\\:bg-\\[\\#0d99ff\\]:hover {\n background-color: #0d99ff;\n }\n .msr\\:hover\\:bg-black\\/4:hover {\n background-color: var(--msr-color-black);\n }\n @supports (color: color-mix(in lab, red, red)) {\n .msr\\:hover\\:bg-black\\/4:hover {\n background-color: color-mix(in oklab, var(--msr-color-black) 4%, transparent);\n }\n }\n .msr\\:hover\\:bg-black\\/10:hover {\n background-color: var(--msr-color-black);\n }\n @supports (color: color-mix(in lab, red, red)) {\n .msr\\:hover\\:bg-black\\/10:hover {\n background-color: color-mix(in oklab, var(--msr-color-black) 10%, transparent);\n }\n }\n .msr\\:hover\\:bg-ink-50:hover {\n background-color: var(--msr-color-ink-50);\n }\n .msr\\:hover\\:bg-red-50:hover {\n background-color: var(--msr-color-red-50);\n }\n .msr\\:hover\\:text-ink-700:hover {\n color: var(--msr-color-ink-700);\n }\n .msr\\:hover\\:text-ink-900:hover {\n color: var(--msr-color-ink-900);\n }\n .msr\\:hover\\:text-white:hover {\n color: var(--msr-color-white);\n }\n .msr\\:hover\\:underline:hover {\n text-decoration-line: underline;\n }\n }\n .msr\\:focus\\:border-\\[\\#0d99ff\\]:focus {\n border-color: #0d99ff;\n }\n .msr\\:focus\\:shadow-\\[inset_0_0_0_1px_\\#0d99ff\\]:focus {\n --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, #0d99ff);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus\\:shadow-\\[inset_0_0_0_1px_var\\(--msr-accent\\)\\]:focus {\n --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, var(--msr-accent));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus\\:outline-none:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n .msr\\:focus-visible\\:border-\\[\\#0d99ff\\]:focus-visible {\n border-color: #0d99ff;\n }\n .msr\\:focus-visible\\:bg-\\[\\#0d99ff\\]:focus-visible {\n background-color: #0d99ff;\n }\n .msr\\:focus-visible\\:text-white:focus-visible {\n color: var(--msr-color-white);\n }\n .msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_\\#0d99ff\\]:focus-visible {\n --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, #0d99ff);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_\\#ef4444\\]:focus-visible {\n --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, #ef4444);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus-visible\\:ring-1:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus-visible\\:ring-\\[\\#0d99ff\\]\\/25:focus-visible {\n --tw-ring-color: color-mix(in oklab, #0d99ff 25%, transparent);\n }\n .msr\\:focus-visible\\:outline-none:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .msr\\:disabled\\:cursor-default:disabled {\n cursor: default;\n }\n .msr\\:disabled\\:opacity-40:disabled {\n opacity: 40%;\n }\n .msr\\:disabled\\:opacity-45:disabled {\n opacity: 45%;\n }\n @media (prefers-reduced-motion: reduce) {\n .msr\\:motion-reduce\\:transition-none {\n transition-property: none;\n }\n }\n}\n:root, :host {\n --color-ink-50: #f8fafc;\n --color-ink-200: #e2e8f0;\n --color-ink-500: #64748b;\n --color-ink-700: #334155;\n --color-ink-900: #0f172a;\n}\n:host {\n all: initial;\n display: block;\n color-scheme: light;\n color: #0f172a;\n font-family: ui-sans-serif, system-ui, sans-serif;\n font-size: 16px;\n font-weight: 400;\n line-height: 1.5;\n letter-spacing: normal;\n direction: ltr;\n --msr-spacing: 4px;\n}\n*, *::before, *::after {\n box-sizing: border-box;\n}\n@layer base {\n *, ::before, ::after, ::backdrop {\n --tw-border-style: solid;\n --tw-outline-style: solid;\n --tw-shadow: 0 0 #0000;\n --tw-inset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n }\n button, input, select, textarea {\n appearance: none;\n background-color: transparent;\n padding: 0;\n font: inherit;\n color: inherit;\n letter-spacing: inherit;\n }\n}\n.mesurer-toolbar-surface {\n box-shadow: 0 0 0.5px rgba(0, 0, 0, 0.18), 0 3px 8px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n.mesurer-menu-surface {\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08);\n}\n.mesurer-color-picker {\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n}\n.mesurer-settings-tabs {\n box-shadow: inset 0 0 0 1px rgba(15, 23, 42, 0.08);\n}\n.mesurer-settings-tab[aria-selected=\"true\"] {\n box-shadow: 0 0 0 1px rgba(15, 23, 42, 0.12);\n}\n.mesurer-switch-track {\n box-sizing: border-box;\n border: 1px solid #e2e8f0;\n}\n.mesurer-switch-track[data-checked=\"true\"] {\n border-color: #0d99ff;\n}\n.mesurer-control-shell {\n border: 1px solid transparent;\n}\n.mesurer-control-shell:hover {\n border-color: #e2e8f0;\n}\n.mesurer-control-focus:focus-within {\n outline: 1px solid #0d99ff;\n outline-offset: -1px;\n}\n.mesurer-root {\n --msr-spacing: 4px;\n}\nbody [data-mesurer-native-scroll-anchor=\"box\"][data-mesurer-nested-scroll-compensation=\"true\"] {\n position: absolute !important;\n left: calc(anchor(left) + var(--mesurer-nested-scroll-x, 0px)) !important;\n top: calc(anchor(top) + var(--mesurer-nested-scroll-y, 0px)) !important;\n}\nbody [data-mesurer-native-scroll-anchor=\"label\"][data-mesurer-nested-scroll-compensation=\"true\"] {\n position: absolute !important;\n left: calc(anchor(center) + var(--mesurer-nested-scroll-x, 0px)) !important;\n top: calc(anchor(bottom) + 2px + var(--mesurer-nested-scroll-y, 0px)) !important;\n}\nbody [data-mesurer-native-scroll-anchor=\"offset\"][data-mesurer-nested-scroll-compensation=\"true\"] {\n position: absolute !important;\n left: calc(anchor(left) + var(--mesurer-native-anchor-x, 0px) + var(--mesurer-nested-scroll-x, 0px)) !important;\n top: calc(anchor(top) + var(--mesurer-native-anchor-y, 0px) + var(--mesurer-nested-scroll-y, 0px)) !important;\n}\n[data-mesurer-text-edit-ring=\"true\"], [data-mesurer-text-selection-highlight=\"true\"], [data-mesurer-text-caret=\"true\"] {\n z-index: 2147482900 !important;\n}\n[data-mesurer-text-inspector-placement-shell=\"true\"], .mesurer-ti-card {\n z-index: 2147483647 !important;\n}\n[data-mesurer-context-root=\"true\"] [data-mesurer-annotation-scroll-mode=\"document\"] {\n position: absolute !important;\n}\n[data-mesurer-annotation-scroll-mode=\"native-anchor\"] {\n position: fixed !important;\n}\n[data-mesurer-native-scroll-anchor=\"offset\"][data-mesurer-nested-scroll-compensation=\"true\"][data-mesurer-annotation-scroll-mode=\"native-anchor\"] {\n position: fixed !important;\n}\n[data-mesurer-annotation-badge=\"true\"] {\n width: 20px !important;\n height: 20px !important;\n transform: none !important;\n transition: width 150ms ease, height 150ms ease, background 150ms ease, color 150ms ease, box-shadow 150ms ease !important;\n}\n[data-mesurer-annotation-marker=\"true\"][data-mesurer-annotation-highlighted=\"true\"] > [data-mesurer-annotation-badge=\"true\"] {\n width: 24px !important;\n height: 24px !important;\n}\n[data-mesurer-root=\"true\"][data-mesurer-direct-text-edit-active=\"true\"] [data-mesurer-annotation-trigger=\"true\"], [data-mesurer-context-root=\"true\"][data-mesurer-direct-text-edit-active=\"true\"] [data-mesurer-annotation-trigger=\"true\"] {\n display: none !important;\n}\n[data-mesurer-plugin-settings] [role=\"switch\"] {\n grid-template-columns: minmax(0, 1fr) auto;\n}\n[data-mesurer-plugin-settings] [role=\"switch\"] > span:first-child {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n[data-mesurer-plugin-settings-disclosure=\"plugins\"] {\n width: calc(100% + 16px);\n margin-inline: -8px;\n}\n.mesurer-solid-root {\n position: fixed;\n inset: 0;\n z-index: 2147483000;\n pointer-events: none;\n --msr-spacing: 4px;\n}\n.mesurer-solid-root [role=\"slider\"] {\n border: 0;\n}\n[data-mesurer-distance-kind=\"selection-spacing\"][data-mesurer-distance-active=\"true\"] [data-mesurer-distance-hover-target=\"true\"] {\n opacity: 1 !important;\n}\n[data-mesurer-distance-kind=\"selection-spacing\"][data-mesurer-distance-active=\"true\"]:has([data-mesurer-distance-label-axis=\"x\"]:hover) [data-mesurer-distance-line^=\"vertical\"], [data-mesurer-distance-kind=\"selection-spacing\"][data-mesurer-distance-active=\"true\"]:has([data-mesurer-distance-label-axis=\"y\"]:hover) [data-mesurer-distance-line^=\"horizontal\"], [data-mesurer-distance-kind=\"selection-spacing\"][data-mesurer-distance-active=\"true\"]:has([data-mesurer-distance-label-axis]:hover) [data-mesurer-distance-connector=\"true\"] {\n opacity: 0.16 !important;\n}\nbody.mesurer-solid-xray * {\n outline: solid 1px blue !important;\n}\nbody.mesurer-solid-xray [data-mesurer-root], body.mesurer-solid-xray [data-mesurer-root] *, body.mesurer-solid-xray [data-mesurer-inspector-ui], body.mesurer-solid-xray [data-mesurer-inspector-ui] *, body.mesurer-solid-xray .mesurer-toolbar-surface, body.mesurer-solid-xray .mesurer-toolbar-surface *, body.mesurer-solid-xray .mesurer-ti-box, body.mesurer-solid-xray .mesurer-ti-card, body.mesurer-solid-xray .mesurer-ti-card *, body.mesurer-solid-xray .mesurer-ti-close {\n outline: none !important;\n}\n[data-mesurer-toolbar=\"true\"] > div:has(> [data-mesurer-toolbar-compact-item]) {\n transition: padding-inline 150ms ease;\n}\n[data-mesurer-toolbar=\"true\"][data-mesurer-toolbar-compact=\"true\"] > div:has(> [data-mesurer-toolbar-compact-item]):not(:has(> [data-mesurer-toolbar-compact-item][data-visible=\"true\"])) {\n padding-inline: 0;\n}\n[data-mesurer-selected-measurement=\"true\"]:has(> [data-mesurer-native-scroll-anchor=\"box\"]) {\n display: contents !important;\n}\n@media (prefers-reduced-motion: reduce) {\n [data-mesurer-toolbar=\"true\"] > div:has(> [data-mesurer-toolbar-compact-item]) {\n transition: none;\n }\n [data-mesurer-annotation-badge=\"true\"] {\n transition: none !important;\n }\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) {\n --msr-accent: #0d99ff;\n --msr-surface: #fff;\n --msr-surface-raised: #fff;\n --msr-surface-muted: #f8fafc;\n --msr-content: #18181b;\n --msr-color-white: #fff;\n --msr-color-black: #000;\n --msr-color-ink-50: #f8fafc;\n --msr-color-ink-100: #f1f5f9;\n --msr-color-ink-200: #e2e8f0;\n --msr-color-ink-300: #cbd5e1;\n --msr-color-ink-500: #64748b;\n --msr-color-ink-700: #334155;\n --msr-color-ink-900: #18181b;\n --color-ink-50: var(--msr-color-ink-50);\n --color-ink-100: var(--msr-color-ink-100);\n --color-ink-200: var(--msr-color-ink-200);\n --color-ink-300: var(--msr-color-ink-300);\n --color-ink-500: var(--msr-color-ink-500);\n --color-ink-700: var(--msr-color-ink-700);\n --color-ink-900: var(--msr-color-ink-900);\n --msr-danger-bg: #fef2f2;\n --msr-danger-border: #fecaca;\n --msr-danger-text: #dc2626;\n --msr-danger-solid-bg: #dc2626;\n --msr-danger-solid-hover: #b91c1c;\n --msr-danger-solid-text: #fff;\n --color-red-50: var(--msr-danger-bg);\n --color-red-200: var(--msr-danger-border);\n --color-red-600: var(--msr-danger-text);\n --color-red-700: #b91c1c;\n --msr-control-thumb: #fff;\n --msr-slider-track: rgba(15, 23, 42, 0.16);\n --msr-shadow-toolbar: 0 0 0.4px rgba(0, 0, 0, 0.22),\n 0 6px 18px rgba(0, 0, 0, 0.03),\n 0 3px 9px rgba(0, 0, 0, 0.06),\n 0 1px 1px rgba(0, 0, 0, 0.06);\n --msr-shadow-floating: 0 0 0 0.4px rgba(0, 0, 0, 0.22),\n 0 6px 18px rgba(0, 0, 0, 0.03),\n 0 3px 9px rgba(0, 0, 0, 0.06),\n 0 1px 1px rgba(0, 0, 0, 0.06);\n --msr-shadow-select-menu: var(--msr-shadow-floating);\n color: var(--msr-content);\n color-scheme: light;\n}\n:where( [data-mesurer-root=\"true\"][data-theme=\"dark\"], [data-mesurer-inspector-ui=\"true\"][data-theme=\"dark\"] ) {\n --msr-accent: #0c8ce9;\n --msr-surface: #323232;\n --msr-surface-raised: #3a3a3a;\n --msr-surface-muted: #3a3a3a;\n --msr-content: #f5f5f5;\n --msr-color-white: #f5f5f5;\n --msr-color-black: #171717;\n --msr-color-ink-50: #3a3a3a;\n --msr-color-ink-100: #414141;\n --msr-color-ink-200: #4a4a4a;\n --msr-color-ink-300: #5a5a5a;\n --msr-color-ink-500: #a0a0a0;\n --msr-color-ink-700: #dedede;\n --msr-color-ink-900: #f5f5f5;\n --msr-danger-bg: #3f2020;\n --msr-danger-border: #7f3f46;\n --msr-danger-text: #f87171;\n --msr-danger-solid-bg: #c95058;\n --msr-danger-solid-hover: #b7424b;\n --msr-danger-solid-text: #f5f5f5;\n --color-red-700: #fca5a5;\n --msr-control-thumb: #f4f4f5;\n --msr-slider-track: rgba(245, 245, 245, 0.24);\n --msr-shadow-toolbar: 0 0 0.4px lch(100% 0 0 / 0.10),\n 0 3px 8px lch(0% 0 0 / 0.125),\n 0 2px 5px lch(0% 0 0 / 0.125),\n 0 1px 1px lch(0% 0 0 / 0.125);\n --msr-shadow-floating: 0 0 0 0.4px lch(100% 0 0 / 0.05),\n 0 4px 12px lch(0% 0 0 / 0.12),\n 0 1px 3px lch(0% 0 0 / 0.10);\n --msr-shadow-select-menu: 0 0 0 0.4px lch(100% 0 0 / 0.14),\n 0 4px 12px lch(0% 0 0 / 0.22),\n 0 1px 3px lch(0% 0 0 / 0.18);\n color-scheme: dark;\n}\n@media (prefers-color-scheme: dark) {\n :where( [data-mesurer-root=\"true\"][data-theme=\"system\"], [data-mesurer-inspector-ui=\"true\"][data-theme=\"system\"] ) {\n --msr-accent: #0c8ce9;\n --msr-surface: #323232;\n --msr-surface-raised: #3a3a3a;\n --msr-surface-muted: #3a3a3a;\n --msr-content: #f5f5f5;\n --msr-color-white: #f5f5f5;\n --msr-color-black: #171717;\n --msr-color-ink-50: #3a3a3a;\n --msr-color-ink-100: #414141;\n --msr-color-ink-200: #4a4a4a;\n --msr-color-ink-300: #5a5a5a;\n --msr-color-ink-500: #a0a0a0;\n --msr-color-ink-700: #dedede;\n --msr-color-ink-900: #f5f5f5;\n --msr-danger-bg: #3f2020;\n --msr-danger-border: #7f3f46;\n --msr-danger-text: #f87171;\n --msr-danger-solid-bg: #c95058;\n --msr-danger-solid-hover: #b7424b;\n --msr-danger-solid-text: #f5f5f5;\n --color-red-700: #fca5a5;\n --msr-control-thumb: #f4f4f5;\n --msr-slider-track: rgba(245, 245, 245, 0.24);\n --msr-shadow-toolbar: 0 0 0.4px lch(100% 0 0 / 0.10),\n 0 3px 8px lch(0% 0 0 / 0.125),\n 0 2px 5px lch(0% 0 0 / 0.125),\n 0 1px 1px lch(0% 0 0 / 0.125);\n --msr-shadow-floating: 0 0 0 0.4px lch(100% 0 0 / 0.05),\n 0 4px 12px lch(0% 0 0 / 0.12),\n 0 1px 3px lch(0% 0 0 / 0.10);\n --msr-shadow-select-menu: 0 0 0 0.4px lch(100% 0 0 / 0.14),\n 0 4px 12px lch(0% 0 0 / 0.22),\n 0 1px 3px lch(0% 0 0 / 0.18);\n color-scheme: dark;\n }\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:bg-white\"], :where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:bg-[#fff]\"] {\n background-color: var(--msr-surface) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:text-black\"] {\n color: var(--msr-content) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:hover:bg-black/4\"]:hover, :where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:hover:bg-black/5\"]:hover {\n background-color: var(--msr-content) !important;\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in srgb, var(--msr-content) 6%, transparent) !important;\n }\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) .mesurer-toolbar-surface {\n background-color: var(--msr-surface) !important;\n box-shadow: var(--msr-shadow-toolbar) !important;\n color: var(--msr-content);\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) :is( .mesurer-menu-surface, .mesurer-color-picker, .mesurer-ti-card, [data-mesurer-text-inspector-info=\"true\"], [data-mesurer-annotation-panel=\"true\"], [data-mesurer-annotation-composer=\"true\"] ) {\n background-color: var(--msr-surface-raised) !important;\n color: var(--msr-content) !important;\n box-shadow: var(--msr-shadow-floating) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) .mesurer-switch-track[data-checked=\"false\"], :where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) .mesurer-control-shell {\n background-color: var(--msr-surface-muted) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) .mesurer-switch-track > span {\n background-color: var(--msr-control-thumb) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) :is(.mesurer-settings-select, .mesurer-settings-select-menu) {\n background-color: var(--msr-surface-raised) !important;\n border-color: var(--msr-color-ink-200) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [data-mesurer-rulers=\"true\"] {\n color: var(--msr-color-ink-500) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [data-slider-container=\"true\"] > div:first-child {\n background-color: var(--msr-slider-track) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:bg-[#0d99ff]\"] {\n background-color: var(--msr-accent) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:border-[#0d99ff]\"] {\n border-color: var(--msr-accent) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:hover:bg-[#0d99ff]\"]:hover, :where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:focus-visible:bg-[#0d99ff]\"]:focus-visible {\n background-color: var(--msr-accent) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:text-white\"] {\n color: var(--msr-color-white) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [data-slider-thumb=\"true\"]:focus-visible {\n box-shadow: 0 0 0 1px var(--msr-accent) !important;\n @supports (color: color-mix(in lab, red, red)) {\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--msr-accent) 25%, transparent) !important;\n }\n}\n:where([data-mesurer-root=\"true\"], [data-mesurer-inspector-ui=\"true\"]) {\n --msr-radius-control: 5px;\n}\n@layer utilities {\n .msr\\:rounded-control {\n border-radius: var(--msr-radius-control);\n }\n}\n.mesurer-thin-scrollbar {\n scrollbar-width: thin;\n scrollbar-color: var(--msr-color-ink-200) transparent;\n}\n.mesurer-thin-scrollbar::-webkit-scrollbar {\n width: 4px;\n height: 4px;\n}\n.mesurer-thin-scrollbar::-webkit-scrollbar-track {\n background: transparent;\n}\n.mesurer-thin-scrollbar::-webkit-scrollbar-thumb {\n background: var(--msr-color-ink-200);\n border-radius: var(--msr-radius-control);\n}\n.mesurer-thin-scrollbar:hover {\n scrollbar-color: var(--msr-color-ink-300) transparent;\n}\n.mesurer-thin-scrollbar:hover::-webkit-scrollbar-thumb {\n background: var(--msr-color-ink-300);\n}\n.mesurer-thin-scrollbar::-webkit-scrollbar-corner {\n background: transparent;\n}\n@property --tw-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ordinal {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-slashed-zero {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-figure {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-spacing {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-fraction {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ease {\n syntax: \"*\";\n inherits: false;\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-border-style: solid;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-ordinal: initial;\n --tw-slashed-zero: initial;\n --tw-numeric-figure: initial;\n --tw-numeric-spacing: initial;\n --tw-numeric-fraction: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-duration: initial;\n --tw-ease: initial;\n }\n }\n}\n", Vf = 0, Hf = "mesurer:tab-id", Uf = "mesurer-settings", Wf = "mesurer-state", Gf = 80, Kf = (e, t) => {
9856
+ var Bf = "/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --msr-font-sans: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\",\n \"Noto Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\",\n \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --msr-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\n --msr-color-red-50: oklch(97.1% 0.013 17.38);\n --msr-color-red-200: oklch(88.5% 0.062 18.334);\n --msr-color-red-600: oklch(57.7% 0.245 27.325);\n --msr-color-black: #000;\n --msr-color-white: #fff;\n --msr-spacing: 0.25rem;\n --msr-font-weight-normal: 400;\n --msr-font-weight-medium: 500;\n --msr-font-weight-semibold: 600;\n --msr-radius-md: 0.375rem;\n --msr-radius-lg: 0.5rem;\n --msr-default-transition-duration: 150ms;\n --msr-default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --msr-default-font-family: var(--msr-font-sans);\n --msr-default-mono-font-family: var(--msr-font-mono);\n --msr-color-ink-50: #f8fafc;\n --msr-color-ink-200: #e2e8f0;\n --msr-color-ink-500: #64748b;\n --msr-color-ink-700: #334155;\n --msr-color-ink-900: #0f172a;\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--msr-default-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--msr-default-font-feature-settings, normal);\n font-variation-settings: var(--msr-default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--msr-default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--msr-default-mono-font-feature-settings, normal);\n font-variation-settings: var(--msr-default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring:where(:not(iframe)) {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .msr\\:pointer-events-auto {\n pointer-events: auto;\n }\n .msr\\:pointer-events-none {\n pointer-events: none;\n }\n .msr\\:absolute {\n position: absolute;\n }\n .msr\\:fixed {\n position: fixed;\n }\n .msr\\:relative {\n position: relative;\n }\n .msr\\:inset-0 {\n inset: 0px;\n }\n .msr\\:top-0 {\n top: 0px;\n }\n .msr\\:top-1\\/2 {\n top: calc(1 / 2 * 100%);\n }\n .msr\\:top-\\[18px\\] {\n top: 18px;\n }\n .msr\\:top-full {\n top: 100%;\n }\n .msr\\:right-0 {\n right: 0px;\n }\n .msr\\:right-2 {\n right: calc(var(--msr-spacing) * 2);\n }\n .msr\\:right-\\[8px\\] {\n right: 8px;\n }\n .msr\\:bottom-0 {\n bottom: 0px;\n }\n .msr\\:bottom-full {\n bottom: 100%;\n }\n .msr\\:left-0 {\n left: 0px;\n }\n .msr\\:left-1\\/2 {\n left: calc(1 / 2 * 100%);\n }\n .msr\\:left-\\[8px\\] {\n left: 8px;\n }\n .msr\\:left-\\[18px\\] {\n left: 18px;\n }\n .msr\\:z-10 {\n z-index: 10;\n }\n .msr\\:z-\\[60\\] {\n z-index: 60;\n }\n .msr\\:z-\\[70\\] {\n z-index: 70;\n }\n .msr\\:z-\\[80\\] {\n z-index: 80;\n }\n .msr\\:z-\\[90\\] {\n z-index: 90;\n }\n .msr\\:z-\\[94\\] {\n z-index: 94;\n }\n .msr\\:z-\\[95\\] {\n z-index: 95;\n }\n .msr\\:col-span-2 {\n grid-column: span 2 / span 2;\n }\n .msr\\:col-start-1 {\n grid-column-start: 1;\n }\n .msr\\:col-start-2 {\n grid-column-start: 2;\n }\n .msr\\:col-start-3 {\n grid-column-start: 3;\n }\n .msr\\:m-0 {\n margin: 0px;\n }\n .msr\\:mx-1 {\n margin-inline: var(--msr-spacing);\n }\n .msr\\:mt-1 {\n margin-top: var(--msr-spacing);\n }\n .msr\\:mt-1\\.5 {\n margin-top: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:mt-2 {\n margin-top: calc(var(--msr-spacing) * 2);\n }\n .msr\\:mb-1 {\n margin-bottom: var(--msr-spacing);\n }\n .msr\\:mb-2 {\n margin-bottom: calc(var(--msr-spacing) * 2);\n }\n .msr\\:-ml-1 {\n margin-left: calc(var(--msr-spacing) * -1);\n }\n .msr\\:ml-1 {\n margin-left: var(--msr-spacing);\n }\n .msr\\:ml-2 {\n margin-left: calc(var(--msr-spacing) * 2);\n }\n .msr\\:ml-6 {\n margin-left: calc(var(--msr-spacing) * 6);\n }\n .msr\\:box-border {\n box-sizing: border-box;\n }\n .msr\\:block {\n display: block;\n }\n .msr\\:flex {\n display: flex;\n }\n .msr\\:grid {\n display: grid;\n }\n .msr\\:inline-flex {\n display: inline-flex;\n }\n .msr\\:size-1\\.5 {\n width: calc(var(--msr-spacing) * 1.5);\n height: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:size-3 {\n width: calc(var(--msr-spacing) * 3);\n height: calc(var(--msr-spacing) * 3);\n }\n .msr\\:size-4 {\n width: calc(var(--msr-spacing) * 4);\n height: calc(var(--msr-spacing) * 4);\n }\n .msr\\:size-6 {\n width: calc(var(--msr-spacing) * 6);\n height: calc(var(--msr-spacing) * 6);\n }\n .msr\\:size-7 {\n width: calc(var(--msr-spacing) * 7);\n height: calc(var(--msr-spacing) * 7);\n }\n .msr\\:size-8 {\n width: calc(var(--msr-spacing) * 8);\n height: calc(var(--msr-spacing) * 8);\n }\n .msr\\:size-\\[10px\\] {\n width: 10px;\n height: 10px;\n }\n .msr\\:size-\\[18px\\] {\n width: 18px;\n height: 18px;\n }\n .msr\\:size-full {\n width: 100%;\n height: 100%;\n }\n .msr\\:h-5 {\n height: calc(var(--msr-spacing) * 5);\n }\n .msr\\:h-6 {\n height: calc(var(--msr-spacing) * 6);\n }\n .msr\\:h-7 {\n height: calc(var(--msr-spacing) * 7);\n }\n .msr\\:h-8 {\n height: calc(var(--msr-spacing) * 8);\n }\n .msr\\:h-20 {\n height: calc(var(--msr-spacing) * 20);\n }\n .msr\\:h-\\[14px\\] {\n height: 14px;\n }\n .msr\\:h-\\[18px\\] {\n height: 18px;\n }\n .msr\\:h-\\[19px\\] {\n height: 19px;\n }\n .msr\\:h-full {\n height: 100%;\n }\n .msr\\:h-px {\n height: 1px;\n }\n .msr\\:max-h-36 {\n max-height: calc(var(--msr-spacing) * 36);\n }\n .msr\\:max-h-\\[220px\\] {\n max-height: 220px;\n }\n .msr\\:max-h-\\[calc\\(100vh-16px\\)\\] {\n max-height: calc(100vh - 16px);\n }\n .msr\\:max-h-\\[min\\(70vh\\,34rem\\)\\] {\n max-height: min(70vh, 34rem);\n }\n .msr\\:max-h-\\[min\\(320px\\,calc\\(100vh-16px\\)\\)\\] {\n max-height: min(320px, calc(100vh - 16px));\n }\n .msr\\:min-h-0 {\n min-height: 0px;\n }\n .msr\\:w-0 {\n width: 0px;\n }\n .msr\\:w-3 {\n width: calc(var(--msr-spacing) * 3);\n }\n .msr\\:w-4 {\n width: calc(var(--msr-spacing) * 4);\n }\n .msr\\:w-5 {\n width: calc(var(--msr-spacing) * 5);\n }\n .msr\\:w-6 {\n width: calc(var(--msr-spacing) * 6);\n }\n .msr\\:w-9 {\n width: calc(var(--msr-spacing) * 9);\n }\n .msr\\:w-12 {\n width: calc(var(--msr-spacing) * 12);\n }\n .msr\\:w-44 {\n width: calc(var(--msr-spacing) * 44);\n }\n .msr\\:w-60 {\n width: calc(var(--msr-spacing) * 60);\n }\n .msr\\:w-\\[18px\\] {\n width: 18px;\n }\n .msr\\:w-\\[26px\\] {\n width: 26px;\n }\n .msr\\:w-\\[272px\\] {\n width: 272px;\n }\n .msr\\:w-full {\n width: 100%;\n }\n .msr\\:w-px {\n width: 1px;\n }\n .msr\\:max-w-0 {\n max-width: 0px;\n }\n .msr\\:max-w-20 {\n max-width: calc(var(--msr-spacing) * 20);\n }\n .msr\\:max-w-\\[calc\\(100vw-16px\\)\\] {\n max-width: calc(100vw - 16px);\n }\n .msr\\:min-w-0 {\n min-width: 0px;\n }\n .msr\\:min-w-36 {\n min-width: calc(var(--msr-spacing) * 36);\n }\n .msr\\:flex-1 {\n flex: 1;\n }\n .msr\\:flex-none {\n flex: none;\n }\n .msr\\:shrink-0 {\n flex-shrink: 0;\n }\n .msr\\:-translate-x-1 {\n --tw-translate-x: calc(var(--msr-spacing) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .msr\\:-translate-x-1\\/2 {\n --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .msr\\:translate-x-0 {\n --tw-translate-x: 0px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .msr\\:-translate-y-1\\/2 {\n --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .msr\\:-rotate-90 {\n rotate: calc(90deg * -1);\n }\n .msr\\:rotate-45 {\n rotate: 45deg;\n }\n .msr\\:rotate-90 {\n rotate: 90deg;\n }\n .msr\\:rotate-180 {\n rotate: 180deg;\n }\n .msr\\:rotate-\\[45deg\\] {\n rotate: 45deg;\n }\n .msr\\:rotate-\\[135deg\\] {\n rotate: 135deg;\n }\n .msr\\:cursor-crosshair {\n cursor: crosshair;\n }\n .msr\\:cursor-default {\n cursor: default;\n }\n .msr\\:cursor-pointer {\n cursor: pointer;\n }\n .msr\\:touch-none {\n touch-action: none;\n }\n .msr\\:resize-none {\n resize: none;\n }\n .msr\\:list-none {\n list-style-type: none;\n }\n .msr\\:appearance-none {\n appearance: none;\n }\n .msr\\:grid-cols-\\[78px_150px\\] {\n grid-template-columns: 78px 150px;\n }\n .msr\\:grid-cols-\\[78px_156px\\] {\n grid-template-columns: 78px 156px;\n }\n .msr\\:grid-cols-\\[78px_minmax\\(0\\,1fr\\)\\] {\n grid-template-columns: 78px minmax(0,1fr);\n }\n .msr\\:grid-cols-\\[minmax\\(0\\,1fr\\)_28px_34px\\] {\n grid-template-columns: minmax(0,1fr) 28px 34px;\n }\n .msr\\:flex-col {\n flex-direction: column;\n }\n .msr\\:items-center {\n align-items: center;\n }\n .msr\\:items-start {\n align-items: flex-start;\n }\n .msr\\:items-stretch {\n align-items: stretch;\n }\n .msr\\:justify-between {\n justify-content: space-between;\n }\n .msr\\:justify-center {\n justify-content: center;\n }\n .msr\\:justify-end {\n justify-content: flex-end;\n }\n .msr\\:gap-0 {\n gap: 0px;\n }\n .msr\\:gap-0\\.5 {\n gap: calc(var(--msr-spacing) * 0.5);\n }\n .msr\\:gap-1 {\n gap: var(--msr-spacing);\n }\n .msr\\:gap-1\\.5 {\n gap: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:gap-2 {\n gap: calc(var(--msr-spacing) * 2);\n }\n .msr\\:gap-3 {\n gap: calc(var(--msr-spacing) * 3);\n }\n .msr\\:gap-px {\n gap: 1px;\n }\n .msr\\:gap-x-3 {\n column-gap: calc(var(--msr-spacing) * 3);\n }\n .msr\\:gap-y-1 {\n row-gap: var(--msr-spacing);\n }\n .msr\\:self-stretch {\n align-self: stretch;\n }\n .msr\\:justify-self-end {\n justify-self: flex-end;\n }\n .msr\\:truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .msr\\:overflow-auto {\n overflow: auto;\n }\n .msr\\:overflow-hidden {\n overflow: hidden;\n }\n .msr\\:overflow-visible {\n overflow: visible;\n }\n .msr\\:overflow-x-hidden {\n overflow-x: hidden;\n }\n .msr\\:overflow-y-auto {\n overflow-y: auto;\n }\n .msr\\:rounded {\n border-radius: 0.25rem;\n }\n .msr\\:rounded-\\[3px\\] {\n border-radius: 3px;\n }\n .msr\\:rounded-\\[5px\\] {\n border-radius: 5px;\n }\n .msr\\:rounded-\\[6px\\] {\n border-radius: 6px;\n }\n .msr\\:rounded-\\[7px\\] {\n border-radius: 7px;\n }\n .msr\\:rounded-\\[8px\\] {\n border-radius: 8px;\n }\n .msr\\:rounded-\\[10px\\] {\n border-radius: 10px;\n }\n .msr\\:rounded-\\[12px\\] {\n border-radius: 12px;\n }\n .msr\\:rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .msr\\:rounded-lg {\n border-radius: var(--msr-radius-lg);\n }\n .msr\\:rounded-md {\n border-radius: var(--msr-radius-md);\n }\n .msr\\:rounded-none {\n border-radius: 0;\n }\n .msr\\:border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .msr\\:border-0 {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n .msr\\:border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .msr\\:border-t-2 {\n border-top-style: var(--tw-border-style);\n border-top-width: 2px;\n }\n .msr\\:border-r {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n .msr\\:border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n .msr\\:border-l {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n .msr\\:border-dashed {\n --tw-border-style: dashed;\n border-style: dashed;\n }\n .msr\\:border-dotted {\n --tw-border-style: dotted;\n border-style: dotted;\n }\n .msr\\:border-solid {\n --tw-border-style: solid;\n border-style: solid;\n }\n .msr\\:border-\\[\\#0d99ff\\] {\n border-color: #0d99ff;\n }\n .msr\\:border-\\[\\#2563eb\\]\\/70 {\n border-color: color-mix(in oklab, #2563eb 70%, transparent);\n }\n .msr\\:border-black\\/8 {\n border-color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--msr-color-black) 8%, transparent);\n }\n }\n .msr\\:border-black\\/10 {\n border-color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--msr-color-black) 10%, transparent);\n }\n }\n .msr\\:border-black\\/15 {\n border-color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--msr-color-black) 15%, transparent);\n }\n }\n .msr\\:border-ink-200 {\n border-color: var(--msr-color-ink-200);\n }\n .msr\\:border-ink-500 {\n border-color: var(--msr-color-ink-500);\n }\n .msr\\:border-ink-700 {\n border-color: var(--msr-color-ink-700);\n }\n .msr\\:border-red-200 {\n border-color: var(--msr-color-red-200);\n }\n .msr\\:border-transparent {\n border-color: transparent;\n }\n .msr\\:bg-\\[\\#0d99ff\\] {\n background-color: #0d99ff;\n }\n .msr\\:bg-\\[\\#0d99ff\\]\\/10 {\n background-color: color-mix(in oklab, #0d99ff 10%, transparent);\n }\n .msr\\:bg-\\[\\#2563eb\\] {\n background-color: #2563eb;\n }\n .msr\\:bg-\\[\\#fff\\] {\n background-color: #fff;\n }\n .msr\\:bg-black {\n background-color: var(--msr-color-black);\n }\n .msr\\:bg-black\\/10 {\n background-color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--msr-color-black) 10%, transparent);\n }\n }\n .msr\\:bg-ink-50 {\n background-color: var(--msr-color-ink-50);\n }\n .msr\\:bg-ink-50\\/40 {\n background-color: var(--msr-color-ink-50);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--msr-color-ink-50) 40%, transparent);\n }\n }\n .msr\\:bg-ink-900\\/90 {\n background-color: var(--msr-color-ink-900);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--msr-color-ink-900) 90%, transparent);\n }\n }\n .msr\\:bg-transparent {\n background-color: transparent;\n }\n .msr\\:bg-white {\n background-color: var(--msr-color-white);\n }\n .msr\\:bg-white\\/60 {\n background-color: var(--msr-color-white);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--msr-color-white) 60%, transparent);\n }\n }\n .msr\\:p-0 {\n padding: 0px;\n }\n .msr\\:p-1 {\n padding: var(--msr-spacing);\n }\n .msr\\:p-1\\.5 {\n padding: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:p-2 {\n padding: calc(var(--msr-spacing) * 2);\n }\n .msr\\:p-3 {\n padding: calc(var(--msr-spacing) * 3);\n }\n .msr\\:p-px {\n padding: 1px;\n }\n .msr\\:px-0 {\n padding-inline: 0px;\n }\n .msr\\:px-0\\.5 {\n padding-inline: calc(var(--msr-spacing) * 0.5);\n }\n .msr\\:px-1 {\n padding-inline: var(--msr-spacing);\n }\n .msr\\:px-1\\.5 {\n padding-inline: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:px-2 {\n padding-inline: calc(var(--msr-spacing) * 2);\n }\n .msr\\:px-2\\.5 {\n padding-inline: calc(var(--msr-spacing) * 2.5);\n }\n .msr\\:py-0 {\n padding-block: 0px;\n }\n .msr\\:py-0\\.5 {\n padding-block: calc(var(--msr-spacing) * 0.5);\n }\n .msr\\:py-1 {\n padding-block: var(--msr-spacing);\n }\n .msr\\:py-1\\.5 {\n padding-block: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:py-2 {\n padding-block: calc(var(--msr-spacing) * 2);\n }\n .msr\\:pt-0\\.5 {\n padding-top: calc(var(--msr-spacing) * 0.5);\n }\n .msr\\:pt-2 {\n padding-top: calc(var(--msr-spacing) * 2);\n }\n .msr\\:pr-2 {\n padding-right: calc(var(--msr-spacing) * 2);\n }\n .msr\\:pr-6 {\n padding-right: calc(var(--msr-spacing) * 6);\n }\n .msr\\:pb-1 {\n padding-bottom: var(--msr-spacing);\n }\n .msr\\:pb-1\\.5 {\n padding-bottom: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:pb-2 {\n padding-bottom: calc(var(--msr-spacing) * 2);\n }\n .msr\\:text-center {\n text-align: center;\n }\n .msr\\:text-left {\n text-align: left;\n }\n .msr\\:font-mono {\n font-family: var(--msr-font-mono);\n }\n .msr\\:text-\\[9px\\] {\n font-size: 9px;\n }\n .msr\\:text-\\[10px\\] {\n font-size: 10px;\n }\n .msr\\:text-\\[11px\\] {\n font-size: 11px;\n }\n .msr\\:text-\\[12px\\] {\n font-size: 12px;\n }\n .msr\\:text-\\[14px\\] {\n font-size: 14px;\n }\n .msr\\:leading-4 {\n --tw-leading: calc(var(--msr-spacing) * 4);\n line-height: calc(var(--msr-spacing) * 4);\n }\n .msr\\:leading-\\[1\\.4\\] {\n --tw-leading: 1.4;\n line-height: 1.4;\n }\n .msr\\:leading-\\[1\\.45\\] {\n --tw-leading: 1.45;\n line-height: 1.45;\n }\n .msr\\:leading-\\[18px\\] {\n --tw-leading: 18px;\n line-height: 18px;\n }\n .msr\\:leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .msr\\:font-medium {\n --tw-font-weight: var(--msr-font-weight-medium);\n font-weight: var(--msr-font-weight-medium);\n }\n .msr\\:font-normal {\n --tw-font-weight: var(--msr-font-weight-normal);\n font-weight: var(--msr-font-weight-normal);\n }\n .msr\\:font-semibold {\n --tw-font-weight: var(--msr-font-weight-semibold);\n font-weight: var(--msr-font-weight-semibold);\n }\n .msr\\:text-ellipsis {\n text-overflow: ellipsis;\n }\n .msr\\:whitespace-nowrap {\n white-space: nowrap;\n }\n .msr\\:whitespace-pre-wrap {\n white-space: pre-wrap;\n }\n .msr\\:text-\\[\\#64748b\\] {\n color: #64748b;\n }\n .msr\\:text-black {\n color: var(--msr-color-black);\n }\n .msr\\:text-black\\/30 {\n color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--msr-color-black) 30%, transparent);\n }\n }\n .msr\\:text-black\\/45 {\n color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--msr-color-black) 45%, transparent);\n }\n }\n .msr\\:text-ink-50 {\n color: var(--msr-color-ink-50);\n }\n .msr\\:text-ink-500 {\n color: var(--msr-color-ink-500);\n }\n .msr\\:text-ink-700 {\n color: var(--msr-color-ink-700);\n }\n .msr\\:text-ink-900 {\n color: var(--msr-color-ink-900);\n }\n .msr\\:text-red-600 {\n color: var(--msr-color-red-600);\n }\n .msr\\:text-white {\n color: var(--msr-color-white);\n }\n .msr\\:text-white\\/60 {\n color: var(--msr-color-white);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--msr-color-white) 60%, transparent);\n }\n }\n .msr\\:tabular-nums {\n --tw-numeric-spacing: tabular-nums;\n font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);\n }\n .msr\\:opacity-0 {\n opacity: 0%;\n }\n .msr\\:opacity-60 {\n opacity: 60%;\n }\n .msr\\:opacity-80 {\n opacity: 80%;\n }\n .msr\\:opacity-100 {\n opacity: 100%;\n }\n .msr\\:shadow-lg {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .msr\\:outline-transparent {\n outline-color: transparent;\n }\n .msr\\:transition-\\[max-width\\,opacity\\,transform\\,padding\\] {\n transition-property: max-width,opacity,transform,padding;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-\\[width\\,opacity\\] {\n transition-property: width,opacity;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-opacity {\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-transform {\n transition-property: transform, translate, scale, rotate;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-none {\n transition-property: none;\n }\n .msr\\:duration-150 {\n --tw-duration: 150ms;\n transition-duration: 150ms;\n }\n .msr\\:ease-\\[ease\\] {\n --tw-ease: ease;\n transition-timing-function: ease;\n }\n .msr\\:outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .msr\\:select-none {\n -webkit-user-select: none;\n user-select: none;\n }\n @media (hover: hover) {\n .msr\\:group-hover\\:border-ink-200:is(:where(.msr\\:group):hover *) {\n border-color: var(--msr-color-ink-200);\n }\n }\n .msr\\:focus-within\\:rounded-l-\\[5px\\]:focus-within {\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n }\n .msr\\:focus-within\\:rounded-r-\\[5px\\]:focus-within {\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n }\n .msr\\:focus-within\\:outline:focus-within {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .msr\\:focus-within\\:outline-1:focus-within {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .msr\\:focus-within\\:outline-offset-\\[-1px\\]:focus-within {\n outline-offset: -1px;\n }\n .msr\\:focus-within\\:outline-\\[\\#0d99ff\\]:focus-within {\n outline-color: #0d99ff;\n }\n .msr\\:focus-within\\:outline-\\[var\\(--msr-accent\\)\\]:focus-within {\n outline-color: var(--msr-accent);\n }\n @media (hover: hover) {\n .msr\\:hover\\:border-ink-200:hover {\n border-color: var(--msr-color-ink-200);\n }\n .msr\\:hover\\:bg-\\[\\#0b8eea\\]:hover {\n background-color: #0b8eea;\n }\n .msr\\:hover\\:bg-\\[\\#0d99ff\\]:hover {\n background-color: #0d99ff;\n }\n .msr\\:hover\\:bg-black\\/4:hover {\n background-color: var(--msr-color-black);\n }\n @supports (color: color-mix(in lab, red, red)) {\n .msr\\:hover\\:bg-black\\/4:hover {\n background-color: color-mix(in oklab, var(--msr-color-black) 4%, transparent);\n }\n }\n .msr\\:hover\\:bg-black\\/10:hover {\n background-color: var(--msr-color-black);\n }\n @supports (color: color-mix(in lab, red, red)) {\n .msr\\:hover\\:bg-black\\/10:hover {\n background-color: color-mix(in oklab, var(--msr-color-black) 10%, transparent);\n }\n }\n .msr\\:hover\\:bg-ink-50:hover {\n background-color: var(--msr-color-ink-50);\n }\n .msr\\:hover\\:bg-red-50:hover {\n background-color: var(--msr-color-red-50);\n }\n .msr\\:hover\\:text-ink-700:hover {\n color: var(--msr-color-ink-700);\n }\n .msr\\:hover\\:text-ink-900:hover {\n color: var(--msr-color-ink-900);\n }\n .msr\\:hover\\:text-white:hover {\n color: var(--msr-color-white);\n }\n .msr\\:hover\\:underline:hover {\n text-decoration-line: underline;\n }\n }\n .msr\\:focus\\:border-\\[\\#0d99ff\\]:focus {\n border-color: #0d99ff;\n }\n .msr\\:focus\\:shadow-\\[inset_0_0_0_1px_\\#0d99ff\\]:focus {\n --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, #0d99ff);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus\\:shadow-\\[inset_0_0_0_1px_var\\(--msr-accent\\)\\]:focus {\n --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, var(--msr-accent));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus\\:outline-none:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n .msr\\:focus-visible\\:border-\\[\\#0d99ff\\]:focus-visible {\n border-color: #0d99ff;\n }\n .msr\\:focus-visible\\:bg-\\[\\#0d99ff\\]:focus-visible {\n background-color: #0d99ff;\n }\n .msr\\:focus-visible\\:text-white:focus-visible {\n color: var(--msr-color-white);\n }\n .msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_\\#0d99ff\\]:focus-visible {\n --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, #0d99ff);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_\\#ef4444\\]:focus-visible {\n --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, #ef4444);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus-visible\\:ring-1:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus-visible\\:ring-\\[\\#0d99ff\\]\\/25:focus-visible {\n --tw-ring-color: color-mix(in oklab, #0d99ff 25%, transparent);\n }\n .msr\\:focus-visible\\:outline-none:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .msr\\:disabled\\:cursor-default:disabled {\n cursor: default;\n }\n .msr\\:disabled\\:opacity-40:disabled {\n opacity: 40%;\n }\n .msr\\:disabled\\:opacity-45:disabled {\n opacity: 45%;\n }\n @media (prefers-reduced-motion: reduce) {\n .msr\\:motion-reduce\\:transition-none {\n transition-property: none;\n }\n }\n}\n:root, :host {\n --color-ink-50: #f8fafc;\n --color-ink-200: #e2e8f0;\n --color-ink-500: #64748b;\n --color-ink-700: #334155;\n --color-ink-900: #0f172a;\n}\n:host {\n all: initial;\n display: block;\n color-scheme: light;\n color: #0f172a;\n font-family: ui-sans-serif, system-ui, sans-serif;\n font-size: 16px;\n font-weight: 400;\n line-height: 1.5;\n letter-spacing: normal;\n direction: ltr;\n --msr-spacing: 4px;\n}\n*, *::before, *::after {\n box-sizing: border-box;\n}\n@layer base {\n *, ::before, ::after, ::backdrop {\n --tw-border-style: solid;\n --tw-outline-style: solid;\n --tw-shadow: 0 0 #0000;\n --tw-inset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n }\n button, input, select, textarea {\n appearance: none;\n background-color: transparent;\n padding: 0;\n font: inherit;\n color: inherit;\n letter-spacing: inherit;\n }\n}\n.mesurer-toolbar-surface {\n box-shadow: 0 0 0.5px rgba(0, 0, 0, 0.18), 0 3px 8px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n.mesurer-menu-surface {\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08);\n}\n.mesurer-color-picker {\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n}\n.mesurer-settings-tabs {\n box-shadow: inset 0 0 0 1px rgba(15, 23, 42, 0.08);\n}\n.mesurer-settings-tab[aria-selected=\"true\"] {\n box-shadow: 0 0 0 1px rgba(15, 23, 42, 0.12);\n}\n.mesurer-switch-track {\n box-sizing: border-box;\n border: 1px solid #e2e8f0;\n}\n.mesurer-switch-track[data-checked=\"true\"] {\n border-color: #0d99ff;\n}\n.mesurer-control-shell {\n border: 1px solid transparent;\n}\n.mesurer-control-shell:hover {\n border-color: #e2e8f0;\n}\n.mesurer-control-focus:focus-within {\n outline: 1px solid #0d99ff;\n outline-offset: -1px;\n}\n.mesurer-root {\n --msr-spacing: 4px;\n}\nbody [data-mesurer-native-scroll-anchor=\"box\"][data-mesurer-nested-scroll-compensation=\"true\"] {\n position: absolute !important;\n left: calc(anchor(left) + var(--mesurer-nested-scroll-x, 0px)) !important;\n top: calc(anchor(top) + var(--mesurer-nested-scroll-y, 0px)) !important;\n}\nbody [data-mesurer-native-scroll-anchor=\"label\"][data-mesurer-nested-scroll-compensation=\"true\"] {\n position: absolute !important;\n left: calc(anchor(center) + var(--mesurer-nested-scroll-x, 0px)) !important;\n top: calc(anchor(bottom) + 2px + var(--mesurer-nested-scroll-y, 0px)) !important;\n}\nbody [data-mesurer-native-scroll-anchor=\"offset\"][data-mesurer-nested-scroll-compensation=\"true\"] {\n position: absolute !important;\n left: calc(anchor(left) + var(--mesurer-native-anchor-x, 0px) + var(--mesurer-nested-scroll-x, 0px)) !important;\n top: calc(anchor(top) + var(--mesurer-native-anchor-y, 0px) + var(--mesurer-nested-scroll-y, 0px)) !important;\n}\n[data-mesurer-text-edit-ring=\"true\"], [data-mesurer-text-selection-highlight=\"true\"], [data-mesurer-text-caret=\"true\"] {\n z-index: 2147482900 !important;\n}\n[data-mesurer-text-inspector-placement-shell=\"true\"], .mesurer-ti-card {\n z-index: 2147483647 !important;\n}\n[data-mesurer-context-root=\"true\"] [data-mesurer-annotation-scroll-mode=\"document\"] {\n position: absolute !important;\n}\n[data-mesurer-annotation-scroll-mode=\"native-anchor\"] {\n position: fixed !important;\n}\n[data-mesurer-native-scroll-anchor=\"offset\"][data-mesurer-nested-scroll-compensation=\"true\"][data-mesurer-annotation-scroll-mode=\"native-anchor\"] {\n position: fixed !important;\n}\n[data-mesurer-annotation-badge=\"true\"] {\n width: 20px !important;\n height: 20px !important;\n transform: none !important;\n transition: width 150ms ease, height 150ms ease, background 150ms ease, color 150ms ease, box-shadow 150ms ease !important;\n}\n[data-mesurer-annotation-marker=\"true\"][data-mesurer-annotation-highlighted=\"true\"] > [data-mesurer-annotation-badge=\"true\"] {\n width: 24px !important;\n height: 24px !important;\n}\n[data-mesurer-root=\"true\"][data-mesurer-direct-text-edit-active=\"true\"] [data-mesurer-annotation-trigger=\"true\"], [data-mesurer-context-root=\"true\"][data-mesurer-direct-text-edit-active=\"true\"] [data-mesurer-annotation-trigger=\"true\"] {\n display: none !important;\n}\n[data-mesurer-plugin-settings] [role=\"switch\"] {\n grid-template-columns: minmax(0, 1fr) auto;\n}\n[data-mesurer-plugin-settings] [role=\"switch\"] > span:first-child {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n[data-mesurer-plugin-settings-disclosure=\"plugins\"] {\n width: calc(100% + 16px);\n margin-inline: -8px;\n}\n.mesurer-solid-root {\n position: fixed;\n inset: 0;\n z-index: 2147483000;\n pointer-events: none;\n --msr-spacing: 4px;\n}\n.mesurer-solid-root [role=\"slider\"] {\n border: 0;\n}\n[data-mesurer-distance-kind=\"selection-spacing\"][data-mesurer-distance-active=\"true\"] [data-mesurer-distance-hover-target=\"true\"] {\n opacity: 1 !important;\n}\n[data-mesurer-distance-kind=\"selection-spacing\"][data-mesurer-distance-active=\"true\"]:has([data-mesurer-distance-label-axis=\"x\"]:hover) [data-mesurer-distance-line^=\"vertical\"], [data-mesurer-distance-kind=\"selection-spacing\"][data-mesurer-distance-active=\"true\"]:has([data-mesurer-distance-label-axis=\"y\"]:hover) [data-mesurer-distance-line^=\"horizontal\"], [data-mesurer-distance-kind=\"selection-spacing\"][data-mesurer-distance-active=\"true\"]:has([data-mesurer-distance-label-axis]:hover) [data-mesurer-distance-connector=\"true\"] {\n opacity: 0.16 !important;\n}\nbody.mesurer-solid-xray * {\n outline: solid 1px blue !important;\n}\nbody.mesurer-solid-xray [data-mesurer-root], body.mesurer-solid-xray [data-mesurer-root] *, body.mesurer-solid-xray [data-mesurer-inspector-ui], body.mesurer-solid-xray [data-mesurer-inspector-ui] *, body.mesurer-solid-xray .mesurer-toolbar-surface, body.mesurer-solid-xray .mesurer-toolbar-surface *, body.mesurer-solid-xray .mesurer-ti-box, body.mesurer-solid-xray .mesurer-ti-card, body.mesurer-solid-xray .mesurer-ti-card *, body.mesurer-solid-xray .mesurer-ti-close {\n outline: none !important;\n}\n[data-mesurer-toolbar=\"true\"] > div:has(> [data-mesurer-toolbar-compact-item]) {\n transition: padding-inline 150ms ease;\n}\n[data-mesurer-toolbar=\"true\"][data-mesurer-toolbar-compact=\"true\"] > div:has(> [data-mesurer-toolbar-compact-item]):not(:has(> [data-mesurer-toolbar-compact-item][data-visible=\"true\"])) {\n padding-inline: 0;\n}\n[data-mesurer-selected-measurement=\"true\"]:has(> [data-mesurer-native-scroll-anchor=\"box\"]) {\n display: contents !important;\n}\n@media (prefers-reduced-motion: reduce) {\n [data-mesurer-toolbar=\"true\"] > div:has(> [data-mesurer-toolbar-compact-item]) {\n transition: none;\n }\n [data-mesurer-annotation-badge=\"true\"] {\n transition: none !important;\n }\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) {\n --msr-accent: #0d99ff;\n --msr-surface: #fff;\n --msr-surface-raised: #fff;\n --msr-surface-muted: #f8fafc;\n --msr-content: #18181b;\n --msr-color-white: #fff;\n --msr-color-black: #000;\n --msr-color-ink-50: #f8fafc;\n --msr-color-ink-100: #f1f5f9;\n --msr-color-ink-200: #e2e8f0;\n --msr-color-ink-300: #cbd5e1;\n --msr-color-ink-500: #64748b;\n --msr-color-ink-700: #334155;\n --msr-color-ink-900: #18181b;\n --color-ink-50: var(--msr-color-ink-50);\n --color-ink-100: var(--msr-color-ink-100);\n --color-ink-200: var(--msr-color-ink-200);\n --color-ink-300: var(--msr-color-ink-300);\n --color-ink-500: var(--msr-color-ink-500);\n --color-ink-700: var(--msr-color-ink-700);\n --color-ink-900: var(--msr-color-ink-900);\n --msr-danger-bg: #fef2f2;\n --msr-danger-border: #fecaca;\n --msr-danger-text: #dc2626;\n --msr-danger-solid-bg: #dc2626;\n --msr-danger-solid-hover: #b91c1c;\n --msr-danger-solid-text: #fff;\n --color-red-50: var(--msr-danger-bg);\n --color-red-200: var(--msr-danger-border);\n --color-red-600: var(--msr-danger-text);\n --color-red-700: #b91c1c;\n --msr-control-thumb: #fff;\n --msr-slider-track: rgba(15, 23, 42, 0.16);\n --msr-shadow-toolbar: 0 0 0.4px rgba(0, 0, 0, 0.22),\n 0 6px 18px rgba(0, 0, 0, 0.03),\n 0 3px 9px rgba(0, 0, 0, 0.06),\n 0 1px 1px rgba(0, 0, 0, 0.06);\n --msr-shadow-floating: 0 0 0 0.4px rgba(0, 0, 0, 0.22),\n 0 6px 18px rgba(0, 0, 0, 0.03),\n 0 3px 9px rgba(0, 0, 0, 0.06),\n 0 1px 1px rgba(0, 0, 0, 0.06);\n --msr-shadow-select-menu: var(--msr-shadow-floating);\n color: var(--msr-content);\n color-scheme: light;\n}\n:where( [data-mesurer-root=\"true\"][data-theme=\"dark\"], [data-mesurer-inspector-ui=\"true\"][data-theme=\"dark\"] ) {\n --msr-accent: #0c8ce9;\n --msr-surface: #323232;\n --msr-surface-raised: #3a3a3a;\n --msr-surface-muted: #3a3a3a;\n --msr-content: #f5f5f5;\n --msr-color-white: #f5f5f5;\n --msr-color-black: #171717;\n --msr-color-ink-50: #3a3a3a;\n --msr-color-ink-100: #414141;\n --msr-color-ink-200: #4a4a4a;\n --msr-color-ink-300: #5a5a5a;\n --msr-color-ink-500: #a0a0a0;\n --msr-color-ink-700: #dedede;\n --msr-color-ink-900: #f5f5f5;\n --msr-danger-bg: #3f2020;\n --msr-danger-border: #7f3f46;\n --msr-danger-text: #f87171;\n --msr-danger-solid-bg: #c95058;\n --msr-danger-solid-hover: #b7424b;\n --msr-danger-solid-text: #f5f5f5;\n --color-red-700: #fca5a5;\n --msr-control-thumb: #f4f4f5;\n --msr-slider-track: rgba(245, 245, 245, 0.24);\n --msr-shadow-toolbar: 0 0 0.4px lch(100% 0 0 / 0.10),\n 0 3px 8px lch(0% 0 0 / 0.125),\n 0 2px 5px lch(0% 0 0 / 0.125),\n 0 1px 1px lch(0% 0 0 / 0.125);\n --msr-shadow-floating: 0 0 0 0.4px lch(100% 0 0 / 0.05),\n 0 4px 12px lch(0% 0 0 / 0.12),\n 0 1px 3px lch(0% 0 0 / 0.10);\n --msr-shadow-select-menu: 0 0 0 0.4px lch(100% 0 0 / 0.14),\n 0 4px 12px lch(0% 0 0 / 0.22),\n 0 1px 3px lch(0% 0 0 / 0.18);\n color-scheme: dark;\n}\n@media (prefers-color-scheme: dark) {\n :where( [data-mesurer-root=\"true\"][data-theme=\"system\"], [data-mesurer-inspector-ui=\"true\"][data-theme=\"system\"] ) {\n --msr-accent: #0c8ce9;\n --msr-surface: #323232;\n --msr-surface-raised: #3a3a3a;\n --msr-surface-muted: #3a3a3a;\n --msr-content: #f5f5f5;\n --msr-color-white: #f5f5f5;\n --msr-color-black: #171717;\n --msr-color-ink-50: #3a3a3a;\n --msr-color-ink-100: #414141;\n --msr-color-ink-200: #4a4a4a;\n --msr-color-ink-300: #5a5a5a;\n --msr-color-ink-500: #a0a0a0;\n --msr-color-ink-700: #dedede;\n --msr-color-ink-900: #f5f5f5;\n --msr-danger-bg: #3f2020;\n --msr-danger-border: #7f3f46;\n --msr-danger-text: #f87171;\n --msr-danger-solid-bg: #c95058;\n --msr-danger-solid-hover: #b7424b;\n --msr-danger-solid-text: #f5f5f5;\n --color-red-700: #fca5a5;\n --msr-control-thumb: #f4f4f5;\n --msr-slider-track: rgba(245, 245, 245, 0.24);\n --msr-shadow-toolbar: 0 0 0.4px lch(100% 0 0 / 0.10),\n 0 3px 8px lch(0% 0 0 / 0.125),\n 0 2px 5px lch(0% 0 0 / 0.125),\n 0 1px 1px lch(0% 0 0 / 0.125);\n --msr-shadow-floating: 0 0 0 0.4px lch(100% 0 0 / 0.05),\n 0 4px 12px lch(0% 0 0 / 0.12),\n 0 1px 3px lch(0% 0 0 / 0.10);\n --msr-shadow-select-menu: 0 0 0 0.4px lch(100% 0 0 / 0.14),\n 0 4px 12px lch(0% 0 0 / 0.22),\n 0 1px 3px lch(0% 0 0 / 0.18);\n color-scheme: dark;\n }\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:bg-white\"], :where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:bg-[#fff]\"] {\n background-color: var(--msr-surface) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:text-black\"] {\n color: var(--msr-content) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:hover:bg-black/4\"]:hover, :where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:hover:bg-black/5\"]:hover {\n background-color: var(--msr-content) !important;\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in srgb, var(--msr-content) 6%, transparent) !important;\n }\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) .mesurer-toolbar-surface {\n background-color: var(--msr-surface) !important;\n box-shadow: var(--msr-shadow-toolbar) !important;\n color: var(--msr-content);\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) :is( .mesurer-menu-surface, .mesurer-color-picker, .mesurer-ti-card, [data-mesurer-text-inspector-info=\"true\"], [data-mesurer-annotation-panel=\"true\"], [data-mesurer-annotation-composer=\"true\"] ) {\n background-color: var(--msr-surface-raised) !important;\n color: var(--msr-content) !important;\n box-shadow: var(--msr-shadow-floating) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) .mesurer-switch-track[data-checked=\"false\"], :where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) .mesurer-control-shell {\n background-color: var(--msr-surface-muted) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) .mesurer-switch-track > span {\n background-color: var(--msr-control-thumb) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) :is(.mesurer-settings-select, .mesurer-settings-select-menu) {\n background-color: var(--msr-surface-raised) !important;\n border-color: var(--msr-color-ink-200) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [data-mesurer-rulers=\"true\"] {\n color: var(--msr-color-ink-500) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [data-slider-container=\"true\"] > div:first-child {\n background-color: var(--msr-slider-track) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:bg-[#0d99ff]\"] {\n background-color: var(--msr-accent) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:border-[#0d99ff]\"] {\n border-color: var(--msr-accent) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:hover:bg-[#0d99ff]\"]:hover, :where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:focus-visible:bg-[#0d99ff]\"]:focus-visible {\n background-color: var(--msr-accent) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:text-white\"] {\n color: var(--msr-color-white) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [data-slider-thumb=\"true\"]:focus-visible {\n box-shadow: 0 0 0 1px var(--msr-accent) !important;\n @supports (color: color-mix(in lab, red, red)) {\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--msr-accent) 25%, transparent) !important;\n }\n}\n:where([data-mesurer-root=\"true\"], [data-mesurer-inspector-ui=\"true\"]) {\n --msr-radius-control: 5px;\n}\n@layer utilities {\n .msr\\:rounded-control {\n border-radius: var(--msr-radius-control);\n }\n}\n.mesurer-thin-scrollbar {\n scrollbar-width: thin;\n scrollbar-color: var(--msr-color-ink-200) transparent;\n}\n.mesurer-thin-scrollbar::-webkit-scrollbar {\n width: 4px;\n height: 4px;\n}\n.mesurer-thin-scrollbar::-webkit-scrollbar-track {\n background: transparent;\n}\n.mesurer-thin-scrollbar::-webkit-scrollbar-thumb {\n background: var(--msr-color-ink-200);\n border-radius: var(--msr-radius-control);\n}\n.mesurer-thin-scrollbar:hover {\n scrollbar-color: var(--msr-color-ink-300) transparent;\n}\n.mesurer-thin-scrollbar:hover::-webkit-scrollbar-thumb {\n background: var(--msr-color-ink-300);\n}\n.mesurer-thin-scrollbar::-webkit-scrollbar-corner {\n background: transparent;\n}\n@property --tw-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ordinal {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-slashed-zero {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-figure {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-spacing {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-fraction {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ease {\n syntax: \"*\";\n inherits: false;\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-border-style: solid;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-ordinal: initial;\n --tw-slashed-zero: initial;\n --tw-numeric-figure: initial;\n --tw-numeric-spacing: initial;\n --tw-numeric-fraction: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-duration: initial;\n --tw-ease: initial;\n }\n }\n}\n", Vf = 0, Hf = "mesurer:tab-id", Uf = "mesurer-settings", Wf = "mesurer-state", Gf = 80, Kf = (e, t) => {
9847
9857
  try {
9848
9858
  let n = e.sessionStorage.getItem(`${t}:toolbar-position`);
9849
9859
  if (!n) return;
@@ -10825,21 +10835,72 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
10825
10835
  }, W = () => {
10826
10836
  for (let [e, t] of h) t.value || t.priority ? e.style.setProperty("visibility", t.value, t.priority) : e.style.removeProperty("visibility");
10827
10837
  h.clear();
10828
- }, ee = (e = k()) => {
10838
+ }, ee = (e) => {
10839
+ if (e.parentElement instanceof c.HTMLElement) return e.parentElement;
10840
+ let t = e.getRootNode();
10841
+ return t instanceof c.ShadowRoot && t.host instanceof c.HTMLElement ? t.host : null;
10842
+ }, te = (e, t) => {
10843
+ let n = ee(e);
10844
+ for (; n;) {
10845
+ let e = t.get(n);
10846
+ if (e) return e;
10847
+ n = ee(n);
10848
+ }
10849
+ return {
10850
+ x: 0,
10851
+ y: 0
10852
+ };
10853
+ }, ne = (e = k()) => {
10829
10854
  let t = /* @__PURE__ */ new Map();
10830
10855
  for (let n of e) for (let e of n.targets) {
10831
10856
  let n = N(e);
10832
- n && t.set(n, {
10833
- x: e.desiredOffsetX,
10834
- y: e.desiredOffsetY
10835
- });
10857
+ n && t.set(n, e);
10836
10858
  }
10837
10859
  return t;
10838
- }, te = () => {
10860
+ }, re = (e) => e.offsetSpace !== "local" || e.desiredLocalOffsetX === null || e.desiredLocalOffsetY === null ? null : {
10861
+ x: e.desiredLocalOffsetX,
10862
+ y: e.desiredLocalOffsetY
10863
+ }, ie = (e, t) => {
10864
+ let n = ee(e);
10865
+ for (; n;) {
10866
+ if (t.has(n)) return n;
10867
+ n = ee(n);
10868
+ }
10869
+ return null;
10870
+ }, ae = (e = k(), t = /* @__PURE__ */ new Map()) => {
10871
+ let n = ne(e), r = /* @__PURE__ */ new Set([...n.keys(), ...t.keys()]), i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Set(), o = (e) => {
10872
+ let s = i.get(e);
10873
+ if (s) return s;
10874
+ let c = n.get(e), l = t.get(e) ?? (c ? re(c) : null);
10875
+ if (!l && c) {
10876
+ let t = {
10877
+ x: c.desiredOffsetX,
10878
+ y: c.desiredOffsetY
10879
+ };
10880
+ return i.set(e, t), t;
10881
+ }
10882
+ if (!l) return {
10883
+ x: 0,
10884
+ y: 0
10885
+ };
10886
+ if (a.has(e)) return l;
10887
+ a.add(e);
10888
+ let u = ie(e, r), d = u ? o(u) : {
10889
+ x: 0,
10890
+ y: 0
10891
+ }, f = {
10892
+ x: d.x + l.x,
10893
+ y: d.y + l.y
10894
+ };
10895
+ return a.delete(e), i.set(e, f), f;
10896
+ };
10897
+ for (let e of r) o(e);
10898
+ return i;
10899
+ }, oe = () => {
10839
10900
  if (_.state === "live") return /* @__PURE__ */ new Map();
10840
- if (!_.intentId) return ee();
10901
+ if (!_.intentId) return ae();
10841
10902
  let e = w().intents.find((e) => e.id === _.intentId);
10842
- if (!e) return ee();
10903
+ if (!e) return ae();
10843
10904
  let t = /* @__PURE__ */ new Map();
10844
10905
  for (let n of e.targets) {
10845
10906
  let e = N(n);
@@ -10852,25 +10913,10 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
10852
10913
  });
10853
10914
  }
10854
10915
  return t;
10855
- }, ne = (e) => {
10856
- if (e.parentElement instanceof c.HTMLElement) return e.parentElement;
10857
- let t = e.getRootNode();
10858
- return t instanceof c.ShadowRoot && t.host instanceof c.HTMLElement ? t.host : null;
10859
- }, re = (e, t) => {
10860
- let n = ne(e);
10861
- for (; n;) {
10862
- let e = t.get(n);
10863
- if (e) return e;
10864
- n = ne(n);
10865
- }
10866
- return {
10867
- x: 0,
10868
- y: 0
10869
- };
10870
- }, ie = (e) => {
10916
+ }, se = (e) => {
10871
10917
  let t = [...e].flatMap(([t, n]) => {
10872
10918
  if (!t.isConnected || !j(t)) return [];
10873
- let r = re(t, e), i = {
10919
+ let r = te(t, e), i = {
10874
10920
  x: n.x - r.x,
10875
10921
  y: n.y - r.y
10876
10922
  };
@@ -10890,25 +10936,25 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
10890
10936
  });
10891
10937
  }
10892
10938
  L(n);
10893
- }, ae = () => ie(te()), oe = (e) => {
10939
+ }, ce = () => se(oe()), le = (e) => {
10894
10940
  z();
10895
10941
  try {
10896
10942
  return e();
10897
10943
  } finally {
10898
- !x && !v && ae();
10944
+ !x && !v && ce();
10899
10945
  }
10900
- }, se = () => i.currentSelection().elements.filter((e) => e instanceof c.HTMLElement && e.isConnected && j(e));
10946
+ }, ue = () => i.currentSelection().elements.filter((e) => e instanceof c.HTMLElement && e.isConnected && j(e));
10901
10947
  e.state.register({
10902
10948
  id: _p,
10903
- initial: se().length > 0
10949
+ initial: ue().length > 0
10904
10950
  });
10905
- let ce = () => e.state.get(_p) ?? !1, le = () => {
10906
- let t = se().length > 0;
10907
- t !== ce() && e.state.update(_p, () => t);
10908
- }, ue = () => Ap(se().map((e) => Pu(e))), de = () => {
10951
+ let de = () => e.state.get(_p) ?? !1, fe = () => {
10952
+ let t = ue().length > 0;
10953
+ t !== de() && e.state.update(_p, () => t);
10954
+ }, pe = () => Ap(ue().map((e) => Pu(e))), me = () => {
10909
10955
  for (let e of g.values()) e.remove();
10910
10956
  g.clear();
10911
- }, fe = (e) => {
10957
+ }, he = (e) => {
10912
10958
  let t = e.getBoundingClientRect(), n = t.right + wp;
10913
10959
  n + Cp > r.innerWidth - 4 && (n = Math.max(4, t.left - Cp - wp));
10914
10960
  let i = Math.min(Math.max(4, t.top + Tp), Math.max(4, r.innerHeight - Cp - 4));
@@ -10916,27 +10962,34 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
10916
10962
  left: n,
10917
10963
  top: i
10918
10964
  };
10919
- }, pe = () => {
10965
+ }, ge = () => {
10920
10966
  if (!T() || v) {
10921
- de();
10967
+ me();
10922
10968
  return;
10923
10969
  }
10924
- let t = ee(k()), r = /* @__PURE__ */ new Set();
10925
- for (let i of se()) {
10926
- let a = t.get(i);
10927
- if (!a || Math.abs(a.x) <= Ep && Math.abs(a.y) <= Ep) continue;
10928
- r.add(i);
10929
- let o = g.get(i);
10930
- o || (o = n.createElement("button"), o.type = "button", o.dataset.mesurerArrangeReset = "true", o.dataset.mesurerInspectorUi = "true", o.setAttribute("aria-label", "Reset position"), o.title = "Reset position", o.textContent = "↺", o.className = "msr:pointer-events-auto msr:flex msr:size-6 msr:items-center msr:justify-center msr:rounded-[7px] msr:border msr:border-ink-200 msr:bg-white msr:text-[14px] msr:leading-none msr:text-black msr:outline-none msr:hover:bg-ink-50 msr:focus-visible:border-[#0d99ff]", o.style.position = "fixed", o.addEventListener("pointerdown", (e) => e.stopPropagation()), o.addEventListener("click", (t) => {
10931
- t.preventDefault(), t.stopPropagation(), b = [i], e.command.execute(hp, void 0, { source: "arrange-reset-button" }).catch(() => {
10970
+ let t = k(), r = ne(t), i = ae(t), a = /* @__PURE__ */ new Set();
10971
+ for (let t of ue()) {
10972
+ let o = r.get(t);
10973
+ if (!o) continue;
10974
+ let s = i.get(t);
10975
+ if (!s) continue;
10976
+ let c = te(t, i), u = re(o) ?? {
10977
+ x: s.x - c.x,
10978
+ y: s.y - c.y
10979
+ };
10980
+ if (Math.abs(u.x) <= Ep && Math.abs(u.y) <= Ep) continue;
10981
+ a.add(t);
10982
+ let d = g.get(t);
10983
+ d || (d = n.createElement("button"), d.type = "button", d.dataset.mesurerArrangeReset = "true", d.dataset.mesurerInspectorUi = "true", d.setAttribute("aria-label", "Reset position"), d.title = "Reset position", d.textContent = "↺", d.className = "msr:pointer-events-auto msr:flex msr:size-6 msr:items-center msr:justify-center msr:rounded-[7px] msr:border msr:border-ink-200 msr:bg-white msr:text-[14px] msr:leading-none msr:text-black msr:outline-none msr:hover:bg-ink-50 msr:focus-visible:border-[#0d99ff]", d.style.position = "fixed", d.addEventListener("pointerdown", (e) => e.stopPropagation()), d.addEventListener("click", (n) => {
10984
+ n.preventDefault(), n.stopPropagation(), b = [t], e.command.execute(hp, void 0, { source: "arrange-reset-button" }).catch(() => {
10932
10985
  b = null;
10933
10986
  });
10934
- }), g.set(i, o), l.append(o));
10935
- let s = fe(i);
10936
- o.style.left = `${s.left}px`, o.style.top = `${s.top}px`;
10987
+ }), g.set(t, d), l.append(d));
10988
+ let f = he(t);
10989
+ d.style.left = `${f.left}px`, d.style.top = `${f.top}px`;
10937
10990
  }
10938
- for (let [e, t] of g) r.has(e) || (t.remove(), g.delete(e));
10939
- }, me = (t) => {
10991
+ for (let [e, t] of g) a.has(e) || (t.remove(), g.delete(e));
10992
+ }, _e = (t) => {
10940
10993
  let n = new Set(t);
10941
10994
  n.size && (e.state.update("mesurer.arrange.intents", (e) => {
10942
10995
  let t = !1, r = e.intents.flatMap((e) => {
@@ -10951,13 +11004,13 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
10951
11004
  }] : [];
10952
11005
  });
10953
11006
  return t ? { intents: r } : e;
10954
- }), ve(), _e());
10955
- }, he = () => {
11007
+ }), xe(), be());
11008
+ }, ve = () => {
10956
11009
  e.state.update(sp, (e) => {
10957
11010
  let t = e.intents.filter((e) => e.pageUrl !== O());
10958
11011
  return t.length === e.intents.length ? e : { intents: t };
10959
- }), ve(), _e();
10960
- }, ge = (e) => {
11012
+ }), xe(), be();
11013
+ }, ye = (e) => {
10961
11014
  let t = E();
10962
11015
  if (!t.snapping) return [];
10963
11016
  let n = [], a = new Set(e), s = i.snapshot(), l = s.xrayVisible && t.preferXrayEdges && t.elementEdges, u = 0, d = (i) => {
@@ -11029,38 +11082,38 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
11029
11082
  kind: "guide"
11030
11083
  });
11031
11084
  return n;
11032
- }, _e = (e) => {
11085
+ }, be = (e) => {
11033
11086
  if (!T()) {
11034
- f.style.display = "none", de();
11087
+ f.style.display = "none", me();
11035
11088
  return;
11036
11089
  }
11037
- let t = e === void 0 ? ue() : e;
11090
+ let t = e === void 0 ? pe() : e;
11038
11091
  if (!t) {
11039
- f.style.display = "none", de();
11092
+ f.style.display = "none", me();
11040
11093
  return;
11041
11094
  }
11042
- f.style.display = "block", f.style.left = `${t.left}px`, f.style.top = `${t.top}px`, f.style.width = `${t.width}px`, f.style.height = `${t.height}px`, v ? de() : pe();
11043
- }, ve = () => {
11095
+ f.style.display = "block", f.style.left = `${t.left}px`, f.style.top = `${t.top}px`, f.style.width = `${t.width}px`, f.style.height = `${t.height}px`, v ? me() : ge();
11096
+ }, xe = () => {
11044
11097
  _ = {
11045
11098
  intentId: null,
11046
11099
  state: "desired"
11047
- }, ae(), V(), T() ? U() : W();
11048
- }, ye = () => {
11100
+ }, ce(), V(), T() ? U() : W();
11101
+ }, Se = () => {
11049
11102
  _ = {
11050
11103
  intentId: null,
11051
11104
  state: "live"
11052
11105
  }, B(), V(), W();
11053
- }, be = () => {
11054
- x || v || (ae(), V(), T() ? U() : W(), _e());
11055
- }, xe = () => {
11106
+ }, Ce = () => {
11107
+ x || v || (ce(), V(), T() ? U() : W(), be());
11108
+ }, we = () => {
11056
11109
  S || x || (S = r.requestAnimationFrame(() => {
11057
- S = 0, be();
11110
+ S = 0, Ce();
11058
11111
  }));
11059
- }, Se = async () => {
11112
+ }, Te = async () => {
11060
11113
  s.querySelector("[data-mesurer-builtin='select'] button")?.getAttribute("aria-pressed") !== "true" && await e.command.execute(dp, void 0, { source: "arrange" });
11061
- }, Ce = (e) => {
11114
+ }, Ee = (e) => {
11062
11115
  if (!T() || e.button !== 0) return;
11063
- let r = se();
11116
+ let r = ue();
11064
11117
  if (!r.length) return;
11065
11118
  let a = e.shiftKey ? Wu(t.rendererRoot ?? null, () => Wu(l, () => Hu({
11066
11119
  x: e.clientX,
@@ -11073,62 +11126,81 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
11073
11126
  e.preventDefault(), e.stopPropagation(), _ = {
11074
11127
  intentId: null,
11075
11128
  state: "desired"
11076
- }, ae();
11077
- let s = ee(k());
11129
+ }, ce();
11130
+ let s = ne(k()), u = ae(k()), d = new Set(r);
11078
11131
  z();
11079
- let u = r.map((e, t) => {
11080
- let n = Pu(e), r = s.get(e) ?? {
11081
- x: 0,
11082
- y: 0
11083
- }, i = Op(n, r), a = Ku(e);
11132
+ let p = r.map((e, t) => {
11133
+ let n = Pu(e), r = te(e, u), i = u.get(e) ?? r, a = s.get(e), o = (a ? re(a) : null) ?? {
11134
+ x: i.x - r.x,
11135
+ y: i.y - r.y
11136
+ }, c = Op(n, i), l = Ku(e);
11084
11137
  return {
11085
11138
  element: e,
11139
+ movesDirectly: ie(e, d) === null,
11086
11140
  target: {
11087
11141
  id: `target-${t + 1}`,
11088
11142
  selector: Gu(e),
11089
- fingerprintTag: a.tag,
11090
- fingerprintId: a.id,
11091
- fingerprintTestId: a.testId,
11092
- fingerprintRole: a.role,
11093
- fingerprintAriaLabel: a.ariaLabel,
11094
- fingerprintClasses: [...a.classes],
11095
- fingerprintText: a.text,
11096
- beforeLeft: i.left,
11097
- beforeTop: i.top,
11098
- beforeWidth: i.width,
11099
- beforeHeight: i.height,
11100
- desiredLeft: i.left,
11101
- desiredTop: i.top,
11102
- desiredWidth: i.width,
11103
- desiredHeight: i.height,
11104
- beforeOffsetX: r.x,
11105
- beforeOffsetY: r.y,
11106
- desiredOffsetX: r.x,
11107
- desiredOffsetY: r.y
11143
+ fingerprintTag: l.tag,
11144
+ fingerprintId: l.id,
11145
+ fingerprintTestId: l.testId,
11146
+ fingerprintRole: l.role,
11147
+ fingerprintAriaLabel: l.ariaLabel,
11148
+ fingerprintClasses: [...l.classes],
11149
+ fingerprintText: l.text,
11150
+ beforeLeft: c.left,
11151
+ beforeTop: c.top,
11152
+ beforeWidth: c.width,
11153
+ beforeHeight: c.height,
11154
+ desiredLeft: c.left,
11155
+ desiredTop: c.top,
11156
+ desiredWidth: c.width,
11157
+ desiredHeight: c.height,
11158
+ beforeOffsetX: i.x,
11159
+ beforeOffsetY: i.y,
11160
+ desiredOffsetX: i.x,
11161
+ desiredOffsetY: i.y,
11162
+ offsetSpace: "local",
11163
+ beforeLocalOffsetX: o.x,
11164
+ beforeLocalOffsetY: o.y,
11165
+ desiredLocalOffsetX: o.x,
11166
+ desiredLocalOffsetY: o.y
11108
11167
  }
11109
11168
  };
11110
- }), d = Ap(u.map(({ target: e }) => ({
11169
+ }), m = Ap(p.map(({ target: e }) => ({
11111
11170
  left: e.beforeLeft,
11112
11171
  top: e.beforeTop,
11113
11172
  width: e.beforeWidth,
11114
11173
  height: e.beforeHeight
11115
11174
  })));
11116
- if (!d) {
11117
- ae();
11175
+ if (!m) {
11176
+ ce();
11118
11177
  return;
11119
11178
  }
11120
- ae(), U(), V(), v = {
11179
+ ce(), U(), V(), v = {
11121
11180
  pointerId: e.pointerId,
11122
11181
  originX: e.clientX,
11123
11182
  originY: e.clientY,
11124
- targets: u,
11125
- groupBefore: d,
11126
- snapCandidates: ge(r),
11183
+ targets: p,
11184
+ groupBefore: m,
11185
+ snapCandidates: ye(r),
11127
11186
  shiftToggleElement: e.shiftKey && a instanceof c.HTMLElement && r.includes(a) ? a : null,
11128
11187
  dx: 0,
11129
11188
  dy: 0
11130
- }, _e(d), f.style.cursor = "grabbing", f.setPointerCapture?.(e.pointerId);
11131
- }, we = (e) => {
11189
+ }, be(m), f.style.cursor = "grabbing", f.setPointerCapture?.(e.pointerId);
11190
+ }, De = (e, t, n) => {
11191
+ let r = /* @__PURE__ */ new Map();
11192
+ for (let i of e.targets) {
11193
+ let e = {
11194
+ x: i.target.beforeLocalOffsetX ?? 0,
11195
+ y: i.target.beforeLocalOffsetY ?? 0
11196
+ };
11197
+ r.set(i.element, i.movesDirectly ? {
11198
+ x: e.x + t,
11199
+ y: e.y + n
11200
+ } : e);
11201
+ }
11202
+ return r;
11203
+ }, Oe = (e) => {
11132
11204
  if (!v || e.pointerId !== v.pointerId) return;
11133
11205
  let t = e.clientX - v.originX, n = e.clientY - v.originY, r = null;
11134
11206
  e.shiftKey && (Math.abs(t) >= Math.abs(n) ? (n = 0, r = "x") : (t = 0, r = "y"));
@@ -11137,60 +11209,71 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
11137
11209
  y: n
11138
11210
  }), a = r === "y" ? null : Fp("x", i, v.snapCandidates), o = r === "x" ? null : Fp("y", i, v.snapCandidates);
11139
11211
  t += a?.delta ?? 0, n += o?.delta ?? 0, v.dx = t, v.dy = n;
11140
- let s = ee(k());
11141
- for (let e of v.targets) s.set(e.element, {
11142
- x: e.target.beforeOffsetX + t,
11143
- y: e.target.beforeOffsetY + n
11144
- });
11145
- ie(s);
11212
+ let s = ae(k(), De(v, t, n));
11213
+ se(s);
11146
11214
  let c = Op(v.groupBefore, {
11147
11215
  x: t,
11148
11216
  y: n
11149
11217
  });
11150
- _e(c), H(a, o, c);
11151
- }, Te = () => {
11218
+ be(c), H(a, o, c);
11219
+ }, ke = () => {
11152
11220
  if (!v) return;
11153
11221
  let e = v.pointerId;
11154
- v = null, f.hasPointerCapture?.(e) && f.releasePointerCapture(e), f.style.cursor = "grab", ve(), _e();
11155
- }, Ee = (t) => {
11222
+ v = null, f.hasPointerCapture?.(e) && f.releasePointerCapture(e), f.style.cursor = "grab", xe(), be();
11223
+ }, Ae = (t) => {
11156
11224
  if (!v || t.pointerId !== v.pointerId) return;
11157
11225
  t.preventDefault(), t.stopPropagation();
11158
11226
  let n = v;
11159
11227
  if (v = null, f.hasPointerCapture?.(t.pointerId) && f.releasePointerCapture(t.pointerId), f.style.cursor = "grab", V(), n.dx === 0 && n.dy === 0) {
11160
- n.shiftToggleElement && i.toggleSelection(n.shiftToggleElement), ve(), _e();
11228
+ n.shiftToggleElement && i.toggleSelection(n.shiftToggleElement), xe(), be();
11161
11229
  return;
11162
11230
  }
11231
+ let a = ae(k(), De(n, n.dx, n.dy));
11163
11232
  y = {
11164
11233
  id: Lp(r, "arrange"),
11165
11234
  createdAt: Date.now(),
11166
11235
  pageUrl: O(),
11167
- targets: n.targets.map(({ target: e }) => ({
11168
- ...e,
11169
- desiredLeft: e.beforeLeft + n.dx,
11170
- desiredTop: e.beforeTop + n.dy,
11171
- desiredOffsetX: e.beforeOffsetX + n.dx,
11172
- desiredOffsetY: e.beforeOffsetY + n.dy
11173
- }))
11236
+ targets: n.targets.map(({ element: e, movesDirectly: t, target: r }) => {
11237
+ let i = {
11238
+ x: r.beforeLocalOffsetX ?? 0,
11239
+ y: r.beforeLocalOffsetY ?? 0
11240
+ }, o = t ? {
11241
+ x: i.x + n.dx,
11242
+ y: i.y + n.dy
11243
+ } : i, s = a.get(e) ?? {
11244
+ x: r.beforeOffsetX + n.dx,
11245
+ y: r.beforeOffsetY + n.dy
11246
+ };
11247
+ return {
11248
+ ...r,
11249
+ desiredLeft: r.beforeLeft + n.dx,
11250
+ desiredTop: r.beforeTop + n.dy,
11251
+ desiredOffsetX: s.x,
11252
+ desiredOffsetY: s.y,
11253
+ desiredLocalOffsetX: o.x,
11254
+ desiredLocalOffsetY: o.y
11255
+ };
11256
+ })
11174
11257
  }, e.command.execute(pp).catch(() => {
11175
- y = null, ve(), _e();
11258
+ y = null, xe(), be();
11176
11259
  });
11177
- }, De = (e) => {
11178
- !v || e.pointerId !== v.pointerId || Te();
11179
- }, Oe = (t) => {
11260
+ }, je = (e) => {
11261
+ !v || e.pointerId !== v.pointerId || ke();
11262
+ }, Me = (t) => {
11180
11263
  if (t.key !== "Escape" || !T() && !v || Kp(t.target) || s.querySelector("[data-mesurer-tool-menu]")) return;
11181
11264
  if (t.preventDefault(), t.stopImmediatePropagation(), v) {
11182
- Te();
11265
+ ke();
11183
11266
  return;
11184
11267
  }
11185
11268
  let n = i.currentSelection();
11186
11269
  if (n.elements.length > 0 || n.region) {
11187
- i.clearSelection(), _e();
11270
+ i.clearSelection(), be();
11188
11271
  return;
11189
11272
  }
11190
- e.state.update(cp, () => !1), ye(), _e(), e.command.execute(dp, void 0, { source: "arrange-escape" }).catch(() => void 0);
11273
+ e.state.update(cp, () => !1), Se(), be(), e.command.execute(dp, void 0, { source: "arrange-escape" }).catch(() => void 0);
11191
11274
  };
11192
- f.addEventListener("pointerdown", Ce), f.addEventListener("pointermove", we), f.addEventListener("pointerup", Ee), f.addEventListener("pointercancel", De), r.addEventListener("keydown", Oe, !0), r.addEventListener("resize", xe), r.addEventListener("scroll", xe, !0), o.addEventListener("scroll", xe, !0), C = new c.MutationObserver(() => {
11193
- le(), xe();
11275
+ f.addEventListener("pointerdown", Ee), f.addEventListener("pointermove", Oe), f.addEventListener("pointerup", Ae), f.addEventListener("pointercancel", je), r.addEventListener("keydown", Me, !0), r.addEventListener("resize", we), r.addEventListener("scroll", we, !0), o.addEventListener("scroll", we, !0), C = new c.MutationObserver(() => {
11276
+ fe(), we();
11194
11277
  }), C.observe(o, {
11195
11278
  childList: !0,
11196
11279
  subtree: !0,
@@ -11203,9 +11286,9 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
11203
11286
  "aria-label"
11204
11287
  ]
11205
11288
  });
11206
- let ke = i.subscribe(() => {
11207
- le(), xe();
11208
- }), Ae = e.state.subscribe(xe), je = (e) => w().intents.find((t) => t.id === e) ?? null, Me = (e, t) => {
11289
+ let Ne = i.subscribe(() => {
11290
+ fe(), we();
11291
+ }), Pe = e.state.subscribe(we), Fe = (e) => w().intents.find((t) => t.id === e) ?? null, Ie = (e, t) => {
11209
11292
  let n = null;
11210
11293
  if (n = t === "before" ? Ap(e.targets.map((e) => ({
11211
11294
  left: e.beforeLeft,
@@ -11217,7 +11300,7 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
11217
11300
  top: e.desiredTop,
11218
11301
  width: e.desiredWidth,
11219
11302
  height: e.desiredHeight
11220
- }))) : oe(() => Ap(e.targets.map((e) => N(e)).filter((e) => e !== null).map((e) => Pu(e)))), !n) throw Error(`Arrange intent has no resolvable capture region: ${e.id}`);
11303
+ }))) : le(() => Ap(e.targets.map((e) => N(e)).filter((e) => e !== null).map((e) => Pu(e)))), !n) throw Error(`Arrange intent has no resolvable capture region: ${e.id}`);
11221
11304
  let i = Math.max(0, n.left - yp), a = Math.max(0, n.top - yp), o = Math.min(r.innerWidth, n.left + n.width + yp), s = Math.min(r.innerHeight, n.top + n.height + yp);
11222
11305
  return {
11223
11306
  left: i,
@@ -11225,28 +11308,28 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
11225
11308
  width: Math.max(0, o - i),
11226
11309
  height: Math.max(0, s - a)
11227
11310
  };
11228
- }, Ne = {
11311
+ }, Le = {
11229
11312
  active: T,
11230
11313
  intents: () => w().intents.map(Bp),
11231
11314
  intent(e) {
11232
- let t = je(e);
11315
+ let t = Fe(e);
11233
11316
  return t ? Bp(t) : null;
11234
11317
  },
11235
11318
  show(e, t) {
11236
- if (!je(e)) throw Error(`Arrange intent not found: ${e}`);
11319
+ if (!Fe(e)) throw Error(`Arrange intent not found: ${e}`);
11237
11320
  _ = {
11238
11321
  intentId: e,
11239
11322
  state: t
11240
- }, be();
11323
+ }, Ce();
11241
11324
  },
11242
11325
  showCurrent() {
11243
11326
  _ = {
11244
11327
  intentId: null,
11245
11328
  state: "desired"
11246
- }, be();
11329
+ }, Ce();
11247
11330
  },
11248
11331
  capturePlan(e, t) {
11249
- let n = je(e);
11332
+ let n = Fe(e);
11250
11333
  if (!n) throw Error(`Arrange intent not found: ${e}`);
11251
11334
  return {
11252
11335
  schema: "mesurer.arrange-capture/v1",
@@ -11259,14 +11342,14 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
11259
11342
  }, {
11260
11343
  id: "focus",
11261
11344
  kind: "clip",
11262
- rect: Me(n, t)
11345
+ rect: Ie(n, t)
11263
11346
  }]
11264
11347
  };
11265
11348
  },
11266
11349
  review: (e, t = vp) => {
11267
- let n = je(e);
11350
+ let n = Fe(e);
11268
11351
  if (!n) throw Error(`Arrange intent not found: ${e}`);
11269
- let r = oe(() => n.targets.map((e) => {
11352
+ let r = le(() => n.targets.map((e) => {
11270
11353
  let n = N(e), r = {
11271
11354
  left: e.desiredLeft,
11272
11355
  top: e.desiredTop,
@@ -11433,24 +11516,24 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
11433
11516
  ]
11434
11517
  }), e.command.register(fp, async () => {
11435
11518
  let t = !T();
11436
- if (t && await Se(), e.state.update("mesurer.arrange.active", () => t), !t) {
11437
- v && Te(), ye(), _e();
11519
+ if (t && await Te(), e.state.update("mesurer.arrange.active", () => t), !t) {
11520
+ v && ke(), Se(), be();
11438
11521
  return;
11439
11522
  }
11440
- ve(), _e();
11523
+ xe(), be();
11441
11524
  }), e.command.register(pp, () => {
11442
11525
  let t = y;
11443
- y = null, t && (e.state.update("mesurer.arrange.intents", (e) => ({ intents: [...e.intents, t].slice(-100) })), ve(), _e());
11526
+ y = null, t && (e.state.update("mesurer.arrange.intents", (e) => ({ intents: [...e.intents, t].slice(-100) })), xe(), be());
11444
11527
  }), e.command.register(hp, () => {
11445
- let e = b ?? se();
11446
- b = null, me(e);
11447
- }), e.command.register(gp, he), e.command.register(mp, () => {
11528
+ let e = b ?? ue();
11529
+ b = null, _e(e);
11530
+ }), e.command.register(gp, ve), e.command.register(mp, () => {
11448
11531
  e.state.update(sp, () => ({ intents: [] })), _ = {
11449
11532
  intentId: null,
11450
11533
  state: "desired"
11451
- }, B(), V(), T() ? U() : W(), _e();
11452
- }), e.service.provide(op, Ne), ae(), _e(), e.lifecycle.onDispose(() => {
11453
- x = !0, S && r.cancelAnimationFrame(S), C?.disconnect(), C = null, f.removeEventListener("pointerdown", Ce), f.removeEventListener("pointermove", we), f.removeEventListener("pointerup", Ee), f.removeEventListener("pointercancel", De), r.removeEventListener("keydown", Oe, !0), r.removeEventListener("resize", xe), r.removeEventListener("scroll", xe, !0), o.removeEventListener("scroll", xe, !0), ke(), Ae.dispose(), B(), de(), V(), W(), i.dispose(), a.dispose();
11534
+ }, B(), V(), T() ? U() : W(), be();
11535
+ }), e.service.provide(op, Le), ce(), be(), e.lifecycle.onDispose(() => {
11536
+ x = !0, S && r.cancelAnimationFrame(S), C?.disconnect(), C = null, f.removeEventListener("pointerdown", Ee), f.removeEventListener("pointermove", Oe), f.removeEventListener("pointerup", Ae), f.removeEventListener("pointercancel", je), r.removeEventListener("keydown", Me, !0), r.removeEventListener("resize", we), r.removeEventListener("scroll", we, !0), o.removeEventListener("scroll", we, !0), Ne(), Pe.dispose(), B(), me(), V(), W(), i.dispose(), a.dispose();
11454
11537
  });
11455
11538
  }
11456
11539
  }), Jp = (e, t, n) => {
@@ -15075,7 +15158,7 @@ var y_ = [
15075
15158
  "text-inspector",
15076
15159
  "guides",
15077
15160
  "settings"
15078
- ], b_ = "mesurer-plugin-settings", x_ = 1, S_ = (e) => (e.startsWith("mesurer.") ? e.slice(8) : e).split(/[.-]/g).filter(Boolean).map((e) => e[0]?.toUpperCase() + e.slice(1)).join(" ") || e, C_ = (e) => "create" in e && typeof e.create == "function", w_ = (e) => e === "select" || e === "xray" || e === "color-picker" || e === "rulers" || e === "text-inspector" || e === "guides" || e === "distance" || e === "settings", T_ = (e) => `builtin.${e}`, E_ = (e, t) => {
15161
+ ], b_ = "mesurer-plugin-settings", x_ = 3, S_ = (e) => (e.startsWith("mesurer.") ? e.slice(8) : e).split(/[.-]/g).filter(Boolean).map((e) => e[0]?.toUpperCase() + e.slice(1)).join(" ") || e, C_ = (e) => "create" in e && typeof e.create == "function", w_ = (e) => e === "select" || e === "xray" || e === "color-picker" || e === "rulers" || e === "text-inspector" || e === "guides" || e === "distance" || e === "settings", T_ = (e) => `builtin.${e}`, E_ = (e, t) => {
15079
15162
  let n = t.toLowerCase().replaceAll("cmd", "meta").split("+").map((e) => e.trim()).filter(Boolean);
15080
15163
  if (!n.length) return !1;
15081
15164
  let r = n.at(-1), i = new Set(n.slice(0, -1)), a = i.has("mod"), o = i.has("meta"), s = i.has("ctrl") || i.has("control"), c = i.has("shift"), l = i.has("alt") || i.has("option");
@@ -15117,6 +15200,7 @@ function D_(e) {
15117
15200
  return {
15118
15201
  id: t.id,
15119
15202
  label: t.label ?? S_(t.id),
15203
+ description: t.description,
15120
15204
  enabled: n.has(t.id),
15121
15205
  busy: p.has(t.id),
15122
15206
  sections: a
@@ -15205,8 +15289,8 @@ function D_(e) {
15205
15289
  let e = L.localStorage.getItem(re);
15206
15290
  if (e) {
15207
15291
  let t = JSON.parse(e);
15208
- if (t?.version === x_) {
15209
- for (let [e, n] of Object.entries(t.enabled ?? {})) ie.set(e, n);
15292
+ if (t?.version === 1 || t?.version === 2 || t?.version === x_) {
15293
+ for (let [e, n] of Object.entries(t.enabled ?? {})) (t.version !== 2 || e !== "mesurer.codex") && ie.set(e, n);
15210
15294
  for (let [e, n] of Object.entries(t.state ?? {})) f.set(e, n);
15211
15295
  }
15212
15296
  }
@@ -18036,7 +18120,7 @@ function Hy(e) {
18036
18120
  }
18037
18121
  //#endregion
18038
18122
  //#region src/version.ts
18039
- var Uy = "0.2.0-beta.11", Wy = ap, Gy = op, Ky = () => ({
18123
+ var Uy = "0.2.0-beta.13", Wy = ap, Gy = op, Ky = () => ({
18040
18124
  ...$p(),
18041
18125
  version: Uy
18042
18126
  }), qy = (e, t) => e.left <= t.left + t.width && e.left + e.width >= t.left && e.top <= t.top + t.height && e.top + e.height >= t.top, Jy = (e) => {
@@ -18665,34 +18749,34 @@ function Fb(e, t, n = !0) {
18665
18749
  };
18666
18750
  }
18667
18751
  //#endregion
18668
- //#region src/codex-plugin.ts
18669
- var Ib = "mesurer.codex", Lb = "codex:v1", Rb = "http://127.0.0.1:47365", zb = 2e3, Bb = 750, Vb = 1800, Hb = 2e3, Ub = 12e4, Wb = 10, Gb = 5, Kb = [
18752
+ //#region src/plugins/codex/index.ts
18753
+ var Ib = "mesurer.codex", Lb = "codex:v1", Rb = 2e3, zb = 750, Bb = 1800, Vb = 2e3, Hb = 12e4, Ub = 10, Wb = 5, Gb = [
18670
18754
  "Implement the current human feedback from Mesurer in this project.",
18671
18755
  "Treat the rendered page as the source of truth, preserve unrelated Mesurer review state,",
18672
18756
  "and verify the affected UI in the live page with Mesurer before claiming completion."
18673
- ].join(" "), qb = {
18757
+ ].join(" "), Kb = {
18674
18758
  viewBox: "0 0 256 256",
18675
18759
  paths: ["M224,48,32,120l88,32,32,88Z M120,152l104-104"]
18676
- }, Jb = {
18760
+ }, qb = {
18677
18761
  viewBox: "0 0 256 256",
18678
18762
  paths: ["M72,32H184a8,8,0,0,1,0,16h-8v20.69a40,40,0,0,1-11.72,28.28L137.25,124l27.03,27.03A40,40,0,0,1,176,179.31V208h8a8,8,0,0,1,0,16H72a8,8,0,0,1,0-16h8V179.31a40,40,0,0,1,11.72-28.28L118.75,124,91.72,96.97A40,40,0,0,1,80,68.69V48H72a8,8,0,0,1,0-16Zm24,16V68.69a24,24,0,0,0,7.03,16.97L128,110.63l24.97-24.97A24,24,0,0,0,160,68.69V48Zm32,90.63-24.97,24.97A24,24,0,0,0,96,180.57V208h64V180.57a24,24,0,0,0-7.03-16.97Z"]
18679
- }, Yb = {
18763
+ }, Jb = {
18680
18764
  viewBox: "0 0 256 256",
18681
18765
  paths: ["M229.66,77.66l-128,128a8,8,0,0,1-11.32,0l-56-56a8,8,0,0,1,11.32-11.32L96,188.69,218.34,66.34a8,8,0,0,1,11.32,11.32Z"]
18682
- }, Xb = (e) => {
18766
+ }, Yb = () => {
18683
18767
  try {
18684
- let t = globalThis.location;
18685
- return t?.origin ? `mesurer-codex-ui:v1:${e}:${t.origin}${t.pathname}` : null;
18768
+ let e = globalThis.location;
18769
+ return e?.origin ? `mesurer-codex-ui:v2:${e.origin}${e.pathname}` : null;
18686
18770
  } catch {
18687
18771
  return null;
18688
18772
  }
18689
- }, Zb = (e) => {
18690
- let t = Xb(e);
18691
- if (!t) return null;
18773
+ }, Xb = () => {
18774
+ let e = Yb();
18775
+ if (!e) return null;
18692
18776
  try {
18693
- let e = globalThis.sessionStorage?.getItem(t);
18694
- if (!e) return null;
18695
- let n = JSON.parse(e);
18777
+ let t = globalThis.sessionStorage?.getItem(e);
18778
+ if (!t) return null;
18779
+ let n = JSON.parse(t);
18696
18780
  if (n.version !== 1) return null;
18697
18781
  let r = n.originThread?.trim() || null, i = n.selectedThread?.trim() || null, a = n.delivery;
18698
18782
  return {
@@ -18712,39 +18796,41 @@ var Ib = "mesurer.codex", Lb = "codex:v1", Rb = "http://127.0.0.1:47365", zb = 2
18712
18796
  } catch {
18713
18797
  return null;
18714
18798
  }
18715
- }, Qb = (e, t) => {
18716
- let n = Xb(e);
18717
- if (n) try {
18718
- globalThis.sessionStorage?.setItem(n, JSON.stringify(t));
18799
+ }, Zb = (e) => {
18800
+ let t = Yb();
18801
+ if (t) try {
18802
+ globalThis.sessionStorage?.setItem(t, JSON.stringify(e));
18719
18803
  } catch {}
18720
- }, $b = (e, t) => {
18721
- let n = e.endsWith("/") ? e : `${e}/`;
18722
- return new URL(t, n).toString();
18723
- }, ex = async (e, t, n) => {
18724
- let r = new AbortController(), i = setTimeout(() => r.abort(), 15e3);
18725
- try {
18726
- let i = await fetch($b(e, t), {
18727
- ...n,
18728
- signal: r.signal
18729
- }), a = await i.text(), o = {};
18730
- if (a) try {
18731
- o = JSON.parse(a);
18732
- } catch {
18733
- o = { error: a };
18734
- }
18735
- if (!i.ok || o.ok === !1) throw Error(o.error || `Mesurer Codex bridge returned HTTP ${i.status}.`);
18736
- return o;
18737
- } catch (t) {
18738
- throw t instanceof Error && t.name === "AbortError" ? Error("Mesurer Codex bridge timed out.") : t instanceof TypeError ? Error(`Mesurer Codex bridge is unavailable at ${e}. Start the local bridge before queueing feedback.`) : t;
18739
- } finally {
18740
- clearTimeout(i);
18741
- }
18742
- }, tx = (e) => ({
18804
+ }, Qb = async (e) => {
18805
+ let t = window.__MESURER_HOST__?.codexBridge;
18806
+ if (!t) throw Error("Codex Bridge is unavailable in this host.");
18807
+ let n = await t(e);
18808
+ if (n.ok === !1) throw Error(n.error ?? "Codex Bridge request failed.");
18809
+ return n;
18810
+ }, $b = (e) => {
18811
+ let t = e.runtime;
18812
+ return !t || ![
18813
+ "shared",
18814
+ "standalone",
18815
+ "desktop",
18816
+ "none"
18817
+ ].includes(t.source) || ![
18818
+ "shared-app-server",
18819
+ "desktop-queue",
18820
+ "private-stdio",
18821
+ "none"
18822
+ ].includes(t.transport) || t.reason !== null && t.reason !== "desktop-private-transport" && t.reason !== "runtime-not-found" ? null : {
18823
+ source: t.source,
18824
+ transport: t.transport,
18825
+ available: t.available === !0,
18826
+ reason: t.reason
18827
+ };
18828
+ }, ex = (e) => ({
18743
18829
  thread: e.thread?.trim() || null,
18744
18830
  threads: Array.isArray(e.threads) ? e.threads.filter((e) => e.trim().length > 0) : []
18745
- }), nx = (e) => {
18831
+ }), tx = (e) => {
18746
18832
  let t = e.deliveryId?.trim(), n = e.thread?.trim(), r = e.status;
18747
- if (!t || !n || !r) throw Error("Mesurer Codex bridge returned an invalid delivery state.");
18833
+ if (!t || !n || !r) throw Error("Codex Bridge returned an invalid delivery state.");
18748
18834
  let i = {
18749
18835
  id: t,
18750
18836
  thread: n,
@@ -18754,7 +18840,7 @@ var Ib = "mesurer.codex", Lb = "codex:v1", Rb = "http://127.0.0.1:47365", zb = 2
18754
18840
  updatedAt: Number.isFinite(e.updatedAt) ? Number(e.updatedAt) : 0
18755
18841
  };
18756
18842
  return e.queuedSubmissionId !== void 0 && (i.queuedSubmissionId = e.queuedSubmissionId?.trim() || null), e.dispatch !== void 0 && (i.dispatch = e.dispatch), e.dispatchError !== void 0 && (i.dispatchError = e.dispatchError?.trim() || null), i;
18757
- }, rx = (e) => ({
18843
+ }, nx = (e) => ({
18758
18844
  thread: e.thread?.trim() || null,
18759
18845
  threads: Array.isArray(e.threadDetails) ? e.threadDetails.flatMap((e) => {
18760
18846
  let t = e.id?.trim() ?? "";
@@ -18766,7 +18852,7 @@ var Ib = "mesurer.codex", Lb = "codex:v1", Rb = "http://127.0.0.1:47365", zb = 2
18766
18852
  }] : [];
18767
18853
  }) : [],
18768
18854
  hasMore: e.hasMore === !0
18769
- }), ix = async (e, t, n) => {
18855
+ }), rx = async (e, t, n) => {
18770
18856
  let r = t?.instruction?.trim() || n, i = await e.annotations(), a = t?.annotationIds, o = a ? a.flatMap((e) => {
18771
18857
  let t = i.find((t) => t.id === e);
18772
18858
  return t ? [t] : [];
@@ -18789,76 +18875,87 @@ var Ib = "mesurer.codex", Lb = "codex:v1", Rb = "http://127.0.0.1:47365", zb = 2
18789
18875
  ])
18790
18876
  ].join("\n").trimEnd()
18791
18877
  };
18792
- }, ax = (e) => e.length > 16 ? `${e.slice(0, 8)}…${e.slice(-4)}` : e, ox = (e, t = 42) => e.length > t ? `${e.slice(0, t - 1)}…` : e, sx = (e, t) => e instanceof Error && e.message === `Mesurer Codex bridge is unavailable at ${t}. Start the local bridge before queueing feedback.`;
18793
- function cx(e = {}) {
18794
- let t = e.endpoint ?? Rb, n = e.instruction?.trim() || Kb, r = e.ui ?? !0, i = e.clearCompletedAnnotations ?? !0;
18878
+ }, ix = (e) => e.length > 16 ? `${e.slice(0, 8)}…${e.slice(-4)}` : e, ax = (e, t = 42) => e.length > t ? `${e.slice(0, t - 1)}…` : e, ox = (e) => e instanceof Error && e.message === "Codex Bridge is unavailable in this host.";
18879
+ function sx(e = {}) {
18880
+ let t = e.instruction?.trim() || Gb, n = e.ui ?? !0, r = e.clearCompletedAnnotations ?? !0;
18795
18881
  return {
18796
18882
  id: Ib,
18797
18883
  version: Uy,
18798
18884
  requires: [vb],
18799
18885
  provides: [Lb],
18800
18886
  setup(e) {
18801
- let a = e.service.get(vb);
18802
- if (!a) throw Error("Mesurer Codex plugin requires context() from mesurer-solid/plugins.");
18803
- let o = r ? Zb(t) : null, s = "unknown", c = !1, l = o?.originThread ?? null, u = o?.selectedThread ?? o?.originThread ?? null, d = !1, f = null, p = [], m = [], h = !1, g = Gb, _, v = "", y = null, b = o?.delivery ? {
18804
- id: o.delivery.id,
18805
- thread: o.delivery.thread,
18806
- status: o.delivery.status,
18807
- annotationIds: o.delivery.annotationIds,
18808
- queuedSubmissionId: o.delivery.queuedSubmissionId ?? null,
18809
- dispatch: o.delivery.dispatch ?? null,
18810
- dispatchError: o.delivery.dispatchError ?? null
18811
- } : null, x = 0, S = 0, C = null, w = !1, T = async () => tx(await ex(t, "health")), E = async (e) => nx(await ex(t, `deliveries/${encodeURIComponent(e)}`)), D = async (e) => {
18887
+ let i = e.service.get(vb);
18888
+ if (!i) throw Error("Mesurer Codex plugin requires context() from mesurer-solid/plugins.");
18889
+ let a = n ? Xb() : null, o = "unknown", s = null, c = !1, l = a?.originThread ?? null, u = a?.selectedThread ?? a?.originThread ?? null, d = !1, f = null, p = [], m = [], h = !1, g = Wb, _, v = "", y = null, b = a?.delivery ? {
18890
+ id: a.delivery.id,
18891
+ thread: a.delivery.thread,
18892
+ status: a.delivery.status,
18893
+ annotationIds: a.delivery.annotationIds,
18894
+ queuedSubmissionId: a.delivery.queuedSubmissionId ?? null,
18895
+ dispatch: a.delivery.dispatch ?? null,
18896
+ dispatchError: a.delivery.dispatchError ?? null
18897
+ } : null, x = 0, S = 0, C = null, w = !1, T = async () => {
18898
+ let e = $b(await Qb({ action: "runtime" }));
18899
+ if (!e) throw Error("Codex Bridge returned an invalid runtime state.");
18900
+ return s = e, e;
18901
+ }, E = async () => {
18902
+ let e = await Qb({
18903
+ action: "health",
18904
+ thread: u ?? l ?? void 0
18905
+ });
18906
+ return s = $b(e) ?? s, ex(e);
18907
+ }, D = E, O = async (e) => tx(await Qb({
18908
+ action: "delivery",
18909
+ deliveryId: e
18910
+ })), k = async (e) => {
18812
18911
  if (!e.id || !e.thread) throw Error("Cannot restore a Codex delivery without its id and thread.");
18813
- let n = {
18912
+ let t = {
18913
+ action: "restore",
18814
18914
  deliveryId: e.id,
18815
18915
  thread: e.thread
18816
18916
  };
18817
- return e.queuedSubmissionId && (n.queuedSubmissionId = e.queuedSubmissionId), nx(await ex(t, "deliveries/restore", {
18818
- method: "POST",
18819
- headers: { "Content-Type": "application/json" },
18820
- body: JSON.stringify(n)
18821
- }));
18822
- }, O = async (e = {}) => {
18823
- let n = new URLSearchParams();
18824
- n.set("limit", String(e.limit ?? Wb));
18825
- let r = e.thread?.trim();
18826
- return r && n.set("thread", r), rx(await ex(t, `threads?${n.toString()}`));
18827
- }, k = () => u ?? l ?? (d ? null : f), A = () => {
18828
- if (!r) return;
18917
+ return e.queuedSubmissionId && (t.queuedSubmissionId = e.queuedSubmissionId), tx(await Qb(t));
18918
+ }, A = async (e = {}) => {
18919
+ let t = {
18920
+ action: "threads",
18921
+ limit: e.limit ?? Ub
18922
+ }, n = e.thread?.trim();
18923
+ return n && (t.thread = n), nx(await Qb(t));
18924
+ }, j = () => u ?? l ?? (d ? null : f), M = () => {
18925
+ if (!n) return;
18829
18926
  let e = b?.id && (b.status === "queued" || b.status === "working" || b.status === "interrupted") ? {
18830
18927
  id: b.id,
18831
- thread: b.thread ?? k() ?? "",
18928
+ thread: b.thread ?? j() ?? "",
18832
18929
  status: b.status,
18833
18930
  annotationIds: [...b.annotationIds],
18834
18931
  queuedSubmissionId: b.queuedSubmissionId,
18835
18932
  dispatch: b.dispatch,
18836
18933
  dispatchError: b.dispatchError
18837
18934
  } : null;
18838
- Qb(t, {
18935
+ Zb({
18839
18936
  version: 1,
18840
18937
  originThread: l,
18841
18938
  selectedThread: u,
18842
18939
  delivery: e?.thread ? e : null
18843
18940
  });
18844
- }, j = (e, t = !1) => {
18941
+ }, N = (e, t = !1) => {
18845
18942
  let n = e.trim();
18846
- n && ((t || !l) && (l = n), u = n, d = !1, A());
18847
- }, M = () => b !== null && [
18943
+ n && ((t || !l) && (l = n), u = n, d = !1, M());
18944
+ }, P = () => b !== null && [
18848
18945
  "queueing",
18849
18946
  "queued",
18850
18947
  "working",
18851
18948
  "completed"
18852
- ].includes(b.status), N = () => b?.status === "queued" && (b.dispatch === "desktop-send-uncertain" || b.dispatch === "desktop-wait-failed"), P = (e) => e === "queueing" ? "Queueing…" : e === "queued" ? "Queued" : e === "working" ? "Working…" : e === "completed" ? "Done" : e === "interrupted" ? "Interrupted" : "Failed", F = () => b ? b.status === "queueing" ? "Queueing to Codex…" : N() ? "Codex delivery blocked" : b.status === "queued" ? "Queued for Codex" : b.status === "working" ? "Codex working…" : b.status === "completed" ? "Codex finished" : b.status === "interrupted" ? "Codex interrupted" : "Queue failed" : null, I = () => b ? [
18949
+ ].includes(b.status), F = (e) => e === "queueing" ? "Queueing…" : e === "queued" ? "Queued" : e === "working" ? "Working…" : e === "completed" ? "Done" : e === "interrupted" ? "Interrupted" : "Failed", I = () => b ? b.status === "queueing" ? "Queueing to Codex…" : b.status === "queued" ? b.dispatch === "desktop-wake-failed" ? "Queued — open Codex" : "Queued for Codex" : b.status === "working" ? "Codex working…" : b.status === "completed" ? "Codex finished" : b.status === "interrupted" ? "Codex interrupted" : "Queue failed" : null, L = () => b ? [
18853
18950
  "queueing",
18854
18951
  "queued",
18855
18952
  "working"
18856
- ].includes(b.status) ? Jb : b.status === "completed" ? Yb : qb : qb, L = () => {
18953
+ ].includes(b.status) ? qb : b.status === "completed" ? Jb : Kb : Kb, R = () => {
18857
18954
  let e = [], t = /* @__PURE__ */ new Set(), n = (n) => {
18858
18955
  t.has(n.id) || (t.add(n.id), e.push(n));
18859
18956
  }, r = (e) => ({
18860
18957
  id: e,
18861
- title: `Codex ${ax(e)}`,
18958
+ title: `Codex ${ix(e)}`,
18862
18959
  updatedAt: null,
18863
18960
  connected: !0
18864
18961
  });
@@ -18868,96 +18965,94 @@ function cx(e = {}) {
18868
18965
  for (let e of m) n(e);
18869
18966
  for (let e of p) n(m.find((t) => t.id === e) ?? r(e));
18870
18967
  return e;
18871
- }, R = (e = !1) => Promise.resolve(), z = () => {
18872
- if (s !== "available") return [{
18873
- id: "codex.thread.connect",
18874
- label: s === "unavailable" ? "Retry Codex connection" : "Choose Codex thread…",
18875
- run: () => R(!0)
18876
- }];
18877
- let e = L(), t = e.slice(0, g), n = k(), r = t.map((e) => {
18878
- let t = e.id === l ? "Current · " : e.connected ? "Connected · " : "", r = b?.thread === e.id ? ` · ${N() ? "Blocked" : P(b.status)}` : "";
18968
+ }, z = (e = !1) => Promise.resolve(), B = () => {
18969
+ if (o !== "available") {
18970
+ let e = s?.source === "desktop" && s.reason === "desktop-private-transport";
18971
+ return [{
18972
+ id: "codex.thread.connect",
18973
+ label: o === "unavailable" ? e ? "Retry Codex Desktop" : "Retry Codex connection" : "Choose Codex thread…",
18974
+ run: () => z(!0)
18975
+ }];
18976
+ }
18977
+ let e = R(), t = e.slice(0, g), n = j(), r = t.map((e) => {
18978
+ let t = e.id === l ? "Current · " : e.connected ? "Loaded · " : "", r = b?.thread === e.id ? ` · ${F(b.status)}` : "";
18879
18979
  return {
18880
18980
  id: `codex.thread.${e.id}`,
18881
- label: `${t}${ox(e.title)}${r}`,
18981
+ label: `${t}${ax(e.title)}${r}`,
18882
18982
  checked: () => n === e.id,
18883
- disabled: () => M(),
18983
+ disabled: () => P(),
18884
18984
  run() {
18885
- M() || (j(e.id, !l), B());
18985
+ P() || (N(e.id, !l), V());
18886
18986
  }
18887
18987
  };
18888
18988
  });
18889
- return g < Wb && (e.length > g || h) && r.push({
18989
+ return g < Ub && (e.length > g || h) && r.push({
18890
18990
  id: "codex.thread.show-more",
18891
18991
  label: "Show 5 more…",
18892
18992
  run() {
18893
- g = Wb, B();
18993
+ g = Ub, V();
18894
18994
  }
18895
18995
  }), r;
18896
- }, B = () => {
18897
- if (!r || w) return;
18898
- let t = k(), n = z(), i = !M() && !d && s !== "unavailable" && (s === "unknown" || !!t), a = F() ?? (s === "unavailable" ? "Codex unavailable" : d || s === "available" && !t ? "Choose Codex thread" : "Queue to Codex"), o = JSON.stringify({
18899
- bridgeAvailability: s,
18996
+ }, V = () => {
18997
+ if (!n || w) return;
18998
+ let t = j(), r = B(), i = !P() && !d && o !== "unavailable" && (o === "unknown" || !!t), a = s?.source === "desktop" && s.reason === "desktop-private-transport", c = I() ?? (o === "unavailable" ? a ? "Codex Desktop not connected" : "Codex unavailable" : d || o === "available" && !t ? "Choose Codex thread" : "Queue to Codex"), l = JSON.stringify({
18999
+ bridgeAvailability: o,
19000
+ codexRuntime: s,
18900
19001
  routeNeedsSelection: d,
18901
19002
  target: t,
18902
- label: a,
19003
+ label: c,
18903
19004
  visibleThreadCount: g,
18904
19005
  activeDelivery: b,
18905
- items: n.map((e) => ({
19006
+ items: r.map((e) => ({
18906
19007
  id: e.id,
18907
19008
  label: e.label,
18908
19009
  checked: e.checked?.() ?? null,
18909
19010
  disabled: e.disabled?.() ?? !1
18910
19011
  }))
18911
19012
  });
18912
- o !== v && (v = o, _?.dispose(), _ = e.tool.register({
19013
+ l !== v && (v = l, _?.dispose(), _ = e.tool.register({
18913
19014
  id: "codex.send",
18914
- label: a,
19015
+ label: c,
18915
19016
  command: "codex.queue",
18916
19017
  order: 73,
18917
- icon: I(),
19018
+ icon: L(),
18918
19019
  disabled: () => !i,
18919
- menu: n.length ? {
19020
+ menu: r.length ? {
18920
19021
  label: "Codex destination",
18921
- items: n
19022
+ items: r
18922
19023
  } : void 0
18923
19024
  }));
18924
- }, V = async () => {
18925
- if (s !== "available") return;
18926
- let e = l && p.includes(l) ? l : f;
18927
- try {
18928
- let t = await O({
18929
- limit: Wb,
18930
- thread: e ?? void 0
18931
- });
18932
- m = t.threads, h = t.hasMore;
18933
- } catch {
18934
- m = p.map((e) => ({
18935
- id: e,
18936
- title: `Codex ${ax(e)}`,
18937
- updatedAt: null,
18938
- connected: !0
18939
- })), h = !1;
18940
- }
19025
+ }, H = async (e) => {
19026
+ if (o !== "available") return;
19027
+ let t = await A({
19028
+ limit: Ub,
19029
+ thread: e ?? void 0
19030
+ });
19031
+ m = t.threads, h = t.hasMore, p = t.threads.filter((e) => e.connected).map((e) => e.id), f = t.thread;
18941
19032
  };
18942
- R = (e = !1) => w || s === "unknown" && !e ? Promise.resolve() : y || (y = (async () => {
19033
+ z = (e = !1) => w || o === "unknown" && !e ? Promise.resolve() : y || (y = (async () => {
18943
19034
  try {
18944
- let e = await T(), t = e.thread !== f;
18945
- s = "available", c = !0, f = e.thread, p = e.threads;
18946
- let n = u ?? l;
18947
- n ? d = !e.threads.includes(n) : e.threads.length === 1 ? j(e.threads[0], !0) : d = (e.threads.length, !0), (t || m.length === 0 || d) && await V(), d && n && m.some((e) => e.id === n) && (d = !1, A());
19035
+ let e = await D();
19036
+ o = "available", c = !0, f = e.thread, await H(u ?? l ?? e.thread);
19037
+ let t = u ?? l;
19038
+ t && p.includes(t) ? d = !1 : p.length === 1 ? N(p[0], !0) : d = !0, !d && t && M();
18948
19039
  } catch (e) {
18949
- throw s = "unavailable", e;
19040
+ throw o = "unavailable", s = await T().catch(() => s), e;
18950
19041
  } finally {
18951
- y = null, B();
19042
+ y = null, V();
18952
19043
  }
18953
19044
  })(), y);
18954
- let H = () => {
19045
+ let U = () => {
18955
19046
  x &&= (globalThis.clearTimeout(x), 0), S &&= (globalThis.clearTimeout(S), 0);
18956
- }, U = () => {
19047
+ }, W = () => {
19048
+ S && globalThis.clearTimeout(S), S = globalThis.setTimeout(() => {
19049
+ S = 0, b?.status === "completed" && (b = null, M(), V());
19050
+ }, Bb);
19051
+ }, ee = () => {
18957
19052
  S && globalThis.clearTimeout(S), S = globalThis.setTimeout(() => {
18958
- S = 0, b?.status === "completed" && (b = null, A(), B());
18959
- }, Vb);
18960
- }, W = async (e) => {
19053
+ S = 0, !(b?.status !== "queued" || b.dispatch !== "desktop-opened" && b.dispatch !== "desktop-wake-failed") && (b = null, M(), V());
19054
+ }, Bb);
19055
+ }, te = async (e) => {
18961
19056
  if (!(!b || b.id !== e.id)) {
18962
19057
  if (b = {
18963
19058
  ...b,
@@ -18966,104 +19061,106 @@ function cx(e = {}) {
18966
19061
  queuedSubmissionId: e.queuedSubmissionId ?? b.queuedSubmissionId,
18967
19062
  dispatch: e.dispatch ?? b.dispatch,
18968
19063
  dispatchError: e.dispatchError ?? b.dispatchError
18969
- }, A(), e.status === "completed") {
18970
- if (i) for (let e of b.annotationIds) await a.removeAnnotation(e);
18971
- A(), B(), U();
19064
+ }, M(), e.status === "queued" && (e.dispatch === "desktop-opened" || e.dispatch === "desktop-wake-failed")) {
19065
+ V(), ee();
19066
+ return;
19067
+ }
19068
+ if (e.status === "completed") {
19069
+ if (r) for (let e of b.annotationIds) await i.removeAnnotation(e);
19070
+ M(), V(), W();
18972
19071
  return;
18973
19072
  }
18974
19073
  if (e.status === "interrupted") {
18975
- A(), B();
19074
+ M(), V();
18976
19075
  let t = e.updatedAt > 0 ? e.updatedAt : Date.now();
18977
- Date.now() - t < Ub && (x = globalThis.setTimeout(() => {
18978
- x = 0, ee(e.id);
18979
- }, Hb));
19076
+ Date.now() - t < Hb && (x = globalThis.setTimeout(() => {
19077
+ x = 0, ne(e.id);
19078
+ }, Vb));
18980
19079
  return;
18981
19080
  }
18982
- B(), x = globalThis.setTimeout(() => {
18983
- x = 0, ee(e.id);
18984
- }, Bb);
19081
+ V(), x = globalThis.setTimeout(() => {
19082
+ x = 0, ne(e.id);
19083
+ }, zb);
18985
19084
  }
18986
- }, ee = async (e) => {
19085
+ }, ne = async (e) => {
18987
19086
  if (!(w || b?.id !== e)) try {
18988
- await W(await E(e));
18989
- } catch (n) {
19087
+ await te(await O(e));
19088
+ } catch (t) {
18990
19089
  if (b?.id !== e) return;
18991
- let r = n;
19090
+ let n = t;
18992
19091
  if (b.status === "queued" && b.thread) try {
18993
- s !== "available" && await R(!0);
18994
- let e = await D(b);
18995
- await W(e);
19092
+ o !== "available" && await z(!0);
19093
+ let e = await k(b);
19094
+ await te(e);
18996
19095
  return;
18997
19096
  } catch (e) {
18998
- r = e;
19097
+ n = e;
18999
19098
  }
19000
19099
  if (b?.id !== e) return;
19001
19100
  if (b.status === "interrupted") {
19002
- B();
19101
+ V();
19003
19102
  return;
19004
19103
  }
19005
19104
  b = {
19006
19105
  ...b,
19007
19106
  status: "failed"
19008
- }, A(), sx(r, t) && (s = "unavailable"), B();
19107
+ }, M(), ox(n) && (o = "unavailable"), V();
19009
19108
  }
19010
- }, te = {
19011
- health: T,
19012
- listThreads: O,
19013
- delivery: E,
19109
+ }, re = {
19110
+ health: E,
19111
+ listThreads: A,
19112
+ delivery: O,
19014
19113
  async useThread(e) {
19015
- let n = e.trim();
19016
- if (!n) throw Error("Codex thread must be a non-empty string.");
19017
- let r = tx(await ex(t, "target", {
19018
- method: "POST",
19019
- headers: { "Content-Type": "application/json" },
19020
- body: JSON.stringify({ thread: n })
19021
- }));
19022
- return j(n, !l), f = r.thread, p = r.threads, s = "available", c = !0, B(), r;
19114
+ let t = e.trim();
19115
+ if (!t) throw Error("Codex thread must be a non-empty string.");
19116
+ let n = await Qb({
19117
+ action: "target",
19118
+ thread: t
19119
+ }), r = ex(n);
19120
+ return s = $b(n) ?? s, N(t, !l), f = r.thread, p = r.threads, o = "available", c = !0, V(), r;
19023
19121
  },
19024
19122
  async queue(e) {
19025
- let i = await ix(a, e, n), o = e?.thread?.trim(), c = o || (r ? k() : null);
19026
- if (r && !o && (d || !c)) throw Error("Choose a Codex thread before queueing feedback.");
19027
- let l = { message: i.message };
19028
- c && (l.thread = c);
19123
+ let r = await rx(i, e, t), a = e?.thread?.trim(), s = a || (n ? j() : null);
19124
+ if (n && !a && (d || !s)) throw Error("Choose a Codex thread before queueing feedback.");
19125
+ let c = { message: r.message };
19126
+ s && (c.thread = s);
19029
19127
  try {
19030
- let e = await ex(t, "send", {
19031
- method: "POST",
19032
- headers: { "Content-Type": "application/json" },
19033
- body: JSON.stringify(l)
19034
- }), n = e.thread?.trim();
19035
- if (!n) throw Error("Mesurer Codex bridge did not report the destination thread.");
19036
- let r = {
19037
- thread: n,
19128
+ let e = await Qb({
19129
+ action: "queue",
19130
+ ...c
19131
+ }), t = e.thread?.trim();
19132
+ if (!t) throw Error("Codex Bridge did not report the destination thread.");
19133
+ let n = {
19134
+ thread: t,
19038
19135
  output: e.output ?? "",
19039
19136
  delivery: "queued",
19040
19137
  deliveryId: e.deliveryId?.trim() || null,
19041
19138
  status: e.status ?? "queued",
19042
- annotationIds: i.annotationIds
19139
+ annotationIds: r.annotationIds
19043
19140
  };
19044
- return e.queuedSubmissionId !== void 0 && (r.queuedSubmissionId = e.queuedSubmissionId?.trim() || null), e.dispatch !== void 0 && (r.dispatch = e.dispatch), e.dispatchError !== void 0 && (r.dispatchError = e.dispatchError?.trim() || null), r;
19141
+ return e.queuedSubmissionId !== void 0 && (n.queuedSubmissionId = e.queuedSubmissionId?.trim() || null), e.dispatch !== void 0 && (n.dispatch = e.dispatch), e.dispatchError !== void 0 && (n.dispatchError = e.dispatchError?.trim() || null), n;
19045
19142
  } catch (e) {
19046
- throw r && sx(e, t) && (s = "unavailable", B()), e;
19143
+ throw n && ox(e) && (o = "unavailable", V()), e;
19047
19144
  }
19048
19145
  },
19049
19146
  send(e) {
19050
- return te.queue(e);
19147
+ return re.queue(e);
19051
19148
  }
19052
19149
  };
19053
- e.service.provide(Lb, te);
19054
- let ne = async () => {
19055
- if (!(C || M())) return H(), b = {
19150
+ e.service.provide(Lb, re);
19151
+ let ie = async () => {
19152
+ if (!(C || P())) return U(), b = {
19056
19153
  id: null,
19057
- thread: k(),
19154
+ thread: j(),
19058
19155
  status: "queueing",
19059
19156
  annotationIds: [],
19060
19157
  queuedSubmissionId: null,
19061
19158
  dispatch: null,
19062
19159
  dispatchError: null
19063
- }, B(), C = (async () => {
19160
+ }, V(), C = (async () => {
19064
19161
  try {
19065
- r && s !== "available" && await R(!0);
19066
- let e = await te.queue();
19162
+ n && o !== "available" && await z(!0);
19163
+ let e = await re.queue();
19067
19164
  b = {
19068
19165
  id: e.deliveryId,
19069
19166
  thread: e.thread,
@@ -19072,7 +19169,7 @@ function cx(e = {}) {
19072
19169
  queuedSubmissionId: e.queuedSubmissionId ?? null,
19073
19170
  dispatch: e.dispatch ?? null,
19074
19171
  dispatchError: e.dispatchError ?? null
19075
- }, j(e.thread, !l), A(), B(), console.info(`[Mesurer] Queued feedback for Codex thread ${e.thread}.`), e.deliveryId ? e.status === "completed" || e.status === "interrupted" ? await W({
19172
+ }, N(e.thread, !l), M(), V(), console.info(`[Mesurer] Queued feedback for Codex thread ${e.thread}.`), e.deliveryId ? e.status === "completed" || e.status === "interrupted" ? await te({
19076
19173
  id: e.deliveryId,
19077
19174
  thread: e.thread,
19078
19175
  status: e.status,
@@ -19080,12 +19177,12 @@ function cx(e = {}) {
19080
19177
  createdAt: 0,
19081
19178
  updatedAt: 0
19082
19179
  }) : x = globalThis.setTimeout(() => {
19083
- x = 0, ee(e.deliveryId);
19084
- }, Bb) : S = globalThis.setTimeout(() => {
19085
- S = 0, b?.id === null && b?.status === "queued" && (b = null, A(), B());
19086
- }, Vb);
19180
+ x = 0, ne(e.deliveryId);
19181
+ }, zb) : S = globalThis.setTimeout(() => {
19182
+ S = 0, b?.id === null && b?.status === "queued" && (b = null, M(), V());
19183
+ }, Bb);
19087
19184
  } catch (e) {
19088
- b = null, A(), B();
19185
+ b = null, M(), V();
19089
19186
  let t = e instanceof Error ? e.message : String(e);
19090
19187
  throw console.error(`[Mesurer] Failed to queue feedback for Codex: ${t}`), e;
19091
19188
  } finally {
@@ -19093,15 +19190,15 @@ function cx(e = {}) {
19093
19190
  }
19094
19191
  })(), C;
19095
19192
  };
19096
- if (e.command.register("codex.queue", ne), e.command.register("codex.send", ne), r) {
19097
- B(), b?.id && (c = !0, x = globalThis.setTimeout(() => {
19098
- x = 0, b?.id && ee(b.id);
19193
+ if (e.command.register("codex.queue", ie), e.command.register("codex.send", ie), n) {
19194
+ V(), window.__MESURER_HOST__?.codexBridge && z(!0).catch(() => void 0), b?.id && (c = !0, x = globalThis.setTimeout(() => {
19195
+ x = 0, b?.id && ne(b.id);
19099
19196
  }, 0));
19100
19197
  let t = globalThis.setInterval(() => {
19101
- c && R().catch(() => void 0);
19102
- }, zb);
19198
+ c && z().catch(() => void 0);
19199
+ }, Rb);
19103
19200
  e.lifecycle.onDispose(() => {
19104
- w = !0, H(), globalThis.clearInterval(t), _?.dispose(), _ = void 0;
19201
+ w = !0, U(), globalThis.clearInterval(t), _?.dispose(), _ = void 0;
19105
19202
  });
19106
19203
  }
19107
19204
  }
@@ -19109,7 +19206,7 @@ function cx(e = {}) {
19109
19206
  }
19110
19207
  //#endregion
19111
19208
  //#region src/plugin-catalog.ts
19112
- var lx = [
19209
+ var cx = [
19113
19210
  {
19114
19211
  id: _b,
19115
19212
  label: "Context",
@@ -19145,17 +19242,18 @@ var lx = [
19145
19242
  {
19146
19243
  id: Ib,
19147
19244
  label: "Codex",
19245
+ description: "Connects Mesurer to your open Codex threads on this computer.",
19148
19246
  order: 45,
19149
- create: cx
19247
+ create: sx
19150
19248
  }
19151
- ], ux = (e) => {
19152
- let t = e !== void 0, n = new Map((e ?? []).map((e) => [e.id, e])), r = new Set(lx.map((e) => e.id)), i = lx.map((e) => {
19249
+ ], lx = (e) => {
19250
+ let t = e !== void 0, n = new Map((e ?? []).map((e) => [e.id, e])), r = new Set(cx.map((e) => e.id)), i = cx.map((e) => {
19153
19251
  let r = n.get(e.id);
19154
19252
  return {
19155
19253
  ...e,
19156
19254
  settingsIds: e.settingsIds ? [...e.settingsIds] : void 0,
19157
19255
  hiddenSettingsControlIds: e.hiddenSettingsControlIds ? [...e.hiddenSettingsControlIds] : void 0,
19158
- enabled: !t || !!r,
19256
+ enabled: t ? !!r : e.enabled !== !1,
19159
19257
  create: r ? () => r : e.create
19160
19258
  };
19161
19259
  });
@@ -19166,7 +19264,7 @@ var lx = [
19166
19264
  create: () => n
19167
19265
  });
19168
19266
  return i;
19169
- }, dx = {
19267
+ }, ux = {
19170
19268
  select: "select",
19171
19269
  xray: "xray",
19172
19270
  colorPicker: "color-picker",
@@ -19176,7 +19274,7 @@ var lx = [
19176
19274
  distance: "distance",
19177
19275
  settings: "settings"
19178
19276
  };
19179
- function fx(e = {}) {
19277
+ function dx(e = {}) {
19180
19278
  if (!("document" in globalThis)) throw Error("mountMesurer() requires a browser or Electron renderer document.");
19181
19279
  let { target: t = document.body, isolate: n = !0, shadowMode: r = "open", topLayer: i = !0, agent: a = !1, signal: o, onPluginHost: s, onPluginsReady: c, plugins: l, excludeBuiltins: u, excludePlugins: d, ...f } = e;
19182
19280
  if (o?.aborted) throw o.reason ?? new DOMException("Mesurer mount aborted.", "AbortError");
@@ -19253,8 +19351,8 @@ function fx(e = {}) {
19253
19351
  }), se = {
19254
19352
  ...f,
19255
19353
  version: Uy,
19256
- plugins: ux(l),
19257
- excludePlugins: u ? u.map((e) => dx[e]) : [...d ?? []]
19354
+ plugins: lx(l),
19355
+ excludePlugins: u ? u.map((e) => ux[e]) : [...d ?? []]
19258
19356
  }, ce = _i(() => Rr(D_, gi(se, {
19259
19357
  portalTarget: y,
19260
19358
  pageTarget: t,
@@ -19325,20 +19423,20 @@ function fx(e = {}) {
19325
19423
  }
19326
19424
  //#endregion
19327
19425
  //#region src/inject.ts
19328
- var { target: px, globalName: mx = "__MESURER__", reuseExisting: hx = !0, recoverDisconnected: gx = !1, ..._x } = globalThis.__MESURER_CONFIG__ ?? {}, vx = globalThis.__MESURER_INSTANCE__, yx = hx && vx?.element.isConnected ? vx : void 0;
19329
- function bx() {
19330
- let e = px ? document.querySelector(px) : document.body;
19331
- if (!e) throw Error(`Mesurer injection target not found: ${px}`);
19332
- return globalThis.__MESURER_INSTANCE__?.dispose(), fx({
19333
- ..._x,
19426
+ var { target: fx, globalName: px = "__MESURER__", reuseExisting: mx = !0, recoverDisconnected: hx = !1, ...gx } = globalThis.__MESURER_CONFIG__ ?? {}, _x = globalThis.__MESURER_INSTANCE__, vx = mx && _x?.element.isConnected ? _x : void 0;
19427
+ function yx() {
19428
+ let e = fx ? document.querySelector(fx) : document.body;
19429
+ if (!e) throw Error(`Mesurer injection target not found: ${fx}`);
19430
+ return globalThis.__MESURER_INSTANCE__?.dispose(), dx({
19431
+ ...gx,
19334
19432
  target: e,
19335
19433
  agent: {
19336
- globalName: mx,
19434
+ globalName: px,
19337
19435
  root: document
19338
19436
  }
19339
19437
  });
19340
19438
  }
19341
- var xx = (e) => {
19439
+ var bx = (e) => {
19342
19440
  globalThis.__MESURER_INJECT_RECOVERY__?.stop();
19343
19441
  let t = !1, n = !1, r = () => {
19344
19442
  if (n = !1, t || globalThis.__MESURER_INSTANCE__?.element.isConnected) return;
@@ -19357,7 +19455,7 @@ var xx = (e) => {
19357
19455
  }), globalThis.__MESURER_INJECT_RECOVERY__ = { stop() {
19358
19456
  t = !0, i.disconnect();
19359
19457
  } };
19360
- }, Sx = yx ?? bx();
19361
- globalThis.__MESURER_INSTANCE__ = Sx, globalThis.__MESURER_INJECT_RECOVERY__?.stop(), globalThis.__MESURER_INJECT_RECOVERY__ = void 0, gx && xx(bx), await Sx.ready;
19458
+ }, xx = vx ?? yx();
19459
+ globalThis.__MESURER_INSTANCE__ = xx, globalThis.__MESURER_INJECT_RECOVERY__?.stop(), globalThis.__MESURER_INJECT_RECOVERY__ = void 0, hx && bx(yx), await xx.ready;
19362
19460
  //#endregion
19363
- export { Sx as mesurer };
19461
+ export { xx as mesurer };