@loomweaver/frame-kit 0.9.5 → 0.9.7

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/lw-frame.css CHANGED
@@ -1,2 +1,2 @@
1
- /* @loomweaver/frame-kit 0.9.5 — lw-frame.css. Generated by build.mjs; do not edit. Serve the dist/ files same-origin under /frame-kit/. */
1
+ /* @loomweaver/frame-kit 0.9.7 — lw-frame.css. Generated by build.mjs; do not edit. Serve the dist/ files same-origin under /frame-kit/. */
2
2
  /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties;@layer theme,base,components,utilities;@layer theme{:root,:host{--spacing: .25rem;--text-xs: .75rem;--text-xs--line-height: calc(1 / .75);--text-sm: .875rem;--text-sm--line-height: calc(1.25 / .875);--text-base: 1rem;--text-base--line-height: 1.5 ;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--tracking-tight: -.025em;--radius-sm: .25rem;--radius-md: .375rem;--radius-lg: .5rem;--blur-xs: 4px;--default-transition-duration: .15s;--default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);--default-font-family: var(--lw-font-sans);--default-mono-font-family: var(--lw-font-mono)}}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:var(--default-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings, normal);font-variation-settings:var(--default-font-variation-settings, normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings, normal);font-variation-settings:var(--default-mono-font-variation-settings, normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){::placeholder{color:currentcolor;@supports (color: color-mix(in lab,red,red)){color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.relative{position:relative}.static{position:static}.prose{color:var(--tw-prose-body);max-width:65ch;:where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}:where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}:where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}:where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}:where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}:where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}:where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}:where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}:where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}:where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}:where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}:where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}:where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}:where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}:where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}:where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}:where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}:where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}:where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\201c""\201d""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}:where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}:where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}:where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}:where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}:where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}:where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}:where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}:where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}:where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}:where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}:where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}:where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}:where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}:where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}:where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}:where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}:where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}:where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}:where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}:where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}:where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}:where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}:where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}:where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}:where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}:where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}:where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}:where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}:where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}:where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}:where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}:where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}:where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}:where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}--tw-prose-body: oklch(37.3% .034 259.733);--tw-prose-headings: oklch(21% .034 264.665);--tw-prose-lead: oklch(44.6% .03 256.802);--tw-prose-links: oklch(21% .034 264.665);--tw-prose-bold: oklch(21% .034 264.665);--tw-prose-counters: oklch(55.1% .027 264.364);--tw-prose-bullets: oklch(87.2% .01 258.338);--tw-prose-hr: oklch(92.8% .006 264.531);--tw-prose-quotes: oklch(21% .034 264.665);--tw-prose-quote-borders: oklch(92.8% .006 264.531);--tw-prose-captions: oklch(55.1% .027 264.364);--tw-prose-kbd: oklch(21% .034 264.665);--tw-prose-kbd-shadows: color-mix(in oklab, oklch(21% .034 264.665) 10%, transparent);--tw-prose-code: oklch(21% .034 264.665);--tw-prose-pre-code: oklch(92.8% .006 264.531);--tw-prose-pre-bg: oklch(27.8% .033 256.848);--tw-prose-th-borders: oklch(87.2% .01 258.338);--tw-prose-td-borders: oklch(92.8% .006 264.531);--tw-prose-invert-body: oklch(87.2% .01 258.338);--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: oklch(70.7% .022 261.325);--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: oklch(70.7% .022 261.325);--tw-prose-invert-bullets: oklch(44.6% .03 256.802);--tw-prose-invert-hr: oklch(37.3% .034 259.733);--tw-prose-invert-quotes: oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders: oklch(37.3% .034 259.733);--tw-prose-invert-captions: oklch(70.7% .022 261.325);--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%);--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: oklch(87.2% .01 258.338);--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: oklch(44.6% .03 256.802);--tw-prose-invert-td-borders: oklch(37.3% .034 259.733);font-size:1rem;line-height:1.75;:where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}:where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}:where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}:where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}:where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}:where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}:where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}:where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}:where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}:where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}:where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}:where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}:where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}:where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}:where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}:where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}:where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}:where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}:where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}}.prose-sm{font-size:.875rem;line-height:1.7142857;:where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em}:where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-top:.8888889em;margin-bottom:.8888889em}:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em;margin-bottom:1.3333333em;padding-inline-start:1.1111111em}:where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.1428571em;margin-top:0;margin-bottom:.8em;line-height:1.2}:where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.4285714em;margin-top:1.6em;margin-bottom:.8em;line-height:1.4}:where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;margin-top:1.5555556em;margin-bottom:.4444444em;line-height:1.5555556}:where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.4285714em;margin-bottom:.5714286em;line-height:1.4285714}:where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}:where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}:where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}:where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}:where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;border-radius:.3125rem;padding-top:.1428571em;padding-inline-end:.3571429em;padding-bottom:.1428571em;padding-inline-start:.3571429em}:where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em}:where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}:where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}:where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.6666667;margin-top:1.6666667em;margin-bottom:1.6666667em;border-radius:.25rem;padding-top:.6666667em;padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}:where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em;padding-inline-start:1.5714286em}:where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em;padding-inline-start:1.5714286em}:where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;margin-bottom:.2857143em}:where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}:where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}:where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5714286em;margin-bottom:.5714286em}:where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}:where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}:where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}:where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}:where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5714286em;margin-bottom:.5714286em}:where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em}:where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}:where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;padding-inline-start:1.5714286em}:where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2.8571429em;margin-bottom:2.8571429em}:where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.5}:where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}:where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}:where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}:where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.6666667em;padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}:where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}:where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}:where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}:where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}:where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}:where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}}.mt-2{margin-top:calc(var(--spacing) * 2)}.block{display:block}.hidden{display:none}.inline{display:inline}.max-w-none{max-width:none}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.shadow{--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--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)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur: blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.prose-lw{--tw-prose-body: var(--lw-content);--tw-prose-headings: var(--lw-content);--tw-prose-lead: var(--lw-content-muted);--tw-prose-links: var(--lw-brand);--tw-prose-bold: var(--lw-content);--tw-prose-counters: var(--lw-content-muted);--tw-prose-bullets: var(--lw-border);--tw-prose-hr: var(--lw-border);--tw-prose-quotes: var(--lw-content);--tw-prose-quote-borders: var(--lw-border);--tw-prose-captions: var(--lw-content-muted);--tw-prose-code: var(--lw-content);--tw-prose-pre-code: var(--lw-content);--tw-prose-pre-bg: var(--lw-surface-overlay);--tw-prose-th-borders: var(--lw-border);--tw-prose-td-borders: var(--lw-border)}}@layer lw-base,lw-plugin-theme,lw-tenant-theme;@layer lw-base{:root{color-scheme:light;--lw-brand: #2e96c9;--lw-brand-strong: #2680b0;--lw-brand-text: #256f92;--lw-brand-fill: #1d7099;--lw-on-brand: #ffffff;--lw-accent: #c59a2f;--lw-accent-strong: #a8821f;--lw-surface: #f7f9fb;--lw-surface-raised: #ffffff;--lw-surface-overlay: #eef2f6;--lw-field: #ffffff;--lw-border: #e2e8f0;--lw-content: #1f2933;--lw-content-muted: #5b6b7a;--lw-content-faint: #5f7082;--lw-unsaved: #a8761a;--lw-tooltip: #2b3542;--lw-tooltip-content: #f7f9fb;--lw-positive: #1f7a43;--lw-on-positive: #ffffff;--lw-negative: #d14343;--lw-negative-fill: #c62d2d;--lw-on-negative: #ffffff;--lw-caution: #b8841f;--lw-on-caution: #0f1419;--lw-info: #1d7099;--lw-on-info: #ffffff;--lw-scrim: rgb(0 0 0 / .4);--lw-scroll-thumb: rgb(31 41 51 / .28);--lw-scroll-track: transparent;--lw-font-sans: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--lw-font-mono: ui-monospace, "SF Mono", "Cascadia Code", "Roboto Mono", monospace}:root.dark{color-scheme:dark;--lw-brand: #4aa9d6;--lw-brand-strong: #6cbce0;--lw-brand-text: #4aa9d6;--lw-brand-fill: #4aa9d6;--lw-on-brand: #0f1419;--lw-accent: #d9b250;--lw-accent-strong: #e6c878;--lw-surface: #14191f;--lw-surface-raised: #1b222a;--lw-surface-overlay: #232c36;--lw-field: #1b222a;--lw-border: #2d3743;--lw-content: #e6edf3;--lw-content-muted: #9aa7b4;--lw-content-faint: #8695a4;--lw-unsaved: #e0b95c;--lw-tooltip: #e6edf3;--lw-tooltip-content: #14191f;--lw-positive: #46c178;--lw-on-positive: #0f1419;--lw-negative: #e06464;--lw-negative-fill: #c62d2d;--lw-on-negative: #ffffff;--lw-caution: #d9b250;--lw-on-caution: #14191f;--lw-info: #4aa9d6;--lw-on-info: #0f1419;--lw-scrim: rgb(0 0 0 / .6);--lw-scroll-thumb: rgb(226 232 240 / .28);--lw-scroll-track: transparent}}@layer components{.lw-btn{display:inline-flex;cursor:pointer;align-items:center;justify-content:center;gap:calc(var(--spacing) * 1.5);border-radius:var(--radius-md);--tw-font-weight: var(--font-weight-medium);font-weight:var(--font-weight-medium);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration));&:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}&:focus-visible{outline-offset:2px}&:focus-visible{outline-color:var(--lw-brand)}height:calc(var(--spacing) * 9);padding-inline:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height))}.lw-btn:disabled,.lw-btn[aria-disabled=true]{pointer-events:none;opacity:50%}.lw-btn--primary{background-color:var(--lw-brand-fill);color:var(--lw-on-brand);&:hover{@media(hover:hover){opacity:90%}}}.lw-btn--default{border-style:var(--tw-border-style);border-width:1px;border-color:var(--lw-border);background-color:var(--lw-surface-raised);color:var(--lw-content);&:hover{@media(hover:hover){background-color:var(--lw-surface-overlay)}}}.lw-btn--success{background-color:var(--lw-positive);color:var(--lw-on-positive);&:hover{@media(hover:hover){opacity:90%}}}.lw-btn--danger{background-color:var(--lw-negative-fill);color:var(--lw-on-negative);&:hover{@media(hover:hover){opacity:90%}}}.lw-btn--warning{background-color:var(--lw-caution);color:var(--lw-on-caution);&:hover{@media(hover:hover){opacity:90%}}}.lw-btn--info{background-color:var(--lw-info);color:var(--lw-on-info);&:hover{@media(hover:hover){opacity:90%}}}.lw-btn--ghost{color:var(--lw-content-muted);&:hover{@media(hover:hover){background-color:var(--lw-surface-overlay)}}&:hover{@media(hover:hover){color:var(--lw-content)}}}.lw-btn--sm{height:calc(var(--spacing) * 7);padding-inline:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading, var(--text-xs--line-height))}.lw-btn--icon{aspect-ratio:1 / 1;padding-inline:0px}.lw-icon-btn{position:relative;display:flex;flex-shrink:0;align-items:center;justify-content:center;border-radius:.25rem;color:var(--lw-content-faint);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration));&:hover{@media(hover:hover){background-color:var(--lw-surface-overlay)}}&:hover{@media(hover:hover){color:var(--lw-content)}}}.lw-rail-initials{font-family:var(--lw-font-sans);font-size:.75rem;--tw-leading: 1;line-height:1;--tw-font-weight: var(--font-weight-normal);font-weight:var(--font-weight-normal);--tw-tracking: var(--tracking-tight);letter-spacing:var(--tracking-tight);text-transform:uppercase;-webkit-user-select:none;user-select:none}.lw-chrome-mark{display:flex;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:1px;border-color:var(--lw-border);background-color:var(--lw-surface-overlay);color:var(--lw-content-muted)}.lw-chrome-picture{flex-shrink:0;border-radius:calc(infinity * 1px);object-fit:cover}.lw-segmented{margin:0;display:inline-flex;height:calc(var(--spacing) * 8.5);align-items:center;gap:calc(var(--spacing) * .5);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--lw-border);background-color:var(--lw-surface-overlay);padding:calc(var(--spacing) * .5)}.lw-segmented-item{position:relative;display:flex;height:calc(var(--spacing) * 7);width:calc(var(--spacing) * 7);align-items:center;justify-content:center;border-radius:.25rem;color:var(--lw-content-muted);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration));&:hover{@media(hover:hover){color:var(--lw-content)}}}.lw-segmented-item[aria-pressed=true]{background-color:var(--lw-surface-raised);color:var(--lw-brand);--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.lw-field{display:block;width:100%;border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--lw-border);background-color:var(--lw-field);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height));color:var(--lw-content);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration));&::placeholder{color:var(--lw-content-faint)}&:focus-visible{border-color:var(--lw-brand)}&:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}&:focus-visible{outline-offset:0px}&:focus-visible{outline-color:var(--lw-brand)}&:disabled{cursor:not-allowed}&:disabled{opacity:60%}}.lw-field--invalid{border-color:var(--lw-negative);&:focus-visible{border-color:var(--lw-negative)}&:focus-visible{outline-color:var(--lw-negative)}}textarea.lw-field{min-height:calc(var(--spacing) * 20);resize:vertical}.lw-checkbox{height:calc(var(--spacing) * 4);width:calc(var(--spacing) * 4);flex-shrink:0;cursor:pointer;accent-color:var(--lw-brand)}.lw-checkbox:disabled{cursor:not-allowed;opacity:60%}.lw-progress{height:calc(var(--spacing) * 2);width:100%;appearance:none;overflow:hidden;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:0px;background:var(--lw-border)}.lw-progress::-webkit-progress-bar{background:var(--lw-border)}.lw-progress::-webkit-progress-value{background:var(--lw-brand);border-radius:9999px}.lw-progress::-moz-progress-bar{background:var(--lw-brand);border-radius:9999px}lw-progress-ring{display:inline-block;vertical-align:middle}.lw-progress-ring-svg{display:block;height:100%;width:100%}.lw-progress-ring-track{fill:none;stroke:var(--lw-border);stroke-width:3.5}.lw-progress-ring-value{fill:none;stroke:var(--lw-brand);stroke-width:3.5;stroke-linecap:round;transition:stroke-dashoffset .3s ease}.lw-progress-ring-text{fill:var(--lw-content);font-size:10px;font-weight:600;text-anchor:middle;dominant-baseline:central}.lw-divider{border-style:var(--tw-border-style);border-width:0px;border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--lw-border);margin:0}.lw-divider--vertical{height:100%;align-self:stretch;border-top-style:var(--tw-border-style);border-top-width:0px;border-left-style:var(--tw-border-style);border-left-width:1px;border-color:var(--lw-border)}.lw-collapsible{overflow:hidden;border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--lw-border)}.lw-collapsible>summary{display:flex;cursor:pointer;list-style-type:none;align-items:center;gap:calc(var(--spacing) * 3);background-color:var(--lw-surface-raised);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2.5);font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height));--tw-font-weight: var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--lw-content);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration));&:hover{@media(hover:hover){background-color:var(--lw-surface-overlay)}}&:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}&:focus-visible{outline-offset:-2px}&:focus-visible{outline-color:var(--lw-brand)}}.lw-collapsible>summary::-webkit-details-marker{display:none}.lw-collapsible>summary:after{content:"";margin-left:auto;height:calc(var(--spacing) * 2);width:calc(var(--spacing) * 2);flex-shrink:0;border-right-style:var(--tw-border-style);border-right-width:2px;border-bottom-style:var(--tw-border-style);border-bottom-width:2px;border-color:var(--lw-content-muted);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration));transform:translateY(-1px) rotate(45deg)}.lw-collapsible[open]>summary:after{transform:translateY(1px) rotate(-135deg)}.lw-collapsible-body{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--lw-border);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height));color:var(--lw-content-muted)}.lw-badge{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;gap:var(--spacing);border-radius:calc(infinity * 1px);background-color:var(--lw-surface-overlay);padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading, var(--text-xs--line-height));--tw-font-weight: var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;color:var(--lw-content-muted);min-width:1.5rem}.lw-badge--brand{background-color:var(--lw-brand-fill);color:var(--lw-on-brand)}.lw-badge--success{background-color:var(--lw-positive);color:var(--lw-on-positive)}.lw-badge--danger{background-color:var(--lw-negative-fill);color:var(--lw-on-negative)}.lw-radio{height:calc(var(--spacing) * 4);width:calc(var(--spacing) * 4);flex-shrink:0;cursor:pointer;accent-color:var(--lw-brand)}.lw-radio:disabled{cursor:not-allowed;opacity:60%}.lw-range{height:calc(var(--spacing) * 2);width:100%;cursor:pointer;appearance:none;border-radius:calc(infinity * 1px);background-color:var(--lw-border);&:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}&:focus-visible{outline-offset:2px}&:focus-visible{outline-color:var(--lw-brand)}}.lw-range::-webkit-slider-thumb{-webkit-appearance:none;height:calc(var(--spacing) * 4);width:calc(var(--spacing) * 4);border-radius:calc(infinity * 1px);background-color:var(--lw-brand);--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.lw-range::-moz-range-thumb{height:calc(var(--spacing) * 4);width:calc(var(--spacing) * 4);border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:0px;background-color:var(--lw-brand);--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.lw-range:disabled{cursor:not-allowed;opacity:60%}.lw-switch{position:relative;height:calc(var(--spacing) * 5);width:calc(var(--spacing) * 9);flex-shrink:0;cursor:pointer;appearance:none;border-radius:calc(infinity * 1px);background-color:var(--lw-border);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration));&:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}&:focus-visible{outline-offset:2px}&:focus-visible{outline-color:var(--lw-brand)}}.lw-switch:before{content:"";position:absolute;top:calc(var(--spacing) * .5);left:calc(var(--spacing) * .5);height:calc(var(--spacing) * 4);width:calc(var(--spacing) * 4);border-radius:calc(infinity * 1px);background-color:var(--lw-surface);--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.lw-switch:checked{background-color:var(--lw-brand)}.lw-switch:checked:before{--tw-translate-x: calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.lw-switch:disabled{cursor:not-allowed;opacity:60%}.lw-scrim{background-color:var(--lw-scrim);--tw-backdrop-blur: blur(var(--blur-xs));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.cdk-visually-hidden{position:absolute;left:0;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;outline:0;appearance:none}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-drag-preview{border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--lw-border);background-color:var(--lw-surface-raised);--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.cdk-drag-placeholder{opacity:30%}.cdk-drag-animating,.cdk-drop-list-dragging .cdk-drag:not(.cdk-drag-placeholder){transition:transform .2s cubic-bezier(0,0,.2,1)}.lw-pane-drop-preview{pointer-events:none;position:absolute;border-radius:var(--radius-sm);border-style:var(--tw-border-style);border-width:1px;--tw-border-style: dashed;border-style:dashed;border-color:transparent;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.lw-pane-drop-zone.cdk-drop-list-dragging .lw-pane-drop-preview{border-color:var(--lw-brand);background-color:var(--lw-brand);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--lw-brand) 15%,transparent)}}.lw-pane-drop-preview--left{inset:0 50% 0 0}.lw-pane-drop-preview--right{inset:0 0 0 50%}.lw-pane-drop-preview--top{inset:0 0 50%}.lw-pane-drop-preview--bottom{inset:50% 0 0}.lw-pane-drop-preview--fill{inset:0}.lw-pane-animate{transition:flex-grow .16s ease,flex-basis .16s ease}.lw-pane-minimized-strip{animation:lw-fade-in .16s ease-out;overflow:hidden}lw-content-grid.fixed{animation:lw-maximize-in .14s ease-out}@keyframes lw-fade-in{0%{opacity:0}to{opacity:1}}@keyframes lw-maximize-in{0%{opacity:.4}to{opacity:1}}lw-tooltip{position:absolute;inset:0;pointer-events:none}.lw-tooltip-bubble{border-radius:var(--radius-md);background-color:var(--lw-tooltip);padding-inline:calc(var(--spacing) * 2);padding-block:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading, var(--text-xs--line-height));--tw-font-weight: var(--font-weight-normal);font-weight:var(--font-weight-normal);color:var(--lw-tooltip-content);--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);position:fixed;inset:auto;margin:0;border:0;width:max-content;white-space:normal;pointer-events:none}body.lw-menu-open .lw-tooltip-bubble{display:none!important}lw-select{position:relative;display:inline-block;max-width:100%}lw-select>lw-option{display:none}.lw-select-trigger{display:flex;height:calc(var(--spacing) * 8.5);max-width:100%;min-width:0px;align-items:center;gap:calc(var(--spacing) * 1.5);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--lw-border);background-color:var(--lw-surface-overlay);padding-inline:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height));color:var(--lw-content);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration));&:hover{@media(hover:hover){background-color:var(--lw-surface-raised)}}&:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}&:focus-visible{outline-offset:2px}&:focus-visible{outline-color:var(--lw-brand)}&:disabled{cursor:not-allowed}&:disabled{opacity:50%}&:disabled{&:hover{@media(hover:hover){background-color:var(--lw-surface-overlay)}}}}.lw-select-value{display:flex;min-width:0px;align-items:center;gap:calc(var(--spacing) * 1.5);overflow:hidden;white-space:nowrap}.lw-select-chevron{flex-shrink:0;font-size:var(--text-xs);line-height:var(--tw-leading, var(--text-xs--line-height));color:var(--lw-content-muted)}.lw-select-listbox{z-index:50;min-width:calc(var(--spacing) * 40);overflow:auto;border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--lw-border);background-color:var(--lw-surface-overlay);padding-block:var(--spacing);font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height));--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);position:fixed;position-area:block-end span-inline-end;position-try-fallbacks:flip-block,flip-inline;max-height:16rem;margin-top:.25rem}.lw-select-option{display:flex;cursor:pointer;align-items:center;gap:calc(var(--spacing) * 2);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 1.5);color:var(--lw-content);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration));outline:none}.lw-select-option:hover,.lw-select-option.is-active{background-color:var(--lw-surface-raised)}.lw-select-option[aria-selected=true]{color:var(--lw-brand-text)}.lw-select-option[aria-disabled=true]{pointer-events:none;opacity:50%}.lw-select-glyph{font-size:var(--text-base);line-height:var(--tw-leading, var(--text-base--line-height));--tw-leading: 1;line-height:1}.lw-bar-tray{z-index:50;display:flex;flex-direction:column;align-items:flex-start;gap:var(--spacing);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--lw-border);background-color:var(--lw-surface-overlay);padding:calc(var(--spacing) * 2);--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);position:fixed;position-area:block-end span-inline-start;position-try-fallbacks:flip-block,flip-inline;margin-top:.25rem}.lw-bar-tray-up{position-area:block-start span-inline-start;margin-top:0;margin-bottom:.25rem}lw-menu{z-index:50;min-width:calc(var(--spacing) * 44);overflow:auto;border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--lw-border);background-color:var(--lw-surface-overlay);padding-block:var(--spacing);font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height));--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);position:fixed;max-height:24rem;outline:none}lw-menu-item{display:flex;cursor:pointer;align-items:center;gap:calc(var(--spacing) * 2);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 1.5);color:var(--lw-content);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration));outline:none}lw-menu-item:hover,lw-menu-item:focus{background-color:var(--lw-surface-raised)}lw-menu-item[aria-disabled=true]{pointer-events:none;opacity:50%}.lw-menu-item-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lw-menu-item-shortcut{margin-left:calc(var(--spacing) * 4);flex-shrink:0;font-size:var(--text-xs);line-height:var(--tw-leading, var(--text-xs--line-height));color:var(--lw-content-muted)}.lw-menu-item-lead{display:none;width:calc(var(--spacing) * 4);flex-shrink:0;align-items:center;justify-content:center;color:var(--lw-content-muted)}.lw-menu--leading .lw-menu-item-lead{display:flex}.lw-menu-separator{margin-block:var(--spacing);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--lw-border);height:0}.lw-menu-header{margin-top:calc(var(--spacing) * -1);margin-bottom:var(--spacing);display:flex;align-items:center;gap:calc(var(--spacing) * 2);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--lw-border);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2)}.lw-menu-header-mark{display:flex;height:calc(var(--spacing) * 7);width:calc(var(--spacing) * 7);flex-shrink:0;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);background-color:var(--lw-surface-raised);color:var(--lw-content-muted);font-family:var(--lw-font-sans);font-size:.75rem;--tw-leading: 1;line-height:1;--tw-font-weight: var(--font-weight-normal);font-weight:var(--font-weight-normal);--tw-tracking: var(--tracking-tight);letter-spacing:var(--tracking-tight);text-transform:uppercase;-webkit-user-select:none;user-select:none}.lw-menu-header-picture{height:100%;width:100%;border-radius:calc(infinity * 1px);object-fit:cover}.lw-menu-header-lines{display:flex;min-width:0px;flex-direction:column}.lw-menu-header-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;--tw-font-weight: var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--lw-content)}.lw-menu-header-detail{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-xs);line-height:var(--tw-leading, var(--text-xs--line-height));color:var(--lw-content-muted)}lw-nav-tree{display:flex;height:100%;flex-direction:column;gap:var(--spacing);overflow-y:auto;padding-inline:calc(var(--spacing) * 1.5);padding-block:calc(var(--spacing) * 2)}lw-nav-group{display:flex;flex-direction:column}.lw-nav-group-heading{display:flex;width:100%;align-items:center;gap:calc(var(--spacing) * 1.5);border-radius:var(--radius-md);padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 1.5);text-align:left;font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height));--tw-font-weight: var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--lw-content);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration));&:hover{@media(hover:hover){background-color:var(--lw-surface-overlay)}}&:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}&:focus-visible{outline-offset:2px}&:focus-visible{outline-color:var(--lw-brand)}}.lw-nav-group-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lw-nav-group-heading:disabled{cursor:default;color:var(--lw-content-faint);&:hover{@media(hover:hover){background-color:transparent}}}.lw-nav-chevron{flex-shrink:0;color:var(--lw-content-faint);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}lw-nav-group[data-open=false] .lw-nav-chevron{transform:rotate(-90deg)}lw-nav-group[data-open=false]>lw-nav-item{display:none}lw-nav-item{display:flex;width:100%;align-items:center;gap:calc(var(--spacing) * 1.5);border-radius:var(--radius-md);padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 1.5);text-align:left;font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height));color:var(--lw-content-muted);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration));&:hover{@media(hover:hover){background-color:var(--lw-surface-overlay)}}&:hover{@media(hover:hover){color:var(--lw-content)}}&:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}&:focus-visible{outline-offset:2px}&:focus-visible{outline-color:var(--lw-brand)}}.lw-nav-item-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lw-nav-glyph{flex-shrink:0}lw-nav-item[aria-current=page]{background-color:var(--lw-surface-raised);--tw-font-weight: var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--lw-content);--tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / .05));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}lw-nav-item[aria-current=page] .lw-nav-glyph{color:var(--lw-brand)}}@layer base{button:not(:disabled),[role=button]:not([aria-disabled=true]){cursor:pointer}}html,body{margin:0}@layer base{:root{scrollbar-color:var(--lw-scroll-thumb) var(--lw-scroll-track)}*{scrollbar-width:thin}}body{font-family:var(--lw-font-sans);background:var(--lw-surface);color:var(--lw-content)}@media(prefers-reduced-motion:reduce){*,:before,:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}.lw-spinner-ring{animation-duration:.8s!important;animation-iteration-count:infinite!important}}@property --tw-rotate-x{syntax: "*"; inherits: false;}@property --tw-rotate-y{syntax: "*"; inherits: false;}@property --tw-rotate-z{syntax: "*"; inherits: false;}@property --tw-skew-x{syntax: "*"; inherits: false;}@property --tw-skew-y{syntax: "*"; inherits: false;}@property --tw-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: 0px;}@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-font-weight{syntax: "*"; inherits: false;}@property --tw-border-style{syntax: "*"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: "*"; inherits: false;}@property --tw-tracking{syntax: "*"; inherits: false;}@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-backdrop-blur{syntax: "*"; inherits: false;}@property --tw-backdrop-brightness{syntax: "*"; inherits: false;}@property --tw-backdrop-contrast{syntax: "*"; inherits: false;}@property --tw-backdrop-grayscale{syntax: "*"; inherits: false;}@property --tw-backdrop-hue-rotate{syntax: "*"; inherits: false;}@property --tw-backdrop-invert{syntax: "*"; inherits: false;}@property --tw-backdrop-opacity{syntax: "*"; inherits: false;}@property --tw-backdrop-saturate{syntax: "*"; inherits: false;}@property --tw-backdrop-sepia{syntax: "*"; inherits: false;}@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-rotate-x: initial;--tw-rotate-y: initial;--tw-rotate-z: initial;--tw-skew-x: initial;--tw-skew-y: 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-font-weight: initial;--tw-border-style: solid;--tw-leading: initial;--tw-tracking: initial;--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0;--tw-backdrop-blur: initial;--tw-backdrop-brightness: initial;--tw-backdrop-contrast: initial;--tw-backdrop-grayscale: initial;--tw-backdrop-hue-rotate: initial;--tw-backdrop-invert: initial;--tw-backdrop-opacity: initial;--tw-backdrop-saturate: initial;--tw-backdrop-sepia: initial}}}
@@ -1,4 +1,4 @@
1
- /* @loomweaver/frame-kit 0.9.5 — lw-frame.d.ts. Generated by build.mjs; do not edit. Serve the dist/ files same-origin under /frame-kit/. */
1
+ /* @loomweaver/frame-kit 0.9.7 — lw-frame.d.ts. Generated by build.mjs; do not edit. Serve the dist/ files same-origin under /frame-kit/. */
2
2
  interface LwSurfaceRenderState {
3
3
  readonly theme?: 'light' | 'dark';
4
4
  readonly tokens?: Readonly<Record<string, string>>;
@@ -32,6 +32,42 @@ interface LwStateApi {
32
32
  /** Feed the host's `stateChanged(key, value, loaded)` push in from your `methods`. */
33
33
  apply(key: string, value: unknown, loaded: boolean): void;
34
34
  }
35
+ interface LwSurfaceCaptureRequest {
36
+ /** Picture pixels per CSS pixel. Bounded to 0.05..4; the frame's own ratio when absent. */
37
+ readonly scale?: number;
38
+ /**
39
+ * The form to encode the drawing in — `image/png`, `image/jpeg` or `image/webp`. The workbench
40
+ * sends the form the finished picture will be carried in, so a surface is not encoded losslessly
41
+ * only to be compressed again. Lossless when absent.
42
+ */
43
+ readonly mediaType?: string;
44
+ /** How strongly to compress, 0 to 1. Ignored by a lossless form. */
45
+ readonly quality?: number;
46
+ /** What a withheld area says on the picture. The workbench sends it already translated. */
47
+ readonly withheldLabel?: string;
48
+ }
49
+ /**
50
+ * Mark an element with this attribute and its content stays off any picture of the workbench; the
51
+ * area says so instead. It is read at the moment a picture is made, so setting or clearing it takes
52
+ * effect at once and a surface is never told that it is being pictured.
53
+ *
54
+ * Marking the surface's own root does nothing: a surface cannot withhold itself as a whole, only
55
+ * parts of itself.
56
+ */
57
+ declare const LW_WITHHOLD_ATTRIBUTE = "data-lw-withhold";
58
+ /** What a surface hands back when the workbench asks it to draw itself. */
59
+ interface LwSurfaceCapture {
60
+ /** The drawing, as a `data:` URL. A function or a live handle could not cross the boundary. */
61
+ readonly image: string;
62
+ readonly width: number;
63
+ readonly height: number;
64
+ }
65
+ /** The shape Penpal expects of the methods a surface exposes to the workbench. */
66
+ type LwSurfaceMethods = Record<string, (...args: never[]) => unknown>;
67
+ /** What the workbench may call on a surface without the surface having written it. */
68
+ interface LwPlatformSurfaceMethods {
69
+ capture(request?: LwSurfaceCaptureRequest): Promise<LwSurfaceCapture>;
70
+ }
35
71
  interface LwFrameApi {
36
72
  setIcon(name: string, svg: string): void;
37
73
  removeIcon(name: string): void;
@@ -40,6 +76,24 @@ interface LwFrameApi {
40
76
  /** Connect the store to the host once your Penpal connection resolves. */
41
77
  connectState(host: LwStateHost): LwStateApi;
42
78
  readonly state: LwStateApi;
79
+ /**
80
+ * Draws this surface and answers with the result, so that a picture of the workbench holds what
81
+ * the surface was showing instead of a hole where it sits. Expose it from your Penpal `methods`
82
+ * as `capture` and the workbench will call it; it is never called for you.
83
+ *
84
+ * The renderer is fetched the first time a picture is asked for, so a surface that is never
85
+ * captured never pays for it. A surface that is isolated has no origin of its own, which is why
86
+ * the renderer is loaded as a plain script from beside this bundle rather than imported.
87
+ */
88
+ capture(request?: LwSurfaceCaptureRequest): Promise<LwSurfaceCapture>;
89
+ /**
90
+ * Your own Penpal methods, plus the ones the workbench may call on any surface. Pass it straight
91
+ * to `connect({ methods: LwFrame.surfaceMethods({ render }) })` and a surface answers everything
92
+ * the workbench asks of it, including requests added to the platform after you wrote this.
93
+ *
94
+ * The platform's own names win over yours, so a surface cannot shadow them by accident.
95
+ */
96
+ surfaceMethods<T extends LwSurfaceMethods>(own: T): T & LwPlatformSurfaceMethods;
43
97
  }
44
98
 
45
99
  declare const LwFrame: LwFrameApi;
@@ -1,2 +1,2 @@
1
- /* @loomweaver/frame-kit 0.9.5 — penpal.global.js. Generated by build.mjs; do not edit. Serve the dist/ files same-origin under /frame-kit/. */
1
+ /* @loomweaver/frame-kit 0.9.7 — penpal.global.js. Generated by build.mjs; do not edit. Serve the dist/ files same-origin under /frame-kit/. */
2
2
  var Penpal=(()=>{var _=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var X=Object.prototype.hasOwnProperty;var q=(e,t)=>{for(var r in t)_(e,r,{get:t[r],enumerable:!0})},B=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of J(t))!X.call(e,s)&&s!==r&&_(e,s,{get:()=>t[s],enumerable:!(n=G(t,s))||n.enumerable});return e};var Q=e=>B(_({},"__esModule",{value:!0}),e);var Fe={};q(Fe,{CallOptions:()=>j,ErrorCode:()=>be,PenpalError:()=>d,PortMessenger:()=>Le,Reply:()=>F,WindowMessenger:()=>Pe,WorkerMessenger:()=>_e,connect:()=>me,debug:()=>He});var Z=class extends Error{code;constructor(e,t){super(t),this.name="PenpalError",this.code=e}},d=Z,ee=e=>({name:e.name,message:e.message,stack:e.stack,penpalCode:e instanceof d?e.code:void 0}),te=({name:e,message:t,stack:r,penpalCode:n})=>{let s=n?new d(n,t):new Error(t);return s.name=e,s.stack=r,s},re=Symbol("Reply"),se=class{value;transferables;#e=re;constructor(e,t){this.value=e,this.transferables=t?.transferables}},F=se,v="penpal",m=e=>typeof e=="object"&&e!==null,U=e=>typeof e=="function",ne=e=>m(e)&&e.namespace===v,I=e=>e.type==="SYN",R=e=>e.type==="ACK1",A=e=>e.type==="ACK2",x=e=>e.type==="CALL",$=e=>e.type==="REPLY",ae=e=>e.type==="DESTROY",V=(e,t=[])=>{let r=[];for(let n of Object.keys(e)){let s=e[n];U(s)?r.push([...t,n]):m(s)&&r.push(...V(s,[...t,n]))}return r},ie=(e,t)=>{let r=e.reduce((n,s)=>m(n)?n[s]:void 0,t);return U(r)?r:void 0},y=e=>e.join("."),D=(e,t,r)=>({namespace:v,channel:e,type:"REPLY",callId:t,isError:!0,...r instanceof Error?{value:ee(r),isSerializedErrorInstance:!0}:{value:r}}),oe=(e,t,r,n)=>{let s=!1,u=async f=>{if(s||!x(f))return;n?.(`Received ${y(f.methodPath)}() call`,f);let{methodPath:p,args:c,id:i}=f,a,M;try{let l=ie(p,t);if(!l)throw new d("METHOD_NOT_FOUND",`Method \`${y(p)}\` is not found.`);let h=await l(...c);h instanceof F&&(M=h.transferables,h=await h.value),a={namespace:v,channel:r,type:"REPLY",callId:i,value:h}}catch(l){a=D(r,i,l)}if(!s)try{n?.(`Sending ${y(p)}() reply`,a),e.sendMessage(a,M)}catch(l){throw l.name==="DataCloneError"&&(a=D(r,i,l),n?.(`Sending ${y(p)}() reply`,a),e.sendMessage(a)),l}};return e.addMessageHandler(u),()=>{s=!0,e.removeMessageHandler(u)}},de=oe,Y=crypto.randomUUID?.bind(crypto)??(()=>new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")),le=Symbol("CallOptions"),ce=class{transferables;timeout;#e=le;constructor(e){this.transferables=e?.transferables,this.timeout=e?.timeout}},j=ce,he=new Set(["apply","call","bind"]),W=(e,t,r=[])=>new Proxy(r.length?()=>{}:Object.create(null),{get(n,s){if(s!=="then")return r.length&&he.has(s)?Reflect.get(n,s):W(e,t,[...r,s])},apply(n,s,u){return e(r,u)}}),b=e=>new d("CONNECTION_DESTROYED",`Method call ${y(e)}() failed due to destroyed connection`),ue=(e,t,r)=>{let n=!1,s=new Map,u=c=>{if(!$(c))return;let{callId:i,value:a,isError:M,isSerializedErrorInstance:l}=c,h=s.get(i);h&&(s.delete(i),r?.(`Received ${y(h.methodPath)}() call`,c),M?h.reject(l?te(a):a):h.resolve(a))};return e.addMessageHandler(u),{remoteProxy:W((c,i)=>{if(n)throw b(c);let a=Y(),M=i[i.length-1],l=M instanceof j,{timeout:h,transferables:P}=l?M:{},S=l?i.slice(0,-1):i;return new Promise((N,w)=>{let T=h!==void 0?window.setTimeout(()=>{s.delete(a),w(new d("METHOD_CALL_TIMEOUT",`Method call ${y(c)}() timed out after ${h}ms`))},h):void 0;s.set(a,{methodPath:c,resolve:N,reject:w,timeoutId:T});try{let E={namespace:v,channel:t,type:"CALL",id:a,methodPath:c,args:S};r?.(`Sending ${y(c)}() call`,E),e.sendMessage(E,P)}catch(E){w(new d("TRANSMISSION_FAILED",E.message))}})},r),destroy:()=>{n=!0,e.removeMessageHandler(u);for(let{methodPath:c,reject:i,timeoutId:a}of s.values())clearTimeout(a),i(b(c));s.clear()}}},fe=ue,ve=()=>{let e,t;return{promise:new Promise((n,s)=>{e=n,t=s}),resolve:e,reject:t}},pe=ve,O="deprecated-penpal",Me=e=>m(e)&&"penpal"in e,ye=e=>e.split("."),k=e=>e.join("."),ge=e=>{try{return JSON.stringify(e)}catch{return String(e)}},z=e=>new d("TRANSMISSION_FAILED",`Unexpected message to translate: ${ge(e)}`),Ee=e=>{if(e.penpal==="syn")return{namespace:v,channel:void 0,type:"SYN",participantId:O};if(e.penpal==="ack")return{namespace:v,channel:void 0,type:"ACK2"};if(e.penpal==="call")return{namespace:v,channel:void 0,type:"CALL",id:e.id,methodPath:ye(e.methodName),args:e.args};if(e.penpal==="reply")return e.resolution==="fulfilled"?{namespace:v,channel:void 0,type:"REPLY",callId:e.id,value:e.returnValue}:{namespace:v,channel:void 0,type:"REPLY",callId:e.id,isError:!0,...e.returnValueIsError?{value:e.returnValue,isSerializedErrorInstance:!0}:{value:e.returnValue}};throw z(e)},Ie=e=>{if(R(e))return{penpal:"synAck",methodNames:e.methodPaths.map(k)};if(x(e))return{penpal:"call",id:e.id,methodName:k(e.methodPath),args:e.args};if($(e))return e.isError?{penpal:"reply",id:e.callId,resolution:"rejected",...e.isSerializedErrorInstance?{returnValue:e.value,returnValueIsError:!0}:{returnValue:e.value}}:{penpal:"reply",id:e.callId,resolution:"fulfilled",returnValue:e.value};throw z(e)},we=({messenger:e,methods:t,timeout:r,channel:n,log:s})=>{let u=Y(),f,p=[],c=!1,i=V(t),{promise:a,resolve:M,reject:l}=pe(),h=r!==void 0?setTimeout(()=>{l(new d("CONNECTION_TIMEOUT",`Connection timed out after ${r}ms`))},r):void 0,P=()=>{for(let o of p)o()},S=()=>{if(c)return;p.push(de(e,t,n,s));let{remoteProxy:o,destroy:g}=fe(e,n,s);p.push(g),clearTimeout(h),c=!0,M({remoteProxy:o,destroy:P})},N=()=>{let o={namespace:v,type:"SYN",channel:n,participantId:u};s?.("Sending handshake SYN",o);try{e.sendMessage(o)}catch(g){l(new d("TRANSMISSION_FAILED",g.message))}},w=o=>{if(s?.("Received handshake SYN",o),o.participantId===f&&f!==O||(f=o.participantId,N(),!(u>f||f===O)))return;let C={namespace:v,channel:n,type:"ACK1",methodPaths:i};s?.("Sending handshake ACK1",C);try{e.sendMessage(C)}catch(K){l(new d("TRANSMISSION_FAILED",K.message));return}},T=o=>{s?.("Received handshake ACK1",o);let g={namespace:v,channel:n,type:"ACK2"};s?.("Sending handshake ACK2",g);try{e.sendMessage(g)}catch(C){l(new d("TRANSMISSION_FAILED",C.message));return}S()},E=o=>{s?.("Received handshake ACK2",o),S()},L=o=>{I(o)&&w(o),R(o)&&T(o),A(o)&&E(o)};return e.addMessageHandler(L),p.push(()=>e.removeMessageHandler(L)),N(),a},Ae=we,Se=e=>{let t=!1,r;return(...n)=>(t||(t=!0,r=e(...n)),r)},Ne=Se,H=new WeakSet,Ce=({messenger:e,methods:t={},timeout:r,channel:n,log:s})=>{if(!e)throw new d("INVALID_ARGUMENT","messenger must be defined");if(H.has(e))throw new d("INVALID_ARGUMENT","A messenger can only be used for a single connection");H.add(e);let u=[e.destroy],f=Ne(i=>{if(i){let a={namespace:v,channel:n,type:"DESTROY"};try{e.sendMessage(a)}catch{}}for(let a of u)a();s?.("Connection destroyed")}),p=i=>ne(i)&&i.channel===n;return{promise:(async()=>{try{e.initialize({log:s,validateReceivedMessage:p}),e.addMessageHandler(M=>{ae(M)&&f(!1)});let{remoteProxy:i,destroy:a}=await Ae({messenger:e,methods:t,timeout:r,channel:n,log:s});return u.push(a),i}catch(i){throw f(!0),i}})(),destroy:()=>{f(!0)}}},me=Ce,Re=class{#e;#a;#s;#n;#r;#i=new Set;#t;#o=!1;constructor({remoteWindow:e,allowedOrigins:t}){if(!e)throw new d("INVALID_ARGUMENT","remoteWindow must be defined");this.#e=e,this.#a=t?.length?t:[window.origin]}initialize=({log:e,validateReceivedMessage:t})=>{this.#s=e,this.#n=t,window.addEventListener("message",this.#h)};sendMessage=(e,t)=>{if(I(e)){let r=this.#d(e);this.#e.postMessage(e,{targetOrigin:r,transfer:t});return}if(R(e)||this.#o){let r=this.#o?Ie(e):e,n=this.#d(e);this.#e.postMessage(r,{targetOrigin:n,transfer:t});return}if(A(e)){let{port1:r,port2:n}=new MessageChannel;this.#t=r,r.addEventListener("message",this.#l),r.start();let s=[n,...t||[]],u=this.#d(e);this.#e.postMessage(e,{targetOrigin:u,transfer:s});return}if(this.#t){this.#t.postMessage(e,{transfer:t});return}throw new d("TRANSMISSION_FAILED","Cannot send message because the MessagePort is not connected")};addMessageHandler=e=>{this.#i.add(e)};removeMessageHandler=e=>{this.#i.delete(e)};destroy=()=>{window.removeEventListener("message",this.#h),this.#c(),this.#i.clear()};#u=e=>this.#a.some(t=>t instanceof RegExp?t.test(e):t===e||t==="*");#d=e=>{if(I(e))return"*";if(!this.#r)throw new d("TRANSMISSION_FAILED","Cannot send message because the remote origin is not established");return this.#r==="null"&&this.#a.includes("*")?"*":this.#r};#c=()=>{this.#t?.removeEventListener("message",this.#l),this.#t?.close(),this.#t=void 0};#h=({source:e,origin:t,ports:r,data:n})=>{if(e===this.#e){if(Me(n)){this.#s?.("Please upgrade the child window to the latest version of Penpal."),this.#o=!0;try{n=Ee(n)}catch(s){this.#s?.(`Failed to translate deprecated message: ${s.message}`);return}}if(this.#n?.(n)){if(!this.#u(t)){this.#s?.(`Received a message from origin \`${t}\` which did not match allowed origins \`[${this.#a.join(", ")}]\``);return}if(I(n)&&(this.#c(),this.#r=t),A(n)&&!this.#o){if(this.#t=r[0],!this.#t){this.#s?.("Ignoring ACK2 because it did not include a MessagePort");return}this.#t.addEventListener("message",this.#l),this.#t.start()}for(let s of this.#i)s(n)}}};#l=({data:e})=>{if(this.#n?.(e))for(let t of this.#i)t(e)}},Pe=Re,Te=class{#e;#a;#s;#n=new Set;#r;constructor({worker:e}){if(!e)throw new d("INVALID_ARGUMENT","worker must be defined");this.#e=e}initialize=({log:e,validateReceivedMessage:t})=>{this.#a=e,this.#s=t,this.#e.addEventListener("message",this.#t)};sendMessage=(e,t)=>{if(I(e)||R(e)){this.#e.postMessage(e,{transfer:t});return}if(A(e)){let{port1:r,port2:n}=new MessageChannel;this.#r=r,r.addEventListener("message",this.#t),r.start(),this.#e.postMessage(e,{transfer:[n,...t||[]]});return}if(this.#r){this.#r.postMessage(e,{transfer:t});return}throw new d("TRANSMISSION_FAILED","Cannot send message because the MessagePort is not connected")};addMessageHandler=e=>{this.#n.add(e)};removeMessageHandler=e=>{this.#n.delete(e)};destroy=()=>{this.#e.removeEventListener("message",this.#t),this.#i(),this.#n.clear()};#i=()=>{this.#r?.removeEventListener("message",this.#t),this.#r?.close(),this.#r=void 0};#t=({ports:e,data:t})=>{if(this.#s?.(t)){if(I(t)&&this.#i(),A(t)){if(this.#r=e[0],!this.#r){this.#a?.("Ignoring ACK2 because it did not include a MessagePort");return}this.#r.addEventListener("message",this.#t),this.#r.start()}for(let r of this.#n)r(t)}}},_e=Te,Oe=class{#e;#a;#s=new Set;constructor({port:e}){if(!e)throw new d("INVALID_ARGUMENT","port must be defined");this.#e=e}initialize=({validateReceivedMessage:e})=>{this.#a=e,this.#e.addEventListener("message",this.#n),this.#e.start()};sendMessage=(e,t)=>{this.#e?.postMessage(e,{transfer:t})};addMessageHandler=e=>{this.#s.add(e)};removeMessageHandler=e=>{this.#s.delete(e)};destroy=()=>{this.#e.removeEventListener("message",this.#n),this.#e.close(),this.#s.clear()};#n=({data:e})=>{if(this.#a?.(e))for(let t of this.#s)t(e)}},Le=Oe,De={ConnectionDestroyed:"CONNECTION_DESTROYED",ConnectionTimeout:"CONNECTION_TIMEOUT",InvalidArgument:"INVALID_ARGUMENT",MethodCallTimeout:"METHOD_CALL_TIMEOUT",MethodNotFound:"METHOD_NOT_FOUND",TransmissionFailed:"TRANSMISSION_FAILED"},be=De,ke=e=>(...t)=>{console.log(`\u270D\uFE0F %c${e}%c`,"font-weight: bold;","",...t)},He=ke;return Q(Fe);})();