mesurer 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,3 +1,14 @@
1
+ import {
2
+ correctWebmDuration,
3
+ encodeGifClip,
4
+ isFullClipExport,
5
+ readBlobVideoDuration,
6
+ reencodeVideoClip,
7
+ requestDisplayMediaStream,
8
+ resolveRecordingDuration,
9
+ seekVideoElement
10
+ } from "./chunk-DBVWPZ7G.js";
11
+
1
12
  // runtime/style-inject.ts
2
13
  var MESURER_STYLE_ID = "mesurer-styles";
3
14
  var injectedTargets = /* @__PURE__ */ new WeakSet();
@@ -48,7 +59,7 @@ function ensureMesurerStyles(cssText, target) {
48
59
  }
49
60
 
50
61
  // styles.generated.ts
51
- var MESURER_STYLES = '/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--msr-font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--msr-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--msr-color-red-50:oklch(97.1% .013 17.38);--msr-color-red-200:oklch(88.5% .062 18.334);--msr-color-red-600:oklch(57.7% .245 27.325);--msr-color-red-700:oklch(50.5% .213 27.518);--msr-color-black:#000;--msr-color-white:#fff;--msr-spacing:.25rem;--msr-text-xs:.75rem;--msr-text-xs--line-height:calc(1 / .75);--msr-text-sm:.875rem;--msr-text-sm--line-height:calc(1.25 / .875);--msr-font-weight-normal:400;--msr-font-weight-medium:500;--msr-font-weight-semibold:600;--msr-radius-sm:.25rem;--msr-radius-md:.375rem;--msr-radius-lg:.5rem;--msr-radius-xl:.75rem;--msr-ease-out:cubic-bezier(0, 0, .2, 1);--msr-animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--msr-aspect-video:16 / 9;--msr-default-transition-duration:.15s;--msr-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--msr-default-font-family:var(--msr-font-sans);--msr-default-mono-font-family:var(--msr-font-mono);--msr-radius-control:5px;--msr-radius-wide-card:13px;--msr-shadow-toolbar:drop-shadow(0 0 .4px #00000038) drop-shadow(0 6px 18px #00000008) drop-shadow(0 3px 9px #0000000f) drop-shadow(0 1px 1px #0000000f);--msr-shadow-floating:0 0 0 .4px #00000038, 0 6px 18px #00000008, 0 3px 9px #0000000f, 0 1px 1px #0000000f;--msr-color-ink-50:#f8fafc;--msr-color-ink-100:#f1f5f9;--msr-color-ink-200:#e2e8f0;--msr-color-ink-300:#cbd5e1;--msr-color-ink-500:#64748b;--msr-color-ink-700:#334155;--msr-color-ink-900:#18181b}}@layer base{.mesurer-root{font-family:var(--msr-font-sans);font-size:12px;line-height:1.5}.mesurer-root button,.mesurer-root input,.mesurer-root select,.mesurer-root textarea{font-family:inherit;font-size:inherit;line-height:inherit}.mesurer-root input[type=search]::-webkit-search-cancel-button{appearance:none;display:none}.mesurer-root input[type=search]::-webkit-search-decoration{appearance:none;display:none}.mesurer-root input[type=search]::-moz-search-clear{appearance:none;display:none}.mesurer-root input[type=search]::-ms-clear{appearance:none;display:none}:where(.mesurer-root,.mesurer-root *){--tw-border-style:solid;--tw-outline-style:solid;--tw-shadow:0 0 #0000;--tw-inset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;border:0 solid}.mesurer-root button,.mesurer-root input,.mesurer-root select,.mesurer-root textarea{appearance:none;font:inherit;color:inherit;letter-spacing:inherit;background-color:#0000;padding:0}}@layer components;@layer utilities{.msr\\:pointer-events-auto{pointer-events:auto}.msr\\:pointer-events-none{pointer-events:none}.msr\\:absolute{position:absolute}.msr\\:fixed{position:fixed}.msr\\:relative{position:relative}.msr\\:inset-0{inset:calc(var(--msr-spacing) * 0)}.msr\\:inset-x-0{inset-inline:calc(var(--msr-spacing) * 0)}.msr\\:inset-y-0{inset-block:calc(var(--msr-spacing) * 0)}.msr\\:top-0{top:calc(var(--msr-spacing) * 0)}.msr\\:top-0\\.5{top:calc(var(--msr-spacing) * .5)}.msr\\:top-1\\.5{top:calc(var(--msr-spacing) * 1.5)}.msr\\:top-1\\/2{top:50%}.msr\\:top-1\\/3{top:33.3333%}.msr\\:top-2\\/3{top:66.6667%}.msr\\:top-9{top:calc(var(--msr-spacing) * 9)}.msr\\:top-\\[18px\\]{top:18px}.msr\\:top-full{top:100%}.msr\\:right-0{right:calc(var(--msr-spacing) * 0)}.msr\\:right-1{right:calc(var(--msr-spacing) * 1)}.msr\\:right-1\\.5{right:calc(var(--msr-spacing) * 1.5)}.msr\\:right-2{right:calc(var(--msr-spacing) * 2)}.msr\\:right-\\[8px\\]{right:8px}.msr\\:bottom-0{bottom:calc(var(--msr-spacing) * 0)}.msr\\:bottom-1\\.5{bottom:calc(var(--msr-spacing) * 1.5)}.msr\\:bottom-4{bottom:calc(var(--msr-spacing) * 4)}.msr\\:bottom-full{bottom:100%}.msr\\:left-0{left:calc(var(--msr-spacing) * 0)}.msr\\:left-1\\.5{left:calc(var(--msr-spacing) * 1.5)}.msr\\:left-1\\/2{left:50%}.msr\\:left-1\\/3{left:33.3333%}.msr\\:left-2\\/3{left:66.6667%}.msr\\:left-\\[8px\\]{left:8px}.msr\\:left-\\[18px\\]{left:18px}.msr\\:left-full{left:100%}.msr\\:z-10{z-index:10}.msr\\:z-20{z-index:20}.msr\\:z-30{z-index:30}.msr\\:z-40{z-index:40}.msr\\:z-50{z-index:50}.msr\\:z-80{z-index:80}.msr\\:z-100{z-index:100}.msr\\:z-\\[1\\]{z-index:1}.msr\\:z-\\[2\\]{z-index:2}.msr\\:z-\\[25\\]{z-index:25}.msr\\:z-\\[60\\]{z-index:60}.msr\\:z-\\[70\\]{z-index:70}.msr\\:z-\\[71\\]{z-index:71}.msr\\:z-\\[80\\]{z-index:80}.msr\\:z-\\[85\\]{z-index:85}.msr\\:z-\\[90\\]{z-index:90}.msr\\:z-\\[95\\]{z-index:95}.msr\\:z-\\[100\\]{z-index:100}.msr\\:z-\\[101\\]{z-index:101}.msr\\:col-span-2{grid-column:span 2/span 2}.msr\\:m-0{margin:calc(var(--msr-spacing) * 0)}.msr\\:mx-auto{margin-inline:auto}.msr\\:my-1{margin-block:calc(var(--msr-spacing) * 1)}.msr\\:mt-0\\.5{margin-top:calc(var(--msr-spacing) * .5)}.msr\\:mt-1{margin-top:calc(var(--msr-spacing) * 1)}.msr\\:mt-2{margin-top:calc(var(--msr-spacing) * 2)}.msr\\:mt-3{margin-top:calc(var(--msr-spacing) * 3)}.msr\\:mt-4{margin-top:calc(var(--msr-spacing) * 4)}.msr\\:mb-1{margin-bottom:calc(var(--msr-spacing) * 1)}.msr\\:mb-2{margin-bottom:calc(var(--msr-spacing) * 2)}.msr\\:-ml-1{margin-left:calc(var(--msr-spacing) * -1)}.msr\\:ml-1{margin-left:calc(var(--msr-spacing) * 1)}.msr\\:ml-auto{margin-left:auto}.msr\\:box-border{box-sizing:border-box}.msr\\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.msr\\:block{display:block}.msr\\:flex{display:flex}.msr\\:grid{display:grid}.msr\\:inline-flex{display:inline-flex}.msr\\:size-1\\.5{width:calc(var(--msr-spacing) * 1.5);height:calc(var(--msr-spacing) * 1.5)}.msr\\:size-2{width:calc(var(--msr-spacing) * 2);height:calc(var(--msr-spacing) * 2)}.msr\\:size-3{width:calc(var(--msr-spacing) * 3);height:calc(var(--msr-spacing) * 3)}.msr\\:size-4{width:calc(var(--msr-spacing) * 4);height:calc(var(--msr-spacing) * 4)}.msr\\:size-5{width:calc(var(--msr-spacing) * 5);height:calc(var(--msr-spacing) * 5)}.msr\\:size-6{width:calc(var(--msr-spacing) * 6);height:calc(var(--msr-spacing) * 6)}.msr\\:size-7{width:calc(var(--msr-spacing) * 7);height:calc(var(--msr-spacing) * 7)}.msr\\:size-8{width:calc(var(--msr-spacing) * 8);height:calc(var(--msr-spacing) * 8)}.msr\\:size-\\[10px\\]{width:10px;height:10px}.msr\\:size-\\[18px\\]{width:18px;height:18px}.msr\\:size-full{width:100%;height:100%}.msr\\:h-0{height:calc(var(--msr-spacing) * 0)}.msr\\:h-1\\.5{height:calc(var(--msr-spacing) * 1.5)}.msr\\:h-2{height:calc(var(--msr-spacing) * 2)}.msr\\:h-2\\.5{height:calc(var(--msr-spacing) * 2.5)}.msr\\:h-3{height:calc(var(--msr-spacing) * 3)}.msr\\:h-5{height:calc(var(--msr-spacing) * 5)}.msr\\:h-6{height:calc(var(--msr-spacing) * 6)}.msr\\:h-7{height:calc(var(--msr-spacing) * 7)}.msr\\:h-8{height:calc(var(--msr-spacing) * 8)}.msr\\:h-\\[3px\\]{height:3px}.msr\\:h-\\[14px\\]{height:14px}.msr\\:h-auto{height:auto}.msr\\:h-full{height:100%}.msr\\:h-max{height:max-content}.msr\\:h-px{height:1px}.msr\\:max-h-32{max-height:calc(var(--msr-spacing) * 32)}.msr\\:max-h-36{max-height:calc(var(--msr-spacing) * 36)}.msr\\:max-h-48{max-height:calc(var(--msr-spacing) * 48)}.msr\\:max-h-\\[28rem\\]{max-height:28rem}.msr\\:max-h-\\[120px\\]{max-height:120px}.msr\\:max-h-full{max-height:100%}.msr\\:min-h-0{min-height:calc(var(--msr-spacing) * 0)}.msr\\:min-h-6{min-height:calc(var(--msr-spacing) * 6)}.msr\\:min-h-8{min-height:calc(var(--msr-spacing) * 8)}.msr\\:min-h-\\[4\\.5rem\\]{min-height:4.5rem}.msr\\:w-0{width:calc(var(--msr-spacing) * 0)}.msr\\:w-0\\.5{width:calc(var(--msr-spacing) * .5)}.msr\\:w-4{width:calc(var(--msr-spacing) * 4)}.msr\\:w-5{width:calc(var(--msr-spacing) * 5)}.msr\\:w-6{width:calc(var(--msr-spacing) * 6)}.msr\\:w-8{width:calc(var(--msr-spacing) * 8)}.msr\\:w-9{width:calc(var(--msr-spacing) * 9)}.msr\\:w-12{width:calc(var(--msr-spacing) * 12)}.msr\\:w-32{width:calc(var(--msr-spacing) * 32)}.msr\\:w-40{width:calc(var(--msr-spacing) * 40)}.msr\\:w-44{width:calc(var(--msr-spacing) * 44)}.msr\\:w-48{width:calc(var(--msr-spacing) * 48)}.msr\\:w-52{width:calc(var(--msr-spacing) * 52)}.msr\\:w-60{width:calc(var(--msr-spacing) * 60)}.msr\\:w-64{width:calc(var(--msr-spacing) * 64)}.msr\\:w-72{width:calc(var(--msr-spacing) * 72)}.msr\\:w-\\[18px\\]{width:18px}.msr\\:w-\\[22rem\\]{width:22rem}.msr\\:w-\\[26px\\]{width:26px}.msr\\:w-\\[36rem\\]{width:36rem}.msr\\:w-\\[220px\\]{width:220px}.msr\\:w-auto{width:auto}.msr\\:w-full{width:100%}.msr\\:w-max{width:max-content}.msr\\:w-px{width:1px}.msr\\:max-w-\\[180px\\]{max-width:180px}.msr\\:max-w-\\[calc\\(100vw-16px\\)\\]{max-width:calc(100vw - 16px)}.msr\\:max-w-\\[calc\\(100vw-24px\\)\\]{max-width:calc(100vw - 24px)}.msr\\:max-w-\\[min\\(100vw-16px\\,15rem\\)\\]{max-width:min(100vw - 16px,15rem)}.msr\\:max-w-\\[min\\(200px\\,calc\\(100vw-24px\\)\\)\\]{max-width:min(200px,100vw - 24px)}.msr\\:max-w-\\[min\\(240px\\,calc\\(100vw-16px\\)\\)\\]{max-width:min(240px,100vw - 16px)}.msr\\:max-w-full{max-width:100%}.msr\\:min-w-0{min-width:calc(var(--msr-spacing) * 0)}.msr\\:min-w-32{min-width:calc(var(--msr-spacing) * 32)}.msr\\:min-w-36{min-width:calc(var(--msr-spacing) * 36)}.msr\\:min-w-44{min-width:calc(var(--msr-spacing) * 44)}.msr\\:flex-1{flex:1}.msr\\:flex-none{flex:none}.msr\\:shrink-0{flex-shrink:0}.msr\\:-translate-x-1\\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.msr\\:-translate-y-1\\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.msr\\:-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.msr\\:-rotate-90{rotate:-90deg}.msr\\:rotate-45{rotate:45deg}.msr\\:rotate-90{rotate:90deg}.msr\\:animate-\\[mesurer-screenshot-preview_5\\.16s_ease-out_both\\]{animation:5.16s ease-out both mesurer-screenshot-preview}.msr\\:cursor-crosshair{cursor:crosshair}.msr\\:cursor-default{cursor:default}.msr\\:cursor-ew-resize{cursor:ew-resize}.msr\\:cursor-move{cursor:move}.msr\\:cursor-nesw-resize{cursor:nesw-resize}.msr\\:cursor-ns-resize{cursor:ns-resize}.msr\\:cursor-nwse-resize{cursor:nwse-resize}.msr\\:cursor-pointer{cursor:pointer}.msr\\:cursor-text{cursor:text}.msr\\:touch-none{touch-action:none}.msr\\:resize-none{resize:none}.msr\\:list-none{list-style-type:none}.msr\\:appearance-none{appearance:none}.msr\\:grid-cols-\\[44px_minmax\\(0\\,1fr\\)\\]{grid-template-columns:44px minmax(0,1fr)}.msr\\:grid-cols-\\[56px_minmax\\(0\\,1fr\\)\\]{grid-template-columns:56px minmax(0,1fr)}.msr\\:grid-cols-\\[78px_150px\\]{grid-template-columns:78px 150px}.msr\\:grid-cols-\\[78px_minmax\\(0\\,1fr\\)\\]{grid-template-columns:78px minmax(0,1fr)}.msr\\:flex-col{flex-direction:column}.msr\\:items-baseline{align-items:baseline}.msr\\:items-center{align-items:center}.msr\\:items-start{align-items:flex-start}.msr\\:items-stretch{align-items:stretch}.msr\\:justify-between{justify-content:space-between}.msr\\:justify-center{justify-content:center}.msr\\:justify-end{justify-content:flex-end}.msr\\:gap-0{gap:calc(var(--msr-spacing) * 0)}.msr\\:gap-0\\.5{gap:calc(var(--msr-spacing) * .5)}.msr\\:gap-1{gap:calc(var(--msr-spacing) * 1)}.msr\\:gap-1\\.5{gap:calc(var(--msr-spacing) * 1.5)}.msr\\:gap-2{gap:calc(var(--msr-spacing) * 2)}.msr\\:gap-\\[2px\\]{gap:2px}.msr\\:gap-px{gap:1px}.msr\\:self-center{align-self:center}.msr\\:justify-self-end{justify-self:flex-end}.msr\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.msr\\:overflow-hidden{overflow:hidden}.msr\\:overflow-visible{overflow:visible}.msr\\:overflow-y-auto{overflow-y:auto}.msr\\:rounded{border-radius:.25rem}.msr\\:rounded-\\[2px\\]{border-radius:2px}.msr\\:rounded-\\[3px\\]{border-radius:3px}.msr\\:rounded-\\[4px\\]{border-radius:4px}.msr\\:rounded-\\[10px\\]{border-radius:10px}.msr\\:rounded-full{border-radius:3.40282e38px}.msr\\:rounded-lg{border-radius:var(--msr-radius-lg)}.msr\\:rounded-md{border-radius:var(--msr-radius-md)}.msr\\:rounded-none{border-radius:0}.msr\\:border{border-style:var(--tw-border-style);border-width:1px}.msr\\:border-0{border-style:var(--tw-border-style);border-width:0}.msr\\:border-2{border-style:var(--tw-border-style);border-width:2px}.msr\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.msr\\:border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.msr\\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.msr\\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.msr\\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.msr\\:border-dashed{--tw-border-style:dashed;border-style:dashed}.msr\\:border-dotted{--tw-border-style:dotted;border-style:dotted}.msr\\:border-solid{--tw-border-style:solid;border-style:solid}.msr\\:border-\\[\\#0d99ff\\]{border-color:#0d99ff}.msr\\:border-\\[\\#2563eb\\]\\/70{border-color:oklab(54.615% -.026671 -.213549/.7)}.msr\\:border-\\[var\\(--msr-danger-border\\)\\]{border-color:var(--msr-danger-border)}.msr\\:border-black\\/10{border-color:var(--msr-color-black)}@supports (color:color-mix(in lab, red, red)){.msr\\:border-black\\/10{border-color:color-mix(in oklab, var(--msr-color-black) 10%, transparent)}}.msr\\:border-ink-100{border-color:var(--msr-color-ink-100)}.msr\\:border-ink-200{border-color:var(--msr-color-ink-200)}.msr\\:border-ink-300{border-color:var(--msr-color-ink-300)}.msr\\:border-ink-500,.msr\\:border-ink-500\\/30{border-color:var(--msr-color-ink-500)}@supports (color:color-mix(in lab, red, red)){.msr\\:border-ink-500\\/30{border-color:color-mix(in oklab, var(--msr-color-ink-500) 30%, transparent)}}.msr\\:border-ink-700{border-color:var(--msr-color-ink-700)}.msr\\:border-transparent{border-color:#0000}.msr\\:border-white{border-color:var(--msr-color-white)}.msr\\:\\!bg-black\\/50{background-color:var(--msr-color-black)!important}@supports (color:color-mix(in lab, red, red)){.msr\\:\\!bg-black\\/50{background-color:color-mix(in oklab, var(--msr-color-black) 50%, transparent)!important}}.msr\\:bg-\\[\\#0d99ff\\]{background-color:#0d99ff}.msr\\:bg-\\[\\#0d99ff\\]\\/8{background-color:oklab(66.9841% -.0648249 -.170866/.08)}.msr\\:bg-\\[\\#0d99ff\\]\\/10{background-color:oklab(66.9841% -.0648249 -.170866/.1)}.msr\\:bg-\\[\\#2563eb\\]{background-color:#2563eb}.msr\\:bg-\\[var\\(--msr-danger-solid-bg\\)\\]{background-color:var(--msr-danger-solid-bg)}.msr\\:bg-black,.msr\\:bg-black\\/4{background-color:var(--msr-color-black)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-black\\/4{background-color:color-mix(in oklab, var(--msr-color-black) 4%, transparent)}}.msr\\:bg-black\\/40{background-color:var(--msr-color-black)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-black\\/40{background-color:color-mix(in oklab, var(--msr-color-black) 40%, transparent)}}.msr\\:bg-ink-50{background-color:var(--msr-color-ink-50)}.msr\\:bg-ink-100{background-color:var(--msr-color-ink-100)}.msr\\:bg-ink-200{background-color:var(--msr-color-ink-200)}.msr\\:bg-ink-300{background-color:var(--msr-color-ink-300)}.msr\\:bg-ink-500\\/50{background-color:var(--msr-color-ink-500)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-ink-500\\/50{background-color:color-mix(in oklab, var(--msr-color-ink-500) 50%, transparent)}}.msr\\:bg-ink-900,.msr\\:bg-ink-900\\/45{background-color:var(--msr-color-ink-900)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-ink-900\\/45{background-color:color-mix(in oklab, var(--msr-color-ink-900) 45%, transparent)}}.msr\\:bg-ink-900\\/90{background-color:var(--msr-color-ink-900)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-ink-900\\/90{background-color:color-mix(in oklab, var(--msr-color-ink-900) 90%, transparent)}}.msr\\:bg-transparent{background-color:#0000}.msr\\:bg-white,.msr\\:bg-white\\/5{background-color:var(--msr-color-white)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-white\\/5{background-color:color-mix(in oklab, var(--msr-color-white) 5%, transparent)}}.msr\\:object-contain{object-fit:contain}.msr\\:p-0{padding:calc(var(--msr-spacing) * 0)}.msr\\:p-1{padding:calc(var(--msr-spacing) * 1)}.msr\\:p-2{padding:calc(var(--msr-spacing) * 2)}.msr\\:p-3{padding:calc(var(--msr-spacing) * 3)}.msr\\:p-\\[2px\\]{padding:2px}.msr\\:p-px{padding:1px}.msr\\:px-0{padding-inline:calc(var(--msr-spacing) * 0)}.msr\\:px-0\\.5{padding-inline:calc(var(--msr-spacing) * .5)}.msr\\:px-1{padding-inline:calc(var(--msr-spacing) * 1)}.msr\\:px-1\\.5{padding-inline:calc(var(--msr-spacing) * 1.5)}.msr\\:px-2{padding-inline:calc(var(--msr-spacing) * 2)}.msr\\:px-3{padding-inline:calc(var(--msr-spacing) * 3)}.msr\\:py-0\\.5{padding-block:calc(var(--msr-spacing) * .5)}.msr\\:py-1{padding-block:calc(var(--msr-spacing) * 1)}.msr\\:py-1\\.5{padding-block:calc(var(--msr-spacing) * 1.5)}.msr\\:py-2{padding-block:calc(var(--msr-spacing) * 2)}.msr\\:py-6{padding-block:calc(var(--msr-spacing) * 6)}.msr\\:pt-1\\.5{padding-top:calc(var(--msr-spacing) * 1.5)}.msr\\:pt-8{padding-top:calc(var(--msr-spacing) * 8)}.msr\\:pr-1\\.5{padding-right:calc(var(--msr-spacing) * 1.5)}.msr\\:pr-2{padding-right:calc(var(--msr-spacing) * 2)}.msr\\:pr-6{padding-right:calc(var(--msr-spacing) * 6)}.msr\\:pb-1{padding-bottom:calc(var(--msr-spacing) * 1)}.msr\\:pb-2{padding-bottom:calc(var(--msr-spacing) * 2)}.msr\\:pl-1{padding-left:calc(var(--msr-spacing) * 1)}.msr\\:pl-1\\.5{padding-left:calc(var(--msr-spacing) * 1.5)}.msr\\:pl-3{padding-left:calc(var(--msr-spacing) * 3)}.msr\\:pl-6{padding-left:calc(var(--msr-spacing) * 6)}.msr\\:text-center{text-align:center}.msr\\:text-left{text-align:left}.msr\\:text-right{text-align:right}.msr\\:font-mono{font-family:var(--msr-font-mono)}.msr\\:text-\\[9px\\]{font-size:9px}.msr\\:text-\\[10px\\]{font-size:10px}.msr\\:text-\\[11px\\]{font-size:11px}.msr\\:text-\\[12px\\]{font-size:12px}.msr\\:text-\\[13px\\]{font-size:13px}.msr\\:text-\\[16px\\]{font-size:16px}.msr\\:leading-4{--tw-leading:calc(var(--msr-spacing) * 4);line-height:calc(var(--msr-spacing) * 4)}.msr\\:leading-5{--tw-leading:calc(var(--msr-spacing) * 5);line-height:calc(var(--msr-spacing) * 5)}.msr\\:leading-6{--tw-leading:calc(var(--msr-spacing) * 6);line-height:calc(var(--msr-spacing) * 6)}.msr\\:leading-none{--tw-leading:1;line-height:1}.msr\\:font-medium{--tw-font-weight:var(--msr-font-weight-medium);font-weight:var(--msr-font-weight-medium)}.msr\\:font-normal{--tw-font-weight:var(--msr-font-weight-normal);font-weight:var(--msr-font-weight-normal)}.msr\\:font-semibold{--tw-font-weight:var(--msr-font-weight-semibold);font-weight:var(--msr-font-weight-semibold)}.msr\\:text-pretty{text-wrap:pretty}.msr\\:break-words{overflow-wrap:break-word}.msr\\:whitespace-normal{white-space:normal}.msr\\:whitespace-nowrap{white-space:nowrap}.msr\\:whitespace-pre{white-space:pre}.msr\\:whitespace-pre-wrap{white-space:pre-wrap}.msr\\:text-\\[\\#64748b\\]{color:#64748b}.msr\\:text-\\[var\\(--msr-danger-solid-text\\)\\]{color:var(--msr-danger-solid-text)}.msr\\:text-\\[var\\(--msr-danger-text\\)\\]{color:var(--msr-danger-text)}.msr\\:text-ink-50{color:var(--msr-color-ink-50)}.msr\\:text-ink-500{color:var(--msr-color-ink-500)}.msr\\:text-ink-700{color:var(--msr-color-ink-700)}.msr\\:text-ink-900{color:var(--msr-color-ink-900)}.msr\\:text-red-600{color:var(--msr-color-red-600)}.msr\\:text-white,.msr\\:text-white\\/60{color:var(--msr-color-white)}@supports (color:color-mix(in lab, red, red)){.msr\\:text-white\\/60{color:color-mix(in oklab, var(--msr-color-white) 60%, transparent)}}.msr\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.msr\\:underline-offset-2{text-underline-offset:2px}.msr\\:caret-\\[\\#0d99ff\\]{caret-color:#0d99ff}.msr\\:opacity-0{opacity:0}.msr\\:opacity-100{opacity:1}.msr\\:shadow-\\[0_0_0_1px_rgba\\(0\\,0\\,0\\,0\\.25\\)\\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:shadow-\\[0_1px_2px_rgb\\(0_0_0_\\/_0\\.06\\)\\]{--tw-shadow:0 1px 2px var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:shadow-floating{--tw-shadow:0 0 0 .4px var(--tw-shadow-color,#00000038), 0 6px 18px var(--tw-shadow-color,#00000008), 0 3px 9px var(--tw-shadow-color,#0000000f), 0 1px 1px var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:outline,.msr\\:outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.msr\\:outline-\\[\\#0d99ff\\]{outline-color:#0d99ff}.msr\\:transition-\\[height\\]{transition-property:height;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-\\[left\\]{transition-property:left;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-\\[max-height\\]{transition-property:max-height;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-\\[width\\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-none{transition-property:none}.msr\\:duration-150{--tw-duration:.15s;transition-duration:.15s}.msr\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.msr\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.msr\\:ease-\\[cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{--tw-ease:cubic-bezier(.22,1,.36,1);transition-timing-function:cubic-bezier(.22,1,.36,1)}.msr\\:ease-\\[ease\\]{--tw-ease:ease;transition-timing-function:ease}.msr\\:will-change-transform{will-change:transform}.msr\\:outline-none{--tw-outline-style:none;outline-style:none}.msr\\:select-none{-webkit-user-select:none;user-select:none}.msr\\:select-text{-webkit-user-select:text;user-select:text}@media (hover:hover){.msr\\:group-hover\\:h-3:is(:where(.msr\\:group):hover *){height:calc(var(--msr-spacing) * 3)}.msr\\:group-hover\\:opacity-100:is(:where(.msr\\:group):hover *){opacity:1}.msr\\:group-hover\\/video\\:pointer-events-auto:is(:where(.msr\\:group\\/video):hover *){pointer-events:auto}.msr\\:group-hover\\/video\\:opacity-100:is(:where(.msr\\:group\\/video):hover *){opacity:1}}.msr\\:group-focus-visible\\:h-3:is(:where(.msr\\:group):focus-visible *){height:calc(var(--msr-spacing) * 3)}.msr\\:focus-within\\:pointer-events-auto:focus-within{pointer-events:auto}.msr\\:focus-within\\:relative:focus-within{position:relative}.msr\\:focus-within\\:z-\\[1\\]:focus-within{z-index:1}.msr\\:focus-within\\:rounded-l-\\[5px\\]:focus-within{border-top-left-radius:5px;border-bottom-left-radius:5px}.msr\\:focus-within\\:rounded-r-\\[5px\\]:focus-within{border-top-right-radius:5px;border-bottom-right-radius:5px}.msr\\:focus-within\\:border-\\[\\#0d99ff\\]:focus-within{border-color:#0d99ff}.msr\\:focus-within\\:opacity-100:focus-within{opacity:1}.msr\\:focus-within\\:shadow-\\[0_0_0_1px_\\#0d99ff\\]:focus-within{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#0d99ff);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}@media (hover:hover){.msr\\:hover\\:border-ink-200:hover{border-color:var(--msr-color-ink-200)}.msr\\:hover\\:\\!bg-black\\/60:hover{background-color:var(--msr-color-black)!important}@supports (color:color-mix(in lab, red, red)){.msr\\:hover\\:\\!bg-black\\/60:hover{background-color:color-mix(in oklab, var(--msr-color-black) 60%, transparent)!important}}.msr\\:hover\\:bg-\\[\\#0d99ff\\]:hover{background-color:#0d99ff}.msr\\:hover\\:bg-\\[\\#087dcc\\]:hover{background-color:#087dcc}.msr\\:hover\\:bg-\\[var\\(--msr-danger-bg\\)\\]:hover{background-color:var(--msr-danger-bg)}.msr\\:hover\\:bg-\\[var\\(--msr-danger-solid-hover\\)\\]:hover{background-color:var(--msr-danger-solid-hover)}.msr\\:hover\\:bg-black\\/4:hover{background-color:var(--msr-color-black)}@supports (color:color-mix(in lab, red, red)){.msr\\:hover\\:bg-black\\/4:hover{background-color:color-mix(in oklab, var(--msr-color-black) 4%, transparent)}}.msr\\:hover\\:bg-ink-50:hover{background-color:var(--msr-color-ink-50)}.msr\\:hover\\:bg-ink-100:hover{background-color:var(--msr-color-ink-100)}.msr\\:hover\\:bg-ink-200:hover,.msr\\:hover\\:bg-ink-200\\/50:hover{background-color:var(--msr-color-ink-200)}@supports (color:color-mix(in lab, red, red)){.msr\\:hover\\:bg-ink-200\\/50:hover{background-color:color-mix(in oklab, var(--msr-color-ink-200) 50%, transparent)}}.msr\\:hover\\:bg-red-50:hover{background-color:var(--msr-color-red-50)}.msr\\:hover\\:bg-transparent:hover{background-color:#0000}.msr\\:hover\\:text-ink-700:hover{color:var(--msr-color-ink-700)}.msr\\:hover\\:text-ink-900:hover{color:var(--msr-color-ink-900)}.msr\\:hover\\:text-white:hover{color:var(--msr-color-white)}.msr\\:hover\\:underline:hover{text-decoration-line:underline}.msr\\:hover\\:focus-within\\:border-\\[\\#0d99ff\\]:hover:focus-within{border-color:#0d99ff}}.msr\\:focus\\:border-\\[\\#0d99ff\\]:focus{border-color:#0d99ff}.msr\\:focus\\:shadow-\\[inset_0_0_0_1px_\\#0d99ff\\]:focus{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,#0d99ff);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus\\:shadow-\\[inset_0_0_0_1px_var\\(--msr-accent\\)\\]:focus{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--msr-accent));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.msr\\:focus-visible\\:bg-ink-100:focus-visible{background-color:var(--msr-color-ink-100)}.msr\\:focus-visible\\:opacity-100:focus-visible{opacity:1}.msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_var\\(--color-ink-700\\)\\]:focus-visible{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--color-ink-700));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_var\\(--msr-accent\\)\\]:focus-visible{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--msr-accent));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_var\\(--msr-danger-text\\)\\]:focus-visible{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--msr-danger-text));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:ring-\\[var\\(--msr-accent\\)\\]\\/25:focus-visible{--tw-ring-color:var(--msr-accent)}@supports (color:color-mix(in lab, red, red)){.msr\\:focus-visible\\:ring-\\[var\\(--msr-accent\\)\\]\\/25:focus-visible{--tw-ring-color:color-mix(in oklab, var(--msr-accent) 25%, transparent)}}.msr\\:focus-visible\\:outline:focus-visible,.msr\\:focus-visible\\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.msr\\:focus-visible\\:outline-offset-1:focus-visible{outline-offset:1px}.msr\\:focus-visible\\:outline-ink-500:focus-visible{outline-color:var(--msr-color-ink-500)}.msr\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.msr\\:focus-visible\\:ring-inset:focus-visible{--tw-ring-inset:inset}.msr\\:disabled\\:cursor-default:disabled{cursor:default}.msr\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.msr\\:disabled\\:opacity-40:disabled{opacity:.4}@media (prefers-reduced-motion:reduce){.msr\\:motion-reduce\\:transition-none{transition-property:none}}.msr\\:rounded-control{border-radius:var(--msr-radius-control)}.msr\\:rounded-wide-card{border-radius:var(--msr-radius-wide-card)}}:root,:host{--color-ink-50:#f8fafc;--color-ink-100:#f1f5f9;--color-ink-200:#e2e8f0;--color-ink-300:#cbd5e1;--color-ink-500:#64748b;--color-ink-700:#334155;--color-ink-900:#18181b}:host{all:initial;color-scheme:light dark;color:var(--msr-color-ink-900);letter-spacing:normal;--msr-spacing:4px;direction:ltr;font-family:ui-sans-serif,system-ui,sans-serif;font-size:16px;font-weight:400;line-height:1.5;display:block}.mesurer-root{--msr-accent:#0d99ff;--msr-surface:#fff;--msr-surface-raised:#fff;--msr-surface-muted:var(--msr-color-ink-50);--msr-content:var(--msr-color-ink-900);--msr-color-white:#fff;--msr-color-black:#000;--msr-danger-bg:#fef2f2;--msr-danger-border:#fecaca;--msr-danger-text:#dc2626;--msr-danger-solid-bg:#dc2626;--msr-danger-solid-hover:#b91c1c;--msr-danger-solid-text:#fff;--msr-control-thumb:#fff;--msr-slider-track:#0f172a29;--msr-shadow-toolbar:drop-shadow(0 0 .4px #00000038) drop-shadow(0 6px 18px #00000008) drop-shadow(0 3px 9px #0000000f) drop-shadow(0 1px 1px #0000000f);--msr-shadow-floating:0 0 0 .4px #00000038, 0 6px 18px #00000008, 0 3px 9px #0000000f, 0 1px 1px #0000000f;--msr-shadow-select-menu:var(--msr-shadow-floating);--msr-comment-menu-surface:var(--msr-surface-raised);--msr-shadow-comment-menu:var(--msr-shadow-select-menu);color:var(--msr-content);color-scheme:light}.mesurer-root [class~=msr\\:bg-white]{background-color:var(--msr-surface)!important}.mesurer-root [class~="msr:bg-[#0d99ff]"],.mesurer-root [class~="msr:hover:bg-[#0d99ff]"]:hover{background-color:var(--msr-accent)!important}.mesurer-root [class~="msr:border-[#0d99ff]"]{border-color:var(--msr-accent)!important}.mesurer-root [class~="msr:bg-[#0d99ff]/8"]{background-color:var(--msr-accent)!important}@supports (color:color-mix(in lab, red, red)){.mesurer-root [class~="msr:bg-[#0d99ff]/8"]{background-color:color-mix(in srgb, var(--msr-accent) 8%, transparent)!important}}.mesurer-root [class~=msr\\:text-black]{color:var(--msr-content)!important}.mesurer-root .mesurer-control-thumb{background-color:var(--msr-control-thumb)!important}.mesurer-root button{-webkit-user-select:none;user-select:none;cursor:default!important}.mesurer-root .mesurer-settings-button-ghost{opacity:.7}.mesurer-root .mesurer-settings-button-ghost:hover,.mesurer-root .mesurer-settings-button-ghost:focus-visible{opacity:1}.mesurer-root [data-mesurer-recording-timeline] .mesurer-recording-track-rail{background-color:var(--msr-color-ink-200)}.mesurer-root [data-mesurer-recording-timeline] .mesurer-recording-track-clip{background-color:var(--msr-color-ink-300)}.mesurer-root [data-mesurer-recording-timeline] .mesurer-recording-playhead,.mesurer-root [data-mesurer-recording-timeline] .mesurer-recording-trim-bar{background-color:var(--msr-color-ink-900)}.mesurer-root .mesurer-switch-thumb[data-checked=false]{background-color:var(--msr-color-ink-200)!important}.mesurer-root [class~="msr:hover:bg-black/4"]:hover,.mesurer-root [class~="msr:hover:bg-black/5"]:hover{background-color:var(--msr-content)!important}@supports (color:color-mix(in lab, red, red)){.mesurer-root [class~="msr:hover:bg-black/4"]:hover,.mesurer-root [class~="msr:hover:bg-black/5"]:hover{background-color:color-mix(in srgb, var(--msr-content) 6%, transparent)!important}}.mesurer-root .mesurer-menu-surface,.mesurer-root .mesurer-color-picker,.mesurer-root .mesurer-comment-card,.mesurer-root .mesurer-comment-hover-card,.mesurer-root .mesurer-comment-delete-confirmation{color:var(--msr-content);background-color:var(--msr-surface-raised)!important}.mesurer-root .mesurer-section-divider{background-color:var(--msr-color-ink-200)!important}.mesurer-root .mesurer-settings-select-menu{box-shadow:var(--msr-shadow-select-menu)}.mesurer-root .mesurer-comment-overflow-menu,.mesurer-root .mesurer-comment-delete-confirmation{box-shadow:var(--msr-shadow-comment-menu);background-color:var(--msr-comment-menu-surface)!important}.mesurer-root .mesurer-comment-menu-item:hover{background-color:var(--msr-color-ink-200)!important}.mesurer-root .mesurer-comment-menu-danger{color:var(--msr-danger-text)!important}.mesurer-root .mesurer-comment-menu-danger:hover{background-color:var(--msr-danger-bg)!important}.mesurer-root .mesurer-settings-button-default{background-color:#0000}.mesurer-root .mesurer-settings-button-default:hover{background-color:var(--msr-color-ink-50)}.mesurer-root[data-theme=dark] .mesurer-control-shell{background-color:var(--msr-color-ink-100)}.mesurer-root[data-theme=dark] .mesurer-settings-panel select,.mesurer-root[data-theme=dark] .mesurer-settings-select,.mesurer-root[data-theme=dark] .mesurer-settings-select-menu{background-color:var(--msr-surface-raised)!important;border-color:var(--msr-color-ink-200)!important}.mesurer-root[data-theme=dark] .mesurer-settings-button-default:hover{background-color:var(--msr-surface)!important}@media (prefers-color-scheme:dark){.mesurer-root[data-theme=system] .mesurer-control-shell{background-color:var(--msr-color-ink-100)}.mesurer-root[data-theme=system] .mesurer-settings-panel select,.mesurer-root[data-theme=system] .mesurer-settings-select,.mesurer-root[data-theme=system] .mesurer-settings-select-menu{background-color:var(--msr-surface-raised)!important;border-color:var(--msr-color-ink-200)!important}.mesurer-root[data-theme=system] .mesurer-settings-button-default:hover{background-color:var(--msr-surface)!important}}.mesurer-root[data-theme=dark] .mesurer-switch-track[data-checked=false]{background-color:var(--msr-color-ink-100)!important}@media (prefers-color-scheme:dark){.mesurer-root[data-theme=system] .mesurer-switch-track[data-checked=false]{background-color:var(--msr-color-ink-100)!important}}.mesurer-root .mesurer-settings-panel .mesurer-control-focus :is(input,select):focus{box-shadow:none!important;outline:none!important}.mesurer-root[data-theme=dark]{--msr-accent:#0c8ce9;--msr-color-red-50:#3f2020;--msr-color-red-200:#7f3f46;--msr-color-red-600:#f87171;--msr-color-red-700:#fca5a5;--msr-danger-bg:#3f2020;--msr-danger-border:#7f3f46;--msr-danger-text:#f87171;--msr-danger-solid-bg:#c95058;--msr-danger-solid-hover:#b7424b;--msr-danger-solid-text:#f5f5f5;--msr-color-ink-50:#3a3a3a;--msr-color-ink-100:#414141;--msr-color-ink-200:#4a4a4a;--msr-color-ink-300:#5a5a5a;--msr-color-ink-500:#a0a0a0;--msr-color-ink-700:#dedede;--msr-color-ink-900:#f5f5f5;--msr-surface:#323232;--msr-surface-raised:#3a3a3a;--msr-surface-muted:#3a3a3a;--msr-color-white:#f5f5f5;--msr-color-black:#171717;--msr-control-thumb:#f4f4f5;--msr-slider-track:#f5f5f53d;--msr-shadow-toolbar:drop-shadow(0 0 .4px lch(100% 0 0/.1)) drop-shadow(0 3px 8px lch(0% 0 0/.125)) drop-shadow(0 2px 5px lch(0% 0 0/.125)) drop-shadow(0 1px 1px lch(0% 0 0/.125));--msr-shadow-floating:0 0 0 .4px lch(100% 0 0/.05), 0 4px 12px lch(0% 0 0/.12), 0 1px 3px lch(0% 0 0/.1);--msr-shadow-select-menu:0 0 0 .4px lch(100% 0 0/.14), 0 4px 12px lch(0% 0 0/.22), 0 1px 3px lch(0% 0 0/.18);--msr-comment-menu-surface:#323232;--msr-shadow-comment-menu:0 0 0 .5px lch(100% 0 0/.16), 0 5px 14px lch(0% 0 0/.26), 0 1px 3px lch(0% 0 0/.18);color-scheme:dark}@media (prefers-color-scheme:dark){.mesurer-root[data-theme=system]{--msr-accent:#0c8ce9;--msr-color-red-50:#3f2020;--msr-color-red-200:#7f3f46;--msr-color-red-600:#f87171;--msr-color-red-700:#fca5a5;--msr-danger-bg:#3f2020;--msr-danger-border:#7f3f46;--msr-danger-text:#f87171;--msr-danger-solid-bg:#c95058;--msr-danger-solid-hover:#b7424b;--msr-danger-solid-text:#f5f5f5;--msr-color-ink-50:#3a3a3a;--msr-color-ink-100:#414141;--msr-color-ink-200:#4a4a4a;--msr-color-ink-300:#5a5a5a;--msr-color-ink-500:#a0a0a0;--msr-color-ink-700:#dedede;--msr-color-ink-900:#f5f5f5;--msr-surface:#323232;--msr-surface-raised:#3a3a3a;--msr-surface-muted:#3a3a3a;--msr-color-white:#f5f5f5;--msr-color-black:#171717;--msr-control-thumb:#f4f4f5;--msr-slider-track:#f5f5f53d;--msr-shadow-toolbar:drop-shadow(0 0 .4px lch(100% 0 0/.1)) drop-shadow(0 3px 8px lch(0% 0 0/.125)) drop-shadow(0 2px 5px lch(0% 0 0/.125)) drop-shadow(0 1px 1px lch(0% 0 0/.125));--msr-shadow-floating:0 0 0 .4px lch(100% 0 0/.05), 0 4px 12px lch(0% 0 0/.12), 0 1px 3px lch(0% 0 0/.1);--msr-shadow-select-menu:0 0 0 .4px lch(100% 0 0/.14), 0 4px 12px lch(0% 0 0/.22), 0 1px 3px lch(0% 0 0/.18);--msr-comment-menu-surface:#323232;--msr-shadow-comment-menu:0 0 0 .5px lch(100% 0 0/.16), 0 5px 14px lch(0% 0 0/.26), 0 1px 3px lch(0% 0 0/.18);color-scheme:dark}}.mesurer-color-picker,.mesurer-color-picker *,.mesurer-root [data-mesurer-inspect-info-card],.mesurer-root [data-mesurer-inspect-info-card] *,[data-mesurer-overlay][data-mesurer-inspect],[data-mesurer-overlay][data-mesurer-inspect] *{cursor:default!important}.mesurer-root button[data-mesurer-resize-cursor],.mesurer-root button[data-mesurer-resize-cursor] *,[data-mesurer-overlay][data-mesurer-inspect] [data-mesurer-resize-cursor],[data-mesurer-overlay][data-mesurer-inspect] [data-mesurer-resize-cursor] *{cursor:var(--msr-resize-cursor)!important}html[data-mesurer-resize-cursor],html[data-mesurer-resize-cursor] *,html[data-mesurer-resize-cursor] [data-mesurer-overlay][data-mesurer-inspect],html[data-mesurer-resize-cursor] [data-mesurer-overlay][data-mesurer-inspect] *,.mesurer-root[data-mesurer-resize-cursor],.mesurer-root[data-mesurer-resize-cursor] *{cursor:var(--msr-resize-cursor-lock)!important}.mesurer-root,.mesurer-root *,.mesurer-root :before,.mesurer-root :after{box-sizing:border-box}.mesurer-toolbar-motion{--msr-toolbar-motion:.2s ease;z-index:0;isolation:isolate;width:max-content;max-width:100%;display:block;position:relative}.mesurer-layout-guides,.mesurer-layout-guides-layer,.mesurer-layout-guides-grid{pointer-events:none;position:absolute;inset:0}.mesurer-layout-guides{z-index:2;overflow:hidden}.mesurer-toolbar-chrome{z-index:0;background:var(--msr-surface);width:100%;filter:var(--msr-shadow-toolbar);transform-origin:0;pointer-events:none;border-radius:9px;position:absolute;inset:0 auto 0 0;overflow:visible}.mesurer-toolbar-clip{z-index:1;isolation:isolate;transform-origin:0;position:relative;overflow:visible}.mesurer-toolbar-motion[data-resizing=collapse] .mesurer-toolbar-clip{overflow:hidden}.mesurer-toolbar-motion[data-resizing] .mesurer-toolbar-tooltips{visibility:hidden!important}.mesurer-toolbar-surface{transform-origin:0;padding:0;position:relative}.mesurer-toolbar-divider{background:var(--msr-color-ink-200);flex:none;align-self:stretch;width:1px;margin:0}.mesurer-toolbar-minimize-stage{min-width:0;width:var(--msr-expanded-w,auto);flex:none;overflow:visible}.mesurer-toolbar-minimize-stage[data-minimized=true]{width:var(--msr-icon-w,auto);overflow:hidden}.mesurer-toolbar-motion[data-resizing=collapse] .mesurer-toolbar-minimize-stage{overflow:hidden}.mesurer-toolbar-minimize-stage[data-minimized=true] .mesurer-toolbar-minimize-track{transform:translateX(calc(-1 * var(--msr-expanded-w,0px)))}.mesurer-toolbar-minimize-stage:has([role=dialog]),.mesurer-toolbar-minimize-stage:has([role=menu]),.mesurer-toolbar-minimize-stage:has(.mesurer-screenshot-preview){overflow:visible}.mesurer-toolbar-minimize-track{pointer-events:none;flex:none;display:flex;transform:translate(0)}.mesurer-toolbar-minimize-slot{flex:none}.mesurer-toolbar-minimize-slot[data-slot=expanded]{width:var(--msr-expanded-w,auto)}.mesurer-toolbar-minimize-slot[data-slot=icon]{width:auto}.mesurer-toolbar-minimize-slot:not([data-open=true]){pointer-events:none}.mesurer-toolbar-minimize-slot[data-open=true]{pointer-events:auto}.mesurer-toolbar-motion:not([data-resizing=collapse]) .mesurer-toolbar-minimize-slot[data-slot=icon]:not([data-open=true]){visibility:hidden}.mesurer-toolbar-restore svg{transform:translate(-.5px,.5px)}.mesurer-toolbar-tool-stage{min-width:0;width:var(--msr-inspect-w,auto);flex:none;overflow:hidden}.mesurer-toolbar-tool-stage[data-group=annotate]{width:var(--msr-annotate-w,auto)}.mesurer-toolbar-tool-stage[data-group=annotate] .mesurer-toolbar-tool-track{transform:translateX(calc(-1 * var(--msr-inspect-w,0px)))}.mesurer-toolbar-tool-stage:has([role=menu]),.mesurer-toolbar-tool-stage:has([role=dialog]){overflow:visible}.mesurer-toolbar-motion[data-resizing=true] .mesurer-toolbar-tool-stage{overflow:hidden}.mesurer-toolbar-tool-track{flex:none;display:flex;transform:translate(0)}.mesurer-toolbar-motion[data-ready=true] .mesurer-toolbar-tool-switch-pill{transition:transform var(--msr-toolbar-motion)}.mesurer-toolbar-tool-slot{flex:none}.mesurer-toolbar-tool-slot[data-group=inspect]{width:var(--msr-inspect-w,auto)}.mesurer-toolbar-tool-slot[data-group=annotate]{width:var(--msr-annotate-w,auto)}.mesurer-toolbar-tool-slot:not([data-open=true]){pointer-events:none}.mesurer-toolbar-motion:not([data-resizing]) .mesurer-toolbar-tool-slot:not([data-open=true]){visibility:hidden}.mesurer-toolbar-tool-panel{width:max-content}.mesurer-toolbar-tooltips{z-index:110;pointer-events:none;position:fixed;inset:0;overflow:visible}.mesurer-toolbar-trailing{z-index:1;isolation:isolate;background:var(--msr-surface);border-radius:0 9px 9px 0;flex:none;position:relative}.mesurer-toolbar-tool-switch{z-index:1;isolation:isolate;background:var(--msr-surface);position:relative}.mesurer-toolbar-tool-switch-pill{z-index:0;background:var(--msr-color-ink-200);border-radius:3px;width:28px;height:28px;position:absolute;top:2px;left:2px;transform:translate(0)}.mesurer-toolbar-tool-switch[data-value=annotate] .mesurer-toolbar-tool-switch-pill{transform:translate(30px)}.mesurer-toolbar-tool-switch>:not(.mesurer-toolbar-tool-switch-pill){z-index:1;position:relative}@media (prefers-reduced-motion:reduce){.mesurer-toolbar-motion,.mesurer-toolbar-chrome,.mesurer-toolbar-tool-track,.mesurer-toolbar-minimize-track,.mesurer-toolbar-trailing,.mesurer-toolbar-motion[data-ready=true] .mesurer-toolbar-tool-switch-pill{transition:none}.mesurer-screenshot-preview{animation-name:mesurer-screenshot-preview-reduced;animation-duration:5s;animation-timing-function:linear;animation-fill-mode:both}}@keyframes mesurer-screenshot-preview{0%,3.1%{opacity:0}6.2%,96.9%{opacity:1}to{opacity:0}}@keyframes mesurer-screenshot-preview-reduced{0%,to{opacity:1}}@keyframes mesurer-comment-nudge{0%,to{transform:translate(0)}35%{transform:translate(-3px)}70%{transform:translate(3px)}}.mesurer-comment-nudge{animation:.15s ease-out mesurer-comment-nudge}@keyframes mesurer-status-ellipsis{0%,32%{content:"."}33%,65%{content:".."}66%,to{content:"..."}}.mesurer-status-ellipsis{text-align:left;width:1.5em;display:inline-block}.mesurer-status-ellipsis:after{content:"...";animation:1.2s step-end infinite mesurer-status-ellipsis}@media (prefers-reduced-motion:reduce){.mesurer-status-ellipsis:after{content:"...";animation:none}}.mesurer-thin-scrollbar{scrollbar-width:thin;scrollbar-color:var(--msr-color-ink-200) transparent}.mesurer-thin-scrollbar::-webkit-scrollbar{width:4px;height:4px}.mesurer-thin-scrollbar::-webkit-scrollbar-track{background:0 0}.mesurer-thin-scrollbar::-webkit-scrollbar-thumb{background:var(--msr-color-ink-200);border-radius:var(--msr-radius-control)}.mesurer-thin-scrollbar:hover{scrollbar-color:var(--msr-color-ink-300) transparent}.mesurer-thin-scrollbar:hover::-webkit-scrollbar-thumb{background:var(--msr-color-ink-300)}.mesurer-thin-scrollbar::-webkit-scrollbar-corner{background:0 0}.mesurer-toast-surface{box-shadow:var(--msr-shadow-floating)}.mesurer-root{--msr-spacing:4px}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}';
62
+ var MESURER_STYLES = '/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--msr-font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--msr-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--msr-color-red-50:oklch(97.1% .013 17.38);--msr-color-red-200:oklch(88.5% .062 18.334);--msr-color-red-600:oklch(57.7% .245 27.325);--msr-color-red-700:oklch(50.5% .213 27.518);--msr-color-black:#000;--msr-color-white:#fff;--msr-spacing:.25rem;--msr-text-xs:.75rem;--msr-text-xs--line-height:calc(1 / .75);--msr-text-sm:.875rem;--msr-text-sm--line-height:calc(1.25 / .875);--msr-font-weight-normal:400;--msr-font-weight-medium:500;--msr-font-weight-semibold:600;--msr-radius-sm:.25rem;--msr-radius-md:.375rem;--msr-radius-lg:.5rem;--msr-radius-xl:.75rem;--msr-ease-out:cubic-bezier(0, 0, .2, 1);--msr-animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--msr-aspect-video:16 / 9;--msr-default-transition-duration:.15s;--msr-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--msr-default-font-family:var(--msr-font-sans);--msr-default-mono-font-family:var(--msr-font-mono);--msr-radius-control:5px;--msr-radius-wide-card:13px;--msr-shadow-toolbar:drop-shadow(0 0 .4px #00000038) drop-shadow(0 6px 18px #00000008) drop-shadow(0 3px 9px #0000000f) drop-shadow(0 1px 1px #0000000f);--msr-shadow-floating:0 0 .4px #00000038, 0 6px 18px #00000008, 0 3px 9px #0000000f, 0 1px 1px #0000000f;--msr-color-ink-50:#f8fafc;--msr-color-ink-100:#f1f5f9;--msr-color-ink-200:#e2e8f0;--msr-color-ink-300:#cbd5e1;--msr-color-ink-500:#64748b;--msr-color-ink-700:#334155;--msr-color-ink-900:#18181b}}@layer base{.mesurer-root{font-family:var(--msr-font-sans);font-size:12px;line-height:1.5}.mesurer-root button,.mesurer-root input,.mesurer-root select,.mesurer-root textarea{font-family:inherit;font-size:inherit;line-height:inherit}.mesurer-root input[type=search]::-webkit-search-cancel-button{appearance:none;display:none}.mesurer-root input[type=search]::-webkit-search-decoration{appearance:none;display:none}.mesurer-root input[type=search]::-moz-search-clear{appearance:none;display:none}.mesurer-root input[type=search]::-ms-clear{appearance:none;display:none}:where(.mesurer-root,.mesurer-root *){--tw-border-style:solid;--tw-outline-style:solid;--tw-shadow:0 0 #0000;--tw-inset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;border:0 solid}.mesurer-root button,.mesurer-root input,.mesurer-root select,.mesurer-root textarea{appearance:none;font:inherit;color:inherit;letter-spacing:inherit;background-color:#0000;padding:0}}@layer components;@layer utilities{.msr\\:pointer-events-auto{pointer-events:auto}.msr\\:pointer-events-none{pointer-events:none}.msr\\:absolute{position:absolute}.msr\\:fixed{position:fixed}.msr\\:relative{position:relative}.msr\\:inset-0{inset:calc(var(--msr-spacing) * 0)}.msr\\:inset-x-0{inset-inline:calc(var(--msr-spacing) * 0)}.msr\\:inset-y-0{inset-block:calc(var(--msr-spacing) * 0)}.msr\\:top-0{top:calc(var(--msr-spacing) * 0)}.msr\\:top-0\\.5{top:calc(var(--msr-spacing) * .5)}.msr\\:top-1\\.5{top:calc(var(--msr-spacing) * 1.5)}.msr\\:top-1\\/2{top:50%}.msr\\:top-1\\/3{top:33.3333%}.msr\\:top-2\\/3{top:66.6667%}.msr\\:top-9{top:calc(var(--msr-spacing) * 9)}.msr\\:top-\\[18px\\]{top:18px}.msr\\:top-full{top:100%}.msr\\:right-0{right:calc(var(--msr-spacing) * 0)}.msr\\:right-1{right:calc(var(--msr-spacing) * 1)}.msr\\:right-1\\.5{right:calc(var(--msr-spacing) * 1.5)}.msr\\:right-2{right:calc(var(--msr-spacing) * 2)}.msr\\:right-\\[8px\\]{right:8px}.msr\\:bottom-0{bottom:calc(var(--msr-spacing) * 0)}.msr\\:bottom-1\\.5{bottom:calc(var(--msr-spacing) * 1.5)}.msr\\:bottom-4{bottom:calc(var(--msr-spacing) * 4)}.msr\\:bottom-full{bottom:100%}.msr\\:left-0{left:calc(var(--msr-spacing) * 0)}.msr\\:left-1\\.5{left:calc(var(--msr-spacing) * 1.5)}.msr\\:left-1\\/2{left:50%}.msr\\:left-1\\/3{left:33.3333%}.msr\\:left-2\\/3{left:66.6667%}.msr\\:left-\\[8px\\]{left:8px}.msr\\:left-\\[18px\\]{left:18px}.msr\\:left-full{left:100%}.msr\\:z-10{z-index:10}.msr\\:z-20{z-index:20}.msr\\:z-30{z-index:30}.msr\\:z-40{z-index:40}.msr\\:z-50{z-index:50}.msr\\:z-80{z-index:80}.msr\\:z-100{z-index:100}.msr\\:z-\\[1\\]{z-index:1}.msr\\:z-\\[2\\]{z-index:2}.msr\\:z-\\[25\\]{z-index:25}.msr\\:z-\\[60\\]{z-index:60}.msr\\:z-\\[70\\]{z-index:70}.msr\\:z-\\[71\\]{z-index:71}.msr\\:z-\\[80\\]{z-index:80}.msr\\:z-\\[85\\]{z-index:85}.msr\\:z-\\[90\\]{z-index:90}.msr\\:z-\\[100\\]{z-index:100}.msr\\:z-\\[101\\]{z-index:101}.msr\\:z-\\[120\\]{z-index:120}.msr\\:col-span-2{grid-column:span 2/span 2}.msr\\:m-0{margin:calc(var(--msr-spacing) * 0)}.msr\\:mx-auto{margin-inline:auto}.msr\\:my-1{margin-block:calc(var(--msr-spacing) * 1)}.msr\\:mt-0\\.5{margin-top:calc(var(--msr-spacing) * .5)}.msr\\:mt-1{margin-top:calc(var(--msr-spacing) * 1)}.msr\\:mt-2{margin-top:calc(var(--msr-spacing) * 2)}.msr\\:mt-3{margin-top:calc(var(--msr-spacing) * 3)}.msr\\:mt-4{margin-top:calc(var(--msr-spacing) * 4)}.msr\\:mb-1{margin-bottom:calc(var(--msr-spacing) * 1)}.msr\\:mb-2{margin-bottom:calc(var(--msr-spacing) * 2)}.msr\\:-ml-1{margin-left:calc(var(--msr-spacing) * -1)}.msr\\:ml-1{margin-left:calc(var(--msr-spacing) * 1)}.msr\\:ml-auto{margin-left:auto}.msr\\:box-border{box-sizing:border-box}.msr\\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.msr\\:block{display:block}.msr\\:flex{display:flex}.msr\\:grid{display:grid}.msr\\:inline-flex{display:inline-flex}.msr\\:size-1\\.5{width:calc(var(--msr-spacing) * 1.5);height:calc(var(--msr-spacing) * 1.5)}.msr\\:size-2{width:calc(var(--msr-spacing) * 2);height:calc(var(--msr-spacing) * 2)}.msr\\:size-3{width:calc(var(--msr-spacing) * 3);height:calc(var(--msr-spacing) * 3)}.msr\\:size-4{width:calc(var(--msr-spacing) * 4);height:calc(var(--msr-spacing) * 4)}.msr\\:size-5{width:calc(var(--msr-spacing) * 5);height:calc(var(--msr-spacing) * 5)}.msr\\:size-6{width:calc(var(--msr-spacing) * 6);height:calc(var(--msr-spacing) * 6)}.msr\\:size-7{width:calc(var(--msr-spacing) * 7);height:calc(var(--msr-spacing) * 7)}.msr\\:size-8{width:calc(var(--msr-spacing) * 8);height:calc(var(--msr-spacing) * 8)}.msr\\:size-\\[10px\\]{width:10px;height:10px}.msr\\:size-\\[18px\\]{width:18px;height:18px}.msr\\:size-full{width:100%;height:100%}.msr\\:h-0{height:calc(var(--msr-spacing) * 0)}.msr\\:h-1\\.5{height:calc(var(--msr-spacing) * 1.5)}.msr\\:h-2{height:calc(var(--msr-spacing) * 2)}.msr\\:h-2\\.5{height:calc(var(--msr-spacing) * 2.5)}.msr\\:h-3{height:calc(var(--msr-spacing) * 3)}.msr\\:h-5{height:calc(var(--msr-spacing) * 5)}.msr\\:h-6{height:calc(var(--msr-spacing) * 6)}.msr\\:h-7{height:calc(var(--msr-spacing) * 7)}.msr\\:h-8{height:calc(var(--msr-spacing) * 8)}.msr\\:h-\\[3px\\]{height:3px}.msr\\:h-\\[14px\\]{height:14px}.msr\\:h-auto{height:auto}.msr\\:h-full{height:100%}.msr\\:h-max{height:max-content}.msr\\:h-px{height:1px}.msr\\:max-h-32{max-height:calc(var(--msr-spacing) * 32)}.msr\\:max-h-36{max-height:calc(var(--msr-spacing) * 36)}.msr\\:max-h-48{max-height:calc(var(--msr-spacing) * 48)}.msr\\:max-h-\\[28rem\\]{max-height:28rem}.msr\\:max-h-\\[120px\\]{max-height:120px}.msr\\:max-h-full{max-height:100%}.msr\\:min-h-0{min-height:calc(var(--msr-spacing) * 0)}.msr\\:min-h-6{min-height:calc(var(--msr-spacing) * 6)}.msr\\:min-h-8{min-height:calc(var(--msr-spacing) * 8)}.msr\\:min-h-\\[4\\.5rem\\]{min-height:4.5rem}.msr\\:w-0{width:calc(var(--msr-spacing) * 0)}.msr\\:w-0\\.5{width:calc(var(--msr-spacing) * .5)}.msr\\:w-4{width:calc(var(--msr-spacing) * 4)}.msr\\:w-5{width:calc(var(--msr-spacing) * 5)}.msr\\:w-6{width:calc(var(--msr-spacing) * 6)}.msr\\:w-8{width:calc(var(--msr-spacing) * 8)}.msr\\:w-9{width:calc(var(--msr-spacing) * 9)}.msr\\:w-12{width:calc(var(--msr-spacing) * 12)}.msr\\:w-32{width:calc(var(--msr-spacing) * 32)}.msr\\:w-40{width:calc(var(--msr-spacing) * 40)}.msr\\:w-44{width:calc(var(--msr-spacing) * 44)}.msr\\:w-48{width:calc(var(--msr-spacing) * 48)}.msr\\:w-52{width:calc(var(--msr-spacing) * 52)}.msr\\:w-60{width:calc(var(--msr-spacing) * 60)}.msr\\:w-64{width:calc(var(--msr-spacing) * 64)}.msr\\:w-72{width:calc(var(--msr-spacing) * 72)}.msr\\:w-\\[18px\\]{width:18px}.msr\\:w-\\[22rem\\]{width:22rem}.msr\\:w-\\[26px\\]{width:26px}.msr\\:w-\\[36rem\\]{width:36rem}.msr\\:w-\\[220px\\]{width:220px}.msr\\:w-auto{width:auto}.msr\\:w-full{width:100%}.msr\\:w-max{width:max-content}.msr\\:w-px{width:1px}.msr\\:max-w-\\[180px\\]{max-width:180px}.msr\\:max-w-\\[calc\\(100vw-16px\\)\\]{max-width:calc(100vw - 16px)}.msr\\:max-w-\\[calc\\(100vw-24px\\)\\]{max-width:calc(100vw - 24px)}.msr\\:max-w-\\[min\\(100vw-16px\\,15rem\\)\\]{max-width:min(100vw - 16px,15rem)}.msr\\:max-w-\\[min\\(200px\\,calc\\(100vw-24px\\)\\)\\]{max-width:min(200px,100vw - 24px)}.msr\\:max-w-\\[min\\(240px\\,calc\\(100vw-16px\\)\\)\\]{max-width:min(240px,100vw - 16px)}.msr\\:max-w-full{max-width:100%}.msr\\:max-w-none{max-width:none}.msr\\:min-w-0{min-width:calc(var(--msr-spacing) * 0)}.msr\\:min-w-32{min-width:calc(var(--msr-spacing) * 32)}.msr\\:min-w-36{min-width:calc(var(--msr-spacing) * 36)}.msr\\:min-w-44{min-width:calc(var(--msr-spacing) * 44)}.msr\\:flex-1{flex:1}.msr\\:flex-none{flex:none}.msr\\:shrink-0{flex-shrink:0}.msr\\:-translate-x-1\\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.msr\\:-translate-y-1\\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.msr\\:-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.msr\\:-rotate-90{rotate:-90deg}.msr\\:rotate-45{rotate:45deg}.msr\\:rotate-90{rotate:90deg}.msr\\:animate-\\[mesurer-screenshot-preview_5\\.16s_ease-out_both\\]{animation:5.16s ease-out both mesurer-screenshot-preview}.msr\\:cursor-crosshair{cursor:crosshair}.msr\\:cursor-default{cursor:default}.msr\\:cursor-ew-resize{cursor:ew-resize}.msr\\:cursor-move{cursor:move}.msr\\:cursor-nesw-resize{cursor:nesw-resize}.msr\\:cursor-ns-resize{cursor:ns-resize}.msr\\:cursor-nwse-resize{cursor:nwse-resize}.msr\\:cursor-pointer{cursor:pointer}.msr\\:cursor-text{cursor:text}.msr\\:touch-none{touch-action:none}.msr\\:resize-none{resize:none}.msr\\:list-none{list-style-type:none}.msr\\:appearance-none{appearance:none}.msr\\:grid-cols-\\[44px_minmax\\(0\\,1fr\\)\\]{grid-template-columns:44px minmax(0,1fr)}.msr\\:grid-cols-\\[56px_minmax\\(0\\,1fr\\)\\]{grid-template-columns:56px minmax(0,1fr)}.msr\\:grid-cols-\\[78px_150px\\]{grid-template-columns:78px 150px}.msr\\:grid-cols-\\[78px_minmax\\(0\\,1fr\\)\\]{grid-template-columns:78px minmax(0,1fr)}.msr\\:flex-col{flex-direction:column}.msr\\:items-baseline{align-items:baseline}.msr\\:items-center{align-items:center}.msr\\:items-start{align-items:flex-start}.msr\\:items-stretch{align-items:stretch}.msr\\:justify-between{justify-content:space-between}.msr\\:justify-center{justify-content:center}.msr\\:justify-end{justify-content:flex-end}.msr\\:gap-0{gap:calc(var(--msr-spacing) * 0)}.msr\\:gap-0\\.5{gap:calc(var(--msr-spacing) * .5)}.msr\\:gap-1{gap:calc(var(--msr-spacing) * 1)}.msr\\:gap-1\\.5{gap:calc(var(--msr-spacing) * 1.5)}.msr\\:gap-2{gap:calc(var(--msr-spacing) * 2)}.msr\\:gap-\\[2px\\]{gap:2px}.msr\\:gap-px{gap:1px}.msr\\:self-center{align-self:center}.msr\\:justify-self-end{justify-self:flex-end}.msr\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.msr\\:overflow-hidden{overflow:hidden}.msr\\:overflow-visible{overflow:visible}.msr\\:overflow-y-auto{overflow-y:auto}.msr\\:rounded{border-radius:.25rem}.msr\\:rounded-\\[2px\\]{border-radius:2px}.msr\\:rounded-\\[3px\\]{border-radius:3px}.msr\\:rounded-\\[4px\\]{border-radius:4px}.msr\\:rounded-\\[10px\\]{border-radius:10px}.msr\\:rounded-full{border-radius:3.40282e38px}.msr\\:rounded-lg{border-radius:var(--msr-radius-lg)}.msr\\:rounded-md{border-radius:var(--msr-radius-md)}.msr\\:rounded-none{border-radius:0}.msr\\:border{border-style:var(--tw-border-style);border-width:1px}.msr\\:border-0{border-style:var(--tw-border-style);border-width:0}.msr\\:border-2{border-style:var(--tw-border-style);border-width:2px}.msr\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.msr\\:border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.msr\\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.msr\\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.msr\\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.msr\\:border-dashed{--tw-border-style:dashed;border-style:dashed}.msr\\:border-dotted{--tw-border-style:dotted;border-style:dotted}.msr\\:border-solid{--tw-border-style:solid;border-style:solid}.msr\\:border-\\[\\#0d99ff\\]{border-color:#0d99ff}.msr\\:border-\\[\\#2563eb\\]\\/70{border-color:oklab(54.615% -.026671 -.213549/.7)}.msr\\:border-\\[var\\(--msr-danger-border\\)\\]{border-color:var(--msr-danger-border)}.msr\\:border-black\\/10{border-color:var(--msr-color-black)}@supports (color:color-mix(in lab, red, red)){.msr\\:border-black\\/10{border-color:color-mix(in oklab, var(--msr-color-black) 10%, transparent)}}.msr\\:border-ink-100{border-color:var(--msr-color-ink-100)}.msr\\:border-ink-200{border-color:var(--msr-color-ink-200)}.msr\\:border-ink-300{border-color:var(--msr-color-ink-300)}.msr\\:border-ink-500,.msr\\:border-ink-500\\/30{border-color:var(--msr-color-ink-500)}@supports (color:color-mix(in lab, red, red)){.msr\\:border-ink-500\\/30{border-color:color-mix(in oklab, var(--msr-color-ink-500) 30%, transparent)}}.msr\\:border-ink-700{border-color:var(--msr-color-ink-700)}.msr\\:border-transparent{border-color:#0000}.msr\\:border-white{border-color:var(--msr-color-white)}.msr\\:\\!bg-black\\/50{background-color:var(--msr-color-black)!important}@supports (color:color-mix(in lab, red, red)){.msr\\:\\!bg-black\\/50{background-color:color-mix(in oklab, var(--msr-color-black) 50%, transparent)!important}}.msr\\:bg-\\[\\#0d99ff\\]{background-color:#0d99ff}.msr\\:bg-\\[\\#0d99ff\\]\\/8{background-color:oklab(66.9841% -.0648249 -.170866/.08)}.msr\\:bg-\\[\\#0d99ff\\]\\/10{background-color:oklab(66.9841% -.0648249 -.170866/.1)}.msr\\:bg-\\[\\#2563eb\\]{background-color:#2563eb}.msr\\:bg-\\[var\\(--msr-danger-solid-bg\\)\\]{background-color:var(--msr-danger-solid-bg)}.msr\\:bg-black,.msr\\:bg-black\\/4{background-color:var(--msr-color-black)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-black\\/4{background-color:color-mix(in oklab, var(--msr-color-black) 4%, transparent)}}.msr\\:bg-black\\/40{background-color:var(--msr-color-black)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-black\\/40{background-color:color-mix(in oklab, var(--msr-color-black) 40%, transparent)}}.msr\\:bg-black\\/80{background-color:var(--msr-color-black)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-black\\/80{background-color:color-mix(in oklab, var(--msr-color-black) 80%, transparent)}}.msr\\:bg-ink-50{background-color:var(--msr-color-ink-50)}.msr\\:bg-ink-100{background-color:var(--msr-color-ink-100)}.msr\\:bg-ink-200{background-color:var(--msr-color-ink-200)}.msr\\:bg-ink-300{background-color:var(--msr-color-ink-300)}.msr\\:bg-ink-500\\/50{background-color:var(--msr-color-ink-500)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-ink-500\\/50{background-color:color-mix(in oklab, var(--msr-color-ink-500) 50%, transparent)}}.msr\\:bg-ink-900,.msr\\:bg-ink-900\\/90{background-color:var(--msr-color-ink-900)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-ink-900\\/90{background-color:color-mix(in oklab, var(--msr-color-ink-900) 90%, transparent)}}.msr\\:bg-transparent{background-color:#0000}.msr\\:bg-white,.msr\\:bg-white\\/5{background-color:var(--msr-color-white)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-white\\/5{background-color:color-mix(in oklab, var(--msr-color-white) 5%, transparent)}}.msr\\:object-contain{object-fit:contain}.msr\\:p-0{padding:calc(var(--msr-spacing) * 0)}.msr\\:p-1{padding:calc(var(--msr-spacing) * 1)}.msr\\:p-2{padding:calc(var(--msr-spacing) * 2)}.msr\\:p-3{padding:calc(var(--msr-spacing) * 3)}.msr\\:p-\\[2px\\]{padding:2px}.msr\\:p-px{padding:1px}.msr\\:px-0{padding-inline:calc(var(--msr-spacing) * 0)}.msr\\:px-0\\.5{padding-inline:calc(var(--msr-spacing) * .5)}.msr\\:px-1{padding-inline:calc(var(--msr-spacing) * 1)}.msr\\:px-1\\.5{padding-inline:calc(var(--msr-spacing) * 1.5)}.msr\\:px-2{padding-inline:calc(var(--msr-spacing) * 2)}.msr\\:px-3{padding-inline:calc(var(--msr-spacing) * 3)}.msr\\:py-0\\.5{padding-block:calc(var(--msr-spacing) * .5)}.msr\\:py-1{padding-block:calc(var(--msr-spacing) * 1)}.msr\\:py-1\\.5{padding-block:calc(var(--msr-spacing) * 1.5)}.msr\\:py-2{padding-block:calc(var(--msr-spacing) * 2)}.msr\\:py-6{padding-block:calc(var(--msr-spacing) * 6)}.msr\\:pt-1\\.5{padding-top:calc(var(--msr-spacing) * 1.5)}.msr\\:pt-8{padding-top:calc(var(--msr-spacing) * 8)}.msr\\:pr-1\\.5{padding-right:calc(var(--msr-spacing) * 1.5)}.msr\\:pr-2{padding-right:calc(var(--msr-spacing) * 2)}.msr\\:pr-6{padding-right:calc(var(--msr-spacing) * 6)}.msr\\:pb-1{padding-bottom:calc(var(--msr-spacing) * 1)}.msr\\:pb-2{padding-bottom:calc(var(--msr-spacing) * 2)}.msr\\:pl-1{padding-left:calc(var(--msr-spacing) * 1)}.msr\\:pl-1\\.5{padding-left:calc(var(--msr-spacing) * 1.5)}.msr\\:pl-3{padding-left:calc(var(--msr-spacing) * 3)}.msr\\:pl-6{padding-left:calc(var(--msr-spacing) * 6)}.msr\\:text-center{text-align:center}.msr\\:text-left{text-align:left}.msr\\:text-right{text-align:right}.msr\\:font-mono{font-family:var(--msr-font-mono)}.msr\\:text-\\[9px\\]{font-size:9px}.msr\\:text-\\[10px\\]{font-size:10px}.msr\\:text-\\[11px\\]{font-size:11px}.msr\\:text-\\[12px\\]{font-size:12px}.msr\\:text-\\[13px\\]{font-size:13px}.msr\\:text-\\[16px\\]{font-size:16px}.msr\\:leading-4{--tw-leading:calc(var(--msr-spacing) * 4);line-height:calc(var(--msr-spacing) * 4)}.msr\\:leading-5{--tw-leading:calc(var(--msr-spacing) * 5);line-height:calc(var(--msr-spacing) * 5)}.msr\\:leading-6{--tw-leading:calc(var(--msr-spacing) * 6);line-height:calc(var(--msr-spacing) * 6)}.msr\\:leading-none{--tw-leading:1;line-height:1}.msr\\:font-medium{--tw-font-weight:var(--msr-font-weight-medium);font-weight:var(--msr-font-weight-medium)}.msr\\:font-normal{--tw-font-weight:var(--msr-font-weight-normal);font-weight:var(--msr-font-weight-normal)}.msr\\:font-semibold{--tw-font-weight:var(--msr-font-weight-semibold);font-weight:var(--msr-font-weight-semibold)}.msr\\:text-pretty{text-wrap:pretty}.msr\\:break-words{overflow-wrap:break-word}.msr\\:whitespace-normal{white-space:normal}.msr\\:whitespace-nowrap{white-space:nowrap}.msr\\:whitespace-pre{white-space:pre}.msr\\:whitespace-pre-wrap{white-space:pre-wrap}.msr\\:text-\\[\\#64748b\\]{color:#64748b}.msr\\:text-\\[var\\(--msr-danger-solid-text\\)\\]{color:var(--msr-danger-solid-text)}.msr\\:text-\\[var\\(--msr-danger-text\\)\\]{color:var(--msr-danger-text)}.msr\\:text-ink-50{color:var(--msr-color-ink-50)}.msr\\:text-ink-500{color:var(--msr-color-ink-500)}.msr\\:text-ink-700{color:var(--msr-color-ink-700)}.msr\\:text-ink-900{color:var(--msr-color-ink-900)}.msr\\:text-red-600{color:var(--msr-color-red-600)}.msr\\:text-white,.msr\\:text-white\\/60{color:var(--msr-color-white)}@supports (color:color-mix(in lab, red, red)){.msr\\:text-white\\/60{color:color-mix(in oklab, var(--msr-color-white) 60%, transparent)}}.msr\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.msr\\:underline-offset-2{text-underline-offset:2px}.msr\\:caret-\\[\\#0d99ff\\]{caret-color:#0d99ff}.msr\\:opacity-0{opacity:0}.msr\\:opacity-100{opacity:1}.msr\\:shadow-\\[0_0_0_1px_rgba\\(0\\,0\\,0\\,0\\.25\\)\\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:shadow-\\[0_1px_2px_rgb\\(0_0_0_\\/_0\\.06\\)\\]{--tw-shadow:0 1px 2px var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:shadow-floating{--tw-shadow:0 0 .4px var(--tw-shadow-color,#00000038), 0 6px 18px var(--tw-shadow-color,#00000008), 0 3px 9px var(--tw-shadow-color,#0000000f), 0 1px 1px var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:outline,.msr\\:outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.msr\\:outline-\\[\\#0d99ff\\]{outline-color:#0d99ff}.msr\\:drop-shadow-\\[0_1px_2px_rgba\\(0\\,0\\,0\\,0\\.8\\)\\]{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#000c));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.msr\\:transition-\\[height\\]{transition-property:height;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-\\[left\\]{transition-property:left;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-\\[max-height\\]{transition-property:max-height;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-\\[width\\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-none{transition-property:none}.msr\\:duration-150{--tw-duration:.15s;transition-duration:.15s}.msr\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.msr\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.msr\\:ease-\\[cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{--tw-ease:cubic-bezier(.22,1,.36,1);transition-timing-function:cubic-bezier(.22,1,.36,1)}.msr\\:ease-\\[ease\\]{--tw-ease:ease;transition-timing-function:ease}.msr\\:will-change-transform{will-change:transform}.msr\\:outline-none{--tw-outline-style:none;outline-style:none}.msr\\:select-none{-webkit-user-select:none;user-select:none}.msr\\:select-text{-webkit-user-select:text;user-select:text}@media (hover:hover){.msr\\:group-hover\\:h-3:is(:where(.msr\\:group):hover *){height:calc(var(--msr-spacing) * 3)}.msr\\:group-hover\\:opacity-100:is(:where(.msr\\:group):hover *){opacity:1}.msr\\:group-hover\\/video\\:pointer-events-auto:is(:where(.msr\\:group\\/video):hover *){pointer-events:auto}.msr\\:group-hover\\/video\\:opacity-100:is(:where(.msr\\:group\\/video):hover *){opacity:1}}.msr\\:group-focus-visible\\:h-3:is(:where(.msr\\:group):focus-visible *){height:calc(var(--msr-spacing) * 3)}.msr\\:focus-within\\:pointer-events-auto:focus-within{pointer-events:auto}.msr\\:focus-within\\:relative:focus-within{position:relative}.msr\\:focus-within\\:z-\\[1\\]:focus-within{z-index:1}.msr\\:focus-within\\:rounded-l-\\[5px\\]:focus-within{border-top-left-radius:5px;border-bottom-left-radius:5px}.msr\\:focus-within\\:rounded-r-\\[5px\\]:focus-within{border-top-right-radius:5px;border-bottom-right-radius:5px}.msr\\:focus-within\\:border-\\[\\#0d99ff\\]:focus-within{border-color:#0d99ff}.msr\\:focus-within\\:opacity-100:focus-within{opacity:1}.msr\\:focus-within\\:shadow-\\[0_0_0_1px_\\#0d99ff\\]:focus-within{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#0d99ff);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}@media (hover:hover){.msr\\:hover\\:border-ink-200:hover{border-color:var(--msr-color-ink-200)}.msr\\:hover\\:\\!bg-black\\/60:hover{background-color:var(--msr-color-black)!important}@supports (color:color-mix(in lab, red, red)){.msr\\:hover\\:\\!bg-black\\/60:hover{background-color:color-mix(in oklab, var(--msr-color-black) 60%, transparent)!important}}.msr\\:hover\\:bg-\\[\\#0d99ff\\]:hover{background-color:#0d99ff}.msr\\:hover\\:bg-\\[\\#087dcc\\]:hover{background-color:#087dcc}.msr\\:hover\\:bg-\\[var\\(--msr-danger-bg\\)\\]:hover{background-color:var(--msr-danger-bg)}.msr\\:hover\\:bg-\\[var\\(--msr-danger-solid-hover\\)\\]:hover{background-color:var(--msr-danger-solid-hover)}.msr\\:hover\\:bg-black\\/4:hover{background-color:var(--msr-color-black)}@supports (color:color-mix(in lab, red, red)){.msr\\:hover\\:bg-black\\/4:hover{background-color:color-mix(in oklab, var(--msr-color-black) 4%, transparent)}}.msr\\:hover\\:bg-ink-50:hover{background-color:var(--msr-color-ink-50)}.msr\\:hover\\:bg-ink-100:hover{background-color:var(--msr-color-ink-100)}.msr\\:hover\\:bg-ink-200:hover,.msr\\:hover\\:bg-ink-200\\/50:hover{background-color:var(--msr-color-ink-200)}@supports (color:color-mix(in lab, red, red)){.msr\\:hover\\:bg-ink-200\\/50:hover{background-color:color-mix(in oklab, var(--msr-color-ink-200) 50%, transparent)}}.msr\\:hover\\:bg-red-50:hover{background-color:var(--msr-color-red-50)}.msr\\:hover\\:bg-transparent:hover{background-color:#0000}.msr\\:hover\\:text-ink-700:hover{color:var(--msr-color-ink-700)}.msr\\:hover\\:text-ink-900:hover{color:var(--msr-color-ink-900)}.msr\\:hover\\:text-white:hover{color:var(--msr-color-white)}.msr\\:hover\\:underline:hover{text-decoration-line:underline}.msr\\:hover\\:focus-within\\:border-\\[\\#0d99ff\\]:hover:focus-within{border-color:#0d99ff}}.msr\\:focus\\:border-\\[\\#0d99ff\\]:focus{border-color:#0d99ff}.msr\\:focus\\:shadow-\\[inset_0_0_0_1px_\\#0d99ff\\]:focus{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,#0d99ff);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus\\:shadow-\\[inset_0_0_0_1px_var\\(--msr-accent\\)\\]:focus{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--msr-accent));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.msr\\:focus-visible\\:bg-ink-100:focus-visible{background-color:var(--msr-color-ink-100)}.msr\\:focus-visible\\:opacity-100:focus-visible{opacity:1}.msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_var\\(--color-ink-700\\)\\]:focus-visible{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--color-ink-700));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_var\\(--msr-accent\\)\\]:focus-visible{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--msr-accent));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_var\\(--msr-danger-text\\)\\]:focus-visible{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--msr-danger-text));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:ring-\\[var\\(--msr-accent\\)\\]\\/25:focus-visible{--tw-ring-color:var(--msr-accent)}@supports (color:color-mix(in lab, red, red)){.msr\\:focus-visible\\:ring-\\[var\\(--msr-accent\\)\\]\\/25:focus-visible{--tw-ring-color:color-mix(in oklab, var(--msr-accent) 25%, transparent)}}.msr\\:focus-visible\\:outline:focus-visible,.msr\\:focus-visible\\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.msr\\:focus-visible\\:outline-offset-1:focus-visible{outline-offset:1px}.msr\\:focus-visible\\:outline-ink-500:focus-visible{outline-color:var(--msr-color-ink-500)}.msr\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.msr\\:focus-visible\\:ring-inset:focus-visible{--tw-ring-inset:inset}.msr\\:disabled\\:cursor-default:disabled{cursor:default}.msr\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.msr\\:disabled\\:opacity-40:disabled{opacity:.4}@media (prefers-reduced-motion:reduce){.msr\\:motion-reduce\\:transition-none{transition-property:none}}.msr\\:rounded-control{border-radius:var(--msr-radius-control)}.msr\\:rounded-wide-card{border-radius:var(--msr-radius-wide-card)}}:root,:host{--color-ink-50:#f8fafc;--color-ink-100:#f1f5f9;--color-ink-200:#e2e8f0;--color-ink-300:#cbd5e1;--color-ink-500:#64748b;--color-ink-700:#334155;--color-ink-900:#18181b}:host{all:initial;color-scheme:light dark;color:var(--msr-color-ink-900);letter-spacing:normal;--msr-spacing:4px;direction:ltr;font-family:ui-sans-serif,system-ui,sans-serif;font-size:16px;font-weight:400;line-height:1.5;display:block}.mesurer-root{--msr-accent:#0d99ff;--msr-surface:#fff;--msr-surface-raised:#fff;--msr-surface-muted:var(--msr-color-ink-50);--msr-content:var(--msr-color-ink-900);--msr-color-white:#fff;--msr-color-black:#000;--msr-danger-bg:#fef2f2;--msr-danger-border:#fecaca;--msr-danger-text:#dc2626;--msr-danger-solid-bg:#dc2626;--msr-danger-solid-hover:#b91c1c;--msr-danger-solid-text:#fff;--msr-control-thumb:#fff;--msr-slider-track:#0f172a29;--msr-shadow-toolbar:drop-shadow(0 0 .4px #00000038) drop-shadow(0 6px 18px #00000008) drop-shadow(0 3px 9px #0000000f) drop-shadow(0 1px 1px #0000000f);--msr-shadow-floating:0 0 .4px #00000038, 0 6px 18px #00000008, 0 3px 9px #0000000f, 0 1px 1px #0000000f;--msr-shadow-select-menu:var(--msr-shadow-floating);--msr-comment-menu-surface:var(--msr-surface-raised);--msr-shadow-comment-menu:var(--msr-shadow-select-menu);color:var(--msr-content);color-scheme:light}.mesurer-root [class~=msr\\:bg-white]{background-color:var(--msr-surface)!important}.mesurer-root [class~="msr:bg-[#0d99ff]"],.mesurer-root [class~="msr:hover:bg-[#0d99ff]"]:hover{background-color:var(--msr-accent)!important}.mesurer-root [class~="msr:border-[#0d99ff]"]{border-color:var(--msr-accent)!important}.mesurer-root [class~="msr:bg-[#0d99ff]/8"]{background-color:var(--msr-accent)!important}@supports (color:color-mix(in lab, red, red)){.mesurer-root [class~="msr:bg-[#0d99ff]/8"]{background-color:color-mix(in srgb, var(--msr-accent) 8%, transparent)!important}}.mesurer-root [class~=msr\\:text-black]{color:var(--msr-content)!important}.mesurer-root .mesurer-control-thumb{background-color:var(--msr-control-thumb)!important}.mesurer-root button{-webkit-user-select:none;user-select:none;cursor:default!important}.mesurer-root .mesurer-settings-button-ghost{opacity:.7}.mesurer-root .mesurer-settings-button-ghost:hover,.mesurer-root .mesurer-settings-button-ghost:focus-visible{opacity:1}.mesurer-root [data-mesurer-recording-timeline] .mesurer-recording-track-rail{background-color:var(--msr-color-ink-200)}.mesurer-root [data-mesurer-recording-timeline] .mesurer-recording-track-clip{background-color:var(--msr-color-ink-300)}.mesurer-root [data-mesurer-recording-timeline] .mesurer-recording-playhead,.mesurer-root [data-mesurer-recording-timeline] .mesurer-recording-trim-bar{background-color:var(--msr-color-ink-900)}.mesurer-root .mesurer-switch-thumb[data-checked=false]{background-color:var(--msr-color-ink-200)!important}.mesurer-root [class~="msr:hover:bg-black/4"]:hover,.mesurer-root [class~="msr:hover:bg-black/5"]:hover{background-color:var(--msr-content)!important}@supports (color:color-mix(in lab, red, red)){.mesurer-root [class~="msr:hover:bg-black/4"]:hover,.mesurer-root [class~="msr:hover:bg-black/5"]:hover{background-color:color-mix(in srgb, var(--msr-content) 6%, transparent)!important}}.mesurer-root .mesurer-menu-surface,.mesurer-root .mesurer-color-picker{border-radius:9px}.mesurer-root .mesurer-menu-surface,.mesurer-root .mesurer-color-picker,.mesurer-root .mesurer-comment-card,.mesurer-root .mesurer-comment-hover-card,.mesurer-root .mesurer-comment-delete-confirmation{color:var(--msr-content);background-color:var(--msr-surface-raised)!important}.mesurer-root .mesurer-section-divider{background-color:var(--msr-color-ink-200)!important}.mesurer-root .mesurer-settings-select-menu{box-shadow:var(--msr-shadow-select-menu)}.mesurer-root .mesurer-comment-overflow-menu,.mesurer-root .mesurer-comment-delete-confirmation{box-shadow:var(--msr-shadow-comment-menu);background-color:var(--msr-comment-menu-surface)!important}.mesurer-root .mesurer-comment-menu-item:hover{background-color:var(--msr-color-ink-200)!important}.mesurer-root .mesurer-comment-menu-danger{color:var(--msr-danger-text)!important}.mesurer-root .mesurer-comment-menu-danger:hover{background-color:var(--msr-danger-bg)!important}.mesurer-root .mesurer-settings-button-default{background-color:#0000}.mesurer-root .mesurer-settings-button-default:hover{background-color:var(--msr-color-ink-50)}.mesurer-root[data-theme=dark] .mesurer-control-shell{background-color:var(--msr-color-ink-100)}.mesurer-root[data-theme=dark] .mesurer-settings-panel select,.mesurer-root[data-theme=dark] .mesurer-settings-select,.mesurer-root[data-theme=dark] .mesurer-settings-select-menu{background-color:var(--msr-surface-raised)!important;border-color:var(--msr-color-ink-200)!important}.mesurer-root[data-theme=dark] .mesurer-settings-button-default:hover{background-color:var(--msr-surface)!important}@media (prefers-color-scheme:dark){.mesurer-root[data-theme=system] .mesurer-control-shell{background-color:var(--msr-color-ink-100)}.mesurer-root[data-theme=system] .mesurer-settings-panel select,.mesurer-root[data-theme=system] .mesurer-settings-select,.mesurer-root[data-theme=system] .mesurer-settings-select-menu{background-color:var(--msr-surface-raised)!important;border-color:var(--msr-color-ink-200)!important}.mesurer-root[data-theme=system] .mesurer-settings-button-default:hover{background-color:var(--msr-surface)!important}}.mesurer-root[data-theme=dark] .mesurer-switch-track[data-checked=false]{background-color:var(--msr-color-ink-100)!important}@media (prefers-color-scheme:dark){.mesurer-root[data-theme=system] .mesurer-switch-track[data-checked=false]{background-color:var(--msr-color-ink-100)!important}}.mesurer-root .mesurer-settings-panel .mesurer-control-focus :is(input,select):focus{box-shadow:none!important;outline:none!important}.mesurer-root[data-theme=dark]{--msr-accent:#0c8ce9;--msr-color-red-50:#3f2020;--msr-color-red-200:#7f3f46;--msr-color-red-600:#f87171;--msr-color-red-700:#fca5a5;--msr-danger-bg:#3f2020;--msr-danger-border:#7f3f46;--msr-danger-text:#f87171;--msr-danger-solid-bg:#c95058;--msr-danger-solid-hover:#b7424b;--msr-danger-solid-text:#f5f5f5;--msr-color-ink-50:#3a3a3a;--msr-color-ink-100:#414141;--msr-color-ink-200:#4a4a4a;--msr-color-ink-300:#5a5a5a;--msr-color-ink-500:#a0a0a0;--msr-color-ink-700:#dedede;--msr-color-ink-900:#f5f5f5;--msr-surface:#323232;--msr-surface-raised:#3a3a3a;--msr-surface-muted:#3a3a3a;--msr-color-white:#f5f5f5;--msr-color-black:#171717;--msr-control-thumb:#f4f4f5;--msr-slider-track:#f5f5f53d;--msr-shadow-toolbar:drop-shadow(0 0 .4px lch(100% 0 0/.1)) drop-shadow(0 3px 8px lch(0% 0 0/.125)) drop-shadow(0 2px 5px lch(0% 0 0/.125)) drop-shadow(0 1px 1px lch(0% 0 0/.125));--msr-shadow-floating:0 0 .4px lch(100% 0 0/.1), 0 3px 8px lch(0% 0 0/.125), 0 2px 5px lch(0% 0 0/.125), 0 1px 1px lch(0% 0 0/.125);--msr-shadow-select-menu:0 0 0 .4px lch(100% 0 0/.14), 0 4px 12px lch(0% 0 0/.22), 0 1px 3px lch(0% 0 0/.18);--msr-comment-menu-surface:#323232;--msr-shadow-comment-menu:0 0 0 .5px lch(100% 0 0/.16), 0 5px 14px lch(0% 0 0/.26), 0 1px 3px lch(0% 0 0/.18);color-scheme:dark}@media (prefers-color-scheme:dark){.mesurer-root[data-theme=system]{--msr-accent:#0c8ce9;--msr-color-red-50:#3f2020;--msr-color-red-200:#7f3f46;--msr-color-red-600:#f87171;--msr-color-red-700:#fca5a5;--msr-danger-bg:#3f2020;--msr-danger-border:#7f3f46;--msr-danger-text:#f87171;--msr-danger-solid-bg:#c95058;--msr-danger-solid-hover:#b7424b;--msr-danger-solid-text:#f5f5f5;--msr-color-ink-50:#3a3a3a;--msr-color-ink-100:#414141;--msr-color-ink-200:#4a4a4a;--msr-color-ink-300:#5a5a5a;--msr-color-ink-500:#a0a0a0;--msr-color-ink-700:#dedede;--msr-color-ink-900:#f5f5f5;--msr-surface:#323232;--msr-surface-raised:#3a3a3a;--msr-surface-muted:#3a3a3a;--msr-color-white:#f5f5f5;--msr-color-black:#171717;--msr-control-thumb:#f4f4f5;--msr-slider-track:#f5f5f53d;--msr-shadow-toolbar:drop-shadow(0 0 .4px lch(100% 0 0/.1)) drop-shadow(0 3px 8px lch(0% 0 0/.125)) drop-shadow(0 2px 5px lch(0% 0 0/.125)) drop-shadow(0 1px 1px lch(0% 0 0/.125));--msr-shadow-floating:0 0 .4px lch(100% 0 0/.1), 0 3px 8px lch(0% 0 0/.125), 0 2px 5px lch(0% 0 0/.125), 0 1px 1px lch(0% 0 0/.125);--msr-shadow-select-menu:0 0 0 .4px lch(100% 0 0/.14), 0 4px 12px lch(0% 0 0/.22), 0 1px 3px lch(0% 0 0/.18);--msr-comment-menu-surface:#323232;--msr-shadow-comment-menu:0 0 0 .5px lch(100% 0 0/.16), 0 5px 14px lch(0% 0 0/.26), 0 1px 3px lch(0% 0 0/.18);color-scheme:dark}}.mesurer-color-picker,.mesurer-color-picker *,.mesurer-root [data-mesurer-inspect-info-card],.mesurer-root [data-mesurer-inspect-info-card] *,[data-mesurer-overlay][data-mesurer-inspect],[data-mesurer-overlay][data-mesurer-inspect] *{cursor:default!important}.mesurer-root button[data-mesurer-resize-cursor],.mesurer-root button[data-mesurer-resize-cursor] *,[data-mesurer-overlay][data-mesurer-inspect] [data-mesurer-resize-cursor],[data-mesurer-overlay][data-mesurer-inspect] [data-mesurer-resize-cursor] *{cursor:var(--msr-resize-cursor)!important}html[data-mesurer-resize-cursor],html[data-mesurer-resize-cursor] *,html[data-mesurer-resize-cursor] [data-mesurer-overlay][data-mesurer-inspect],html[data-mesurer-resize-cursor] [data-mesurer-overlay][data-mesurer-inspect] *,.mesurer-root[data-mesurer-resize-cursor],.mesurer-root[data-mesurer-resize-cursor] *{cursor:var(--msr-resize-cursor-lock)!important}.mesurer-root,.mesurer-root *,.mesurer-root :before,.mesurer-root :after{box-sizing:border-box}.mesurer-toolbar-motion{--msr-toolbar-motion:.2s ease;z-index:0;isolation:isolate;width:max-content;max-width:100%;display:block;position:relative}.mesurer-layout-guides,.mesurer-layout-guides-layer,.mesurer-layout-guides-grid{pointer-events:none;position:absolute;inset:0}.mesurer-layout-guides{z-index:2;overflow:hidden}.mesurer-toolbar-chrome{z-index:0;background:var(--msr-surface);width:100%;filter:var(--msr-shadow-toolbar);transform-origin:0;pointer-events:none;border-radius:9px;position:absolute;inset:0 auto 0 0;overflow:visible}.mesurer-toolbar-clip{z-index:1;isolation:isolate;transform-origin:0;position:relative;overflow:visible}.mesurer-toolbar-motion[data-resizing=collapse] .mesurer-toolbar-clip{overflow:hidden}.mesurer-toolbar-motion[data-resizing] .mesurer-toolbar-tooltips{visibility:hidden!important}.mesurer-toolbar-surface{transform-origin:0;padding:0;position:relative}.mesurer-toolbar-divider{background:var(--msr-color-ink-200);flex:none;align-self:stretch;width:1px;margin:0}.mesurer-toolbar-minimize-stage{min-width:0;width:var(--msr-expanded-w,auto);flex:none;overflow:visible}.mesurer-toolbar-minimize-stage[data-minimized=true]{width:var(--msr-icon-w,auto);overflow:hidden}.mesurer-toolbar-motion[data-resizing=collapse] .mesurer-toolbar-minimize-stage{overflow:hidden}.mesurer-toolbar-minimize-stage[data-minimized=true] .mesurer-toolbar-minimize-track{transform:translateX(calc(-1 * var(--msr-expanded-w,0px)))}.mesurer-toolbar-minimize-stage:has([role=dialog]),.mesurer-toolbar-minimize-stage:has([role=menu]),.mesurer-toolbar-minimize-stage:has(.mesurer-screenshot-preview){overflow:visible}.mesurer-toolbar-minimize-track{pointer-events:none;flex:none;display:flex;transform:translate(0)}.mesurer-toolbar-minimize-slot{flex:none}.mesurer-toolbar-minimize-slot[data-slot=expanded]{width:var(--msr-expanded-w,auto)}.mesurer-toolbar-minimize-slot[data-slot=icon]{width:auto}.mesurer-toolbar-minimize-slot:not([data-open=true]){pointer-events:none}.mesurer-toolbar-minimize-slot[data-open=true]{pointer-events:auto}.mesurer-toolbar-motion:not([data-resizing=collapse]) .mesurer-toolbar-minimize-slot[data-slot=icon]:not([data-open=true]){visibility:hidden}.mesurer-toolbar-restore svg{transform:translate(-.5px,.5px)}.mesurer-toolbar-tool-stage{min-width:0;width:var(--msr-inspect-w,auto);flex:none;overflow:hidden}.mesurer-toolbar-tool-stage[data-group=annotate]{width:var(--msr-annotate-w,auto)}.mesurer-toolbar-tool-stage[data-group=annotate] .mesurer-toolbar-tool-track{transform:translateX(calc(-1 * var(--msr-inspect-w,0px)))}.mesurer-toolbar-tool-stage:has([role=menu]),.mesurer-toolbar-tool-stage:has([role=dialog]){overflow:visible}.mesurer-toolbar-motion[data-resizing=true] .mesurer-toolbar-tool-stage{overflow:hidden}.mesurer-toolbar-tool-track{flex:none;display:flex;transform:translate(0)}.mesurer-toolbar-motion[data-ready=true] .mesurer-toolbar-tool-switch-pill{transition:transform var(--msr-toolbar-motion)}.mesurer-toolbar-tool-slot{flex:none}.mesurer-toolbar-tool-slot[data-group=inspect]{width:var(--msr-inspect-w,auto)}.mesurer-toolbar-tool-slot[data-group=annotate]{width:var(--msr-annotate-w,auto)}.mesurer-toolbar-tool-slot:not([data-open=true]){pointer-events:none}.mesurer-toolbar-motion:not([data-resizing]) .mesurer-toolbar-tool-slot:not([data-open=true]){visibility:hidden}.mesurer-toolbar-tool-panel{width:max-content}.mesurer-toolbar-tooltips{z-index:110;pointer-events:none;position:fixed;inset:0;overflow:visible}.mesurer-toolbar-trailing{z-index:1;isolation:isolate;background:var(--msr-surface);border-radius:0 9px 9px 0;flex:none;position:relative}.mesurer-toolbar-tool-switch{z-index:1;isolation:isolate;background:var(--msr-surface);position:relative}.mesurer-toolbar-tool-switch-pill{z-index:0;background:var(--msr-color-ink-200);border-radius:3px;width:28px;height:28px;position:absolute;top:2px;left:2px;transform:translate(0)}.mesurer-toolbar-tool-switch[data-value=annotate] .mesurer-toolbar-tool-switch-pill{transform:translate(30px)}.mesurer-toolbar-tool-switch>:not(.mesurer-toolbar-tool-switch-pill){z-index:1;position:relative}@media (prefers-reduced-motion:reduce){.mesurer-toolbar-motion,.mesurer-toolbar-chrome,.mesurer-toolbar-tool-track,.mesurer-toolbar-minimize-track,.mesurer-toolbar-trailing,.mesurer-toolbar-motion[data-ready=true] .mesurer-toolbar-tool-switch-pill{transition:none}.mesurer-screenshot-preview{animation-name:mesurer-screenshot-preview-reduced;animation-duration:5s;animation-timing-function:linear;animation-fill-mode:both}}@keyframes mesurer-screenshot-preview{0%,3.1%{opacity:0}6.2%,96.9%{opacity:1}to{opacity:0}}@keyframes mesurer-screenshot-preview-reduced{0%,to{opacity:1}}@keyframes mesurer-comment-nudge{0%,to{transform:translate(0)}35%{transform:translate(-3px)}70%{transform:translate(3px)}}.mesurer-comment-nudge{animation:.15s ease-out mesurer-comment-nudge}@keyframes mesurer-status-ellipsis{0%,24%{content:""}25%,49%{content:"."}50%,74%{content:".."}75%,to{content:"..."}}.mesurer-status-ellipsis{text-align:left;width:1.5em;display:inline-block}.mesurer-status-ellipsis:after{content:"";animation:1.2s step-end infinite mesurer-status-ellipsis}@media (prefers-reduced-motion:reduce){.mesurer-status-ellipsis:after{content:"...";animation:none}}.mesurer-thin-scrollbar{scrollbar-width:thin;scrollbar-color:var(--msr-color-ink-200) transparent}.mesurer-thin-scrollbar::-webkit-scrollbar{width:4px;height:4px}.mesurer-thin-scrollbar::-webkit-scrollbar-track{background:0 0}.mesurer-thin-scrollbar::-webkit-scrollbar-thumb{background:var(--msr-color-ink-200);border-radius:var(--msr-radius-control)}.mesurer-thin-scrollbar:hover{scrollbar-color:var(--msr-color-ink-300) transparent}.mesurer-thin-scrollbar:hover::-webkit-scrollbar-thumb{background:var(--msr-color-ink-300)}.mesurer-thin-scrollbar::-webkit-scrollbar-corner{background:0 0}.mesurer-toast-surface{box-shadow:var(--msr-shadow-floating)}.mesurer-root{--msr-spacing:4px}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}';
52
63
 
53
64
  // mesurer-client.tsx
54
65
  import {
@@ -67,7 +78,7 @@ import { useId, useLayoutEffect as useLayoutEffect2, useRef as useRef2, useState
67
78
  // package.json
68
79
  var package_default = {
69
80
  name: "mesurer",
70
- version: "0.2.2",
81
+ version: "0.2.3",
71
82
  description: "Inspect, annotate, and give feedback on any live interface",
72
83
  license: "MIT",
73
84
  author: "Julien Thibeaut",
@@ -1687,7 +1698,7 @@ function SettingsPanel({
1687
1698
  color,
1688
1699
  camera,
1689
1700
  rulers,
1690
- text,
1701
+ text: text2,
1691
1702
  arrows,
1692
1703
  focusSection,
1693
1704
  general
@@ -1707,7 +1718,7 @@ function SettingsPanel({
1707
1718
  } = general;
1708
1719
  const { settings: screenshotSettings, setSettings: setScreenshotSettings } = camera;
1709
1720
  const { settings: rulerSettings, setSettings: setRulerSettings } = rulers;
1710
- const { settings: textSettings, setSettings: setTextSettings } = text;
1721
+ const { settings: textSettings, setSettings: setTextSettings } = text2;
1711
1722
  const {
1712
1723
  color: arrowColor,
1713
1724
  setColor: setArrowColor,
@@ -2859,8 +2870,8 @@ var scaledFont = (scale) => ({
2859
2870
  fontSize: `${BASE_FONT_SIZE * scale}px`,
2860
2871
  lineHeight: `${BASE_LINE_HEIGHT * scale}px`
2861
2872
  });
2862
- var scaleBox = (box, handle, pointer) => {
2863
- const { x, y, width, height, rotation, scale, boxWidth } = box;
2873
+ var scaleBox = (box2, handle, pointer) => {
2874
+ const { x, y, width, height, rotation, scale, boxWidth } = box2;
2864
2875
  const center = boxCenter(x, y, width, height);
2865
2876
  const localPointer = rotatePoint(pointer, center, -rotation);
2866
2877
  const { ax, ay } = ANCHOR[handle];
@@ -2891,8 +2902,8 @@ var scaleBox = (box, handle, pointer) => {
2891
2902
  ...typeof boxWidth === "number" ? { boxWidth: Math.max(MIN_BOX_WIDTH, boxWidth * applied) } : {}
2892
2903
  };
2893
2904
  };
2894
- var resizeWidthBox = (box, handle, pointer) => {
2895
- const { x, y, width, height, rotation } = box;
2905
+ var resizeWidthBox = (box2, handle, pointer) => {
2906
+ const { x, y, width, height, rotation } = box2;
2896
2907
  const center = boxCenter(x, y, width, height);
2897
2908
  const localPointer = rotatePoint(pointer, center, -rotation);
2898
2909
  const { ax } = ANCHOR[handle];
@@ -3353,6 +3364,8 @@ var installKeyboardGate = (view = window, {
3353
3364
  }
3354
3365
  if (event instanceof KeyboardEvent && isMesurerKeyboardBridgeKey(event.key, event)) {
3355
3366
  bridgeKey(event);
3367
+ if (event.type === "keydown") event.preventDefault();
3368
+ return;
3356
3369
  }
3357
3370
  event.preventDefault();
3358
3371
  if (isAnnotationHotkey(event)) return;
@@ -3365,6 +3378,8 @@ var installKeyboardGate = (view = window, {
3365
3378
  if (event.type === "keydown" || event.type === "keyup") {
3366
3379
  if (isolateMesurerEvents && isMesurerKeyboardBridgeKey(event.key, event)) {
3367
3380
  bridgeKey(event);
3381
+ if (event.type === "keydown") event.preventDefault();
3382
+ return;
3368
3383
  }
3369
3384
  }
3370
3385
  }
@@ -4561,21 +4576,26 @@ var MenuSurface = forwardRef3(
4561
4576
  );
4562
4577
  }
4563
4578
  );
4564
- function ToolbarMenu({ className, side, align = "left", children, ...props }) {
4579
+ var ToolbarMenu = forwardRef3(function ToolbarMenu2({ className, side, align = "left", floating = false, floatingStyle, style, children, ...props }, ref) {
4565
4580
  return /* @__PURE__ */ jsx38(
4566
4581
  MenuSurface,
4567
4582
  {
4568
4583
  ...props,
4584
+ ref,
4585
+ style: floating ? { ...floatingStyle, ...style } : style,
4569
4586
  className: cn(
4570
- "msr:absolute msr:z-[100] msr:flex msr:w-44 msr:flex-col msr:gap-px",
4571
- side === "bottom" ? "msr:top-full msr:mt-2" : "msr:bottom-full msr:mb-2",
4572
- align === "left" ? "msr:left-0" : "msr:right-0",
4587
+ "msr:flex msr:w-44 msr:flex-col msr:gap-px",
4588
+ floating ? "msr:pointer-events-auto msr:fixed msr:z-[120]" : cn(
4589
+ "msr:absolute msr:z-[100]",
4590
+ side === "bottom" ? "msr:top-full msr:mt-2" : "msr:bottom-full msr:mb-2",
4591
+ align === "left" ? "msr:left-0" : "msr:right-0"
4592
+ ),
4573
4593
  className
4574
4594
  ),
4575
4595
  children
4576
4596
  }
4577
4597
  );
4578
- }
4598
+ });
4579
4599
  function MenuItem({
4580
4600
  className,
4581
4601
  children,
@@ -4706,6 +4726,7 @@ function CommentsPanel({
4706
4726
  panelRef,
4707
4727
  placement,
4708
4728
  fixed = false,
4729
+ fixedZIndex = 100,
4709
4730
  statusFilter,
4710
4731
  onStatusFilterChange
4711
4732
  }) {
@@ -4781,7 +4802,7 @@ function CommentsPanel({
4781
4802
  style: {
4782
4803
  position: fixed ? "fixed" : "absolute",
4783
4804
  width: fixed ? "18rem" : void 0,
4784
- zIndex: fixed ? 100 : void 0,
4805
+ zIndex: fixed ? fixedZIndex : void 0,
4785
4806
  pointerEvents: "auto",
4786
4807
  right: placement.right,
4787
4808
  top: placement.top,
@@ -4952,7 +4973,7 @@ function CommentsPanel({
4952
4973
  "data-mesurer-comment-actions": true,
4953
4974
  "data-mesurer-comment-ui": true,
4954
4975
  className: "mesurer-comment-overflow-menu msr:pointer-events-auto msr:fixed msr:z-[100] msr:w-32 msr:-translate-y-full msr:rounded-md msr:bg-white msr:p-1 msr:shadow-floating",
4955
- style: { position: "fixed", zIndex: 100, pointerEvents: "auto", width: "8rem", top: commentMenuPosition.top, right: commentMenuPosition.right },
4976
+ style: { position: "fixed", zIndex: 120, pointerEvents: "auto", width: "8rem", top: commentMenuPosition.top, right: commentMenuPosition.right },
4956
4977
  onPointerDown: (event) => event.stopPropagation(),
4957
4978
  children: /* @__PURE__ */ jsx40("button", { type: "button", role: "menuitem", className: "mesurer-comment-menu-danger msr:flex msr:w-full msr:rounded-[4px] msr:px-2 msr:py-1.5 msr:text-left msr:text-[12px] msr:text-red-600 msr:hover:bg-red-50", onClick: (event) => {
4958
4979
  event.stopPropagation();
@@ -4970,7 +4991,7 @@ function CommentsPanel({
4970
4991
  "data-mesurer-comment-actions": true,
4971
4992
  "data-mesurer-comment-ui": true,
4972
4993
  className: "mesurer-comment-overflow-menu msr:pointer-events-auto msr:fixed msr:z-[100] msr:w-40 msr:rounded-md msr:bg-white msr:p-1 msr:shadow-floating",
4973
- style: { position: "fixed", zIndex: 100, pointerEvents: "auto", width: "10rem", top: listMenuPosition.top, right: listMenuPosition.right },
4994
+ style: { position: "fixed", zIndex: 120, pointerEvents: "auto", width: "10rem", top: listMenuPosition.top, right: listMenuPosition.right },
4974
4995
  onPointerDown: (event) => event.stopPropagation(),
4975
4996
  children: [
4976
4997
  ["open", "resolved", "all"].map((filter) => /* @__PURE__ */ jsxs28(
@@ -5339,6 +5360,12 @@ var GUIDE_MENU_WIDTH = 176;
5339
5360
  var VIEWPORT_PADDING2 = 8;
5340
5361
  var TOOLBAR_HEIGHT = 40;
5341
5362
  var TOOLTIP_HEIGHT_WITH_GAP = 34;
5363
+ var floatingMenuStyle = (placement) => ({
5364
+ zIndex: 120,
5365
+ top: placement.top,
5366
+ bottom: placement.bottom,
5367
+ ...placement.left !== void 0 ? { left: placement.left } : { right: placement.right }
5368
+ });
5342
5369
  var getSettingsShortcut = (eventTarget) => /Mac|iPhone|iPad|iPod/.test(eventTarget.navigator.platform) ? "\u2318 ," : "Ctrl + ,";
5343
5370
  var toolGroupForMode = (mode, colorPickerActive) => {
5344
5371
  if (colorPickerActive) return "inspect";
@@ -5730,7 +5757,8 @@ function ToolbarComponent({
5730
5757
  anchorRef: settingsRef,
5731
5758
  eventTarget,
5732
5759
  open: settingsOpen,
5733
- refreshKey: `${position.x}:${position.y}`
5760
+ refreshKey: `${position.x}:${position.y}`,
5761
+ fixed: true
5734
5762
  });
5735
5763
  const { menuRef: commentsPanelRef, placement: commentsPlacement } = useSettingsMenuPlacement({
5736
5764
  anchorRef: commentButtonRef,
@@ -5740,6 +5768,33 @@ function ToolbarComponent({
5740
5768
  fixed: true
5741
5769
  });
5742
5770
  const recordingPanelOpen = Boolean(screenRecording.panel);
5771
+ const captureAnchorRef = useRef14(null);
5772
+ const colorPickerAnchorRef = useRef14(null);
5773
+ const [colorPickerShell, setColorPickerShell] = useState11(null);
5774
+ const { menuRef: guideMenuPortalRef, placement: guideMenuPortalPlacement } = useSettingsMenuPlacement({
5775
+ anchorRef: guideMenuButtonRef,
5776
+ eventTarget,
5777
+ open: recordingPanelOpen && guideMenuOpen,
5778
+ refreshKey: `${position.x}:${position.y}:${menuAlign}`,
5779
+ fixed: true,
5780
+ align: menuAlign
5781
+ });
5782
+ const { menuRef: captureMenuPortalRef, placement: captureMenuPortalPlacement } = useSettingsMenuPlacement({
5783
+ anchorRef: captureAnchorRef,
5784
+ eventTarget,
5785
+ open: recordingPanelOpen && captureMenuOpen,
5786
+ refreshKey: `${position.x}:${position.y}`,
5787
+ fixed: true,
5788
+ align: "right"
5789
+ });
5790
+ const { menuRef: commentDropdownPortalRef, placement: commentDropdownPlacement } = useSettingsMenuPlacement({
5791
+ anchorRef: commentButtonRef,
5792
+ eventTarget,
5793
+ open: recordingPanelOpen && commentMenuOpen && !commentsPanelOpen,
5794
+ refreshKey: `${position.x}:${position.y}`,
5795
+ fixed: true,
5796
+ align: "right"
5797
+ });
5743
5798
  const { menuRef: recordingPanelRef, placement: recordingPlacement } = useSettingsMenuPlacement({
5744
5799
  anchorRef: settingsRef,
5745
5800
  eventTarget,
@@ -5755,6 +5810,26 @@ function ToolbarComponent({
5755
5810
  refreshKey: `${position.x}:${position.y}`,
5756
5811
  fixed: true
5757
5812
  });
5813
+ useLayoutEffect8(() => {
5814
+ if (!recordingPanelOpen || !colorPickerActive) {
5815
+ setColorPickerShell(null);
5816
+ return;
5817
+ }
5818
+ const place = () => {
5819
+ const anchor = colorPickerAnchorRef.current;
5820
+ const tool = anchor?.querySelector("[data-tool-id='color-picker']") ?? anchor;
5821
+ if (!(tool instanceof HTMLElement)) return;
5822
+ const rect = tool.getBoundingClientRect();
5823
+ setColorPickerShell({ left: rect.left, top: rect.bottom, width: rect.width });
5824
+ };
5825
+ place();
5826
+ eventTarget.addEventListener("resize", place);
5827
+ eventTarget.addEventListener("scroll", place, true);
5828
+ return () => {
5829
+ eventTarget.removeEventListener("resize", place);
5830
+ eventTarget.removeEventListener("scroll", place, true);
5831
+ };
5832
+ }, [colorPickerActive, eventTarget, position.x, position.y, recordingPanelOpen]);
5758
5833
  const selectMode = useCallback6(() => {
5759
5834
  onCancelTransient();
5760
5835
  clearSelection();
@@ -6203,123 +6278,129 @@ function ToolbarComponent({
6203
6278
  anchorRef: guideMenuRef
6204
6279
  }
6205
6280
  ),
6206
- guideMenuOpen ? /* @__PURE__ */ jsxs30(
6207
- ToolbarMenu,
6208
- {
6209
- side: menuSide,
6210
- align: menuAlign,
6211
- tabIndex: 0,
6212
- onKeyDown: (event) => {
6213
- const key = event.key.toLowerCase();
6214
- const itemCount = features.rulers ? 3 : 2;
6215
- const horizontalIndex = features.rulers ? 1 : 0;
6216
- const verticalIndex = features.rulers ? 2 : 1;
6217
- if (event.key === "ArrowDown") {
6218
- event.preventDefault();
6219
- setActiveMenuIndex((prev) => (prev + 1) % itemCount);
6220
- }
6221
- if (event.key === "ArrowUp") {
6222
- event.preventDefault();
6223
- setActiveMenuIndex((prev) => (prev - 1 + itemCount) % itemCount);
6224
- }
6225
- if (event.key === "Enter") {
6226
- event.preventDefault();
6227
- if (features.rulers && activeMenuIndex === 0) selectRulers();
6228
- else if (activeMenuIndex === horizontalIndex) selectGuideOrientation("horizontal");
6229
- else if (activeMenuIndex === verticalIndex) selectGuideOrientation("vertical");
6230
- }
6231
- if (features.rulers && key === "r") {
6232
- event.preventDefault();
6233
- selectRulers();
6234
- }
6235
- if (key === "h") {
6236
- event.preventDefault();
6237
- selectGuideOrientation("horizontal");
6238
- }
6239
- if (key === "v") {
6240
- event.preventDefault();
6241
- selectGuideOrientation("vertical");
6242
- }
6243
- if (event.key === "Escape") {
6244
- event.preventDefault();
6245
- event.stopPropagation();
6246
- setOpenMenu(null);
6247
- }
6248
- },
6249
- children: [
6250
- features.rulers ? /* @__PURE__ */ jsxs30(
6251
- MenuItem,
6252
- {
6253
- className: cn(
6254
- "msr:group msr:flex msr:w-full msr:items-center msr:gap-2 msr:rounded-[4px] msr:px-2 msr:py-1 msr:text-left msr:text-[11px] msr:leading-4",
6255
- activeMenuIndex === 0 || guideControl === "rulers" ? "msr:bg-[#0d99ff] msr:text-white" : "msr:text-ink-700 msr:hover:bg-[#0d99ff] msr:hover:text-white"
6256
- ),
6257
- onClick: () => selectRulers(),
6258
- children: [
6259
- /* @__PURE__ */ jsx42(
6260
- CheckIcon,
6261
- {
6262
- size: 12,
6263
- className: cn(guideControl === "rulers" ? "msr:opacity-100" : "msr:opacity-0")
6264
- }
6265
- ),
6266
- /* @__PURE__ */ jsx42(MeasureLIcon, { size: 12 }),
6267
- /* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: "Rulers" }),
6268
- /* @__PURE__ */ jsx42("span", { children: "R" })
6269
- ]
6281
+ guideMenuOpen ? (() => {
6282
+ const menu = /* @__PURE__ */ jsxs30(
6283
+ ToolbarMenu,
6284
+ {
6285
+ ref: recordingPanelOpen ? guideMenuPortalRef : void 0,
6286
+ floating: recordingPanelOpen,
6287
+ floatingStyle: recordingPanelOpen ? floatingMenuStyle(guideMenuPortalPlacement) : void 0,
6288
+ side: menuSide,
6289
+ align: menuAlign,
6290
+ tabIndex: 0,
6291
+ onKeyDown: (event) => {
6292
+ const key = event.key.toLowerCase();
6293
+ const itemCount = features.rulers ? 3 : 2;
6294
+ const horizontalIndex = features.rulers ? 1 : 0;
6295
+ const verticalIndex = features.rulers ? 2 : 1;
6296
+ if (event.key === "ArrowDown") {
6297
+ event.preventDefault();
6298
+ setActiveMenuIndex((prev) => (prev + 1) % itemCount);
6270
6299
  }
6271
- ) : null,
6272
- /* @__PURE__ */ jsxs30(
6273
- MenuItem,
6274
- {
6275
- className: cn(
6276
- "msr:group msr:flex msr:w-full msr:items-center msr:gap-2 msr:rounded-[4px] msr:px-2 msr:py-1 msr:text-left msr:text-[11px] msr:leading-4",
6277
- activeMenuIndex === (features.rulers ? 1 : 0) || guideControl === "guides" && guideOrientation === "horizontal" ? "msr:bg-[#0d99ff] msr:text-white" : "msr:text-ink-700 msr:hover:bg-[#0d99ff] msr:hover:text-white"
6278
- ),
6279
- onClick: () => selectGuideOrientation("horizontal"),
6280
- children: [
6281
- /* @__PURE__ */ jsx42(
6282
- CheckIcon,
6283
- {
6284
- size: 12,
6285
- className: cn(
6286
- guideControl === "guides" && guideOrientation === "horizontal" ? "msr:opacity-100" : "msr:opacity-0"
6287
- )
6288
- }
6289
- ),
6290
- /* @__PURE__ */ jsx42(MinusIcon, { size: 12 }),
6291
- /* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: "Horizontal" }),
6292
- /* @__PURE__ */ jsx42("span", { children: "H" })
6293
- ]
6300
+ if (event.key === "ArrowUp") {
6301
+ event.preventDefault();
6302
+ setActiveMenuIndex((prev) => (prev - 1 + itemCount) % itemCount);
6294
6303
  }
6295
- ),
6296
- /* @__PURE__ */ jsxs30(
6297
- MenuItem,
6298
- {
6299
- className: cn(
6300
- "msr:group msr:flex msr:w-full msr:items-center msr:gap-2 msr:rounded-[4px] msr:px-2 msr:py-1 msr:text-left msr:text-[11px] msr:leading-4",
6301
- activeMenuIndex === (features.rulers ? 2 : 1) || guideControl === "guides" && guideOrientation === "vertical" ? "msr:bg-[#0d99ff] msr:text-white" : "msr:text-ink-700 msr:hover:bg-[#0d99ff] msr:hover:text-white"
6302
- ),
6303
- onClick: () => selectGuideOrientation("vertical"),
6304
- children: [
6305
- /* @__PURE__ */ jsx42(
6306
- CheckIcon,
6307
- {
6308
- size: 12,
6309
- className: cn(
6310
- guideControl === "guides" && guideOrientation === "vertical" ? "msr:opacity-100" : "msr:opacity-0"
6311
- )
6312
- }
6313
- ),
6314
- /* @__PURE__ */ jsx42(MinusIcon, { size: 12, className: "msr:rotate-90" }),
6315
- /* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: "Vertical" }),
6316
- /* @__PURE__ */ jsx42("span", { children: "V" })
6317
- ]
6304
+ if (event.key === "Enter") {
6305
+ event.preventDefault();
6306
+ if (features.rulers && activeMenuIndex === 0) selectRulers();
6307
+ else if (activeMenuIndex === horizontalIndex) selectGuideOrientation("horizontal");
6308
+ else if (activeMenuIndex === verticalIndex) selectGuideOrientation("vertical");
6318
6309
  }
6319
- )
6320
- ]
6321
- }
6322
- ) : null
6310
+ if (features.rulers && key === "r") {
6311
+ event.preventDefault();
6312
+ selectRulers();
6313
+ }
6314
+ if (key === "h") {
6315
+ event.preventDefault();
6316
+ selectGuideOrientation("horizontal");
6317
+ }
6318
+ if (key === "v") {
6319
+ event.preventDefault();
6320
+ selectGuideOrientation("vertical");
6321
+ }
6322
+ if (event.key === "Escape") {
6323
+ event.preventDefault();
6324
+ event.stopPropagation();
6325
+ setOpenMenu(null);
6326
+ }
6327
+ },
6328
+ children: [
6329
+ features.rulers ? /* @__PURE__ */ jsxs30(
6330
+ MenuItem,
6331
+ {
6332
+ className: cn(
6333
+ "msr:group msr:flex msr:w-full msr:items-center msr:gap-2 msr:rounded-[4px] msr:px-2 msr:py-1 msr:text-left msr:text-[11px] msr:leading-4",
6334
+ activeMenuIndex === 0 || guideControl === "rulers" ? "msr:bg-[#0d99ff] msr:text-white" : "msr:text-ink-700 msr:hover:bg-[#0d99ff] msr:hover:text-white"
6335
+ ),
6336
+ onClick: () => selectRulers(),
6337
+ children: [
6338
+ /* @__PURE__ */ jsx42(
6339
+ CheckIcon,
6340
+ {
6341
+ size: 12,
6342
+ className: cn(guideControl === "rulers" ? "msr:opacity-100" : "msr:opacity-0")
6343
+ }
6344
+ ),
6345
+ /* @__PURE__ */ jsx42(MeasureLIcon, { size: 12 }),
6346
+ /* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: "Rulers" }),
6347
+ /* @__PURE__ */ jsx42("span", { children: "R" })
6348
+ ]
6349
+ }
6350
+ ) : null,
6351
+ /* @__PURE__ */ jsxs30(
6352
+ MenuItem,
6353
+ {
6354
+ className: cn(
6355
+ "msr:group msr:flex msr:w-full msr:items-center msr:gap-2 msr:rounded-[4px] msr:px-2 msr:py-1 msr:text-left msr:text-[11px] msr:leading-4",
6356
+ activeMenuIndex === (features.rulers ? 1 : 0) || guideControl === "guides" && guideOrientation === "horizontal" ? "msr:bg-[#0d99ff] msr:text-white" : "msr:text-ink-700 msr:hover:bg-[#0d99ff] msr:hover:text-white"
6357
+ ),
6358
+ onClick: () => selectGuideOrientation("horizontal"),
6359
+ children: [
6360
+ /* @__PURE__ */ jsx42(
6361
+ CheckIcon,
6362
+ {
6363
+ size: 12,
6364
+ className: cn(
6365
+ guideControl === "guides" && guideOrientation === "horizontal" ? "msr:opacity-100" : "msr:opacity-0"
6366
+ )
6367
+ }
6368
+ ),
6369
+ /* @__PURE__ */ jsx42(MinusIcon, { size: 12 }),
6370
+ /* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: "Horizontal" }),
6371
+ /* @__PURE__ */ jsx42("span", { children: "H" })
6372
+ ]
6373
+ }
6374
+ ),
6375
+ /* @__PURE__ */ jsxs30(
6376
+ MenuItem,
6377
+ {
6378
+ className: cn(
6379
+ "msr:group msr:flex msr:w-full msr:items-center msr:gap-2 msr:rounded-[4px] msr:px-2 msr:py-1 msr:text-left msr:text-[11px] msr:leading-4",
6380
+ activeMenuIndex === (features.rulers ? 2 : 1) || guideControl === "guides" && guideOrientation === "vertical" ? "msr:bg-[#0d99ff] msr:text-white" : "msr:text-ink-700 msr:hover:bg-[#0d99ff] msr:hover:text-white"
6381
+ ),
6382
+ onClick: () => selectGuideOrientation("vertical"),
6383
+ children: [
6384
+ /* @__PURE__ */ jsx42(
6385
+ CheckIcon,
6386
+ {
6387
+ size: 12,
6388
+ className: cn(
6389
+ guideControl === "guides" && guideOrientation === "vertical" ? "msr:opacity-100" : "msr:opacity-0"
6390
+ )
6391
+ }
6392
+ ),
6393
+ /* @__PURE__ */ jsx42(MinusIcon, { size: 12, className: "msr:rotate-90" }),
6394
+ /* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: "Vertical" }),
6395
+ /* @__PURE__ */ jsx42("span", { children: "V" })
6396
+ ]
6397
+ }
6398
+ )
6399
+ ]
6400
+ }
6401
+ );
6402
+ return recordingPanelOpen ? createPortal4(menu, commentPanelPortalTarget) : menu;
6403
+ })() : null
6323
6404
  ]
6324
6405
  }
6325
6406
  ),
@@ -6347,6 +6428,7 @@ function ToolbarComponent({
6347
6428
  ref: layoutGuidesMenuRef,
6348
6429
  className: "mesurer-menu-surface msr:pointer-events-auto msr:fixed msr:z-[100] msr:flex msr:w-60 msr:flex-col msr:overflow-hidden msr:rounded-lg msr:bg-white msr:p-0 msr:shadow-floating",
6349
6430
  style: {
6431
+ zIndex: recordingPanelOpen ? 120 : void 0,
6350
6432
  top: layoutGuidesPlacement.top,
6351
6433
  bottom: layoutGuidesPlacement.bottom,
6352
6434
  right: layoutGuidesPlacement.right,
@@ -6372,7 +6454,7 @@ function ToolbarComponent({
6372
6454
  commentPanelPortalTarget
6373
6455
  ) : null
6374
6456
  ] }),
6375
- /* @__PURE__ */ jsxs30("div", { className: "msr:relative msr:flex", children: [
6457
+ /* @__PURE__ */ jsxs30("div", { ref: colorPickerAnchorRef, className: "msr:relative msr:flex", children: [
6376
6458
  /* @__PURE__ */ jsx42(
6377
6459
  ToolbarButton,
6378
6460
  {
@@ -6386,7 +6468,23 @@ function ToolbarComponent({
6386
6468
  children: /* @__PURE__ */ jsx42(DropperIcon, { size: 20, "aria-hidden": "true" })
6387
6469
  }
6388
6470
  ),
6389
- colorPicker.panel
6471
+ recordingPanelOpen && colorPickerActive ? createPortal4(
6472
+ /* @__PURE__ */ jsx42(
6473
+ "div",
6474
+ {
6475
+ className: "msr:pointer-events-none msr:fixed msr:z-[120]",
6476
+ style: {
6477
+ left: colorPickerShell?.left ?? 0,
6478
+ top: colorPickerShell?.top ?? 0,
6479
+ width: colorPickerShell?.width,
6480
+ height: 0,
6481
+ visibility: colorPickerShell ? "visible" : "hidden"
6482
+ },
6483
+ children: /* @__PURE__ */ jsx42("div", { className: "msr:pointer-events-auto", children: colorPicker.panel })
6484
+ }
6485
+ ),
6486
+ commentPanelPortalTarget
6487
+ ) : colorPicker.panel
6390
6488
  ] })
6391
6489
  ] }) })
6392
6490
  }
@@ -6461,7 +6559,7 @@ function ToolbarComponent({
6461
6559
  /* @__PURE__ */ jsxs30("div", { ref: trailingRef, className: "mesurer-toolbar-trailing msr:flex msr:items-stretch", children: [
6462
6560
  /* @__PURE__ */ jsx42(ToolbarDivider, {}),
6463
6561
  /* @__PURE__ */ jsxs30(ToolbarGroup, { label: "Capture and settings", className: "msr:px-1", children: [
6464
- /* @__PURE__ */ jsxs30("div", { className: "msr:relative msr:flex msr:flex-none", children: [
6562
+ /* @__PURE__ */ jsxs30("div", { ref: captureAnchorRef, className: "msr:relative msr:flex msr:flex-none", children: [
6465
6563
  features.screenshot ? /* @__PURE__ */ jsxs30(Fragment9, { children: [
6466
6564
  /* @__PURE__ */ jsx42(
6467
6565
  ToolbarButton,
@@ -6505,50 +6603,56 @@ function ToolbarComponent({
6505
6603
  children: /* @__PURE__ */ jsx42(CaretDownIcon, { size: 8, "aria-hidden": "true" })
6506
6604
  }
6507
6605
  ),
6508
- captureMenuOpen ? /* @__PURE__ */ jsxs30(
6509
- ToolbarMenu,
6510
- {
6511
- side: menuSide,
6512
- align: "right",
6513
- onKeyDown: (event) => {
6514
- if (event.key !== "Escape") return;
6515
- event.preventDefault();
6516
- event.stopPropagation();
6517
- setOpenMenu(null);
6518
- },
6519
- children: [
6520
- /* @__PURE__ */ jsxs30(
6521
- ToolbarMenuItem,
6522
- {
6523
- onClick: () => {
6524
- setOpenMenu(null);
6525
- screenshotMode();
6526
- },
6527
- children: [
6528
- /* @__PURE__ */ jsx42(CameraIcon, { size: 12 }),
6529
- /* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: "Screenshot" }),
6530
- /* @__PURE__ */ jsx42("span", { children: "C" })
6531
- ]
6532
- }
6533
- ),
6534
- /* @__PURE__ */ jsxs30(
6535
- ToolbarMenuItem,
6536
- {
6537
- onClick: () => {
6538
- setOpenMenu(null);
6539
- if (recording) onScreenRecordingStop();
6540
- else recordMode();
6541
- },
6542
- children: [
6543
- /* @__PURE__ */ jsx42(RecordIcon, { size: 12 }),
6544
- /* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: recording ? "Stop recording" : "Screen record" }),
6545
- /* @__PURE__ */ jsx42("span", { children: "V" })
6546
- ]
6547
- }
6548
- )
6549
- ]
6550
- }
6551
- ) : null
6606
+ captureMenuOpen ? (() => {
6607
+ const menu = /* @__PURE__ */ jsxs30(
6608
+ ToolbarMenu,
6609
+ {
6610
+ ref: recordingPanelOpen ? captureMenuPortalRef : void 0,
6611
+ floating: recordingPanelOpen,
6612
+ floatingStyle: recordingPanelOpen ? floatingMenuStyle(captureMenuPortalPlacement) : void 0,
6613
+ side: menuSide,
6614
+ align: "right",
6615
+ onKeyDown: (event) => {
6616
+ if (event.key !== "Escape") return;
6617
+ event.preventDefault();
6618
+ event.stopPropagation();
6619
+ setOpenMenu(null);
6620
+ },
6621
+ children: [
6622
+ /* @__PURE__ */ jsxs30(
6623
+ ToolbarMenuItem,
6624
+ {
6625
+ onClick: () => {
6626
+ setOpenMenu(null);
6627
+ screenshotMode();
6628
+ },
6629
+ children: [
6630
+ /* @__PURE__ */ jsx42(CameraIcon, { size: 12 }),
6631
+ /* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: "Screenshot" }),
6632
+ /* @__PURE__ */ jsx42("span", { children: "C" })
6633
+ ]
6634
+ }
6635
+ ),
6636
+ /* @__PURE__ */ jsxs30(
6637
+ ToolbarMenuItem,
6638
+ {
6639
+ onClick: () => {
6640
+ setOpenMenu(null);
6641
+ if (recording) onScreenRecordingStop();
6642
+ else recordMode();
6643
+ },
6644
+ children: [
6645
+ /* @__PURE__ */ jsx42(RecordIcon, { size: 12 }),
6646
+ /* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: recording ? "Stop recording" : "Screen record" }),
6647
+ /* @__PURE__ */ jsx42("span", { children: "V" })
6648
+ ]
6649
+ }
6650
+ )
6651
+ ]
6652
+ }
6653
+ );
6654
+ return recordingPanelOpen ? createPortal4(menu, commentPanelPortalTarget) : menu;
6655
+ })() : null
6552
6656
  ] }),
6553
6657
  /* @__PURE__ */ jsxs30("div", { ref: commentMenuRef, className: "msr:relative msr:flex msr:flex-none", "data-mesurer-comment-ui": true, children: [
6554
6658
  /* @__PURE__ */ jsx42(
@@ -6604,9 +6708,38 @@ function ToolbarComponent({
6604
6708
  if (toolMode !== "comments") preserveToolGroupRef.current = true;
6605
6709
  onSelectComment(id);
6606
6710
  },
6607
- fixed: true
6711
+ fixed: true,
6712
+ fixedZIndex: recordingPanelOpen ? 120 : 100
6608
6713
  }
6609
- ), commentPanelPortalTarget) : /* @__PURE__ */ jsx42(
6714
+ ), commentPanelPortalTarget) : recordingPanelOpen ? createPortal4(
6715
+ /* @__PURE__ */ jsx42(
6716
+ MenuSurface,
6717
+ {
6718
+ ref: commentDropdownPortalRef,
6719
+ className: "msr:pointer-events-auto msr:fixed msr:flex msr:w-44 msr:flex-col msr:gap-px",
6720
+ style: floatingMenuStyle(commentDropdownPlacement),
6721
+ "data-mesurer-comment-ui": true,
6722
+ children: /* @__PURE__ */ jsxs30(Fragment9, { children: [
6723
+ /* @__PURE__ */ jsx42(MenuItem, { disabled: commentCount === 0, onClick: openCommentsPanel, children: /* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: "Show all comments" }) }),
6724
+ /* @__PURE__ */ jsxs30(
6725
+ MenuItem,
6726
+ {
6727
+ disabled: commentCount === 0,
6728
+ onClick: () => {
6729
+ void onCopyComments();
6730
+ setOpenMenu(null);
6731
+ },
6732
+ children: [
6733
+ /* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: "Copy comments" }),
6734
+ commentsCopied ? /* @__PURE__ */ jsx42(CheckIcon, { size: 12 }) : /* @__PURE__ */ jsx42("span", { children: copyCommentsShortcut })
6735
+ ]
6736
+ }
6737
+ )
6738
+ ] })
6739
+ }
6740
+ ),
6741
+ commentPanelPortalTarget
6742
+ ) : /* @__PURE__ */ jsx42(
6610
6743
  MenuSurface,
6611
6744
  {
6612
6745
  className: cn(
@@ -6652,29 +6785,31 @@ function ToolbarComponent({
6652
6785
  children: /* @__PURE__ */ jsx42(SettingsIcon, { size: 20, "aria-hidden": "true" })
6653
6786
  }
6654
6787
  ),
6655
- settingsOpen ? /* @__PURE__ */ jsx42(
6656
- "div",
6657
- {
6658
- ref: settingsMenuRef,
6659
- className: cn(
6660
- "mesurer-menu-surface msr:absolute msr:z-[95] msr:flex msr:w-auto msr:max-w-[calc(100vw-16px)] msr:flex-col msr:overflow-hidden msr:rounded-lg msr:bg-white msr:p-0 msr:shadow-floating",
6661
- settingsPlacement.side === "bottom" ? "msr:top-full msr:mt-2" : "msr:bottom-full msr:mb-2"
6662
- ),
6663
- style: {
6664
- right: settingsPlacement.right,
6665
- height: settingsPlacement.height,
6666
- maxHeight: settingsPlacement.height
6667
- },
6668
- "data-mesurer-inspector-ui": "true",
6669
- "data-mesurer-settings-panel": true,
6670
- role: "dialog",
6671
- "aria-label": "Settings",
6672
- onPointerDown: (event) => event.stopPropagation(),
6673
- onPointerMove: (event) => event.stopPropagation(),
6674
- onPointerUp: (event) => event.stopPropagation(),
6675
- onClick: (event) => event.stopPropagation(),
6676
- children: settingsPanel
6677
- }
6788
+ settingsOpen ? createPortal4(
6789
+ /* @__PURE__ */ jsx42(
6790
+ "div",
6791
+ {
6792
+ ref: settingsMenuRef,
6793
+ className: "mesurer-menu-surface msr:pointer-events-auto msr:fixed msr:z-[120] msr:flex msr:w-auto msr:max-w-[calc(100vw-16px)] msr:flex-col msr:overflow-hidden msr:rounded-lg msr:bg-white msr:p-0 msr:shadow-floating",
6794
+ style: {
6795
+ top: settingsPlacement.top,
6796
+ bottom: settingsPlacement.bottom,
6797
+ right: settingsPlacement.right,
6798
+ height: settingsPlacement.height,
6799
+ maxHeight: settingsPlacement.height
6800
+ },
6801
+ "data-mesurer-inspector-ui": "true",
6802
+ "data-mesurer-settings-panel": true,
6803
+ role: "dialog",
6804
+ "aria-label": "Settings",
6805
+ onPointerDown: (event) => event.stopPropagation(),
6806
+ onPointerMove: (event) => event.stopPropagation(),
6807
+ onPointerUp: (event) => event.stopPropagation(),
6808
+ onClick: (event) => event.stopPropagation(),
6809
+ children: settingsPanel
6810
+ }
6811
+ ),
6812
+ commentPanelPortalTarget
6678
6813
  ) : null
6679
6814
  ] }) : null
6680
6815
  ] })
@@ -6788,11 +6923,11 @@ var getDirectTextRangeAtPoint = (control, point, ownerDocument) => {
6788
6923
  const container = range.startContainer;
6789
6924
  if (container.nodeType !== Node.TEXT_NODE) return null;
6790
6925
  if (!control.contains(container)) return null;
6791
- const text = container.nodeValue ?? "";
6792
- const trimmed = text.trim();
6926
+ const text2 = container.nodeValue ?? "";
6927
+ const trimmed = text2.trim();
6793
6928
  if (!trimmed) return null;
6794
6929
  const textRange = ownerDocument.createRange();
6795
- const start = text.indexOf(trimmed);
6930
+ const start = text2.indexOf(trimmed);
6796
6931
  if (start < 0) return null;
6797
6932
  textRange.setStart(container, start);
6798
6933
  textRange.setEnd(container, start + trimmed.length);
@@ -7418,24 +7553,24 @@ var lineOrientation = (rect) => {
7418
7553
  if (rect.height < 1 && rect.width >= 1) return "horizontal";
7419
7554
  return null;
7420
7555
  };
7421
- var measureLineToBox = (line, box, orientation) => {
7422
- const boxRight = box.left + box.width;
7423
- const boxBottom = box.top + box.height;
7556
+ var measureLineToBox = (line, box2, orientation) => {
7557
+ const boxRight = box2.left + box2.width;
7558
+ const boxBottom = box2.top + box2.height;
7424
7559
  let horizontal = null;
7425
7560
  let vertical = null;
7426
7561
  const extraHorizontals = [];
7427
7562
  const extraVerticals = [];
7428
7563
  if (orientation === "vertical") {
7429
7564
  const x = line.left;
7430
- const y = box.top + box.height / 2;
7431
- if (x <= box.left) {
7432
- horizontal = { x1: x, x2: box.left, y, value: box.left - x };
7565
+ const y = box2.top + box2.height / 2;
7566
+ if (x <= box2.left) {
7567
+ horizontal = { x1: x, x2: box2.left, y, value: box2.left - x };
7433
7568
  } else if (x >= boxRight) {
7434
7569
  horizontal = { x1: boxRight, x2: x, y, value: x - boxRight };
7435
7570
  } else {
7436
- const toLeft = x - box.left;
7571
+ const toLeft = x - box2.left;
7437
7572
  const toRight = boxRight - x;
7438
- if (toLeft > 0.5) horizontal = { x1: box.left, x2: x, y, value: toLeft };
7573
+ if (toLeft > 0.5) horizontal = { x1: box2.left, x2: x, y, value: toLeft };
7439
7574
  if (toRight > 0.5) {
7440
7575
  const right = { x1: x, x2: boxRight, y, value: toRight };
7441
7576
  if (horizontal) extraHorizontals.push(right);
@@ -7444,15 +7579,15 @@ var measureLineToBox = (line, box, orientation) => {
7444
7579
  }
7445
7580
  } else {
7446
7581
  const y = line.top;
7447
- const x = box.left + box.width / 2;
7448
- if (y <= box.top) {
7449
- vertical = { y1: y, y2: box.top, x, value: box.top - y };
7582
+ const x = box2.left + box2.width / 2;
7583
+ if (y <= box2.top) {
7584
+ vertical = { y1: y, y2: box2.top, x, value: box2.top - y };
7450
7585
  } else if (y >= boxBottom) {
7451
7586
  vertical = { y1: boxBottom, y2: y, x, value: y - boxBottom };
7452
7587
  } else {
7453
- const toTop = y - box.top;
7588
+ const toTop = y - box2.top;
7454
7589
  const toBottom = boxBottom - y;
7455
- if (toTop > 0.5) vertical = { y1: box.top, y2: y, x, value: toTop };
7590
+ if (toTop > 0.5) vertical = { y1: box2.top, y2: y, x, value: toTop };
7456
7591
  if (toBottom > 0.5) {
7457
7592
  const bottom = { y1: y, y2: boxBottom, x, value: toBottom };
7458
7593
  if (vertical) extraVerticals.push(bottom);
@@ -7484,9 +7619,9 @@ var getDistanceOverlay = (rectA, rectB, elementRefA, elementRefB, ownerWindow =
7484
7619
  if (Boolean(lineA) !== Boolean(lineB)) {
7485
7620
  const orientation = lineA ?? lineB;
7486
7621
  const line = lineA ? rectA : rectB;
7487
- const box = lineA ? rectB : rectA;
7622
+ const box2 = lineA ? rectB : rectA;
7488
7623
  if (orientation) {
7489
- const measured = measureLineToBox(line, box, orientation);
7624
+ const measured = measureLineToBox(line, box2, orientation);
7490
7625
  horizontal = measured.horizontal;
7491
7626
  vertical = measured.vertical;
7492
7627
  extraHorizontals = measured.extraHorizontals.length > 0 ? measured.extraHorizontals : void 0;
@@ -8976,9 +9111,9 @@ var transformedArrowBounds = (arrow) => {
8976
9111
  return rotatedBounds(arrowBounds(arrow), arrow.rotation ?? 0);
8977
9112
  };
8978
9113
  var resizeArrow = (arrow, handle, pointer) => {
8979
- const box = arrowBounds(arrow);
9114
+ const box2 = arrowBounds(arrow);
8980
9115
  const rotation = arrow.rotation ?? 0;
8981
- const geometry = resizeGeometry(box, rotation, handle, pointer);
9116
+ const geometry = resizeGeometry(box2, rotation, handle, pointer);
8982
9117
  const points = [arrow.start, arrow.control ?? { x: (arrow.start.x + arrow.end.x) / 2, y: (arrow.start.y + arrow.end.y) / 2 }, arrow.end];
8983
9118
  const nextPoints = points.map((point) => resizePoint(point, geometry));
8984
9119
  return { ...arrow, start: nextPoints[0], control: nextPoints[1], end: nextPoints[2] };
@@ -9772,10 +9907,10 @@ function TextItem({
9772
9907
  }
9773
9908
  }, [editing, item.text]);
9774
9909
  const measureBox = () => {
9775
- const box = boxRef.current;
9910
+ const box2 = boxRef.current;
9776
9911
  return {
9777
- width: box?.offsetWidth ?? 32,
9778
- height: box?.offsetHeight ?? 24
9912
+ width: box2?.offsetWidth ?? 32,
9913
+ height: box2?.offsetHeight ?? 24
9779
9914
  };
9780
9915
  };
9781
9916
  const pointerPage = (event) => ({
@@ -9964,9 +10099,9 @@ var movePenStroke = (stroke, dx, dy) => ({
9964
10099
  points: stroke.points.map((point) => ({ x: point.x + dx, y: point.y + dy }))
9965
10100
  });
9966
10101
  var resizePenStroke = (stroke, handle, pointer) => {
9967
- const box = penBounds(stroke);
10102
+ const box2 = penBounds(stroke);
9968
10103
  const rotation = stroke.rotation ?? 0;
9969
- const geometry = resizeGeometry(box, rotation, handle, pointer);
10104
+ const geometry = resizeGeometry(box2, rotation, handle, pointer);
9970
10105
  return {
9971
10106
  ...stroke,
9972
10107
  points: stroke.points.map((point) => {
@@ -9976,8 +10111,8 @@ var resizePenStroke = (stroke, handle, pointer) => {
9976
10111
  };
9977
10112
  };
9978
10113
  var rotatePenStroke = (stroke, pointer, offset) => {
9979
- const box = penBounds(stroke);
9980
- const center = boxCenter(box.x, box.y, box.width, box.height);
10114
+ const box2 = penBounds(stroke);
10115
+ const center = boxCenter(box2.x, box2.y, box2.width, box2.height);
9981
10116
  const nextRotation = rotationFromPointer(center, pointer) - offset;
9982
10117
  return {
9983
10118
  ...stroke,
@@ -9985,8 +10120,8 @@ var rotatePenStroke = (stroke, pointer, offset) => {
9985
10120
  };
9986
10121
  };
9987
10122
  var rotatePenStrokeAround = (stroke, center, degrees) => {
9988
- const box = penBounds(stroke);
9989
- const strokeCenter = boxCenter(box.x, box.y, box.width, box.height);
10123
+ const box2 = penBounds(stroke);
10124
+ const strokeCenter = boxCenter(box2.x, box2.y, box2.width, box2.height);
9990
10125
  const rotation = stroke.rotation ?? 0;
9991
10126
  const nextCenter = rotatePoint(strokeCenter, center, degrees);
9992
10127
  const nextRotation = rotation + degrees;
@@ -10122,8 +10257,8 @@ var PenLayer = memo8(function PenLayer2({
10122
10257
  const startRotate = (stroke, event) => {
10123
10258
  event.preventDefault();
10124
10259
  event.stopPropagation();
10125
- const box = penBounds(stroke);
10126
- const center = boxCenter(box.x, box.y, box.width, box.height);
10260
+ const box2 = penBounds(stroke);
10261
+ const center = boxCenter(box2.x, box2.y, box2.width, box2.height);
10127
10262
  onChangeStart();
10128
10263
  dragRef.current = { id: stroke.id, type: "rotate", start: pointerPage(event), stroke, offset: rotationFromPointer(center, pointerPage(event)) - (stroke.rotation ?? 0) };
10129
10264
  trackDrag(event);
@@ -10148,9 +10283,9 @@ var PenLayer = memo8(function PenLayer2({
10148
10283
  preview.length > 0 ? /* @__PURE__ */ jsx57("path", { d: pathForPoints(translate(preview)), fill: "none", stroke: "#0d99ff", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", opacity: 0.65, "data-mesurer-pen-preview": "true" }) : null
10149
10284
  ] }),
10150
10285
  selectionMode ? selectedStrokes.map((stroke) => {
10151
- const box = penBounds(stroke);
10286
+ const box2 = penBounds(stroke);
10152
10287
  const showControls = selectionCount === 1;
10153
- return /* @__PURE__ */ jsx57("div", { className: `msr:absolute ${showControls ? "msr:pointer-events-auto msr:cursor-move" : "msr:pointer-events-none"}`, style: { left: box.x - scrollOffset.x + (selectedIds.includes(stroke.id) ? moveOffset.x : 0), top: box.y - scrollOffset.y + (selectedIds.includes(stroke.id) ? moveOffset.y : 0), width: box.width, height: box.height, transform: `rotate(${stroke.rotation ?? 0}deg)`, transformOrigin: "center center" }, onPointerDown: showControls ? (event) => startMove(stroke, event) : void 0, children: /* @__PURE__ */ jsx57(TextTransformFrame, { frameDataAttribute: "data-mesurer-pen-frame", handleDataAttribute: "data-mesurer-pen-handle", rotation: stroke.rotation ?? 0, showControls, showOutline: true, onResizeStart: (handle, event) => startResize2(stroke, handle, event), onRotateStart: (event) => startRotate(stroke, event) }) }, stroke.id);
10288
+ return /* @__PURE__ */ jsx57("div", { className: `msr:absolute ${showControls ? "msr:pointer-events-auto msr:cursor-move" : "msr:pointer-events-none"}`, style: { left: box2.x - scrollOffset.x + (selectedIds.includes(stroke.id) ? moveOffset.x : 0), top: box2.y - scrollOffset.y + (selectedIds.includes(stroke.id) ? moveOffset.y : 0), width: box2.width, height: box2.height, transform: `rotate(${stroke.rotation ?? 0}deg)`, transformOrigin: "center center" }, onPointerDown: showControls ? (event) => startMove(stroke, event) : void 0, children: /* @__PURE__ */ jsx57(TextTransformFrame, { frameDataAttribute: "data-mesurer-pen-frame", handleDataAttribute: "data-mesurer-pen-handle", rotation: stroke.rotation ?? 0, showControls, showOutline: true, onResizeStart: (handle, event) => startResize2(stroke, handle, event), onRotateStart: (event) => startRotate(stroke, event) }) }, stroke.id);
10154
10289
  }) : null
10155
10290
  ] });
10156
10291
  });
@@ -10493,8 +10628,8 @@ function CommentComposer({
10493
10628
  // comments/export.ts
10494
10629
  var formatTarget = (comment) => {
10495
10630
  const { target } = comment;
10496
- const text = target.textSnippet ? `${target.textSnippet}` : "";
10497
- return `[<${target.tagName}>${text}</${target.tagName}> selector: \`${target.selector}\`]`;
10631
+ const text2 = target.textSnippet ? `${target.textSnippet}` : "";
10632
+ return `[<${target.tagName}>${text2}</${target.tagName}> selector: \`${target.selector}\`]`;
10498
10633
  };
10499
10634
  var formatCommentsForAgent = (comments, url = "", viewport) => {
10500
10635
  return [
@@ -11824,11 +11959,11 @@ function CommentsLayer({
11824
11959
  setMessageDeleteConfirmationId(null);
11825
11960
  },
11826
11961
  onCancelDeleteMessage: () => setMessageDeleteConfirmationId(null),
11827
- onSaveEdit: (messageId, text) => onEditMessage(selected.id, messageId, text),
11962
+ onSaveEdit: (messageId, text2) => onEditMessage(selected.id, messageId, text2),
11828
11963
  replyText,
11829
11964
  onReplyTextChange: setReplyText,
11830
- onAddMessage: (text) => {
11831
- onAddMessage(selected.id, text);
11965
+ onAddMessage: (text2) => {
11966
+ onAddMessage(selected.id, text2);
11832
11967
  setReplyText("");
11833
11968
  },
11834
11969
  onToggleResolved,
@@ -11917,7 +12052,7 @@ var MesurerOverlay = memo9(function MesurerOverlay2({
11917
12052
  distances,
11918
12053
  guides,
11919
12054
  arrows,
11920
- text,
12055
+ text: text2,
11921
12056
  pen,
11922
12057
  comments
11923
12058
  }) {
@@ -11997,7 +12132,7 @@ var MesurerOverlay = memo9(function MesurerOverlay2({
11997
12132
  }
11998
12133
  ),
11999
12134
  toolMode === "selection" && marqueeRect ? /* @__PURE__ */ jsx65(MarqueeRect, { rect: marqueeRect, color: outlineColor }) : null,
12000
- /* @__PURE__ */ jsx65(TextLayer, { ...text, selectionCount }),
12135
+ /* @__PURE__ */ jsx65(TextLayer, { ...text2, selectionCount }),
12001
12136
  /* @__PURE__ */ jsx65(PenLayer, { ...pen, selectionCount }),
12002
12137
  /* @__PURE__ */ jsx65(
12003
12138
  ArrowsLayer,
@@ -12737,7 +12872,7 @@ var useHotkeys = (options) => {
12737
12872
  }
12738
12873
  };
12739
12874
  const handleKeyboardBridge = (event) => {
12740
- if (event.source !== target || event.origin !== target.location.origin || !isMesurerKeyboardOwned(target)) return;
12875
+ if (event.source !== target && event.source !== null || event.origin !== target.location.origin && event.origin !== "null") return;
12741
12876
  const data = event.data;
12742
12877
  if (!isMesurerKeyboardBridge(data)) return;
12743
12878
  const signature = keyboardEventSignature(data.eventType, data);
@@ -12791,7 +12926,7 @@ var useOverlayKeyboard = ({
12791
12926
  }) => {
12792
12927
  useLayoutEffect15(() => {
12793
12928
  installKeyboardGate(eventTarget);
12794
- const claimedRef = { current: false };
12929
+ const claimedRef = { current: overlayActive };
12795
12930
  const owned = overlayActive && (claimedRef.current || isInsideMesurer(getDeepActiveElement(eventTarget)));
12796
12931
  setMesurerKeyboardOwned(eventTarget.document, owned);
12797
12932
  const onFocusIn = () => {
@@ -12802,7 +12937,7 @@ var useOverlayKeyboard = ({
12802
12937
  setMesurerKeyboardOwned(eventTarget.document, true);
12803
12938
  return;
12804
12939
  }
12805
- if (active instanceof Element && !isInsideMesurer(active)) {
12940
+ if (active instanceof Element && !isInsideMesurer(active) && isEditableElement(active)) {
12806
12941
  claimedRef.current = false;
12807
12942
  setMesurerKeyboardOwned(eventTarget.document, false);
12808
12943
  return;
@@ -12936,7 +13071,7 @@ var useInteractionLifecycle = (options) => {
12936
13071
  options.setRulersVisible(false);
12937
13072
  options.setToolMode("none");
12938
13073
  }, [clearTransientState, options]);
12939
- const keyboardOwned = options.enabled && !options.minimized && (options.toolMode !== "none" || options.toolbarActive);
13074
+ const keyboardOwned = options.enabled && !options.minimized;
12940
13075
  const overlayActive = options.enabled && (options.toolMode !== "none" || options.toolbarActive);
12941
13076
  useOverlayKeyboard({
12942
13077
  eventTarget: options.ownerWindow,
@@ -13264,7 +13399,7 @@ var normalizeStoredSettings = (value) => {
13264
13399
  ...typeof input.multiMeasureEnabled === "boolean" ? { multiMeasureEnabled: input.multiMeasureEnabled } : {},
13265
13400
  ...input.infoCardMode === "hover" || input.infoCardMode === "click" ? { infoCardMode: input.infoCardMode } : input.copySelectorOnInspect === true ? { infoCardMode: "click" } : {},
13266
13401
  ...typeof input.persistOnReload === "boolean" ? { persistOnReload: input.persistOnReload } : {},
13267
- ...typeof input.shortcutsEnabled === "boolean" ? { shortcutsEnabled: input.shortcutsEnabled } : {},
13402
+ shortcutsEnabled: typeof input.shortcutsEnabled === "boolean" ? input.shortcutsEnabled : true,
13268
13403
  ...input.theme === "system" || input.theme === "light" || input.theme === "dark" ? { theme: input.theme } : {},
13269
13404
  ...normalizeGuideStyle(input.guideStyle) ? { guideStyle: normalizeGuideStyle(input.guideStyle) } : {},
13270
13405
  ...normalizeRulerSettings(input.rulerSettings) ? { rulerSettings: normalizeRulerSettings(input.rulerSettings) } : {},
@@ -14162,7 +14297,7 @@ var useWorkspaceLifecycle = ({
14162
14297
 
14163
14298
  // hooks/use-overlay-pointer-handlers.ts
14164
14299
  var useOverlayPointerHandlers = (options) => {
14165
- const { toolMode, arrows, pen, text, comments, measure } = options;
14300
+ const { toolMode, arrows, pen, text: text2, comments, measure } = options;
14166
14301
  if (toolMode === "arrows") {
14167
14302
  return {
14168
14303
  onPointerDown: arrows.handlePointerDown,
@@ -14183,7 +14318,7 @@ var useOverlayPointerHandlers = (options) => {
14183
14318
  }
14184
14319
  if (toolMode === "text") {
14185
14320
  return {
14186
- onPointerDown: text.handlePointerDown,
14321
+ onPointerDown: text2.handlePointerDown,
14187
14322
  onPointerMove: measure.handlePointerMove,
14188
14323
  onPointerUp: measure.handlePointerUp,
14189
14324
  onPointerLeave: measure.handlePointerLeave,
@@ -14813,7 +14948,7 @@ var useMesurerHistory = ({
14813
14948
  measurements,
14814
14949
  guides,
14815
14950
  arrows,
14816
- text,
14951
+ text: text2,
14817
14952
  pen,
14818
14953
  comments,
14819
14954
  layoutGuides,
@@ -14858,7 +14993,7 @@ var useMesurerHistory = ({
14858
14993
  clearSelectionRect
14859
14994
  } = transient;
14860
14995
  const { arrows: arrowEntries, setArrows, selectedArrowIds, setSelectedArrowIds } = arrows;
14861
- const { textAnnotations, setTextAnnotations } = text;
14996
+ const { textAnnotations, setTextAnnotations } = text2;
14862
14997
  const { penStrokes, setPenStrokes, selectedPenStrokeIds, setSelectedPenStrokeIds } = pen;
14863
14998
  const { comments: commentEntries, setComments } = comments;
14864
14999
  const { layoutGuides: layoutGuideEntries, setLayoutGuides } = layoutGuides;
@@ -15561,8 +15696,8 @@ var useCommentState = (initialComments = [], onChange) => {
15561
15696
  setDraft(nextDraft);
15562
15697
  };
15563
15698
  const cancelDraft = () => setDraft(null);
15564
- const addMessage = (id, text) => {
15565
- const value = text.trim();
15699
+ const addMessage = (id, text2) => {
15700
+ const value = text2.trim();
15566
15701
  if (!value) return false;
15567
15702
  const message = {
15568
15703
  id: createCommentId(),
@@ -15577,9 +15712,9 @@ var useCommentState = (initialComments = [], onChange) => {
15577
15712
  );
15578
15713
  return true;
15579
15714
  };
15580
- const commitDraft = (text) => {
15715
+ const commitDraft = (text2) => {
15581
15716
  if (!draft) return null;
15582
- const value = text.trim();
15717
+ const value = text2.trim();
15583
15718
  if (!value) return null;
15584
15719
  const now = Date.now();
15585
15720
  const comment = {
@@ -15639,8 +15774,8 @@ var useCommentState = (initialComments = [], onChange) => {
15639
15774
  )
15640
15775
  );
15641
15776
  };
15642
- const updateMessage = (commentId, messageId, text) => {
15643
- const value = text.trim();
15777
+ const updateMessage = (commentId, messageId, text2) => {
15778
+ const value = text2.trim();
15644
15779
  if (!value) return false;
15645
15780
  updateComments(
15646
15781
  (previous) => previous.map(
@@ -15752,7 +15887,7 @@ var useMesurerWorkspaceState = ({
15752
15887
  persistedState?.penStrokes ?? initialState?.penStrokes,
15753
15888
  persistedState?.selectedPenStrokeIds ?? initialState?.selectedPenStrokeIds
15754
15889
  );
15755
- const text = useTextAnnotationState(
15890
+ const text2 = useTextAnnotationState(
15756
15891
  persistedState?.textAnnotations ?? initialState?.textAnnotations,
15757
15892
  persistedState?.selectedTextIds ?? initialState?.selectedTextIds
15758
15893
  );
@@ -15793,7 +15928,7 @@ var useMesurerWorkspaceState = ({
15793
15928
  ...guides,
15794
15929
  ...arrows,
15795
15930
  ...pen,
15796
- ...text,
15931
+ ...text2,
15797
15932
  ...comments,
15798
15933
  toolbarActive,
15799
15934
  setToolbarActive,
@@ -17873,262 +18008,131 @@ async function cropTrackToElement(track, element) {
17873
18008
  return true;
17874
18009
  }
17875
18010
 
17876
- // core/screen-recording-webm.ts
17877
- var EBML_ID = 440786851;
17878
- var SEGMENT_ID = 408125543;
17879
- var INFO_ID = 357149030;
17880
- var TIMECODE_SCALE_ID = 2807729;
17881
- var DURATION_ID = 17545;
17882
- var CLUSTER_ID = 524531317;
17883
- var MASTER_IDS = /* @__PURE__ */ new Set([EBML_ID, SEGMENT_ID, INFO_ID]);
17884
- var readElementId = (bytes, offset) => {
17885
- const first = bytes[offset];
17886
- if (first === void 0 || first === 0) return null;
17887
- let length = 1;
17888
- let mask = 128;
17889
- while (length <= 4 && (first & mask) === 0) {
17890
- mask >>= 1;
17891
- length += 1;
17892
- }
17893
- if (offset + length > bytes.length) return null;
17894
- let id = 0;
17895
- for (let index = 0; index < length; index += 1) id = id * 256 + bytes[offset + index];
17896
- return { length, id };
17897
- };
17898
- var readElementSize = (bytes, offset) => {
17899
- const first = bytes[offset];
17900
- if (first === void 0 || first === 0) return null;
17901
- let length = 1;
17902
- let mask = 128;
17903
- while (length <= 8 && (first & mask) === 0) {
17904
- mask >>= 1;
17905
- length += 1;
18011
+ // core/mp4-boxes.ts
18012
+ var u16 = (value) => new Uint8Array([value >> 8 & 255, value & 255]);
18013
+ var u32 = (value) => new Uint8Array([value >>> 24 & 255, value >>> 16 & 255, value >>> 8 & 255, value & 255]);
18014
+ var text = (value) => new TextEncoder().encode(value);
18015
+ var join = (...parts) => {
18016
+ const output = new Uint8Array(parts.reduce((sum, part) => sum + part.length, 0));
18017
+ let offset = 0;
18018
+ for (const part of parts) {
18019
+ output.set(part, offset);
18020
+ offset += part.length;
17906
18021
  }
17907
- if (offset + length > bytes.length) return null;
17908
- const marker = mask - 1;
17909
- let unknown = (first & marker) === marker;
17910
- let value = first & marker;
17911
- for (let index = 1; index < length; index += 1) {
17912
- const byte = bytes[offset + index];
17913
- if (byte !== 255) unknown = false;
17914
- value = value * 256 + byte;
18022
+ return output;
18023
+ };
18024
+ var box = (type, ...payload) => join(u32(8 + payload.reduce((sum, part) => sum + part.length, 0)), text(type), ...payload);
18025
+ var fullBox = (type, version, flags, ...payload) => box(type, new Uint8Array([version, flags >> 16 & 255, flags >> 8 & 255, flags & 255]), ...payload);
18026
+ var zeros = (length) => new Uint8Array(length);
18027
+ function muxH264Mp4(width, height, samples, avcConfig, timescale = 9e4) {
18028
+ const durations = samples.map((sample, index) => index + 1 < samples.length ? Math.max(1, Math.round((samples[index + 1].timestamp - sample.timestamp) * timescale / 1e6)) : Math.max(1, Math.round(timescale / 30)));
18029
+ const duration = durations.reduce((sum, value) => sum + value, 0);
18030
+ const mdatPayload = join(...samples.map((sample) => sample.data));
18031
+ const ftyp = box("ftyp", text("isom"), u32(512), text("isomiso2avc1mp41"));
18032
+ const mvhd = fullBox("mvhd", 0, 0, zeros(8), u32(timescale), u32(duration), u32(65536), u16(256), zeros(10), u32(65536), zeros(12), u32(65536), zeros(12), u32(2));
18033
+ const tkhd = fullBox("tkhd", 0, 7, zeros(8), u32(1), zeros(4), u32(duration), zeros(8), u16(0), u16(0), u16(0), u16(0), u32(65536), zeros(12), u32(65536), zeros(12), u32(width << 16), u32(height << 16));
18034
+ const mdhd = fullBox("mdhd", 0, 0, zeros(8), u32(timescale), u32(duration), u16(21956), u16(0));
18035
+ const hdlr = fullBox("hdlr", 0, 0, zeros(4), text("vide"), zeros(12), text("Mesurer Video\0"));
18036
+ const vmhd = fullBox("vmhd", 0, 1, zeros(8));
18037
+ const dref = fullBox("dref", 0, 0, u32(1), fullBox("url ", 0, 1));
18038
+ const avc1 = box("avc1", zeros(6), u16(1), zeros(16), u16(width), u16(height), u32(4718592), u32(4718592), zeros(4), u16(1), zeros(32), u16(24), u16(65535), box("avcC", avcConfig));
18039
+ const stsd = fullBox("stsd", 0, 0, u32(1), avc1);
18040
+ const runs = [];
18041
+ for (const delta of durations) {
18042
+ const last = runs[runs.length - 1];
18043
+ if (last?.delta === delta) last.count += 1;
18044
+ else runs.push({ count: 1, delta });
17915
18045
  }
17916
- return { length, value, unknown };
17917
- };
17918
- var readUint = (bytes, offset, size) => {
17919
- let value = 0;
17920
- for (let index = 0; index < size; index += 1) value = value * 256 + bytes[offset + index];
17921
- return value;
17922
- };
17923
- function writeWebmDuration(bytes, durationSeconds) {
17924
- if (!(durationSeconds > 0)) return false;
17925
- let timecodeScale = 1e6;
17926
- let durationOffset = -1;
17927
- let durationSize = 0;
17928
- const walk = (start, end, inInfo) => {
17929
- let cursor = start;
17930
- while (cursor + 2 < end && durationOffset < 0) {
17931
- const id = readElementId(bytes, cursor);
17932
- if (!id) return;
17933
- cursor += id.length;
17934
- const size = readElementSize(bytes, cursor);
17935
- if (!size) return;
17936
- cursor += size.length;
17937
- const dataStart = cursor;
17938
- if (id.id === CLUSTER_ID) return;
17939
- if (id.id === TIMECODE_SCALE_ID && !size.unknown && size.value > 0 && size.value <= 8) {
17940
- timecodeScale = readUint(bytes, dataStart, size.value);
17941
- }
17942
- if (id.id === DURATION_ID && inInfo && !size.unknown && (size.value === 4 || size.value === 8)) {
17943
- durationOffset = dataStart;
17944
- durationSize = size.value;
17945
- return;
17946
- }
17947
- const dataEnd = size.unknown ? end : dataStart + size.value;
17948
- if (size.unknown || MASTER_IDS.has(id.id)) {
17949
- walk(dataStart, dataEnd, inInfo || id.id === INFO_ID);
17950
- if (durationOffset >= 0) return;
17951
- }
17952
- if (size.unknown) return;
17953
- cursor = dataEnd;
17954
- }
17955
- };
17956
- walk(0, bytes.length, false);
17957
- if (durationOffset < 0 || timecodeScale <= 0) return false;
17958
- const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
17959
- const current = durationSize === 8 ? view.getFloat64(durationOffset) : view.getFloat32(durationOffset);
17960
- const next = durationSeconds * (1e9 / timecodeScale);
17961
- if (Number.isFinite(current) && current >= next - 1e9 / timecodeScale * 0.05) return false;
17962
- if (durationSize === 8) view.setFloat64(durationOffset, next);
17963
- else view.setFloat32(durationOffset, next);
17964
- return true;
17965
- }
17966
- async function correctWebmDuration(blob, durationSeconds) {
17967
- if (!(durationSeconds > 0) || !blob.type.includes("webm")) return blob;
17968
- const bytes = new Uint8Array(await blob.arrayBuffer());
17969
- if (!writeWebmDuration(bytes, durationSeconds)) return blob;
17970
- return new Blob([bytes], { type: blob.type || "video/webm" });
18046
+ const stts = fullBox("stts", 0, 0, u32(runs.length), ...runs.map((run) => join(u32(run.count), u32(run.delta))));
18047
+ const stsc = fullBox("stsc", 0, 0, u32(1), u32(1), u32(samples.length), u32(1));
18048
+ const stsz = fullBox("stsz", 0, 0, u32(0), u32(samples.length), ...samples.map((sample) => u32(sample.data.length)));
18049
+ const stss = samples.some((sample) => !sample.key) ? fullBox("stss", 0, 0, u32(samples.filter((sample) => sample.key).length), ...samples.flatMap((sample, index) => sample.key ? [u32(index + 1)] : [])) : null;
18050
+ const stbl = box("stbl", stsd, stts, stsc, stsz, stss ?? new Uint8Array());
18051
+ const minf = box("minf", vmhd, box("dinf", dref), stbl);
18052
+ const trak = box("trak", tkhd, box("mdia", mdhd, hdlr, minf));
18053
+ const moov = box("moov", mvhd, trak);
18054
+ const chunkOffset = ftyp.length + moov.length + 20 + 8;
18055
+ const stco = fullBox("stco", 0, 0, u32(1), u32(chunkOffset));
18056
+ const patchedStbl = box("stbl", stsd, stts, stsc, stsz, stco, stss ?? new Uint8Array());
18057
+ const patchedMoov = box("moov", mvhd, box("trak", tkhd, box("mdia", mdhd, hdlr, box("minf", vmhd, box("dinf", dref), patchedStbl))));
18058
+ return join(ftyp, patchedMoov, box("mdat", mdatPayload));
17971
18059
  }
17972
18060
 
17973
- // core/screen-recording-export.ts
17974
- function resolveRecordingDuration(mediaDuration, elapsedSeconds) {
17975
- const media = Number.isFinite(mediaDuration) && mediaDuration > 0 ? mediaDuration : 0;
17976
- const elapsed = Number.isFinite(elapsedSeconds) && elapsedSeconds > 0 ? elapsedSeconds : 0;
17977
- if (media <= 0 && elapsed <= 0) return 0.1;
17978
- if (media <= 0) return Math.max(elapsed, 0.1);
17979
- if (elapsed <= 0) return media;
17980
- if (media < elapsed * 0.9) return elapsed;
17981
- return Math.min(media, elapsed);
17982
- }
17983
- function isFullClipExport(startTime, endTime, duration, tolerance = 0.05) {
17984
- return startTime <= tolerance && endTime >= duration - tolerance;
17985
- }
17986
- async function readBlobVideoDuration(blob, ownerDocument) {
17987
- const url = URL.createObjectURL(blob);
17988
- const video = ownerDocument.createElement("video");
17989
- video.preload = "metadata";
17990
- video.muted = true;
17991
- try {
17992
- return await new Promise((resolve, reject) => {
17993
- video.onloadedmetadata = () => {
17994
- resolve(video.duration);
17995
- };
17996
- video.onerror = () => reject(new Error("Could not read recording"));
17997
- video.src = url;
17998
- });
17999
- } finally {
18000
- URL.revokeObjectURL(url);
18001
- video.removeAttribute("src");
18002
- }
18003
- }
18004
- async function seekVideoElement(video, time) {
18005
- const target = Math.max(0, time);
18006
- if (target <= 0 && video.readyState >= 1) {
18007
- video.currentTime = 0;
18008
- return;
18009
- }
18010
- await new Promise((resolve, reject) => {
18011
- const onSeeked = () => resolve();
18012
- const onError = () => reject(new Error("Could not seek recording"));
18013
- video.addEventListener("seeked", onSeeked, { once: true });
18014
- video.addEventListener("error", onError, { once: true });
18015
- if (video.readyState < 1) {
18016
- video.addEventListener(
18017
- "loadedmetadata",
18018
- () => {
18019
- video.currentTime = target;
18020
- },
18021
- { once: true }
18022
- );
18023
- } else {
18024
- video.currentTime = target;
18061
+ // core/screen-recording-mp4.ts
18062
+ var encoderCtor = (ownerWindow) => ownerWindow.VideoEncoder;
18063
+ var codecs = ["avc1.42001E", "avc1.42001F", "avc1.4D001F", "avc1.64001F"];
18064
+ var even = (value) => Math.max(2, Math.round(value) & ~1);
18065
+ async function supportedMp4Config(ownerWindow, width, height) {
18066
+ const Encoder = encoderCtor(ownerWindow);
18067
+ if (!Encoder) return null;
18068
+ const dimensions = { width: even(width), height: even(height) };
18069
+ for (const codec of codecs) {
18070
+ try {
18071
+ const result = await Encoder.isConfigSupported({ codec, ...dimensions, bitrate: 4e6, framerate: 30, avc: { format: "avc" } });
18072
+ if (result?.supported) return result.config;
18073
+ } catch {
18025
18074
  }
18026
- });
18027
- }
18028
- async function requestDisplayMediaStream(ownerWindow) {
18029
- const fallback = {
18030
- audio: false,
18031
- video: true
18032
- };
18033
- const chromium = {
18034
- audio: false,
18035
- video: { displaySurface: "browser" },
18036
- preferCurrentTab: true,
18037
- selfBrowserSurface: "include"
18038
- };
18039
- try {
18040
- return await ownerWindow.navigator.mediaDevices.getDisplayMedia(chromium);
18041
- } catch (error) {
18042
- if (error instanceof DOMException && error.name === "AbortError") throw error;
18043
- return await ownerWindow.navigator.mediaDevices.getDisplayMedia(fallback);
18044
18075
  }
18076
+ return null;
18045
18077
  }
18046
- async function reencodeVideoClip(ownerDocument, ownerWindow, sourceUrl, startTime, endTime, scale, mimeType) {
18078
+ async function supportsMp4Encoding(ownerWindow, width, height) {
18079
+ return Boolean(await supportedMp4Config(ownerWindow, width, height));
18080
+ }
18081
+ async function encodeMp4Clip(ownerDocument, ownerWindow, sourceUrl, startTime, endTime, scale) {
18047
18082
  const source = ownerDocument.createElement("video");
18048
18083
  source.muted = true;
18049
18084
  source.playsInline = true;
18050
- source.src = sourceUrl;
18051
18085
  source.preload = "auto";
18052
- await new Promise((resolve, reject) => {
18053
- const ready = () => source.videoWidth > 0 && source.videoHeight > 0;
18054
- const finish = () => {
18055
- if (!ready()) return;
18056
- resolve();
18057
- };
18058
- source.onloadedmetadata = finish;
18059
- source.onloadeddata = finish;
18060
- source.onresize = finish;
18061
- source.onerror = () => reject(new Error("Could not trim recording"));
18062
- if (ready()) resolve();
18063
- });
18064
- await seekVideoElement(source, startTime);
18065
- if (source.videoWidth <= 0 || source.videoHeight <= 0) {
18066
- await new Promise((resolve) => {
18067
- if (typeof source.requestVideoFrameCallback === "function") {
18068
- source.requestVideoFrameCallback(() => resolve());
18069
- return;
18070
- }
18071
- ownerWindow.requestAnimationFrame(() => resolve());
18086
+ source.src = sourceUrl;
18087
+ try {
18088
+ await new Promise((resolve, reject) => {
18089
+ const ready = () => source.videoWidth > 0 && source.videoHeight > 0 && source.readyState >= 2;
18090
+ const finish = () => ready() && resolve();
18091
+ source.onloadedmetadata = finish;
18092
+ source.onloadeddata = finish;
18093
+ source.onerror = () => reject(new Error("Could not export MP4"));
18094
+ if (ready()) resolve();
18072
18095
  });
18073
- }
18074
- const canvas = ownerDocument.createElement("canvas");
18075
- canvas.width = Math.max(1, Math.round(source.videoWidth * scale));
18076
- canvas.height = Math.max(1, Math.round(source.videoHeight * scale));
18077
- const context = canvas.getContext("2d");
18078
- if (!context) throw new Error("Could not trim recording");
18079
- const stream = canvas.captureStream(30);
18080
- const captureTrack = stream.getVideoTracks()[0];
18081
- const requestFrame = captureTrack && "requestFrame" in captureTrack ? captureTrack.requestFrame : void 0;
18082
- const recorder = new MediaRecorder(stream, mimeType ? { mimeType } : void 0);
18083
- const chunks = [];
18084
- return await new Promise((resolve, reject) => {
18085
- let stopped = false;
18086
- const onTimeUpdate = () => {
18087
- if (source.currentTime >= endTime) finish();
18088
- };
18089
- const finish = () => {
18090
- if (stopped) return;
18091
- stopped = true;
18092
- source.removeEventListener("timeupdate", onTimeUpdate);
18093
- source.pause();
18094
- try {
18095
- recorder.stop();
18096
- } catch {
18097
- reject(new Error("Could not trim recording"));
18098
- }
18099
- };
18100
- const drawFrame = () => {
18101
- if (stopped) return;
18096
+ const canvas = ownerDocument.createElement("canvas");
18097
+ canvas.width = even(source.videoWidth * scale);
18098
+ canvas.height = even(source.videoHeight * scale);
18099
+ const context = canvas.getContext("2d");
18100
+ const Encoder = encoderCtor(ownerWindow);
18101
+ if (!context || !Encoder) throw new Error("MP4 export is unavailable");
18102
+ const samples = [];
18103
+ let avcConfig;
18104
+ let failure;
18105
+ const config = await supportedMp4Config(ownerWindow, canvas.width, canvas.height);
18106
+ if (!config) throw new Error("MP4 export is unavailable");
18107
+ const encoder = new Encoder({ output: (chunk, metadata) => {
18108
+ const data = new Uint8Array(chunk.byteLength);
18109
+ chunk.copyTo(data);
18110
+ samples.push({ data, key: chunk.type === "key", timestamp: chunk.timestamp });
18111
+ const description = metadata?.decoderConfig?.description;
18112
+ if (description) avcConfig = new Uint8Array(description);
18113
+ }, error: (error) => {
18114
+ failure = error;
18115
+ } });
18116
+ encoder.configure(config);
18117
+ const VideoFrameCtor = ownerWindow.VideoFrame;
18118
+ if (!VideoFrameCtor) throw new Error("MP4 export is unavailable");
18119
+ let frameIndex = 0;
18120
+ for (const time of Array.from({ length: Math.max(1, Math.ceil((endTime - startTime) * 30)) }, (_, index) => startTime + index / 30)) {
18121
+ await seekVideoElement(source, Math.min(endTime, time));
18102
18122
  context.drawImage(source, 0, 0, canvas.width, canvas.height);
18103
- requestFrame?.call(captureTrack);
18104
- if (source.currentTime >= endTime || source.ended) {
18105
- finish();
18106
- return;
18107
- }
18108
- if (typeof source.requestVideoFrameCallback === "function") {
18109
- source.requestVideoFrameCallback(() => drawFrame());
18110
- } else {
18111
- ownerWindow.requestAnimationFrame(drawFrame);
18112
- }
18113
- };
18114
- recorder.ondataavailable = (event) => {
18115
- if (event.data.size > 0) chunks.push(event.data);
18116
- };
18117
- recorder.onstop = () => {
18118
- const recorded = new Blob(chunks, { type: recorder.mimeType || mimeType || "video/webm" });
18119
- void correctWebmDuration(recorded, Math.max(0.1, endTime - startTime)).then(resolve, reject);
18120
- };
18121
- recorder.onerror = () => reject(new Error("Could not trim recording"));
18122
- source.addEventListener("timeupdate", onTimeUpdate);
18123
- recorder.start(100);
18124
- void source.play().then(
18125
- () => drawFrame(),
18126
- () => {
18127
- source.removeEventListener("timeupdate", onTimeUpdate);
18128
- reject(new Error("Could not trim recording"));
18129
- }
18130
- );
18131
- });
18123
+ const frame = new VideoFrameCtor(canvas, { timestamp: Math.round(frameIndex++ * 1e6 / 30) });
18124
+ encoder.encode(frame, { keyFrame: frameIndex === 1 || frameIndex % 60 === 0 });
18125
+ frame.close();
18126
+ }
18127
+ await encoder.flush();
18128
+ encoder.close();
18129
+ if (failure || !avcConfig || samples.length === 0) throw failure ?? new Error("Could not export MP4");
18130
+ return new Blob([new Uint8Array(muxH264Mp4(canvas.width, canvas.height, samples, avcConfig))], { type: "video/mp4" });
18131
+ } finally {
18132
+ source.pause();
18133
+ source.removeAttribute("src");
18134
+ source.load();
18135
+ }
18132
18136
  }
18133
18137
 
18134
18138
  // core/screen-recording-display-capture.ts
@@ -18257,8 +18261,8 @@ function paintDisplayRecordingFrame(capture, rect, getViewport) {
18257
18261
  const { source, canvas, context, regionLocked, cropTarget, captureTrack } = capture;
18258
18262
  if (source.videoWidth <= 0 || source.videoHeight <= 0) return;
18259
18263
  if (regionLocked && cropTarget) {
18260
- const box = cropTarget.getBoundingClientRect();
18261
- const slice = visibleSelectionSlice(box, getViewport());
18264
+ const box2 = cropTarget.getBoundingClientRect();
18265
+ const slice = visibleSelectionSlice(box2, getViewport());
18262
18266
  if (!slice.visible) {
18263
18267
  context.fillStyle = "#000";
18264
18268
  context.fillRect(0, 0, canvas.width, canvas.height);
@@ -18321,16 +18325,12 @@ function runDisplayRecordingDrawLoop(ownerWindow, capture, rect, getViewport, dr
18321
18325
  }
18322
18326
 
18323
18327
  // hooks/screen-recording-export.ts
18324
- var mp4MimeType = () => ["video/mp4;codecs=avc1.42E01E", "video/mp4"].find((type) => MediaRecorder.isTypeSupported(type));
18325
18328
  var supportedRecordingFormats = () => {
18326
- const formats = ["webm"];
18327
- if (typeof MediaRecorder !== "undefined" && mp4MimeType()) formats.push("mp4");
18328
- return formats;
18329
+ return ["webm", "gif"];
18329
18330
  };
18330
18331
  var supportedWebmMimeType = () => ["video/webm;codecs=vp9", "video/webm;codecs=vp8", "video/webm"].find(
18331
18332
  (type) => MediaRecorder.isTypeSupported(type)
18332
18333
  );
18333
- var supportedMp4MimeType = mp4MimeType;
18334
18334
 
18335
18335
  // hooks/use-screen-recording.ts
18336
18336
  var MAX_RECORDING_MS = 6e4;
@@ -18643,8 +18643,16 @@ var useScreenRecording = ({ ownerDocument, ownerWindow, onPrepare, extensionReco
18643
18643
  const blob2 = await fetch(video.url).then((response) => response.blob());
18644
18644
  return { blob: blob2, filename };
18645
18645
  }
18646
- const mimeType = format === "mp4" ? supportedMp4MimeType() : supportedWebmMimeType();
18647
- if (format === "mp4" && !mimeType) throw new Error("MP4 export is unavailable");
18646
+ if (format === "gif") {
18647
+ return {
18648
+ blob: await encodeGifClip(ownerDocument, video.url, startTime, endTime, scale),
18649
+ filename
18650
+ };
18651
+ }
18652
+ if (format === "mp4") {
18653
+ return { blob: await encodeMp4Clip(ownerDocument, ownerWindow, video.url, startTime, endTime, scale), filename };
18654
+ }
18655
+ const mimeType = supportedWebmMimeType();
18648
18656
  const blob = await reencodeVideoClip(
18649
18657
  ownerDocument,
18650
18658
  ownerWindow,
@@ -18702,7 +18710,8 @@ var TIMELINE_BAR_MOTION = "msr:transition-[height] msr:duration-300 msr:ease-[cu
18702
18710
  var SCALE_OPTIONS = [1, 2, 3];
18703
18711
  var FORMAT_LABEL = {
18704
18712
  webm: "WebM",
18705
- mp4: "MP4"
18713
+ mp4: "MP4",
18714
+ gif: "GIF"
18706
18715
  };
18707
18716
  var scaleLabel = (scale, size) => {
18708
18717
  if (!size) return `${scale}\xD7`;
@@ -18833,24 +18842,118 @@ function TrimHandle({
18833
18842
  }
18834
18843
  function ScreenRecordingEditor(props) {
18835
18844
  if (props.playerUrl) {
18836
- return /* @__PURE__ */ jsx68(ExtensionRecordingFrame, { ...props });
18845
+ return /* @__PURE__ */ jsx68(ExtensionRecordingFrame, { playerUrl: props.playerUrl, onDiscard: props.onDiscard });
18837
18846
  }
18838
18847
  return /* @__PURE__ */ jsx68(StandardScreenRecordingEditor, { ...props });
18839
18848
  }
18840
- function ExtensionRecordingFrame({ playerUrl, onDiscard }) {
18849
+ var RECORDING_FRAME_WIDTH = 22 * 16;
18850
+ var RECORDING_FRAME_SHADOW = 28;
18851
+ var recordingTheme = (from) => {
18852
+ const theme = (from?.closest("[data-mesurer-root]") ?? document.querySelector("[data-mesurer-root]"))?.getAttribute("data-theme");
18853
+ return theme === "light" || theme === "dark" || theme === "system" ? theme : "system";
18854
+ };
18855
+ function ExtensionRecordingFrame({
18856
+ playerUrl,
18857
+ onDiscard
18858
+ }) {
18859
+ const hostRef = useRef40(null);
18841
18860
  const frameRef = useRef40(null);
18861
+ const [frameSize, setFrameSize] = useState31({ width: RECORDING_FRAME_WIDTH, height: 280, menuExtra: 0 });
18862
+ const [anchorSide, setAnchorSide] = useState31("top");
18863
+ const [src, setSrc] = useState31(null);
18864
+ useLayoutEffect19(() => {
18865
+ const url = new URL(playerUrl);
18866
+ url.searchParams.set("theme", recordingTheme(hostRef.current));
18867
+ setSrc(url.toString());
18868
+ }, [playerUrl]);
18869
+ const postFrameState = useCallback23(() => {
18870
+ const frame = frameRef.current;
18871
+ const panel = frame?.parentElement?.parentElement;
18872
+ const side = panel?.style.bottom ? "bottom" : "top";
18873
+ setAnchorSide(side);
18874
+ frame?.contentWindow?.postMessage({ type: "mesurer:recording-theme", theme: recordingTheme(frame ?? hostRef.current) }, "*");
18875
+ frame?.contentWindow?.postMessage({ type: "mesurer:recording-anchor", side }, "*");
18876
+ }, []);
18842
18877
  useEffect15(() => {
18843
18878
  const onMessage = (event) => {
18844
- if (event.source === frameRef.current?.contentWindow && event.data?.type === "mesurer:recording-discard") {
18845
- onDiscard();
18879
+ if (event.source !== frameRef.current?.contentWindow) return;
18880
+ if (event.data?.type === "mesurer:recording-discard") onDiscard();
18881
+ if (event.data?.type === "mesurer:recording-frame-intent" && typeof event.data.expanded === "boolean") {
18882
+ setFrameSize((current) => ({
18883
+ ...current,
18884
+ width: event.data.expanded ? 36 * 16 : RECORDING_FRAME_WIDTH,
18885
+ height: event.data.expanded ? Math.max(current.height, 520) : current.height
18886
+ }));
18887
+ }
18888
+ if (event.data?.type === "mesurer:recording-frame-size" && typeof event.data.width === "number" && typeof event.data.height === "number" && event.data.width >= 32 && event.data.height >= 32) {
18889
+ setFrameSize({
18890
+ width: event.data.width,
18891
+ height: event.data.height,
18892
+ menuExtra: typeof event.data.menuExtra === "number" ? event.data.menuExtra : 0
18893
+ });
18846
18894
  }
18847
18895
  };
18848
18896
  window.addEventListener("message", onMessage);
18849
- return () => window.removeEventListener("message", onMessage);
18850
- }, [onDiscard]);
18851
- return /* @__PURE__ */ jsx68("iframe", { ref: frameRef, title: "Recording preview", src: playerUrl, className: "msr:block msr:max-w-[calc(100vw-16px)] msr:border-0 msr:bg-transparent", style: { width: "calc(36rem + 24px)", height: "calc(32rem + 24px)", margin: -12 } });
18897
+ const root = (frameRef.current ?? hostRef.current)?.closest("[data-mesurer-root]");
18898
+ const panel = frameRef.current?.parentElement?.parentElement;
18899
+ const observer = new MutationObserver(postFrameState);
18900
+ if (root) observer.observe(root, { attributes: true, attributeFilter: ["data-theme"] });
18901
+ if (panel) observer.observe(panel, { attributes: true, attributeFilter: ["style"] });
18902
+ return () => {
18903
+ window.removeEventListener("message", onMessage);
18904
+ observer.disconnect();
18905
+ };
18906
+ }, [onDiscard, postFrameState, src]);
18907
+ const menuAbove = anchorSide === "bottom";
18908
+ const shadow = RECORDING_FRAME_SHADOW;
18909
+ const frameWidth = frameSize.width + shadow * 2;
18910
+ const frameHeight = frameSize.height + frameSize.menuExtra + shadow * 2;
18911
+ return /* @__PURE__ */ jsx68(
18912
+ "div",
18913
+ {
18914
+ ref: hostRef,
18915
+ className: "msr:relative msr:max-w-[calc(100vw-16px)] msr:bg-transparent",
18916
+ style: {
18917
+ width: frameSize.width,
18918
+ height: frameSize.height
18919
+ },
18920
+ children: src ? /* @__PURE__ */ jsx68(
18921
+ "div",
18922
+ {
18923
+ className: "msr:pointer-events-none msr:absolute",
18924
+ style: {
18925
+ width: frameWidth,
18926
+ height: frameHeight,
18927
+ left: -shadow,
18928
+ top: menuAbove ? -(frameSize.menuExtra + shadow) : -shadow,
18929
+ // The iframe is larger than the card so its shadow can paint.
18930
+ // Clip the edge that faces the toolbar; otherwise that transparent
18931
+ // strip sits on the toolbar and swallows clicks.
18932
+ clipPath: menuAbove ? `inset(0 0 ${shadow}px 0)` : `inset(${shadow}px 0 0 0)`
18933
+ },
18934
+ children: /* @__PURE__ */ jsx68(
18935
+ "iframe",
18936
+ {
18937
+ ref: frameRef,
18938
+ title: "Recording preview",
18939
+ src,
18940
+ onLoad: postFrameState,
18941
+ allowTransparency: true,
18942
+ className: "msr:pointer-events-auto msr:absolute msr:inset-0 msr:size-full msr:border-0 msr:bg-transparent msr:shadow-none",
18943
+ style: {
18944
+ backgroundColor: "transparent",
18945
+ colorScheme: "light",
18946
+ border: 0,
18947
+ boxShadow: "none"
18948
+ }
18949
+ }
18950
+ )
18951
+ }
18952
+ ) : null
18953
+ }
18954
+ );
18852
18955
  }
18853
- function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, ownerDocument }) {
18956
+ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, ownerDocument, fillFrame }) {
18854
18957
  const videoRef = useRef40(null);
18855
18958
  const trackRef = useRef40(null);
18856
18959
  const playheadRef = useRef40(null);
@@ -18869,7 +18972,8 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
18869
18972
  const [playing, setPlaying] = useState31(false);
18870
18973
  const [exporting, setExporting] = useState31(false);
18871
18974
  const [expanded, setExpanded] = useState31(false);
18872
- const formats = useMemo4(() => supportedRecordingFormats(), []);
18975
+ const [mp4Supported, setMp4Supported] = useState31(false);
18976
+ const formats = useMemo4(() => mp4Supported ? [...supportedRecordingFormats(), "mp4"] : supportedRecordingFormats(), [mp4Supported]);
18873
18977
  const [format, setFormat] = useState31(formats[0] ?? "webm");
18874
18978
  const [scale, setScale] = useState31(1);
18875
18979
  const [frameSize, setFrameSize] = useState31(null);
@@ -18884,6 +18988,22 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
18884
18988
  const [exportMenuBox, setExportMenuBox] = useState31(null);
18885
18989
  startRef.current = start;
18886
18990
  endRef.current = end;
18991
+ useEffect15(() => {
18992
+ let active = true;
18993
+ setMp4Supported(false);
18994
+ if (!frameSize || !ownerDocument.defaultView) return () => {
18995
+ active = false;
18996
+ };
18997
+ void supportsMp4Encoding(ownerDocument.defaultView, frameSize.width, frameSize.height).then((supported) => {
18998
+ if (active) setMp4Supported(supported);
18999
+ });
19000
+ return () => {
19001
+ active = false;
19002
+ };
19003
+ }, [frameSize, ownerDocument]);
19004
+ useEffect15(() => {
19005
+ if (!mp4Supported && format === "mp4") setFormat("webm");
19006
+ }, [format, mp4Supported]);
18887
19007
  useEffect15(() => {
18888
19008
  setStart(0);
18889
19009
  setEnd(duration);
@@ -18946,9 +19066,10 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
18946
19066
  const padding = 8;
18947
19067
  const spaceAbove = rect.top - origin.top - padding;
18948
19068
  const spaceBelow = origin.bottom - rect.bottom - padding;
18949
- const openAbove = spaceAbove >= height || spaceAbove >= spaceBelow;
19069
+ const anchorSide = ownerDocument.getElementById("root")?.getAttribute("data-anchor");
19070
+ const openAbove = anchorSide === "bottom" ? true : anchorSide === "top" ? false : spaceAbove >= height || spaceAbove >= spaceBelow;
18950
19071
  const preferredTop = openAbove ? rect.top - origin.top - height - gap : rect.bottom - origin.top + gap;
18951
- setExportMenuBox(clampOverlayPosition({
19072
+ const placed = clampOverlayPosition({
18952
19073
  left: rect.right - origin.left - width,
18953
19074
  top: preferredTop,
18954
19075
  width,
@@ -18956,13 +19077,18 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
18956
19077
  viewportWidth: origin.width,
18957
19078
  viewportHeight: origin.height,
18958
19079
  padding
18959
- }));
19080
+ });
19081
+ const ready = anchorSide ? openAbove ? spaceAbove >= height : spaceBelow >= height : true;
19082
+ setExportMenuBox({ left: placed.left, top: anchorSide ? preferredTop : placed.top, ready });
18960
19083
  };
18961
19084
  update();
18962
19085
  const view = ownerDocument.defaultView;
18963
19086
  view?.addEventListener("resize", update);
18964
19087
  view?.addEventListener("scroll", update, true);
19088
+ const observer = new ResizeObserver(update);
19089
+ observer.observe(overlayLayer);
18965
19090
  return () => {
19091
+ observer.disconnect();
18966
19092
  view?.removeEventListener("resize", update);
18967
19093
  view?.removeEventListener("scroll", update, true);
18968
19094
  };
@@ -19148,6 +19274,7 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
19148
19274
  }, [exporting, updatePlayheadPosition]);
19149
19275
  const downloadRecording = async () => {
19150
19276
  if (exporting) return;
19277
+ setExportMenuOpen(false);
19151
19278
  setExporting(true);
19152
19279
  setError(null);
19153
19280
  try {
@@ -19162,8 +19289,8 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
19162
19289
  link.click();
19163
19290
  link.remove();
19164
19291
  ownerDocument.defaultView?.setTimeout(() => URL.revokeObjectURL(objectUrl), 0);
19165
- } catch {
19166
- setError("Could not export the recording.");
19292
+ } catch (caught) {
19293
+ setError(caught instanceof Error && caught.message ? caught.message : "Could not export the recording.");
19167
19294
  } finally {
19168
19295
  setExporting(false);
19169
19296
  }
@@ -19184,11 +19311,12 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
19184
19311
  ref: cardRef,
19185
19312
  tabIndex: 0,
19186
19313
  "aria-keyshortcuts": "Space",
19314
+ "data-mesurer-recording-card": true,
19187
19315
  "data-expanded": expanded ? "true" : "false",
19188
19316
  className: cn(
19189
19317
  "mesurer-menu-surface msr:relative msr:box-border msr:overflow-visible msr:rounded-wide-card msr:bg-white msr:shadow-floating msr:outline-none",
19190
- "msr:w-[22rem] msr:max-w-[calc(100vw-24px)] msr:transition-[width] msr:duration-200 msr:ease-[ease] msr:motion-reduce:transition-none",
19191
- expanded && "msr:w-[36rem]"
19318
+ fillFrame ? "msr:w-full msr:max-w-none" : "msr:w-[22rem] msr:max-w-[calc(100vw-24px)] msr:transition-[width] msr:duration-200 msr:ease-[ease] msr:motion-reduce:transition-none",
19319
+ !fillFrame && expanded && "msr:w-[36rem]"
19192
19320
  ),
19193
19321
  "aria-label": "Screen recording editor",
19194
19322
  "aria-busy": exporting,
@@ -19273,7 +19401,7 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
19273
19401
  )
19274
19402
  }
19275
19403
  ),
19276
- exporting ? /* @__PURE__ */ jsx68("div", { className: "msr:absolute msr:inset-0 msr:z-30 msr:flex msr:items-center msr:justify-center msr:bg-ink-900/45 msr:text-[11px] msr:text-white", children: /* @__PURE__ */ jsx68(StatusEllipsis, { label: "Exporting" }) }) : null,
19404
+ exporting ? /* @__PURE__ */ jsx68("div", { className: "msr:absolute msr:inset-0 msr:z-30 msr:flex msr:items-center msr:justify-center msr:bg-black/80 msr:text-[11px] msr:font-medium msr:text-white msr:drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]", children: /* @__PURE__ */ jsx68(StatusEllipsis, { label: "Generating" }) }) : null,
19277
19405
  /* @__PURE__ */ jsxs52(
19278
19406
  "div",
19279
19407
  {
@@ -19414,6 +19542,7 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
19414
19542
  variant: "ghost",
19415
19543
  "aria-haspopup": "menu",
19416
19544
  "aria-expanded": exportMenuOpen,
19545
+ disabled: exporting,
19417
19546
  "aria-label": "Export options",
19418
19547
  className: "msr:px-1 msr:font-mono msr:text-[10px] msr:leading-none",
19419
19548
  style: { height: 20 },
@@ -19442,7 +19571,7 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
19442
19571
  {
19443
19572
  ref: exportMenuSurfaceRef,
19444
19573
  className: "msr:pointer-events-auto msr:absolute",
19445
- style: exportMenuBox ? { left: exportMenuBox.left, top: exportMenuBox.top } : { left: 0, top: 0, visibility: "hidden" },
19574
+ style: exportMenuBox?.ready ? { left: exportMenuBox.left, top: exportMenuBox.top } : { left: exportMenuBox?.left ?? 0, top: exportMenuBox?.top ?? 0, visibility: "hidden" },
19446
19575
  children: /* @__PURE__ */ jsxs52(MenuSurface, { className: "msr:w-max msr:min-w-44", children: [
19447
19576
  /* @__PURE__ */ jsx68("p", { className: "msr:px-2 msr:py-1 msr:text-[10px] msr:font-medium msr:text-ink-500", children: "Format" }),
19448
19577
  formats.map((item) => {
@@ -19453,7 +19582,10 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
19453
19582
  variant: "neutral",
19454
19583
  className: exportMenuRowClass(selected),
19455
19584
  "aria-checked": selected,
19456
- onClick: () => setFormat(item),
19585
+ onClick: () => {
19586
+ setFormat(item);
19587
+ setExportMenuOpen(false);
19588
+ },
19457
19589
  children: [
19458
19590
  /* @__PURE__ */ jsx68(
19459
19591
  CheckIcon,
@@ -19477,7 +19609,10 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
19477
19609
  variant: "neutral",
19478
19610
  className: exportMenuRowClass(selected),
19479
19611
  "aria-checked": selected,
19480
- onClick: () => setScale(item),
19612
+ onClick: () => {
19613
+ setScale(item);
19614
+ setExportMenuOpen(false);
19615
+ },
19481
19616
  children: [
19482
19617
  /* @__PURE__ */ jsx68(
19483
19618
  CheckIcon,
@@ -19514,7 +19649,13 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
19514
19649
  tooltipId: "recording-resize",
19515
19650
  tooltip,
19516
19651
  pressed: expanded,
19517
- onClick: () => setExpanded((current) => !current),
19652
+ onClick: () => {
19653
+ const next = !expanded;
19654
+ if (ownerDocument.defaultView && ownerDocument.defaultView.parent !== ownerDocument.defaultView) {
19655
+ ownerDocument.defaultView.parent.postMessage({ type: "mesurer:recording-frame-intent", expanded: next }, "*");
19656
+ }
19657
+ setExpanded(next);
19658
+ },
19518
19659
  children: expanded ? /* @__PURE__ */ jsx68(CollapseIcon, {}) : /* @__PURE__ */ jsx68(ExpandIcon, {})
19519
19660
  }
19520
19661
  )
@@ -23563,23 +23704,23 @@ var makeEdge = (document2, side, color) => {
23563
23704
  return edge;
23564
23705
  };
23565
23706
  var makeBox = (document2, fill, outline) => {
23566
- const box = document2.createElement("div");
23567
- Object.assign(box.style, {
23707
+ const box2 = document2.createElement("div");
23708
+ Object.assign(box2.style, {
23568
23709
  position: "fixed",
23569
23710
  zIndex: "0",
23570
23711
  pointerEvents: "none",
23571
23712
  backgroundColor: fill,
23572
23713
  boxSizing: "border-box"
23573
23714
  });
23574
- box.className = "mesurer-ti-box";
23575
- box.dataset.state = "hidden";
23715
+ box2.className = "mesurer-ti-box";
23716
+ box2.dataset.state = "hidden";
23576
23717
  for (const side of ["top", "right", "bottom", "left"]) {
23577
- box.appendChild(makeEdge(document2, side, outline));
23718
+ box2.appendChild(makeEdge(document2, side, outline));
23578
23719
  }
23579
- return box;
23720
+ return box2;
23580
23721
  };
23581
- var positionBox = (box, rect) => {
23582
- Object.assign(box.style, {
23722
+ var positionBox = (box2, rect) => {
23723
+ Object.assign(box2.style, {
23583
23724
  left: `${rect.left}px`,
23584
23725
  top: `${rect.top}px`,
23585
23726
  width: `${rect.width}px`,
@@ -24079,27 +24220,27 @@ var createTextInspector = (options = {}, legacy = false) => {
24079
24220
  if (pinned.length >= maxPinned) removePin(pinned[0], false, true);
24080
24221
  }
24081
24222
  const root = ensureOverlay();
24082
- const box = makeBox(document2, FILL_PINNED, OUTLINE_PINNED);
24223
+ const box2 = makeBox(document2, FILL_PINNED, OUTLINE_PINNED);
24083
24224
  const card = makeCard(document2, true);
24084
24225
  const info = typography.getFull(sourceEl);
24085
24226
  populateCard(document2, card, info, true);
24086
- root.append(box, card);
24227
+ root.append(box2, card);
24087
24228
  const pin = {
24088
24229
  sourceEl,
24089
- box,
24230
+ box: box2,
24090
24231
  card,
24091
24232
  userPlaced: state?.userPlaced ?? false,
24092
24233
  detach: () => {
24093
24234
  }
24094
24235
  };
24095
24236
  const rect = sourceEl.getBoundingClientRect();
24096
- positionBox(box, rect);
24237
+ positionBox(box2, rect);
24097
24238
  positionCard(window2, card, rect);
24098
24239
  if (state?.userPlaced) {
24099
24240
  card.style.left = `${state.left}px`;
24100
24241
  card.style.top = `${state.top}px`;
24101
24242
  }
24102
- setState(box, true);
24243
+ setState(box2, true);
24103
24244
  setState(card, true);
24104
24245
  pinned.push(pin);
24105
24246
  card.querySelector(".mesurer-ti-close")?.addEventListener(