@hazem3500/komo 0.8.0 → 0.9.1
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/NODE.md +20 -0
- package/README.md +64 -0
- package/dist/accent-picker-F5UI2NP7.js +1 -0
- package/dist/adapters/class-theme.d.ts +22 -0
- package/dist/adapters/class-theme.js +1 -0
- package/dist/adapters/tailwind.d.ts +62 -0
- package/dist/adapters/tailwind.js +1 -0
- package/dist/chunk-5LHGJFWQ.js +1 -0
- package/dist/chunk-JC6FXUNO.js +1 -0
- package/dist/{chunk-RPKLGTEU.js → chunk-Q7WSWLMV.js} +1 -1
- package/dist/{chunk-E5X4IQJ2.js → chunk-YZP3KX4Y.js} +1 -1
- package/dist/design-comment-RTVUFVDE.js +1 -0
- package/dist/design-comment.d.ts +50 -0
- package/dist/design-mode-styles.d.ts +1 -1
- package/dist/design-mode.d.ts +2 -0
- package/dist/design-mode.js +1 -1
- package/dist/design-system.d.ts +150 -0
- package/dist/design-tokens.d.ts +2 -0
- package/dist/dom.d.ts +10 -0
- package/dist/index.js +1 -1
- package/dist/inline-text-editor-SWPVB35B.js +1 -0
- package/dist/inline-text-editor.d.ts +3 -0
- package/dist/node.mjs +218 -65
- package/dist/{onboarding-YA63RUKK.js → onboarding-NO3RQWR7.js} +1 -1
- package/dist/react-inspector.d.ts +9 -1
- package/dist/react-props-panel-XQ4T3RLV.js +1 -0
- package/dist/react-props-panel.d.ts +3 -1
- package/dist/react.js +1 -1
- package/dist/review-layout.d.ts +3 -1
- package/dist/setup.js +1 -1
- package/dist/tag-editor-ZA7NLPOJ.js +1 -0
- package/dist/toolbar-runtime-2JO6YXD5.js +1 -0
- package/dist/types.d.ts +20 -0
- package/package.json +11 -2
- package/server/iap.ts +133 -0
- package/server/index.ts +108 -17
- package/server/secrets.d.ts +6 -0
- package/server/setup-client.txt +142 -70
- package/src/types.ts +21 -0
- package/dist/accent-picker-HSUCA4KE.js +0 -1
- package/dist/chunk-Z2ABBESO.js +0 -1
- package/dist/chunk-ZUNTYWJF.js +0 -1
- package/dist/inline-text-editor-F7B6FQQ3.js +0 -1
- package/dist/react-props-panel-XSMDR2CY.js +0 -1
- package/dist/tag-editor-VDPZ6CO3.js +0 -1
- package/dist/toolbar-runtime-MYOLQPTJ.js +0 -1
package/src/types.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import type { DesignSystem } from "./design-system.js";
|
|
2
|
+
export type * from "./design-system.js";
|
|
3
|
+
|
|
1
4
|
export interface Identity {
|
|
2
5
|
id: string;
|
|
3
6
|
name: string;
|
|
@@ -122,6 +125,24 @@ export interface CommentsOptions {
|
|
|
122
125
|
drawerContainer?: HTMLElement;
|
|
123
126
|
/** Mounted content root for Frame. Defaults to a sole body content element; otherwise Floating only. */
|
|
124
127
|
pageRoot?: HTMLElement;
|
|
128
|
+
/**
|
|
129
|
+
* Roots, besides pageRoot, whose elements can be picked for comments and
|
|
130
|
+
* Design mode, such as a portal container. Defaults to all of body except
|
|
131
|
+
* komo, so body-level dialogs and popovers are pickable. Return [] to limit
|
|
132
|
+
* picking to pageRoot. Called on every pick; keep it cheap.
|
|
133
|
+
*/
|
|
134
|
+
pickRoots?: () => Element[];
|
|
135
|
+
/**
|
|
136
|
+
* Stop komo's own pointer, focus, wheel and typing events at its host
|
|
137
|
+
* element, so page shortcuts and open modals don't react to komo's UI.
|
|
138
|
+
* Defaults to true; set false if the host needs to observe them.
|
|
139
|
+
*/
|
|
140
|
+
isolateEvents?: boolean;
|
|
141
|
+
/**
|
|
142
|
+
* Design-system adapters for Design mode: tokens, theme axes, and component
|
|
143
|
+
* identity. All optional; see DesignSystem.
|
|
144
|
+
*/
|
|
145
|
+
design?: DesignSystem;
|
|
125
146
|
/** Resolve an anchor to a repository-relative source path. */
|
|
126
147
|
source?: (element: Element) => string | undefined;
|
|
127
148
|
/** Defaults to GitHub's source viewer. */
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as e}from"./chunk-E5X4IQJ2.js";import"./chunk-I7AUKTXE.js";import{useEffect as t,useLayoutEffect as r,useRef as n,useState as o}from"react";import{createRoot as a}from"react-dom/client";import c,{useRef as i,useMemo as l,useEffect as u,useState as s,useCallback as f,useLayoutEffect as d}from"react";function h(){return(h=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}function p(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)t.indexOf(r=a[n])>=0||(o[r]=e[r]);return o}function v(e){var t=i(e),r=i(function(e){t.current&&t.current(e)});return t.current=e,r.current}var m=function(e,t,r){return void 0===t&&(t=0),void 0===r&&(r=1),e>r?r:e<t?t:e},g=function(e){return"touches"in e},b=function(e){return e&&e.ownerDocument.defaultView||self},_=function(e,t,r){var n=e.getBoundingClientRect(),o=g(t)?function(e,t){for(var r=0;r<e.length;r++)if(e[r].identifier===t)return e[r];return e[0]}(t.touches,r):t;return{left:m((o.pageX-(n.left+b(e).pageXOffset))/n.width),top:m((o.pageY-(n.top+b(e).pageYOffset))/n.height)}},w=function(e){!g(e)&&e.preventDefault()},x=c.memo(function(e){var t=e.onMove,r=e.onKey,n=e.onEnd,o=p(e,["onMove","onKey","onEnd"]),a=i(null),s=v(t),f=v(r),d=v(n),m=i(null),x=i(!1),E=l(function(){var e=function(e){w(e),(g(e)?e.touches.length>0:e.buttons>0)&&a.current?s(_(a.current,e,m.current)):(r(!1),d())},t=function(){r(!1),d()};function r(r){var n=x.current,o=b(a.current),c=r?o.addEventListener:o.removeEventListener;c(n?"touchmove":"mousemove",e),c(n?"touchend":"mouseup",t)}return[function(e){var t,n=e.nativeEvent,o=a.current;if(o&&(w(n),t=n,(!x.current||g(t))&&o)){if(g(n)){x.current=!0;var c=n.changedTouches||[];c.length&&(m.current=c[0].identifier)}o.focus(),s(_(o,n,m.current)),r(!0)}},function(e){var t=e.which||e.keyCode;t<37||t>40||(e.preventDefault(),f({left:39===t?.05:37===t?-.05:0,top:40===t?.05:38===t?-.05:0}))},function(e){var t=e.which||e.keyCode;t>=37&&t<=40&&d()},r]},[f,s,d]),C=E[0],y=E[1],k=E[2],N=E[3];return u(function(){return N},[N]),c.createElement("div",h({},o,{onTouchStart:C,onMouseDown:C,className:"react-colorful__interactive",ref:a,onKeyDown:y,onKeyUp:k,tabIndex:0,role:"slider"}))}),E=function(e){return e.filter(Boolean).join(" ")},C=function(e){var t=e.color,r=e.left,n=e.top,o=void 0===n?.5:n,a=E(["react-colorful__pointer",e.className]);return c.createElement("div",{className:a,style:{top:100*o+"%",left:100*r+"%"}},c.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:t}}))},y=function(e,t,r){return void 0===t&&(t=0),void 0===r&&(r=Math.pow(10,t)),Math.round(r*e)/r},k=(Math.PI,function(e){return"#"===e[0]&&(e=e.substring(1)),e.length<6?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:4===e.length?y(parseInt(e[3]+e[3],16)/255,2):1}:{r:parseInt(e.substring(0,2),16),g:parseInt(e.substring(2,4),16),b:parseInt(e.substring(4,6),16),a:8===e.length?y(parseInt(e.substring(6,8),16)/255,2):1}}),N=function(e){var t=function(e){var t=e.s,r=e.v,n=e.a,o=(200-t)*r/100;return{h:y(e.h),s:y(o>0&&o<200?t*r/100/(o<=100?o:200-o)*100:0),l:y(o/2),a:y(n,2)}}(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"},M=function(e){var t=e.h,r=e.s,n=e.v,o=e.a;t=t/360*6,r/=100,n/=100;var a=Math.floor(t),c=n*(1-r),i=n*(1-(t-a)*r),l=n*(1-(1-t+a)*r),u=a%6;return{r:y(255*[n,i,c,c,l,n][u]),g:y(255*[l,n,n,i,c,c][u]),b:y(255*[c,c,l,n,n,i][u]),a:y(o,2)}},L=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},I=function(e){var t=e.r,r=e.g,n=e.b,o=e.a,a=o<1?L(y(255*o)):"";return"#"+L(t)+L(r)+L(n)+a},j=function(e){var t=e.r,r=e.g,n=e.b,o=e.a,a=Math.max(t,r,n),c=a-Math.min(t,r,n),i=c?a===t?(r-n)/c:a===r?2+(n-t)/c:4+(t-r)/c:0;return{h:60*(i<0?i+6:i),s:a?c/a*100:0,v:a/255*100,a:o}},H=c.memo(function(e){var t=e.hue,r=e.onChange,n=e.onChangeEnd,o=E(["react-colorful__hue",e.className]);return c.createElement("div",{className:o},c.createElement(x,{onMove:function(e){r({h:360*e.left})},onKey:function(e){r({h:m(t+360*e.left,0,360)})},onEnd:n,"aria-label":"Hue","aria-valuenow":y(t),"aria-valuemax":"360","aria-valuemin":"0"},c.createElement(C,{className:"react-colorful__hue-pointer",left:t/360,color:N({h:t,s:100,v:100,a:1})})))}),P=c.memo(function(e){var t=e.hsva,r=e.onChange,n=e.onChangeEnd,o={backgroundColor:N({h:t.h,s:100,v:100,a:1})};return c.createElement("div",{className:"react-colorful__saturation",style:o},c.createElement(x,{onMove:function(e){r({s:100*e.left,v:100-100*e.top})},onKey:function(e){r({s:m(t.s+100*e.left,0,100),v:m(t.v-100*e.top,0,100)})},onEnd:n,"aria-label":"Color","aria-valuetext":"Saturation "+y(t.s)+"%, Brightness "+y(t.v)+"%"},c.createElement(C,{className:"react-colorful__saturation-pointer",top:1-t.v/100,left:t.s/100,color:N(t)})))}),z=function(e,t){if(e===t)return!0;for(var r in e)if(e[r]!==t[r])return!1;return!0};var D=typeof window<"u"?d:u,B=new WeakMap,K=function(e){D(function(){var t=e.current;if(typeof document<"u"&&t){var r=t.getRootNode?t.getRootNode():t.ownerDocument,n=r&&("head"in r||"host"in r)?r:t.ownerDocument;if(!B.has(n)){var o="head"in n?n.head:n,a=(o.ownerDocument||document).createElement("style");a.innerHTML='.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url(\'data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill-opacity=".05"><path d="M8 0h8v8H8zM0 8h8v8H0z"/></svg>\')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}';var c=typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0;c&&a.setAttribute("nonce",c),B.set(n,a),o.appendChild(a)}}},[])},O=function(e){var t=e.className,r=e.colorModel,n=e.color,o=void 0===n?r.defaultColor:n,a=e.onChange,l=e.onChangeEnd,d=p(e,["className","colorModel","color","onChange","onChangeEnd"]),m=i(null);K(m);var g=function(e,t,r,n){var o=v(r),a=v(n),c=s(function(){return e.toHsva(t)}),l=c[0],d=c[1],h=i({color:t,hsva:l}),p=i(!1);u(function(){if(!e.equal(t,h.current.color)){var r=e.toHsva(t);h.current={hsva:r,color:t},d(r),p.current=!1}},[t,e]),u(function(){var t;z(l,h.current.hsva)||e.equal(t=e.fromHsva(l),h.current.color)||(h.current={hsva:l,color:t},o(t),p.current=!0)},[l,e,o]);var m=f(function(e){d(function(t){return Object.assign({},t,e)})},[]),g=f(function(){p.current&&(p.current=!1,a(h.current.color))},[a]);return[l,m,g]}(r,o,a,l),b=g[0],_=g[1],w=g[2],x=E(["react-colorful",t]);return c.createElement("div",h({},d,{ref:m,className:x}),c.createElement(P,{hsva:b,onChange:_,onChangeEnd:w}),c.createElement(H,{hue:b.h,onChange:_,onChangeEnd:w,className:"react-colorful__last-control"}))},R={defaultColor:"000",toHsva:function(e){return j(k(e))},fromHsva:function(e){return function(e){return I(M(e))}({h:e.h,s:e.s,v:e.v,a:1})},equal:function(e,t){return e.toLowerCase()===t.toLowerCase()||z(k(e),k(t))}},S=function(e){return c.createElement(O,h({},e,{colorModel:R}))},A=/^#?([0-9A-F]{3,8})$/i,T=function(e){var t=e.color,r=void 0===t?"":t,n=e.onChange,o=e.onBlur,a=e.escape,i=e.validate,l=e.format,d=e.process,m=p(e,["color","onChange","onBlur","escape","validate","format","process"]),g=s(function(){return a(r)}),b=g[0],_=g[1],w=v(n),x=v(o),E=f(function(e){var t=a(e.target.value);_(t),i(t)&&w(d?d(t):t)},[a,d,i,w]),C=f(function(e){i(e.target.value)||_(a(r)),x(e)},[r,a,i,x]);return u(function(){_(a(r))},[r,a]),c.createElement("input",h({},m,{value:l?l(b):b,spellCheck:"false",onChange:E,onBlur:C}))},W=function(e){return"#"+e},q=function(e){var t=e.prefixed,r=e.alpha,n=p(e,["prefixed","alpha"]),o=f(function(e){return e.replace(/([^0-9A-F]+)/gi,"").substring(0,r?8:6)},[r]),a=f(function(e){return t=e,n=r,o=A.exec(t),3===(a=o?o[1].length:0)||6===a||!!n&&4===a||!!n&&8===a;var t,n,o,a},[r]);return c.createElement(T,h({},n,{escape:o,format:t?W:void 0,process:W,validate:a}))};import*as X from"react";var $=({size:e=24,color:t="currentColor",...r})=>X.createElement("svg",{viewBox:"0 0 24 24",width:e,height:e,stroke:t,strokeWidth:"2",fill:"none",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",...r},X.createElement("path",{d:"M12 5v14m-7-7h14"}));$.displayName="Plus";import{jsx as Y,jsxs as F}from"react/jsx-runtime";var U=[["Lavender","#c8b5f4"],["Blue","#85b5ff"],["Mint","#84d9bb"],["Yellow","#f4d779"],["Peach","#f5af87"],["Pink","#efa5c6"]];function J({initial:e,onChange:a}){let[c,i]=o(e),[l,u]=o(!1),s=n(null),f=n(null),d=!U.some(([,e])=>e===c),h=e=>{if(!/^#[0-9a-f]{6}$/i.test(e))return;let t=e.toLowerCase();i(t),a(t)};return r(()=>{let e=s.current;if(!e)return;if(!l){let t=window.setTimeout(()=>e.hidePopover(),150);return()=>clearTimeout(t)}e.showPopover();let t=()=>{let t=f.current.getBoundingClientRect();e.style.left=`${Math.max(8,Math.min(t.right-e.offsetWidth,innerWidth-e.offsetWidth-8))}px`,e.style.top=`${Math.max(8,t.top-e.offsetHeight-8)}px`};return t(),e.querySelector('[role="slider"]')?.focus({preventScroll:!0}),window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[l]),t(()=>{if(!l)return;let e=e=>{!e.composedPath().includes(s.current)&&!e.composedPath().includes(f.current)&&u(!1)};return document.addEventListener("pointerdown",e),()=>document.removeEventListener("pointerdown",e)},[l]),F("div",{className:"account-accent",children:[Y("span",{className:"account-accent-label",children:"Accent color"}),F("div",{className:"accent-swatches",role:"group","aria-label":"Accent color",children:[U.map(([e,t])=>Y("button",{type:"button",className:"accent-swatch","aria-label":e,title:e,"aria-pressed":c===t,style:{"--swatch":t},onClick:()=>{h(t),u(!1)}},e)),Y("button",{ref:f,type:"button",className:"accent-swatch accent-custom","aria-label":"Custom accent color","aria-haspopup":"dialog","aria-expanded":l,"aria-pressed":d,onClick:()=>u(!l),children:Y($,{"aria-hidden":"true"})})]}),F("div",{ref:s,popover:"manual",role:"dialog","aria-label":"Custom accent color",className:l?"accent-popover t-dropdown is-open":"accent-popover t-dropdown is-closing",onKeyDown:e=>{e.stopPropagation(),"Escape"===e.key&&(e.preventDefault(),u(!1),f.current?.focus())},children:[F("div",{className:"accent-popover-head",children:[Y("span",{children:"Color"}),Y("span",{children:c})]}),F("div",{className:"accent-picker-body",children:[Y(S,{color:c,onChange:h}),Y(q,{"aria-label":"Hex accent color",className:"accent-hex",color:c,onChange:h,prefixed:!0})]})]})]})}function Q(t,r){let n=e("div","account-accent-mount"),o=a(n);return o.render(Y(J,{initial:t,onChange:r})),{element:n,destroy:()=>o.unmount()}}export{Q as accentPicker};
|
package/dist/chunk-Z2ABBESO.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=new WeakMap;function t(e,t){return void 0===t?!e.required:!(!function(e){return void 0===e||"string"==typeof e||"number"==typeof e&&Number.isFinite(e)||"boolean"==typeof e}(t)||"unsupported"===e.kind)&&("string"===e.kind?"string"==typeof t&&t.length<=500:"number"===e.kind?"number"==typeof t&&Number.isFinite(t):"boolean"===e.kind?"boolean"==typeof t:"enum"===e.kind&&(e.values??[]).includes(t))}function r(e,r){let n={};for(let o of e.props){if("unsupported"===o.kind)continue;let e=r[o.name];t(o,e)&&(n[o.name]=e)}return n}function n(t,n,o,i){let l=n.textProp&&n.props.some(e=>e.name===n.textProp&&"string"===e.kind)?n.textProp:void 0,s=r(n,o),a={definition:n,props:s,onChange:i,setProps(e){let t=r(n,e);if(Object.keys(t).length===Object.keys(e).length){for(let e of n.props)if("unsupported"!==e.kind&&e.required&&!(e.name in t))return;a.props=t,a.onChange(t)}}};return e.set(t,a),t.dataset.komoInspectable=n.id,l?t.dataset.komoTextProp=l:delete t.dataset.komoTextProp,()=>{e.get(t)===a&&(e.delete(t),t.dataset.komoInspectable===n.id&&delete t.dataset.komoInspectable,t.dataset.komoTextProp===l&&delete t.dataset.komoTextProp)}}function o(t,n,o,i){if(!t)return;let l=e.get(t);if(!l||l.definition.id!==n.id)return;l.definition=n,l.props=r(n,o),l.onChange=i;let s=n.textProp&&n.props.some(e=>e.name===n.textProp&&"string"===e.kind)?n.textProp:void 0;s?t.dataset.komoTextProp=s:delete t.dataset.komoTextProp}function i(t){let r=t;for(;r;){let t=e.get(r);if(t&&r.getAttribute("data-komo-inspectable")===t.definition.id)return t;r=r.parentElement}return null}var l=new Set,s=new WeakMap,a=new WeakMap,p=new WeakMap,u={color:new Set(["color","background-color","border-color"]),dimension:new Set(["gap","padding","margin","border-radius","font-size","width","height"]),fontFamily:new Set(["font-family"]),fontWeight:new Set(["font-weight"]),lineHeight:new Set(["line-height"])};function f(e,t){if(t.length>100||t.some(e=>!function(e){return!!e&&"string"==typeof e.path&&e.path.length<=160&&/^--[a-zA-Z0-9_-]+$/.test(e.cssVariable)&&!!u[e.type]&&Array.isArray(e.properties)&&e.properties.length>0&&e.properties.every(t=>u[e.type].has(t))&&"string"==typeof e.impactSelector&&e.impactSelector.length<=200}(e)))throw new Error("Komo design tokens must use supported, explicit CSS-variable metadata");let r=new Set(t.map(e=>e.path)),n=new Set(t.map(e=>e.cssVariable));if(r.size!==t.length||n.size!==t.length)throw new Error("Komo design token paths and CSS variables must be unique");for(let r of t)e.querySelectorAll(r.impactSelector);let o={root:e,tokens:t.map(e=>({...e,properties:[...e.properties]})),themeEdits:new Map,elementOriginals:new Map,elementBindings:new Map,previousMarker:e.getAttribute("data-komo-design-tokens")};return s.set(e,o),l.add(o),p.set(o,[]),e.setAttribute("data-komo-design-tokens",String(t.length)),()=>{if(s.get(e)===o){for(let[t,r]of o.themeEdits){let n=o.tokens.find(e=>e.path===t);n&&(r.inlineBefore?e.style.setProperty(n.cssVariable,r.inlineBefore):e.style.removeProperty(n.cssVariable))}for(let[e,t]of o.elementOriginals)for(let[r,n]of t)n.value?e.style.setProperty(r,n.value,n.priority):e.style.removeProperty(r);o.elementBindings.clear(),l.delete(o),s.delete(e),null===o.previousMarker?e.removeAttribute("data-komo-design-tokens"):e.setAttribute("data-komo-design-tokens",o.previousMarker)}}}function d(e){if(!e)return null;let t=null;for(let r of l)(r.root===e||r.root.contains(e))&&(!t||t.root.contains(r.root))&&(t=r);return t}function m(e,t){return e.root.ownerDocument.defaultView?.getComputedStyle(e.root).getPropertyValue(t.cssVariable).trim()??""}function g(e,t){try{return e.root.querySelectorAll(t.impactSelector).length}catch{return 0}}function h(e,t,r,n=!1){if(!e.tokens.some(e=>e===t||e.path===t.path)||!function(e,t,r){if(!r||r.length>160||/[{};]/.test(r)||/(?:url|expression)\s*\(/i.test(r))return!1;let n=e.root.ownerDocument.defaultView?.CSS;return!n?.supports||t.properties.some(e=>n.supports(e,r))}(e,t,r))return!1;let o=m(e,t),i=e.themeEdits.get(t.path),l=e.root.style.getPropertyValue(t.cssVariable),s=i?.inlineBefore??l,a=p.get(e)??[];if(o===r)return!0;e.root.style.setProperty(t.cssVariable,r),r===(i?.before??o)?e.themeEdits.delete(t.path):e.themeEdits.set(t.path,{before:i?.before??o,after:r,inlineBefore:s});let u=a.at(-1);return n&&"theme"===u?.kind&&u.token.path===t.path?r===u.before?a.pop():u.after=r:a.push({kind:"theme",source:e,token:t,before:o,after:r,inlineBefore:l}),p.set(e,a),!0}function c(e,t){let r=e.themeEdits.get(t.path),n=p.get(e)??[],o=n.find(e=>"theme"===e.kind&&e.token.path===t.path),i=r?.inlineBefore??("theme"===o?.kind?o.inlineBefore:void 0);void 0!==i&&(i?e.root.style.setProperty(t.cssVariable,i):e.root.style.removeProperty(t.cssVariable),e.themeEdits.delete(t.path),p.set(e,n.filter(e=>"theme"!==e.kind||e.token.path!==t.path)))}function y(e,t,r,n,o={}){if(!e.tokens.some(e=>e.path===r.path)||!r.properties.includes(n))return!1;let i=e.elementOriginals.get(t);i||e.elementOriginals.set(t,i=new Map),i.has(n)||i.set(n,{value:t.style.getPropertyValue(n),priority:t.style.getPropertyPriority(n)});let l=t.style.getPropertyValue(n),s=t.style.getPropertyPriority(n),u=`var(${r.cssVariable})`,f=e.elementBindings.get(t);f||e.elementBindings.set(t,f=new Map);let d=f.get(n);if(f.set(n,{tokenPath:r.path,initialValue:d?.initialValue??l,initialPriority:d?.initialPriority??s,mode:"token",declaredPath:d?d.declaredPath:$(e,t,n)?.token.path}),t.style.setProperty(n,u,s),!1===o.recordHistory)return!0;let m={kind:"element",element:t,property:n,before:l,priority:s,after:u},g=p.get(e)??[];g.push(m),p.set(e,g);let h=a.get(t)??[];return h.push(m),a.set(t,h),!0}function k(e,t,r,n){let o=e.elementBindings.get(t),i=o?.get(r);if(!i){let n=$(e,t,r);if(!n)return;o||e.elementBindings.set(t,o=new Map),i={tokenPath:n.token.path,initialValue:t.style.getPropertyValue(r),initialPriority:t.style.getPropertyPriority(r),mode:"custom",declaredPath:n.token.path},o.set(r,i)}i.mode="custom",i.customValue=n}function b(e,t,r){let n=e.elementBindings.get(t)?.get(r);if(!n)return;let o=t.style.getPropertyValue(r);o!==n.initialValue||t.style.getPropertyPriority(r)!==n.initialPriority?e.tokens.find(e=>e.path===n.tokenPath&&e.properties.includes(r)&&o===`var(${e.cssVariable})`)?(n.mode="token",delete n.customValue):(n.mode="custom",n.customValue=o):e.elementBindings.get(t)?.delete(r)}function P(e,t,r){let n=e.elementBindings.get(t)?.get(r);return n?{...n}:null}var v={"background-color":["background"],"border-color":["border"],"font-family":["font"],"font-size":["font"],"font-weight":["font"],"line-height":["font"]};function w(e,t,r,n){let o=[...r.matchAll(/var\(\s*(--[\w-]+)/g)].map(e=>e[1]);if(!o.length||n&&!/^var\(\s*--[\w-]+\s*(?:,[^;{}]*)?\)$/.test(r.trim()))return;let i=e.tokens.filter(e=>e.properties.includes(t)&&o.includes(e.cssVariable));return 1===i.length?i[0]:void 0}function V(e){let t=e.replace(/:(?:where)\([^)]*\)/g,"").replace(/"[^"]*"|'[^']*'/g,"");return 1e4*(t.match(/#[\w-]+/g)?.length??0)+100*(t.match(/\.[\w-]+|\[[^\]]*\]|:(?!:)[\w-]+/g)?.length??0)+(t.match(/(?:^|[\s>+~(])[a-z][\w-]*/gi)?.length??0)}function B(e){let t=[],r=0,n=0;for(let o=0;o<e.length;o++){let i=e[o];"("===i||"["===i?r++:")"===i||"]"===i?r--:","===i&&0===r&&(t.push(e.slice(n,o)),n=o+1)}return t.push(e.slice(n)),t.map(e=>e.trim()).filter(Boolean)}function $(e,t,r,n=t.style.getPropertyValue(r),o=t.style.getPropertyPriority(r)){let i=t.ownerDocument.defaultView,l=null,s=0,a=e=>{for(let n of e){s++;let e=n.media;if(e&&i?.matchMedia&&e.mediaText&&!i.matchMedia(e.mediaText).matches)continue;let o=n.style,p=n.selectorText;if(o&&p)for(let e of[r,...v[r]??[]]){let r=o.getPropertyValue(e).trim();if(!r)continue;let n=-1;for(let e of B(p))try{t.matches(e)&&(n=Math.max(n,V(e)))}catch{}if(!(n<0)){n+=o.getPropertyPriority(e)?1e9:0,(!l||n>l.rank||n===l.rank&&s>=l.order)&&(l={value:r,property:e,rank:n,order:s});break}}let u=n.cssRules;u&&!o&&a(u)}};for(let e of t.ownerDocument.styleSheets)try{e.disabled||a(e.cssRules)}catch{}let p=l;if(n&&(!(p&&p.rank>=1e9)||o)){let t=w(e,r,n,!0);return t?{token:t,origin:"inline"}:null}if(!p)return null;let u=w(e,r,p.value,p.property===r);return u?{token:u,origin:"stylesheet"}:null}function S(e,t,r){let n=e.elementBindings.get(t)?.get(r),o=e.elementOriginals.get(t)?.get(r),i=n?.initialValue??o?.value??"",l=n?.initialPriority??o?.priority??"";i?t.style.setProperty(r,i,l):t.style.removeProperty(r),e.elementBindings.get(t)?.delete(r)}function E(e,t){return e.tokens.filter(e=>e.properties.includes(t))}function x(e){let t=d(e);return!!t&&(t.themeEdits.size>0||!!a.get(e)?.length||!!t.elementBindings.get(e)?.size)}function M(e){let t=d(e);return!!t&&!!p.get(t)?.length}function A(e){let t=d(e),r=t&&p.get(t)?.pop();if(!t||!r)return;if("theme"===r.kind){r.inlineBefore?t.root.style.setProperty(r.token.cssVariable,r.inlineBefore):t.root.style.removeProperty(r.token.cssVariable);let e=t.themeEdits.get(r.token.path);if(e&&e.after===r.after)e.before===r.before?t.themeEdits.delete(r.token.path):t.themeEdits.set(r.token.path,{...e,after:r.before});else if(!e){let e=p.get(t).find(e=>"theme"===e.kind&&e.token.path===r.token.path);t.themeEdits.set(r.token.path,{before:r.after,after:r.before,inlineBefore:("theme"===e?.kind?e:r).inlineBefore})}return}r.before?r.element.style.setProperty(r.property,r.before,r.priority):r.element.style.removeProperty(r.property);let n=a.get(r.element)??[];n.pop(),n.length||a.delete(r.element)}function T(e){let t=d(e);if(!t)return;for(let[e,r]of t.themeEdits){let n=t.tokens.find(t=>t.path===e);n&&(r.inlineBefore?t.root.style.setProperty(n.cssVariable,r.inlineBefore):t.root.style.removeProperty(n.cssVariable))}t.themeEdits.clear();let r=t.elementOriginals.get(e);for(let[t,n]of r??[])n.value?e.style.setProperty(t,n.value,n.priority):e.style.removeProperty(t);t.elementOriginals.delete(e),t.elementBindings.delete(e),a.delete(e),p.set(t,(p.get(t)??[]).filter(t=>"element"===t.kind&&t.element!==e))}function O(e){let t=d(e);if(!t)return;let r=[];for(let[n,o]of t.elementBindings.get(e)??[]){let e=t.tokens.find(e=>e.path===o.tokenPath&&e.properties.includes(n));if(!e)continue;let i=t.tokens.find(e=>e.path===o.declaredPath),l=i?`var(${i.cssVariable}) [${i.path}]`:o.initialValue||"(unset)";"token"===o.mode?i!==e&&r.push(`Element ${n}: ${l} → var(${e.cssVariable}) [${e.path}]${i?" [rebind]":""}`):r.push(`Element ${n}: ${l} → ${o.customValue||"(unset)"} [${i?"custom override":"custom value"}]`)}for(let n of a.get(e)??[]){if("element"!==n.kind||t.elementBindings.get(e)?.has(n.property))continue;let o=t.tokens.find(e=>n.after===`var(${e.cssVariable})`);o&&r.push(`Element ${n.property}: ${n.before||"(unset)"} → var(${o.cssVariable}) [${o.path}]`)}for(let[e,n]of t.themeEdits){let o=t.tokens.find(t=>t.path===e);o&&r.push(`Shared theme ${e} (${o.cssVariable}): ${n.before} → ${n.after}; preview scope ${o.impactSelector} (${g(t,o)} matching elements)`)}return r.length?["Proposed design-token changes (preview only)",...r,"Token references are preserved for element assignments; refresh resets previews."].join("\n"):void 0}export{t as a,n as b,o as c,i as d,f as e,d as f,m as g,g as h,h as i,c as j,y as k,k as l,b as m,P as n,$ as o,S as p,E as q,x as r,M as s,A as t,T as u,O as v};
|
package/dist/chunk-ZUNTYWJF.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,b as t,c as n,d as o}from"./chunk-RPKLGTEU.js";import{b as i}from"./chunk-Y2GRLW4Q.js";import{a,b as r,c as s,d,e as l,f as c,g as p,h as u,i as h,ja as m}from"./chunk-7YUXYVQA.js";import{a as f,b as g,d as b,e as x,f as w,h as y,i as v,j as k}from"./chunk-E5X4IQJ2.js";var C=e=>`komo:setup:${e.endpoint}:${e.onboarding?.code}`;function S(e){if(!e.onboarding?.inProject)return e;try{let t=JSON.parse(localStorage.getItem(C(e))||"null");if("string"==typeof t?.project&&t.project.startsWith("komo_")&&"string"==typeof t.repo)return{...e,project:t.project,repo:t.repo,onboarding:void 0}}catch{}return e}function E(e){let{scope:t="project",...n}=e;if("branch"===t&&!e.branch?.trim())throw new Error("Branch scope needs a build-time branch. Run komo sync before your build or set branch explicitly.");return{...n,endpoint:n.endpoint||"https://komo.offbr.co",repo:e.repo||e.project,branch:"branch"===t?e.branch:"shared"}}function $(e,t){let n=e.x<t/2?"right":"left",o=e.component;if(!o)return n;let{left:i,top:a,right:r,bottom:s}=o;if(r<=i||s<=a)return n;let d=(i+r)/2;return(Math.hypot(Math.max(i-e.x,0,e.x-r),Math.max(a-e.y,0,e.y-s))||Math.min(e.x-i,r-e.x,e.y-a,s-e.y))>100||e.x===d?n:e.x<d?"right":"left"}var z=class{constructor(e,t,n=e=>e){this.confirmed=e,this.changed=t,this.normalize=n}confirmed;changed;normalize;jobs=[];aliases=new Map;revision=0;get busy(){return this.jobs.length>0}id=e=>this.aliases.get(e)??e;get value(){return this.normalize(this.jobs.reduce((e,t)=>t.change(e,this.id),this.confirmed),this.id)}replace(e,t=this.revision){return!this.busy&&t===this.revision&&(this.confirmed=e,this.changed(this.value),!0)}reset(e){let t=this.jobs;this.jobs=[],this.aliases.clear(),this.confirmed=e,this.revision++;for(let e of t)e.reject(new DOMException("Session changed","AbortError"));this.changed(this.value)}submit(e,t){let n=new Promise((n,o)=>{this.jobs.push({change:e,save:t,resolve:n,reject:o})});return this.revision++,this.changed(this.value),1===this.jobs.length&&this.drain(),n}async drain(){for(;this.jobs.length;){let e,t=this.jobs[0],n=!1;try{let e=await t.save(this.id);if(this.jobs[0]!==t)return;this.confirmed=t.change(this.confirmed,this.id);for(let[t,n]of Object.entries(e??{}))this.aliases.set(t,n);this.confirmed=this.normalize(this.confirmed,this.id)}catch(t){n=!0,e=t}if(this.jobs[0]!==t)return;this.jobs.shift(),this.revision++,this.changed(this.value),n?t.reject(e):t.resolve()}}};function j(e,t,n,o,i=600,a=34){let r=t+((n-e)*i-t*a)*o;return{value:e+r*o,velocity:r}}var M=(e,t)=>Math.max(16,Math.min(e,t));function L(e,t,n,o,i){return{...e,x:"left"===e.edgeX?16:"right"===e.edgeX?Math.max(16,o-t-16):M(e.x,o-t-16),y:"top"===e.edgeY?16:"bottom"===e.edgeY?Math.max(16,i-n-16):M(e.y,i-n-16)}}function A(e,t,n,o,i){let a=L(e,t,n,o,i),r=o-t-16-a.x,s=i-n-16-a.y;return Math.min(a.x-16,r)<.05*o&&(a.edgeX=a.x-16<=r?"left":"right"),Math.min(a.y-16,s)<.05*i&&(a.edgeY=a.y-16<=s?"top":"bottom"),L(a,t,n,o,i)}function _(e,t,n,o,i,a,r=()=>!0,s=()=>!1){let d;t.addEventListener("pointerdown",l=>{let c=l.target;if(!r()||0!==l.button||c.closest("button,input,textarea,a,summary,[role=menu]")&&!s(c))return;d?.();let p=e.getBoundingClientRect(),u=!1,h=l.clientX,m=l.clientY,f=l.timeStamp,g=0,b=0,x=t=>{if(t.pointerId!==l.pointerId)return;if(!r())return void d?.();let o=t.clientX-l.clientX,a=t.clientY-l.clientY;if(!u&&Math.hypot(o,a)<5)return;if(!u){i?.();for(let t of e.getAnimations())t.cancel();e.dataset.dragging="true",u=!0}t.preventDefault();let s=t.timeStamp-f;s>0&&(g=.8*(t.clientX-h)/s+.2*g,b=.8*(t.clientY-m)/s+.2*b),h=t.clientX,m=t.clientY,f=t.timeStamp;let c=L({x:p.left+o,y:p.top+a},p.width,p.height,document.documentElement.clientWidth,window.innerHeight);n(c);let x=A(c,p.width,p.height,document.documentElement.clientWidth,window.innerHeight);e.dataset.snapX=x.edgeX??"",e.dataset.snapY=x.edgeY??""},w=o=>{if(o.pointerId!==l.pointerId)return;if(!r())return void d?.();if(d?.(),!u)return;let i=e.getBoundingClientRect(),s="pointercancel"!==o.type&&o.timeStamp-f<80?120:0;n(A({x:i.left+g*s,y:i.top+b*s},i.width,i.height,document.documentElement.clientWidth,window.innerHeight)),a?.();let c=e.getBoundingClientRect();matchMedia("(prefers-reduced-motion: reduce)").matches||e.animate([{translate:`${i.left-c.left}px ${i.top-c.top}px`},{translate:"0px 0px"}],{duration:320,easing:"cubic-bezier(.22,1,.36,1)"}),t.addEventListener("click",e=>{e.preventDefault(),e.stopImmediatePropagation()},{capture:!0,once:!0})};d=()=>{window.removeEventListener("pointermove",x,!0),window.removeEventListener("pointerup",w,!0),window.removeEventListener("pointercancel",w,!0),delete e.dataset.dragging,delete e.dataset.snapX,delete e.dataset.snapY,o.removeEventListener("abort",d)},o.addEventListener("abort",d,{once:!0}),window.addEventListener("pointermove",x,{capture:!0,passive:!1}),window.addEventListener("pointerup",w,!0),window.addEventListener("pointercancel",w,!0)},{signal:o})}var T=16,R=240,W=200,q=(e,t,n)=>Math.min(Math.max(e,t),Math.max(t,n));function O(e,t,n,o,i,a){let r=t.left+t.width,s=t.top+t.height,d=Math.min(a-32,680),l=t.left,c=t.top,p=t.width,u=t.height;return e.includes("e")&&(p=q(t.width+n,R,i-t.left-T)),e.includes("w")&&(p=q(t.width-n,R,r-T),l=r-p),e.includes("s")&&(u=q(t.height+o,W,Math.min(a-t.top-T,d))),e.includes("n")&&(u=q(t.height-o,W,Math.min(s-T,d)),c=s-u),{left:l,top:c,width:p,height:u}}import H from"emoji-regex";function P(e){if("string"!=typeof e||e.length>128)return!1;let t=e.match(H());return 1===t?.length&&t[0]===e}var B=["👍","❤️","🎉","👀","✅","🤔"];var Y=new Map;function I(e){if(Y.has(e))return Y.get(e);let t={counts:{}};try{let n=JSON.parse(localStorage.getItem(e)??"null");for(let[e,o]of Object.entries(n?.counts??{}).slice(0,200))P(e)&&"number"==typeof o&&Number.isFinite(o)&&o>0&&(t.counts[e]=o);P(n?.recent)&&(t.recent=n.recent)}catch{}return Y.set(e,t),t}function N(e,t,n,o,i="branch-comments:emoji:guest",a="https://cdn.jsdelivr.net/npm/emoji-picker-element-data@1.8.0/en/emojibase/data.json"){let r=b("div","emoji-menu t-dropdown");r.dataset.origin="top-left",r.setAttribute("role","menu"),r.setAttribute("aria-label","Reactions");let s=new AbortController,d=!1,l=null,c=(e=!1)=>{let t=l;l=null,t&&(t.classList.remove("is-open"),t.classList.add("is-closing"),e?t.remove():window.setTimeout(()=>t.remove(),150))},p=(e=!1)=>{if(d&&!e)return;d=!0,s.abort(),t.setAttribute("aria-expanded","false"),r.classList.remove("is-open"),r.classList.add("is-closing");let n=parseFloat(getComputedStyle(r).getPropertyValue("--dropdown-close-dur"))||150;c(e),e?r.remove():window.setTimeout(()=>r.remove(),n)},u=function(e,t){let n=[...new Set([...B,...Object.keys(e.counts)])].filter(P),o=t=>e.counts[t]??(B.includes(t)?1:0),i=(e,t)=>o(t)-o(e),a=n.sort(i).slice(0,6),r=t??e.recent;return r&&P(r)&&!a.includes(r)&&(a[a.length-1]=r,a.sort(i)),a}(I(i),o).map((e,t)=>{let i=w(e,()=>{p(),n(e)},"emoji-choice");return i.setAttribute("role","menuitemradio"),i.setAttribute("aria-checked",String(e===o)),i.style.setProperty("--emoji-index",String(t)),r.append(i),i}),h=w("Choose another emoji",async()=>{if(l)return;let t=l=b("div","emoji-keyboard t-dropdown");l.setAttribute("role","dialog"),l.setAttribute("aria-label","Choose an emoji");let o=w("Close emoji keyboard",()=>{c(),h.focus()},"icon emoji-keyboard-close","close"),i=b("span","emoji-keyboard-status","Loading…");l.append(o,i),e.append(l),o.focus({preventScroll:!0});let s=()=>{if(!l)return;let e=r.getBoundingClientRect();l.style.left=`${Math.max(8,Math.min(e.right-l.offsetWidth,innerWidth-l.offsetWidth-8))}px`,l.style.top=`${Math.max(8,Math.min(e.bottom+8,innerHeight-l.offsetHeight-8))}px`};s(),l.classList.add("is-open");try{let{default:e}=await import("./picker-WQN53YJ5.js");if(d||l!==t)return;let o=new e({dataSource:a});o.i18n={...o.i18n,networkErrorMessage:"Couldn’t load emojis. Close and try again."},o.classList.add("dark"),o.addEventListener("emoji-click",e=>{let t=e.detail.unicode;P(t)&&(p(),n(t))}),i.replaceWith(o);let r=document.createElement("style");r.textContent='\n .pad-top, .skintone-button-wrapper, .skintone-list, .favorites, .indicator-wrapper { display: none !important; }\n .search-row { padding: 10px 44px 10px 10px; flex: none; }\n input.search { height: 30px; padding: 5px 9px; font-size: 12px; background: #ffffff08; }\n input.search::-webkit-search-cancel-button { display: none; }\n .category { font-size: 11px; padding: 6px 10px; color: #999; }\n .nav { order: 10; flex: none; padding: 6px; box-shadow: 0 -1px #ffffff0d; }\n .nav-button { position: relative; border-radius: 6px; }\n .nav-button + .nav-button::before { content: ""; position: absolute; left: 0; top: 8px; bottom: 8px; width: 1px; background: #ffffff0d; }\n .nav-button[aria-selected="true"] { background: #ffffff10; }\n .tabpanel { padding: 0 4px 6px; }\n ',o.shadowRoot?.append(r),s()}catch{i.textContent="Couldn’t load emojis. Close and try again."}},"emoji-choice","plus");h.setAttribute("role","menuitem"),h.setAttribute("aria-haspopup","dialog"),h.style.setProperty("--emoji-index",String(u.length)),r.append(h),u.push(h),e.addEventListener("keydown",e=>{e instanceof KeyboardEvent&&"Escape"===e.key&&l&&(e.preventDefault(),e.stopPropagation(),c(),h.focus())},{signal:s.signal}),e.append(r);let m=t.getBoundingClientRect();return r.dataset.placement=m.right+6+r.offsetWidth>innerWidth-8?"below":"right",r.style.left=`${Math.max(8,Math.min(m.right+6,innerWidth-r.offsetWidth-8))}px`,r.style.top=`${Math.max(8,Math.min(innerHeight-r.offsetHeight-8,m.right+6+r.offsetWidth>innerWidth-8?m.bottom+6:m.top-4))}px`,t.setAttribute("aria-expanded","true"),r.offsetWidth,r.classList.add("is-open"),(u.find(e=>"true"===e.getAttribute("aria-checked"))??u[0])?.focus({preventScroll:!0}),document.addEventListener("pointerdown",e=>{!e.composedPath().includes(r)&&(!l||!e.composedPath().includes(l))&&p()},{signal:s.signal}),document.addEventListener("scroll",e=>{l&&e.composedPath().includes(l)||p()},{capture:!0,signal:s.signal}),r.addEventListener("keydown",e=>{("Escape"===e.key||"Tab"===e.key)&&(p(),"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),t.focus()));let n=u.indexOf(e.target),o="ArrowRight"===e.key?(n+1)%u.length:"ArrowLeft"===e.key?(n+u.length-1)%u.length:-1;o>=0&&(e.preventDefault(),u[o]?.focus())}),p}function D(e){try{let t=new URL(e);return"http:"!==t.protocol&&"https:"!==t.protocol||t.username||t.password?null:t.href}catch{return null}}function X(e){let t=e.length;for(;t>0&&/[.,!?;:]$/.test(e.slice(0,t));)t--;for(let[n,o]of[["(",")"],["[","]"],["{","}"]])for(;t>0&&e[t-1]===o;){let i=e.slice(0,t),a=[...i].filter(e=>e===n).length;if([...i].filter(e=>e===o).length<=a)break;t--}return{url:e.slice(0,t),trailing:e.slice(t)}}var U=(e,t)=>e<=760||e<=1e3&&t<=500;function F(e,t,n,o=t,i=!1){let a=n&&!U(e,t),r=n&&!a,s=a?.9:1,d=(r?o:t)*s,l=a?404:0,c=a?e-l-e*s:0,p=a?t*(1-s)/2:0;return{desktop:a,mobile:r,framed:a,sheetTop:r?i?0:.18*t:t,bottom:t-p-d,scale:s,left:c,top:p,right:l,visibleTop:Math.max(0,p),visibleHeight:Math.max(0,d+Math.min(0,p)),visibleLeft:Math.max(0,c),visibleWidth:e-l-Math.max(0,c),height:d,dockCenter:a?e-190:e/2}}function K(e){let t=e instanceof n?e.code:void 0;return"site_not_approved"===t?{kind:"site",title:"Comments aren’t on for this site",detail:"Own this site? Turn comments on. Otherwise, send this link to the owner."}:"offline"===t?{kind:"offline",title:"You’re offline",detail:"Comments will come back when you do."}:"unreachable"===t?{kind:"unreachable",title:"Can’t connect",detail:"You might be offline, or this site isn’t set up for comments yet."}:{kind:"server",title:"Comments didn’t load",detail:e instanceof Error?e.message:"Something went wrong."}}var J="input,textarea,select,script,style,[contenteditable],[hidden],[aria-hidden=true]",V=(e,t=160)=>e.replace(/\s+/g," ").trim().slice(0,t);function G(e){let t,n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT),o="";for(;(t=n.nextNode())&&(t.parentElement?.closest(J)||(o+=t.textContent+" "),!(o.length>320)););return V(o)}function Q(e){let t=document.querySelectorAll(e);return 1===t.length?t[0]:null}var Z=/^radix-|^:r|_r_|«r/;function ee(e,t){for(let n of["data-comment-anchor","id","data-testid","data-test","data-cy"]){let o=e.getAttribute(n);if(!o||o.length>500||"id"===n&&Z.test(o))continue;let i="id"===n?`#${CSS.escape(o)}`:`[${n}="${CSS.escape(o)}"]`;if(i.length<=2e3&&(!t||i===t)&&Q(i)===e)return i}}function te(e){let t=[],n=e;for(;n&&n!==document.body&&t.length<12;){let e=ee(n);if(e){t.unshift(e);break}let o=n.parentElement?[...n.parentElement.children].filter(e=>e.tagName===n.tagName):[];t.unshift(`${n.tagName.toLowerCase()}:nth-of-type(${o.indexOf(n)+1})`),n=n.parentElement}return t.join(" > ")}function ne(e){return V(e.getAttribute("aria-label")||(e.getAttribute("aria-labelledby")||"").split(/\s+/).map(e=>{let t=e&&document.getElementById(e);return t?G(t):""}).join(" ")||e.getAttribute("alt")||e.labels&&[...e.labels].map(G).join(" ")||"")}function oe(e){let t=e.parentElement?.closest("li,article,tr,[data-comment-anchor]")||e.parentElement;return t&&t!==document.body&&t!==document.documentElement?G(t):""}function ie(e){let t,n=e.parentElement;for(;n&&n!==document.body&&!(t=ee(n));)n=n.parentElement;let o=window.getSelection(),i=o?.rangeCount?o.getRangeAt(0):null,a=getComputedStyle(e);return{tag:e.tagName.length<=32?e.tagName.toLowerCase():void 0,role:V(e.getAttribute("role")||"",80)||void 0,label:ne(e)||void 0,nearby:oe(e)||void 0,classes:V(e.getAttribute("class")||"",200)||void 0,styles:["display","width","height","font-size","color","padding","gap"].map(e=>`${e}: ${a.getPropertyValue(e)}`).join("; ").slice(0,500),selectedText:i&&e.contains(i.commonAncestorContainer)&&!e.closest(J)&&!e.querySelector(J)&&V(o.toString(),200)||void 0,scope:t}}function ae(e,t){let n=t.context;return!!(t.text||n?.label||n?.nearby)&&((!t.text||(n?G(e)===V(t.text):V(e.textContent||"").startsWith(V(t.text))))&&(!n||(!n.tag||e.tagName.toLowerCase()===n.tag)&&(!n.role||e.getAttribute("role")===n.role)&&(!n.label||ne(e)===n.label)&&(!n.nearby||oe(e)===n.nearby)))}function re(e,t){if(e===t||e&&t&&(e.startsWith(t)||t.startsWith(e)))return!0;let n=e.toLowerCase().split(" ").filter(Boolean),o=new Set(t.toLowerCase().split(" ").filter(Boolean));return 2*n.filter(e=>o.has(e)).length/(n.length+o.size||1)>=.6}function se(e,t,n,o){let i=e,a=Math.min(t.x,n.x),r=Math.min(t.y,n.y),s=Math.max(t.x,n.x),d=Math.max(t.y,n.y);for(;i.parentElement&&i!==document.body;){let e=i.getBoundingClientRect();if(a>=e.left&&s<=e.right&&r>=e.top&&d<=e.bottom&&e.width&&e.height)break;i=i.parentElement}let l=i.getBoundingClientRect(),c=e=>Math.max(0,Math.min(1,e)),p=s-a>6||d-r>6,u=c((a-l.left)/(l.width||1)),h=c((r-l.top)/(l.height||1));return{selector:te(i),text:G(i),context:ie(i),x:u,y:h,width:p?Math.min(1-u,(s-a)/(l.width||1)):0,height:p?Math.min(1-h,(d-r)/(l.height||1)):0,pageX:a+window.scrollX,pageY:r+window.scrollY,viewportWidth:window.innerWidth,source:("function"==typeof o?o(i):o)??i.closest("[data-comment-source]")?.getAttribute("data-comment-source")??void 0}}var de=(e,t,n)=>{let o=[...n?e.querySelectorAll(t.context.tag):e.children].filter(e=>ae(e,t));return 1===o.length?o[0]:null};function le(e,t,n=de){let o=null;try{let i=e.selector?Q(e.selector):document.body;if(o=t?.isConnected&&t===i?t:i,o&&ee(o,e.selector))return o;if(o&&!ae(o,e))return ce(e,n)??(function(e,t){let n=t.context;return!!n?.tag&&e.tagName.toLowerCase()===n.tag&&(!n.role||e.getAttribute("role")===n.role)&&(!n.classes||V(e.getAttribute("class")||"",200)===n.classes)&&re(V(t.text),G(e))&&(!n.nearby||re(n.nearby,oe(e)))}(o,e)?o:null);if(o||!e.context?.scope)return o&&function(e,t,n){let o=t.context;if(!o?.tag||!(t.text||o.label||o.nearby))return e;let i=o.scope?Q(o.scope):null;return i?n(i,t,!0):e.parentElement?n(e.parentElement,t,!1):null}(o,e,n);o=ce(e,n)}catch{o=null}return o}function ce(e,t){let n=e.context;if(!n?.tag||!n.scope||!(e.text||n.label||n.nearby))return null;let o=Q(n.scope);return o?t(o,e,!0):null}function pe(e,t){return ue(e,le(e,t))}function ue(e,t){if(t){let n=t.getBoundingClientRect();if(n.width&&n.height)return{x:n.left+n.width*e.x,y:n.top+n.height*e.y,width:n.width*e.width,height:n.height*e.height,attached:!0,component:{left:n.left,top:n.top,right:n.right,bottom:n.bottom}}}return{x:e.pageX*window.innerWidth/e.viewportWidth-window.scrollX,y:e.pageY-window.scrollY,width:0,height:0,attached:!1}}var he={comment:"C",browse:"V",design:"D",restore:"Shift+K"},me=["Ctrl","Alt","Shift","Meta"],fe=new Set(["escape","tab"]);function ge(e,t){let n=t.split("+").map(e=>e.trim());n.length>1&&""===n.at(-1)&&""===n.at(-2)&&n.splice(-2,2,"+");let o=n.pop()??"",i=new Set;for(let o of n){let n=me.find(e=>e.toLowerCase()===o.toLowerCase());if(!n||i.has(n))throw new Error(`Invalid komo shortcut for ${e}: "${t}".`);i.add(n)}if(!o||fe.has(o.toLowerCase()))throw new Error(`Invalid komo shortcut for ${e}: "${t}".`);let a=1===o.length?o.toUpperCase():o;return{key:o.toLowerCase(),shift:i.has("Shift"),alt:i.has("Alt"),ctrl:i.has("Ctrl"),meta:i.has("Meta"),label:[...me.filter(e=>i.has(e)),a].join("+")}}function be(e,t){if(!t||e.shiftKey!==t.shift||e.altKey!==t.alt||e.ctrlKey!==t.ctrl||e.metaKey!==t.meta)return!1;if(e.key.toLowerCase()===t.key)return!0;let{key:n}=t;return 1===n.length&&(/[a-z]/.test(n)?e.code===`Key${n.toUpperCase()}`:/[0-9]/.test(n)&&e.code===`Digit${n}`)}function xe(e,t){return t?`${e} · ${t.label}`:e}var we=new WeakMap;function ye(e){return ve(E(e))}function ve(E){let M={destroy(){},open(){},close(){},comment(){},async refresh(){}};if(typeof document>"u"||!1===E.enabled)return M;if(!(E.endpoint&&E.repo&&E.branch&&E.project))throw new Error("Comments require endpoint, repo, branch, and project.");if(E.pageRoot&&(E.pageRoot===document.body||!document.body.contains(E.pageRoot)))throw new Error("pageRoot must be mounted inside body.");let A=new URL(E.endpoint);if(A.username||A.password||"https:"!==A.protocol&&("http:"!==A.protocol||!["localhost","127.0.0.1","[::1]"].includes(A.hostname)))throw new Error("Use an HTTPS API endpoint without credentials; HTTP is allowed on localhost.");let q=function(e={}){let t={},n=new Map;for(let o of Object.keys(he)){let i=e[o]??he[o];if(!1===i){t[o]=null;continue}if("string"!=typeof i)throw new Error(`Invalid komo shortcut for ${o}.`);let a=ge(o,i),r=n.get(a.label.toLowerCase());if(r)throw new Error(`komo shortcuts for ${r} and ${o} both use ${a.label}.`);n.set(a.label.toLowerCase(),o),t[o]=a}return t}(E.shortcuts),H=!1!==E.features?.designMode,Y=!1!==E.features?.tags,J=JSON.stringify([A.href,E.project,E.repo,E.branch]),Q=we.get(document);if(Q){if(Q.scope!==J)throw new Error("Destroy the current komo instance before changing projects or branches.");return Q.controller}E={...S(E)};let Z=[...document.body.childNodes].filter(e=>e instanceof Element?!e.matches("script,style,link,meta,template,noscript"):3===e.nodeType&&e.textContent?.trim()),ee=E.pageRoot??(1===Z.length&&Z[0]instanceof HTMLElement?Z[0]:document.body),te="contents"===getComputedStyle(ee).display?document.body:ee,ie=te!==document.body,ae=`branch-comments:sidebar-mode:${E.project}:${E.repo}`,re=(()=>{if(!ie)return"edge";try{let e=localStorage.getItem(ae);if("edge"===e||"background"===e)return e}catch{}return"background"===E.sidebar?"background":"edge"})(),de=U(window.innerWidth,window.innerHeight),ce=!de&&"edge"===re,me=["localhost","127.0.0.1","[::1]"].includes(location.hostname),fe=E.branch,ye=`branch-comments:channel:${E.project}:${E.repo}`,ve="local";try{"shared"===localStorage.getItem(ye)&&(ve="shared")}catch{}me&&"local"===ve&&(E={...E,branch:"local"});let ke=new o(E),Ce=new AbortController,Se=!1,Ee=!!E.onboarding,$e=!1,ze=!1,je=!1===E.showToolbar,Me=!1===E.showToolbar,Le=!1,Ae=!1,_e=0,Te=!!E.onboarding,Re=!1,We=!1,qe=!!E.onboarding,Oe=0,He=[],Pe=null,Be=null,Ye=null,Ie=null,Ne=new z([],e=>{if(!Se){if(Pe){let e=Ne.id(Pe);e!==Pe&&(Ft.has(Pe)&&(Ft.set(e,Ft.get(Pe)),Ft.delete(Pe)),Ct===Pe&&(Ct=e),Pe=e)}Pt&&(Pt=Ne.id(Pt)),He=e,Zo="",ii(),xi(),Qo(),Te||Mi()}},(e,t)=>e.map(e=>({...e,id:t(e.id),comments:e.comments.map(e=>({...e,id:t(e.id)}))})));function De(e,t){return(n,o)=>n.flatMap(n=>{if(n.id!==o(e))return[n];let i=t(n);return i?[i]:[]})}async function Xe(e,t,n){let o=ke,i=ke.token,a=Oe,r=()=>Se||ke!==o||a!==Oe||ke.token!==i;try{await Ne.submit(e,async e=>{if(r())throw new DOMException("Session changed","AbortError");return t(e)})}catch(e){throw r()?new DOMException("Session changed","AbortError"):(n?.(),Pi(),new Error(`Couldn't save. Your change was reverted. ${e instanceof Error?e.message:"Try again."}`,{cause:e}))}if(r())throw new DOMException("Session changed","AbortError");Ne.busy||bo(Eo)}let Ue,Fe="open",Ke="",Je=!0,Ve="",Ge="Connecting",Qe="",Ze=null,et=0,tt=0,nt=null,ot=Promise.resolve(),it=null;function at(){clearTimeout(et);let e=it;return it=null,e&&(ot=ot.catch(()=>{}).then(async()=>{if(ke.token===e.token)try{let t=await ke.request("me","PATCH",{name:e.name,avatarUrl:e.avatarUrl,accentColor:e.accentColor});if(ke.token!==e.token)return;nt=t.user,tt===e.revision&&ke.save({token:e.token,user:t.user}),Se||(Qo(),bo(Eo))}catch(t){throw ke.token===e.token&&tt===e.revision&&(ke.user=nt,Ze=null,Pi()),new Error(`Couldn't save your profile. ${t instanceof Error?t.message:"Try again."}`,{cause:t})}})),ot}function rt(e,t=!1){!ke.token||!e.name.trim()||((!nt||nt.id!==ke.user?.id)&&(nt=ke.user?{...ke.user}:null),it={...e,name:e.name.trim(),token:ke.token,revision:++tt},ke.user&&(ke.user={...ke.user,...e,name:e.name.trim()}),Qo(),clearTimeout(et),t?bo(at):et=window.setTimeout(()=>bo(at),500))}function st(){let e=w("Continue with Google",()=>bo(()=>ki("google")),"google-signin secondary");return e.prepend(k()),e}let dt,lt,ct="",pt=null,ut=!1,ht=!1,mt=!1,ft=E.onboarding?.sites?.filter(e=>e.startsWith("https://")&&e!==location.origin).join("\n")??"",gt=!1,bt=null,xt=!1,wt=!1,yt=!1,vt=null,kt=[],Ct=null,St=new Map,Et=function(e){let t=null,n=null,o=0,i=0,a=0,r=0,s=0,d=0,l=0,c=0,p=0,u=0,h=1,m=matchMedia("(prefers-reduced-motion: reduce)"),f=()=>{n&&(n.style.translate=`${a-l}px ${r-c}px`,n.style.scale=`${1-p*h} ${1-p*(1-h)}`)},g=()=>{cancelAnimationFrame(o),o=0,s=d=p=u=0,n&&(n.style.translate="",n.style.scale="",n.style.willChange="")},b=t=>{if(!n?.isConnected||m.matches)return void g();let x=Math.min((t-i)/1e3,.032);i=t;let w=Math.max(1,Math.ceil(x/.008));for(let e=0;e<w;e++){let e=x/w,t=j(a,s,l,e),n=j(r,d,c,e);a=t.value,s=t.velocity,r=n.value,d=n.velocity;let o=Math.hypot(s,d);o>30&&(h=Math.abs(s)/(Math.abs(s)+Math.abs(d)));let i=j(p,u,Math.min(.035,o/24e3),e,220,15);p=Math.max(-.012,Math.min(.04,i.value)),u=i.velocity}if(f(),e(),Math.hypot(a-l,r-c)<.1&&Math.hypot(s,d)<1&&Math.abs(p)<2e-4&&Math.abs(u)<.002)return a=l,r=c,g(),void e();o=requestAnimationFrame(b)};return{place(e,s,d,p,u){if(t!==e&&(g(),t=e,a=d,r=p),n=s,l=d,c=p,s.style.left=`${d}px`,s.style.top=`${p}px`,m.matches||!u&&!o)return a=d,r=p,void g();f(),s.style.willChange="translate, scale",o||(i=performance.now(),o=requestAnimationFrame(b))},stop:g}}(()=>fo()),$t=null,zt=`branch-comments:drawer:${E.project}:${E.repo}`;try{let e=JSON.parse(localStorage.getItem(zt)??"null");e&&Number.isFinite(e.x)&&Number.isFinite(e.y)&&(lt={x:e.x,y:e.y,edgeX:["left","right"].includes(e.edgeX)?e.edgeX:void 0,edgeY:["top","bottom"].includes(e.edgeY)?e.edgeY:void 0},dt=lt)}catch{}let jt,Mt,Lt=`branch-comments:sidebar:${E.project}:${E.repo}`,At=!1,_t=380,Tt=null;try{let e=JSON.parse(localStorage.getItem(Lt)??"null");Number.isFinite(e?.width)&&(_t=e.width),Number.isFinite(e?.height)&&(Tt=e.height),e&&Number.isFinite(e.x)&&Number.isFinite(e.y)&&(jt={x:e.x,y:e.y,edgeX:["left","right"].includes(e.edgeX)?e.edgeX:void 0,edgeY:["top","bottom"].includes(e.edgeY)?e.edgeY:void 0},Mt=jt)}catch{}let Rt,Wt=new Map,qt="",Ot=[],Ht="",Pt=null,Bt="",Yt=null,It=ao(),Nt=0,Dt=0,Xt=0,Ut=0,Ft=new Map,Kt=b("div");Kt.dataset.branchComments="",Kt.dataset.sidebar=de?"mobile":ce?"edge":"background",Object.assign(Kt.style,{position:"fixed",inset:"0",pointerEvents:"none",zIndex:"2147483647",isolation:"isolate"});let Jt=Kt.attachShadow({mode:"open"}),Vt=b("style");Vt.textContent='.project-management[hidden],.project-management [hidden]{display:none!important}.project-management .account-sites-summary{justify-content:space-between}.project-management .account-usage-status{padding:0 16px}.project-management summary{cursor:pointer}.project-member{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12px;overflow-wrap:anywhere}.project-danger{display:grid;gap:10px;font-size:12px}.project-danger p{color:#999;line-height:1.5}.project-danger>button{display:block;width:100%;margin-top:12px}.project-help{color:var(--accent,#c8b5f4);font-size:12px}.project-management .destructive{color:#fda29b}.cleanup-confirm{position:fixed;margin:0;width:min(296px,calc(100vw - 24px));box-sizing:border-box;padding:16px;border:0;border-radius:16px;background:#242424;color:#eee;font:13px/1.5 ui-sans-serif,system-ui,sans-serif;box-shadow:inset 0 0 0 1px #ffffff18,0 12px 40px #0005}.cleanup-confirm p{margin:8px 0 16px;color:#aaa}.cleanup-actions{display:flex;justify-content:flex-end;gap:8px}.cleanup-actions button{border:0;border-radius:9px;padding:8px 10px;background:#ffffff0b;color:#ddd;font:inherit;cursor:pointer}.cleanup-actions button:hover{background:#ffffff15}.cleanup-actions button:focus-visible{outline:2px solid var(--accent,#c8b5f4);outline-offset:2px}.cleanup-actions .destructive,.panel-head .copy-page-prompt.destructive{color:#fda29b}.copy-page-prompt:disabled{opacity:.4;cursor:default}:host{all:initial;line-height:1.45;color-scheme:light}*{box-sizing:border-box}button,input,textarea,select{font:inherit;color:inherit}button{appearance:none;border:0;cursor:pointer;background:none;display:inline-flex;align-items:center;justify-content:center;gap:7px;flex-shrink:0}button:disabled{opacity:.45;cursor:wait}button:focus-visible,a:focus-visible{outline:2px solid #f48120;outline-offset:3px}input,textarea,select{border:0;outline:none;background:#f4f3f0;border-radius:8px;padding:10px 12px;box-shadow:inset 0 0 0 1px #e4e2dd}input:focus,textarea:focus,select:focus{box-shadow:inset 0 0 0 2px #f48120}textarea{resize:vertical;min-height:85px;max-height:260px;width:100%;line-height:1.55;scrollbar-width:none}textarea::-webkit-scrollbar{display:none}input{min-width:0;width:100%}p{margin:0}h2,h3{margin:0;font-size:16px;font-weight:600}a{color:inherit}svg{width:18px;height:18px;flex-shrink:0}small{font-size:11px;color:#77766f}.toolbar{position:fixed;bottom:24px;left:50%;transform:translate(-50%);pointer-events:auto;z-index:5;transition:opacity .15s ease}:host(.design-active) .toolbar{opacity:0;pointer-events:none;transition-delay:.4s}:host(.design-active[data-sidebar="mobile"]) .toolbar{transition-delay:.32s}@media(prefers-reduced-motion:reduce){:host(.design-active) .toolbar,:host(.design-active[data-sidebar="mobile"]) .toolbar{transition-duration:0ms;transition-delay:0ms}}.catch{position:fixed;inset:0;pointer-events:auto;cursor:crosshair;touch-action:none;z-index:0}.selection,.area{position:fixed;pointer-events:none}.selection{z-index:1}.pin{position:fixed;pointer-events:auto;z-index:2}.pin:hover,.pin.active{background:#252522;color:#fff}.pin.detached{opacity:.65}.panel{position:fixed;right:0;top:0;width:380px;height:100%;pointer-events:auto;background:#faf9f6;box-shadow:-1px 0 #dad8d1,-15px 0 40px #00000008;display:flex;flex-direction:column;z-index:4}.panel[hidden]{display:none!important}.panel-head{display:grid}.row{display:flex;align-items:center;gap:8px}.between{justify-content:space-between}.muted{color:#77766f}.icon{width:30px;height:30px;border-radius:7px}.icon:hover{background:#ebe9e3}.list{overflow:auto;flex:1;overscroll-behavior:contain;padding:0 10px 100px}.thread-card{display:block;width:100%;text-align:left;position:relative}.thread-card:after{content:"";position:absolute;bottom:0;height:1px;background:#e8e5de}.thread-card:hover{background:#f0eee8}.thread-item{position:relative}.list[data-long]>.thread-item{content-visibility:auto;contain-intrinsic-block-size:auto 160px}.thread-item>.card-resolve{position:absolute;top:8px;right:8px;display:grid;place-items:center;opacity:0;filter:blur(2px);transition:opacity .15s cubic-bezier(.22,1,.36,1),filter .15s cubic-bezier(.22,1,.36,1),transform .15s cubic-bezier(.22,1,.36,1)}.thread-item:hover>.card-resolve,.thread-item>.card-resolve:focus-visible{opacity:1;filter:none}.thread-item>.card-resolve:active{transform:scale(.98)}@media(hover:none){.thread-item>.card-resolve{opacity:1;filter:none}}@media(prefers-reduced-motion:reduce){.thread-item>.card-resolve{transition:none}}.thread-card.active{background:#ede9df}.thread-card .preview{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;white-space:pre-wrap;overflow-wrap:anywhere}.meta{display:flex;gap:8px;align-items:center;font-size:11px;color:#77766f}.tag-list{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--accent, #bda6ef)}.page{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:215px}.empty{text-align:center;color:#77766f;display:grid;justify-items:center}.empty svg{width:32px;height:32px;color:#bbb6aa}.empty strong{color:#34332e}.empty p{max-width:250px;line-height:1.6}.empty-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}.dialog{position:fixed;max-width:calc(100vw - 24px);max-height:calc(100vh - 110px);display:flex;flex-direction:column;pointer-events:auto;z-index:6}.dialog-head{flex-shrink:0}.dialog-head h3{font-size:13px}.messages{overflow:auto;overscroll-behavior:contain}.message{position:relative}.message+.message:before{content:"";position:absolute;inset:0 0 auto;height:1px}.author{font-weight:600;font-size:12px}.avatar{width:26px;height:26px;border-radius:50%;display:inline-grid;place-items:center;font-size:10px}.message-text{white-space:pre-wrap;overflow-wrap:anywhere}.actions{display:flex;align-items:center;flex-wrap:wrap}.reaction{min-height:25px}.reaction-picker{display:flex;flex-wrap:wrap;gap:5px;margin:9px 0}.composer{display:grid}.primary{background:#282822;color:#fff;padding:8px 12px;border-radius:8px;font-size:12px;min-height:34px}.primary:hover{background:#4a463a}.secondary{padding:8px 12px;border-radius:8px;background:#eeece5;font-size:12px;min-height:34px}.secondary:hover{background:#e4e0d6}.notice{font-size:11px;color:#777268;line-height:1.5}.error{background:#fff0e5;color:#9c4619;padding:10px 12px;border-radius:8px;font-size:12px;line-height:1.5}.toast{position:fixed;bottom:94px;left:50%;transform:translate(-50%);padding:10px 16px;background:#242422;color:#fff;border-radius:9px;max-width:360px;pointer-events:auto;z-index:10;font-size:12px;box-shadow:0 4px 20px #0002}.account{display:grid}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}@media(max-width:760px){.toolbar{max-width:calc(100vw - 20px)}}.morphing-menu{--mm-surface: light-dark(#0d0d0d, #fff);--mm-ink: light-dark(rgb(255 255 255 / 90%), rgb(13 13 13 / 90%));--mm-hover: light-dark(rgb(255 255 255 / 6%), rgb(0 0 0 / 4%));--mm-button: 44px;--mm-inset: 4px;--mm-bar-height: calc(var(--mm-button) + 2 * var(--mm-inset));--mm-bar-width: min(calc(var(--mm-count) * var(--mm-button) + 2 * var(--mm-inset)), calc(100vw - 32px) );--mm-panel-width: min(268px, calc(100vw - 32px) );--mm-panel-padding: 8px;--mm-radius: calc(var(--mm-bar-height) / 2);position:relative;width:var(--mm-bar-width);height:var(--mm-bar-height);flex:none;font-family:inherit;-webkit-tap-highlight-color:transparent}.morphing-menu *,.morphing-menu *:before,.morphing-menu *:after{box-sizing:border-box}.morphing-menu__shell{position:absolute;bottom:0;left:50%;translate:-50% 0;width:var(--mm-bar-width);height:var(--mm-bar-height);border-radius:var(--mm-radius);background:var(--mm-surface, #0d0d0d);color:var(--mm-ink, #fff);box-shadow:inset 0 1px 1px light-dark(rgb(255 255 255 / 8%),rgb(255 255 255 / 40%)),inset 0 -1px 2px light-dark(rgb(0 0 0 / 50%),rgb(0 0 0 / 20%)),0 1px 2px #0000001f;overflow:hidden;isolation:isolate}.morphing-menu__bar{position:absolute;bottom:0;left:50%;translate:-50% 0;display:flex;align-items:center;padding:var(--mm-inset);width:var(--mm-bar-width);height:var(--mm-bar-height)}.morphing-menu__shortcut,.morphing-menu__row{appearance:none;display:flex;align-items:center;flex:none;border:0;margin:0;background:transparent;color:inherit;font:inherit;font-size:15px;font-weight:500;line-height:20px;text-decoration:none;cursor:pointer;touch-action:manipulation;scale:1;transition:background .15s ease,scale .18s cubic-bezier(.22,1,.36,1)}.morphing-menu__shortcut{justify-content:center;width:0;flex:1;height:var(--mm-button);padding:0;border-radius:999px}.morphing-menu__panel{position:absolute;top:0;left:50%;translate:-50% 0;width:var(--mm-panel-width);padding:var(--mm-panel-padding);max-height:calc(100dvh - 64px);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}.morphing-menu [aria-hidden=true]{pointer-events:none}.morphing-menu__row{gap:8px;width:100%;min-height:40px;padding:10px 12px;border-radius:calc(var(--mm-radius) - var(--mm-panel-padding));text-align:left}.morphing-menu__panel[aria-hidden=true] .morphing-menu__row{opacity:0}.morphing-menu__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.morphing-menu__icon{display:flex;flex:none}.morphing-menu svg{width:20px;height:20px;flex-shrink:0;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.morphing-menu__chevron{margin-left:auto;opacity:.6}.morphing-menu__shortcut:focus-visible,.morphing-menu__row:focus-visible{outline:2px solid currentColor;outline-offset:-3px}.morphing-menu__tooltip{position:absolute;bottom:calc(100% + 8px);translate:-50% 0;padding:6px 10px;border-radius:14px;background:light-dark(#fff,#171717);color:light-dark(#111,#fefefe);box-shadow:0 0 0 1px light-dark(rgb(0 0 0 / 6%),rgb(255 255 255 / 10%)),0 1px 2px -1px #0000000f,0 2px 4px #0000000a;font-size:14px;font-weight:500;line-height:20px;white-space:nowrap;pointer-events:none}@media(hover:hover){.morphing-menu__shortcut:hover,.morphing-menu__row:hover{background:var(--mm-hover)}}@media(pointer:coarse){.morphing-menu{--mm-button: 48px;--mm-bar-width: min(296px, calc(100vw - 32px) );--mm-panel-width: min(296px, calc(100vw - 32px) );--mm-panel-padding: 12px}.morphing-menu__row{min-height:44px;padding-block:12px}}@media(prefers-reduced-motion:no-preference){.morphing-menu__shortcut:active,.morphing-menu__row:active{transition-duration:.1s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.morphing-menu__shortcut:active{scale:.95}.morphing-menu__row:active{scale:.96}}@media(prefers-reduced-motion:reduce){.morphing-menu__shortcut,.morphing-menu__row{transition:none;scale:1}}.toolbar .morphing-menu{--mm-surface: #0d0d0d;--mm-ink: #f8f7f4;--mm-hover: #ffffff12}.toolbar .morphing-menu__row{justify-content:flex-start}.toolbar .morphing-menu__shortcut{padding:0}.toolbar .review-avatar{display:grid;place-items:center;width:24px;height:24px;border-radius:50%;font-size:10px;letter-spacing:0}:host(.review-open) .panel{color:#eee;box-shadow:none}:host(.review-open) .panel input,:host(.review-open) .panel select{background:#191919;color:#ddd;box-shadow:inset 0 0 0 1px #ffffff12}:host(.review-open) .panel .muted,:host(.review-open) .panel small,:host(.review-open) .panel .meta,:host(.review-open) .panel .branch{color:#888}:host(.review-open) .panel .filter{color:#999}:host(.review-open) .panel .filter.active,:host(.review-open) .panel .secondary{background:#262626;color:#eee}:host(.review-open) .panel .icon:hover,:host(.review-open) .panel .thread-card:hover{background:#161616}:host(.review-open) .panel .empty .primary{background:var(--accent, #bda6ef);color:#211b2d;font-weight:500}:host(.review-open) .panel .empty strong{color:#aaa;font-weight:400}:host(.review-open) .panel .empty svg{color:#555}:host(.review-open) .panel .list{padding-bottom:24px}:host{font-family:-apple-system,BlinkMacSystemFont,Inter,Segoe UI,sans-serif;font-size:13px;color:#202124}.pin{width:34px;height:34px;border-radius:50% 50% 50% 5px;font-size:11px;font-weight:600;box-shadow:0 0 0 2px #fff,0 3px 10px #0003}.pin.active{box-shadow:0 0 0 2px #fff,0 0 0 4px #4388ff,0 4px 14px #0003}.pin.resolved{background:#bfc9c4;color:#293c31}.pin-check svg{width:10px;height:10px}.pin-check{position:absolute;right:-4px;bottom:-3px;background:#fff;color:#4c6c56;border-radius:50%;font-size:9px;width:14px;height:14px;display:grid;place-items:center}.area,.selection{background:#4285f410;box-shadow:inset 0 0 0 1.5px #4388ff;border-radius:3px}:host(.review-open) .panel{width:380px;background:transparent}.panel-head .row{gap:4px}:host(.review-open) .panel .icon{color:#909090;width:28px;height:28px}.panel .icon svg{width:16px;height:16px}.thread-card{border-radius:14px}.thread-card .preview{font-size:15px;line-height:1.5;margin:0 0 14px;-webkit-line-clamp:5;color:#f1f1f1;letter-spacing:-.015em}.thread-card .row{gap:7px}.thread-card .avatar{width:20px;height:20px;font-size:8px}.thread-card .author{font-size:11px;font-weight:500;color:#b2b2b2}.thread-card small{margin-left:auto;font-size:10px}.thread-card .meta{margin-top:7px;padding-left:0;font-size:11px;gap:8px}.thread-card .meta:has(.page:empty)>:empty{display:none}.thread-card .meta:has(.page:empty):has(span:last-child:empty){display:none}:host(.review-open) .panel .thread-card:after{left:14px;right:14px;background:#ffffff0c}:host(.review-open) .panel .thread-card.active{background:#ffffff0a}:host(.review-open) .panel .avatar{background:#bca8e7;color:#302342}.empty{padding:50px 16px;gap:14px}.empty svg{display:none}.empty strong{font-size:13px}.dialog{overflow:hidden}.dialog-head{position:absolute;z-index:1;padding:0;box-shadow:none;justify-content:flex-end;height:26px}.dialog-head .icon,.draft-close,.approved-site>.icon{width:25px;height:25px;color:#949494}.dialog-head svg,.draft-close svg,.approved-site>.icon svg{width:15px;height:15px}.draft-close{position:absolute;right:16px;top:16px;z-index:1}.messages{max-height:45vh}.message .author{font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.message .avatar{background:#c8b5f4;color:#352a50;font-size:9px}.message small{font-size:10px}.message-text{letter-spacing:-.01em}.actions{gap:5px;min-height:26px}.actions>.icon{height:24px;width:24px}.actions>.icon svg{height:15px;width:15px}.reaction{padding:3px 7px;border-radius:20px;font-size:11px}.composer textarea{max-height:180px;resize:none;outline:none}.composer .row{gap:8px}.composer input{width:130px;min-width:0;background:#f5f5f7;box-shadow:none;padding:7px 10px;border-radius:20px;font-size:12px}.composer .row>.secondary{font-size:10px;padding:4px 8px;min-height:28px}.composer .avatar{width:24px;height:24px;font-size:9px;background:#c8b5f4;color:#352a50}.send{width:30px;height:30px;margin-left:auto;background:#3478f6;color:#fff;border-radius:50%;padding:0;transition:background .15s ease,transform .15s ease}.send:disabled{opacity:1;cursor:default}.send svg{width:18px;height:18px}.send:not(:disabled):active{transform:scale(.94)}.toolbar .review-avatar{background:#ffffff16;color:#ddd}.toolbar .review-avatar svg{width:15px;height:15px}@media(max-width:760px){:host(.mobile-composing) .toolbar{opacity:0;pointer-events:none;visibility:hidden}.dialog{width:calc(100vw - 32px);left:16px!important;max-height:65vh}.dialog .messages{max-height:35vh}}.component-hover{position:fixed;pointer-events:none;z-index:1;opacity:0;background:#4388ff0b;box-shadow:inset 0 0 0 1.5px #4388ff;transition:opacity .1s ease}.composer{gap:8px}.composer textarea{min-height:34px;font-size:13px;line-height:22px}.composer:has(.avatar){position:relative;padding-left:42px;padding-right:40px;min-height:58px}.composer:has(.avatar)>.row{display:contents}.composer:has(.avatar) .avatar{position:absolute}.composer:has(.avatar) .send{position:absolute;width:26px;height:26px}.dialog:has(.draft-close) .composer{padding-top:24px}.message-text{font-size:13px;line-height:1.5}.message:first-child>.row{padding-right:78px}.dialog-head{top:12px;right:8px}.message .author{font-size:11px}.comment-menu{position:relative}.comment-menu>summary{list-style:none;cursor:pointer;display:grid;place-items:center}.comment-menu>summary::-webkit-details-marker{display:none}.comment-menu-items{position:absolute;top:30px;right:0}.menu-action{width:100%;text-align:left;background:transparent}.pin-preview{position:fixed;pointer-events:auto;z-index:3}.pin-preview-open{display:block;width:100%;background:transparent;color:inherit;text-align:left;border-radius:inherit}.pin-preview p{font-size:13px;line-height:1.5;margin:0 0 12px;white-space:pre-wrap;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;overflow:hidden}.pin-preview .avatar{background:#c8b5f4;color:#352a50}.pin-preview small{color:#999;margin-left:auto}:host(.review-open) .panel{top:36px;right:0;padding:0 24px}.panel-head{padding:0 0 16px}.thread-card{padding:16px 12px}.thread-card .preview{margin-bottom:12px}.thread-card:after{left:12px;right:12px}:host(.review-open) .toolbar .morphing-menu{--mm-surface: #ffffff12;--mm-hover: #ffffff10}.toolbar .morphing-menu__shell{backdrop-filter:blur(12px) saturate(1.2);box-shadow:inset 0 1px #ffffff20,inset 0 0 0 1px #ffffff0c,0 4px 16px #0002}.pin:hover{background:#bda6ef;color:#352a50;box-shadow:0 0 0 2px #fff,0 3px 10px #0003}.comment-menu-items{min-width:224px;padding:5px;border-radius:12px;background:linear-gradient(145deg,#292729,#232323);color:#ededed;box-shadow:inset 0 0 0 1px #ffffff12,0 12px 32px #0004,0 2px 5px #0003}.menu-action{display:flex;align-items:center;gap:10px;justify-content:flex-start;min-height:36px;padding:8px 10px;color:inherit;font-size:13px;border-radius:8px}.menu-action svg{width:16px;height:16px;color:#bcb9bd}.menu-action:hover,.menu-action:focus-visible{background:#ffffff0d;outline:none}.menu-action+.menu-action:last-child{margin-top:6px;position:relative}.menu-action+.menu-action:last-child:before{content:"";position:absolute;top:-4px;left:5px;right:5px;height:1px;background:#ffffff0a}.toolbar .morphing-menu:has(.morphing-menu__panel[aria-hidden=false]) .morphing-menu__shell{background:linear-gradient(145deg,#292729,#232323)}.toolbar .morphing-menu__row{gap:10px;font-size:13px;border-radius:9px;color:#ededed}.toolbar .morphing-menu__row svg{width:18px;height:18px;color:#bcb9bd}.dialog{width:320px;border-radius:16px}.messages{padding:0 16px}.message{padding:18px 0 16px}.message .row{gap:8px}.message .avatar{width:24px;height:24px}.message-text{padding-left:32px;margin:3px 0 8px}.actions{padding-left:32px}.message+.message:before{left:-16px;right:-16px}.composer{padding:12px 16px}.composer textarea{padding:8px 10px;border-radius:8px}.composer:has(.avatar){padding:12px 16px 12px 48px}.composer:has(.avatar) textarea{padding-right:38px}.composer:has(.avatar) .avatar{left:16px;bottom:auto;top:19px;width:24px;height:24px}.composer:has(.avatar) .send{right:22px;bottom:18px}.review-avatar img{width:100%;height:100%;border-radius:inherit;object-fit:cover}.dialog,.pin-preview{background:#242424;color:#ececec;box-shadow:inset 0 0 0 1px #ffffff12,0 16px 48px #0005}.message .author,.pin-preview strong{color:#efefef}.message small{color:#8d8d8d}.message+.message:before,.composer{box-shadow:0 -1px #ffffff08}.message+.message:before{background:#ffffff08}.dialog .icon,.actions>.icon{color:#929292}.dialog .icon:hover{background:#ffffff0a;color:#eee}.composer textarea,.dialog input,.dialog textarea{background:#ffffff07;color:#eee;box-shadow:inset 0 0 0 1px #ffffff05}.composer textarea::placeholder,.dialog input::placeholder,.dialog textarea::placeholder{color:#858585}.composer textarea:focus,.dialog textarea:focus{box-shadow:inset 0 0 0 1px #ffffff20}.send:disabled{background:#ffffff0a;color:#707070}.reaction{background:#ffffff08;color:#ccc}.pin{touch-action:none}.pin{padding:0;overflow:hidden}.pin .avatar{position:absolute;inset:0;width:100%;height:100%;border-radius:inherit;background:transparent;color:inherit;display:grid;place-items:center;font-size:inherit}.avatar{position:relative;overflow:hidden;flex-shrink:0}.avatar img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:inherit}.sidebar-replies{position:relative;margin:16px 0 0 9px;padding-left:18px;display:grid;gap:14px}.sidebar-replies:before{content:"";position:absolute;left:0;top:0;bottom:8px;width:1px;background:#ffffff16}.sidebar-reply{display:flex;align-items:flex-start;gap:8px;text-align:left}.sidebar-reply>div{min-width:0}.sidebar-reply p{font-size:13px;line-height:1.5;margin-top:4px;white-space:pre-wrap;overflow-wrap:anywhere;color:#d9d9d9}.reply-meta{font-size:11px;color:#999}.floating-notice{display:flex;align-items:center;gap:10px;width:max-content;max-width:min(360px,calc(100vw - 24px));padding:10px 12px;border-radius:12px;color:#d4d4d4;background:#292929;box-shadow:inset 0 0 0 1px #ffffff12,0 8px 28px #0004;font-size:12px}.floating-notice>svg{width:16px;height:16px;color:#aaa}.floating-notice>span{flex:1}.floating-notice .icon{width:24px;height:24px}.floating-notice .icon:hover{background:#ffffff10}.notice-action{padding:5px 8px;border-radius:6px;background:#ffffff10}.account-layer{position:fixed;inset:0 0 0 auto;width:min(380px,100vw);padding:24px 16px 96px;z-index:9;display:grid;place-items:center;background:#0008;pointer-events:auto}.account-layer .account-dialog{position:relative;left:auto!important;top:auto!important;bottom:auto!important;width:100%;max-height:calc(100dvh - 120px);overflow-y:auto;overscroll-behavior:contain;touch-action:pan-y;scrollbar-width:thin;scrollbar-color:#ffffff30 transparent}.account{padding:36px 24px 24px;gap:20px}.account h2{font-size:20px;letter-spacing:-.025em;font-weight:500}.account-name-label{display:grid;gap:8px;font-size:12px;color:#999}.account input,.account textarea{font-size:15px;padding:12px}.account .primary{width:100%;min-height:42px;color:#222;background:#eee}.account .primary:hover{background:#fff}.account .secondary{background:#ffffff0a;color:#ddd}.account>.avatar{width:48px;height:48px;border-radius:50%;font-size:18px}.account .notice{color:#999}.account-layer .account-dialog{border-radius:24px;background:#202020;box-shadow:0 16px 48px #0006,inset 0 0 0 1px #ffffff12}.account-layer .account{flex:none;padding:32px 24px 24px;gap:20px}.account-summary{display:flex;flex-direction:column;align-items:center;gap:10px;margin-bottom:8px}.account-summary .avatar{width:72px;height:72px;font-size:24px;box-shadow:0 0 0 4px #ffffff06}.account-summary h3{margin:6px 0 0}.account-status{display:flex;align-items:center;justify-content:center;gap:5px;color:#949494;font-size:12px}.account-layer .account input,.account-layer .account textarea{width:100%;min-height:44px;background:#ffffff06;color:#f2f2f2;box-shadow:inset 0 0 0 1px #ffffff0b;border-radius:12px;transition:box-shadow .15s ease,background .15s ease}.account-layer .account input:focus,.account-layer .account textarea:focus{outline:none;background:#ffffff09;box-shadow:inset 0 0 0 1px #bda6ef}.account-layer .account button{border-radius:12px}.account-layer .account .primary{background:#bda6ef;color:#211b2d;font-weight:600}.account-layer .account .primary:disabled{opacity:.4;cursor:default}.account-dialog .dialog-head{top:16px;right:14px}.account-layer .account .account-avatar-button{padding:0;border-radius:50%;background:transparent;position:relative;transition:filter .15s ease,transform .15s ease}.account-avatar-button:hover{filter:brightness(.88);transform:scale(1.025)}.account-avatar-button:focus-visible{outline:2px solid #bda6ef;outline-offset:6px}.google-logo{width:18px;height:18px;flex:none;object-fit:contain}.account-status .google-logo{width:14px;height:14px;margin-left:2px}.account .google-signin{display:flex;align-items:center;justify-content:center;gap:10px;min-height:44px;width:100%;box-shadow:inset 0 0 0 1px #ffffff12}.account-divider{display:flex;align-items:center;gap:12px;font-size:12px;color:#777}.account-divider:before,.account-divider:after{content:"";height:1px;flex:1;background:#ffffff0d}@media(prefers-reduced-motion:reduce){.account-avatar-button{transition:none!important}}.account-session{padding-top:20px;box-shadow:0 -1px #ffffff0b}.account-session .secondary{width:100%;min-height:40px}.account-setting{display:grid;gap:8px}.account-setting-label{font-size:11px;line-height:16px;color:#a5a5a5;text-transform:uppercase;letter-spacing:.05em}.account .selection-menu>summary.selection-trigger{width:100%;min-height:44px;padding:10px 14px 10px 12px;justify-content:space-between;border-radius:12px;background:#ffffff0a;color:inherit;font:inherit;box-shadow:inset 0 0 0 1px #ffffff14}.selection-trigger:focus-visible{outline:2px solid var(--accent, #bda6ef);outline-offset:2px}.account .selection-menu{min-width:0}.account .selection-label{min-width:0;overflow:hidden;text-overflow:ellipsis}@media(max-width:760px){.account-layer{width:100%}}:host{--duration-stagger: 40ms;--duration-fast: .25s;--duration-quick: .15s;--ease-smooth-out: cubic-bezier(.22, 1, .36, 1);--dropdown-open-dur: var(--duration-fast);--dropdown-close-dur: var(--duration-quick);--dropdown-pre-scale: .97;--dropdown-closing-scale: .99;--dropdown-ease: var(--ease-smooth-out)}.t-dropdown{transform-origin:top left;transform:scale(var(--dropdown-pre-scale));opacity:0;pointer-events:none;transition:transform var(--dropdown-open-dur) var(--dropdown-ease),opacity var(--dropdown-open-dur) var(--dropdown-ease);will-change:transform,opacity}.t-dropdown[data-origin=top-right]{transform-origin:top right}.t-dropdown[data-origin=top-center]{transform-origin:top center}.t-dropdown[data-origin=bottom-left]{transform-origin:bottom left}.t-dropdown[data-origin=bottom-center]{transform-origin:bottom center}.t-dropdown[data-origin=bottom-right]{transform-origin:bottom right}.t-dropdown.is-open{transform:scale(1);opacity:1;pointer-events:auto}.t-dropdown.is-closing{transform:scale(var(--dropdown-closing-scale));opacity:0;pointer-events:none;transition:transform var(--dropdown-close-dur) var(--dropdown-ease),opacity var(--dropdown-close-dur) var(--dropdown-ease)}@media(prefers-reduced-motion:reduce){.t-dropdown{transition:none!important}}.message-content{display:flex;align-items:flex-start;gap:8px;padding-left:32px}.message-content .message-text{flex:1;min-width:0;padding:0;margin:3px 0 0}.message-reaction{position:relative;flex:none;width:26px;height:26px}.message>.row>.comment-menu{margin-left:auto}.message>.row>.comment-menu>summary{width:24px;height:24px}.message .actions{margin-top:8px}.emoji-menu{position:fixed;z-index:20;display:flex;gap:2px;padding:5px;background:#292929;border-radius:12px;box-shadow:0 0 0 1px #ffffff12,0 8px 24px #0005}.emoji-choice{display:grid;place-items:center;padding:0;border-radius:7px;opacity:0;transform:translate(-6px) scale(.97);transition:transform var(--duration-fast) var(--ease-smooth-out),opacity var(--duration-fast) var(--ease-smooth-out)}.emoji-menu.is-open .emoji-choice{opacity:1;transform:translate(0) scale(1);transition-delay:calc(var(--emoji-index) * var(--duration-stagger))}.emoji-menu.is-closing .emoji-choice{opacity:0;transform:scale(.99);transition-duration:var(--duration-quick);transition-delay:0ms}.emoji-choice:hover{background:#ffffff12}.reply-composer{position:relative;display:block}.reply-composer textarea{width:100%;padding-right:44px}.reply-composer>.send{position:absolute;right:22px;top:17px;width:26px;height:26px}.new-comment-composer>.row>.send{margin-left:auto}@media(prefers-reduced-motion:reduce){.emoji-choice{transition:none!important}}.comment-menu-items[popover]{position:fixed;inset:auto;margin:0;border:0}.selection-menu>summary.selection-trigger{display:flex;align-items:center;gap:8px;padding:8px 12px 8px 0;color:#eee;font-size:15px;font-weight:500;list-style:none;cursor:pointer}.selection-trigger svg{width:14px;height:14px;flex:none;color:#888;transition:transform .15s ease-out}.selection-menu[open]>.selection-trigger svg{transform:rotate(180deg)}.selection-menu [aria-checked=false] svg{opacity:0}.selection-menu [aria-checked=true]{background:#ffffff0b}.selection-menu .menu-action:last-child{margin-top:0}.selection-menu .menu-action:last-child:before{display:none}.selection-menu .comment-menu-items:popover-open{animation:selection-enter .25s cubic-bezier(.22,1,.36,1);transform-origin:top right}@keyframes selection-enter{0%{opacity:0;transform:translateY(-4px) scale(.97)}to{opacity:1;transform:none}}.panel-head{gap:0}.sidebar-search{display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s cubic-bezier(.22,1,.36,1),opacity .15s ease-out}.panel[data-search=true] .sidebar-search{grid-template-rows:1fr;opacity:1}.sidebar-search-inner{min-height:0;overflow:hidden}.sidebar-search-row{display:flex;align-items:center;gap:8px;padding-top:12px}.sidebar-search-field{display:flex;min-width:0;align-items:center;gap:8px;background:#ffffff0d;border-radius:10px;padding:0 10px}.sidebar-search-field svg{flex:none;width:16px;height:16px;color:#888}:host(.review-open) .panel .sidebar-search-field input{min-width:0;width:100%;padding:9px 0;background:transparent;box-shadow:none;color:#eee;font-size:14px}.sidebar-search-field input::placeholder{color:#888}.search-cancel{color:#ccc;font-size:13px;padding:8px 0;transform:translate(8px);opacity:0;transition:transform .25s cubic-bezier(.22,1,.36,1),opacity .15s ease-out}.panel[data-search=true] .search-cancel{transform:none;opacity:1}.scope-slot .selection-trigger{font-size:12px;color:#999;padding:10px 12px 0 0}@media(prefers-reduced-motion:reduce){.sidebar-search,.search-cancel,.selection-trigger svg{transition:none}.selection-menu .comment-menu-items:popover-open{animation:none}}.dialog:has(.draft-close) .new-comment-composer{display:grid;gap:8px;padding:16px;box-shadow:none}.new-comment-composer .draft-body{display:grid;grid-template-columns:24px minmax(0,1fr) 28px;grid-template-rows:minmax(28px,auto) 28px;align-items:start;column-gap:12px;row-gap:8px}.new-comment-composer .draft-body:not(:has(.avatar)){grid-template-columns:minmax(0,1fr) 28px}.new-comment-composer .draft-body .avatar{grid-row:1;grid-column:1}.new-comment-composer .draft-body textarea{grid-row:1;grid-column:2}.new-comment-composer .draft-body:not(:has(.avatar)) textarea{grid-column:1}.new-comment-composer .draft-body .send{grid-row:2;grid-column:-2}.dialog .new-comment-composer .draft-body .avatar{position:relative;inset:auto;flex:none;width:24px;height:24px;margin:0}.dialog .new-comment-composer textarea,.dialog .new-comment-composer textarea:focus{flex:1;min-width:0;min-height:28px;padding:3px 0;background:transparent;border:0;border-radius:0;box-shadow:none;outline:none;line-height:22px}.dialog .new-comment-composer>.row{display:flex;justify-content:flex-end}.dialog .new-comment-composer .send{position:static;width:28px;height:28px;margin-left:auto}.pin-preview{width:320px;border-radius:18px}.pin-preview-open{padding:20px 16px 16px}.pin-preview .row{gap:8px;font-size:12px}.pin-preview .avatar{width:24px;height:24px;font-size:9px}.pin-preview .hover-message{margin:3px 0 0;padding-left:32px;line-height:1.6}.message-content{margin-right:-6px}.message-reaction.has-reactions{display:flex;align-items:center;justify-content:center;gap:3px;width:auto;min-width:26px;max-width:100px;padding:3px;background:transparent}.reaction-leaving{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:3px;pointer-events:none}.reaction-value{font-size:14px;line-height:20px;white-space:nowrap}.emoji-choice{width:28px;height:28px;font-size:17px;color:#ccc}.emoji-choice svg{width:18px;height:18px;stroke:currentColor}.emoji-choice:hover,.emoji-choice:focus-visible{color:#eee}.emoji-menu[data-placement=below] .emoji-choice{transform:translateY(-4px) scale(.97)}.emoji-menu[data-placement=below].is-open .emoji-choice{transform:none;transition-delay:0ms}.emoji-menu[data-placement=below].is-closing .emoji-choice{transform:scale(.99);transition-delay:0ms}.dialog .new-comment-composer .draft-body .send{flex:none;margin:0}.comment-drag-handle{position:absolute;inset:0 90px auto 0;height:34px;z-index:2;cursor:grab;touch-action:none}.toolbar{cursor:grab;touch-action:none}[data-dragging=true],[data-dragging=true] .comment-drag-handle{cursor:grabbing;user-select:none}[data-snap-x=left]:not(.toolbar){box-shadow:-3px 0 #ffffff70}[data-snap-x=right]:not(.toolbar){box-shadow:3px 0 #ffffff70}[data-snap-y=top]:not(.toolbar){box-shadow:0 -3px #ffffff70}[data-snap-y=bottom]:not(.toolbar){box-shadow:0 3px #ffffff70}.toolbar:before,.toolbar:after{content:"";position:absolute;pointer-events:none;background:#ffffff70;border-radius:999px;opacity:0}.toolbar:before{width:2px;height:28px;top:50%;translate:0 -50%}.toolbar:after{width:28px;height:2px;left:50%;translate:-50% 0}.toolbar[data-snap-x=left]:before{left:-10px;opacity:1}.toolbar[data-snap-x=right]:before{right:-10px;opacity:1}.toolbar[data-snap-y=top]:after{top:-10px;opacity:1}.toolbar[data-snap-y=bottom]:after{bottom:-10px;opacity:1}.toolbar,.panel,.dialog-head,.comment-drag-handle{-webkit-user-select:none;user-select:none}.message-text,.hover-message,.thread-card p,input,textarea{-webkit-user-select:text;user-select:text}.toolbar .morphing-menu [aria-current],.toolbar .morphing-menu [aria-current]:hover{background:#ffffff0d;color:#cbb9ec;box-shadow:inset 0 0 0 1px #ffffff08}:host(.review-open) .panel{height:calc(100% - 36px);padding-bottom:0}:host(.review-open) .panel .list{min-height:0;margin-inline:-12px;padding:0 0 112px;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:transparent transparent;scrollbar-gutter:stable;scroll-padding-bottom:112px;-webkit-mask-image:linear-gradient(to bottom,#000 0,#000 calc(100% - 112px),transparent calc(100% - 24px));mask-image:linear-gradient(to bottom,#000 0,#000 calc(100% - 112px),transparent calc(100% - 24px))}:host(.review-open) .panel .list[data-scrolling=true]{scrollbar-color:#ffffff30 transparent}@supports selector(::-webkit-scrollbar){:host(.review-open) .panel .list,:host(.review-open) .panel .list[data-scrolling=true]{scrollbar-width:auto;scrollbar-color:auto}:host(.review-open) .panel .list::-webkit-scrollbar{width:4px}:host(.review-open) .panel .list::-webkit-scrollbar-track{background:transparent}:host(.review-open) .panel .list::-webkit-scrollbar-thumb{background:transparent;border-radius:999px}:host(.review-open) .panel .list[data-scrolling=true]::-webkit-scrollbar-thumb{background:#ffffff30}:host(.review-open) .panel .list[data-scrolling=true]::-webkit-scrollbar-thumb:hover{background:#ffffff50}:host(.review-open) .panel .list::-webkit-scrollbar-button{display:none}}@media(max-width:760px){:host(.review-open) .panel{height:100%}}.toolbar>.morphing-menu{transition:translate .28s cubic-bezier(.22,1,.36,1),scale .28s cubic-bezier(.22,1,.36,1),opacity .2s ease-in,filter .2s ease-in}.toolbar[data-away=true]{pointer-events:none}.toolbar[data-away=true]>.morphing-menu{translate:var(--drawer-away-x, 0px) var(--drawer-away-y, 24px);scale:.9;opacity:0;filter:blur(4px);pointer-events:none}@media(prefers-reduced-motion:reduce){.toolbar>.morphing-menu{transition:none}.toolbar[data-away=true]>.morphing-menu{translate:none;scale:1;filter:none}}.morphing-menu[data-vertical=true]{width:var(--mm-bar-height);height:var(--mm-bar-width)}.morphing-menu[data-vertical=true] .morphing-menu__bar{flex-direction:column;width:var(--mm-bar-height);height:var(--mm-bar-width);left:0;top:0;bottom:auto;translate:none}.morphing-menu[data-vertical=true] .morphing-menu__shortcut{width:var(--mm-button);height:0}.morphing-menu[data-edge=top] .morphing-menu__shell{top:0;bottom:auto}.morphing-menu[data-vertical=true] .morphing-menu__shell{left:0;top:0;bottom:auto;translate:none}.morphing-menu[data-edge=right] .morphing-menu__shell{left:auto;right:0}.morphing-menu[data-vertical=true][data-align-end=true] .morphing-menu__shell,.morphing-menu[data-vertical=true][data-align-end=true] .morphing-menu__bar{top:auto;bottom:0}.morphing-menu[data-edge=right] .morphing-menu__bar{left:auto;right:0}.morphing-menu__tooltip{bottom:auto;translate:-50% -100%;max-width:calc(100vw - 16px);overflow:hidden;text-overflow:ellipsis}.morphing-menu[data-edge=top] .morphing-menu__tooltip{translate:-50% 0}.morphing-menu[data-edge=left] .morphing-menu__tooltip{translate:0 -50%}.morphing-menu[data-edge=right] .morphing-menu__tooltip{translate:-100% -50%}.emoji-choice[aria-checked=true],.emoji-choice[aria-checked=true]:hover{background:#ffffff12;box-shadow:inset 0 0 0 1px #ffffff0a}:host(.review-open) .toolbar{cursor:default;touch-action:auto}.sidebar-search-field input::-webkit-search-cancel-button,.sidebar-search-field input::-webkit-search-decoration{-webkit-appearance:none;display:none}:host(.review-open) .toolbar .morphing-menu [data-menu-item=comments],:host(.review-open) .toolbar .morphing-menu [data-menu-item=comments]:hover{background:#ffffff0d;color:#cbb9ec;box-shadow:inset 0 0 0 1px #ffffff08}.toolbar[data-intro-wait=true]>.morphing-menu{transition:none}.toolbar[data-intro=true][data-away=true]>.morphing-menu{translate:0 var(--drawer-intro-y, 100vh);scale:1;filter:none}.toolbar[data-away=true][data-peek=true]>.morphing-menu{translate:0 var(--drawer-peek-y, 100vh);scale:1;opacity:1;filter:none}.toolbar .morphing-menu__row[aria-current] svg{color:inherit}.sidebar-selector{display:grid;min-width:0}.sidebar-selector>*{grid-area:1 / 1;transition:opacity .2s ease,transform .25s cubic-bezier(.22,1,.36,1)}.tag-filter-slot:empty{display:none}.panel .sidebar-title .tag-filter-trigger.active{color:var(--accent, #bda6ef)}.panel[data-search=true] .tag-filter-slot{opacity:0;pointer-events:none}.sidebar-selector .scope-slot{opacity:0;transform:translateY(6px);pointer-events:none}.panel[data-search=true] .sidebar-selector .filter-slot{opacity:0;transform:translateY(-6px);pointer-events:none}.panel[data-search=true] .sidebar-selector .scope-slot{opacity:1;transform:none;pointer-events:auto}.sidebar-selector .scope-slot .selection-trigger{font-size:15px;color:#f4f4f4;padding:8px 12px 8px 0;font-weight:600}.copy-page-prompt{display:grid;place-items:center;translate:0 0;transition:translate .28s cubic-bezier(.22,1,.36,1)}.copy-page-prompt>svg{grid-area:1 / 1;transform-origin:center}.panel[data-search=true] .copy-page-prompt{display:grid;place-items:center;translate:calc(100% + 4px) 0}.sidebar-search-trigger{transition:opacity .15s ease}.panel[data-search=true] .sidebar-search-trigger{opacity:0;pointer-events:none}.sidebar-search{opacity:1}.panel[data-search=true] .sidebar-search-inner{overflow:visible}.sidebar-search-field{flex:none;transform-origin:top left;box-sizing:border-box;overflow:hidden;width:100%}.sidebar-search-field .search-cancel{flex:none;padding:0;width:24px;height:24px}.sidebar-search-field input{transition:opacity .15s ease}.panel[data-search=false] .sidebar-search-field input{opacity:0}@media(prefers-reduced-motion:reduce){.sidebar-selector>*,.copy-page-prompt,.sidebar-search-trigger,.sidebar-search-field input{transition:none}}.toolbar .morphing-menu__panel>.morphing-menu__row:first-child,.toolbar .morphing-menu__panel>.morphing-menu__row:last-child{transition:background .15s ease,scale .18s var(--ease-smooth-out),border-radius .15s var(--ease-smooth-out)}.toolbar .morphing-menu__panel>.morphing-menu__row:first-child{border-top-left-radius:calc(var(--mm-radius) - var(--mm-panel-padding));border-top-right-radius:calc(var(--mm-radius) - var(--mm-panel-padding))}.toolbar .morphing-menu__panel>.morphing-menu__row:last-child{border-bottom-left-radius:calc(var(--mm-radius) - var(--mm-panel-padding));border-bottom-right-radius:calc(var(--mm-radius) - var(--mm-panel-padding))}.toolbar .morphing-menu__panel>.morphing-menu__row:first-child:active{border-top-left-radius:9px;border-top-right-radius:9px}.toolbar .morphing-menu__panel>.morphing-menu__row:last-child:active{border-bottom-left-radius:9px;border-bottom-right-radius:9px}@media(prefers-reduced-motion:reduce){.toolbar .morphing-menu__panel>.morphing-menu__row:first-child,.toolbar .morphing-menu__panel>.morphing-menu__row:last-child{transition:none}}.avatar,.pin{background:var(--reviewer-accent, #c8b5f4);color:var(--reviewer-ink, #352a50)}.avatar:has(img){outline:2px solid var(--reviewer-accent, #c8b5f4);outline-offset:1px}.account-accent{display:grid;gap:12px}.account-accent-label{color:#aaa;font-size:12px}.accent-swatches{display:flex;align-items:center;justify-content:space-between;gap:4px}.account-layer .account .accent-swatch{position:relative;flex:none;width:32px;height:32px;padding:4px;border-radius:50%;background:transparent;box-shadow:none}.accent-swatch:before{content:"";position:absolute;inset:4px;border-radius:inherit;background:var(--swatch)}.account .accent-swatch[aria-pressed=true]{box-shadow:inset 0 0 0 1.5px #eee}.account .accent-swatch:hover{background:#ffffff0d}.account .accent-swatch:focus-visible{outline:2px solid #eee;outline-offset:2px}.accent-custom:before{background:conic-gradient(#f46021,#f9b73b,#2e9d51,#38c5f6,#1f72ff,#9038fc,#f46021)}.accent-custom svg{position:relative;width:16px;height:16px;padding:2px;border-radius:50%;background:#252525;color:#eee}.emoji-keyboard{position:fixed;z-index:21;width:min(300px,calc(100vw - 16px));max-height:calc(100dvh - 16px);overflow:auto;border-radius:16px;background:#252525;box-shadow:0 0 0 1px #ffffff12,0 12px 32px #0006}.emoji-keyboard-close{position:absolute;top:12px;right:10px;z-index:2;width:26px;height:26px;color:#999}.emoji-keyboard-status{display:block;padding:20px;color:#aaa;font-size:12px}.emoji-keyboard emoji-picker{width:100%;height:min(300px,calc(100dvh - 32px));--background: #252525;--border-color: transparent;--button-hover-background: #ffffff10;--button-active-background: #ffffff18;--input-border-color: #ffffff12;--input-border-radius: 8px;--input-font-color: #eee;--indicator-color: #c8b5f4;--outline-color: #c8b5f4;--num-columns: 8;--emoji-size: 20px;--emoji-padding: 6px;--category-emoji-size: 16px;--category-emoji-padding: 6px}.pin .avatar:has(img){outline:none}.pin .avatar img{object-fit:cover;object-position:center;pointer-events:none;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-user-drag:none;-webkit-touch-callout:none}.menu-action.destructive{color:#ff9696}.menu-action.destructive svg{color:inherit}.menu-action.destructive:hover,.menu-action.destructive:focus-visible{background:#ff6b6b14;color:#ffb0b0}.accent-popover{position:fixed;inset:auto;margin:0;width:min(240px,calc(100vw - 16px));padding:0;border:0;border-radius:12px;background:#292929;color:#ddd;box-shadow:0 0 0 1px #ffffff12,0 8px 24px #0005;transform-origin:bottom right}.accent-popover-head{display:flex;justify-content:space-between;gap:12px;padding:8px 12px;font-size:11px;box-shadow:0 1px #ffffff0d}.accent-popover-head span:last-child{color:#999;font-variant-numeric:tabular-nums}.accent-picker-body{display:flex;flex-direction:column;gap:8px;padding:12px}.accent-picker-body .react-colorful{width:100%;height:148px}.accent-picker-body .react-colorful__saturation{border-radius:8px;border-bottom:none}.accent-picker-body .react-colorful__hue{height:14px;margin-top:10px;border-radius:8px}.accent-picker-body .react-colorful__pointer{width:14px;height:14px}.accent-picker-body .react-colorful__hue-pointer{width:10px;height:18px;border-radius:6px}.accent-picker-body input.accent-hex{width:100%;height:28px;min-height:28px;padding:5px 8px;border-radius:6px;background:#ffffff08;color:#eee;font-size:12px;box-shadow:inset 0 0 0 1px #ffffff0c}.pin{--pin-x: -9px;transform:translate(var(--pin-x),-28px) scale(1);transform-origin:bottom left;transition:transform .12s cubic-bezier(.22,1,.36,1)}.pin[data-pointer=right]{--pin-x: -25px;border-radius:50% 50% 5px;transform-origin:bottom right}.pins{transition:opacity .12s ease}.pins[data-scrolling=true]{opacity:0}.pins[data-scrolling=true] .pin{pointer-events:none}@media(prefers-reduced-motion:reduce){.pin,.pins{transition:none}}.pin-stack{position:fixed;display:flex;align-items:center;padding:3px;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;pointer-events:auto;z-index:2;isolation:isolate}.pin-stack::-webkit-scrollbar{display:none}.pin-stack .pin:not([data-dragging]){position:relative;flex:0 0 34px;transform:scale(1);margin-left:-12px}.pin-stack .pin:not([data-dragging]):first-child{margin-left:0}.pin-stack .pin:hover,.pin-stack .pin:focus-visible,.pin-stack .pin.active{z-index:4}.pins[data-scrolling=true] .pin-stack{pointer-events:none}.onboarding-panel{display:grid;gap:16px}.onboarding-panel>p:empty{display:none}.approved-sites{display:grid;gap:8px;font-size:12px;overflow-wrap:anywhere;color:#ddd}.approved-sites:empty{display:none}.account-usage,.approved-sites-editor,.approved-site-list{min-width:0;grid-template-columns:minmax(0,1fr)}.approved-sites-editor{display:grid;padding-top:4px;border-top:1px solid #ffffff0d}.approved-sites-toggle{min-width:0;min-height:36px;margin:0 -8px;padding:0 8px;display:flex;align-items:center;gap:8px;border-radius:8px;background:transparent;font-size:12px;color:#ddd;text-align:left;cursor:pointer}.approved-sites-toggle:hover{background:#ffffff08}.approved-sites-toggle:focus-visible{outline:2px solid #bda6ef;outline-offset:-2px}.approved-sites-toggle>span:first-child{flex:1}.approved-sites-count{color:#aaa;font-variant-numeric:tabular-nums}.approved-sites-toggle svg{width:14px;height:14px;color:#888;transition:transform .25s cubic-bezier(.22,1,.36,1)}.approved-sites-editor[data-open=true] .approved-sites-toggle svg{transform:rotate(180deg)}.approved-sites-reveal{display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s cubic-bezier(.22,1,.36,1)}.approved-sites-editor[data-open=true] .approved-sites-reveal{grid-template-rows:1fr}.approved-sites-body{min-height:0;min-width:0;overflow:hidden;display:grid;grid-template-columns:minmax(0,1fr);gap:10px}.approved-sites-editor[data-open=true] .approved-sites-body{padding-top:4px}.approved-site-list{display:grid;margin:0;padding:0;list-style:none}.approved-site{min-width:0;min-height:32px;display:flex;align-items:center;gap:8px;font-size:12px;color:#ddd}.approved-site>span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.approved-site>button{flex-shrink:0;opacity:0;transition:opacity .12s}.account-layer .account .approved-site>.icon{border-radius:7px}.approved-site:hover>button,.approved-site>button:focus-visible{opacity:1}@media(hover:none){.approved-site>button{opacity:1}}@media(prefers-reduced-motion:reduce){.approved-sites-reveal,.approved-sites-toggle svg{transition:none}}.approved-site-add{min-width:0;display:flex;gap:8px}.account .approved-site-add input{width:0;min-width:0;flex:1;font-size:13px;padding:8px 10px}.approved-site-add>button{flex-shrink:0;padding:0 12px}.approved-sites-body>.account-usage-status:empty{display:none}.account-usage{min-height:144px;box-sizing:border-box;align-content:start;display:grid;gap:14px;padding:16px;border-radius:14px;background:#ffffff05;box-shadow:inset 0 0 0 1px #ffffff09}.account-usage h3{line-height:18px;margin:0;font-size:12px;font-weight:500;color:#aaa}.usage-skeleton{display:block;height:10px;border-radius:4px;background:#ffffff0b}.usage-skeleton-heading{height:18px;display:flex;align-items:center}.usage-skeleton-title{width:70px}.usage-skeleton-label{width:88px;align-self:center}.usage-skeleton-count{width:56px;align-self:center}.usage-skeleton-ring{width:22px;height:22px;border-radius:50%;mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2.5px))}.account-sites[aria-busy=true] .account-sites-summary{justify-content:space-between;color:#888}.account-projects{display:grid;gap:12px;padding-bottom:4px}.account-projects .account-usage-label{height:20px;align-items:center}.account-project-count{display:flex;align-items:baseline;gap:6px}.account-project-count strong{font-size:16px;line-height:1;font-weight:500;color:#eee}.account-project-count>span{font-size:12px;color:#909090}.account-project-slots{display:flex;gap:6px}.account-project-slots>span{flex:1;height:4px;border-radius:2px;background:#ffffff0b;box-shadow:inset 0 0 0 1px #ffffff07}.account-project-slots>span[data-used=true]{background:#bda6ef;box-shadow:inset 0 1px #ffffff26}.account-usage-label{line-height:18px;display:flex;justify-content:space-between;gap:12px;font-size:12px;color:#ddd;font-variant-numeric:tabular-nums}.account-usage-label>:last-child{color:#aaa}.account-comments{align-items:center;min-height:24px}.account-comment-count{display:flex;align-items:center;gap:10px}.account-usage-ring{display:block;width:22px;height:22px;flex-shrink:0;border-radius:50%;background:conic-gradient(#bda6ef var(--usage),#ffffff12 0);mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2.5px))}.account-usage-ring[data-full=true]{background:conic-gradient(#f1b77d var(--usage),#ffffff12 0)}.account-sites{border-radius:14px;background:#ffffff05;box-shadow:inset 0 0 0 1px #ffffff09}.account-sites-summary{line-height:18px;width:100%;background:transparent;border-radius:inherit;text-align:left;display:flex;align-items:center;gap:10px;padding:16px;font-size:12px;color:#bbb;cursor:pointer;list-style:none}.account-sites-summary:hover{color:#eee}.account-sites-summary:focus-visible{outline:2px solid #bda6ef;outline-offset:-2px;border-radius:inherit}.account-sites-count{margin-left:auto;color:#888;font-variant-numeric:tabular-nums}.account-sites-summary svg{width:14px;height:14px;color:#888;transform:scaleY(1);transition:transform .25s cubic-bezier(.22,1,.36,1)}.account-sites-summary svg path{vector-effect:non-scaling-stroke}.account-sites[data-open=true] .account-sites-summary svg{transform:scaleY(-1)}.account-sites-reveal{display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s cubic-bezier(.22,1,.36,1)}.account-sites[data-open=true] .account-sites-reveal{grid-template-rows:1fr}.account-sites-clip{min-height:0;overflow:hidden;opacity:0;transition:opacity .25s cubic-bezier(.22,1,.36,1)}.account-sites[data-open=true] .account-sites-clip{opacity:1}.account-sites-note{display:flex;align-items:flex-start;gap:7px}.account-sites-note>svg{flex-shrink:0;width:13px;height:13px;margin-top:2px;color:#777}.account-sites-note>span{text-wrap:balance}@media(prefers-reduced-motion:reduce){.account-sites-reveal,.account-sites-clip,.account-sites-summary svg{transition:none}}.account-sites-content{display:grid;gap:14px;padding:0 16px 16px}.account-usage-status,.account-usage-note{font-size:11px;line-height:1.5;color:#909090}@media(max-width:760px),(max-width:1000px)and (max-height:500px){:host(.review-open) .toolbar{bottom:calc(16px + env(safe-area-inset-bottom,0px))}:host(.review-open) .account-layer{position:absolute;top:var(--review-sheet-top,42%);bottom:0;width:100%;padding:calc(24px + env(safe-area-inset-top,0px)) 12px calc(24px + env(safe-area-inset-bottom,0px));border-radius:24px 24px 0 0;overflow:hidden}.account-layer .account-dialog{max-height:100%;min-height:0;overscroll-behavior:contain}.account-layer .account{padding:28px 20px 20px}.panel-head .icon{min-width:40px;min-height:40px}.dialog:not(.account-dialog){width:calc(100vw - 32px);max-height:calc(var(--review-viewport-height,100dvh) - 100px)}:host :is(input,textarea,select){font-size:16px!important}:host(.review-open) .panel .sidebar-search-field input{font-size:16px}}@media(prefers-reduced-motion:reduce){:host(.review-open) .panel{animation:none;transition:none}}:host([data-sidebar="edge"]) .edge-sidebar{position:fixed;display:flex;flex-direction:column;width:var(--edge-sidebar-width, 380px);max-width:calc(100dvw - 32px);height:min(calc(100dvh - 32px),600px);max-height:min(calc(100dvh - 32px),680px);background:#0d0d0d;color:#e9e6e1;border-radius:16px;box-shadow:inset 0 0 0 1px #ffffff12,0 24px 70px #0006;overflow:hidden;pointer-events:auto;z-index:4;transition:transform .32s cubic-bezier(.22,1,.36,1),opacity .2s ease;transform-origin:right center}:host([data-sidebar="edge"]) .edge-sidebar[data-collapsed=true]{transform:translate(var(--edge-park-x, 404px));opacity:0;pointer-events:none}:host([data-sidebar="edge"]) .edge-sidebar[data-collapsed=true][data-peek=true]{transform:translate(var(--edge-peek-x, -304px)) scale(.96);opacity:1;pointer-events:auto}:host([data-sidebar="edge"]) .edge-sidebar[data-dragging=true]{overflow:visible}:host([data-sidebar="edge"]) .edge-sidebar .edge-sidebar-grip{position:absolute;top:0;left:0;right:0;z-index:7;flex:none;height:30px;display:grid;place-items:center;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none}:host([data-sidebar="edge"]) .edge-sidebar .edge-sidebar-grip:before{content:"";width:36px;height:4px;border-radius:999px;background:#fff2}:host([data-sidebar="edge"]) .edge-sidebar .edge-sidebar-grip:hover:before,:host([data-sidebar="edge"]) .edge-sidebar[data-dragging=true] .edge-sidebar-grip:before{background:#ffffff3a}:host([data-sidebar="edge"]) .edge-sidebar[data-dragging=true] .edge-sidebar-grip{cursor:grabbing}.edge-sidebar-resize{position:absolute;z-index:8;touch-action:none}.edge-sidebar-resize-n,.edge-sidebar-resize-s{right:12px;left:12px;height:5px;cursor:ns-resize}.edge-sidebar-resize-e,.edge-sidebar-resize-w{top:12px;bottom:12px;width:5px;cursor:ew-resize}.edge-sidebar-resize-n{top:0}.edge-sidebar-resize-s{bottom:0}.edge-sidebar-resize-e{right:0}.edge-sidebar-resize-w{left:0}.edge-sidebar-resize-ne,.edge-sidebar-resize-nw,.edge-sidebar-resize-se,.edge-sidebar-resize-sw{width:12px;height:12px}.edge-sidebar-resize-ne{top:0;right:0;cursor:nesw-resize}.edge-sidebar-resize-nw{top:0;left:0;cursor:nwse-resize}.edge-sidebar-resize-se{right:0;bottom:0;cursor:nwse-resize}.edge-sidebar-resize-sw{bottom:0;left:0;cursor:nesw-resize}.edge-sidebar-resize-n:after,.edge-sidebar-resize-s:after,.edge-sidebar-resize-e:after,.edge-sidebar-resize-w:after{content:"";position:absolute;border-radius:999px;background:#fff9;opacity:0;transform:scale(.4);transition:opacity .14s cubic-bezier(.22,1,.36,1),transform .22s cubic-bezier(.35,1.55,.65,1)}.edge-sidebar-resize-e:after,.edge-sidebar-resize-w:after{top:50%;width:3px;height:28px;margin-top:-14px}.edge-sidebar-resize-n:after,.edge-sidebar-resize-s:after{left:50%;width:28px;height:3px;margin-left:-14px}.edge-sidebar-resize-w:after{left:7px}.edge-sidebar-resize-e:after{right:7px}.edge-sidebar-resize-n:after{top:7px}.edge-sidebar-resize-s:after{bottom:7px}.edge-sidebar-resize-n:hover:after,.edge-sidebar-resize-s:hover:after,.edge-sidebar-resize-e:hover:after,.edge-sidebar-resize-w:hover:after{opacity:1;transform:scale(1)}.edge-sidebar-snap{pointer-events:none;position:absolute;z-index:9;border-radius:999px;background:#0d0d0d;box-shadow:inset 0 0 0 1px #ffffff12;opacity:0;transition:opacity .14s cubic-bezier(.22,1,.36,1),transform .22s cubic-bezier(.35,1.55,.65,1)}.edge-sidebar-snap-left,.edge-sidebar-snap-right{top:50%;width:4px;height:28px;transform:translateY(-50%) scale(.4)}.edge-sidebar-snap-top,.edge-sidebar-snap-bottom{left:50%;width:28px;height:4px;transform:translate(-50%) scale(.4)}.edge-sidebar-snap-left{left:-8px}.edge-sidebar-snap-right{right:-8px}.edge-sidebar-snap-top{top:-8px}.edge-sidebar-snap-bottom{bottom:-8px}:host([data-sidebar="edge"]) .edge-sidebar[data-snap-x=left] .edge-sidebar-snap-left,:host([data-sidebar="edge"]) .edge-sidebar[data-snap-x=right] .edge-sidebar-snap-right{opacity:1;transform:translateY(-50%) scale(1)}:host([data-sidebar="edge"]) .edge-sidebar[data-snap-y=top] .edge-sidebar-snap-top,:host([data-sidebar="edge"]) .edge-sidebar[data-snap-y=bottom] .edge-sidebar-snap-bottom{opacity:1;transform:translate(-50%) scale(1)}:host([data-sidebar="edge"]) .edge-sidebar .panel{position:static;z-index:auto;width:100%;height:100%;min-height:0;flex:1;display:flex;flex-direction:column;padding-top:30px;background:transparent;color:inherit;box-shadow:none;border-radius:0}:host([data-sidebar="edge"]) .edge-sidebar .panel .list{flex:1;min-height:0;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:transparent transparent;scrollbar-gutter:stable;box-sizing:border-box;margin-inline:-12px;padding:0 0 24px;-webkit-mask-image:none;mask-image:none}:host([data-sidebar="edge"]) .edge-sidebar .panel .list[data-scrolling=true],:host([data-sidebar="edge"]) .edge-sidebar .panel .list:hover{scrollbar-color:#ffffff30 transparent}:host([data-sidebar="edge"]) .edge-sidebar-sensor{position:fixed;top:0;bottom:0;width:24px;z-index:3;cursor:pointer;pointer-events:auto}:host([data-sidebar="edge"]) .edge-sidebar-sensor[hidden]{display:none}:host([data-sidebar="edge"]) .toolbar:not([data-edge-tabs=true]){bottom:calc(24px + env(safe-area-inset-bottom,0px))}:host([data-sidebar="edge"]) .toolbar[data-edge-tabs=true]{position:relative;inset:auto;transform:none;flex:none;width:100%;display:flex;justify-content:center;padding:0 12px 12px;z-index:6;pointer-events:none;background:transparent}:host([data-sidebar="edge"]) .toolbar[data-edge-tabs=true] .morphing-menu{pointer-events:auto}:host([data-sidebar="edge"]) .toolbar[data-edge-orient=horizontal] .morphing-menu,:host([data-sidebar="edge"]) .toolbar[data-edge-orient=horizontal] .morphing-menu[data-vertical=true]{width:var(--mm-bar-width);height:var(--mm-bar-height)}:host([data-sidebar="edge"]) .toolbar[data-edge-orient=horizontal] .morphing-menu__bar,:host([data-sidebar="edge"]) .toolbar[data-edge-orient=horizontal] .morphing-menu__shell{flex-direction:row;inset:auto auto 0 50%;translate:-50% 0;width:var(--mm-bar-width);height:var(--mm-bar-height)}:host([data-sidebar="edge"]) .toolbar[data-edge-orient=horizontal] .morphing-menu__shortcut{width:0;height:var(--mm-button);flex:1}:host([data-sidebar="edge"]) .edge-sidebar[data-morphing=true] .panel{padding-top:0;flex-basis:0;overflow:hidden}:host([data-sidebar="edge"]) .edge-sidebar[data-morphing=true] .toolbar[data-edge-tabs=true]{padding-bottom:0}:host([data-sidebar="edge"]) .edge-sidebar:has(>.account-layer){overflow:visible}:host([data-sidebar="edge"]) .edge-sidebar>.account-layer{position:absolute;inset:12px 10px auto;width:auto;height:auto;padding:0;background:none;place-items:start stretch;pointer-events:none;z-index:10}:host([data-sidebar="edge"]) .edge-sidebar>.account-layer .account-dialog{max-height:min(calc(100dvh - 32px),var(--edge-account-max-height, calc(100dvh - 120px) ));width:100%;pointer-events:auto}:host([data-sidebar="edge"]) .toolbar[data-hidden=true]>.morphing-menu{transition:none}.toolbar[data-hidden=true]{pointer-events:none}.toolbar[data-hidden=true]>.morphing-menu{translate:0 8px;scale:.92;opacity:0;filter:blur(6px)}@media(prefers-reduced-motion:reduce){:host([data-sidebar="edge"]) .edge-sidebar{transition:none}.toolbar[data-hidden=true]>.morphing-menu{translate:none;scale:1;filter:none}}.sidebar-tooltip{position:fixed;z-index:30;translate:-50% 0}.sidebar-tip{position:absolute;z-index:5;translate:none;display:flex;align-items:center;gap:2px;width:max-content;max-width:236px;padding:8px 4px 8px 12px;white-space:normal;overflow:visible;pointer-events:auto}.sidebar-tip[hidden]{display:none}.sidebar-tip p{margin:0;font-size:13px;line-height:18px}.sidebar-tip .icon{flex:none;width:24px;height:24px;border-radius:8px;color:inherit;opacity:.45}.sidebar-tip .icon:hover{opacity:1;background:light-dark(#0000000d,#ffffff14)}.sidebar-tip .icon svg{width:14px;height:14px}.sidebar-tip:before{content:"";position:absolute;left:var(--caret-x);bottom:100%;width:10px;height:10px;margin:0 0 -5px -5px;background:inherit;border-radius:2px 0;rotate:45deg}.sidebar-tip[data-tip=shortcut]:before{bottom:auto;top:100%;margin:-5px 0 0 -5px}.list[data-empty]{display:flex;flex-direction:column}.list[data-empty] .empty{flex:1;align-content:center}.sidebar-tooltip,.sidebar-tip{transition:var(--duration-quick) var(--ease-smooth-out);transition-property:opacity,transform,filter}.sidebar-tooltip:not([data-open]),.sidebar-tip[data-leaving]{opacity:0;transform:translateY(-4px);filter:blur(2px)}.sidebar-tip{transform-origin:var(--caret-x) top;animation:tip-in var(--duration-fast) var(--ease-smooth-out) backwards}.sidebar-tip[data-tip=shortcut]{transform-origin:var(--caret-x) bottom}@keyframes tip-in{0%{opacity:0;transform:scale(.98)}}.edge-sidebar:not([data-tips-ready]) .sidebar-tip{opacity:0;animation:none;pointer-events:none}[data-tips-restored] .sidebar-tip{animation:none;transition:none}@media(hover:none){.sidebar-tip[data-tip=shortcut]{display:none}}@media(prefers-reduced-motion:reduce){.sidebar-tooltip,.sidebar-tip{transition:none;animation:none}}:host([data-sidebar="mobile"]) .sidebar-tip{display:none!important}:host([data-sidebar="mobile"]) .panel{position:fixed;inset:auto 12px calc(var(--mobile-panel-bottom,0px) + 6px);width:auto;height:var(--mobile-panel-height,90vh);min-height:0;padding:20px 20px 10px;display:flex;flex-direction:column;background:#0d0d0d;color:#e9e6e1;border-radius:24px;box-shadow:0 -1px #ffffff24;overflow:hidden;pointer-events:none;visibility:hidden;opacity:0;transform-origin:bottom center;translate:var(--mobile-pill-x,0px) var(--mobile-pill-y,-24px);scale:var(--mobile-pill-scale-x,.6) var(--mobile-pill-scale-y,.08);will-change:translate,scale,opacity;transition:translate .32s cubic-bezier(.22,1,.36,1),scale .32s cubic-bezier(.22,1,.36,1),opacity .15s ease,visibility 0s linear .32s;z-index:8}:host([data-sidebar="mobile"].review-open:not([data-mobile-entering])) .panel{pointer-events:auto;visibility:visible;opacity:1;translate:0 0;scale:1;transition:translate .32s cubic-bezier(.22,1,.36,1),scale .32s cubic-bezier(.22,1,.36,1),opacity .15s ease,visibility 0s}:host([data-sidebar="mobile"]) .panel:before{display:none}:host([data-sidebar="mobile"]) .panel .list{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;touch-action:pan-y;margin-inline:0;padding-bottom:calc(88px + env(safe-area-inset-bottom,0px));-webkit-mask-image:none;mask-image:none;scrollbar-gutter:auto}:host([data-sidebar="mobile"]) .toolbar{position:absolute;z-index:10}:host([data-sidebar="mobile"].review-open) .toolbar .morphing-menu{--mm-surface:#282828}:host([data-sidebar="mobile"].review-open) .toolbar .morphing-menu__shell{backdrop-filter:none}:host([data-sidebar="mobile"]) .account-layer{position:fixed;inset:auto 20px calc(var(--mobile-panel-bottom,0px) + 14px);width:auto;height:calc(var(--mobile-panel-height,90vh) - 16px);padding:0;background:none;border-radius:0;overflow:visible;pointer-events:none;z-index:11}:host([data-sidebar="mobile"]) .account-layer .account-dialog{max-width:100%;max-height:100%;pointer-events:auto}@media(prefers-reduced-motion:reduce){:host([data-sidebar="mobile"]) .panel{transition:none}}\n';let Gt=b("div","catch");Gt.hidden=!0;let Qt=b("div","pins"),Zt=b("div"),en=b("div","toolbar"),tn=b("div"),nn=b("div");tn.tabIndex=-1,ce&&tn.classList.add("edge-sidebar");let on=b("div","edge-sidebar-sensor");on.hidden=!0,Object.assign(Qt.style,{position:"fixed",inset:"0"});let an=b("div","pin-preview");an.hidden=!0;let rn=0,sn=!1,dn=!1,ln=null,cn=null,pn=null,un=(e=!1)=>{if(window.clearTimeout(rn),an.hidden||dn&&!e)return;if(dn=!0,cn?.cancel(),e||matchMedia("(prefers-reduced-motion: reduce)").matches)return an.hidden=!0,void(ln=null);let t=an.animate([{opacity:1,transform:"scale(1)"},{opacity:0,transform:"translateY(3px) scale(.99)"}],{duration:150,easing:"cubic-bezier(.22,1,.36,1)",fill:"forwards"});cn=t,t.finished.then(()=>{cn===t&&(an.hidden=!0,ln=null)}).catch(()=>{})};an.addEventListener("pointerenter",()=>{sn||bt||$t||(dn=!1,window.clearTimeout(rn),cn?.cancel())}),an.addEventListener("pointerleave",()=>un());let hn=b("div","component-hover");hn.setAttribute("aria-hidden","true");let mn=null,fn=null,gn=0,bn=b("div","sr-only");bn.setAttribute("aria-live","polite");let xn=function(e,t){let n,o,i,a,r=!1,s=!1,d=new AbortController;e.addEventListener("pointerdown",()=>{s=!0},{capture:!0,signal:d.signal});let l=()=>{s=!1,setTimeout(()=>{a?.(),a=void 0},0)};document.addEventListener("pointerup",l,{capture:!0,signal:d.signal}),document.addEventListener("pointercancel",l,{capture:!0,signal:d.signal});let c=()=>o||r?Promise.resolve():i||(i=import("./toolbar-runtime-MYOLQPTJ.js").then(async t=>{if(s&&await new Promise(e=>{a=e}),r)return;let i=e.getRootNode().activeElement?.dataset.menuItem;o=t.mountToolbar(e,n),i&&e.querySelector(`[data-menu-item="${i}"]`)?.focus({preventScroll:!0})}).catch(()=>{i=void 0}),i);return e.addEventListener("pointerenter",()=>{c()},{once:!0}),e.addEventListener("focusin",()=>{c()},{once:!0}),{render(i){if(n=i,r)return;if(o)return void o.render(n);let a=b("nav","morphing-menu");a.setAttribute("aria-label",n.label??"Website review"),a.dataset.view="collapsed",a.dataset.edge=n.edge??"bottom",a.dataset.vertical=String("left"===n.edge||"right"===n.edge),a.dataset.alignEnd=String(!!n.alignEnd);let s=n.items.filter(e=>!1!==e.showInBar);a.style.setProperty("--mm-count",String(s.length+1));let d=b("div","morphing-menu__shell"),l=b("div","morphing-menu__bar");for(let e of s){let o=w(e.label,()=>{e.onSelect?.(),c()},"morphing-menu__shortcut");o.title=e.label,o.dataset.menuItem=e.id,e.id===n.activeId&&o.setAttribute("aria-current","page"),o.replaceChildren(t("glyph"in e.icon?e.icon.glyph:e.id)),l.append(o)}let p=w(n.moreLabel??"More review tools",()=>{c().then(()=>{o?e.querySelector('[data-menu-item="more"]')?.click():(p.title="Could not load menu. Tap to retry.",p.setAttribute("aria-label",p.title))})},"morphing-menu__shortcut");p.dataset.menuItem="more",p.setAttribute("aria-expanded","false"),p.replaceChildren(x("drawer")),l.insertBefore(p,l.querySelector('[data-menu-item="dismiss"]')),d.append(l),a.append(d),e.replaceChildren(a)},unmount(){r=!0,d.abort(),a?.(),o?.unmount(),e.replaceChildren()}}}(en,e=>{if("account"===e){if(!ke.user)return x("person");let e=v(ke.user);return e.classList.add("review-avatar"),e}return x(e)});Jt.append(Vt,Gt,hn,Qt,tn,on,Zt,an,nn,en,bn),document.body.append(Kt);let wn,yn={width:te.style.width,boxSizing:te.style.boxSizing,zoom:te.style.zoom,transformOrigin:te.style.transformOrigin,transform:te.style.transform,position:te.style.position,left:te.style.left,top:te.style.top,height:te.style.height,minHeight:te.style.minHeight,paddingBottom:te.style.paddingBottom,overflow:te.style.overflow,borderRadius:te.style.borderRadius,background:te.style.background},vn={overflow:document.body.style.overflow,background:document.body.style.background},kn=document.documentElement.style.overflow,Cn=new Map,Sn=document.documentElement.style.background,En=[getComputedStyle(document.body).backgroundColor,getComputedStyle(document.documentElement).backgroundColor].find(e=>"rgba(0, 0, 0, 0)"!==e)??"#fff",$n=!1,zn=0,jn=!1,Mn=!1,Ln=`branch-comments:open:${E.project}:${E.repo}`,An=`branch-comments:toolbar-dismissed:${E.project}:${E.repo}`;try{"1"===sessionStorage.getItem(An)&&(Me=!0,je=!0)}catch{}let _n,Tn,Rn,Wn=!1,qn=[],On=0,Hn=!1,Pn=null,Bn=!1;function Yn(e){!en.offsetWidth||!en.offsetHeight||(dt=L(e,en.offsetWidth,en.offsetHeight,document.documentElement.clientWidth,window.innerHeight),en.style.left=`${dt.x+en.offsetWidth/2}px`,"bottom"!==dt.edgeY||de?(en.style.top=`${dt.y}px`,en.style.bottom="auto"):(en.style.top="auto",en.style.bottom="calc(16px + env(safe-area-inset-bottom,0px))"))}function In(){tn.style.width=`${_t}px`,tn.style.height=null==Tt?"":`${Tt}px`,ui()}function Nn(){jt=Mt;try{localStorage.setItem(Lt,JSON.stringify({...jt,width:_t,height:Tt}))}catch{}}function Dn(){if(de||!ce)return;In();let e=tn.offsetHeight||Math.min(window.innerHeight-32,680),t=function(e,t,n,o,i){let a=L(e??{x:Math.max(T,o-t-T),y:T},t,n,o,i),r="left"===a.edgeX?"left":"right";return{x:a.x,y:a.y,width:t,height:n,side:r}}(Mt,_t,e,document.documentElement.clientWidth,window.innerHeight),n=function(e,t){let n="right"===e.side?t+24:-(e.width+24),o="right"===e.side?t-76:76-e.width;return{parked:n-e.x,peek:o-e.x}}(t,document.documentElement.clientWidth);tn.style.left=`${t.x}px`,tn.style.top=`${t.y}px`,tn.style.setProperty("--edge-account-max-height",`${Math.max(0,window.innerHeight-t.y-28)}px`),tn.style.right="auto",tn.style.bottom="auto",tn.style.transformOrigin="left"===t.side?"left center":"right center",tn.style.setProperty("--edge-park-x",`${n.parked}px`),tn.style.setProperty("--edge-peek-x",`${n.peek}px`),on.style.left="left"===t.side?"0px":"",on.style.right="right"===t.side?"0px":"",Ee?(delete tn.dataset.collapsed,delete tn.dataset.peek,on.hidden=!0):(tn.dataset.collapsed="true",At?tn.dataset.peek="true":delete tn.dataset.peek,on.hidden=!1)}function Xn(){Kt.dataset.sidebar=de?"mobile":ce?"edge":"background",tn.classList.toggle("edge-sidebar",ce),tn.style.transition="none",tn.style.translate="",tn.style.opacity="",Do(!0),ce?Zn.isConnected||tn.prepend(Zn):(Zn.remove(),delete tn.dataset.collapsed,delete tn.dataset.peek,on.hidden=!0),tn.offsetWidth,tn.style.transition=""}let Un=[],Fn=!1;function Kn(){for(let e of Un)e.cancel();Un=[],Bn=!1,Qt.style.opacity=""}function Jn(e){if(de||e===re||Se||!ie&&"background"===e)return;let t=()=>[te,tn.querySelector(".panel"),en,Zt.querySelector(".account-dialog")],n=t().map(e=>e?.getBoundingClientRect());Kn(),wn?.stop(),wn=void 0,_n?.stop(),_n=void 0,Do(!0),Yo(),qo(),en.style.translate="",Tn=void 0,Fn=!0,re=e,ce="edge"===e,E={...E,sidebar:e};try{localStorage.setItem(ae,e)}catch{}if(Xn(),To(),Pi(),Fn=!1,matchMedia("(prefers-reduced-motion: reduce)").matches)return;t().forEach((e,t)=>{let o=n[t];if(!e?.isConnected||!o?.width)return;e!==te&&e.getAnimations().forEach(e=>e.cancel());let i=e.getBoundingClientRect();if(!i.width)return;let a=i.width/e.offsetWidth,r=getComputedStyle(e).transform;Un.push(e.animate([{transform:`${"none"===r?"":r} translate(${(o.left-i.left)/a}px, ${(o.top-i.top)/a}px) scale(${o.width/i.width})`,transformOrigin:"top left"},{transform:r,transformOrigin:"top left"}],{duration:250,easing:"cubic-bezier(0.22, 1, 0.36, 1)"}))});let o=Un;Bn=!0,Qt.style.opacity="0",Promise.all(o.map(e=>e.finished)).then(()=>{Se||o!==Un||(Un=[],Bn=!1,Qt.style.opacity="",Ni())}).catch(()=>{})}function Vn(e,n,o,i,a){let r=b("div","account-setting"),s=b("span","account-setting-label",n),d=t(n,o,i,e=>a(e));return d.querySelector("summary").dataset.focusKey=`setting-${e}`,r.append(s,d),r}function Gn(e){if(e!==ve&&!Se){if(Re||Ne.busy)return void mo("Wait for your changes to save.");ve=e;try{localStorage.setItem(ye,e)}catch{}E={...E,branch:"local"===e?"local":fe},ke.cancelReads(),ke=new o(E),We=ut=!1,ko=void 0,ct="",pt=null,Ge="Connecting",gt=xt=wt=yt=ht=!1,Pe=null,Be=null,vt=null,Qn(),Pi(),yo()}}function Qn(){Oe++,We=!1,ct="",Pe=null,ko=void 0;let e=ke.cached();qe=null!==e,Ne.reset(Co(e??[]))}let Zn=b("div","edge-sidebar-grip");Zn.setAttribute("aria-hidden","true"),_(tn,Zn,function(e){if("true"===tn.dataset.dragging)return Mt=e,tn.style.left=`${e.x}px`,void(tn.style.top=`${e.y}px`);tn.offsetWidth&&(Mt=L(e,tn.offsetWidth,tn.offsetHeight,document.documentElement.clientWidth,window.innerHeight),Dn())},Ce.signal,()=>{no.show()},()=>{Nn(),no.update()},()=>Ee&&ce&&!Hn),tn.prepend(Zn);let eo=["n","s","e","w","ne","nw","se","sw"];for(let e of eo){let t=b("div",`edge-sidebar-resize edge-sidebar-resize-${e}`);t.addEventListener("pointerdown",t=>{if(0!==t.button||!Ee||!ce||Hn)return;t.preventDefault(),t.stopPropagation();for(let e of tn.getAnimations())e.cancel();tn.style.transition="none";let n=tn.getBoundingClientRect(),o=t.clientX,i=t.clientY,a=a=>{if(a.pointerId!==t.pointerId)return;let r=O(e,n,a.clientX-o,a.clientY-i,document.documentElement.clientWidth,window.innerHeight);_t=r.width,(e.includes("n")||e.includes("s"))&&(Tt=r.height),Mt={x:r.left,y:r.top},tn.style.left=`${r.left}px`,tn.style.top=`${r.top}px`,In()},r=e=>{e.pointerId===t.pointerId&&(window.removeEventListener("pointermove",a,!0),window.removeEventListener("pointerup",r,!0),window.removeEventListener("pointercancel",r,!0),tn.style.transition="",Nn(),Dn())};window.addEventListener("pointermove",a,{capture:!0,passive:!1}),window.addEventListener("pointerup",r,!0),window.addEventListener("pointercancel",r,!0)},{signal:Ce.signal}),tn.append(t)}for(let e of["left","right","top","bottom"])tn.append(b("div",`edge-sidebar-snap edge-sidebar-snap-${e}`));let to=e=>{At=e,!Ee&&ce&&!Hn&&Dn()};on.addEventListener("pointerenter",()=>to(!0)),on.addEventListener("pointerleave",()=>to(!1)),on.addEventListener("pointerup",e=>{0===e.button&&!Ee&&Uo(!0)}),tn.addEventListener("pointerenter",()=>to(!0)),tn.addEventListener("pointerleave",()=>to(!1)),window.addEventListener("resize",()=>{Se||!ce||Hn||(function(){let e=document.documentElement.clientWidth,t=window.innerHeight;_t=Math.min(Math.max(_t,R),Math.max(R,e-32)),null!=Tt&&(Tt=Math.min(Math.max(Tt,W),Math.max(W,Math.min(t-32,680)))),In()}(),Dn())},{signal:Ce.signal,passive:!0}),Xn();let no=function(e,t,n,o=!0){if(!o)return{show(){},update(){}};let i,a=0,r=0,s=0,d=0,l=0,c=matchMedia("(hover: hover) and (pointer: fine)");c.matches&&(e.dataset.away="true",e.dataset.intro="true",e.dataset.introWait="true");let p=()=>{let t=e.getBoundingClientRect(),n=[t.left,window.innerWidth-t.right,t.top,window.innerHeight-t.bottom],o=n.indexOf(Math.min(...n));e.style.setProperty("--drawer-peek-y",window.innerHeight-t.top-t.height/2+"px"),e.style.setProperty("--drawer-intro-y",window.innerHeight-t.top+8+"px"),e.style.setProperty("--drawer-away-x",(0===o?-24:1===o?24:0)+"px"),e.style.setProperty("--drawer-away-y",(2===o?-24:3===o?24:0)+"px")},u=()=>{clearTimeout(s),clearTimeout(d),delete e.dataset.peek,delete e.dataset.intro,delete e.dataset.introWait,clearTimeout(l),clearTimeout(a),a=0,delete e.dataset.away},h=()=>{if(!c.matches||t())return void u();let n=e.getBoundingClientRect(),o=i&&i.x>=n.left-72&&i.x<=n.right+72&&i.y>=n.top-72&&i.y<=n.bottom+72,r=e.querySelector(".morphing-menu"),s=e.getRootNode()instanceof ShadowRoot&&e.contains(e.getRootNode().activeElement);!c.matches||t()||o||s||e.dataset.dragging||r&&"collapsed"!==r.getAttribute("data-view")?u():a||e.dataset.away||(a=window.setTimeout(()=>{a=0,p(),e.dataset.away="true"},450))},m=()=>{!c.matches||n.aborted||(s=window.setTimeout(()=>{if(!e.dataset.away||t())return;p();let n=e.querySelector(".morphing-menu");n&&getComputedStyle(n).translate,delete e.dataset.introWait,e.dataset.peek="true",d=window.setTimeout(()=>{delete e.dataset.peek,l=window.setTimeout(()=>{delete e.dataset.intro},300)},900)},700))};"complete"===document.readyState?m():window.addEventListener("load",m,{once:!0,signal:n}),document.addEventListener("pointermove",e=>{i={x:e.clientX,y:e.clientY},r||(r=requestAnimationFrame(()=>{r=0,h()}))},{passive:!0,signal:n}),e.addEventListener("focusin",u,{signal:n}),e.addEventListener("focusout",()=>queueMicrotask(h),{signal:n});let f=new MutationObserver(h);return f.observe(e,{subtree:!0,attributes:!0,attributeFilter:["data-view","data-dragging"]}),n.addEventListener("abort",()=>{clearTimeout(a),cancelAnimationFrame(r),clearTimeout(s),clearTimeout(d),clearTimeout(l),f.disconnect()},{once:!0}),{show:u,update:h}}(en,()=>Ee||$e||Te||!!Be||!!Pe,Ce.signal,E.autoHideDrawer);_(en,en,Yn,Ce.signal,()=>{no.show(),_n?.stop(),en.style.translate="0px 0px"},()=>{lt=dt;try{localStorage.setItem(zt,JSON.stringify(lt))}catch{}Qo(),no.update()},()=>!Ee,e=>!!e.closest(".morphing-menu__shortcut"));let oo=new ResizeObserver(()=>{"true"!==en.dataset.edgeTabs&&(dt?Yn(dt):E.drawerContainer&&Qo())});oo.observe(en),E.drawerContainer&&oo.observe(E.drawerContainer);let io=()=>document.documentElement.currentCSSZoom??1;function ao(){return function(e){return e.replace(/\/+$/,"")||"/"}(E.page?.()??location.pathname)}let ro=new WeakMap,so=null,lo=0,co=new WeakMap;function po(){cancelAnimationFrame(lo),!Se&&Jt.querySelector(".floating-notice")&&(fo(),lo=requestAnimationFrame(po))}function uo(e=Be??He.find(e=>e.id===Pe)?.anchor){let t=Zt.firstElementChild?.getBoundingClientRect();if(!t||Te)return;let n=e?Ti(e):null;return{cardKey:Ct,left:t.left,top:t.top,anchor:e,offsetX:t.left-(n?.x??0),offsetY:t.top-(n?.y??0),scrollX:window.scrollX,scrollY:window.scrollY}}function ho(e){e.dataset.closing||(e.dataset.closing="true",e.inert=!0,e.setAttribute("aria-hidden","true"),so===e&&(so=null,clearTimeout(Nt)),matchMedia("(prefers-reduced-motion: reduce)").matches?e.remove():e.animate([{opacity:getComputedStyle(e).opacity,translate:"0px 0px",scale:1},{opacity:0,translate:"true"===e.dataset.attached?`0px ${("above"===e.dataset.placement?1:-1)*(e.offsetHeight/2+10)}px`:"0px 3px",scale:"true"===e.dataset.attached?.94:.99}],{duration:150,easing:"cubic-bezier(.22,1,.36,1)",fill:"forwards"}).finished.catch(()=>{}).finally(()=>e.remove()))}function mo(e,t,n=uo()){bn.textContent=e,so&&ho(so);let o=b("div","toast floating-notice");so=o,n&&ro.set(o,n),o.setAttribute("role",t?"alertdialog":"status"),o.setAttribute("aria-label",e),o.append(x("info"),b("span","",e)),t&&o.append(w(t.label,()=>{ho(o),t.run()},"notice-action")),o.append(w("Dismiss notice",()=>ho(o),"icon","close")),Jt.append(o),fo(),po(),matchMedia("(prefers-reduced-motion: reduce)").matches||o.animate([{opacity:0,translate:"true"===o.dataset.attached?`0px ${("above"===o.dataset.placement?1:-1)*(o.offsetHeight/2+10)}px`:"0px 6px",scale:"true"===o.dataset.attached?.94:.97},{opacity:1,translate:"0px 0px",scale:1}],{duration:250,easing:"cubic-bezier(.22,1,.36,1)"}),clearTimeout(Nt),Nt=window.setTimeout(()=>ho(o),5e3)}function fo(){for(let e of Jt.querySelectorAll(".floating-notice")){let t=ro.get(e);if(!t)continue;let n=t.anchor?Ti(t.anchor):null,o=(Te||Ct!==t.cardKey?null:Zt.firstElementChild)?.getBoundingClientRect();o&&(e.style.maxWidth=`${Math.min(360,o.width,innerWidth-24)}px`,t.left=o.left,t.top=o.top,t.offsetX=o.left-(n?.x??0),t.offsetY=o.top-(n?.y??0),t.scrollX=window.scrollX,t.scrollY=window.scrollY);let i=o?o.left+(o.width-e.offsetWidth)/2:n?n.x+t.offsetX:t.left+t.scrollX-window.scrollX,a=!!o&&o.bottom+10+e.offsetHeight>innerHeight-12;e.dataset.placement=a?"above":"below";let r=o?a?o.top-e.offsetHeight-10:o.bottom+10:n?n.y+t.offsetY:t.top+t.scrollY-window.scrollY,s=String(!!o),d=void 0!==e.dataset.attached&&e.dataset.attached!==s,l=d?e.getBoundingClientRect():null,c=co.get(e);if(c&&(d||Math.abs(c.left-i)>.5||Math.abs(c.top-r)>.5)&&(c.animation.cancel(),co.delete(e)),e.dataset.attached=s,Object.assign(e.style,{left:`${i}px`,top:`${r}px`,bottom:"auto",transform:"none",transformOrigin:o?a?"50% 100%":"50% 0%":"0% 0%"}),l&&!e.dataset.closing&&!matchMedia("(prefers-reduced-motion: reduce)").matches){let t=e.animate([{left:`${l.left}px`,top:`${l.top}px`},{left:`${i}px`,top:`${r}px`}],{duration:250,easing:"cubic-bezier(.22,1,.36,1)"});co.set(e,{animation:t,left:i,top:r})}}}function go(e){Se||e instanceof DOMException&&"AbortError"===e.name||(Qe=e instanceof Error?e.message:"Something went wrong. Try again.",mo(Qe))}function bo(e){e().catch(go)}function xo(e,t){return t.then(t=>{e.isConnected&&e.replaceWith(t)}).catch(go),e}function wo(e){return xo(b("section","account-usage"),import("./onboarding-YA63RUKK.js").then(({accountUsage:t})=>t(ke,e,!0,me&&"local"===ve)))}function yo(){bo(ut?Eo:ea)}let vo,ko,Co=e=>e.map(e=>({...e,comments:e.comments.filter(e=>"[Comment deleted]"!==e.body)})).filter(e=>e.comments.length>0),So=-1;async function Eo(){if(Se||We||Ne.busy||E.onboarding)return;let e=Ne.revision,t=ke,o=t.token,i=Oe;We=!0;try{let n=await t.list();if(Se||t!==ke||i!==Oe||o!==t.token||Ne.busy||e!==Ne.revision)return;if(n===ko&&e===So&&"Live"===Ge)return!1;ko=n,So=e,qe=!0;let a=Co(n),r=JSON.stringify(a)!==JSON.stringify(He),s="Live"!==Ge;return ct="",ut&&(pt=null),Ge=pt?"Offline":"Live",Pe&&!a.some(e=>e.id===Pe)&&(Pe=null),r?Ne.replace(a,e):s&&(xi(),Qo()),r}catch(a){if(Se||t!==ke||i!==Oe||a instanceof DOMException&&"AbortError"===a.name)return;throw o!==t.token&&Qn(),a instanceof n&&(401===a.status||403===a.status)&&"site_not_approved"!==a.code&&(ct=a.message,Pe=null,ko=void 0,Ne.replace([],e)),pt=ct?null:K(a),Ge="Offline",xi(),Qo(),a}finally{t===ke&&i===Oe&&(We=!1)}}function $o(e){if(E.onboarding)return;Le&&(Le=!1,Ye?.setActive(!1)),ze=e,Ee&&Uo(!1);let t=e?vt??kt.shift():null;if(t)return Be=t.anchor,qt=t.text,vt=null,Pe=null,Te=!1,$e=!1,Pi(),void Zt.querySelector("textarea")?.focus();$e=e,vo?.wake(!1),je=!1,Te=!1,e&&(Pe=null,Be=null),Pi()}function zo(){Ae&&(Ae=!1,Uo(!0),requestAnimationFrame(()=>{let e=tn.querySelector(".list");e&&(e.scrollTop=_e),tn.querySelector('[data-menu-item="design"]')?.focus({preventScroll:!0})}))}function jo(e){E.onboarding||Be||e&&!H||(e&&(Ae=!0,Ee&&(_e=tn.querySelector(".list")?.scrollTop??0),$o(!1),Ee||Uo(!0),Te=!1,tn.querySelector(".panel")?.contains(Jt.activeElement)&&tn.focus({preventScroll:!0})),Le=e,e?(Ye?Promise.resolve(Ye):(Ie||(Ie=import("./design-mode.js").then(({createDesignMode:e})=>{let t=e({root:Jt,panelRoot:tn,host:Kt,exitKey:q.design?.label,targetAt(e,t){let n=Ri(e,t);return n&&n!==te&&te.contains(n)?n:null},onComment(e,t){Ae=!1,jo(!1),de&&Ee&&Uo(!1),qt=t??"",Ot=[];let n=e.getBoundingClientRect();Ii(e,{x:n.left+n.width/2,y:n.top+n.height/2})},onExit(){Le=!1,Qo(),zo()}});return Se?(t.destroy(),null):(Ye=t,t.setActive(Le),t)}).catch(()=>(Le=!1,Qo(),null)).finally(()=>{Ie=null})),Ie)).then(e=>e?.setActive(Le)):(Ye?.setActive(!1),zo()),Pi())}let Mo=0;let Lo=1,Ao="",_o=()=>(window.visualViewport?.offsetTop??0)+Math.min(window.innerHeight,window.visualViewport?.height??window.innerHeight)-window.innerHeight;function To(){let e=io(),t=U(window.innerWidth,window.innerHeight)?Math.min(window.innerHeight,window.visualViewport?.height??window.innerHeight):window.innerHeight,n=`${window.innerWidth}:${window.innerHeight}:${t}:${e}:${Ee}:${Te}:${re}:${window.visualViewport?.offsetTop??0}`;if(Ao===n)return;if(de||Kn(),Ao=n,ce||de){wn?.stop(),Bn=!1,Qt.style.opacity="";let n=$n?te.scrollTop*e:null;if($n){for(let[e,t]of Cn)Object.assign(e.style,t);Cn.clear(),Object.assign(te.style,yn),Lo=1,document.documentElement.style.overflow=kn,Object.assign(document.body.style,vn),document.documentElement.style.background=Sn}if(null!==n&&window.scrollTo({top:n,behavior:"instant"}),Kt.style.zoom=String(1/e),Kt.style.width=`${window.innerWidth}px`,Kt.style.height=de?`${window.innerHeight}px`:"",Kt.style.top=de?"":"0px",de){let e=_o();en.style.translate=`0 ${e}px`,Kt.style.setProperty("--mobile-panel-height",`${Math.max(1,.9*t)}px`),Kt.style.setProperty("--mobile-panel-bottom",-e+"px")}return Kt.classList.toggle("review-open",Ee),$n=!1,Qt.style.clipPath="",void Object.assign(Gt.style,{left:"",top:"",width:"",height:""})}let o=$n?te.scrollTop:window.scrollY/(e*Lo),i=$n,a=$n?Ro():{left:0,top:0,width:window.innerWidth};wn?.stop(),Bn=!1,Qt.style.opacity="";let r=F(window.innerWidth,t,Ee,window.innerHeight,Te),s=r.framed;if(Kt.style.setProperty("--review-viewport-height",`${t}px`),Kt.style.zoom=String(1/e),Kt.style.width=`${window.innerWidth}px`,Kt.style.height=`${t}px`,Kt.style.top="",Kt.classList.toggle("review-open",Ee),Kt.classList.toggle("design-active",Le),s){Lo=r.scale;let t=Lo*e;Object.assign(te.style,{position:"fixed",transform:"translate(0, 0)",transformOrigin:"top left",left:r.left/t+"px",top:r.top/t+"px",width:window.innerWidth/e+"px",boxSizing:"border-box",height:r.height/t+"px",paddingBottom:yn.paddingBottom,zoom:String(Lo),overflow:"hidden auto",borderRadius:12/t+"px",background:En});for(let e of te.querySelectorAll("header"))!Cn.has(e)&&"fixed"===getComputedStyle(e).position&&(Cn.set(e,{position:e.style.position,marginBottom:e.style.marginBottom}),e.style.position="sticky",e.style.marginBottom=`-${e.offsetHeight}px`);document.documentElement.style.overflow="hidden",document.body.style.overflow="hidden",document.body.style.background="#080808",document.documentElement.style.background="#080808",te.scrollTop=o}else{for(let[e,t]of Cn)Object.assign(e.style,t);Cn.clear(),document.documentElement.style.overflow=kn,Object.assign(te.style,yn),Object.assign(document.body.style,vn),document.documentElement.style.background=Sn,$n&&window.scrollTo({top:o*e,behavior:"instant"}),Lo=1}if($n=s,!s&&E.drawerContainer?.isConnected){let e=E.drawerContainer.getBoundingClientRect();Rn=e.width?e.left+e.width/2:void 0}if(!(s===i||jn||Fn||Mn||matchMedia("(prefers-reduced-motion: reduce)").matches)){let t=s?Ro():{left:0,top:0,width:window.innerWidth},n=Lo*e,i=`translate(${(a.left-t.left)/n}px, ${(a.top-t.top)/n}px) scale(${a.width/t.width})`;if(te.style.transformOrigin=s?"top left":`0 ${o}px`,!s){document.body.style.background="#080808",document.documentElement.style.background="#080808",te.style.background=En;let t=getComputedStyle(te).minHeight;te.style.minHeight=`max(${"auto"===t?"0px":t}, ${window.innerHeight/e}px)`}Qt.style.opacity="0",Bn=!0,wn=m(te,{transform:[i,"translate(0px, 0px) scale(1)"]},{duration:.25,ease:[.32,.72,0,1]});let r=wn;r.finished.then(()=>{Se||wn!==r||(Bn=!1,$n||(te.style.transformOrigin=yn.transformOrigin,te.style.transform=yn.transform,te.style.background=yn.background,te.style.minHeight=yn.minHeight,document.body.style.background=vn.background,document.documentElement.style.background=Sn),Qt.style.opacity="",Ni())})}Qt.style.clipPath=s?`inset(${r.visibleTop}px ${r.right}px ${r.bottom}px ${r.visibleLeft}px)`:"",Object.assign(Gt.style,s?{left:`${r.visibleLeft}px`,top:`${r.visibleTop}px`,width:`${r.visibleWidth}px`,height:`${r.visibleHeight}px`}:{left:"",top:"",width:"",height:""})}function Ro(){return te.getBoundingClientRect()}function Wo(){"true"!==en.dataset.edgeTabs&&(en.dataset.savedLeft=en.style.left,en.dataset.savedTop=en.style.top,en.dataset.savedBottom=en.style.bottom,en.dataset.savedTransform=en.style.transform),en.style.left="",en.style.top="",en.style.bottom="",en.style.transform="",en.parentElement!==tn&&tn.append(en),en.dataset.edgeTabs="true",Ee?en.dataset.edgeOrient="horizontal":delete en.dataset.edgeOrient}function qo(){"true"===en.dataset.edgeTabs&&(en.style.left=en.dataset.savedLeft??"",en.style.top=en.dataset.savedTop??"",en.style.bottom=en.dataset.savedBottom??"",en.style.transform=en.dataset.savedTransform??"",delete en.dataset.savedLeft,delete en.dataset.savedTop,delete en.dataset.savedBottom,delete en.dataset.savedTransform),delete en.dataset.edgeTabs,delete en.dataset.edgeOrient,en.parentElement===tn&&bn.before(en)}function Oo(){return en.querySelector(".morphing-menu__shell")??en}function Ho(){return en.querySelector(".morphing-menu")}function Po(){return[...tn.querySelectorAll(".panel-head, .panel .empty, .thread-card")]}function Bo(e){return qn.push(e),e}function Yo(){for(let e of Po())e.style.opacity="",e.style.transform="",e.style.filter="";Zn.style.opacity=""}function Io(e,t){for(let e of tn.getAnimations())e.cancel();tn.style.transition="none",tn.style.transform="none",tn.style.translate="none",tn.style.opacity="1",tn.style.left=`${e.left}px`,tn.style.top=`${e.top}px`,tn.style.width=`${e.width}px`,tn.style.height=`${e.height}px`,tn.style.borderRadius=t}function No(){tn.style.width="",tn.style.height="",tn.style.borderRadius="",tn.style.transform="",tn.style.opacity="",ce&&Dn(),tn.offsetWidth,tn.style.transition=""}function Do(e=!1){On+=1;for(let e of qn)e.stop();qn=[];let t=Hn;if(Hn=!1,e&&tn.toggleAttribute("data-tips-ready",Ee),!e||!t)return;delete tn.dataset.morphing,delete en.dataset.edgeSurface,delete en.dataset.edgeMorph;let n=Ho();n&&(n.style.transition=""),delete en.dataset.hidden,qo(),Yo(),No()}function Xo(e,t,n){let o=tn.getBoundingClientRect(),i=e?null:{left:o.left,top:o.top,width:o.width,height:o.height,radius:tn.style.borderRadius||"16px"};Do(!1),i&&Io(i,i.radius);let f=On;Hn=!0;let g=Ho();g&&(g.style.transition="none");let b=en.querySelector(".morphing-menu__bar"),x=Oo(),w=!1,y=()=>{w||f!==On||Se||(w=!0,Hn=!1,delete tn.dataset.morphing,delete en.dataset.edgeSurface,delete en.dataset.edgeMorph,delete en.dataset.hidden,g&&(g.style.transition=""),e||(Yo(),tn.style.opacity="0",qo()),No(),e&&(tn.dataset.tipsReady=""))},v=Mn||matchMedia("(prefers-reduced-motion: reduce)").matches;if(e){let e=t?tn.getBoundingClientRect():null,o=tn.style.borderRadius||"16px";tn.style.transition="none",tn.style.width="",tn.style.height="",tn.style.borderRadius="",tn.style.transform="none";let i=x.getBoundingClientRect(),s=!t&&n&&n.width>0?n:i;!t&&s.width>0&&(Pn={left:s.left,top:s.top,width:s.width,height:s.height}),Wo(),delete tn.dataset.morphing,Dn();let l=tn.getBoundingClientRect();if(tn.dataset.morphing="true",v||s.width<=0||l.width<=0||t&&!e)return void y();let g=s.height/2+"px";t&&e?Io(e,o):Io(s,g),Po().forEach((e,t)=>{e.style.opacity="0",e.style.transform="translateY(48px)",e.style.filter="blur(4px)",Bo(m(e,{opacity:1,y:0,filter:"blur(0px)"},{...d,delay:c+t*p}))}),Zn.style.opacity="0",Bo(m(Zn,{opacity:1},{...d,delay:c}));let w=()=>{if(f!==On||Se)return;delete tn.dataset.morphing;let e=tn.getBoundingClientRect();Bo(m(tn,{left:[`${e.left}px`,`${l.left}px`],top:[`${e.top}px`,`${l.top}px`],width:[`${e.width}px`,`${l.width}px`],height:[`${e.height}px`,`${l.height}px`],borderRadius:[tn.style.borderRadius||"16px","16px"]},a)).finished.then(y).catch(()=>{f===On&&y()})};if(t||s.height>s.width+8)return void w();let k=u(b?.offsetWidth||s.width,b?.offsetHeight||s.height),C=h(s.left+s.width/2,s.top+s.height,k.width,k.height),S=tn.getBoundingClientRect();return void Bo(m(tn,{left:[`${S.left}px`,`${C.left}px`],top:[`${S.top}px`,`${C.top}px`],width:[`${S.width}px`,`${C.width}px`],height:[`${S.height}px`,`${C.height}px`]},r)).finished.then(w).catch(()=>{})}let k=i??tn.getBoundingClientRect(),C=i?.radius||tn.style.borderRadius||"16px";delete en.dataset.hidden,tn.dataset.morphing="true",Wo();let S=en.getBoundingClientRect(),E=Pn??{left:(window.innerWidth-(S.width||228))/2,top:window.innerHeight-24-(S.height||52),width:S.width||228,height:S.height||52};if(v||E.width<=0||k.width<=0)y();else{Io(k,C);for(let e of Po())Bo(m(e,{opacity:0,y:16,filter:"blur(2px)"},l));Bo(m(Zn,{opacity:0},l)),Bo(m(tn,{left:[`${k.left}px`,`${E.left}px`],top:[`${k.top}px`,`${E.top}px`],width:[`${k.width}px`,`${E.width}px`],height:[`${k.height}px`,`${E.height}px`],borderRadius:[C,E.height/2+"px"]},s)).finished.then(y).catch(()=>{f===On&&y()})}}function Uo(e){Kn();let t=e&&!Ee;if(Ee=e,Mn||vo?.wake(t),delete tn.dataset.tipsReady,tn.toggleAttribute("data-tips-restored",Mn),!E.onboarding)try{e?localStorage.setItem(Ln,"1"):localStorage.removeItem(Ln)}catch{}if(e&&($e=!1),e||(clearTimeout(zn),zn=0,Te=!1),de)return cancelAnimationFrame(Mo),function(){let e=Math.max(1,.9*Math.min(window.innerHeight,window.visualViewport?.height??window.innerHeight)),t=_o(),n=Oo().getBoundingClientRect();Kt.style.setProperty("--mobile-pill-x",n.left+n.width/2-window.innerWidth/2+"px"),Kt.style.setProperty("--mobile-pill-y",n.bottom-(window.innerHeight+t-6)+"px"),Kt.style.setProperty("--mobile-pill-scale-x",String(Math.max(.01,n.width/Math.max(1,window.innerWidth-24)))),Kt.style.setProperty("--mobile-pill-scale-y",String(Math.max(.01,n.height/e)))}(),!t||Mn||matchMedia("(prefers-reduced-motion: reduce)").matches?delete Kt.dataset.mobileEntering:Kt.dataset.mobileEntering="",je=!1,To(),Pi(),no.show(),no.update(),void(void 0!==Kt.dataset.mobileEntering&&(Mo=requestAnimationFrame(()=>{delete Kt.dataset.mobileEntering})));if(ce){let t=Hn,n=e?Oo().getBoundingClientRect():null;e||delete en.dataset.edgeOrient,dt=e?dt:lt,Tn=void 0,je=!1,Hn=!0;let o=Ho();return o&&(o.style.transition="none"),no.show(),To(),Pi(),Xo(e,t,n),void no.update()}let n=en.getBoundingClientRect();dt=e?void 0:lt,Tn=void 0,je=!1,To(),Pi(),_n?.stop(),en.style.translate="0px 0px";let o=en.getBoundingClientRect();!Mn&&!matchMedia("(prefers-reduced-motion: reduce)").matches&&(_n=m(en,{translate:[`${n.left-o.left}px ${n.top-o.top}px`,"0px 0px"]},{type:"spring",stiffness:680,damping:32,mass:.55})),no.show(),no.update()}function Fo(){if(ze=!1,clearTimeout(zn),zn=0,Te)return bo(at),Yt=null,Te=!1,void Pi();Pe=null,Be=null,Te=!1,Pt=null,Qe="",$e=!1,Pi()}function Ko(){Ae=!1,Le=!1,Ye?.setActive(!1),Fo(),Ee&&Uo(!1),$e=!1,ze=!1,je=!0,Me=!0;try{sessionStorage.setItem(An,"1")}catch{}Pi()}function Jo(){Me=!1,je=!1;try{sessionStorage.removeItem(An)}catch{}Pi()}function Vo(e){if(ze=!1,clearTimeout(zn),zn=0,e.page!==ao()){let t=new URL(e.page,location.origin);return t.searchParams.set("comment",e.id),void location.assign(t)}pn=ln!==e.id||an.hidden?null:an.getBoundingClientRect(),pn&&un(!0),Pe=e.id,Be=null,Te=!1,Pt=null,Qe="",$e=!1;let t=de&&Ee;t&&Uo(!1);let n=Ti(e.anchor);n.attached&&!pn&&(t||!de)&&($n?te:window).scrollBy({top:(n.y-.35*(t?Math.min(window.innerHeight,window.visualViewport?.height??window.innerHeight):window.innerHeight))/($n?Lo*io():1),behavior:t&&!matchMedia("(prefers-reduced-motion: reduce)").matches?"smooth":"instant"}),Pi()}function Go(){return He.filter(e=>(Je||e.page===ao())&&("all"===Fe||e.resolved===("resolved"===Fe))&&(!Ke||!!e.tags?.includes(Ke))&&(!Ve||e.comments.some(e=>`${e.body} ${e.author.name}`.toLowerCase().includes(Ve.toLowerCase()))||e.page.toLowerCase().includes(Ve.toLowerCase()))).sort((e,t)=>t.updatedAt-e.updatedAt)}function Qo(){en.style.display=Me?"none":"",no.update();let{dockCenter:e}=F(window.innerWidth,window.innerHeight,Ee);if(de)qo(),Object.assign(en.style,{left:"50%",top:"auto",bottom:"calc(16px + env(safe-area-inset-bottom,0px))",transform:"translateX(-50%)"});else if(ce)Hn||(delete en.dataset.hidden,Ee?Wo():(qo(),dt&&Yn(dt)),Dn());else{delete en.dataset.hidden;let t=!Ee&&E.drawerContainer?.isConnected?E.drawerContainer.getBoundingClientRect():void 0;t?.width&&!Bn&&(Rn=t.left+t.width/2);let n=en.offsetWidth/2,o=t?.width&&void 0!==Rn?Math.max(16+n,Math.min(window.innerWidth-16-n,Rn)):e;if(dt)Yn(dt);else if(o!==Tn){let e=en.getBoundingClientRect(),t=e.left+e.width/2;_n?.stop(),en.style.top="",en.style.bottom="",en.style.left=`${o}px`,en.style.translate="0px 0px",void 0!==Tn&&!matchMedia("(prefers-reduced-motion: reduce)").matches&&(_n=m(en,{translate:[`${t-o}px ${e.top-en.getBoundingClientRect().top}px`,"0px 0px"]},{type:"spring",stiffness:680,damping:32,mass:.55})),Tn=o}}let t=e=>({glyph:e}),n=[{id:"browse",label:xe("Browse website",q.browse),icon:t("pointer"),onSelect:()=>$o(!1)},{id:"comment",label:xe("Add comment",q.comment),icon:t("comment"),onSelect:()=>$o(!ze)},...H?[{id:"design",label:xe("Design mode",q.design),icon:t("design"),onSelect:()=>jo(!Le)}]:[],{id:"comments",label:E.onboarding?Ee?"Close project sidebar":"Project settings":Ee?"Close comment sidebar":`View all comments · ${He.filter(e=>!e.resolved).length} open`,icon:t("expand"),onSelect:()=>Uo(!Ee)},{id:"account",expandedOrder:-1,label:ke.user?`${ke.user.name} · Account`:E.onboarding?.inProject?"Set up komo":"Enter your name",icon:{user:ke.user},onSelect:()=>{Te||zn?(clearTimeout(zn),zn=0,Te=!1,Pi()):Ai()}},{id:"copy-prompts",keepOpenOnSelect:!0,label:"all"===ai?"Copied prompt":"Copy all comments for agent",icon:t("all"===ai?"check":"copy"),showInBar:!1,onSelect:()=>bo(()=>si("all"))},{id:"dismiss",label:q.restore?`Dismiss Komo · ${q.restore.label} to restore`:"Dismiss Komo",icon:t("close"),onSelect:Ko},{id:"visibility",label:je?"Show comment pins":"Hide comment pins",icon:t("comment"),showInBar:!1,onSelect:()=>{je=!je,ii(),Qo()}}];"Offline"===Ge&&n.push({id:"retry",label:`${pt?.title??"Offline"} · Retry`,icon:t("info"),showInBar:!1,onSelect:yo}),xn.render({items:E.onboarding?n.filter(e=>"account"===e.id||"comments"===e.id):n,alignEnd:(!Ee||!ce)&&(!!dt&&dt.y>window.innerHeight/2),edge:Ee&&ce?"bottom":dt?.edgeX??dt?.edgeY??(dt&&dt.y<window.innerHeight/2?"top":"bottom"),activeId:Te?"account":Le?"design":ze?"comment":Ee?"comments":"browse",label:"Website review",moreLabel:"More review tools"})}let Zo="",ei=new Set,ti=e=>e.page!==ao()?e.page:ei.has(e.id)?"Not found on page":"",ni=!1,oi=0;function ii(e=!1){if(bt||ni&&!e)return;if(je)return Zo="",un(),void Qt.replaceChildren();let t=ao(),n=He.filter(e=>!(e.page!==t||e.resolved||Ke&&!e.tags?.includes(Ke))),o=function(){let e=new Map,t=new Map,n=new WeakMap,o=new WeakMap,i=(e,t,i)=>{let a=t.context,r=[V(t.text),a.tag,a.role,a.label,a.nearby],s=JSON.stringify([i,a.tag,r.map(Boolean)]),d=n.get(e);d||n.set(e,d=new Map);let l=d.get(s),c=e=>JSON.stringify(e.map((e,t)=>r[t]?e:null));if(!l){d.set(s,l=new Map);for(let t of i?e.querySelectorAll(a.tag):e.children){let e=o.get(t);e||o.set(t,e=[G(t),t.tagName.toLowerCase(),t.getAttribute("role")||"",ne(t),oe(t)]);let n=c(e);l.set(n,l.has(n)?null:t)}}return l.get(c(r))??null},a=t=>(e.has(t)||e.set(t,le(t,void 0,i)),e.get(t)??null);return{resolve:a,locate:e=>(t.has(e)||t.set(e,ue(e,a(e))),t.get(e))}}(),i=function(e,t){let n=new Map;for(let o of e){if(o.resolved||o.anchor.unstacked)continue;let e=t(o);if(null===e)continue;let i=n.get(e)??[];i.push(o),n.set(e,i)}let o=new Map;for(let e of n.values())if(!(e.length<2)){e.sort((e,t)=>e.createdAt-t.createdAt||e.id.localeCompare(t.id));for(let t of e)o.set(t.id,e)}return o}(n,e=>o.resolve(e.anchor)),a=n.map(e=>{let t=o.locate(e.anchor);if(t.y<-t.height-40||t.y>window.innerHeight+40)return{thread:e,rect:t,blocked:!1};let n=o.resolve(e.anchor),i=Ri(t.x+8,t.y-10);return{thread:e,rect:t,blocked:!(!n||!i||n.contains(i)||i.contains(n))}});for(let{thread:e,rect:t}of a){if(ei.has(e.id)===!t.attached)continue;t.attached?ei.delete(e.id):ei.add(e.id);let n=Jt.querySelector(`.thread-item[data-thread="${CSS.escape(e.id)}"] .page`);n&&(n.textContent=ti(e))}let r=JSON.stringify([Pe,Be&&o.locate(Be),a.map(({thread:e,rect:t,blocked:n})=>[e.id,t,n,$(t,window.innerWidth)])]);if(r===Zo)return;Zo=r,un();let s=new Map(Array.from(Qt.querySelectorAll(".pin-stack"),e=>[e.dataset.stack,e.scrollLeft]));Qt.replaceChildren();let d=new Map,l=new Map(a.map(e=>[e.thread.id,e]));for(let{thread:e,rect:t,blocked:n}of a){if(!t.attached)continue;let o=i.get(e.id),a=o&&l.get(o[0].id),r=a?.rect.attached?a:{rect:t,blocked:n};if(r.rect.y<-r.rect.height-40||r.rect.y>window.innerHeight+40||r.blocked)continue;let s=He.indexOf(e)+1;if(t.width&&t.height){let n=b("div","area");Object.assign(n.style,{left:`${t.x}px`,top:`${t.y}px`,width:`${t.width}px`,height:`${t.height}px`,opacity:e.id===Pe?"1":".45"}),Qt.append(n)}let c=w(`Comment ${s}: ${e.comments[0]?.body.slice(0,100)??""}`,()=>Vo(e),`pin${e.id===Pe?" active":""}${e.resolved?" resolved":""}${t.attached?"":" detached"}`);if(c.textContent="",e.comments[0]){let t=e.comments[0].author;g(c,t.accentColor),c.append(v(t));let n=c.querySelector("img");n&&(n.draggable=!1)}if(qi(c,e,t),e.resolved){let e=b("span","pin-check");e.append(x("check")),c.append(e)}let p=()=>{if(Pe||Be||$e||bt||$t||sn)return;dn=!1,window.clearTimeout(rn);let n=an.hidden||ln!==e.id;cn?.cancel(),ln=e.id,an.replaceChildren();let o=e.comments[0];if(!o)return;let i=w("Open comment",()=>Vo(e),"pin-preview-open");i.textContent="",i.append(wi(o),b("p","hover-message",o.body)),an.append(i),an.hidden=!1;let a=Wi(c,t),r=Ee&&!de?396:12,s=a.x+20+320>window.innerWidth-r?a.x-340:a.x+20;Object.assign(an.style,{left:`${Math.max(12,s)}px`,transformOrigin:a.x<Math.max(12,s)+160?"top left":"top right",top:`${Math.max(12,Math.min(a.y-28,window.innerHeight-an.offsetHeight-92))}px`}),n&&!matchMedia("(prefers-reduced-motion: reduce)").matches&&(cn=an.animate([{opacity:0,transform:"translateY(6px) scale(.97)"},{opacity:1,transform:"none"}],{duration:250,easing:"cubic-bezier(.22,1,.36,1)"}))};if(c.addEventListener("pointerenter",p),c.addEventListener("pointermove",e=>{sn&&!bt&&!$t&&0===e.buttons&&(e.movementX||e.movementY)&&(sn=!1,p())}),c.addEventListener("focus",p),c.addEventListener("blur",()=>un()),c.addEventListener("pointerleave",()=>{rn=window.setTimeout(un,120)}),c.dataset.thread=e.id,c.dataset.pointer=$(r.rect,window.innerWidth),Object.assign(c.style,{left:`${t.x}px`,top:`${t.y}px`}),o&&a?.rect.attached&&!a.blocked){let t=d.get(o[0].id);if(!t){t=b("div","pin-stack"),t.dataset.stack=o[0].id,t.setAttribute("role","group"),t.setAttribute("aria-label",`${o.length} comments on this component`);let e=Math.min(178,40+22*(o.length-1));Object.assign(t.style,{left:`${Math.max(4,Math.min(a.rect.x-25,window.innerWidth-e-8))}px`,top:a.rect.y-34+"px",maxWidth:`${e}px`}),t.addEventListener("scroll",()=>{un(),Li()}),d.set(o[0].id,t),Qt.append(t)}c.style.left="",c.style.top="",c.style.order=String(o.indexOf(e)),c.style.marginLeft=o[0].id===e.id?"0":"-12px",t.append(c)}else Qt.append(c)}for(let[e,t]of d)t.scrollLeft=s.get(e)??0;if(Be&&Be.width>0&&Be.height>0){let e=Ti(Be),t=b("div","area");Object.assign(t.style,{left:`${e.x}px`,top:`${e.y}px`,width:`${Math.max(8,e.width)}px`,height:`${Math.max(8,e.height)}px`}),Qt.append(t)}}let ai=null,ri=0;async function si(e){let t=i(He,{...E,origin:location.origin,page:"page"===e?ao():void 0});t?(await navigator.clipboard.writeText(t),!Se&&(ai=e,bn.textContent="Agent prompt copied",clearTimeout(ri),Qo(),xi(),ri=window.setTimeout(()=>{ai=null,Qo(),xi()},2e3))):mo("page"===e?"No open comments on this page":"No open comments to copy")}let di,li=new Set,ci="branch-comments:dismissed-tips",pi=[["copy","Copy comments for your agent."]];function ui(){let e=tn.getBoundingClientRect();for(let t of tn.querySelectorAll(".sidebar-tip")){let n="copy"===t.dataset.tip,o=tn.querySelector(n?".copy-page-prompt":'.toolbar [aria-label^="Add comment"]')?.getBoundingClientRect();if(t.hidden=!o?.width,!o?.width)continue;let i=o.left+o.width/2-e.left,a=Math.max(12,Math.min(e.width-12-t.offsetWidth,i-t.offsetWidth/2));t.style.left=`${a}px`,t.style.top=n?o.bottom-e.top+10+"px":o.top-e.top-10-t.offsetHeight+"px",t.style.setProperty("--caret-x",i-a+"px")}}q.comment&&pi.push(["shortcut",`Press ${q.comment.label} to comment.`]);let hi,mi=!1;let fi=()=>!Re&&(yt||!!ke.user?.verified);function gi(e,t){if(!(ke.user||wt&&Ht.trim()))return void Ai();let n=Pe===e.id,o=t=>{let o=Pe;return n&&(Pe=t?null:e.id),Xe(De(e.id,e=>({...e,resolved:t,resolvedBy:t?ke.user:null})),async n=>{ke.user||await ke.guest(Ht),await ke.request(`threads/${n(e.id)}`,"PATCH",{resolved:t})},()=>{Pe||(Pe=o)})};bo(()=>o(!e.resolved)),mo(e.resolved?"Comment reopened":"Comment resolved",{label:"Undo",run:()=>bo(()=>o(e.resolved))},t)}let bi=new WeakMap;function xi(){if(E.onboarding){if(di?.(),tn.replaceChildren(),E.onboarding.inProject)return;if(Ee){let e=b("aside","panel");e.setAttribute("aria-label","Project settings");let t=b("div","panel-head","Project settings"),n=b("div","empty");n.append(b("p","","Leave comments on your connected website."),w("Manage project",()=>{Ai()},"secondary")),e.append(t,n),tn.append(e)}return}if(!Ee&&(ce||de))return;let e=tn.querySelector(".list"),n=e?.scrollTop??0,o="Search comments"===Jt.activeElement?.getAttribute("aria-label"),i=o?Jt.activeElement.selectionStart:null;if(!Ee&&!ce&&!de)return di?.(),void tn.replaceChildren();let a=tn.querySelector(".panel");if(!a){a=b("aside","panel"),a.setAttribute("aria-label","All comments");let e=b("div","panel-head"),t=b("div","row between sidebar-title"),n=b("div","filter-slot"),o=b("div","row"),i=e=>{let t=a.querySelector(".sidebar-search-field"),n=o.querySelector('[aria-label="Search comments"]'),i=(e?n:t).getBoundingClientRect();Wn=e,e||(Ve="",t.querySelector("input").value=""),xi();let r=(e?t:n).getBoundingClientRect();matchMedia("(prefers-reduced-motion: reduce)").matches||t.animate(e?[{transform:`translate(${i.left-r.left}px, ${i.top-r.top}px)`,width:`${i.width}px`,height:`${i.height}px`,borderRadius:"50%",opacity:.4},{transform:"none",width:`${r.width}px`,height:`${r.height}px`,borderRadius:"10px",opacity:1}]:[{transform:"none",opacity:1},{transform:`translate(${r.left-i.left}px, ${r.top-i.top}px) scale(.2)`,opacity:0}],{duration:280,easing:"cubic-bezier(.22,1,.36,1)"}),e?t.querySelector("input")?.focus():n.focus()};o.append(w("Copy page comments",()=>"resolved"===Fe?function(e){if(!mi||Ne.busy)return;let t=Go().filter(e=>e.resolved).map(e=>e.id);if(!t.length)return;let n=b("div","cleanup-confirm");n.popover="auto",n.setAttribute("role","alertdialog"),n.setAttribute("aria-label","Delete resolved comments permanently"),n.append(b("strong","",`Delete ${t.length} resolved ${1===t.length?"thread":"threads"}?`),b("p","","Their replies will be deleted too. This can’t be undone."));let o=b("div","cleanup-actions"),i=()=>{n.hidePopover(),e.focus({preventScroll:!0})};o.append(w("Cancel",i,"secondary"),w("Delete permanently",()=>{i(),bo(async()=>{try{for(let e=0;e<t.length;e+=250){let n=t.slice(e,e+250),o=new Set(n);await Ne.submit(e=>e.filter(e=>!o.has(e.id)),async()=>{await ke.request("project/clear-resolved","POST",{confirm:E.project,threadIds:n})})}}finally{await Eo()}})},"secondary destructive")),n.append(o),tn.append(n),n.addEventListener("toggle",()=>{n.matches(":popover-open")||n.remove()}),n.showPopover();let a=e.getBoundingClientRect();n.style.left=`${Math.max(12,Math.min(a.right-n.offsetWidth,innerWidth-n.offsetWidth-12))}px`,n.style.top=`${Math.max(12,Math.min(a.bottom+8,innerHeight-n.offsetHeight-12))}px`,o.querySelector("button")?.focus()}(a.querySelector(".copy-page-prompt")):bo(()=>si("page")),"icon copy-page-prompt","copy"),b("div","tag-filter-slot"),w("Search comments",()=>i(!0),"icon sidebar-search-trigger","search"),w("Close sidebar",()=>Uo(!1),"icon","close"));let r=b("div","sidebar-selector");r.append(n,b("div","scope-slot")),t.append(r,o);let s=b("div","sidebar-search"),d=b("div","sidebar-search-inner"),l=b("div","sidebar-search-row"),c=b("div","sidebar-search-field"),p=b("input");p.type="search",p.placeholder="Search",p.setAttribute("aria-label","Search comments"),p.addEventListener("input",()=>{Ve=p.value,xi()}),p.addEventListener("keydown",e=>{"Escape"===e.key&&(e.stopPropagation(),u())}),c.append(x("search"),p);let u=()=>i(!1);c.append(w("Close search",u,"icon search-cancel","close")),l.append(c),d.append(l),s.append(d),e.append(t,s);let h=b("div","morphing-menu__tooltip sidebar-tooltip");h.setAttribute("aria-hidden","true"),Jt.append(h);let m=0,f=0,g=()=>{clearTimeout(m),h.dataset.open&&(delete h.dataset.open,f=Date.now()+300)};di=()=>{clearTimeout(m),h.remove(),di=void 0};let y=e=>{clearTimeout(m);let t=()=>{if(!e.isConnected)return;let t=e.getBoundingClientRect();h.textContent=e.ariaLabel;let n=h.offsetWidth/2;h.style.left=`${Math.max(8+n,Math.min(innerWidth-8-n,t.left+t.width/2))}px`,h.style.top=`${t.bottom+8}px`,h.dataset.open="true"};h.dataset.open||Date.now()<f?t():m=window.setTimeout(t,400)};for(let e of o.querySelectorAll("button"))e.removeAttribute("title"),e.addEventListener("pointerenter",t=>{"mouse"===t.pointerType&&y(e)}),e.addEventListener("pointerleave",g),e.addEventListener("focus",()=>y(e)),e.addEventListener("blur",g);o.addEventListener("pointerdown",g),a.append(e),tn.append(a)}let r=a.querySelector(".copy-page-prompt");if("resolved"===Fe&&hi!==ke.token){hi=ke.token,mi=!1;let e=hi;e&&ke.request("project").then(()=>{ke.token===e&&(mi=!0,xi())}).catch(()=>{})}let s="resolved"===Fe;r.disabled=s&&(!mi||Ne.busy||!Go().length),r.classList.toggle("destructive",s);let d=s?"trash":"page"===ai?"check":"copy";if(r.dataset.glyph!==d){let e=r.querySelector("svg:not([data-leaving])"),t=x(d),n=void 0!==r.dataset.glyph&&!matchMedia("(prefers-reduced-motion: reduce)").matches;if(r.dataset.glyph=d,n&&e){e.setAttribute("data-leaving","true"),r.append(t);let n={duration:200,easing:"cubic-bezier(.22,1,.36,1)"},o={opacity:0,transform:"scale(.7)",filter:"blur(2px)"},i={opacity:1,transform:"scale(1)",filter:"blur(0px)"};e.animate([i,o],{...n,fill:"forwards"}).finished.then(()=>e.remove()).catch(()=>e.remove()),t.animate([o,i],n)}else r.replaceChildren(t)}r.setAttribute("aria-label",s?mi?"Delete resolved comments permanently":"Project owner only":"page"===ai?"Copied prompt":"Copy page comments"),a.dataset.search=String(Wn),a.querySelector(".filter-slot").inert=Wn,a.querySelector(".scope-slot").inert=!Wn,a.querySelector(".sidebar-search-trigger").inert=Wn,a.querySelector(".sidebar-search").inert=!Wn;let l=a.querySelector(".filter-slot"),c=Y?[...new Set(He.flatMap(e=>e.tags??[]))].sort():[];Ke&&!c.includes(Ke)&&(Ke=""),l.dataset.value!==Fe&&(l.dataset.value=Fe,l.replaceChildren(t("Filter comments",[["open","Comments"],["all","All comments"],["resolved","Resolved"]],Fe,e=>{Fe=e,xi(),ii()})));let p=a.querySelector(".tag-filter-slot"),u=`${Ke} ${c}`;if(p&&p.dataset.value!==u&&(p.dataset.value=u,p.replaceChildren(),c.length)){let e=Ke?`Filtered by #${Ke}`:"Filter by tag",n=t(e,[["","All tags"],...c.map(e=>[e,`#${e}`])],Ke,e=>{Ke=e,xi(),ii()}),o=n.querySelector("summary");o.className="icon tag-filter-trigger"+(Ke?" active":""),o.setAttribute("aria-label",e),o.title=e,o.replaceChildren(x("tag")),p.append(n)}let h=a.querySelector(".scope-slot");h.dataset.value!==String(Je)&&(h.dataset.value=String(Je),h.replaceChildren(t("Comment pages",[["page","This page"],["all","All pages"]],Je?"all":"page",e=>{Je="all"===e,xi()})));let m=!de&&!Mn&&!matchMedia("(prefers-reduced-motion: reduce)").matches,f=new Map;if(m&&e){let t=e.getBoundingClientRect();for(let n of e.querySelectorAll("[data-thread]")){let e=n.getBoundingClientRect();e.bottom>=t.top&&e.top<=t.bottom&&f.set(n.dataset.thread,e.top)}}let g=b("div","list"),k=Go();k.length>40&&(g.dataset.long="");let C=!qe&&"Connecting"===Ge;g.setAttribute("aria-busy",String(C)),clearTimeout(Dt),g.addEventListener("scroll",()=>{g.dataset.scrolling="true",clearTimeout(Dt),Dt=window.setTimeout(()=>{delete g.dataset.scrolling},800)},{passive:!0});for(let e of k){let t=e.comments[0];if(!t)continue;let n=bi.get(e);if(n){n.querySelector(".thread-card").classList.toggle("active",Pe===e.id),n.querySelector(".card-resolve").disabled=!fi(),n.querySelector("small").textContent=y(t.createdAt),n.querySelectorAll(".reply-meta").forEach((t,n)=>{let o=e.comments[n+1];t.textContent=`${o.author.name} · ${y(o.createdAt)}`}),n.querySelector(".page").textContent=ti(e),g.append(n);continue}let o=w(`Open comment by ${t.author.name}`,()=>Vo(e),"thread-card"+(Pe===e.id?" active":""));o.replaceChildren();let i=b("div","row");i.append(v(t.author),b("span","author",t.author.name),b("small","",y(t.createdAt)));let a=b("div","meta");a.append(b("span","page",ti(e)),b("span","",e.resolved?"Resolved":e.comments.length>1?`${e.comments.length-1} ${2===e.comments.length?"reply":"replies"}`:"")),Y&&e.tags?.length&&a.append(b("span","tag-list",e.tags.map(e=>`#${e}`).join(" "))),o.append(b("p","preview",t.body),i,a);let r=b("div","thread-item");r.dataset.thread=e.id;let s=w(e.resolved?"Reopen comment":"Resolve comment",()=>gi(e),"icon card-resolve","check");if(s.disabled=!fi(),r.append(o,s),e.comments.length>1){let t=b("div","sidebar-replies");for(let n of e.comments.slice(1)){let e=b("div","sidebar-reply");e.append(v(n.author));let o=b("div");o.append(b("div","reply-meta",`${n.author.name} · ${y(n.createdAt)}`),b("p","",n.body)),e.append(o),t.append(e)}o.append(t)}bi.set(e,r),g.append(r)}if(!g.childElementCount){let e=b("div","empty");if(C&&e.setAttribute("role","status"),e.append(x("comment"),b("strong","",ct?ht?"Private project":"Sign in required":"Offline"===Ge&&pt?pt.title:C?"Loading comments…":Ve?"No matching comments":"resolved"===Fe?"Nothing resolved yet":"No comments yet")),ct)e.append(b("p","",ct)),ke.user?.verified||e.append(w("Sign in",Ai,"secondary"));else if("Offline"===Ge&&pt){e.append(b("p","",pt.detail));let t=b("div","empty-actions");"site"===pt.kind&&t.append(w("Turn on comments",()=>{let e=new URL("/setup",E.endpoint);e.searchParams.set("workspace",E.project),e.searchParams.set("site",location.origin),window.open(e,"_blank","noopener")},"primary"),w("Copy link",()=>{navigator.clipboard.writeText(location.origin).then(()=>mo("Link copied")).catch(()=>mo(location.origin))},"secondary")),"site"!==pt.kind&&t.append(w("Try again",yo,"secondary")),e.append(t)}else qe&&!Ve&&"resolved"!==Fe&&e.append(w("Add a comment",()=>{U(window.innerWidth,window.innerHeight)&&Uo(!1),$o(!0)},"secondary"));g.append(e),g.dataset.empty=""}if(He.length&&"Offline"===Ge&&g.prepend(w("Saved comments · Try again",yo,"secondary")),e?e.replaceWith(g):a.append(g),function(e){try{let e=JSON.parse(localStorage.getItem(ci)??"[]");if(Array.isArray(e))for(let t of e)"string"==typeof t&&li.add(t)}catch{}for(let[t,n]of pi){let o=tn.querySelector(`[data-tip="${t}"]`);if(!e||li.has(t)){o?.remove();continue}if(o)continue;o=b("div","morphing-menu__tooltip sidebar-tip"),o.dataset.tip=t;let i=o;o.append(b("p","",n),w("Dismiss tip",()=>{li.add(t);try{localStorage.setItem(ci,JSON.stringify([...li]))}catch{}i.dataset.leaving="",setTimeout(()=>i.remove(),150)},"icon","close")),tn.append(o)}ui()}(!!g.querySelector(".empty [aria-label='Add a comment']")),requestAnimationFrame(ui),g.scrollTop=n,m){let e=0,t=g.getBoundingClientRect();for(let n of g.querySelectorAll("[data-thread]")){let o=n.getBoundingClientRect();if(o.bottom<t.top||o.top>t.bottom)continue;let i=f.get(n.dataset.thread),a=void 0===i?8:i-o.top;Math.abs(a)>.5&&n.animate([{opacity:void 0===i?0:1,transform:`translateY(${Math.max(-40,Math.min(40,a))}px)`},{opacity:1,transform:"translateY(0)"}],{duration:250,delay:void 0===i?40*Math.min(e++,5):0,easing:"cubic-bezier(0.22, 1, 0.36, 1)",fill:"backwards"})}g.querySelector("[data-thread]")||g.animate([{opacity:0},{opacity:1}],{duration:150})}if(o){let e=a.querySelector('input[type="search"]');e.focus(),null!==i&&e.setSelectionRange(i,i)}}function wi(e){let t=b("div","row");return t.append(v(e.author),b("span","author",e.author.name),b("small","",y(e.createdAt))),t.title=e.author.verified?"Verified":"Guest",t}function yi(e,t){return ke.user?.id!==e.author.id||"[Comment deleted]"===e.body?[]:[{label:"Edit",icon:"edit",onSelect:()=>{Pt=e.id,Bt=e.body,Mi()}},{label:"Delete",icon:"trash",destructive:!0,onSelect:()=>{let n=uo(t.anchor);mo("Delete this comment?",{label:"Delete",run:()=>{let o=Pe;1===t.comments.length&&(Pe=null),bo(()=>Xe(De(t.id,t=>{let n=t.comments.filter(t=>t.id!==Ne.id(e.id));return n.length?{...t,comments:n}:null}),async n=>{await ke.request(`threads/${n(t.id)}/comments/${n(e.id)}`,"DELETE")},()=>{Pe||(Pe=o)})),mo("Comment deleted",void 0,n)}})}}]}function vi(t,n){let o=b("article","message");if(o.dataset.comment=t.id,o.append(wi(t)),Pt===t.id){let e=b("textarea");e.value=Bt,e.maxLength=4e3,e.setAttribute("aria-label","Edit comment"),e.dataset.focusKey="edit",e.addEventListener("input",()=>Bt=e.value);let i=w("Save changes",()=>{let e=Bt;Pt=null,bo(()=>Xe(De(n.id,n=>({...n,comments:n.comments.map(n=>n.id===Ne.id(t.id)?{...n,body:e,editedAt:Date.now()}:n)})),async o=>{await ke.request(`threads/${o(n.id)}/comments/${o(t.id)}`,"PATCH",{body:e})},()=>{Pt||(Pt=Ne.id(t.id),Bt=e)}))},"primary");return i.disabled=Re,o.append(e,i,w("Cancel",()=>{Pt=null,Mi()},"secondary")),o}let i=b("div","message-content"),a=b("p","message-text");if(function(e,t){let n=/\[([^\]\n]+)\]\((https?:\/\/[^\s)]+)\)|https?:\/\/[^\s<>]+/gi,o=0;for(let i of t.matchAll(n)){let n=i.index??0;n>o&&e.append(document.createTextNode(t.slice(o,n)));let a=void 0!==i[1],r=a?i[2]:i[0],{url:s,trailing:d}=X(r),l=D(s);if(l){if(a){let t=document.createElement("a");t.href=l,t.target="_blank",t.rel="noopener noreferrer",t.textContent=i[1],e.append(t)}else{let t=document.createElement("a");t.href=l,t.target="_blank",t.rel="noopener noreferrer",t.textContent=s,e.append(t)}d&&e.append(document.createTextNode(d))}else e.append(document.createTextNode(i[0]));o=n+i[0].length}o<t.length&&e.append(document.createTextNode(t.slice(o)))}(a,t.body),i.append(a),"[Comment deleted]"!==t.body){let e=w("Add reaction",()=>{Rt?.(!0),Rt=N(Jt,e,e=>function(e,t,n,o){if(!(ke.user||wt&&Ht.trim()))return void Ai();bo(async()=>{ke.user||await ke.guest(Ht);let i=ke.user;await Xe(De(t.id,t=>({...t,comments:t.comments.map(t=>{if(t.id!==Ne.id(e.id))return t;let a=Object.fromEntries(Object.entries(t.reactions).map(([e,t])=>[e,t.filter(e=>e!==i.id)]));return o&&(a[n]=[...a[n]??[],i.id]),{...t,reactions:a}})})),async i=>{await ke.request(`threads/${i(t.id)}/comments/${i(e.id)}/reactions`,"POST",{emoji:n,active:o})}),o&&function(e,t){if(!P(t))return;let n=I(e);n.counts[t]=(n.counts[t]??(B.includes(t)?1:0))+1,n.recent=t,n.counts=Object.fromEntries(Object.entries(n.counts).sort((e,t)=>t[1]-e[1]).slice(0,200));try{localStorage.setItem(e,JSON.stringify(n))}catch{}}(`branch-comments:emoji:${E.project}:${i.id}`,n)})}(t,n,e,!(ke.user&&t.reactions[e]?.includes(ke.user.id))),Object.entries(t.reactions).find(([,e])=>ke.user&&e.includes(ke.user.id))?.[0],`branch-comments:emoji:${E.project}:${ke.user?.id??"guest"}`,E.emojiDataSource)},"icon message-reaction","smile"),o=Object.entries(t.reactions).filter(([,e])=>e.length>0);if(e.dataset.reactions=JSON.stringify(o),o.length){e.replaceChildren(),e.classList.add("has-reactions");for(let[t,n]of o)e.append(b("span","reaction-value",`${t}${n.length>1?` ${n.length}`:""}`));e.setAttribute("aria-label","Change reactions")}e.setAttribute("aria-haspopup","menu"),e.setAttribute("aria-expanded","false"),i.append(e)}o.append(i);let r=b("div","actions");if(ke.user?.id===t.author.id&&"[Comment deleted]"!==t.body){let i=e("Message actions",yi(t,n));n.comments[0]?.id!==t.id&&o.firstElementChild?.append(i)}return t.editedAt&&r.append(b("small","","Edited")),r.childElementCount&&o.append(r),o}async function ki(e="github"){let t=window.open("about:blank","branch-comments-signin","popup,width=600,height=720");if(!t)throw new Error("Allow popups to sign in.");try{let n=await ke.request(`auth/${e}/start`,"POST",{}),o=new URL(n.url).origin,i=e=>{if(e.origin!==o||e.source!==t||"branch-comments:auth"!==e.data?.type)return;let{token:n,user:a}=e.data;"string"!=typeof n||!a?.id||!a?.name||!0!==a.verified||(ke.save({token:n,user:a}),Qn(),Ze=null,window.removeEventListener("message",i),clearTimeout(Ut),t.close(),Te=!!E.onboarding,Pi(),!E.onboarding&&(Yt?bo(zi):(bo(Eo),mo(`Signed in as ${a.name}`))))};window.addEventListener("message",i,{signal:Ce.signal}),Ut=window.setTimeout(()=>{window.removeEventListener("message",i)},6e5),t.location.href=n.url}catch(e){throw t.close(),e}}function Ci(e,t,n){let o=b("div","tag-slot");return import("./tag-editor-VDPZ6CO3.js").then(({tagEditor:i})=>i(o,{tags:e,suggestions:[...new Set(He.flatMap(e=>e.tags??[]))].sort(),onAdd:t,onRemove:n})),o}function Si(e,t){ke.user?bo(async()=>{let{tags:n}=await ke.request(`threads/${Ne.id(e.id)}`,"PATCH",t);He=He.map(t=>t.id===e.id?{...t,tags:n}:t),xi()}):Ai()}function Ei(e){let t=b("form","composer "+(e?"reply-composer":"new-comment-composer")),n=b("textarea");n.placeholder=e?"Reply…":"Add a comment…",n.rows=1,n.maxLength=4e3,n.required=!0,n.value=e?Ft.get(e.id)??"":qt,n.setAttribute("aria-label",e?"Reply":"Comment"),n.dataset.focusKey="body";let o=()=>{n.style.height="auto",n.style.height=`${Math.min(128,Math.max(e?34:28,n.scrollHeight))}px`,n.style.overflowY=n.scrollHeight>128?"auto":"hidden",Li()};n.addEventListener("input",o),n.addEventListener("input",()=>{e?Ft.set(e.id,n.value):qt=n.value}),n.addEventListener("keydown",e=>{"Enter"===e.key&&!e.shiftKey&&!e.isComposing&&(e.preventDefault(),t.requestSubmit())});let i=w(e?"Send reply":"Post comment",()=>{},"send","arrow");if(i.type="submit",i.disabled=Re,e)t.append(n,i);else{let e=b("div","draft-body");ke.user&&e.append(v(ke.user)),e.append(n,i),Y&&e.append(Ci(Ot,e=>Ot=[...Ot,e],e=>Ot=Ot.filter(t=>t!==e))),t.append(e)}return n.addEventListener("input",()=>{i.disabled=Re||!n.value.trim()}),i.disabled||=!n.value.trim(),t.addEventListener("submit",t=>{if(t.preventDefault(),n.value.trim()&&!Re){if(!ke.user)return Yt=()=>$i(e),void Ai();bo(()=>$i(e))}}),requestAnimationFrame(()=>{n.isConnected&&o()}),t}async function $i(e){if(E.onboarding)throw new Error("Open your connected website to leave a comment.");if(!ke.user)throw new Error("Enter your name to leave a comment.");let t=Date.now(),n={id:`pending-${crypto.randomUUID()}`,body:e?Ft.get(e.id)??"":qt,author:{...ke.user},createdAt:t,editedAt:null,reactions:{}};if(n.body.trim())if(e)Ft.delete(e.id),await Xe(De(e.id,e=>({...e,updatedAt:t,comments:[...e.comments,n]})),async t=>{let o=(await ke.request(`threads/${t(e.id)}/comments`,"POST",{body:n.body})).id??(await ke.list()).find(n=>n.id===t(e.id))?.comments.filter(e=>e.author.id===n.author.id&&e.body===n.body).at(-1)?.id;return o?{[n.id]:o}:{}},()=>{let t=Ne.id(e.id);He.some(e=>e.id===t)?Ft.set(t,[n.body,Ft.get(t)].filter(Boolean).join("\n")):Be===e.anchor?qt=[qt,n.body].filter(Boolean).join("\n"):kt.push({anchor:e.anchor,text:n.body})});else if(Be){let e=Be,o=Ot,i={id:`pending-${crypto.randomUUID()}`,page:ao(),anchor:e,tags:o,resolved:!1,resolvedBy:null,createdAt:t,updatedAt:t,comments:[n]};Pe=i.id,Be=null,qt="",Ot=[],await Xe(e=>[...e,i],async()=>{let t=await ke.request("threads","POST",{page:i.page,anchor:e,body:n.body,...o.length?{tags:o}:{}}),a=t.commentId??(await ke.list()).find(e=>e.id===t.id)?.comments[0]?.id;return{[i.id]:t.id,...a?{[n.id]:a}:{}}},()=>{Be?kt.push({anchor:e,text:n.body}):(Pe=null,Be=e,qt=n.body,Ot=o)}),ze&&!Be&&!Te&&Pe===Ne.id(i.id)&&(Pe=null,Ee&&Uo(!1),$e=!0,Pi())}}async function zi(){let e=Yt;Yt=null,e&&await e()}let ji=new Map;function Mi(){let t=Ue;Ue=void 0,Rt?.(!0),Rt=void 0;let n=Jt.activeElement,i=n?.dataset.focusKey,a=i?n?.selectionStart:null,r=Zt.querySelector(".messages")?.scrollTop??0,s=Zt.querySelector(".account-dialog")?.scrollTop??0,d=Te?"account":Be?"draft":Pe,l=Zt.firstElementChild,c=Ct!==d,p=l?.getBoundingClientRect(),u=new Map([...l?.querySelectorAll("[data-comment]")??[]].map(e=>[e.dataset.comment,e.querySelector(".message-reaction")]));if(l&&c&&"account"===Ct&&!matchMedia("(prefers-reduced-motion: reduce)").matches){let e=b("div","account-layer");e.inert=!0,e.setAttribute("aria-hidden","true"),e.append(l),ce?tn.append(e):Jt.append(e),Wt.set(e,t),t=void 0;let n=e.animate([{opacity:1},{opacity:0}],{duration:150,fill:"forwards"});l.animate([{transform:"none"},{transform:"translateY(4px) scale(.99)"}],{duration:150,fill:"forwards"}),n.finished.catch(()=>{}).finally(()=>{e.remove(),Wt.get(e)?.(),Wt.delete(e)})}if(l&&c&&"account"!==Ct&&!matchMedia("(prefers-reduced-motion: reduce)").matches){let e=getComputedStyle(l),t={opacity:e.opacity,transform:e.transform};l.getAnimations().forEach(e=>e.cancel()),l.inert=!0,l.setAttribute("aria-hidden","true"),l.style.pointerEvents="none",Jt.append(l),Wt.set(l,void 0),l.animate([t,{opacity:0,transform:"translateY(4px) scale(.99)"}],{duration:150,easing:"cubic-bezier(.22,1,.36,1)",fill:"forwards"}).finished.catch(()=>{}).finally(()=>{l.remove(),Wt.delete(l)})}if(t?.(),Zt.replaceChildren(),Ct=d,Zt.classList.toggle("account-layer",Te),!Be&&!Pe&&!Te)return void fo();Zt.classList.toggle("account-layer",Te);let h=b("section",Te?"dialog account-dialog":"dialog");Te&&h.setAttribute("aria-modal","false"),h.setAttribute("role","dialog"),h.setAttribute("aria-label",Te?"Reviewer account":Be?"New comment":"Comment thread");let m=b("div","dialog-head row between"),x=b("div","row"),y=He.find(e=>e.id===Pe)??null;if(y&&!Te){let t=(e,t)=>({label:e,icon:"Copy link"===e?"link":"Copy selector"===e?"code":"comment",onSelect:()=>bo(async()=>{await navigator.clipboard.writeText(t()),mo("Copied")})}),n=y.anchor.source,o=n?E.sourceUrl?.(n,E.branch)??`https://github.com/${E.repo}/blob/${encodeURIComponent(E.branch)}/${n.split("/").map(encodeURIComponent).join("/")}`:"",i=e("Comment actions",[...yi(y.comments[0],y),...o&&/^(https?:|vscode:|cursor:)/.test(o)?[{label:"Open source",icon:"code",onSelect:()=>window.open(o,"_blank","noopener,noreferrer")}]:[],t("Copy link",()=>{let e=new URL(y.page,location.origin);return e.searchParams.set("comment",y.id),e.href}),t("Copy feedback",()=>[`Repository: ${E.repo}`,`Branch: ${E.branch}`,`Page: ${new URL(y.page,location.origin).href}`,`Target: ${y.anchor.selector||"Page position"}`,...y.anchor.source?[`Source: ${y.anchor.source}`]:[],...y.anchor.text?[`Element text: ${y.anchor.text}`]:[],"",...y.comments.map(e=>`${e.author.name}: ${e.body}`)].join("\n")),t("Copy selector",()=>y.anchor.selector)]);x.append(i);let a=w(y.resolved?"Reopen comment":"Resolve comment",()=>gi(y,uo(y.anchor)),"icon","check");a.disabled=!fi(),x.append(a)}if(x.append(w(Te?"Close account":"Close comment",Fo,"icon","close")),m.append(x),y||Te?h.append(m):h.append(w("Close comment",Fo,"draft-close icon","close")),Te){let e=b("form","account");if(ke.user){Ze??={name:ke.user.name,avatarUrl:ke.user.avatarUrl??"",accentColor:ke.user.accentColor??f};let t=Ze,n=v({...ke.user,...t}),o=b("div","account-summary"),i=b("span","account-status");ke.user.verified?(i.append(document.createTextNode("Connected with ")),ke.user.id.startsWith("google:")&&i.append(k()),i.append(document.createTextNode(ke.user.id.startsWith("google:")?"Google":"GitHub"))):i.textContent="Guest account";let a=w("Update profile photo",()=>d.click(),"account-avatar-button");a.replaceChildren(n),o.append(a,b("h2","","Your profile"),i),e.append(o);let r=b("label","account-name-label","Display name"),s=b("input");s.value=t.name,s.name="name",s.autocomplete="name",s.required=!0,s.maxLength=60,s.dataset.focusKey="profile-name",s.addEventListener("input",()=>{t.name=s.value,rt(t)}),s.addEventListener("blur",()=>{rt(t,!0)}),r.append(s);let d=b("input");d.type="file",d.accept="image/png,image/jpeg,image/webp",d.hidden=!0,d.setAttribute("aria-label","Choose profile photo"),d.addEventListener("change",()=>bo(async()=>{let e=d.files?.[0];if(!e)return;if(e.size>10485760)throw new Error("Choose a photo under 10 MB.");let n=await createImageBitmap(e),o=document.createElement("canvas");o.width=o.height=128;let i=o.getContext("2d"),a=Math.min(n.width,n.height);i.drawImage(n,(n.width-a)/2,(n.height-a)/2,a,a,0,0,128,128),n.close();let r=.8;do{t.avatarUrl=o.toDataURL("image/jpeg",r),r-=.15}while(t.avatarUrl.length>12e3&&r>.1);if(t.avatarUrl.length>12e3)throw new Error("Choose a smaller photo.");rt(t,!0),Mi()})),o.append(d);let l=function(e,t){let n=b("div","account-accent-mount");n.style.minHeight="62px";let o,i=!1,a=async()=>{n.replaceChildren(),n.setAttribute("aria-busy","true");try{let a=await import("./accent-picker-HSUCA4KE.js");if(i)return;let r=a.accentPicker(e,t);o=r.destroy,n.replaceChildren(r.element)}catch{i||n.replaceChildren(w("Load accent colors",()=>{a()},"secondary"))}finally{n.removeAttribute("aria-busy")}};return a(),{element:n,destroy:()=>{i=!0,o?.()}}}(t.accentColor,e=>{t.accentColor=e,g(n,e),rt(t)});if(Ue=l.destroy,e.append(r,l.element),E.onboarding){let t=E.onboarding;e.append(xo(b("section","onboarding-panel"),import("./onboarding-YA63RUKK.js").then(({onboardingPanel:e})=>e(ke,t))))}else e.append(de?Vn("sidebar","Sidebar",[["mobile","Floating sidebar"]],"mobile",()=>{}):ie?Vn("sidebar","Sidebar",[["edge","Floating"],["background","Frame"]],re,Jn):b("p","muted","Floating sidebar · Set pageRoot for Frame.")),me&&e.append(function(){let e=Vn("channel","Comments",[["local","Local development"],["shared","Site comments"]],ve,Gn);return e.append(b("p","muted","Separate channels, both saved to this project.")),e}()),e.append(wo());if(ke.user?.verified&&!E.onboarding?.code&&!E.onboarding?.claimKey&&!E.onboarding?.invite){let t=b("div");e.append(t),import("./onboarding-YA63RUKK.js").then(({projectManagement:n})=>{t.isConnected&&t.replaceWith(n(ke,E.onboarding?.workspace,t=>{if(t)Pe=null,Ne.replace([],Ne.revision),e.querySelector(".account-usage")?.remove();else{let t=E.onboarding?.workspace?`usage?workspace=${encodeURIComponent(E.onboarding.workspace)}`:"usage";e.querySelector(".account-usage")?.replaceWith(wo(t)),Eo().catch(()=>{})}}))})}e.addEventListener("submit",e=>{e.preventDefault(),rt(t,!0)});let c=b("div","account-session");c.append(w("Sign out",()=>bo(async()=>{if(Ne.busy||Re)return void mo("Wait for your changes to save.");clearTimeout(et),it=null;let e=ke.logout();Qn(),Ze=null,nt=null,Pi();try{await e}finally{Qn(),bo(Eo),Pi()}}),"secondary")),e.append(c),!ke.user.verified&>&&e.append(st()),!ke.user.verified&&xt&&e.append(w("Sign in with GitHub",()=>bo(()=>ki()),"primary"))}else{if(e.append(b("h2","",E.onboarding?"Set up komo":"Leave comments")),E.onboarding?.inProject){e.append(b("p","","Connect komo to start leaving feedback on this site. One site per line."));let t=b("label","account-name-label","Production and preview sites"),n=b("textarea");n.rows=2,n.placeholder="https://your-site.com",n.value=ft,n.dataset.focusKey="setup-sites",n.addEventListener("input",()=>{ft=n.value}),t.append(n),e.append(t);let i=w("Connect komo",()=>bo(async()=>{if(!mt){mt=!0,i.disabled=!0;try{let e=await function(e,t,n=[location.origin]){let o=new URL(e.endpoint),i=new URL("/setup/connect",o);i.searchParams.set("code",e.onboarding.code),i.searchParams.set("origin",location.origin),i.searchParams.set("sites",JSON.stringify(n));let a=window.open("about:blank","komo-connect","popup,width=600,height=720");return a?new Promise((n,r)=>{let s=()=>{window.removeEventListener("message",c),t.removeEventListener("abort",l),clearInterval(p),clearTimeout(u),a.close()},d=e=>{s(),r(new Error(e))},l=()=>d("Setup closed. Reopen komo to try again."),c=t=>{let i=t.data;t.origin!==o.origin||t.source!==a||"komo:setup"!==i?.type||i.code!==e.onboarding?.code||"string"!=typeof i.project||!/^komo_[a-f0-9]{32}$/.test(i.project)||"string"!=typeof i.repo||"string"!=typeof i.token||!i.token||!0!==i.user?.verified||"string"!=typeof i.user.id||!i.user.id.startsWith("google:")||"string"!=typeof i.user.name||(s(),n(i))},p=window.setInterval(()=>{a.closed&&d("Sign-in closed. Try connecting again.")},1e3),u=window.setTimeout(()=>d("Setup expired. Run komo init again."),6e5);window.addEventListener("message",c),t.addEventListener("abort",l,{once:!0}),t.aborted?l():a.location.href=i.href}):Promise.reject(new Error("Allow popups to connect komo."))}(E,Ce.signal,function(e,t){let n=e.split(/\s+/).filter(Boolean).map(e=>{let t;try{t=new URL(e)}catch{throw new Error("Enter a full HTTPS site address, such as https://your-site.com.")}if("https:"!==t.protocol||t.username||t.password)throw new Error("Use HTTPS addresses for production and preview sites.");return t.origin}),o=[...new Set([t,...n])];if(o.length>10)throw new Error("Connect up to ten sites at a time.");return o}(ft,location.origin));if(Se)return;(function(e,t){try{localStorage.setItem(C(e),JSON.stringify({project:t.project,repo:t.repo}))}catch{}})(E,e),E={...E,project:e.project,repo:e.repo,onboarding:void 0},ke=new o(E),ke.save(e),Te=!1,Ze=null,Ct=null,await ea(),Pi(),mo("komo is connected. Select an element to leave feedback.")}finally{mt=!1,Se||Pi()}}}),"primary");i.disabled=mt,e.append(i)}if(wt){let t=b("label","account-name-label","Your name"),n=b("input");n.name="name",n.autocomplete="name",n.placeholder="Your name",n.required=!0,n.maxLength=60,n.value=Ht,n.dataset.focusKey="account-name",n.addEventListener("input",()=>Ht=n.value),t.append(n),e.append(t);let o=w("Continue",()=>{},"primary");o.type="submit",o.disabled=Re,e.append(o)}wt&&(gt||xt)&&e.append(b("div","account-divider","or")),gt&&e.append(st()),xt&&e.append(w("Continue with GitHub",()=>bo(()=>ki()),"secondary")),e.addEventListener("submit",e=>{e.preventDefault(),bo(async()=>{await async function(e){if(!Re){Re=!0,Qe="",Mi();try{for(await e();We&&!Se;)await new Promise(e=>setTimeout(e,20));await Eo()}finally{Re=!1,Pi()}}}(async()=>{await ke.guest(Ht),Te=!1}),await zi()})})}h.append(e)}else if(Be)h.append(Ei(null));else if(y){let e=b("div","messages");for(let t of y.comments)e.append(vi(t,y));if(h.append(e),Y){let e=Ci(y.tags??[],e=>Si(y,{tag:e}),e=>Si(y,{untag:e}));e.classList.add("thread-tags"),h.append(e)}h.append(Ei(y))}else h.append(b("div","empty","This comment is no longer available."));if(Zt.append(h),Te&&c&&!matchMedia("(prefers-reduced-motion: reduce)").matches&&(Zt.animate([{opacity:0},{opacity:1}],{duration:250,easing:"ease-out"}),h.animate([{opacity:0,transform:"translateY(8px) scale(.97)"},{opacity:1,transform:"none"}],{duration:250,easing:"cubic-bezier(.22,1,.36,1)"})),!Te){let e=b("div","comment-drag-handle");e.setAttribute("aria-hidden","true"),h.prepend(e),_(h,e,e=>{Ct&&St.set(Ct,e),Li()},Ce.signal,()=>Et.stop())}if(Li(),!Te&&!matchMedia("(prefers-reduced-motion: reduce)").matches){let e=h.getBoundingClientRect(),t=pn??(c?null:p);t&&(pn||Math.abs(t.height-e.height)>1||Math.abs(t.width-e.width)>1)?h.animate([{left:`${t.left}px`,top:`${t.top}px`,width:`${t.width}px`,height:`${t.height}px`,opacity:1},{left:`${e.left}px`,top:`${e.top}px`,width:`${e.width}px`,height:`${e.height}px`,opacity:1}],{duration:250,easing:"cubic-bezier(.22,1,.36,1)"}):c&&h.animate([{opacity:0,transform:"translateY(6px) scale(.97)"},{opacity:1,transform:"none"}],{duration:250,easing:"cubic-bezier(.22,1,.36,1)"});for(let e of h.querySelectorAll("[data-comment]")){let t=e.querySelector(".message-reaction"),n=u.get(e.dataset.comment),o=e.dataset.comment;t&&n&&n.dataset.reactions!==t.dataset.reactions&&ji.set(o,{from:n,to:t.dataset.reactions,started:performance.now()});let i=ji.get(o),a=i?performance.now()-i.started:470;if(t&&i&&a<470&&i.to===t.dataset.reactions){let e=b("span","reaction-leaving");e.setAttribute("aria-hidden","true");for(let t of i.from.children){if(t.classList.contains("reaction-leaving"))continue;let n=t.cloneNode(!0);e.append(n)}let n=[...t.children];t.append(e);let r=e.animate([{opacity:1,transform:"scale(1)"},{opacity:0,transform:"scale(.2, .35)"}],{duration:110,easing:"ease-in",fill:"forwards"});r.currentTime=a,r.finished.then(()=>e.remove()).catch(()=>e.remove());for(let e of n){let t=e.animate([{opacity:0,transform:"scale(.25, .4)",offset:0},{opacity:1,transform:"scale(1.16, .92)",offset:.38},{opacity:1,transform:"scale(.95, 1.07)",offset:.6},{opacity:1,transform:"scale(1.025, .985)",offset:.8},{opacity:1,transform:"scale(1)",offset:1}],{duration:380,delay:90,easing:"ease-in-out",fill:"backwards"});t.currentTime=a,t.finished.then(()=>{ji.get(o)===i&&ji.delete(o)}).catch(()=>{})}}}}pn=null;let S=h.querySelector(".messages");if(S&&(S.scrollTop=r),Te&&!c&&(h.scrollTop=s),i){let e=h.querySelector(`[data-focus-key="${i}"]`);e&&(e.focus({preventScroll:!0}),null!=a&&e.setSelectionRange(a,a))}}function Li(){let e=Math.min(window.innerHeight,window.visualViewport?.height??window.innerHeight),t=Zt.firstElementChild;if(!t||Te)return;if(de&&t.querySelector("textarea:focus")){let n=window.visualViewport?.offsetTop??0;t.style.maxHeight=`${Math.max(0,e-24)}px`;let o=function(e,t,n,o,i){return{x:Math.max(12,(e-o)/2),y:n+Math.max(12,(t-i)/2)}}(window.innerWidth,e,n,t.offsetWidth,t.offsetHeight);return Et.place(Ct,t,o.x,o.y,!0),t.style.bottom="auto",t.style.transformOrigin="bottom center",void fo()}t.style.maxHeight="";let n=Be??He.find(e=>e.id===Pe)?.anchor,o=$t?.id===Pe?$t:n?(()=>{let e=Ti(n);if(!e.attached)return null;let t=Pe&&Qt.querySelector(`[data-thread="${CSS.escape(Pe)}"]`);return t?Wi(t,e):e})():null,i=$t?.id===Pe,a=()=>{t.style.transformOrigin=!o||o.x<t.offsetLeft+t.offsetWidth/2?"top left":"top right"},r=!i&&Ct&&St.get(Ct);if(r){let n=L(r,t.offsetWidth,t.offsetHeight,document.documentElement.clientWidth,e);return Et.place(Ct,t,n.x,n.y,i),a(),void fo()}let s=(window.innerWidth-354)/2,d=e-450;o&&(s=o.x+20,d=o.y-28);let l=Ee&&!de?396:12;o&&s+t.offsetWidth>window.innerWidth-l&&(s=o.x-t.offsetWidth-20),Et.place(Ct,t,Math.max(12,Math.min(s,window.innerWidth-t.offsetWidth-l)),Math.max(12,Math.min(d,e-t.offsetHeight-92)),i),a(),fo()}function Ai(){clearTimeout(zn),Ze=null,$e=!1;let e=de;e&&!Ee&&Uo(!0),zn=0,!(Se||e&&!Ee)&&(Te=!0,Pi(),queueMicrotask(()=>{if(!Te)return;let e=de,t=e?Zt.querySelector(".account-dialog"):Zt.querySelector("input,button");e&&t&&(t.tabIndex=-1),t?.focus({preventScroll:!0})}))}let _i=le,Ti=pe;function Ri(e,t){return document.elementsFromPoint(e,t).find(e=>e!==Kt&&!Kt.contains(e))??null}function Wi(e,t){if(!e.closest(".pin-stack")||e.dataset.dragging)return t;let n=e.getBoundingClientRect();return{x:n.left+("right"===e.dataset.pointer?25:9),y:n.top+28}}function qi(e,t,n){let o=null,i=!1,a=n;ke.user&&(ke.user.verified||t.comments[0]?.author.id===ke.user.id)&&(e.style.cursor="grab"),e.addEventListener("pointerdown",r=>{0!==r.button||Re||!ke.user||!ke.user.verified&&t.comments[0]?.author.id!==ke.user.id||(a={...n,...Wi(e,n)},o={x:r.clientX,y:r.clientY},i=!1,e.setPointerCapture(r.pointerId))}),e.addEventListener("pointermove",n=>{if(!o)return;let r=n.clientX-o.x,s=n.clientY-o.y;!i&&Math.hypot(r,s)<5||(i||(e.dataset.dragging="true",e.style.position="fixed",e.style.margin="0",bt=t.id,sn=!0,un(),Pe===t.id&&(Et.stop(),Pe=null,Pt=null,Mi())),i=!0,e.dataset.pointer=$({...a,x:a.x+r,y:a.y+s},window.innerWidth),e.style.left=`${a.x+r}px`,e.style.top=`${a.y+s}px`,$t={id:t.id,x:a.x+r,y:a.y+s},St.delete(t.id),Li())}),e.addEventListener("click",e=>{i&&(e.preventDefault(),e.stopImmediatePropagation())},!0),e.addEventListener("pointerup",e=>{if(!o)return;let r=a.x+e.clientX-o.x,s=a.y+e.clientY-o.y;if(o=null,bt=null,!i)return;$t={id:t.id,x:r,y:s},Li();let d=Oi(r,s);if(!d)return $t=null,Li(),Zo="",void ii();let l=se(d,{x:r,y:s},{x:r+n.width,y:s+n.height},E.source);l.unstacked=!0,bo(async()=>{try{$t=null,await Xe(De(t.id,e=>({...e,anchor:l})),async e=>{await ke.request(`threads/${e(t.id)}`,"PATCH",{anchor:l})})}finally{$t=null,Li(),Zo="",ii()}})}),e.addEventListener("pointercancel",()=>{$t=null,Li(),o=null,bt=null,Zo="",ii()})}function Oi(e,t){let n=Ri(e,t);if(!n||!te.contains(n)||n===te)return null;let o=n.closest("button,a,input,textarea,select,[role=button],[role=link],[data-comment-anchor],h1,h2,h3,h4,h5,h6,p,li,figure,svg,canvas,img,video")??n,i=o.closest("button,a,[role=button],[role=link]");return i&&te.contains(i)?i:o}function Hi(){if(!$e&&!Be||Bi||Be&&Be.width>0&&Be.height>0)return hn.style.opacity="0",void(!$e&&!Be&&(mn=null,fn=null));if(Be&&(mn=_i(Be)),$e&&fn&&(mn=Oi(fn.x,fn.y)),!mn?.isConnected)return void(hn.style.opacity="0");let e=mn.getBoundingClientRect(),t=$n?te.getBoundingClientRect():{left:0,top:0,right:window.innerWidth,bottom:window.innerHeight},n=Math.max(0,t.left,e.left),o=Math.max(t.top,e.top),i=Math.min(t.right,e.right),a=Math.min(t.bottom,e.bottom);i<=n||a<=o?hn.style.opacity="0":Object.assign(hn.style,{opacity:"1",left:`${n}px`,top:`${o}px`,width:i-n+"px",height:a-o+"px",borderRadius:getComputedStyle(mn).borderRadius})}function Pi(){if(Se)return;if(Kt.classList.toggle("design-active",Le),Te&&!Ee)return void(U(window.innerWidth,window.innerHeight)?(Te=!1,Ai()):Uo(!0));To();let e=!!Be&&!Te&&U(window.innerWidth,window.innerHeight);Kt.classList.toggle("mobile-composing",e),tn.inert=de?!Ee||Te:ce?!Ee:Te,(Pe||Be||$e||je||Te)&&un(!0),Gt.hidden=!$e,Hi(),nn.replaceChildren(),Qo(),en.inert=Le,ii(),xi(),Mi(),ce&&Te?Zt.parentElement!==tn&&tn.append(Zt):Zt.parentElement===tn&&an.before(Zt);let t=tn.querySelector(".panel");t&&(t.inert=Le,t.setAttribute("aria-hidden",String(Le)),t.hidden=Le),Le&&Ye?.mountPanel(tn)}let Bi=null,Yi=null;function Ii(e,t,n=t){un(),Be=se(e,t,n,E.source),mn=e,$e=!1,Pe=null,Te=!1,Pt=null,Qe="",Pi(),Jt.querySelector('[data-focus-key="body"]')?.focus({preventScroll:!0}),Li()}function Ni(){if(Xt||Se||document.hidden)return;let e=ao();!Be&&!Pe&&!$e&&!so&&(je||!He.some(t=>t.page===e&&!t.resolved))||(Xt=requestAnimationFrame(()=>{Xt=0,ii(),Li(),fo(),Hi()}))}Gt.addEventListener("pointerdown",e=>{if(0!==e.button)return;e.preventDefault(),e.stopPropagation();let t=Oi(e.clientX,e.clientY);t&&(mn=t,fn=null,hn.style.opacity="0",Bi={x:e.clientX,y:e.clientY,element:t,pointerId:e.pointerId},Gt.setPointerCapture(e.pointerId),Yi=b("div","selection"),Jt.append(Yi))}),Gt.addEventListener("pointermove",e=>{if(!Bi||!Yi)return fn={x:e.clientX,y:e.clientY},void(gn||(gn=requestAnimationFrame(()=>{gn=0,Hi()})));Object.assign(Yi.style,{left:`${Math.min(Bi.x,e.clientX)}px`,top:`${Math.min(Bi.y,e.clientY)}px`,width:`${Math.abs(Bi.x-e.clientX)}px`,height:`${Math.abs(Bi.y-e.clientY)}px`})}),Gt.addEventListener("pointerup",e=>{if(!Bi)return;let t=Bi;Yi?.remove(),Yi=null,Bi=null,Ii(t.element,t,{x:e.clientX,y:e.clientY})}),Gt.addEventListener("pointerleave",()=>{Bi||Be||(fn=null,mn=null,hn.style.opacity="0")}),Gt.addEventListener("pointercancel",()=>{Bi=null,Yi?.remove(),Yi=null,fn=null,mn=null,hn.style.opacity="0"}),document.addEventListener("scroll",e=>{sn=!0,un();let t=e.target;t===Kt||!t||t instanceof Node&&t.getRootNode()===Jt||!((t===document?document.scrollingElement:t)instanceof Element)||(bt||(ni=!0,Qt.dataset.scrolling="true",clearTimeout(oi),oi=window.setTimeout(()=>{Se||(Zo="",ii(!0),ni=!1,delete Qt.dataset.scrolling)},180)),Ni())},{capture:!0,passive:!0,signal:Ce.signal});for(let e of["focusin","focusout"])Zt.addEventListener(e,()=>requestAnimationFrame(Li),{signal:Ce.signal});window.visualViewport?.addEventListener("scroll",()=>{U(window.innerWidth,window.innerHeight)&&(To(),(Te||Be||Pe)&&Ni())},{signal:Ce.signal}),window.visualViewport?.addEventListener("resize",()=>{U(window.innerWidth,window.innerHeight)&&(To(),Ni())},{signal:Ce.signal}),window.addEventListener("resize",()=>{(function(){let e=U(window.innerWidth,window.innerHeight);e!==de&&(Jt.append(tn),Kn(),Do(!0),Yo(),qo(),de=e,e||(en.style.translate="",dt||(en.style.bottom="")),ce=!e&&"edge"===re,tn.removeAttribute("style"),Xn(),Ao="",Pi())})(),To(),de||Qo(),Ni()},{signal:Ce.signal}),document.addEventListener("keydown",e=>{jn=!0,queueMicrotask(()=>{jn=!1});let t=e.composedPath()[0];if((Te||de&&Ee)&&"Tab"===e.key){let t=[...(Te?Zt:Jt).querySelectorAll("button:not(:disabled),input:not(:disabled):not([type=hidden]),select:not(:disabled),textarea:not(:disabled),summary,a[href],[tabindex]")].filter(e=>e.tabIndex>=0&&e.getClientRects().length>0&&!e.closest("[inert]")&&(Te||!de||!!e.closest(".panel,.toolbar"))),n=t[0],o=t.at(-1);!e.shiftKey||Jt.activeElement!==n&&t.includes(Jt.activeElement)?!e.shiftKey&&(Jt.activeElement===o||!t.includes(Jt.activeElement))&&(e.preventDefault(),n?.focus()):(e.preventDefault(),o?.focus())}let n=t instanceof HTMLElement&&(t.matches("input,textarea,select")||t.isContentEditable);if("Escape"!==e.key){if(!n){if(Me&&be(e,q.restore))return e.preventDefault(),void Jo();E.onboarding||(be(e,q.comment)?(e.preventDefault(),$o(!ze)):be(e,q.browse)?(e.preventDefault(),$o(!1)):H&&be(e,q.design)&&(e.preventDefault(),jo(!Le)))}}else $e||Be||Pe||Te?Fo():Ee&&Uo(!1)},{signal:Ce.signal}),document.addEventListener("pointerdown",e=>{let t=e.composedPath(),n=t.some(e=>e instanceof Element&&e.getRootNode()===Jt&&e.matches("button,input,textarea,summary,[role=menu],.emoji-menu,.emoji-keyboard,.floating-notice"));0===e.button&&(Pe||Be)&&(!Be||!U(window.innerWidth,window.innerHeight))&&!Te&&!t.includes(Zt)&&!t.includes(en)&&!t.includes(Qt)&&!n&&(Be&&qt.trim()&&(vt={anchor:Be,text:qt}),Fo());for(let t of Jt.querySelectorAll(".comment-menu[open]"))e.composedPath().includes(t)||(t.open=!1)},{signal:Ce.signal});let Di=new ResizeObserver(Ni);Di.observe(te);let Xi=0,Ui=new MutationObserver(()=>{if(Be||Pe||$e||so)return Ni();Xi||(Xi=window.setTimeout(()=>{Xi=0,Ni()},80))});function Fi(){Se||ao()===It||(It=ao(),vt=null,Pe=null,Be=null,Pi())}Ui.observe(te,{childList:!0,subtree:!0,characterData:!0}),Zt.addEventListener("pointerdown",e=>{Te&&e.target===Zt&&Fo()});let Ki=()=>setTimeout(Fi);function Ji(){let e=new o(E);return!(e.token===ke.token||ke.transient&&!e.token)&&(ke.cancelReads(),ke=e,ut=!1,pt=null,Ge="Connecting",gt=xt=wt=yt=ht=!1,Be=vt=null,qt="",Ot=[],Ft.clear(),kt.length=0,it=Ze=nt=null,tt++,clearTimeout(et),Qn(),Pi(),bo(ea),!0)}window.addEventListener("popstate",Ki,{signal:Ce.signal}),window.navigation?.addEventListener("navigatesuccess",Ki,{signal:Ce.signal}),window.addEventListener("storage",e=>{e.storageArea===localStorage&&e.key===ke.sessionKey&&e.newValue!==ke.token&&Ji()},{signal:Ce.signal}),window.addEventListener("focus",()=>{Ji()||vo?.wake()},{signal:Ce.signal});let Vi=!1;te.addEventListener("pointerdown",e=>{Vi=0===e.button&&Ee&&$n&&!ce&&!$e&&!Te&&!Pe&&!Be},{capture:!0,signal:Ce.signal}),te.addEventListener("click",e=>{!Vi||!Ee||ce||(Vi=!1,e.preventDefault(),e.stopPropagation(),Uo(!1))},{capture:!0,signal:Ce.signal}),vo=function(e){let t,n=!1,o=!1,i=!1,a=0,r=()=>{if(clearTimeout(t),o||!e.enabled())return;let n=e.active()?Math.min(Math.max(15e3,e.interval),e.interval*2**Math.min(a,3)):Math.max(6e4,e.interval);t=setTimeout(s,n*(.9+.2*Math.random()))},s=async()=>{if(!o&&e.enabled()){if(n)return void(i=!0);n=!0;try{a=await e.read()?0:a+1}catch{a++}finally{n=!1,i?(i=!1,d()):r()}}};function d(e=!0){a=0,clearTimeout(t),e?s():n||r()}return{wake:d,stop(){o=!0,clearTimeout(t)}}}({interval:Math.max(2e3,E.pollInterval??4e3),enabled:()=>!Se&&!document.hidden&&!1!==navigator.onLine&&!E.onboarding,active:()=>Ee||Te||$e||!!Be||!!Pe,read:async()=>(Fi(),ut?Eo():ea())});for(let e of["online","offline"])window.addEventListener(e,()=>vo?.wake(),{signal:Ce.signal});Kt.addEventListener("click",()=>vo?.wake(!1),{signal:Ce.signal}),Kt.addEventListener("keydown",()=>vo?.wake(!1),{signal:Ce.signal}),document.addEventListener("visibilitychange",()=>{document.hidden?(Ui.disconnect(),clearTimeout(Xi),Xi=0):(Ui.observe(te,{childList:!0,subtree:!0,characterData:!0}),Ni()),(document.hidden||!Ji())&&vo?.wake()},{signal:Ce.signal});let Gi={destroy(){if(Se)return;Se=!0,vo?.stop(),Ye?.destroy(),ke.cancelReads(),Kn(),di?.(),cancelAnimationFrame(Mo),clearTimeout(Xi),clearTimeout(oi),clearTimeout(zn),clearTimeout(ri),ji.clear(),Et.stop(),bo(at),Ue?.(),Rt?.(!0);for(let[e,t]of Wt)t?.(),e.getAnimations().forEach(e=>e.cancel()),e.remove();Wt.clear(),wn?.stop(),_n?.stop(),Do(!0),Ce.abort(),clearTimeout(Nt),clearTimeout(Dt),clearTimeout(Ut),cancelAnimationFrame(Xt),cancelAnimationFrame(gn),cancelAnimationFrame(lo),un(),Di.disconnect(),Ui.disconnect();let e=$n?te.scrollTop*io():window.scrollY/Lo;for(let[e,t]of Cn)Object.assign(e.style,t);Cn.clear(),($n||!ce)&&(document.documentElement.style.overflow=kn,Object.assign(te.style,yn),Object.assign(document.body.style,vn),document.documentElement.style.background=Sn,window.scrollTo({top:e,behavior:"instant"})),oo.disconnect(),xn.unmount(),Kt.remove(),we.delete(document)},comment(e){let t=()=>{if(Se||!e.isConnected)return;let t=e.getBoundingClientRect();!t.width||!t.height||Ii(e,{x:t.left+t.width/2,y:t.top+t.height/2})};Ee?(Uo(!1),wn&&Bn?wn.finished.then(t):t()):t()},open(){Se||(Jo(),Uo(!0))},close(){Se||(Fo(),Uo(!1))},async refresh(){await Eo()}};we.set(document,{scope:J,controller:Gi});try{Mn=!E.onboarding&&"1"===localStorage.getItem(Ln)}catch{}To();let Qi=E.onboarding?null:ke.cached();qe||=null!==Qi;let Zi=Mn;if(Mn=!0,Qi&&Ne.replace(Co(Qi)),Pi(),ce&&(tn.style.transition="none",Dn(),tn.offsetWidth,tn.style.transition=""),Mn=Zi,Mn&&(Uo(!0),Mn=!1,!matchMedia("(prefers-reduced-motion: reduce)").matches))for(let e of[Kt,$n?te:null])e?.animate([{opacity:0},{opacity:1}],{duration:200,easing:"cubic-bezier(0.22, 1, 0.36, 1)"});async function ea(){let e,t=ke,n=t.token;try{await t.restore()}catch{}if(Se||t!==ke)return;n!==t.token&&Qn(),Qo(),Te&&Mi();let o=Eo();o.catch(()=>{});try{e=await t.request("config")}catch(e){if(Se||t!==ke||e instanceof DOMException&&"AbortError"===e.name)return;let n=K(e),o=pt?.detail!==n.detail;throw pt=n,Ge="Offline",o&&Pi(),e}if(Se||t!==ke)return;ut=!0,gt=!!e.google,xt=e.github,wt=e.guests,yt=e.guestResolve,ht=!!e.private,Pi();let i=await o;if(Se||t!==ke)return;let a=new URL(location.href).searchParams.get("comment"),r=He.find(e=>e.id===a);return r&&(Ee||Uo(!0),Vo(r)),Pi(),i}return E.onboarding?.inProject||bo(()=>ea().finally(()=>vo?.wake(!1))),Gi}export{E as a,ye as b,ve as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./chunk-I7AUKTXE.js";var e="script,style,svg,input,textarea,select,[data-private],[data-sensitive]";function t(e){let t=document.createTreeWalker(e,NodeFilter.SHOW_TEXT),n=[];for(;t.nextNode();)n.push(t.currentNode);return n}function n(e,t,n){if(n&&e.childElementCount)for(let[e,t]of n)e.data=t;else e.textContent=t}function a(){let e=new Map,t=new Map,a=[];return{record(n){!n.reactProp&&n.before!==n.after&&(e.has(n.element)||(e.set(n.element,n.before),t.set(n.element,n.nodes)),a.push(n))},remember(t,n){e.has(t)||e.set(t,n)},original:t=>e.get(t),reconcile(t,n){e.get(t)===n&&e.delete(t)},reset(r){let i=e.get(r);void 0!==i&&n(r,i,t.get(r)),e.delete(r);for(let e=a.length-1;e>=0;e--)a[e].element===r&&a.splice(e,1)},proposal(t){let n=e.get(t),a=t.textContent??"";return void 0!==n&&n!==a?`Proposed inline text change (preview only)\n- Text: ${JSON.stringify(n)} → ${JSON.stringify(a)}\n- Source markup is unchanged; refresh resets this preview.`:void 0},restoreAll(){for(let[a,r]of e)n(a,r,t.get(a))},undo(){let t=a.pop();return t?(n(t.element,t.before,t.nodes),e.get(t.element)===t.before&&e.delete(t.element),t.element):null}}}function r(e){let t=a(),n=null,r=!1;function i(t=!1){let a=n;a&&(n=null,a.finish(t),e.onChange())}return{get element(){return n?.element??null},get busy(){return r},isEditing:e=>!!n&&n.element===e,toggle:async function(a){let l=e.selected();if(n&&n.element===l)return void i();if(!l||!e.active()||r||n)return;let s=o(l);if(s)e.status.textContent=s;else{r=!0,e.status.textContent="Loading inline text editor…",e.onChange();try{let r=await d(l,{loadReactBridge:async()=>await import("./react-props-panel-XSMDR2CY.js"),onFinish(n,a){a||n.reactProp||n.before===n.after?n.reactProp&&(e.status.textContent="React state preview · resets on refresh"):(t.record(n),e.onCommit(l),e.status.textContent="Text preview · resets on refresh")}});r?e.active()&&e.selected()===l?(n=r,a&&function(e,t,n){let a=document.caretPositionFromPoint?.(t,n),r=a?document.createRange():document.caretRangeFromPoint?.(t,n);if(a&&r&&r.setStart(a.offsetNode,a.offset),!r||!e.contains(r.startContainer))return;r.collapse(!0);let i=document.getSelection();i?.removeAllRanges(),i?.addRange(r)}(l,a.clientX,a.clientY),e.status.textContent=l.hasAttribute("data-komo-text-prop")?"React state preview · resets on refresh":"Editing text · preview only"):r.finish(!0):e.status.textContent="This text couldn't be connected to its component prop."}catch{e.status.textContent="Inline text editing is unavailable."}finally{r=!1,e.onChange()}}},finish:i,handleKey(e){if(!n||!e.composedPath().includes(n.element)||!n.handleKey(e))return!1;let t=n.element;return i("Escape"===e.key),t.blur(),!0},hasChanges:e=>void 0!==t.original(e),undo(){let n=t.undo();return e.onChange(),n},reset(n){t.reset(n),e.onChange()},reconcile(n,a){t.reconcile(n,a),e.onChange()},proposal:e=>t.proposal(e),restoreAll(){t.restoreAll()}}}function i(e){let t=r(e);return e.button.addEventListener("click",e=>{t.toggle(e)}),t}function o(n){return n.matches("input,textarea,select")?"Form fields can't be edited as text.":n.matches("script,style,svg,canvas,video,audio,iframe")?"Graphics, media, and frames can't be edited.":n.closest("[data-private],[data-sensitive]")?"This text is marked private, so it stays read-only.":n.closest("[contenteditable]")?"This text is already editable on the page.":t(n).some(t=>t.data.trim()&&!t.parentElement?.closest(e))?null:"No text here. Double-click the text itself."}function l(e){return!o(e)}function s(e){let t=e.textContent??"",n=document.getSelection(),a=n?.rangeCount?n.getRangeAt(0):null;return a&&e.contains(a.commonAncestorContainer)?a.startContainer===e?Math.min([...e.childNodes].slice(0,a.startOffset).reduce((e,t)=>e+(t.textContent?.length??0),0),t.length):a.startContainer.nodeType===Node.TEXT_NODE?Math.min(a.startOffset,t.length):t.length:-1}function c(e,t){let n=e.firstChild,a=document.getSelection();if(!n||!a)return;let r=document.createRange();r.setStart(n,Math.min(t,n.textContent?.length??0)),r.collapse(!0),a.removeAllRanges(),a.addRange(r)}async function d(a,r){if(!l(a))return null;let i=null,o=null;if(a.dataset.komoTextProp&&(i=await r.loadReactBridge(),o=i.beginReactTextEdit(a),!o))return null;let d=o?.before??(a.textContent??"").slice(0,500),u=!o&&a.childElementCount>0,g=u?t(a).map(e=>[e,e.data]):void 0,p=a.getAttribute("role"),f=a.getAttribute("aria-label"),m=a.getAttribute("aria-multiline"),h=a.getAttribute("spellcheck"),x=new AbortController,C=!1;let v=-1,b=new MutationObserver(()=>{v>=0&&c(a,v)}),T=()=>{u||(a.childElementCount&&(a.textContent=a.textContent??""),(a.textContent??"").length>500&&(a.textContent=(a.textContent??"").slice(0,500)),o&&i&&(v=s(a),i.previewReactTextEdit(a,o.propName,a.textContent??"")||(a.textContent=d)))},E=(t,n)=>{let r=t.startContainer;if(r!==t.endContainer||!(r instanceof Text)||!a.contains(r)||r.parentElement?.closest(e))return;let i=t.endOffset-t.startOffset,o=n.replace(/[\r\n]+/g," ").slice(0,Math.max(0,500-(a.textContent??"").length+i));r.replaceData(t.startOffset,i,o);let l=document.createRange();l.setStart(r,t.startOffset+o.length);let s=document.getSelection();s?.removeAllRanges(),s?.addRange(l)};a.addEventListener("beforeinput",e=>{if(v=-1,!u||"insertCompositionText"===e.inputType)return;e.preventDefault();let t=e.getTargetRanges()[0],n=e.inputType;t&&(n.startsWith("delete")||"insertText"===n||"insertReplacementText"===n)&&E(t,n.startsWith("delete")?"":e.data??e.dataTransfer?.getData("text/plain")??"")},{signal:x.signal}),a.addEventListener("input",T,{signal:x.signal}),o&&b.observe(a,{childList:!0,characterData:!0,subtree:!0}),a.addEventListener("paste",e=>{e.preventDefault();let t=e.clipboardData?.getData("text/plain")??"",n=document.getSelection();u?n?.rangeCount&&E(n.getRangeAt(0),t):(function(e,t){let n=s(e);if(n<0)return;let a=e.textContent??"",r=t.slice(0,Math.max(0,500-a.length));e.textContent=a.slice(0,n)+r+a.slice(n),c(e,n+r.length)}(a,t.replace(/[\r\n]+/g," ").slice(0,500)),T())},{signal:x.signal}),a.addEventListener("drop",e=>e.preventDefault(),{signal:x.signal}),a.setAttribute("contenteditable","true"),a.setAttribute("role","textbox"),a.setAttribute("aria-label","Inline text preview"),a.setAttribute("aria-multiline","false"),a.dataset.komoInlineEditing="true",a.spellcheck=!1,a.focus({preventScroll:!0});let R=document.getSelection(),y=document.createRange();return y.selectNodeContents(a),y.collapse(!1),R?.removeAllRanges(),R?.addRange(y),{element:a,finish(e=!1){if(C)return;C=!0,x.abort(),b.disconnect(),!u&&a.childElementCount&&(a.textContent=a.textContent??"");let t=(a.textContent??"").slice(0,500);(function(){a.removeAttribute("contenteditable"),a.removeAttribute("data-komo-inline-editing");for(let[e,t]of[["role",p],["aria-label",f],["aria-multiline",m],["spellcheck",h]])null===t?a.removeAttribute(e):a.setAttribute(e,t)})(),e?(o&&i&&i.cancelReactTextEdit(a,o.propName,d),n(a,d,g)):o&&i&&i.finishReactTextEdit(a,o.propName,d,t),r.onFinish({element:a,before:d,after:t,nodes:g,...o?{reactProp:o.propName}:{}},e)},handleKey:e=>!e.isComposing&&(("Enter"===e.key||"Escape"===e.key)&&(e.preventDefault(),e.stopImmediatePropagation(),!0))}}export{i as bindInlineTextTools,l as canEditText,r as createInlineTextTools,a as createTextPreviewHistory,d as startInlineTextEditor,o as textEditBlocker};
|