@hazem3500/komo 0.9.1 → 0.9.2

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.
Files changed (36) hide show
  1. package/README.md +49 -1
  2. package/dist/{accent-picker-F5UI2NP7.js → accent-picker-OADSUS4S.js} +1 -1
  3. package/dist/{chunk-YZP3KX4Y.js → chunk-62YUEO4G.js} +1 -1
  4. package/dist/chunk-HCGLCO3R.js +1 -0
  5. package/dist/{chunk-JC6FXUNO.js → chunk-JXIYWNFL.js} +1 -1
  6. package/dist/{chunk-Q7WSWLMV.js → chunk-KMYXE4O6.js} +1 -1
  7. package/dist/design-comment-MWNQNKWT.js +1 -0
  8. package/dist/design-comment.d.ts +5 -2
  9. package/dist/design-export-ZHCBPSWY.js +1 -0
  10. package/dist/design-export.d.ts +5 -0
  11. package/dist/design-mode.d.ts +3 -0
  12. package/dist/design-mode.js +1 -1
  13. package/dist/design-system.d.ts +5 -1
  14. package/dist/design-tokens.d.ts +10 -0
  15. package/dist/dom.d.ts +2 -0
  16. package/dist/emoji-sequence.d.ts +1 -0
  17. package/dist/index.js +1 -1
  18. package/dist/inline-text-editor-3JLDAUPO.js +1 -0
  19. package/dist/node.mjs +1 -1
  20. package/dist/{onboarding-NO3RQWR7.js → onboarding-YBSYCJZH.js} +1 -1
  21. package/dist/react-props-panel-R5XEVATL.js +1 -0
  22. package/dist/react-props-panel.d.ts +6 -1
  23. package/dist/react.d.ts +2 -0
  24. package/dist/react.js +1 -1
  25. package/dist/setup.js +1 -1
  26. package/dist/tag-editor-KGH3ZCAT.js +1 -0
  27. package/dist/token-adapter.d.ts +44 -0
  28. package/dist/{toolbar-runtime-2JO6YXD5.js → toolbar-runtime-XA72XTPD.js} +1 -1
  29. package/package.json +1 -1
  30. package/server/setup-client.txt +71 -48
  31. package/dist/chunk-5LHGJFWQ.js +0 -1
  32. package/dist/design-comment-RTVUFVDE.js +0 -1
  33. package/dist/design-export-BRBI7S3V.js +0 -1
  34. package/dist/inline-text-editor-SWPVB35B.js +0 -1
  35. package/dist/react-props-panel-XQ4T3RLV.js +0 -1
  36. package/dist/tag-editor-ZA7NLPOJ.js +0 -1
@@ -1 +0,0 @@
1
- import{a as e,b as t,c as o,d as n}from"./chunk-Q7WSWLMV.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 g,b as f,d as b,e as x,f as w,g as y,h as v,i as k,j as C,l as S,m as $,n as E}from"./chunk-YZP3KX4Y.js";var z=e=>`komo:setup:${e.endpoint}:${e.onboarding?.code}`;function j(e){if(!e.onboarding?.inProject)return e;try{let t=JSON.parse(localStorage.getItem(z(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 M(e){let{scope:t="project",...o}=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{...o,endpoint:o.endpoint||"https://komo.offbr.co",repo:e.repo||e.project,branch:"branch"===t?e.branch:"shared"}}function L(e,t){let o=e.x<t/2?"right":"left",n=e.component;if(!n)return o;let{left:i,top:a,right:r,bottom:s}=n;if(r<=i||s<=a)return o;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?o:e.x<d?"right":"left"}var A=class{constructor(e,t,o=e=>e){this.confirmed=e,this.changed=t,this.normalize=o}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 o=new Promise((o,n)=>{this.jobs.push({change:e,save:t,resolve:o,reject:n})});return this.revision++,this.changed(this.value),1===this.jobs.length&&this.drain(),o}async drain(){for(;this.jobs.length;){let e,t=this.jobs[0],o=!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,o]of Object.entries(e??{}))this.aliases.set(t,o);this.confirmed=this.normalize(this.confirmed,this.id)}catch(t){o=!0,e=t}if(this.jobs[0]!==t)return;this.jobs.shift(),this.revision++,this.changed(this.value),o?t.reject(e):t.resolve()}}};function _(e,t,o,n,i=600,a=34){let r=t+((o-e)*i-t*a)*n;return{value:e+r*n,velocity:r}}var T=(e,t)=>Math.max(16,Math.min(e,t));function R(e,t,o,n,i){return{...e,x:"left"===e.edgeX?16:"right"===e.edgeX?Math.max(16,n-t-16):T(e.x,n-t-16),y:"top"===e.edgeY?16:"bottom"===e.edgeY?Math.max(16,i-o-16):T(e.y,i-o-16)}}function W(e,t,o,n,i){let a=R(e,t,o,n,i),r=n-t-16-a.x,s=i-o-16-a.y;return Math.min(a.x-16,r)<.05*n&&(a.edgeX=a.x-16<=r?"left":"right"),Math.min(a.y-16,s)<.05*i&&(a.edgeY=a.y-16<=s?"top":"bottom"),R(a,t,o,n,i)}function q(e,t,o,n,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,g=l.timeStamp,f=0,b=0,x=t=>{if(t.pointerId!==l.pointerId)return;if(!r())return void d?.();let n=t.clientX-l.clientX,a=t.clientY-l.clientY;if(!u&&Math.hypot(n,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-g;s>0&&(f=.8*(t.clientX-h)/s+.2*f,b=.8*(t.clientY-m)/s+.2*b),h=t.clientX,m=t.clientY,g=t.timeStamp;let c=R({x:p.left+n,y:p.top+a},p.width,p.height,document.documentElement.clientWidth,window.innerHeight);o(c);let x=W(c,p.width,p.height,document.documentElement.clientWidth,window.innerHeight);e.dataset.snapX=x.edgeX??"",e.dataset.snapY=x.edgeY??""},w=n=>{if(n.pointerId!==l.pointerId)return;if(!r())return void d?.();if(d?.(),!u)return;let i=e.getBoundingClientRect(),s="pointercancel"!==n.type&&n.timeStamp-g<80?120:0;o(W({x:i.left+f*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,n.removeEventListener("abort",d)},n.addEventListener("abort",d,{once:!0}),window.addEventListener("pointermove",x,{capture:!0,passive:!1}),window.addEventListener("pointerup",w,!0),window.addEventListener("pointercancel",w,!0)},{signal:n})}var O=16,H=240,P=200,B=(e,t,o)=>Math.min(Math.max(e,t),Math.max(t,o));function Y(e,t,o,n,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=B(t.width+o,H,i-t.left-O)),e.includes("w")&&(p=B(t.width-o,H,r-O),l=r-p),e.includes("s")&&(u=B(t.height+n,P,Math.min(a-t.top-O,d))),e.includes("n")&&(u=B(t.height-n,P,Math.min(s-O,d)),c=s-u),{left:l,top:c,width:p,height:u}}import I from"emoji-regex";function D(e){if("string"!=typeof e||e.length>128)return!1;let t=e.match(I());return 1===t?.length&&t[0]===e}var N=["👍","❤️","🎉","👀","✅","🤔"];var X=new Map;function F(e){if(X.has(e))return X.get(e);let t={counts:{}};try{let o=JSON.parse(localStorage.getItem(e)??"null");for(let[e,n]of Object.entries(o?.counts??{}).slice(0,200))D(e)&&"number"==typeof n&&Number.isFinite(n)&&n>0&&(t.counts[e]=n);D(o?.recent)&&(t.recent=o.recent)}catch{}return X.set(e,t),t}function U(e,t,o,n,i="branch-comments:emoji:guest",a="https://cdn.jsdelivr.net/npm/emoji-picker-element-data@1.8.0/en/emojibase/data.json"){let r=v("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 o=parseFloat(getComputedStyle(r).getPropertyValue("--dropdown-close-dur"))||150;c(e),e?r.remove():window.setTimeout(()=>r.remove(),o)},u=function(e,t){let o=[...new Set([...N,...Object.keys(e.counts)])].filter(D),n=t=>e.counts[t]??(N.includes(t)?1:0),i=(e,t)=>n(t)-n(e),a=o.sort(i).slice(0,6),r=t??e.recent;return r&&D(r)&&!a.includes(r)&&(a[a.length-1]=r,a.sort(i)),a}(F(i),n).map((e,t)=>{let i=C(e,()=>{p(),o(e)},"emoji-choice");return i.setAttribute("role","menuitemradio"),i.setAttribute("aria-checked",String(e===n)),i.style.setProperty("--emoji-index",String(t)),r.append(i),i}),h=C("Choose another emoji",async()=>{if(l)return;let t=l=v("div","emoji-keyboard t-dropdown");l.setAttribute("role","dialog"),l.setAttribute("aria-label","Choose an emoji");let n=C("Close emoji keyboard",()=>{c(),h.focus()},"icon emoji-keyboard-close","close"),i=v("span","emoji-keyboard-status","Loading…");l.append(n,i),e.append(l),n.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 n=new e({dataSource:a});n.i18n={...n.i18n,networkErrorMessage:"Couldn’t load emojis. Close and try again."},n.classList.add("dark"),n.addEventListener("emoji-click",e=>{let t=e.detail.unicode;D(t)&&(p(),o(t))}),i.replaceWith(n);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 ',n.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}),y(r,"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 o=u.indexOf(e.target),n="ArrowRight"===e.key?(o+1)%u.length:"ArrowLeft"===e.key?(o+u.length-1)%u.length:-1;n>=0&&(e.preventDefault(),u[n]?.focus())}),p}function K(e,t){let o=/\[([^\]\n]+)\]\((https?:\/\/[^\s)]+)\)|https?:\/\/[^\s<>]+/gi,n=0;for(let i of t.matchAll(o)){let o=i.index??0;o>n&&e.append(document.createTextNode(t.slice(n,o)));let a=void 0!==i[1],r=a?i[2]:i[0],{url:s,trailing:d}=V(r),l=J(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]));n=o+i[0].length}n<t.length&&e.append(document.createTextNode(t.slice(n)))}function J(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 V(e){let t=e.length;for(;t>0&&/[.,!?;:]$/.test(e.slice(0,t));)t--;for(let[o,n]of[["(",")"],["[","]"],["{","}"]])for(;t>0&&e[t-1]===n;){let i=e.slice(0,t),a=[...i].filter(e=>e===o).length;if([...i].filter(e=>e===n).length<=a)break;t--}return{url:e.slice(0,t),trailing:e.slice(t)}}var G=(e,t)=>e<=760||e<=1e3&&t<=500;function Q(e,t,o,n=t,i=!1,a=!1){let r=o&&!G(e,t),s=o&&!r,d=r?404:0,l=r?a?Math.min(.9,(e-d-24)/e):.9:1,c=s?n:r?t*(a?l:.9):t,p=r?a?24:e-d-e*l:0,u=r?(t-c)/2:0;return{desktop:r,mobile:s,framed:r,sheetTop:s?i?0:.18*t:t,bottom:t-u-c,scale:l,left:p,top:u,right:d,visibleTop:Math.max(0,u),visibleHeight:Math.max(0,c+Math.min(0,u)),visibleLeft:Math.max(0,p),visibleWidth:e-d-Math.max(0,p),height:c,dockCenter:r?e-190:e/2}}function Z(e){let t=e instanceof o?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 ee="input,textarea,select,script,style,[contenteditable],[hidden],[aria-hidden=true]",te=(e,t=160)=>e.replace(/\s+/g," ").trim().slice(0,t);function oe(e){let t,o=document.createTreeWalker(e,NodeFilter.SHOW_TEXT),n="";for(;(t=o.nextNode())&&(t.parentElement?.closest(ee)||(n+=t.textContent+" "),!(n.length>320)););return te(n)}function ne(e){let t=document.querySelectorAll(e);return 1===t.length?t[0]:null}var ie=/^radix-|^:r|_r_|«r/;function ae(e,t){for(let o of["data-comment-anchor","id","data-testid","data-test","data-cy"]){let n=e.getAttribute(o);if(!n||n.length>500||"id"===o&&ie.test(n))continue;let i="id"===o?`#${CSS.escape(n)}`:`[${o}="${CSS.escape(n)}"]`;if(i.length<=2e3&&(!t||i===t)&&ne(i)===e)return i}}function re(e){let t=[],o=e;for(;o&&o!==document.body&&t.length<12;){let e=ae(o);if(e){t.unshift(e);break}let n=o.parentElement?[...o.parentElement.children].filter(e=>e.tagName===o.tagName):[];t.unshift(`${o.tagName.toLowerCase()}:nth-of-type(${n.indexOf(o)+1})`),o=o.parentElement}return t.join(" > ")}function se(e){return te(e.getAttribute("aria-label")||(e.getAttribute("aria-labelledby")||"").split(/\s+/).map(e=>{let t=e&&document.getElementById(e);return t?oe(t):""}).join(" ")||e.getAttribute("alt")||e.labels&&[...e.labels].map(oe).join(" ")||"")}function de(e){let t=e.parentElement?.closest("li,article,tr,[data-comment-anchor]")||e.parentElement;return t&&t!==document.body&&t!==document.documentElement?oe(t):""}function le(e){let t,o=e.parentElement;for(;o&&o!==document.body&&!(t=ae(o));)o=o.parentElement;let n=window.getSelection(),i=n?.rangeCount?n.getRangeAt(0):null,a=getComputedStyle(e);return{tag:e.tagName.length<=32?e.tagName.toLowerCase():void 0,role:te(e.getAttribute("role")||"",80)||void 0,label:se(e)||void 0,nearby:de(e)||void 0,classes:te(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(ee)&&!e.querySelector(ee)&&te(n.toString(),200)||void 0,scope:t}}function ce(e,t){let o=t.context;return!!(t.text||o?.label||o?.nearby)&&((!t.text||(o?oe(e)===te(t.text):te(e.textContent||"").startsWith(te(t.text))))&&(!o||(!o.tag||e.tagName.toLowerCase()===o.tag)&&(!o.role||e.getAttribute("role")===o.role)&&(!o.label||se(e)===o.label)&&(!o.nearby||de(e)===o.nearby)))}function pe(e,t){if(e===t||e&&t&&(e.startsWith(t)||t.startsWith(e)))return!0;let o=e.toLowerCase().split(" ").filter(Boolean),n=new Set(t.toLowerCase().split(" ").filter(Boolean));return 2*o.filter(e=>n.has(e)).length/(o.length+n.size||1)>=.6}function ue(e,t,o,n){let i=e,a=Math.min(t.x,o.x),r=Math.min(t.y,o.y),s=Math.max(t.x,o.x),d=Math.max(t.y,o.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:re(i),text:oe(i),context:le(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 n?n(i):n)??i.closest("[data-comment-source]")?.getAttribute("data-comment-source")??void 0}}var he=(e,t,o)=>{let n=[...o?e.querySelectorAll(t.context.tag):e.children].filter(e=>ce(e,t));return 1===n.length?n[0]:null};function me(e,t,o=he){let n=null;try{let i=e.selector?ne(e.selector):document.body;if(n=t?.isConnected&&t===i?t:i,n&&ae(n,e.selector))return n;if(n&&!ce(n,e))return ge(e,o)??(function(e,t){let o=t.context;return!!o?.tag&&e.tagName.toLowerCase()===o.tag&&(!o.role||e.getAttribute("role")===o.role)&&(!o.classes||te(e.getAttribute("class")||"",200)===o.classes)&&pe(te(t.text),oe(e))&&(!o.nearby||pe(o.nearby,de(e)))}(n,e)?n:null);if(n||!e.context?.scope)return n&&function(e,t,o){let n=t.context;if(!n?.tag||!(t.text||n.label||n.nearby))return e;let i=n.scope?ne(n.scope):null;return i?o(i,t,!0):e.parentElement?o(e.parentElement,t,!1):null}(n,e,o);n=ge(e,o)}catch{n=null}return n}function ge(e,t){let o=e.context;if(!o?.tag||!o.scope||!(e.text||o.label||o.nearby))return null;let n=ne(o.scope);return n?t(n,e,!0):null}function fe(e,t){return be(e,me(e,t))}function be(e,t){if(t){let o=t.getBoundingClientRect();if(o.width&&o.height)return{x:o.left+o.width*e.x,y:o.top+o.height*e.y,width:o.width*e.width,height:o.height*e.height,attached:!0,component:{left:o.left,top:o.top,right:o.right,bottom:o.bottom}}}return{x:e.pageX*window.innerWidth/e.viewportWidth-window.scrollX,y:e.pageY-window.scrollY,width:0,height:0,attached:!1}}var xe={comment:"C",browse:"V",design:"D",restore:"Shift+K"},we=["Ctrl","Alt","Shift","Meta"],ye=new Set(["escape","tab"]);function ve(e,t){let o=t.split("+").map(e=>e.trim());o.length>1&&""===o.at(-1)&&""===o.at(-2)&&o.splice(-2,2,"+");let n=o.pop()??"",i=new Set;for(let n of o){let o=we.find(e=>e.toLowerCase()===n.toLowerCase());if(!o||i.has(o))throw new Error(`Invalid komo shortcut for ${e}: "${t}".`);i.add(o)}if(!n||ye.has(n.toLowerCase()))throw new Error(`Invalid komo shortcut for ${e}: "${t}".`);let a=1===n.length?n.toUpperCase():n;return{key:n.toLowerCase(),shift:i.has("Shift"),alt:i.has("Alt"),ctrl:i.has("Ctrl"),meta:i.has("Meta"),label:[...we.filter(e=>i.has(e)),a].join("+")}}function ke(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:o}=t;return 1===o.length&&(/[a-z]/.test(o)?e.code===`Key${o.toUpperCase()}`:/[0-9]/.test(o)&&e.code===`Digit${o}`)}function Ce(e,t){return t?`${e} · ${t.label}`:e}var Se=new WeakMap;function $e(e){return Ee(M(e))}function Ee(M){let T={destroy(){},open(){},close(){},comment(){},async refresh(){}};if(typeof document>"u"||!1===M.enabled)return T;if(!(M.endpoint&&M.repo&&M.branch&&M.project))throw new Error("Comments require endpoint, repo, branch, and project.");if(M.pageRoot&&(M.pageRoot===document.body||!document.body.contains(M.pageRoot)))throw new Error("pageRoot must be mounted inside body.");let W=new URL(M.endpoint);if(W.username||W.password||"https:"!==W.protocol&&("http:"!==W.protocol||!["localhost","127.0.0.1","[::1]"].includes(W.hostname)))throw new Error("Use an HTTPS API endpoint without credentials; HTTP is allowed on localhost.");let B=function(e={}){let t={},o=new Map;for(let n of Object.keys(xe)){let i=e[n]??xe[n];if(!1===i){t[n]=null;continue}if("string"!=typeof i)throw new Error(`Invalid komo shortcut for ${n}.`);let a=ve(n,i),r=o.get(a.label.toLowerCase());if(r)throw new Error(`komo shortcuts for ${r} and ${n} both use ${a.label}.`);o.set(a.label.toLowerCase(),n),t[n]=a}return t}(M.shortcuts),I=!1!==M.features?.designMode,X=!1!==M.features?.tags,J=JSON.stringify([W.href,M.project,M.repo,M.branch]),V=Se.get(document);if(V){if(V.scope!==J)throw new Error("Destroy the current komo instance before changing projects or branches.");return V.controller}M={...j(M)};let ee=[...document.body.childNodes].filter(e=>e instanceof Element?!e.matches("script,style,link,meta,template,noscript"):3===e.nodeType&&e.textContent?.trim()),ne=M.pageRoot??(1===ee.length&&ee[0]instanceof HTMLElement?ee[0]:document.body),ie="contents"===getComputedStyle(ne).display?document.body:ne,ae=ie!==document.body,re=`branch-comments:sidebar-mode:${M.project}:${M.repo}`,le=(()=>{if(!ae)return"edge";try{let e=localStorage.getItem(re);if("edge"===e||"background"===e)return e}catch{}return"background"===M.sidebar?"background":"edge"})(),ce=G(window.innerWidth,window.innerHeight),pe=!ce&&"edge"===le,he=!1,ge=!1,we=!1,ye=["localhost","127.0.0.1","[::1]"].includes(location.hostname),$e=M.branch,Ee=`branch-comments:channel:${M.project}:${M.repo}`,ze="local";try{"shared"===localStorage.getItem(Ee)&&(ze="shared")}catch{}ye&&"local"===ze&&(M={...M,branch:"local"});let je=new n(M),Me=new AbortController,Le=!1,Ae=!!M.onboarding,_e=!1,Te=!1,Re=!1===M.showToolbar,We=!1===M.showToolbar,qe=!1,Oe=!1,He=0,Pe=!!M.onboarding,Be=!1,Ye=!1,Ie=!!M.onboarding,De=0,Ne=[],Xe=null,Fe=null,Ue=null,Ke=null,Je=new A([],e=>{if(!Le){if(Xe){let e=Je.id(Xe);e!==Xe&&(so.has(Xe)&&(so.set(e,so.get(Xe)),so.delete(Xe)),Mt===Xe&&(Mt=e),Xe=e)}Zt&&(Zt=Je.id(Zt)),Ne=e,xi="",Ci(),Hi(),bi(),Pe||Vi()}},(e,t)=>e.map(e=>({...e,id:t(e.id),comments:e.comments.map(e=>({...e,id:t(e.id)}))})));function Ve(e,t){return(o,n)=>o.flatMap(o=>{if(o.id!==n(e))return[o];let i=t(o);return i?[i]:[]})}async function Ge(e,t,o){let n=je,i=je.token,a=De,r=()=>Le||je!==n||a!==De||je.token!==i;try{await Je.submit(e,async e=>{if(r())throw new DOMException("Session changed","AbortError");return t(e)})}catch(e){throw r()?new DOMException("Session changed","AbortError"):(o?.(),sa(),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");Je.busy||Wn(Dn)}let Qe,Ze="open",et="",tt=!0,ot="",nt="Connecting",it="",at=null,rt=0,st=0,dt=null,lt=Promise.resolve(),ct=null;function pt(){clearTimeout(rt);let e=ct;return ct=null,e&&(lt=lt.catch(()=>{}).then(async()=>{if(je.token===e.token)try{let t=await je.request("me","PATCH",{name:e.name,avatarUrl:e.avatarUrl,accentColor:e.accentColor});if(je.token!==e.token)return;dt=t.user,st===e.revision&&je.save({token:e.token,user:t.user}),Le||(bi(),Wn(Dn))}catch(t){throw je.token===e.token&&st===e.revision&&(je.user=dt,at=null,sa()),new Error(`Couldn't save your profile. ${t instanceof Error?t.message:"Try again."}`,{cause:t})}})),lt}function ut(e,t=!1){!je.token||!e.name.trim()||((!dt||dt.id!==je.user?.id)&&(dt=je.user?{...je.user}:null),ct={...e,name:e.name.trim(),token:je.token,revision:++st},je.user&&(je.user={...je.user,...e,name:e.name.trim()}),bi(),clearTimeout(rt),t?Wn(pt):rt=window.setTimeout(()=>Wn(pt),500))}function ht(){let e=C("Continue with Google",()=>Wn(()=>Ii("google")),"google-signin secondary");return e.prepend(E()),e}let mt,gt,ft="",bt=null,xt=!1,wt=!1,yt=!1,vt=M.onboarding?.sites?.filter(e=>e.startsWith("https://")&&e!==location.origin).join("\n")??"",kt=!1,Ct=null,St=!1,$t=!1,Et=!1,zt=null,jt=[],Mt=null,Lt=new Map,At=function(e){let t=null,o=null,n=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)"),g=()=>{o&&(o.style.translate=`${a-l}px ${r-c}px`,o.style.scale=`${1-p*h} ${1-p*(1-h)}`)},f=()=>{cancelAnimationFrame(n),n=0,s=d=p=u=0,o&&(o.style.translate="",o.style.scale="",o.style.willChange="")},b=t=>{if(!o?.isConnected||m.matches)return void f();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=_(a,s,l,e),o=_(r,d,c,e);a=t.value,s=t.velocity,r=o.value,d=o.velocity;let n=Math.hypot(s,d);n>30&&(h=Math.abs(s)/(Math.abs(s)+Math.abs(d)));let i=_(p,u,Math.min(.035,n/24e3),e,220,15);p=Math.max(-.012,Math.min(.04,i.value)),u=i.velocity}if(g(),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,f(),void e();n=requestAnimationFrame(b)};return{place(e,s,d,p,u){if(t!==e&&(f(),t=e,a=d,r=p),o=s,l=d,c=p,s.style.left=`${d}px`,s.style.top=`${p}px`,m.matches||!u&&!n)return a=d,r=p,void f();g(),s.style.willChange="translate, scale",n||(i=performance.now(),n=requestAnimationFrame(b))},stop:f}}(()=>Tn()),_t=null,Tt=`branch-comments:drawer:${M.project}:${M.repo}`;try{let e=JSON.parse(localStorage.getItem(Tt)??"null");e&&Number.isFinite(e.x)&&Number.isFinite(e.y)&&(gt={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=gt)}catch{}let Rt,Wt,qt=`branch-comments:sidebar:${M.project}:${M.repo}`,Ot=!1,Ht=380,Pt=null;try{let e=JSON.parse(localStorage.getItem(qt)??"null");Number.isFinite(e?.width)&&(Ht=e.width),Number.isFinite(e?.height)&&(Pt=e.height),e&&Number.isFinite(e.x)&&Number.isFinite(e.y)&&(Rt={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},Wt=Rt)}catch{}let Bt,Yt,It,Dt,Nt=new Map,Xt=/^Proposed .+ \(preview only\)$/m,Ft=()=>Bt??=import("./design-comment-RTVUFVDE.js").then(e=>(It=e,Yt=e.summarizeDesignComment,Le||(xi="",Ci(!0)),e)),Ut=e=>t=>{try{if(t)return document.querySelector(t)??me(e.anchor)}catch{}return me(e.anchor)},Kt=e=>Xt.test(e)?Yt?.(e)??(Ft(),"Design change"):e,Jt="",Vt="",Gt=[],Qt="",Zt=null,eo="",to=null,oo=Sn(),no=0,io=0,ao=0,ro=0,so=new Map,lo=v("div");lo.dataset.branchComments="",lo.dataset.sidebar=ce?"mobile":pe?"edge":"background",Object.assign(lo.style,{position:"fixed",inset:"0",pointerEvents:"none",zIndex:"2147483647",isolation:"isolate"});let co=lo.attachShadow({mode:"open"}),po=v("style");po.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}.dialog>.dialog-head{background:#242424;border-radius:8px}.messages[data-fade]{mask-image:linear-gradient(to bottom,var(--fade-top, #000),#000 28px,#000 calc(100% - 28px),var(--fade-bottom, #000))}.messages[data-fade~=top]{--fade-top: transparent}.messages[data-fade~=bottom]{--fade-bottom: transparent}.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:0 36px 0 auto}.pin-preview-resolve{position:absolute;top:17px;right:16px}: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,.pin-preview .icon,.actions>.icon{color:#929292}.dialog .icon:hover,.pin-preview .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-proposal{margin-right:32px}.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}.pin-preview .pin-preview-card{margin:-8px 16px 16px 48px;padding:0;cursor:pointer}.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 uo=v("div","catch");uo.hidden=!0;let ho=v("div","pins"),mo=v("div"),go=v("div","toolbar"),fo=v("div"),bo=v("div");fo.tabIndex=-1,pe&&fo.classList.add("edge-sidebar");let xo=v("div","edge-sidebar-sensor");xo.hidden=!0,Object.assign(ho.style,{position:"fixed",inset:"0"});let wo=v("div","pin-preview");wo.hidden=!0;let yo=0,vo=!1,ko=!1,Co=null,So=null,$o=null,Eo="",zo=(e=!1)=>{if(window.clearTimeout(yo),wo.hidden||ko&&!e)return;if(It?.resetDesignPreviews(new Set(Ne.find(e=>e.id===Xe)?.comments.map(e=>e.id))),ko=!0,So?.cancel(),e||matchMedia("(prefers-reduced-motion: reduce)").matches)return wo.hidden=!0,void(Co=null);let t=wo.animate([{opacity:1,transform:"scale(1)"},{opacity:0,transform:"translateY(3px) scale(.99)"}],{duration:150,easing:"cubic-bezier(.22,1,.36,1)",fill:"forwards"});So=t,t.finished.then(()=>{So===t&&(wo.hidden=!0,Co=null)}).catch(()=>{})};wo.addEventListener("pointerenter",()=>{vo||Ct||_t||(ko=!1,window.clearTimeout(yo),So?.cancel())}),wo.addEventListener("pointerleave",()=>zo());let jo=v("div","component-hover");jo.setAttribute("aria-hidden","true");let Mo=null,Lo=null,Ao=0,_o=v("div","sr-only");_o.setAttribute("aria-live","polite");let To=function(e,t){let o,n,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=()=>n||r?Promise.resolve():i||(i=import("./toolbar-runtime-2JO6YXD5.js").then(async t=>{if(s&&await new Promise(e=>{a=e}),r)return;let i=e.getRootNode().activeElement?.dataset.menuItem;n=t.mountToolbar(e,o),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(o=i,r)return;if(n)return void n.render(o);let a=v("nav","morphing-menu");a.setAttribute("aria-label",o.label??"Website review"),a.dataset.view="collapsed",a.dataset.edge=o.edge??"bottom",a.dataset.vertical=String("left"===o.edge||"right"===o.edge),a.dataset.alignEnd=String(!!o.alignEnd);let s=o.items.filter(e=>!1!==e.showInBar);a.style.setProperty("--mm-count",String(s.length+1));let d=v("div","morphing-menu__shell"),l=v("div","morphing-menu__bar");for(let e of s){let n=C(e.label,()=>{e.onSelect?.(),c()},"morphing-menu__shortcut");n.title=e.label,n.dataset.menuItem=e.id,e.id===o.activeId&&n.setAttribute("aria-current","page"),n.replaceChildren(t("glyph"in e.icon?e.icon.glyph:e.id)),l.append(n)}let p=C(o.moreLabel??"More review tools",()=>{c().then(()=>{n?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(k("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?.(),n?.unmount(),e.replaceChildren()}}}(go,e=>{if("account"===e){if(!je.user)return k("person");let e=$(je.user);return e.classList.add("review-avatar"),e}return k(e)});co.append(po,uo,jo,ho,fo,xo,mo,wo,bo,go,_o),document.body.append(lo);let Ro,Wo={width:ie.style.width,boxSizing:ie.style.boxSizing,zoom:ie.style.zoom,transformOrigin:ie.style.transformOrigin,transform:ie.style.transform,position:ie.style.position,left:ie.style.left,top:ie.style.top,height:ie.style.height,minHeight:ie.style.minHeight,paddingBottom:ie.style.paddingBottom,overflow:ie.style.overflow,borderRadius:ie.style.borderRadius,background:ie.style.background},qo={overflow:document.body.style.overflow,background:document.body.style.background},Oo=document.documentElement.style.overflow,Ho=new Map,Po=document.documentElement.style.background,Bo=[getComputedStyle(document.body).backgroundColor,getComputedStyle(document.documentElement).backgroundColor].find(e=>"rgba(0, 0, 0, 0)"!==e)??"#fff",Yo=!1,Io=0,Do=!1,No=!1,Xo=`branch-comments:open:${M.project}:${M.repo}`,Fo=`branch-comments:toolbar-dismissed:${M.project}:${M.repo}`;try{"1"===sessionStorage.getItem(Fo)&&(We=!0,Re=!0)}catch{}let Uo,Ko,Jo,Vo=!1,Go=[],Qo=0,Zo=!1,en=null,tn=!1;function on(e){!go.offsetWidth||!go.offsetHeight||(mt=R(e,go.offsetWidth,go.offsetHeight,document.documentElement.clientWidth,window.innerHeight),go.style.left=`${mt.x+go.offsetWidth/2}px`,"bottom"!==mt.edgeY||ce?(go.style.top=`${mt.y}px`,go.style.bottom="auto"):(go.style.top="auto",go.style.bottom="calc(16px + env(safe-area-inset-bottom,0px))"))}function nn(e){if("true"===fo.dataset.dragging)return Wt=e,fo.style.left=`${e.x}px`,void(fo.style.top=`${e.y}px`);fo.offsetWidth&&(Wt=R(e,fo.offsetWidth,fo.offsetHeight,document.documentElement.clientWidth,window.innerHeight),dn())}function an(){fo.style.width=`${Ht}px`,fo.style.height=null==Pt?"":`${Pt}px`,Ai()}function rn(){Rt=Wt;try{localStorage.setItem(qt,JSON.stringify({...Rt,width:Ht,height:Pt}))}catch{}}function sn(){let e=document.documentElement.clientWidth,t=window.innerHeight;Ht=Math.min(Math.max(Ht,H),Math.max(H,e-32)),null!=Pt&&(Pt=Math.min(Math.max(Pt,P),Math.max(P,Math.min(t-32,680)))),an()}function dn(){if(ce||!pe)return;sn();let e=fo.offsetHeight||Math.min(window.innerHeight-32,680),t=function(e,t,o,n,i){let a=R(e??{x:Math.max(O,n-t-O),y:O},t,o,n,i),r="left"===a.edgeX?"left":"right";return{x:a.x,y:a.y,width:t,height:o,side:r}}(Wt,Ht,e,document.documentElement.clientWidth,window.innerHeight),o=function(e,t){let o="right"===e.side?t+24:-(e.width+24),n="right"===e.side?t-76:76-e.width;return{parked:o-e.x,peek:n-e.x}}(t,document.documentElement.clientWidth);fo.style.left=`${t.x}px`,fo.style.top=`${t.y}px`,fo.style.setProperty("--edge-account-max-height",`${Math.max(0,window.innerHeight-t.y-28)}px`),fo.style.right="auto",fo.style.bottom="auto",fo.style.transformOrigin="left"===t.side?"left center":"right center",fo.style.setProperty("--edge-park-x",`${o.parked}px`),fo.style.setProperty("--edge-peek-x",`${o.peek}px`),xo.style.left="left"===t.side?"0px":"",xo.style.right="right"===t.side?"0px":"",Ae?(delete fo.dataset.collapsed,delete fo.dataset.peek,xo.hidden=!0):(fo.dataset.collapsed="true",Ot?fo.dataset.peek="true":delete fo.dataset.peek,xo.hidden=!1)}function ln(){lo.dataset.sidebar=ce?"mobile":pe?"edge":"background",fo.classList.toggle("edge-sidebar",pe),fo.style.transition="none",fo.style.translate="",fo.style.opacity="",li(!0),pe?bn.isConnected||fo.prepend(bn):(bn.remove(),delete fo.dataset.collapsed,delete fo.dataset.peek,xo.hidden=!0),fo.offsetWidth,fo.style.transition=""}let cn=[],pn=!1;function un(){for(let e of cn)e.cancel();cn=[],tn=!1,ho.style.opacity=""}function hn(e,t){if(ce||e===le||Le||!ae&&"background"===e)return;let o=()=>[ie,fo.querySelector(".panel"),go,mo.querySelector(".account-dialog")],n=o().map(e=>e?.getBoundingClientRect());if(un(),Ro?.stop(),Ro=void 0,Uo?.stop(),Uo=void 0,li(!0),ri(),ti(),go.style.translate="",Ko=void 0,pn=!0,le=e,pe="edge"===e,!t){he=!1,M={...M,sidebar:e};try{localStorage.setItem(re,e)}catch{}}if(ln(),Qn(),sa(),pn=!1,matchMedia("(prefers-reduced-motion: reduce)").matches)return;o().forEach((e,t)=>{let o=n[t];if(!e?.isConnected||!o?.width)return;e!==ie&&e.getAnimations().forEach(e=>e.cancel());let i=e.getBoundingClientRect();if(!i.width)return;let a=i.width/e.offsetWidth,r=getComputedStyle(e).transform;cn.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 i=cn;tn=!0,ho.style.opacity="0",Promise.all(i.map(e=>e.finished)).then(()=>{Le||i!==cn||(cn=[],tn=!1,ho.style.opacity="",ua())}).catch(()=>{})}function mn(e,o,n,i,a){let r=v("div","account-setting"),s=v("span","account-setting-label",o),d=t(o,n,i,e=>a(e));return d.querySelector("summary").dataset.focusKey=`setting-${e}`,r.append(s,d),r}function gn(e){if(e!==ze&&!Le){if(Be||Je.busy)return void _n("Wait for your changes to save.");ze=e;try{localStorage.setItem(Ee,e)}catch{}M={...M,branch:"local"===e?"local":$e},je.cancelReads(),je=new n(M),Ye=xt=!1,Bn=void 0,ft="",bt=null,nt="Connecting",kt=St=$t=Et=wt=!1,Xe=null,Fe=null,zt=null,fn(),sa(),Hn()}}function fn(){De++,Ye=!1,ft="",Xe=null,Bn=void 0;let e=je.cached();Ie=null!==e,Je.reset(Yn(e??[]))}let bn=v("div","edge-sidebar-grip");bn.setAttribute("aria-hidden","true");let xn=e=>q(fo,e,nn,Me.signal,()=>{ge=!1,we=!0,vn.show()},()=>{rn(),vn.update()},()=>Ae&&pe&&!Zo);xn(bn),fo.prepend(bn);let wn=["n","s","e","w","ne","nw","se","sw"];for(let e of wn){let t=v("div",`edge-sidebar-resize edge-sidebar-resize-${e}`);t.addEventListener("pointerdown",t=>{if(0!==t.button||!Ae||!pe||Zo)return;t.preventDefault(),t.stopPropagation();for(let e of fo.getAnimations())e.cancel();fo.style.transition="none";let o=fo.getBoundingClientRect(),n=t.clientX,i=t.clientY,a=a=>{if(a.pointerId!==t.pointerId)return;let r=Y(e,o,a.clientX-n,a.clientY-i,document.documentElement.clientWidth,window.innerHeight);Ht=r.width,(e.includes("n")||e.includes("s"))&&(Pt=r.height),Wt={x:r.left,y:r.top},fo.style.left=`${r.left}px`,fo.style.top=`${r.top}px`,an()},r=e=>{e.pointerId===t.pointerId&&(window.removeEventListener("pointermove",a,!0),window.removeEventListener("pointerup",r,!0),window.removeEventListener("pointercancel",r,!0),fo.style.transition="",rn(),dn())};window.addEventListener("pointermove",a,{capture:!0,passive:!1}),window.addEventListener("pointerup",r,!0),window.addEventListener("pointercancel",r,!0)},{signal:Me.signal}),fo.append(t)}for(let e of["left","right","top","bottom"])fo.append(v("div",`edge-sidebar-snap edge-sidebar-snap-${e}`));let yn=e=>{Ot=e,!Ae&&pe&&!Zo&&dn()};xo.addEventListener("pointerenter",()=>yn(!0)),xo.addEventListener("pointerleave",()=>yn(!1)),xo.addEventListener("pointerup",e=>{0===e.button&&!Ae&&pi(!0)}),fo.addEventListener("pointerenter",()=>yn(!0)),fo.addEventListener("pointerleave",()=>yn(!1)),window.addEventListener("resize",()=>{Le||!pe||Zo||(sn(),dn())},{signal:Me.signal,passive:!0}),ln();let vn=function(e,t,o,n=!0){if(!n)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(),o=[t.left,window.innerWidth-t.right,t.top,window.innerHeight-t.bottom],n=o.indexOf(Math.min(...o));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===n?-24:1===n?24:0)+"px"),e.style.setProperty("--drawer-away-y",(2===n?-24:3===n?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 o=e.getBoundingClientRect(),n=i&&i.x>=o.left-72&&i.x<=o.right+72&&i.y>=o.top-72&&i.y<=o.bottom+72,r=e.querySelector(".morphing-menu"),s=e.getRootNode()instanceof ShadowRoot&&e.contains(e.getRootNode().activeElement);!c.matches||t()||n||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||o.aborted||(s=window.setTimeout(()=>{if(!e.dataset.away||t())return;p();let o=e.querySelector(".morphing-menu");o&&getComputedStyle(o).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:o}),document.addEventListener("pointermove",e=>{i={x:e.clientX,y:e.clientY},r||(r=requestAnimationFrame(()=>{r=0,h()}))},{passive:!0,signal:o}),e.addEventListener("focusin",u,{signal:o}),e.addEventListener("focusout",()=>queueMicrotask(h),{signal:o});let g=new MutationObserver(h);return g.observe(e,{subtree:!0,attributes:!0,attributeFilter:["data-view","data-dragging"]}),o.addEventListener("abort",()=>{clearTimeout(a),cancelAnimationFrame(r),clearTimeout(s),clearTimeout(d),clearTimeout(l),g.disconnect()},{once:!0}),{show:u,update:h}}(go,()=>Ae||_e||Pe||!!Fe||!!Xe,Me.signal,M.autoHideDrawer);q(go,go,on,Me.signal,()=>{vn.show(),Uo?.stop(),go.style.translate="0px 0px"},()=>{gt=mt;try{localStorage.setItem(Tt,JSON.stringify(gt))}catch{}bi(),vn.update()},()=>!Ae,e=>!!e.closest(".morphing-menu__shortcut"));let kn=new ResizeObserver(()=>{"true"!==go.dataset.edgeTabs&&(mt?on(mt):M.drawerContainer&&bi())});kn.observe(go),M.drawerContainer&&kn.observe(M.drawerContainer);let Cn=()=>document.documentElement.currentCSSZoom??1;function Sn(){return function(e){return e.replace(/\/+$/,"")||"/"}(M.page?.()??location.pathname)}let $n=new WeakMap,En=null,zn=0,jn=new WeakMap;function Mn(){cancelAnimationFrame(zn),!Le&&co.querySelector(".floating-notice")&&(Tn(),zn=requestAnimationFrame(Mn))}function Ln(e=Fe??Ne.find(e=>e.id===Xe)?.anchor){let t=mo.firstElementChild?.getBoundingClientRect();if(!t||Pe)return;let o=e?ea(e):null;return{cardKey:Mt,left:t.left,top:t.top,anchor:e,offsetX:t.left-(o?.x??0),offsetY:t.top-(o?.y??0),scrollX:window.scrollX,scrollY:window.scrollY}}function An(e){e.dataset.closing||(e.dataset.closing="true",e.inert=!0,e.setAttribute("aria-hidden","true"),En===e&&(En=null,clearTimeout(no)),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 _n(e,t,o=Ln()){_o.textContent=e,En&&An(En);let n=v("div","toast floating-notice");En=n,o&&$n.set(n,o),n.setAttribute("role",t?"alertdialog":"status"),n.setAttribute("aria-label",e),n.append(k("info"),v("span","",e)),t&&n.append(C(t.label,()=>{An(n),t.run()},"notice-action")),n.append(C("Dismiss notice",()=>An(n),"icon","close")),co.append(n),Tn(),Mn(),matchMedia("(prefers-reduced-motion: reduce)").matches||n.animate([{opacity:0,translate:"true"===n.dataset.attached?`0px ${("above"===n.dataset.placement?1:-1)*(n.offsetHeight/2+10)}px`:"0px 6px",scale:"true"===n.dataset.attached?.94:.97},{opacity:1,translate:"0px 0px",scale:1}],{duration:250,easing:"cubic-bezier(.22,1,.36,1)"}),clearTimeout(no),no=window.setTimeout(()=>An(n),5e3)}function Tn(){for(let e of co.querySelectorAll(".floating-notice")){let t=$n.get(e);if(!t)continue;let o=t.anchor?ea(t.anchor):null,n=(Pe||Mt!==t.cardKey?null:mo.firstElementChild)?.getBoundingClientRect();n&&(e.style.maxWidth=`${Math.min(360,n.width,innerWidth-24)}px`,t.left=n.left,t.top=n.top,t.offsetX=n.left-(o?.x??0),t.offsetY=n.top-(o?.y??0),t.scrollX=window.scrollX,t.scrollY=window.scrollY);let i=n?n.left+(n.width-e.offsetWidth)/2:o?o.x+t.offsetX:t.left+t.scrollX-window.scrollX,a=!!n&&n.bottom+10+e.offsetHeight>innerHeight-12;e.dataset.placement=a?"above":"below";let r=n?a?n.top-e.offsetHeight-10:n.bottom+10:o?o.y+t.offsetY:t.top+t.scrollY-window.scrollY,s=String(!!n),d=void 0!==e.dataset.attached&&e.dataset.attached!==s,l=d?e.getBoundingClientRect():null,c=jn.get(e);if(c&&(d||Math.abs(c.left-i)>.5||Math.abs(c.top-r)>.5)&&(c.animation.cancel(),jn.delete(e)),e.dataset.attached=s,Object.assign(e.style,{left:`${i}px`,top:`${r}px`,bottom:"auto",transform:"none",transformOrigin:n?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)"});jn.set(e,{animation:t,left:i,top:r})}}}function Rn(e){Le||e instanceof DOMException&&"AbortError"===e.name||(it=e instanceof Error?e.message:"Something went wrong. Try again.",_n(it))}function Wn(e){e().catch(Rn)}function qn(e,t){return t.then(t=>{e.isConnected&&e.replaceWith(t)}).catch(Rn),e}function On(e){return qn(v("section","account-usage"),import("./onboarding-NO3RQWR7.js").then(({accountUsage:t})=>t(je,e,!0,ye&&"local"===ze)))}function Hn(){Wn(xt?Dn:Ca)}let Pn,Bn,Yn=e=>e.map(e=>({...e,comments:e.comments.filter(e=>"[Comment deleted]"!==e.body)})).filter(e=>e.comments.length>0),In=-1;async function Dn(){if(Le||Ye||Je.busy||M.onboarding)return;let e=Je.revision,t=je,n=t.token,i=De;Ye=!0;try{let o=await t.list();if(Le||t!==je||i!==De||n!==t.token||Je.busy||e!==Je.revision)return;if(o===Bn&&e===In&&"Live"===nt)return!1;Bn=o,In=e,Ie=!0;let a=Yn(o),r=JSON.stringify(a)!==JSON.stringify(Ne),s="Live"!==nt;return ft="",xt&&(bt=null),nt=bt?"Offline":"Live",Xe&&!a.some(e=>e.id===Xe)&&(Xe=null),r?Je.replace(a,e):s&&(Hi(),bi()),r}catch(a){if(Le||t!==je||i!==De||a instanceof DOMException&&"AbortError"===a.name)return;throw n!==t.token&&fn(),a instanceof o&&(401===a.status||403===a.status)&&"site_not_approved"!==a.code&&(ft=a.message,Xe=null,Bn=void 0,Je.replace([],e)),bt=ft?null:Z(a),nt="Offline",Hi(),bi(),a}finally{t===je&&i===De&&(Ye=!1)}}function Nn(){!qe&&ge&&(ge=!1,Wt=Rt,dn()),he!==qe&&(!qe||ae&&!ce&&"edge"===le)&&(he=qe,ce?le="edge":hn(qe?"background":"edge",!0))}function Xn(e){if(M.onboarding)return;qe&&(qe=!1,Ue?.setActive(!1),Nn()),Te=e,Ae&&pi(!1);let t=e?zt??jt.shift():null;if(t)return Fe=t.anchor,Jt=t.text,zt=null,Xe=null,Pe=!1,_e=!1,sa(),void mo.querySelector("textarea")?.focus();_e=e,Pn?.wake(!1),Re=!1,Pe=!1,e&&(Xe=null,Fe=null),sa()}function Fn(){Oe&&(Oe=!1,pi(!0),requestAnimationFrame(()=>{let e=fo.querySelector(".list");e&&(e.scrollTop=He),fo.querySelector('[data-menu-item="design"]')?.focus({preventScroll:!0})}))}function Un(e){M.onboarding||Fe||e&&!I||(e&&(Oe=!0,Ae&&(He=fo.querySelector(".list")?.scrollTop??0),Xn(!1),qe=!0,we=!1,Nn(),Ae||pi(!0),Pe=!1,fo.querySelector(".panel")?.contains(co.activeElement)&&fo.focus({preventScroll:!0})),qe=e,e?(Ue?Promise.resolve(Ue):(Ke||(Ke=import("./design-mode.js").then(({createDesignMode:e})=>{let t=e({root:co,panelRoot:fo,host:lo,exitKey:B.design?.label,flip(){if(!pe||!Ae||we||Zo)return;let e=fo.getBoundingClientRect();nn({x:document.documentElement.clientWidth-e.right,y:e.top}),ge=!0,fo.animate([{transform:`translateX(${e.left-fo.getBoundingClientRect().left}px)`},{}],{duration:320,easing:"cubic-bezier(.22,1,.36,1)"})},targetAt(e,t){let o=ta(e,t);return oa(o)?o:null},onComment(e,t){Oe=!1,Ae&&pi(!1),Un(!1),Jt="",Vt=t??"",Gt=[];let o=e.getBoundingClientRect(),n={x:o.left+o.width/2,y:o.top+o.height/2};pa(e,n,n,!0)},onExit(){qe=!1,Nn(),bi(),Fn()}});return Le?(t.destroy(),null):(Ue=t,t.setActive(qe),t)}).catch(()=>(qe=!1,Nn(),bi(),null)).finally(()=>{Ke=null})),Ke)).then(e=>e?.setActive(qe)):(Ue?.setActive(!1),Nn(),Fn()),sa())}let Kn=0;let Jn=1,Vn="",Gn=()=>(window.visualViewport?.offsetTop??0)+Math.min(window.innerHeight,window.visualViewport?.height??window.innerHeight)-window.innerHeight;function Qn(){let e=Cn(),t=G(window.innerWidth,window.innerHeight)?Math.min(window.innerHeight,window.visualViewport?.height??window.innerHeight):window.innerHeight,o=`${window.innerWidth}:${window.innerHeight}:${t}:${e}:${Ae}:${Pe}:${le}:${qe}:${window.visualViewport?.offsetTop??0}`;if(Vn===o)return;if(ce||un(),Vn=o,pe||ce){Ro?.stop(),tn=!1,ho.style.opacity="";let o=Yo?ie.scrollTop*e:null;if(Yo){for(let[e,t]of Ho)Object.assign(e.style,t);Ho.clear(),Object.assign(ie.style,Wo),Jn=1,document.documentElement.style.overflow=Oo,Object.assign(document.body.style,qo),document.documentElement.style.background=Po}if(null!==o&&window.scrollTo({top:o,behavior:"instant"}),lo.style.zoom=String(1/e),lo.style.width=`${window.innerWidth}px`,lo.style.height=ce?`${window.innerHeight}px`:"",lo.style.top=ce?"":"0px",ce){let e=Gn();go.style.translate=`0 ${e}px`,lo.style.setProperty("--mobile-panel-height",`${Math.max(1,.9*t)}px`),lo.style.setProperty("--mobile-panel-bottom",-e+"px")}return lo.classList.toggle("review-open",Ae),Yo=!1,ho.style.clipPath="",void Object.assign(uo.style,{left:"",top:"",width:"",height:""})}let n=Yo?ie.scrollTop:window.scrollY/(e*Jn),i=Yo,a=Yo?Zn():{left:0,top:0,width:window.innerWidth};Ro?.stop(),tn=!1,ho.style.opacity="";let r=Q(window.innerWidth,t,Ae,window.innerHeight,Pe,!0),s=r.framed;if(lo.style.setProperty("--review-viewport-height",`${t}px`),lo.style.zoom=String(1/e),lo.style.width=`${window.innerWidth}px`,lo.style.height=`${t}px`,lo.style.top="",lo.classList.toggle("review-open",Ae),lo.classList.toggle("design-active",qe),s){Jn=r.scale;let t=Jn*e;Object.assign(ie.style,{position:"fixed",transform:`scale(${Jn})`,transformOrigin:"top left",left:r.left/e+"px",top:r.top/e+"px",width:window.innerWidth/e+"px",boxSizing:"border-box",height:r.height/t+"px",paddingBottom:Wo.paddingBottom,zoom:Wo.zoom,overflow:"hidden auto",borderRadius:12/t+"px",background:Bo});for(let e of ie.querySelectorAll("header"))!Ho.has(e)&&"fixed"===getComputedStyle(e).position&&(Ho.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",ie.scrollTop=n}else{for(let[e,t]of Ho)Object.assign(e.style,t);Ho.clear(),document.documentElement.style.overflow=Oo,Object.assign(ie.style,Wo),Object.assign(document.body.style,qo),document.documentElement.style.background=Po,Yo&&window.scrollTo({top:n*e,behavior:"instant"}),Jn=1}if(Yo=s,!s&&M.drawerContainer?.isConnected){let e=M.drawerContainer.getBoundingClientRect();Jo=e.width?e.left+e.width/2:void 0}if(!(s===i||Do||pn||No||matchMedia("(prefers-reduced-motion: reduce)").matches)){let t=s?Zn():{left:0,top:0,width:window.innerWidth},o=`translate(${(a.left-t.left)/e}px, ${(a.top-t.top)/e}px) scale(${Jn*a.width/t.width})`;if(ie.style.transformOrigin=s?"top left":`0 ${n}px`,!s){document.body.style.background="#080808",document.documentElement.style.background="#080808",ie.style.background=Bo;let t=getComputedStyle(ie).minHeight;ie.style.minHeight=`max(${"auto"===t?"0px":t}, ${window.innerHeight/e}px)`}ho.style.opacity="0",tn=!0,Ro=m(ie,{transform:[o,`translate(0px, 0px) scale(${Jn})`]},{duration:.25,ease:[.32,.72,0,1]});let i=Ro;i.finished.then(()=>{Le||Ro!==i||(tn=!1,Yo||(ie.style.transformOrigin=Wo.transformOrigin,ie.style.transform=Wo.transform,ie.style.background=Wo.background,ie.style.minHeight=Wo.minHeight,document.body.style.background=qo.background,document.documentElement.style.background=Po),ho.style.opacity="",ua())})}ho.style.clipPath=s?`inset(${r.visibleTop}px ${r.right}px ${r.bottom}px ${r.visibleLeft}px)`:"",Object.assign(uo.style,s?{left:`${r.visibleLeft}px`,top:`${r.visibleTop}px`,width:`${r.visibleWidth}px`,height:`${r.visibleHeight}px`}:{left:"",top:"",width:"",height:""})}function Zn(){return ie.getBoundingClientRect()}function ei(){"true"!==go.dataset.edgeTabs&&(go.dataset.savedLeft=go.style.left,go.dataset.savedTop=go.style.top,go.dataset.savedBottom=go.style.bottom,go.dataset.savedTransform=go.style.transform),go.style.left="",go.style.top="",go.style.bottom="",go.style.transform="",go.parentElement!==fo&&fo.append(go),go.dataset.edgeTabs="true",Ae?go.dataset.edgeOrient="horizontal":delete go.dataset.edgeOrient}function ti(){"true"===go.dataset.edgeTabs&&(go.style.left=go.dataset.savedLeft??"",go.style.top=go.dataset.savedTop??"",go.style.bottom=go.dataset.savedBottom??"",go.style.transform=go.dataset.savedTransform??"",delete go.dataset.savedLeft,delete go.dataset.savedTop,delete go.dataset.savedBottom,delete go.dataset.savedTransform),delete go.dataset.edgeTabs,delete go.dataset.edgeOrient,go.parentElement===fo&&_o.before(go)}function oi(){return go.querySelector(".morphing-menu__shell")??go}function ni(){return go.querySelector(".morphing-menu")}function ii(){return[...fo.querySelectorAll(".panel-head, .panel .empty, .thread-card")]}function ai(e){return Go.push(e),e}function ri(){for(let e of ii())e.style.opacity="",e.style.transform="",e.style.filter="";bn.style.opacity=""}function si(e,t){for(let e of fo.getAnimations())e.cancel();fo.style.transition="none",fo.style.transform="none",fo.style.translate="none",fo.style.opacity="1",fo.style.left=`${e.left}px`,fo.style.top=`${e.top}px`,fo.style.width=`${e.width}px`,fo.style.height=`${e.height}px`,fo.style.borderRadius=t}function di(){fo.style.width="",fo.style.height="",fo.style.borderRadius="",fo.style.transform="",fo.style.opacity="",pe&&dn(),fo.offsetWidth,fo.style.transition=""}function li(e=!1){Qo+=1;for(let e of Go)e.stop();Go=[];let t=Zo;if(Zo=!1,e&&fo.toggleAttribute("data-tips-ready",Ae),!e||!t)return;delete fo.dataset.morphing,delete go.dataset.edgeSurface,delete go.dataset.edgeMorph;let o=ni();o&&(o.style.transition=""),delete go.dataset.hidden,ti(),ri(),di()}function ci(e,t,o){let n=fo.getBoundingClientRect(),i=e?null:{left:n.left,top:n.top,width:n.width,height:n.height,radius:fo.style.borderRadius||"16px"};li(!1),i&&si(i,i.radius);let g=Qo;Zo=!0;let f=ni();f&&(f.style.transition="none");let b=go.querySelector(".morphing-menu__bar"),x=oi(),w=!1,y=()=>{w||g!==Qo||Le||(w=!0,Zo=!1,delete fo.dataset.morphing,delete go.dataset.edgeSurface,delete go.dataset.edgeMorph,delete go.dataset.hidden,f&&(f.style.transition=""),e||(ri(),fo.style.opacity="0",ti()),di(),e&&(fo.dataset.tipsReady=""))},v=No||matchMedia("(prefers-reduced-motion: reduce)").matches;if(e){let e=t?fo.getBoundingClientRect():null,n=fo.style.borderRadius||"16px";fo.style.transition="none",fo.style.width="",fo.style.height="",fo.style.borderRadius="",fo.style.transform="none";let i=x.getBoundingClientRect(),s=!t&&o&&o.width>0?o:i;!t&&s.width>0&&(en={left:s.left,top:s.top,width:s.width,height:s.height}),ei(),delete fo.dataset.morphing,dn();let l=fo.getBoundingClientRect();if(fo.dataset.morphing="true",v||s.width<=0||l.width<=0||t&&!e)return void y();let f=s.height/2+"px";t&&e?si(e,n):si(s,f),ii().forEach((e,t)=>{e.style.opacity="0",e.style.transform="translateY(48px)",e.style.filter="blur(4px)",ai(m(e,{opacity:1,y:0,filter:"blur(0px)"},{...d,delay:c+t*p}))}),bn.style.opacity="0",ai(m(bn,{opacity:1},{...d,delay:c}));let w=()=>{if(g!==Qo||Le)return;delete fo.dataset.morphing;let e=fo.getBoundingClientRect();ai(m(fo,{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:[fo.style.borderRadius||"16px","16px"]},a)).finished.then(y).catch(()=>{g===Qo&&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=fo.getBoundingClientRect();return void ai(m(fo,{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??fo.getBoundingClientRect(),C=i?.radius||fo.style.borderRadius||"16px";delete go.dataset.hidden,fo.dataset.morphing="true",ei();let S=go.getBoundingClientRect(),$=en??{left:(window.innerWidth-(S.width||228))/2,top:window.innerHeight-24-(S.height||52),width:S.width||228,height:S.height||52};if(v||$.width<=0||k.width<=0)y();else{si(k,C);for(let e of ii())ai(m(e,{opacity:0,y:16,filter:"blur(2px)"},l));ai(m(bn,{opacity:0},l)),ai(m(fo,{left:[`${k.left}px`,`${$.left}px`],top:[`${k.top}px`,`${$.top}px`],width:[`${k.width}px`,`${$.width}px`],height:[`${k.height}px`,`${$.height}px`],borderRadius:[C,$.height/2+"px"]},s)).finished.then(y).catch(()=>{g===Qo&&y()})}}function pi(e){un();let t=e&&!Ae;if(Ae=e,No||Pn?.wake(t),delete fo.dataset.tipsReady,fo.toggleAttribute("data-tips-restored",No),!M.onboarding)try{e?localStorage.setItem(Xo,"1"):localStorage.removeItem(Xo)}catch{}if(e&&(_e=!1),e||(clearTimeout(Io),Io=0,Pe=!1),ce)return cancelAnimationFrame(Kn),function(){let e=Math.max(1,.9*Math.min(window.innerHeight,window.visualViewport?.height??window.innerHeight)),t=Gn(),o=oi().getBoundingClientRect();lo.style.setProperty("--mobile-pill-x",o.left+o.width/2-window.innerWidth/2+"px"),lo.style.setProperty("--mobile-pill-y",o.bottom-(window.innerHeight+t-6)+"px"),lo.style.setProperty("--mobile-pill-scale-x",String(Math.max(.01,o.width/Math.max(1,window.innerWidth-24)))),lo.style.setProperty("--mobile-pill-scale-y",String(Math.max(.01,o.height/e)))}(),!t||No||matchMedia("(prefers-reduced-motion: reduce)").matches?delete lo.dataset.mobileEntering:lo.dataset.mobileEntering="",Re=!1,Qn(),sa(),vn.show(),vn.update(),void(void 0!==lo.dataset.mobileEntering&&(Kn=requestAnimationFrame(()=>{delete lo.dataset.mobileEntering})));if(pe){let t=Zo,o=e?oi().getBoundingClientRect():null;e||delete go.dataset.edgeOrient,mt=e?mt:gt,Ko=void 0,Re=!1,Zo=!0;let n=ni();return n&&(n.style.transition="none"),vn.show(),Qn(),sa(),ci(e,t,o),void vn.update()}let o=go.getBoundingClientRect();mt=e?void 0:gt,Ko=void 0,Re=!1,Qn(),sa(),Uo?.stop(),go.style.translate="0px 0px";let n=go.getBoundingClientRect();!No&&!matchMedia("(prefers-reduced-motion: reduce)").matches&&(Uo=m(go,{translate:[`${o.left-n.left}px ${o.top-n.top}px`,"0px 0px"]},{type:"spring",stiffness:680,damping:32,mass:.55})),vn.show(),vn.update()}function ui(){if(Te=!1,clearTimeout(Io),Io=0,Pe)return Wn(pt),to=null,Pe=!1,void sa();Xe=null,Fe=null,Pe=!1,Zt=null,it="",_e=!1,sa()}function hi(){Oe=!1,qe=!1,Ue?.setActive(!1),Nn(),ui(),Ae&&pi(!1),_e=!1,Te=!1,Re=!0,We=!0;try{sessionStorage.setItem(Fo,"1")}catch{}sa()}function mi(){We=!1,Re=!1;try{sessionStorage.removeItem(Fo)}catch{}sa()}function gi(e){if(Te=!1,clearTimeout(Io),Io=0,e.page!==Sn()){let t=new URL(e.page,location.origin);return t.searchParams.set("comment",e.id),void location.assign(t)}$o=Co!==e.id||wo.hidden?null:wo.getBoundingClientRect(),$o&&zo(!0),Xe=e.id,Fe=null,Pe=!1,Zt=null,it="",_e=!1;let t=ce&&Ae;t&&pi(!1);let o=ea(e.anchor);o.attached&&!$o&&(t||!ce)&&(Yo?ie:window).scrollBy({top:(o.y-.35*(t?Math.min(window.innerHeight,window.visualViewport?.height??window.innerHeight):window.innerHeight))/(Yo?Jn*Cn():1),behavior:t&&!matchMedia("(prefers-reduced-motion: reduce)").matches?"smooth":"instant"}),sa()}function fi(){return Ne.filter(e=>(tt||e.page===Sn())&&("all"===Ze||e.resolved===("resolved"===Ze))&&(!et||!!e.tags?.includes(et))&&(!ot||e.comments.some(e=>`${e.body} ${e.author.name}`.toLowerCase().includes(ot.toLowerCase()))||e.page.toLowerCase().includes(ot.toLowerCase()))).sort((e,t)=>t.updatedAt-e.updatedAt)}function bi(){go.style.display=We?"none":"",vn.update();let{dockCenter:e}=Q(window.innerWidth,window.innerHeight,Ae);if(ce)ti(),Object.assign(go.style,{left:"50%",top:"auto",bottom:"calc(16px + env(safe-area-inset-bottom,0px))",transform:"translateX(-50%)"});else if(pe)Zo||(delete go.dataset.hidden,Ae?ei():(ti(),mt&&on(mt)),dn());else{delete go.dataset.hidden;let t=!Ae&&M.drawerContainer?.isConnected?M.drawerContainer.getBoundingClientRect():void 0;t?.width&&!tn&&(Jo=t.left+t.width/2);let o=go.offsetWidth/2,n=t?.width&&void 0!==Jo?Math.max(16+o,Math.min(window.innerWidth-16-o,Jo)):e;if(mt)on(mt);else if(n!==Ko){let e=go.getBoundingClientRect(),t=e.left+e.width/2;Uo?.stop(),go.style.top="",go.style.bottom="",go.style.left=`${n}px`,go.style.translate="0px 0px",void 0!==Ko&&!matchMedia("(prefers-reduced-motion: reduce)").matches&&(Uo=m(go,{translate:[`${t-n}px ${e.top-go.getBoundingClientRect().top}px`,"0px 0px"]},{type:"spring",stiffness:680,damping:32,mass:.55})),Ko=n}}let t=e=>({glyph:e}),o=[{id:"browse",label:Ce("Browse website",B.browse),icon:t("pointer"),onSelect:()=>Xn(!1)},{id:"comment",label:Ce("Add comment",B.comment),icon:t("comment"),onSelect:()=>Xn(!Te)},...I?[{id:"design",label:Ce("Design mode",B.design),icon:t("design"),onSelect:()=>Un(!qe)}]:[],{id:"comments",label:M.onboarding?Ae?"Close project sidebar":"Project settings":Ae?"Close comment sidebar":`View all comments · ${Ne.filter(e=>!e.resolved).length} open`,icon:t("expand"),onSelect:()=>pi(!Ae)},{id:"account",expandedOrder:-1,label:je.user?`${je.user.name} · Account`:M.onboarding?.inProject?"Set up komo":"Enter your name",icon:{user:je.user},onSelect:()=>{Pe||Io?(clearTimeout(Io),Io=0,Pe=!1,sa()):Qi()}},{id:"copy-prompts",keepOpenOnSelect:!0,label:"all"===Si?"Copied prompt":"Copy all comments for agent",icon:t("all"===Si?"check":"copy"),showInBar:!1,onSelect:()=>Wn(()=>Ei("all"))},...!ae||ce||qe?[]:[{id:"layout",label:"edge"===le?"Frame view":"Floating view",icon:t("expand"),showInBar:!1,onSelect:()=>hn("edge"===le?"background":"edge")}],{id:"dismiss",label:B.restore?`Dismiss Komo · ${B.restore.label} to restore`:"Dismiss Komo",icon:t("close"),onSelect:hi},{id:"visibility",label:Re?"Show comment pins":"Hide comment pins",icon:t("comment"),showInBar:!1,onSelect:()=>{Re=!Re,Ci(),bi()}}];"Offline"===nt&&o.push({id:"retry",label:`${bt?.title??"Offline"} · Retry`,icon:t("info"),showInBar:!1,onSelect:Hn}),To.render({items:M.onboarding?o.filter(e=>"account"===e.id||"comments"===e.id):o,alignEnd:(!Ae||!pe)&&(!!mt&&mt.y>window.innerHeight/2),edge:Ae&&pe?"bottom":mt?.edgeX??mt?.edgeY??(mt&&mt.y<window.innerHeight/2?"top":"bottom"),activeId:Pe?"account":qe?"design":Te?"comment":Ae?"comments":"browse",label:"Website review",moreLabel:"More review tools"})}let xi="",wi=new Set,yi=e=>e.page!==Sn()?e.page:wi.has(e.id)?"Not found on page":"",vi=!1,ki=0;function Ci(e=!1){if(Ct||vi&&!e)return;if(Re)return xi="",zo(),void ho.replaceChildren();let t=Sn(),o=Ne.filter(e=>!(e.page!==t||e.resolved||et&&!e.tags?.includes(et))),n=function(){let e=new Map,t=new Map,o=new WeakMap,n=new WeakMap,i=(e,t,i)=>{let a=t.context,r=[te(t.text),a.tag,a.role,a.label,a.nearby],s=JSON.stringify([i,a.tag,r.map(Boolean)]),d=o.get(e);d||o.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=n.get(t);e||n.set(t,e=[oe(t),t.tagName.toLowerCase(),t.getAttribute("role")||"",se(t),de(t)]);let o=c(e);l.set(o,l.has(o)?null:t)}}return l.get(c(r))??null},a=t=>(e.has(t)||e.set(t,me(t,void 0,i)),e.get(t)??null);return{resolve:a,locate:e=>(t.has(e)||t.set(e,be(e,a(e))),t.get(e))}}(),i=function(e,t){let o=new Map;for(let n of e){if(n.resolved||n.anchor.unstacked)continue;let e=t(n);if(null===e)continue;let i=o.get(e)??[];i.push(n),o.set(e,i)}let n=new Map;for(let e of o.values())if(!(e.length<2)){e.sort((e,t)=>e.createdAt-t.createdAt||e.id.localeCompare(t.id));for(let t of e)n.set(t.id,e)}return n}(o,e=>n.resolve(e.anchor)),a=o.map(e=>{let t=n.locate(e.anchor);if(t.y<-t.height-40||t.y>window.innerHeight+40)return{thread:e,rect:t,blocked:!1};let o=n.resolve(e.anchor),i=ta(t.x+8,t.y-10);return{thread:e,rect:t,blocked:!(!o||!i||o.contains(i)||i.contains(o))}});for(let{thread:e,rect:t}of a){if(wi.has(e.id)===!t.attached)continue;t.attached?wi.delete(e.id):wi.add(e.id);let o=co.querySelector(`.thread-item[data-thread="${CSS.escape(e.id)}"] .page`);o&&(o.textContent=yi(e))}let r=JSON.stringify([Xe,Fe&&n.locate(Fe),a.map(({thread:e,rect:t,blocked:o})=>[e.id,t,o,L(t,window.innerWidth)])]);if(r===xi)return;xi=r,It?.isPreviewing(Eo)||zo();let s=new Map(Array.from(ho.querySelectorAll(".pin-stack"),e=>[e.dataset.stack,e.scrollLeft]));ho.replaceChildren();let d=new Map,l=new Map(a.map(e=>[e.thread.id,e]));for(let{thread:e,rect:t,blocked:o}of a){if(!t.attached)continue;let n=i.get(e.id),a=n&&l.get(n[0].id),r=a?.rect.attached?a:{rect:t,blocked:o};if(r.rect.y<-r.rect.height-40||r.rect.y>window.innerHeight+40||r.blocked)continue;let s=Ne.indexOf(e)+1;if(t.width&&t.height){let o=v("div","area");Object.assign(o.style,{left:`${t.x}px`,top:`${t.y}px`,width:`${t.width}px`,height:`${t.height}px`,opacity:e.id===Xe?"1":".45"}),ho.append(o)}let c=C(`Comment ${s}: ${Kt(e.comments[0]?.body??"").slice(0,100)}`,()=>gi(e),`pin${e.id===Xe?" active":""}${e.resolved?" resolved":""}${t.attached?"":" detached"}`);if(c.textContent="",c.title="",e.comments[0]){let t=e.comments[0].author;f(c,t.accentColor),c.append($(t));let o=c.querySelector("img");o&&(o.draggable=!1)}if(ia(c,e,t),e.resolved){let e=v("span","pin-check");e.append(k("check")),c.append(e)}let p=()=>{if(Xe||Fe||_e||Ct||_t||vo)return;ko=!1,window.clearTimeout(yo);let o=wo.hidden||Co!==e.id;So?.cancel(),Co=e.id,wo.replaceChildren();let n=e.comments[0];if(!n)return;let i=C("Open comment",()=>gi(e),"pin-preview-open");i.textContent="";let a=Xt.test(n.body),r=v(a?"div":"p","hover-message",Kt(n.body));a&&Ft().then(({renderDesignComment:t})=>t(r,n.body,{key:Eo=`hover:${n.id}`,resolve:Ut(e),note:(e,t)=>e.textContent=t,compact:!0})),i.append(Pi(n)),a?(r.classList.add("pin-preview-card"),r.addEventListener("click",t=>{t.target.closest(".design-toggle")||gi(e)})):i.append(r);let s=C(e.resolved?"Reopen comment":"Resolve comment",()=>{zo(),Wi(e)},"icon pin-preview-resolve","check");s.disabled=!Ri(),wo.append(i,...a?[r]:[],s),wo.hidden=!1;let d=na(c,t),l=Ae&&!ce?396:12,p=d.x+20+320>window.innerWidth-l?d.x-340:d.x+20;Object.assign(wo.style,{left:`${Math.max(12,p)}px`,transformOrigin:d.x<Math.max(12,p)+160?"top left":"top right",top:`${Math.max(12,Math.min(d.y-28,window.innerHeight-wo.offsetHeight-92))}px`}),o&&!matchMedia("(prefers-reduced-motion: reduce)").matches&&(So=wo.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=>{vo&&!Ct&&!_t&&0===e.buttons&&(e.movementX||e.movementY)&&(vo=!1,p())}),c.addEventListener("focus",p),c.addEventListener("blur",()=>zo()),c.addEventListener("pointerleave",()=>{yo=window.setTimeout(zo,120)}),c.dataset.thread=e.id,c.dataset.pointer=L(r.rect,window.innerWidth),Object.assign(c.style,{left:`${t.x}px`,top:`${t.y}px`}),n&&a?.rect.attached&&!a.blocked){let t=d.get(n[0].id);if(!t){t=v("div","pin-stack"),t.dataset.stack=n[0].id,t.setAttribute("role","group"),t.setAttribute("aria-label",`${n.length} comments on this component`);let e=Math.min(178,40+22*(n.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",()=>{zo(),Gi()}),d.set(n[0].id,t),ho.append(t)}c.style.left="",c.style.top="",c.style.order=String(n.indexOf(e)),c.style.marginLeft=n[0].id===e.id?"0":"-12px",t.append(c)}else ho.append(c)}for(let[e,t]of d)t.scrollLeft=s.get(e)??0;if(Fe&&Fe.width>0&&Fe.height>0){let e=ea(Fe),t=v("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`}),ho.append(t)}}let Si=null,$i=0;async function Ei(e){let t=i(Ne,{...M,origin:location.origin,page:"page"===e?Sn():void 0});t?(await navigator.clipboard.writeText(t),!Le&&(Si=e,_o.textContent="Agent prompt copied",clearTimeout($i),bi(),Hi(),$i=window.setTimeout(()=>{Si=null,bi(),Hi()},2e3))):_n("page"===e?"No open comments on this page":"No open comments to copy")}let zi,ji=new Set,Mi="branch-comments:dismissed-tips",Li=[["copy","Copy comments for your agent."]];function Ai(){let e=fo.getBoundingClientRect();for(let t of fo.querySelectorAll(".sidebar-tip")){let o="copy"===t.dataset.tip,n=fo.querySelector(o?".copy-page-prompt":'.toolbar [aria-label^="Add comment"]')?.getBoundingClientRect();if(t.hidden=!n?.width,!n?.width)continue;let i=n.left+n.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=o?n.bottom-e.top+10+"px":n.top-e.top-10-t.offsetHeight+"px",t.style.setProperty("--caret-x",i-a+"px")}}B.comment&&Li.push(["shortcut",`Press ${B.comment.label} to comment.`]);let _i,Ti=!1;let Ri=()=>!Be&&(Et||!!je.user?.verified);function Wi(e,t){if(!(je.user||$t&&Qt.trim()))return void Qi();let o=Xe===e.id,n=t=>{let n=Xe;return o&&(Xe=t?null:e.id),Ge(Ve(e.id,e=>({...e,resolved:t,resolvedBy:t?je.user:null})),async o=>{je.user||await je.guest(Qt),await je.request(`threads/${o(e.id)}`,"PATCH",{resolved:t})},()=>{Xe||(Xe=n)})};Wn(()=>n(!e.resolved)),_n(e.resolved?"Comment reopened":"Comment resolved",{label:"Undo",run:()=>Wn(()=>n(e.resolved))},t)}let qi,Oi=new WeakMap;function Hi(){if(M.onboarding){if(zi?.(),fo.replaceChildren(),M.onboarding.inProject)return;if(Ae){let e=v("aside","panel");e.setAttribute("aria-label","Project settings");let t=v("div","panel-head","Project settings"),o=v("div","empty");o.append(v("p","","Leave comments on your connected website."),C("Manage project",()=>{Qi()},"secondary")),e.append(t,o),fo.append(e)}return}if(!Ae&&(pe||ce))return;let e=fo.querySelector(".list"),o=e?.scrollTop??0,n="Search comments"===co.activeElement?.getAttribute("aria-label"),i=n?co.activeElement.selectionStart:null;if(!Ae&&!pe&&!ce)return zi?.(),void fo.replaceChildren();let a=fo.querySelector(".panel");if(!a){a=v("aside","panel"),a.setAttribute("aria-label","All comments");let e=v("div","panel-head"),t=v("div","row between sidebar-title"),o=v("div","filter-slot"),n=v("div","row"),i=e=>{let t=a.querySelector(".sidebar-search-field"),o=n.querySelector('[aria-label="Search comments"]'),i=(e?o:t).getBoundingClientRect();Vo=e,e||(ot="",t.querySelector("input").value=""),Hi();let r=(e?t:o).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():o.focus()};n.append(C("Copy page comments",()=>"resolved"===Ze?function(e){if(!Ti||Je.busy)return;let t=fi().filter(e=>e.resolved).map(e=>e.id);if(!t.length)return;let o=v("div","cleanup-confirm");o.popover="auto",o.setAttribute("role","alertdialog"),o.setAttribute("aria-label","Delete resolved comments permanently"),o.append(v("strong","",`Delete ${t.length} resolved ${1===t.length?"thread":"threads"}?`),v("p","","Their replies will be deleted too. This can’t be undone."));let n=v("div","cleanup-actions"),i=()=>{o.hidePopover(),e.focus({preventScroll:!0})};n.append(C("Cancel",i,"secondary"),C("Delete permanently",()=>{i(),Wn(async()=>{try{for(let e=0;e<t.length;e+=250){let o=t.slice(e,e+250),n=new Set(o);await Je.submit(e=>e.filter(e=>!n.has(e.id)),async()=>{await je.request("project/clear-resolved","POST",{confirm:M.project,threadIds:o})})}}finally{await Dn()}})},"secondary destructive")),o.append(n),fo.append(o),o.addEventListener("toggle",()=>{o.matches(":popover-open")||o.remove()}),o.showPopover();let a=e.getBoundingClientRect();o.style.left=`${Math.max(12,Math.min(a.right-o.offsetWidth,innerWidth-o.offsetWidth-12))}px`,o.style.top=`${Math.max(12,Math.min(a.bottom+8,innerHeight-o.offsetHeight-12))}px`,n.querySelector("button")?.focus()}(a.querySelector(".copy-page-prompt")):Wn(()=>Ei("page")),"icon copy-page-prompt","copy"),v("div","tag-filter-slot"),C("Search comments",()=>i(!0),"icon sidebar-search-trigger","search"),C("Close sidebar",()=>pi(!1),"icon","close"));let r=v("div","sidebar-selector");r.append(o,v("div","scope-slot")),t.append(r,n);let s=v("div","sidebar-search"),d=v("div","sidebar-search-inner"),l=v("div","sidebar-search-row"),c=v("div","sidebar-search-field"),p=v("input");p.type="search",p.placeholder="Search",p.setAttribute("aria-label","Search comments"),p.addEventListener("input",()=>{ot=p.value,Hi()}),p.addEventListener("keydown",e=>{"Escape"===e.key&&(e.stopPropagation(),u())}),c.append(k("search"),p);let u=()=>i(!1);c.append(C("Close search",u,"icon search-cancel","close")),l.append(c),d.append(l),s.append(d),e.append(t,s);let h=v("div","morphing-menu__tooltip sidebar-tooltip");h.setAttribute("aria-hidden","true"),co.append(h);let m=0,g=0,f=()=>{clearTimeout(m),h.dataset.open&&(delete h.dataset.open,g=Date.now()+300)};zi=()=>{clearTimeout(m),h.remove(),zi=void 0};let b=e=>{clearTimeout(m);let t=()=>{if(!e.isConnected)return;let t=e.getBoundingClientRect();h.textContent=e.ariaLabel;let o=h.offsetWidth/2;h.style.left=`${Math.max(8+o,Math.min(innerWidth-8-o,t.left+t.width/2))}px`,h.style.top=`${t.bottom+8}px`,h.dataset.open="true"};h.dataset.open||Date.now()<g?t():m=window.setTimeout(t,400)};for(let e of n.querySelectorAll("button"))e.removeAttribute("title"),e.addEventListener("pointerenter",t=>{"mouse"===t.pointerType&&b(e)}),e.addEventListener("pointerleave",f),e.addEventListener("focus",()=>b(e)),e.addEventListener("blur",f);n.addEventListener("pointerdown",f),a.append(e),fo.append(a)}let r=a.querySelector(".copy-page-prompt");if("resolved"===Ze&&_i!==je.token){_i=je.token,Ti=!1;let e=_i;e&&je.request("project").then(()=>{je.token===e&&(Ti=!0,Hi())}).catch(()=>{})}let s="resolved"===Ze;r.disabled=s&&(!Ti||Je.busy||!fi().length),r.classList.toggle("destructive",s);let d=s?"trash":"page"===Si?"check":"copy";if(r.dataset.glyph!==d){let e=r.querySelector("svg:not([data-leaving])"),t=k(d),o=void 0!==r.dataset.glyph&&!matchMedia("(prefers-reduced-motion: reduce)").matches;if(r.dataset.glyph=d,o&&e){e.setAttribute("data-leaving","true"),r.append(t);let o={duration:200,easing:"cubic-bezier(.22,1,.36,1)"},n={opacity:0,transform:"scale(.7)",filter:"blur(2px)"},i={opacity:1,transform:"scale(1)",filter:"blur(0px)"};e.animate([i,n],{...o,fill:"forwards"}).finished.then(()=>e.remove()).catch(()=>e.remove()),t.animate([n,i],o)}else r.replaceChildren(t)}r.setAttribute("aria-label",s?Ti?"Delete resolved comments permanently":"Project owner only":"page"===Si?"Copied prompt":"Copy page comments"),a.dataset.search=String(Vo),a.querySelector(".filter-slot").inert=Vo,a.querySelector(".scope-slot").inert=!Vo,a.querySelector(".sidebar-search-trigger").inert=Vo,a.querySelector(".sidebar-search").inert=!Vo;let l=a.querySelector(".filter-slot"),c=X?[...new Set(Ne.flatMap(e=>e.tags??[]))].sort():[];et&&!c.includes(et)&&(et=""),l.dataset.value!==Ze&&(l.dataset.value=Ze,l.replaceChildren(t("Filter comments",[["open","Comments"],["all","All comments"],["resolved","Resolved"]],Ze,e=>{Ze=e,Hi(),Ci()})));let p=a.querySelector(".tag-filter-slot"),u=`${et} ${c}`;if(p&&p.dataset.value!==u&&(p.dataset.value=u,p.replaceChildren(),c.length)){let e=et?`Filtered by #${et}`:"Filter by tag",o=t(e,[["","All tags"],...c.map(e=>[e,`#${e}`])],et,e=>{et=e,Hi(),Ci()}),n=o.querySelector("summary");n.className="icon tag-filter-trigger"+(et?" active":""),n.setAttribute("aria-label",e),n.title=e,n.replaceChildren(k("tag")),p.append(o)}let h=a.querySelector(".scope-slot");h.dataset.value!==String(tt)&&(h.dataset.value=String(tt),h.replaceChildren(t("Comment pages",[["page","This page"],["all","All pages"]],tt?"all":"page",e=>{tt="all"===e,Hi()})));let m=!ce&&!No&&!matchMedia("(prefers-reduced-motion: reduce)").matches,g=new Map;if(m&&e){let t=e.getBoundingClientRect();for(let o of e.querySelectorAll("[data-thread]")){let e=o.getBoundingClientRect();e.bottom>=t.top&&e.top<=t.bottom&&g.set(o.dataset.thread,e.top)}}let f=v("div","list"),b=fi();b.length>40&&(f.dataset.long="");let x=!Ie&&"Connecting"===nt;f.setAttribute("aria-busy",String(x)),clearTimeout(io),f.addEventListener("scroll",()=>{f.dataset.scrolling="true",clearTimeout(io),io=window.setTimeout(()=>{delete f.dataset.scrolling},800)},{passive:!0});for(let e of b){let t=e.comments[0];if(!t)continue;let o=Oi.get(e);if(o){o.querySelector(".thread-card").classList.toggle("active",Xe===e.id),o.querySelector(".card-resolve").disabled=!Ri(),o.querySelector("small").textContent=S(t.createdAt),o.querySelectorAll(".reply-meta").forEach((t,o)=>{let n=e.comments[o+1];t.textContent=`${n.author.name} · ${S(n.createdAt)}`}),o.querySelector(".page").textContent=yi(e),f.append(o);continue}let n=C(`Open comment by ${t.author.name}`,()=>gi(e),"thread-card"+(Xe===e.id?" active":""));n.replaceChildren();let i=v("div","row");i.append($(t.author),v("span","author",t.author.name),v("small","",S(t.createdAt)));let a=v("div","meta");a.append(v("span","page",yi(e)),v("span","",e.resolved?"Resolved":e.comments.length>1?`${e.comments.length-1} ${2===e.comments.length?"reply":"replies"}`:"")),X&&e.tags?.length&&a.append(v("span","tag-list",e.tags.map(e=>`#${e}`).join(" ")));let r=v("p","preview",t.body);Xt.test(t.body)&&(r.textContent="Design change",Ft().then(({summarizeDesignComment:e})=>{r.textContent=e(t.body)})),n.append(r,i,a);let s=v("div","thread-item");s.dataset.thread=e.id;let d=C(e.resolved?"Reopen comment":"Resolve comment",()=>Wi(e),"icon card-resolve","check");if(d.disabled=!Ri(),s.append(n,d),e.comments.length>1){let t=v("div","sidebar-replies");for(let o of e.comments.slice(1)){let e=v("div","sidebar-reply");e.append($(o.author));let n=v("div");n.append(v("div","reply-meta",`${o.author.name} · ${S(o.createdAt)}`),v("p","",o.body)),e.append(n),t.append(e)}n.append(t)}Oi.set(e,s),f.append(s)}if(!f.childElementCount){let e=v("div","empty");if(x&&e.setAttribute("role","status"),e.append(k("comment"),v("strong","",ft?wt?"Private project":"Sign in required":"Offline"===nt&&bt?bt.title:x?"Loading comments…":ot?"No matching comments":"resolved"===Ze?"Nothing resolved yet":"No comments yet")),ft)e.append(v("p","",ft)),je.user?.verified||e.append(C("Sign in",Qi,"secondary"));else if("Offline"===nt&&bt){e.append(v("p","",bt.detail));let t=v("div","empty-actions");"site"===bt.kind&&t.append(C("Turn on comments",()=>{let e=new URL("/setup",M.endpoint);e.searchParams.set("workspace",M.project),e.searchParams.set("site",location.origin),window.open(e,"_blank","noopener")},"primary"),C("Copy link",()=>{navigator.clipboard.writeText(location.origin).then(()=>_n("Link copied")).catch(()=>_n(location.origin))},"secondary")),"site"!==bt.kind&&t.append(C("Try again",Hn,"secondary")),e.append(t)}else Ie&&!ot&&"resolved"!==Ze&&e.append(C("Add a comment",()=>{G(window.innerWidth,window.innerHeight)&&pi(!1),Xn(!0)},"secondary"));f.append(e),f.dataset.empty=""}if(Ne.length&&"Offline"===nt&&f.prepend(C("Saved comments · Try again",Hn,"secondary")),e?e.replaceWith(f):a.append(f),function(e){try{let e=JSON.parse(localStorage.getItem(Mi)??"[]");if(Array.isArray(e))for(let t of e)"string"==typeof t&&ji.add(t)}catch{}for(let[t,o]of Li){let n=fo.querySelector(`[data-tip="${t}"]`);if(!e||ji.has(t)){n?.remove();continue}if(n)continue;n=v("div","morphing-menu__tooltip sidebar-tip"),n.dataset.tip=t;let i=n;n.append(v("p","",o),C("Dismiss tip",()=>{ji.add(t);try{localStorage.setItem(Mi,JSON.stringify([...ji]))}catch{}i.dataset.leaving="",setTimeout(()=>i.remove(),150)},"icon","close")),fo.append(n)}Ai()}(!!f.querySelector(".empty [aria-label='Add a comment']")),requestAnimationFrame(Ai),f.scrollTop=o,m){let e=0,t=f.getBoundingClientRect();for(let o of f.querySelectorAll("[data-thread]")){let n=o.getBoundingClientRect();if(n.bottom<t.top||n.top>t.bottom)continue;let i=g.get(o.dataset.thread),a=void 0===i?8:i-n.top;Math.abs(a)>.5&&o.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"})}f.querySelector("[data-thread]")||f.animate([{opacity:0},{opacity:1}],{duration:150})}if(n){let e=a.querySelector('input[type="search"]');e.focus(),null!==i&&e.setSelectionRange(i,i)}}function Pi(e){let t=v("div","row");return t.append($(e.author),v("span","author",e.author.name),v("small","",S(e.createdAt))),t.title=e.author.verified?"Verified":"Guest",t}function Bi(e,t){return je.user?.id!==e.author.id||"[Comment deleted]"===e.body?[]:[{label:"Edit",icon:"edit",onSelect:()=>{Zt=e.id,eo=e.body,Vi()}},{label:"Delete",icon:"trash",destructive:!0,onSelect:()=>{let o=Ln(t.anchor);_n("Delete this comment?",{label:"Delete",run:()=>{let n=Xe;1===t.comments.length&&(Xe=null),Wn(()=>Ge(Ve(t.id,t=>{let o=t.comments.filter(t=>t.id!==Je.id(e.id));return o.length?{...t,comments:o}:null}),async o=>{await je.request(`threads/${o(t.id)}/comments/${o(e.id)}`,"DELETE")},()=>{Xe||(Xe=n)})),_n("Comment deleted",void 0,o)}})}}]}function Yi(t,o){let n=v("article","message");if(n.dataset.comment=t.id,n.append(Pi(t)),Zt===t.id){let e=v("textarea");e.value=eo,e.maxLength=4e3,e.setAttribute("aria-label","Edit comment"),e.dataset.focusKey="edit",e.addEventListener("input",()=>eo=e.value);let i=C("Save changes",()=>{let e=eo;Zt=null,Wn(()=>Ge(Ve(o.id,o=>({...o,comments:o.comments.map(o=>o.id===Je.id(t.id)?{...o,body:e,editedAt:Date.now()}:o)})),async n=>{await je.request(`threads/${n(o.id)}/comments/${n(t.id)}`,"PATCH",{body:e})},()=>{Zt||(Zt=Je.id(t.id),eo=e)}))},"primary");return i.disabled=Be,n.append(e,i,C("Cancel",()=>{Zt=null,Vi()},"secondary")),n}let i=v("div","message-content"),a=Xt.test(t.body),r=v(a?"div":"p","message-text");if(K(r,t.body),a){let e=({renderDesignComment:e})=>e(r,t.body,{key:t.id,resolve:Ut(o),note:K,onSwitch:()=>Gi()});It?e(It):Ft().then(e)}if(i.append(r),"[Comment deleted]"!==t.body){let e=C("Add reaction",()=>{Dt?.(!0),Dt=U(co,e,e=>function(e,t,o,n){if(!(je.user||$t&&Qt.trim()))return void Qi();Wn(async()=>{je.user||await je.guest(Qt);let i=je.user;await Ge(Ve(t.id,t=>({...t,comments:t.comments.map(t=>{if(t.id!==Je.id(e.id))return t;let a=Object.fromEntries(Object.entries(t.reactions).map(([e,t])=>[e,t.filter(e=>e!==i.id)]));return n&&(a[o]=[...a[o]??[],i.id]),{...t,reactions:a}})})),async i=>{await je.request(`threads/${i(t.id)}/comments/${i(e.id)}/reactions`,"POST",{emoji:o,active:n})}),n&&function(e,t){if(!D(t))return;let o=F(e);o.counts[t]=(o.counts[t]??(N.includes(t)?1:0))+1,o.recent=t,o.counts=Object.fromEntries(Object.entries(o.counts).sort((e,t)=>t[1]-e[1]).slice(0,200));try{localStorage.setItem(e,JSON.stringify(o))}catch{}}(`branch-comments:emoji:${M.project}:${i.id}`,o)})}(t,o,e,!(je.user&&t.reactions[e]?.includes(je.user.id))),Object.entries(t.reactions).find(([,e])=>je.user&&e.includes(je.user.id))?.[0],`branch-comments:emoji:${M.project}:${je.user?.id??"guest"}`,M.emojiDataSource)},"icon message-reaction","smile"),n=Object.entries(t.reactions).filter(([,e])=>e.length>0);if(e.dataset.reactions=JSON.stringify(n),n.length){e.replaceChildren(),e.classList.add("has-reactions");for(let[t,o]of n)e.append(v("span","reaction-value",`${t}${o.length>1?` ${o.length}`:""}`));e.setAttribute("aria-label","Change reactions")}e.setAttribute("aria-haspopup","menu"),e.setAttribute("aria-expanded","false"),i.append(e)}n.append(i);let s=v("div","actions");if(je.user?.id===t.author.id&&"[Comment deleted]"!==t.body){let i=e("Message actions",Bi(t,o));o.comments[0]?.id!==t.id&&n.firstElementChild?.append(i)}return t.editedAt&&s.append(v("small","","Edited")),s.childElementCount&&n.append(s),n}async function Ii(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 o=await je.request(`auth/${e}/start`,"POST",{}),n=new URL(o.url).origin,i=e=>{if(e.origin!==n||e.source!==t||"branch-comments:auth"!==e.data?.type)return;let{token:o,user:a}=e.data;"string"!=typeof o||!a?.id||!a?.name||!0!==a.verified||(je.save({token:o,user:a}),fn(),at=null,window.removeEventListener("message",i),clearTimeout(ro),t.close(),Pe=!!M.onboarding,sa(),!M.onboarding&&(to?Wn(Ui):(Wn(Dn),_n(`Signed in as ${a.name}`))))};window.addEventListener("message",i,{signal:Me.signal}),ro=window.setTimeout(()=>{window.removeEventListener("message",i)},6e5),t.location.href=o.url}catch(e){throw t.close(),e}}function Di(e,t,o){let n=v("div","tag-slot"),i=({tagEditor:i})=>i(n,{tags:e,suggestions:[...new Set(Ne.flatMap(e=>e.tags??[]))].sort(),onAdd:t,onRemove:o});return qi?i(qi):import("./tag-editor-ZA7NLPOJ.js").then(e=>{qi=e,i(e),Gi()}),n}function Ni(e,t){je.user?Wn(async()=>{let{tags:o}=await je.request(`threads/${Je.id(e.id)}`,"PATCH",t);Ne=Ne.map(t=>t.id===e.id?{...t,tags:o}:t),Hi()}):Qi()}function Xi(e){let t=v("form","composer "+(e?"reply-composer":"new-comment-composer")),o=v("textarea"),n=e?"":Vt;o.placeholder=e?"Reply…":n?"Add a note…":"Add a comment…",o.rows=1,o.maxLength=4e3,o.required=!!e||!Vt,o.value=e?so.get(e.id)??"":Jt,o.setAttribute("aria-label",e?"Reply":"Comment"),o.dataset.focusKey="body";let i=()=>{o.style.height="auto",o.style.height=`${Math.min(128,Math.max(e?34:28,o.scrollHeight))}px`,o.style.overflowY=o.scrollHeight>128?"auto":"hidden",Gi()};o.addEventListener("input",i),o.addEventListener("input",()=>{e?so.set(e.id,o.value):Jt=o.value}),o.addEventListener("keydown",e=>{"Enter"===e.key&&!e.shiftKey&&!e.isComposing&&(e.preventDefault(),t.requestSubmit())});let a=C(e?"Send reply":"Post comment",()=>{},"send","arrow");if(a.type="submit",a.disabled=Be,e)t.append(o,a);else{let e=v("div","draft-body");je.user&&e.append($(je.user)),e.append(o,a),X&&e.append(Di(Gt,e=>Gt=[...Gt,e],e=>Gt=Gt.filter(t=>t!==e))),t.append(e)}if(o.addEventListener("input",()=>{a.disabled=Be||!o.value.trim()&&!n}),a.disabled||=!o.value.trim()&&!n,n){let e=v("div","draft-proposal");e.textContent=n,Ft().then(({renderDraftProposal:t})=>{t(e,n),Gi()}),t.prepend(e)}return t.addEventListener("submit",t=>{if(t.preventDefault(),(o.value.trim()||n)&&!Be){if(!je.user)return to=()=>Fi(e),void Qi();Wn(()=>Fi(e))}}),requestAnimationFrame(()=>{o.isConnected&&i()}),t}async function Fi(e){if(M.onboarding)throw new Error("Open your connected website to leave a comment.");if(!je.user)throw new Error("Enter your name to leave a comment.");let t=Date.now(),o={id:`pending-${crypto.randomUUID()}`,body:e?so.get(e.id)??"":[Jt.trim(),Vt].filter(Boolean).join("\n\n"),author:{...je.user},createdAt:t,editedAt:null,reactions:{}};if(o.body.trim())if(e)so.delete(e.id),await Ge(Ve(e.id,e=>({...e,updatedAt:t,comments:[...e.comments,o]})),async t=>{let n=(await je.request(`threads/${t(e.id)}/comments`,"POST",{body:o.body})).id??(await je.list()).find(o=>o.id===t(e.id))?.comments.filter(e=>e.author.id===o.author.id&&e.body===o.body).at(-1)?.id;return n?{[o.id]:n}:{}},()=>{let t=Je.id(e.id);Ne.some(e=>e.id===t)?so.set(t,[o.body,so.get(t)].filter(Boolean).join("\n")):Fe===e.anchor?Jt=[Jt,o.body].filter(Boolean).join("\n"):jt.push({anchor:e.anchor,text:o.body})});else if(Fe){let e=Fe,n=Gt,i=Jt,a=Vt,r={id:`pending-${crypto.randomUUID()}`,page:Sn(),anchor:e,tags:n,resolved:!1,resolvedBy:null,createdAt:t,updatedAt:t,comments:[o]};Xe=r.id,Fe=null,Jt=Vt="",Gt=[],await Ge(e=>[...e,r],async()=>{let t=await je.request("threads","POST",{page:r.page,anchor:e,body:o.body,...n.length?{tags:n}:{}}),i=t.commentId??(await je.list()).find(e=>e.id===t.id)?.comments[0]?.id;return{[r.id]:t.id,...i?{[o.id]:i}:{}}},()=>{Fe?jt.push({anchor:e,text:o.body}):(Xe=null,Fe=e,Jt=i,Vt=a,Gt=n)}),Te&&!Fe&&!Pe&&Xe===Je.id(r.id)&&(Xe=null,Ae&&pi(!1),_e=!0,sa())}}async function Ui(){let e=to;to=null,e&&await e()}let Ki,Ji=new Map;function Vi(){Bt?.then(({resetDesignPreviews:e})=>e(new Set([...Pe?[]:Ne.find(e=>e.id===Xe)?.comments.map(e=>e.id)??[],...wo.hidden?[]:[Eo]])));let t=Qe;Qe=void 0,Dt?.(!0),Dt=void 0;let o=co.activeElement,i=o?.dataset.focusKey,a=i?o?.selectionStart:null,r=mo.querySelector(".messages")?.scrollTop??0,s=mo.querySelector(".account-dialog")?.scrollTop??0,d=Pe?"account":Fe?"draft":Xe,l=mo.firstElementChild,c=Mt!==d,p=l?.getBoundingClientRect(),u=new Map([...l?.querySelectorAll("[data-comment]")??[]].map(e=>[e.dataset.comment,e.querySelector(".message-reaction")]));if(l&&c&&"account"===Mt&&!matchMedia("(prefers-reduced-motion: reduce)").matches){let e=v("div","account-layer");e.inert=!0,e.setAttribute("aria-hidden","true"),e.append(l),pe?fo.append(e):co.append(e),Nt.set(e,t),t=void 0;let o=e.animate([{opacity:1},{opacity:0}],{duration:150,fill:"forwards"});l.animate([{transform:"none"},{transform:"translateY(4px) scale(.99)"}],{duration:150,fill:"forwards"}),o.finished.catch(()=>{}).finally(()=>{e.remove(),Nt.get(e)?.(),Nt.delete(e)})}if(l&&c&&"account"!==Mt&&!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",co.append(l),Nt.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(),Nt.delete(l)})}if(t?.(),mo.replaceChildren(),Mt=d,mo.classList.toggle("account-layer",Pe),!Fe&&!Xe&&!Pe)return void Tn();mo.classList.toggle("account-layer",Pe);let h=v("section",Pe?"dialog account-dialog":"dialog");Pe&&h.setAttribute("aria-modal","false"),h.setAttribute("role","dialog"),h.setAttribute("aria-label",Pe?"Reviewer account":Fe?"New comment":"Comment thread");let m=v("div","dialog-head row between"),b=v("div","row"),x=Ne.find(e=>e.id===Xe)??null;if(x&&!Pe){let t=(e,t)=>({label:e,icon:"Copy link"===e?"link":"Copy selector"===e?"code":"comment",onSelect:()=>Wn(async()=>{await navigator.clipboard.writeText(t()),_n("Copied")})}),o=x.anchor.source,n=o?M.sourceUrl?.(o,M.branch)??`https://github.com/${M.repo}/blob/${encodeURIComponent(M.branch)}/${o.split("/").map(encodeURIComponent).join("/")}`:"",i=e("Comment actions",[...Bi(x.comments[0],x),...n&&/^(https?:|vscode:|cursor:)/.test(n)?[{label:"Open source",icon:"code",onSelect:()=>window.open(n,"_blank","noopener,noreferrer")}]:[],t("Copy link",()=>{let e=new URL(x.page,location.origin);return e.searchParams.set("comment",x.id),e.href}),t("Copy feedback",()=>[`Repository: ${M.repo}`,`Branch: ${M.branch}`,`Page: ${new URL(x.page,location.origin).href}`,`Target: ${x.anchor.selector||"Page position"}`,...x.anchor.source?[`Source: ${x.anchor.source}`]:[],...x.anchor.text?[`Element text: ${x.anchor.text}`]:[],"",...x.comments.map(e=>`${e.author.name}: ${e.body}`)].join("\n")),t("Copy selector",()=>x.anchor.selector)]);b.append(i);let a=C(x.resolved?"Reopen comment":"Resolve comment",()=>Wi(x,Ln(x.anchor)),"icon","check");a.disabled=!Ri(),b.append(a)}if(b.append(C(Pe?"Close account":"Close comment",ui,"icon","close")),m.append(b),x||Pe?h.append(m):h.append(C("Close comment",ui,"draft-close icon","close")),Pe){let e=v("form","account");if(je.user){at??={name:je.user.name,avatarUrl:je.user.avatarUrl??"",accentColor:je.user.accentColor??g};let t=at,o=$({...je.user,...t}),n=v("div","account-summary"),i=v("span","account-status");je.user.verified?(i.append(document.createTextNode("Connected with ")),je.user.id.startsWith("google:")&&i.append(E()),i.append(document.createTextNode(je.user.id.startsWith("google:")?"Google":"GitHub"))):i.textContent="Guest account";let a=C("Update profile photo",()=>d.click(),"account-avatar-button");a.replaceChildren(o),n.append(a,v("h2","","Your profile"),i),e.append(n);let r=v("label","account-name-label","Display name"),s=v("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,ut(t)}),s.addEventListener("blur",()=>{ut(t,!0)}),r.append(s);let d=v("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",()=>Wn(async()=>{let e=d.files?.[0];if(!e)return;if(e.size>10485760)throw new Error("Choose a photo under 10 MB.");let o=await createImageBitmap(e),n=document.createElement("canvas");n.width=n.height=128;let i=n.getContext("2d"),a=Math.min(o.width,o.height);i.drawImage(o,(o.width-a)/2,(o.height-a)/2,a,a,0,0,128,128),o.close();let r=.8;do{t.avatarUrl=n.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.");ut(t,!0),Vi()})),n.append(d);let l=function(e,t){let o=v("div","account-accent-mount");o.style.minHeight="62px";let n,i=!1,a=async()=>{o.replaceChildren(),o.setAttribute("aria-busy","true");try{let a=await import("./accent-picker-F5UI2NP7.js");if(i)return;let r=a.accentPicker(e,t);n=r.destroy,o.replaceChildren(r.element)}catch{i||o.replaceChildren(C("Load accent colors",()=>{a()},"secondary"))}finally{o.removeAttribute("aria-busy")}};return a(),{element:o,destroy:()=>{i=!0,n?.()}}}(t.accentColor,e=>{t.accentColor=e,f(o,e),ut(t)});if(Qe=l.destroy,e.append(r,l.element),M.onboarding){let t=M.onboarding;e.append(qn(v("section","onboarding-panel"),import("./onboarding-NO3RQWR7.js").then(({onboardingPanel:e})=>e(je,t))))}else e.append(ce?mn("sidebar","Sidebar",[["mobile","Floating sidebar"]],"mobile",()=>{}):ae?mn("sidebar","Sidebar",[["edge","Floating"],["background","Frame"]],le,hn):v("p","muted","Floating sidebar · Set pageRoot for Frame.")),ye&&e.append(function(){let e=mn("channel","Comments",[["local","Local development"],["shared","Site comments"]],ze,gn);return e.append(v("p","muted","Separate channels, both saved to this project.")),e}()),e.append(On());if(je.user?.verified&&!M.onboarding?.code&&!M.onboarding?.claimKey&&!M.onboarding?.invite){let t=v("div");e.append(t),import("./onboarding-NO3RQWR7.js").then(({projectManagement:o})=>{t.isConnected&&t.replaceWith(o(je,M.onboarding?.workspace,t=>{if(t)Xe=null,Je.replace([],Je.revision),e.querySelector(".account-usage")?.remove();else{let t=M.onboarding?.workspace?`usage?workspace=${encodeURIComponent(M.onboarding.workspace)}`:"usage";e.querySelector(".account-usage")?.replaceWith(On(t)),Dn().catch(()=>{})}}))})}e.addEventListener("submit",e=>{e.preventDefault(),ut(t,!0)});let c=v("div","account-session");c.append(C("Sign out",()=>Wn(async()=>{if(Je.busy||Be)return void _n("Wait for your changes to save.");clearTimeout(rt),ct=null;let e=je.logout();fn(),at=null,dt=null,sa();try{await e}finally{fn(),Wn(Dn),sa()}}),"secondary")),e.append(c),!je.user.verified&&kt&&e.append(ht()),!je.user.verified&&St&&e.append(C("Sign in with GitHub",()=>Wn(()=>Ii()),"primary"))}else{if(e.append(v("h2","",M.onboarding?"Set up komo":"Leave comments")),M.onboarding?.inProject){e.append(v("p","","Connect komo to start leaving feedback on this site. One site per line."));let t=v("label","account-name-label","Production and preview sites"),o=v("textarea");o.rows=2,o.placeholder="https://your-site.com",o.value=vt,o.dataset.focusKey="setup-sites",o.addEventListener("input",()=>{vt=o.value}),t.append(o),e.append(t);let i=C("Connect komo",()=>Wn(async()=>{if(!yt){yt=!0,i.disabled=!0;try{let e=await function(e,t,o=[location.origin]){let n=new URL(e.endpoint),i=new URL("/setup/connect",n);i.searchParams.set("code",e.onboarding.code),i.searchParams.set("origin",location.origin),i.searchParams.set("sites",JSON.stringify(o));let a=window.open("about:blank","komo-connect","popup,width=600,height=720");return a?new Promise((o,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!==n.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(),o(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."))}(M,Me.signal,function(e,t){let o=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}),n=[...new Set([t,...o])];if(n.length>10)throw new Error("Connect up to ten sites at a time.");return n}(vt,location.origin));if(Le)return;(function(e,t){try{localStorage.setItem(z(e),JSON.stringify({project:t.project,repo:t.repo}))}catch{}})(M,e),M={...M,project:e.project,repo:e.repo,onboarding:void 0},je=new n(M),je.save(e),Pe=!1,at=null,Mt=null,await Ca(),sa(),_n("komo is connected. Select an element to leave feedback.")}finally{yt=!1,Le||sa()}}}),"primary");i.disabled=yt,e.append(i)}if($t){let t=v("label","account-name-label","Your name"),o=v("input");o.name="name",o.autocomplete="name",o.placeholder="Your name",o.required=!0,o.maxLength=60,o.value=Qt,o.dataset.focusKey="account-name",o.addEventListener("input",()=>Qt=o.value),t.append(o),e.append(t);let n=C("Continue",()=>{},"primary");n.type="submit",n.disabled=Be,e.append(n)}$t&&(kt||St)&&e.append(v("div","account-divider","or")),kt&&e.append(ht()),St&&e.append(C("Continue with GitHub",()=>Wn(()=>Ii()),"secondary")),e.addEventListener("submit",e=>{e.preventDefault(),Wn(async()=>{await async function(e){if(!Be){Be=!0,it="",Vi();try{for(await e();Ye&&!Le;)await new Promise(e=>setTimeout(e,20));await Dn()}finally{Be=!1,sa()}}}(async()=>{await je.guest(Qt),Pe=!1}),await Ui()})})}h.append(e)}else if(Fe)h.append(Xi(null));else if(x){let e=v("div","messages");for(let t of x.comments)e.append(Yi(t,x));h.append(e);let t=()=>e.dataset.fade=`${e.scrollTop>2?"top":""} ${e.scrollTop+e.clientHeight<e.scrollHeight-2?"bottom":""}`;if(e.addEventListener("scroll",t,{passive:!0}),requestAnimationFrame(t),X){let e=Di(x.tags??[],e=>Ni(x,{tag:e}),e=>Ni(x,{untag:e}));e.classList.add("thread-tags"),h.append(e)}h.append(Xi(x))}else h.append(v("div","empty","This comment is no longer available."));if(mo.append(h),Pe&&c&&!matchMedia("(prefers-reduced-motion: reduce)").matches&&(mo.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)"})),!Pe){let e=v("div","comment-drag-handle");e.setAttribute("aria-hidden","true"),h.prepend(e),q(h,e,e=>{Mt&&Lt.set(Mt,e),Gi()},Me.signal,()=>At.stop())}if(Gi(),!Pe&&!matchMedia("(prefers-reduced-motion: reduce)").matches){let e=h.getBoundingClientRect(),t=$o??(c?null:p);t&&($o||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"),o=u.get(e.dataset.comment),n=e.dataset.comment;t&&o&&o.dataset.reactions!==t.dataset.reactions&&Ji.set(n,{from:o,to:t.dataset.reactions,started:performance.now()});let i=Ji.get(n),a=i?performance.now()-i.started:470;if(t&&i&&a<470&&i.to===t.dataset.reactions){let e=v("span","reaction-leaving");e.setAttribute("aria-hidden","true");for(let t of i.from.children){if(t.classList.contains("reaction-leaving"))continue;let o=t.cloneNode(!0);e.append(o)}let o=[...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 o){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(n)===i&&Ji.delete(n)}).catch(()=>{})}}}}$o=null;let w=h.querySelector(".messages");if(w&&(w.scrollTop=r),Pe&&!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 Gi(){let e=Math.min(window.innerHeight,window.visualViewport?.height??window.innerHeight),t=mo.firstElementChild;if(!t||Pe)return;if(ce&&t.querySelector("textarea:focus")){let o=window.visualViewport?.offsetTop??0;t.style.maxHeight=`${Math.max(0,e-24)}px`;let n=function(e,t,o,n,i){return{x:Math.max(12,(e-n)/2),y:o+Math.max(12,(t-i)/2)}}(window.innerWidth,e,o,t.offsetWidth,t.offsetHeight);return At.place(Mt,t,n.x,n.y,!0),t.style.bottom="auto",t.style.transformOrigin="bottom center",void Tn()}let o=Yo?ie.getBoundingClientRect().bottom-12:e-92;t.style.maxHeight=o-12+"px",(Ki??=new ResizeObserver(()=>Gi())).observe(t);let n,i=Ne.find(e=>e.id===Xe),a=Fe??i?.anchor,r=_t?.id===Xe?_t:a?(()=>{let e=ea(a);if(!e.attached)return null;n=e.width>16&&e.height>16?{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height}:(Fe?ca:Xt.test(i?.comments[0]?.body??""))?e.component:void 0;let t=Xe&&ho.querySelector(`[data-thread="${CSS.escape(Xe)}"]`);return t?na(t,e):e})():null,s=_t?.id===Xe,d=()=>{t.style.transformOrigin=!r||r.x<t.offsetLeft+t.offsetWidth/2?"top left":"top right"},l=!s&&Mt&&Lt.get(Mt);if(l){let o=R(l,t.offsetWidth,t.offsetHeight,document.documentElement.clientWidth,e);return At.place(Mt,t,o.x,o.y,s),d(),void Tn()}let c=(window.innerWidth-354)/2,p=e-450;r&&(c=r.x+20,p=r.y-28);let u=Ae&&!ce?396:12,h=t.offsetWidth,m=t.offsetHeight;r&&c+h>window.innerWidth-u&&(c=r.x-h-20),n&&!ce&&!s&&(n.right+14+h<=window.innerWidth-u?[c,p]=[n.right+14,n.top]:n.left-14-h>=12?[c,p]=[n.left-14-h,n.top]:n.bottom+14+m<=o?[c,p]=[n.left,n.bottom+14]:n.top-14-m>=12&&([c,p]=[n.left,n.top-14-m])),At.place(Mt,t,Math.max(12,Math.min(c,window.innerWidth-t.offsetWidth-u)),Math.max(12,Math.min(p,o-t.offsetHeight)),s),d(),Tn()}function Qi(){clearTimeout(Io),at=null,_e=!1;let e=ce;e&&!Ae&&pi(!0),Io=0,!(Le||e&&!Ae)&&(Pe=!0,sa(),queueMicrotask(()=>{if(!Pe)return;let e=ce,t=e?mo.querySelector(".account-dialog"):mo.querySelector("input,button");e&&t&&(t.tabIndex=-1),t?.focus({preventScroll:!0})}))}let Zi=me,ea=fe;function ta(e,t){return document.elementsFromPoint(e,t).find(e=>e!==lo&&!lo.contains(e))??null}function oa(e){return!!e&&e!==ie&&e!==document.body&&(M.pickRoots?[ie,...M.pickRoots()]:[document.body]).some(t=>t.contains(e))}function na(e,t){if(!e.closest(".pin-stack")||e.dataset.dragging)return t;let o=e.getBoundingClientRect();return{x:o.left+("right"===e.dataset.pointer?25:9),y:o.top+28}}function ia(e,t,o){let n=null,i=!1,a=o;je.user&&(je.user.verified||t.comments[0]?.author.id===je.user.id)&&(e.style.cursor="grab"),e.addEventListener("pointerdown",r=>{0!==r.button||Be||!je.user||!je.user.verified&&t.comments[0]?.author.id!==je.user.id||(a={...o,...na(e,o)},n={x:r.clientX,y:r.clientY},i=!1,e.setPointerCapture(r.pointerId))}),e.addEventListener("pointermove",o=>{if(!n)return;let r=o.clientX-n.x,s=o.clientY-n.y;!i&&Math.hypot(r,s)<5||(i||(e.dataset.dragging="true",e.style.position="fixed",e.style.margin="0",Ct=t.id,vo=!0,zo(),Xe===t.id&&(At.stop(),Xe=null,Zt=null,Vi())),i=!0,e.dataset.pointer=L({...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},Lt.delete(t.id),Gi())}),e.addEventListener("click",e=>{i&&(e.preventDefault(),e.stopImmediatePropagation())},!0),e.addEventListener("pointerup",e=>{if(!n)return;let r=a.x+e.clientX-n.x,s=a.y+e.clientY-n.y;if(n=null,Ct=null,!i)return;_t={id:t.id,x:r,y:s},Gi();let d=aa(r,s);if(!d)return _t=null,Gi(),xi="",void Ci();let l=ue(d,{x:r,y:s},{x:r+o.width,y:s+o.height},M.source);l.unstacked=!0,Wn(async()=>{try{_t=null,await Ge(Ve(t.id,e=>({...e,anchor:l})),async e=>{await je.request(`threads/${e(t.id)}`,"PATCH",{anchor:l})})}finally{_t=null,Gi(),xi="",Ci()}})}),e.addEventListener("pointercancel",()=>{_t=null,Gi(),n=null,Ct=null,xi="",Ci()})}function aa(e,t){let o=ta(e,t);if(!oa(o))return null;let n=o.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")??o,i=n.closest("button,a,[role=button],[role=link]");return oa(i)?i:n}function ra(){if(!_e&&!Fe||da||Fe&&Fe.width>0&&Fe.height>0)return jo.style.opacity="0",void(!_e&&!Fe&&(Mo=null,Lo=null));if(Fe&&(Mo=Zi(Fe)),_e&&Lo&&(Mo=aa(Lo.x,Lo.y)),!Mo?.isConnected)return void(jo.style.opacity="0");let e=Mo.getBoundingClientRect(),t=Yo&&ie.contains(Mo)?ie.getBoundingClientRect():{left:0,top:0,right:window.innerWidth,bottom:window.innerHeight},o=Math.max(0,t.left,e.left),n=Math.max(t.top,e.top),i=Math.min(t.right,e.right),a=Math.min(t.bottom,e.bottom);i<=o||a<=n?jo.style.opacity="0":Object.assign(jo.style,{opacity:"1",left:`${o}px`,top:`${n}px`,width:i-o+"px",height:a-n+"px",borderRadius:getComputedStyle(Mo).borderRadius})}function sa(){if(Le)return;if(lo.classList.toggle("design-active",qe),Pe&&!Ae)return void(G(window.innerWidth,window.innerHeight)?(Pe=!1,Qi()):pi(!0));Qn();let e=!!Fe&&!Pe&&G(window.innerWidth,window.innerHeight);lo.classList.toggle("mobile-composing",e),fo.inert=ce?!Ae||Pe:pe?!Ae:Pe,(Xe||Fe||_e||Re||Pe)&&zo(!0),uo.hidden=!_e,ra(),bo.replaceChildren(),bi(),go.inert=qe,Ci(),Hi(),Vi(),pe&&Pe?mo.parentElement!==fo&&fo.append(mo):mo.parentElement===fo&&wo.before(mo);let t=fo.querySelector(".panel");t&&(t.inert=qe,t.setAttribute("aria-hidden",String(qe)),t.hidden=qe),qe&&Ue?.mountPanel(fo);let o=fo.querySelector(".design-inspector__heading");o&&!o.dataset.drag&&(o.dataset.drag="",xn(o))}let da=null,la=null;uo.addEventListener("pointerdown",e=>{if(0!==e.button)return;e.preventDefault(),e.stopPropagation();let t=aa(e.clientX,e.clientY);t&&(Mo=t,Lo=null,jo.style.opacity="0",da={x:e.clientX,y:e.clientY,element:t,pointerId:e.pointerId},uo.setPointerCapture(e.pointerId),la=v("div","selection"),co.append(la))}),uo.addEventListener("pointermove",e=>{if(!da||!la)return Lo={x:e.clientX,y:e.clientY},void(Ao||(Ao=requestAnimationFrame(()=>{Ao=0,ra()})));Object.assign(la.style,{left:`${Math.min(da.x,e.clientX)}px`,top:`${Math.min(da.y,e.clientY)}px`,width:`${Math.abs(da.x-e.clientX)}px`,height:`${Math.abs(da.y-e.clientY)}px`})});let ca=!1;function pa(e,t,o=t,n=!1){ca=n,zo(),Fe=ue(e,t,o,M.source),Mo=e,_e=!1,Xe=null,Pe=!1,Zt=null,it="",sa(),co.querySelector('[data-focus-key="body"]')?.focus({preventScroll:!0}),Gi()}function ua(){if(ao||Le||document.hidden)return;let e=Sn();!Fe&&!Xe&&!_e&&!En&&(Re||!Ne.some(t=>t.page===e&&!t.resolved))||(ao=requestAnimationFrame(()=>{ao=0,Ci(),Gi(),Tn(),ra()}))}uo.addEventListener("pointerup",e=>{if(!da)return;let t=da;la?.remove(),la=null,da=null,pa(t.element,t,{x:e.clientX,y:e.clientY})}),uo.addEventListener("pointerleave",()=>{da||Fe||(Lo=null,Mo=null,jo.style.opacity="0")}),uo.addEventListener("pointercancel",()=>{da=null,la?.remove(),la=null,Lo=null,Mo=null,jo.style.opacity="0"}),document.addEventListener("scroll",e=>{vo=!0,zo();let t=e.target;t===lo||!t||t instanceof Node&&t.getRootNode()===co||!((t===document?document.scrollingElement:t)instanceof Element)||(Ct||(vi=!0,ho.dataset.scrolling="true",clearTimeout(ki),ki=window.setTimeout(()=>{Le||(xi="",Ci(!0),vi=!1,delete ho.dataset.scrolling)},180)),ua())},{capture:!0,passive:!0,signal:Me.signal});for(let e of["focusin","focusout"])mo.addEventListener(e,()=>requestAnimationFrame(Gi),{signal:Me.signal});window.visualViewport?.addEventListener("scroll",()=>{G(window.innerWidth,window.innerHeight)&&(Qn(),(Pe||Fe||Xe)&&ua())},{signal:Me.signal}),window.visualViewport?.addEventListener("resize",()=>{G(window.innerWidth,window.innerHeight)&&(Qn(),ua())},{signal:Me.signal}),window.addEventListener("resize",()=>{(function(){let e=G(window.innerWidth,window.innerHeight);e!==ce&&(co.append(fo),un(),li(!0),ri(),ti(),ce=e,e||(go.style.translate="",mt||(go.style.bottom="")),pe=!e&&"edge"===le,fo.removeAttribute("style"),ln(),Vn="",sa())})(),Qn(),ce||bi(),ua()},{signal:Me.signal}),y(co,"keydown",e=>{Do=!0,queueMicrotask(()=>{Do=!1});let t=e.composedPath()[0];if((Pe||ce&&Ae)&&"Tab"===e.key){let t=[...(Pe?mo:co).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]")&&(Pe||!ce||!!e.closest(".panel,.toolbar"))),o=t[0],n=t.at(-1);!e.shiftKey||co.activeElement!==o&&t.includes(co.activeElement)?!e.shiftKey&&(co.activeElement===n||!t.includes(co.activeElement))&&(e.preventDefault(),o?.focus()):(e.preventDefault(),n?.focus())}let o=b(t);if("Escape"!==e.key){if(!o){if(We&&ke(e,B.restore))return e.preventDefault(),void mi();M.onboarding||(ke(e,B.comment)?(e.preventDefault(),Xn(!Te)):ke(e,B.browse)?(e.preventDefault(),Xn(!1)):I&&ke(e,B.design)&&(e.preventDefault(),Un(!qe)))}}else _e||Fe||Xe||Pe?ui():Ae&&pi(!1)},{signal:Me.signal}),y(co,"pointerdown",e=>{let t=e.composedPath(),o=t.some(e=>e instanceof Element&&e.getRootNode()===co&&e.matches("button,input,textarea,summary,[role=menu],.emoji-menu,.emoji-keyboard,.floating-notice"));0===e.button&&(Xe||Fe)&&(!Fe||!G(window.innerWidth,window.innerHeight))&&!Pe&&!t.includes(mo)&&!t.includes(go)&&!t.includes(ho)&&!o&&(Fe&&Jt.trim()&&(zt={anchor:Fe,text:Jt}),ui());for(let t of co.querySelectorAll(".comment-menu[open]"))e.composedPath().includes(t)||(t.open=!1)},{signal:Me.signal});let ha=new ResizeObserver(ua);ha.observe(ie);let ma=0,ga=new MutationObserver(()=>{if(Fe||Xe||_e||En)return ua();ma||(ma=window.setTimeout(()=>{ma=0,ua()},80))});function fa(){Le||Sn()===oo||(oo=Sn(),zt=null,Xe=null,Fe=null,sa())}ga.observe(document.body,{childList:!0,subtree:!0,characterData:!0}),mo.addEventListener("pointerdown",e=>{Pe&&e.target===mo&&ui()});let ba=()=>setTimeout(fa);function xa(){let e=new n(M);return!(e.token===je.token||je.transient&&!e.token)&&(je.cancelReads(),je=e,xt=!1,bt=null,nt="Connecting",kt=St=$t=Et=wt=!1,Fe=zt=null,Jt=Vt="",Gt=[],so.clear(),jt.length=0,ct=at=dt=null,st++,clearTimeout(rt),fn(),sa(),Wn(Ca),!0)}window.addEventListener("popstate",ba,{signal:Me.signal}),window.navigation?.addEventListener("navigatesuccess",ba,{signal:Me.signal}),window.addEventListener("storage",e=>{e.storageArea===localStorage&&e.key===je.sessionKey&&e.newValue!==je.token&&xa()},{signal:Me.signal}),window.addEventListener("focus",()=>{xa()||Pn?.wake()},{signal:Me.signal});let wa=!1;ie.addEventListener("pointerdown",e=>{wa=0===e.button&&Ae&&Yo&&!pe&&!_e&&!Pe&&!Xe&&!Fe},{capture:!0,signal:Me.signal}),ie.addEventListener("click",e=>{!wa||!Ae||pe||(wa=!1,e.preventDefault(),e.stopPropagation(),pi(!1))},{capture:!0,signal:Me.signal}),Pn=function(e){let t,o=!1,n=!1,i=!1,a=0,r=()=>{if(clearTimeout(t),n||!e.enabled())return;let o=e.active()?Math.min(Math.max(15e3,e.interval),e.interval*2**Math.min(a,3)):Math.max(6e4,e.interval);t=setTimeout(s,o*(.9+.2*Math.random()))},s=async()=>{if(!n&&e.enabled()){if(o)return void(i=!0);o=!0;try{a=await e.read()?0:a+1}catch{a++}finally{o=!1,i?(i=!1,d()):r()}}};function d(e=!0){a=0,clearTimeout(t),e?s():o||r()}return{wake:d,stop(){n=!0,clearTimeout(t)}}}({interval:Math.max(2e3,M.pollInterval??4e3),enabled:()=>!Le&&!document.hidden&&!1!==navigator.onLine&&!M.onboarding,active:()=>Ae||Pe||_e||!!Fe||!!Xe,read:async()=>(fa(),xt?Dn():Ca())});for(let e of["online","offline"])window.addEventListener(e,()=>Pn?.wake(),{signal:Me.signal});if(lo.addEventListener("click",()=>Pn?.wake(!1),{signal:Me.signal}),lo.addEventListener("keydown",()=>Pn?.wake(!1),{signal:Me.signal}),!1!==M.isolateEvents){lo.setAttribute("data-isolate","");for(let e of x)lo.addEventListener(e,e=>w(e,co)&&e.stopPropagation(),{passive:!0,signal:Me.signal});document.addEventListener("focusout",e=>e.relatedTarget===lo&&e.stopImmediatePropagation(),{signal:Me.signal})}document.addEventListener("visibilitychange",()=>{document.hidden?(ga.disconnect(),clearTimeout(ma),ma=0):(ga.observe(document.body,{childList:!0,subtree:!0,characterData:!0}),ua()),(document.hidden||!xa())&&Pn?.wake()},{signal:Me.signal});let ya={destroy(){if(Le)return;Le=!0,Pn?.stop(),Ue?.destroy(),je.cancelReads(),un(),zi?.(),cancelAnimationFrame(Kn),clearTimeout(ma),clearTimeout(ki),clearTimeout(Io),clearTimeout($i),Ji.clear(),At.stop(),Wn(pt),Qe?.(),Dt?.(!0);for(let[e,t]of Nt)t?.(),e.getAnimations().forEach(e=>e.cancel()),e.remove();Nt.clear(),Ro?.stop(),Uo?.stop(),li(!0),Me.abort(),clearTimeout(no),clearTimeout(io),clearTimeout(ro),cancelAnimationFrame(ao),cancelAnimationFrame(Ao),cancelAnimationFrame(zn),zo(),ha.disconnect(),ga.disconnect();let e=Yo?ie.scrollTop*Cn():window.scrollY/Jn;for(let[e,t]of Ho)Object.assign(e.style,t);Ho.clear(),(Yo||!pe)&&(document.documentElement.style.overflow=Oo,Object.assign(ie.style,Wo),Object.assign(document.body.style,qo),document.documentElement.style.background=Po,window.scrollTo({top:e,behavior:"instant"})),kn.disconnect(),To.unmount(),lo.remove(),Se.delete(document)},comment(e){let t=()=>{if(Le||!e.isConnected)return;let t=e.getBoundingClientRect();!t.width||!t.height||pa(e,{x:t.left+t.width/2,y:t.top+t.height/2})};Ae?(pi(!1),Ro&&tn?Ro.finished.then(t):t()):t()},open(){Le||(mi(),pi(!0))},close(){Le||(ui(),pi(!1))},async refresh(){await Dn()}};Se.set(document,{scope:J,controller:ya});try{No=!M.onboarding&&"1"===localStorage.getItem(Xo)}catch{}Qn();let va=M.onboarding?null:je.cached();Ie||=null!==va;let ka=No;if(No=!0,va&&Je.replace(Yn(va)),sa(),pe&&(fo.style.transition="none",dn(),fo.offsetWidth,fo.style.transition=""),No=ka,No&&(pi(!0),No=!1,!matchMedia("(prefers-reduced-motion: reduce)").matches))for(let e of[lo,Yo?ie:null])e?.animate([{opacity:0},{opacity:1}],{duration:200,easing:"cubic-bezier(0.22, 1, 0.36, 1)"});async function Ca(){let e,t=je,o=t.token;try{await t.restore()}catch{}if(Le||t!==je)return;o!==t.token&&fn(),bi(),Pe&&Vi();let n=Dn();n.catch(()=>{});try{e=await t.request("config")}catch(e){if(Le||t!==je||e instanceof DOMException&&"AbortError"===e.name)return;let o=Z(e),n=bt?.detail!==o.detail;throw bt=o,nt="Offline",n&&sa(),e}if(Le||t!==je)return;xt=!0,kt=!!e.google,St=e.github,$t=e.guests,Et=e.guestResolve,wt=!!e.private,sa();let i=await n;if(Le||t!==je)return;let a=new URL(location.href).searchParams.get("comment"),r=Ne.find(e=>e.id===a);return r&&(Ae||pi(!0),gi(r)),sa(),i}return M.onboarding?.inProject||Wn(()=>Ca().finally(()=>Pn?.wake(!1))),ya}export{M as a,$e as b,Ee as c};
@@ -1 +0,0 @@
1
- import"./chunk-I7AUKTXE.js";var e=/^Proposed (.+?) changes? \(preview only\)$/,t={style:"Style changes","inline text":"Text change","design-token":"Token changes","React prop":"Prop changes"};function n(t){return t.split("\n").some(t=>e.test(t))}function r(e){try{return e.startsWith('"')?JSON.parse(e):e}catch{return e}}function a(e,t){let n=/^Shared theme (\S+) \((--[\w-]+)\): (.*?) → (.*?)(?:; preview scope .*)?$/.exec(e);if(n)return{label:n[1],token:n[1],before:n[3],after:n[4],apply:{kind:"variable",property:n[2]}};if(n=/^Element ([\w-]+): (.*?) → (.*?)(?: \[([^\]]+)\])*$/.exec(e),n){let t=/\[([\w.-]+)\]/.exec(e.slice(e.indexOf("→")))?.[1];return{label:n[1],before:n[2],after:n[3],...t&&!t.includes(" ")?{token:t}:{},apply:{kind:"style",property:n[1]}}}if(n=/^- (.+?): (.*) → (.*?)(?: \[([^\]]+)\])?$/.exec(e),!n)return null;let[,a,o,i,s]=n;return"inline text"===t?{label:"Text",before:r(o),after:r(i),apply:{kind:"text",property:"text"}}:"React prop"===t?{label:a,before:r(o),after:r(i),...s&&"custom value"!==s?{token:s}:{}}:{label:a,before:o,after:i,apply:{kind:"style",property:a}}}function o(n){let r=[];for(let o of n.split(/\n{2,}/)){let n=o.split("\n"),i=e.exec(n[0]??"");if(!i){o.trim()&&r.push({text:o.trim()});continue}let s=i[1],l={title:t[s]??`${s[0].toUpperCase()}${s.slice(1)} changes`,changes:[]};for(let e of n.slice(1))if(e.startsWith("Target: "))l.target=e.slice(8);else if(e.startsWith("Component: "))l.component=e.slice(11);else if(e.startsWith("Source: "))l.source=e.slice(8);else{let t=e.includes("→")?a(e,s):null;t&&t.before!==t.after&&l.changes.push(t)}l.changes.length?r.push(l):r.push({text:o.trim()})}return r}function i(e){let t=o(e),n=t.filter(e=>"changes"in e),r=t.find(e=>"text"in e)?.text,a=n.reduce((e,t)=>e+t.changes.length,0),i=n.find(e=>e.target)?.target,l=`Design change · ${a} ${1===a?"edit":"edits"}${i?` on ${s(i)}`:""}`;return r?`${r}\n${l}`:l}function s(e){return(e.split(">").at(-1)??e).trim().replace(/:nth-of-type\(\d+\)/g,"")||e}var l=/^(#[0-9a-f]{3,8}|rgba?\([^)]*\)|hsla?\([^)]*\)|oklch\([^)]*\))$/i,p=new Map,d=new Set,c=new Map;function f(e){let t=c.get(e);t&&(clearTimeout(t.timer),c.delete(e),t.finish())}function g(e,t,n,r=!1){f(e);let a=[],o=[],i=[];for(let e of t){let t=n(e.target);for(let n of e.changes)if(n.apply&&"(unset)"!==n.after)if("variable"===n.apply.kind){let e=document.documentElement,t=e.style.getPropertyValue(n.apply.property);e.style.setProperty(n.apply.property,n.after),a.push(()=>t?e.style.setProperty(n.apply.property,t):e.style.removeProperty(n.apply.property))}else if(t instanceof HTMLElement&&"style"===n.apply.kind){let e=t.style.getPropertyValue(n.apply.property),a=t.style.getPropertyPriority(n.apply.property),s=n.apply.property,l=()=>"(unset)"!==n.before&&(t.style.setProperty(s,n.before,"important"),!0);r&&l()&&getComputedStyle(t).getPropertyValue(s),t.style.setProperty(s,n.after,"important"),i.push(l),o.push(()=>e?t.style.setProperty(n.apply.property,e,a):t.style.removeProperty(n.apply.property))}else if(t instanceof HTMLElement&&"text"===n.apply.kind&&!t.childElementCount){let e=t.firstChild;if(e instanceof Text){let t=e.data;e.data=n.after,a.push(()=>{e.data=t})}}}return p.set(e,{restore:a,restoreStyles:o,pinBefore:i}),a.length+o.length>0}var m,u=["color","background-color","border-color","outline-color","fill","stroke","box-shadow","text-decoration-color"],h="cubic-bezier(.22, 1, .36, 1)";function y(e,t){let n=new Set;for(let r of e)for(let e of r.changes)if("style"===e.apply?.kind)n.add(e.apply.property);else if("variable"===e.apply?.kind)u.forEach(e=>n.add(e));else if("text"===e.apply?.kind){let e=t(r.target);e instanceof HTMLElement&&e.animate?.([{opacity:1},{opacity:.25,offset:.4},{opacity:1}],{duration:360,easing:h})}if(!n.size)return;m&&(clearTimeout(m.timer),m.style.remove());let r=document.createElement("style");r.textContent=`*, *::before, *::after { transition-property: ${[...n].join(", ")} !important; transition-duration: 420ms !important; transition-timing-function: ${h} !important; transition-delay: 0s !important; }`,document.head.append(r),m={style:r,timer:setTimeout(()=>{r.remove(),m=void 0},480)}}function x(e,t=!1){f(e);let n=p.get(e);if(!n)return;p.delete(e);for(let e of n.restore.reverse())e();let r=()=>{for(let e of n.restoreStyles.reverse())e()};if(!t||!n.pinBefore.length)return r();for(let e of n.pinBefore)e();c.set(e,{finish:r,timer:setTimeout(()=>f(e),480)})}function b(e){return p.has(e)||c.has(e)}function w(e=new Set){for(let t of[...c.keys()])e.has(t)||f(t);for(let t of[...p.keys()])e.has(t)||x(t)}function v(e){return"text"===e.apply?.kind||!(e.apply||e.token||l.test(e.before)||l.test(e.after))&&(/\s/.test(e.before+e.after)||e.before.length+e.after.length>32)}function k(e,t){let n=0;for(;n<e.length&&n<t.length&&e[n]===t[n];)n++;let r=0;for(;r<e.length-n&&r<t.length-n&&e[e.length-1-r]===t[t.length-1-r];)r++;for(;n>0&&!/\s/.test(e[n-1]);)n--;for(;r>0&&!/\s/.test(e[e.length-r]);)r--;let a=e.slice(0,n),o=e.slice(e.length-r),i=document.createElement("p");i.className="design-diff",i.append(a.length>48?`…${a.slice(-40)}`:a);let s=e.slice(n,e.length-r),l=t.slice(n,t.length-r);return s&&i.append(Object.assign(document.createElement("del"),{textContent:s})),l&&i.append(Object.assign(document.createElement("ins"),{textContent:l})),i.append(o.length>48?`${o.slice(0,40)}…`:o),i}function E(e,t){let n=document.createElement("span");n.className="design-value";let r=/^var\((--[\w-]+)\)$/.exec(e);if(t&&r)return n.append(Object.assign(document.createElement("span"),{className:"design-token",textContent:t})),n;if(l.test(e)){let t=document.createElement("span");t.className="design-swatch",t.style.background=e,n.append(t)}return n.append(e),n}function C(e,t,n){let r=o(t),a=r.filter(e=>"changes"in e),i=document.createElement("div");i.className="design-comment",i.append(Object.assign(document.createElement("style"),{textContent:'\n.design-comment { display: grid; gap: 8px; margin: 2px 0 6px; }\n.design-note { margin: 0; white-space: pre-wrap; }\n.design-card { border-radius: 10px; background: #ffffff08; box-shadow: inset 0 0 0 1px #ffffff0d; overflow: hidden; font-size: 12px; }\n.design-card-head { display: flex; align-items: center; gap: 8px; min-height: 40px; padding: 7px 8px 7px 12px; }\n.design-card-label { display: grid; min-width: 0; gap: 1px; }\n.design-card-title { font-weight: 600; color: #eee; white-space: nowrap; }\n.design-card-target { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #8a8a8a; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 10.5px; }\n.design-toggle { margin-left: auto; display: inline-flex; padding: 2px; border-radius: 7px; background: #ffffff0a; flex: none; }\n.design-toggle button { border: 0; padding: 0 8px; height: 22px; border-radius: 5px; font: inherit; font-size: 11px; color: #9a9a9a; background: none; cursor: pointer; }\n.design-toggle button[aria-pressed="true"] { color: #fff; background: #ffffff1a; }\n.design-rows { display: grid; border-top: 1px solid #ffffff0a; }\n.design-row { display: grid; grid-template-columns: minmax(64px, 30%) minmax(0, 1fr); gap: 10px; align-items: center; padding: 6px 12px; }\n.design-row + .design-row { border-top: 1px solid #ffffff06; }\n.design-row[hidden] { display: none; }\n.design-row-prose { grid-template-columns: 1fr; gap: 3px; }\n.design-diff { margin: 0; line-height: 1.5; color: #ddd; overflow-wrap: anywhere; }\n.design-diff del, .design-diff ins { border-radius: 3px; padding: 0 2px; }\n.design-diff del { color: #f6a19a; background: #f28b8224; text-decoration-color: #f6a19a99; }\n.design-diff ins { color: #b9e6ad; background: #8fd69424; text-decoration: none; }\n.design-prop { color: #9a9a9a; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.design-values { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 6px; min-width: 0; color: #eee; }\n.design-before { color: #858585; text-decoration: line-through; text-decoration-color: #85858599; }\n.design-arrow { color: #666; }\n.design-value { display: inline-flex; align-items: center; gap: 5px; min-width: 0; overflow-wrap: anywhere; }\n.design-swatch { width: 12px; height: 12px; flex: none; border-radius: 3px; box-shadow: inset 0 0 0 1px #ffffff26; }\n.design-token { padding: 1px 6px; border-radius: 5px; color: var(--accent, #bda6ef); background: color-mix(in srgb, var(--accent, #bda6ef) 14%, transparent); }\n.design-more { border: 0; width: 100%; padding: 7px 12px; text-align: left; font: inherit; font-size: 11px; color: #9a9a9a; background: none; border-top: 1px solid #ffffff06; cursor: pointer; }\n.design-more:hover, .design-toggle button:hover { color: #fff; }\n.design-source { padding: 0 12px 8px; color: #777; font-size: 11px; }\n[data-compact] { gap: 6px; margin: 11px 0 0; }\n[data-compact] .design-card-head, [data-compact] .design-row, [data-compact] > .design-source { min-height: 0; padding: 4px 10px; }\n[data-compact]:hover > .design-source { color: #eee; text-decoration: underline; }\n'}));let l=!!n.compact;l&&(i.dataset.compact="");let c=l?3:1/0,f=0,m=a.some(e=>e.changes.some(e=>e.apply)),u=[],h=()=>{let e=p.has(n.key);for(let t of u)t.querySelectorAll("button").forEach((t,n)=>t.setAttribute("aria-pressed",String(1===n?e:!e)))};for(let e of r){if("text"in e){let t=document.createElement("p");t.className="design-note",n.note(t,e.text),i.append(t);continue}if(c<=0){f+=e.changes.length;continue}let t=document.createElement("section");t.className="design-card";let r=document.createElement("div");r.className="design-card-head";let o=document.createElement("div");o.className="design-card-label",o.append(Object.assign(document.createElement("span"),{className:"design-card-title",textContent:e.title}));let b=e.target?s(e.target):e.component;if(b){let t=Object.assign(document.createElement("span"),{className:"design-card-target",textContent:b});e.target&&(t.title=e.target),o.append(t)}if(r.append(o),m&&!u.length&&e.changes.some(e=>e.apply)){let e=document.createElement("div");e.className="design-toggle",e.setAttribute("role","group"),e.setAttribute("aria-label","Preview on page");for(let[t,r]of["Before","After"].entries()){let o=Object.assign(document.createElement("button"),{type:"button",textContent:r,title:`${r} · ${t?"→":"←"} or B`});o.addEventListener("click",()=>{let e=1===t;if(e===p.has(n.key))return;let r=n.resolve(a.find(e=>e.target)?.target);e&&r?.scrollIntoView({block:"center",behavior:"smooth"});let o="function"==typeof matchMedia&&matchMedia("(prefers-reduced-motion: reduce)").matches;o||y(a,n.resolve),e?g(n.key,a,n.resolve,!o):x(n.key,!o),n.onSwitch&&setTimeout(n.onSwitch,o?0:480),h()}),e.append(o)}u.push(e);for(let e of d)e.isConnected||d.delete(e);d.add(e),r.append(e)}t.append(r);let w=document.createElement("div");w.className="design-rows";let C=4;e.changes.forEach((t,n)=>{if(c<=0)return void f++;l&&c--;let r=document.createElement("div");r.className="design-row",r.hidden=!l&&n>=C&&e.changes.length>C+1;let a=Object.assign(document.createElement("span"),{className:"design-prop",textContent:t.label});if(a.title=t.label,v(t))return r.classList.add("design-row-prose"),r.append(a,k(t.before,t.after)),void w.append(r);let o=document.createElement("span");o.className="design-values";let i=E(t.before);i.classList.add("design-before"),o.append(i,Object.assign(document.createElement("span"),{className:"design-arrow",textContent:"→"}),E(t.after,t.token)),r.append(a,o),w.append(r)}),t.append(w);let S=w.querySelectorAll("[hidden]").length;if(S){let e=Object.assign(document.createElement("button"),{type:"button",className:"design-more",textContent:`Show ${S} more`});e.addEventListener("click",()=>{w.querySelectorAll("[hidden]").forEach(e=>e.hidden=!1),e.remove()}),t.append(e)}e.source&&!l&&t.append(Object.assign(document.createElement("div"),{className:"design-source",textContent:e.source})),i.append(t)}f&&i.append(Object.assign(document.createElement("span"),{className:"design-source",textContent:`+${f} more`})),h(),e.replaceChildren(i),u.length&&(S||(S=!0,document.addEventListener("keydown",e=>{let t="ArrowLeft"===e.key?0:"ArrowRight"===e.key?1:"b"===e.key.toLowerCase()?-1:null;if(null===t||e.metaKey||e.ctrlKey||e.altKey||e.shiftKey||e.isComposing)return;let n=e.composedPath()[0];if(n instanceof HTMLElement&&(n.isContentEditable||n.matches("input, textarea, select")))return;let r=[...d].reverse().find(e=>e.isConnected),a=r?.querySelectorAll("button"),o=-1===t?r?.querySelector('button[aria-pressed="false"]'):a?.[t];o&&(e.preventDefault(),o.click())})))}var S=!1;function $(e,t){C(e,t,{key:"draft",resolve:()=>null,note:(e,t)=>e.append(t)}),e.querySelector(".design-toggle")?.remove()}export{n as isDesignComment,b as isPreviewing,o as parseDesignComment,C as renderDesignComment,$ as renderDraftProposal,w as resetDesignPreviews,s as shortTarget,i as summarizeDesignComment};
@@ -1 +0,0 @@
1
- import"./chunk-I7AUKTXE.js";function e(e){if(e.id)return`#${CSS.escape(e.id)}`;let n=[],t=e;for(;t&&t!==document.body&&n.length<6;){let e=[...t.classList].slice(0,2).map(e=>`.${CSS.escape(e)}`).join(""),a=t.parentElement?[...t.parentElement.children].filter(e=>e.tagName===t.tagName):[];if(n.unshift(`${t.tagName.toLowerCase()}${e}:nth-of-type(${a.indexOf(t)+1})`),t.parentElement?.id){n.unshift(`#${CSS.escape(t.parentElement.id)}`);break}t=t.parentElement}return n.join(" > ")}function n(n,t){return`${e(n)} {\n${[...t].map(([e,n])=>` ${e}: ${n};`).join("\n")}\n}`}function t(n,t,a,i,r){let o=[...t??[]].filter(([e])=>!i?.has(e)).map(([e,n])=>`- ${e}: ${a(e)||"(unset)"} → ${n}`);return[o.length?`Proposed style changes (preview only)\nTarget: ${e(n)}\n${o.join("\n")}`:"",...r].filter(Boolean).join("\n\n")||void 0}export{e as cssSelector,n as cssText,t as designProposal};
@@ -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 r(){let e=new Map,t=new Map,r=[],a=new Map;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)),r.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(a){let o=e.get(a);void 0!==o&&n(a,o,t.get(a)),e.delete(a);for(let e=r.length-1;e>=0;e--)r[e].element===a&&r.splice(e,1)},proposal(t){let n=e.get(t),r=t.textContent??"";return void 0!==n&&n!==r?`Proposed inline text change (preview only)\n- Text: ${JSON.stringify(n)} → ${JSON.stringify(r)}\n- Source markup is unchanged; refresh resets this preview.`:void 0},restoreAll(){for(let[r,a]of e)n(r,a,t.get(r))},showBefore(r){if(r)for(let[r,o]of e){let e=t.get(r);a.set(r,[r.textContent??"",e?.map(([e])=>[e,e.data])]),n(r,o,e)}else for(let[e,[t,r]]of a)n(e,t,r);r||a.clear()},undo(){let t=r.pop();return t?(n(t.element,t.before,t.nodes),e.get(t.element)===t.before&&e.delete(t.element),t.element):null}}}function a(e){let t=r(),n=null,a=!1;function o(t=!1){let r=n;r&&(n=null,r.finish(t),e.onChange())}return{get element(){return n?.element??null},get busy(){return a},isEditing:e=>!!n&&n.element===e,toggle:async function(r){let l=e.selected();if(n&&n.element===l)return void o();if(!l||!e.active()||a||n)return;let s=i(l);if(s)e.status.textContent=s;else{a=!0,e.status.textContent="Loading inline text editor…",e.onChange();try{let a=await d(l,{loadReactBridge:async()=>await import("./react-props-panel-XQ4T3RLV.js"),onFinish(n,r){r||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")}});a?e.active()&&e.selected()===l?(n=a,r&&function(e,t,n){let r=document.caretPositionFromPoint?.(t,n),a=r?document.createRange():document.caretRangeFromPoint?.(t,n);if(r&&a&&a.setStart(r.offsetNode,r.offset),!a||!e.contains(a.startContainer))return;a.collapse(!0);let o=document.getSelection();o?.removeAllRanges(),o?.addRange(a)}(l,r.clientX,r.clientY),e.status.textContent=l.hasAttribute("data-komo-text-prop")?"React state preview · resets on refresh":"Editing text · preview only"):a.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{a=!1,e.onChange()}}},finish:o,handleKey(e){if(!n||!e.composedPath().includes(n.element)||!n.handleKey(e))return!1;let t=n.element;return o("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,r){t.reconcile(n,r),e.onChange()},proposal:e=>t.proposal(e),restoreAll(){t.restoreAll()},showBefore:t.showBefore}}function o(e){let t=a(e);return e.button.addEventListener("click",e=>{t.toggle(e)}),t}function i(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!i(e)}function s(e){let t=e.textContent??"",n=document.getSelection(),r=n?.rangeCount?n.getRangeAt(0):null;return r&&e.contains(r.commonAncestorContainer)?r.startContainer===e?Math.min([...e.childNodes].slice(0,r.startOffset).reduce((e,t)=>e+(t.textContent?.length??0),0),t.length):r.startContainer.nodeType===Node.TEXT_NODE?Math.min(r.startOffset,t.length):t.length:-1}function c(e,t){let n=e.firstChild,r=document.getSelection();if(!n||!r)return;let a=document.createRange();a.setStart(n,Math.min(t,n.textContent?.length??0)),a.collapse(!0),r.removeAllRanges(),r.addRange(a)}async function d(r,a){if(!l(r))return null;let o=null,i=null;if(r.dataset.komoTextProp&&(o=await a.loadReactBridge(),i=o.beginReactTextEdit(r),!i))return null;let d=i?.before??(r.textContent??"").slice(0,500),u=!i&&r.childElementCount>0,f=u?t(r).map(e=>[e,e.data]):void 0,g=r.getAttribute("role"),p=r.getAttribute("aria-label"),m=r.getAttribute("aria-multiline"),h=r.getAttribute("spellcheck"),x=new AbortController,C=!1;let v=-1,b=new MutationObserver(()=>{v>=0&&c(r,v)}),T=()=>{u||(r.childElementCount&&(r.textContent=r.textContent??""),(r.textContent??"").length>500&&(r.textContent=(r.textContent??"").slice(0,500)),i&&o&&(v=s(r),o.previewReactTextEdit(r,i.propName,r.textContent??"")||(r.textContent=d)))},E=(t,n)=>{let a=t.startContainer;if(a!==t.endContainer||!(a instanceof Text)||!r.contains(a)||a.parentElement?.closest(e))return;let o=t.endOffset-t.startOffset,i=n.replace(/[\r\n]+/g," ").slice(0,Math.max(0,500-(r.textContent??"").length+o));a.replaceData(t.startOffset,o,i);let l=document.createRange();l.setStart(a,t.startOffset+i.length);let s=document.getSelection();s?.removeAllRanges(),s?.addRange(l)};r.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}),r.addEventListener("input",T,{signal:x.signal}),i&&b.observe(r,{childList:!0,characterData:!0,subtree:!0}),r.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 r=e.textContent??"",a=t.slice(0,Math.max(0,500-r.length));e.textContent=r.slice(0,n)+a+r.slice(n),c(e,n+a.length)}(r,t.replace(/[\r\n]+/g," ").slice(0,500)),T())},{signal:x.signal}),r.addEventListener("drop",e=>e.preventDefault(),{signal:x.signal}),r.setAttribute("contenteditable","true"),r.setAttribute("role","textbox"),r.setAttribute("aria-label","Inline text preview"),r.setAttribute("aria-multiline","false"),r.dataset.komoInlineEditing="true",r.spellcheck=!1,r.focus({preventScroll:!0});let R=document.getSelection(),y=document.createRange();return y.selectNodeContents(r),y.collapse(!1),R?.removeAllRanges(),R?.addRange(y),{element:r,finish(e=!1){if(C)return;C=!0,x.abort(),b.disconnect(),!u&&r.childElementCount&&(r.textContent=r.textContent??"");let t=(r.textContent??"").slice(0,500);(function(){r.removeAttribute("contenteditable"),r.removeAttribute("data-komo-inline-editing");for(let[e,t]of[["role",g],["aria-label",p],["aria-multiline",m],["spellcheck",h]])null===t?r.removeAttribute(e):r.setAttribute(e,t)})(),e?(i&&o&&o.cancelReactTextEdit(r,i.propName,d),n(r,d,f)):i&&o&&o.finishReactTextEdit(r,i.propName,d,t),a.onFinish({element:r,before:d,after:t,nodes:f,...i?{reactProp:i.propName}:{}},e)},handleKey:e=>!e.isComposing&&(("Enter"===e.key||"Escape"===e.key)&&(e.preventDefault(),e.stopImmediatePropagation(),!0))}}export{o as bindInlineTextTools,l as canEditText,a as createInlineTextTools,r as createTextPreviewHistory,d as startInlineTextEditor,i as textEditBlocker};
@@ -1 +0,0 @@
1
- import{a as e,d as t,e as n,g as i,h as o,i as a,j as r,k as s,l as d,m as l,n as p,o as c,p as u,q as g,r as f,s as m,t as h,u as b,v as k,w as x,x as v}from"./chunk-JC6FXUNO.js";import"./chunk-I7AUKTXE.js";var y=new Map,w=new WeakMap,E=new WeakSet,C=new WeakMap;function $(e){return void 0===e?"unset":JSON.stringify(e)??"unset"}var S=new Map;function P(e){if(e)for(let[e,n]of y){let i=t(e);i&&(S.set(e,i.props),i.setProps({...i.props,...Object.fromEntries(n)}))}else for(let[e,n]of S)t(e)?.setProps(n);e||S.clear(),s(e)}function N(e){return!!y.get(e)?.size}function A(e){let n=t(e),i=n?.definition.textProp,o=n?.definition.props.find(e=>e.name===i);if(!n||!i||"string"!==o?.kind)return null;let a=n.props[i];if("string"!=typeof a||a.length>500)return null;let r=y.get(e);return r||y.set(e,r=new Map),r.has(i)||r.set(i,a),{propName:i,before:a}}function z(n,i,o){let a=t(n),r=a?.definition.props.find(e=>e.name===i);return!(!a||a.definition.textProp!==i||"string"!==r?.kind||o.length>500||!e(r,o))&&(a.setProps({...a.props,[i]:o}),!0)}function M(e,t,n,i){if(n===i){let i=y.get(e);return void(i?.get(t)===n&&!(w.get(e)??[]).some(e=>e.propName===t)&&(i.delete(t),i.size||y.delete(e)))}let o=w.get(e);o||w.set(e,o=[]),o.push({propName:t,before:n,after:i})}function L(e,t,n){z(e,t,n);let i=y.get(e);i?.get(t)===n&&!(w.get(e)??[]).some(e=>e.propName===t)&&(i.delete(t),i.size||y.delete(e))}function T(e){return!!e&&!!w.get(e)?.length}function R(e){let n=y.get(e),o=t(e);if(!n?.size||!o)return;let a=i(e),r=[...n].map(([e,t])=>{let n=o.definition.props.find(t=>t.name===e)?.styleProperty,i=o.props[e],r=n&&"string"==typeof i?a?.tokens.find(e=>e.properties.includes(n)&&i===`var(${e.cssVariable})`):void 0;return`- ${e}: ${$(t)} → ${$(i)}${r?` [${r.path}]`:" [custom value]"}`});return["Proposed React prop changes (preview only)",`Component: ${o.definition.name}`,`Source: ${o.definition.source}:${o.definition.line}`,...r,"Preview values use the app's React state callback; Komo does not write source files."].join("\n")}function q(e){return[R(e),v(e)].filter(e=>!!e).join("\n\n")||void 0}function D(e,n,i){C.get(e)?.abort();let o=new AbortController;C.set(e,o),e.addEventListener("click",e=>{let o=n();if(!o)return;let a=v(o);!t(o)&&!a||(e.stopImmediatePropagation(),i(o,q(o)))},{capture:!0,signal:o.signal})}function j(e){return b(e)}function O(e){return h(e)}function V(e){k(e)}function B(e){x(e)}function H(e){if(!e||E.has(e))return;let t=document.createElement("style");t.textContent=".design-react-source{display:block;padding:0 0 8px;color:#77736f;font-size:10px;overflow-wrap:anywhere}.design-react-inside{padding:10px 12px}.design-react-inside button{padding:0;border:0;background:none;color:#bda6ef;font:inherit;cursor:pointer}.design-react-inside button:hover{text-decoration:underline}.design-react-field.design-field{display:grid;grid-template-columns:76px minmax(0,1fr);gap:0 8px;height:auto;min-height:28px;margin-top:4px;background:none;box-shadow:none;color:#898680;font-size:11px}.design-react-field>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.design-react-field.design-field>:is(input,select){box-sizing:border-box;width:100%;min-width:0;height:28px;padding:0 8px;border:0;border-radius:6px;background:#ffffff0a;color:#f1efeb;font:inherit;font-size:11px}.design-react-field.design-field>:is(input,select):focus-visible{outline:1px solid #bda6ef;outline-offset:-1px}.design-react-field input[type=checkbox]{justify-self:end;width:14px;height:14px;accent-color:#bda6ef}.design-react-field input:disabled{opacity:.55;cursor:not-allowed}.design-react-type{display:none}.design-react-field .design-token-binding{grid-column:2;display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:6px;margin-top:4px;color:#77736f;font-size:10px}.design-react-field .design-token-binding select{min-width:0;height:24px;border:0;border-radius:6px;background:#ffffff0a;color:#e9e6e1;padding:0 6px;font:inherit;font-size:10px}.design-react-field .design-token-binding[data-mode=token] select{background:#bda6ef24;color:#e6dcfb}.design-token-binding__state{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.design-field>.design-token-binding{display:contents}.design-field:has(>.design-token-binding)>input[data-property]{padding-right:28px}.design-token-icon,.design-token-detach,.design-field>.design-token-binding select{position:absolute;top:4px;right:4px;width:20px;height:20px;box-sizing:border-box;border-radius:5px}.design-token-icon{display:grid;place-items:center;color:#77736f;opacity:0;pointer-events:none;transition:opacity .12s}.design-token-icon::before{content:'';width:6px;height:6px;border:1.2px solid currentColor;border-radius:1.5px;rotate:45deg}.design-field:is(:hover,:focus-within) .design-token-icon{opacity:1}.design-field>.design-token-binding select{margin:0;padding:0;border:0;opacity:0;cursor:pointer;appearance:none}.design-field>.design-token-binding select:hover+.design-token-icon,.design-field:has(.design-token-binding select:hover) .design-token-icon{background:#ffffff14;color:#e9e6e1}.design-field:has(.design-token-binding select:focus-visible) :is(.design-token-icon,.design-token-chip){outline:2px solid #bda6ef;outline-offset:1px;opacity:1}.design-field[data-token-mode=override] .design-token-icon{opacity:1;color:#e7c27d}.design-token-chip,.design-token-detach{display:none}.design-field:is([data-token-mode=token],[data-token-mode=connected])>input[data-property]{visibility:hidden}.design-field:is([data-token-mode=token],[data-token-mode=connected]) .design-token-chip{position:absolute;inset:4px 28px 4px var(--lead,4px);display:flex;align-items:center;gap:5px;padding:0 6px;border-radius:4px;background:#bda6ef1f;color:#e6dcfb;font-size:11px;white-space:nowrap;overflow:hidden;pointer-events:none}.design-token-chip::before{content:'';flex:none;width:5px;height:5px;border:1.2px solid #c8b5f4;border-radius:1px;rotate:45deg}.design-field:is([data-token-mode=token],[data-token-mode=connected]) .design-token-binding select{left:var(--lead,4px);right:28px;width:auto}.design-field:is([data-token-mode=token],[data-token-mode=connected]) .design-token-icon{display:none}.design-field:is([data-token-mode=token],[data-token-mode=connected]) .design-token-detach{display:grid;place-items:center;color:#898680}.design-token-detach:hover{background:#ffffff14;color:#f1efeb}.design-token-detach svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round}.design-theme-group .design-react-source{padding:0 0 6px}.design-theme-heading{display:block;padding:8px 0 2px;color:#77736f;font-size:10px;text-transform:capitalize}.design-theme-token{position:relative;display:grid;grid-template-columns:96px minmax(0,1fr) 20px;align-items:center;gap:6px;margin-top:4px}.design-theme-token>span{overflow:hidden;color:#898680;font-size:11px;text-overflow:ellipsis;white-space:nowrap}.design-theme-token[data-changed]>span{color:#e6dcfb}.design-theme-token[data-changed]::before{content:'';position:absolute;top:calc(50% - 2px);left:-8px;width:4px;height:4px;border-radius:50%;background:#bda6ef}.design-theme-reset{display:grid;place-items:center;width:20px;height:20px;padding:0;border:0;border-radius:5px;background:none;color:#77736f;cursor:pointer}.design-theme-reset:disabled{visibility:hidden}.design-theme-reset:hover{background:#ffffff14;color:#f1efeb}.design-theme-reset svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}",e.append(t),E.add(e)}function F(e,t,n,a){let r=i(e);if(!r)return null;let s=m(r,t);if(!s.length)return null;H(a);let d=document.createElement("span");d.className="design-token-binding",d.setAttribute("data-mode","custom");let c=document.createElement("span");c.className="design-token-icon",c.setAttribute("aria-hidden","true");let h=document.createElement("span");h.className="design-token-chip",h.setAttribute("aria-hidden","true");let b=document.createElement("button");b.type="button",b.className="design-token-detach",b.title="Detach token",b.setAttribute("aria-label",`Detach token from ${t}`),b.innerHTML='<svg viewBox="0 0 12 12"><path d="M5 3.5 6.5 2a2.1 2.1 0 0 1 3 3L8 6.5M7 8.5 5.5 10a2.1 2.1 0 0 1-3-3L4 5.5M2 2l8 8"/></svg>';let k=document.createElement("select");k.setAttribute("aria-label",`Style token for ${t}`);let x=document.createElement("small");x.className="design-token-binding__state",x.setAttribute("aria-live","polite");let v=`komo-token-${t}-${Math.random().toString(36).slice(2,8)}`;x.id=v,k.setAttribute("aria-describedby",v);let y=document.createElement("option");y.value="custom",y.textContent="Custom value",k.append(y);for(let e of s){let t=document.createElement("option"),n=o(r,e);t.value=e.path,t.textContent=n?`${e.path} · ${n}`:e.path,k.append(t)}let w=()=>{let n=u(r,e,t),i=n?null:g(r,e,t),o="token"===n?.mode?s.find(e=>e.path===n.tokenPath):void 0,a=o??i?.token;k.value=a?.path??"custom",h.textContent=a?.path??"";let l=n?.declaredPath,p=o?"token":i?"connected":l?"override":"custom";d.dataset.mode=p,d.parentElement?.setAttribute("data-token-mode",p),x.textContent="token"===p?l&&l!==o?.path?`Rebound from ${l} · preview`:`Linked to ${o?.path} · preview`:"connected"===p?"Connected "+("inline"===i?.origin?"inline":"from stylesheet"):"override"===p?`Custom override · was ${l}`:"",k.title=x.textContent||"Choose a token"},E=new MutationObserver(w);E.observe(e,{attributes:!0,attributeFilter:["style"]});let C=new MutationObserver(()=>{d.isConnected||(E.disconnect(),C.disconnect())});return C.observe(d.ownerDocument,{childList:!0,subtree:!0}),k.addEventListener("change",()=>{let i=e.style.getPropertyValue(t),o=s.find(e=>e.path===k.value),a=u(r,e,t);if(o&&a&&o.path===a.declaredPath)f(r,e,t),n(i,e.style.getPropertyValue(t),o.path);else if(o)(o.path!==g(r,e,t)?.token.path||a)&&l(r,e,o,t,{recordHistory:!1})&&n(i,e.style.getPropertyValue(t),o.path);else{let o=d.parentElement?.querySelector("[data-property]")?.value??getComputedStyle(e).getPropertyValue(t).trim(),a=/^-?[\d.]+$/.test(o.trim())&&!/weight|line/.test(t)?`${o.trim()}px`:o;p(r,e,t,a),e.style.setProperty(t,a),n(i,a)}w()}),b.addEventListener("click",()=>{let e=s.find(e=>e.path===k.value),t=d.parentElement?.querySelector("input[data-property]"),n=e&&o(r,e);t&&n&&(t.value="number"===t.type?String(parseFloat(n)):n),k.value="custom",k.dispatchEvent(new Event("change")),d.parentElement?.querySelector("[data-property]")?.focus()}),d.append(h,k,c,b,x),queueMicrotask(w),w(),d}function I(e){let t=i(e);return new Set(t?.elementBindings.get(e)?.keys()??[])}function U(e,t,n,i,o,a,r){for(let s of t){let t=[...n.querySelectorAll("[data-field-property]")].find(e=>e.dataset.fieldProperty===s.property);if(!t||t.querySelector(".design-token-binding"))continue;let d=t.querySelector("[data-property]");if(!d)continue;let l=F(e,s.property,n=>{i(s,d,n),a&&(d.value=a(s,e));let o=t.querySelector('input[type="range"],input[type="color"]');o&&(o.value="color"===s.kind&&r?r(d.value):d.value)},o);l&&t.append(l)}}var W=!1;function _(e,t,n,o){let a=i(e);if(!a||!a.tokens.length)return null;H(o);let r=document.createElement("details");r.className="design-group design-theme-group",r.open=W,r.addEventListener("toggle",()=>{r.isConnected&&(W=r.open)});let s=document.createElement("summary");s.textContent="Shared theme";let d=document.createElement("small");d.className="design-react-source",d.textContent="Changes every element using these tokens",r.append(s,d);let l=new Map;for(let e of a.tokens){let t=e.path.split(".")[0];l.set(t,[...l.get(t)??[],e])}let p=a.tokens.length>6&&l.size>1;for(let[e,i]of p?l:new Map([["",a.tokens]])){if(e){let t=document.createElement("small");t.className="design-theme-heading",t.textContent=e,r.append(t)}for(let o of i)r.append(K(a,o,t,n,e))}return r}function K(e,t,n,i,s){let l=document.createElement("div");l.className="design-theme-token";let p=document.createElement("span");p.textContent=s&&t.path.slice(s.length+1)||t.path,p.title=`${t.path} · ${a(e,t)} matching · ${t.impactSelector}`;let c=n.fields.find(e=>t.properties.includes(e.property)),u={property:t.cssVariable,label:`Shared theme value for ${t.path}`,kind:"dimension"===t.type?"size":c?.kind??"text",glyph:"color"===t.type?void 0:c?.glyph,values:c?.values},g=!1,f=n.fieldControl(u,{element:e.root,begin:()=>{g=!1},apply:(n,o,a)=>{let s=null!==a&&r(e,t,a.trim(),g);n.setAttribute("aria-invalid",String(!s)),s&&(g=!0,k(),i())},commit:(e,t,n)=>{!1!==n&&(g=!1,"true"===e.getAttribute("aria-invalid")&&b())}}),m=f.querySelector("[data-property]"),h=f.querySelector('input[type="color"]'),b=()=>{let i=o(e,t);m.value=i,h&&(h.value=n.toHex(i)),m.removeAttribute("aria-invalid"),k()},k=()=>{x.disabled=!l.toggleAttribute("data-changed",e.themeEdits.has(t.path)),"fontFamily"===t.type&&(m.title=m.value)},x=document.createElement("button");return x.type="button",x.className="design-theme-reset",x.title="Reset to page value",x.setAttribute("aria-label",`Reset ${t.path}`),x.innerHTML='<svg viewBox="0 0 16 16"><path d="M2.5 2.5v3h3M3 5.5a5.5 5.5 0 1 1-.5 2.5"/></svg>',x.addEventListener("click",()=>{d(e,t),b(),i()}),b(),l.append(p,f,x),l}function J(e,t,n){let o=i(e);o&&p(o,e,t,n)}function X(e,t){let n=i(e);n&&c(n,e,t)}function G(e){let n=w.get(e)?.pop(),i=t(e);if(!n||!i)return;i.setProps({...i.props,[n.propName]:n.before});let o=y.get(e);if(o){let t=o.get(n.propName);Object.is(t,n.before)&&o.delete(n.propName),o.size||y.delete(e)}}function Q(e){let n=y.get(e),i=t(e);!n?.size||!i||(i.setProps({...i.props,...Object.fromEntries(n)}),y.delete(e),w.delete(e))}function Y(t,n,i,o,a,r){let s=n.definition.props.find(e=>e.name===i);if(!s||!e(s,o))return a.setAttribute("aria-invalid","true"),!1;a.removeAttribute("aria-invalid");let d=n.props[i];if(Object.is(d,o))return!0;let l=y.get(t);l||y.set(t,l=new Map);let p=l.has(i)?l.get(i):d;Object.is(p,o)?l.delete(i):l.set(i,p),l.size||y.delete(t);let c=w.get(t);return c||w.set(t,c=[]),c.push({propName:i,before:d,after:o}),n.setProps({...n.props,[i]:o}),r(),!0}function Z(e,o,a,r){let s=t(e);if(!s)return function(e,t,i){let o=n(e);if(!o)return null;H(i);let a=document.createElement("small");if(a.className="design-react-source design-react-group design-react-inside",a.append(`Inside ${o.component.definition.name}`),t){let e=document.createElement("button");e.type="button",e.textContent="Select component",e.addEventListener("click",()=>t(o.root)),a.append(" · ",e)}return a}(e,r,a);H(a);let d=document.createElement("details");d.className="design-group design-react-group",d.open=!0;let l=document.createElement("summary");l.textContent="Properties",d.append(l);let p=document.createElement("small");p.className="design-react-source",p.textContent=`${s.definition.name} · ${s.definition.source}:${s.definition.line}`,d.append(p);for(let t of s.definition.props){let n=t.styleProperty,a=document.createElement("label");a.className="design-field design-react-field";let r=document.createElement("span");r.textContent=t.name;let l,p=s.props[t.name];if("enum"===t.kind){let e=document.createElement("select");for(let n of t.values??[]){let t=document.createElement("option");t.value=String(n),t.textContent=String(n),e.append(t)}if(void 0===p&&!t.required){let t=document.createElement("option");t.value="",t.textContent="unset",e.prepend(t)}e.value=void 0===p?"":String(p),l=e}else{let e=document.createElement("input");"boolean"===t.kind?(e.type="checkbox",e.checked=!0===p):"number"===t.kind?(e.type="number",e.step="any",e.value="number"==typeof p?String(p):""):(e.type="text",e.maxLength=500,e.autocomplete="off",e.value="string"==typeof p?p:""),l=e}if(l.setAttribute("aria-label",`${s.definition.name} ${t.name}`),"unsupported"===t.kind)l=document.createElement("input"),l.disabled=!0,l.value=`Read only · ${t.typeLabel}`,l.setAttribute("aria-label",`${s.definition.name} ${t.name}, read only`),a.title=`Komo does not edit ${t.typeLabel} props.`;else{let n=()=>{let n=l instanceof HTMLInputElement&&"checkbox"===l.type?l.checked:l.value,i=n;if("number"===t.kind)i=""===String(n).trim()?void 0:Number(n);else if("enum"===t.kind){let e=(t.values??[]).find(e=>String(e)===n);i=""!==n||t.required?e:void 0}else"boolean"===t.kind&&(i=!0===n);Y(e,s,t.name,i,l,o)};l.addEventListener("change",n)}a.append(r,l);let c=document.createElement("small");if(c.className="design-react-type",c.textContent=`${t.typeLabel}${t.required?" · required":" · optional"}`,a.append(c),a.title||=c.textContent,"string"===t.kind&&n){let r=i(e),d=r?m(r,n):[];if(d.length){let i=document.createElement("span");i.className="design-token-binding";let r=document.createElement("span");r.textContent="Style token";let p=document.createElement("select");p.setAttribute("aria-label",`Style token for ${t.name}`);let c=document.createElement("option");c.value="custom",c.textContent="Custom value",p.append(c);for(let e of d){let t=document.createElement("option");t.value=e.path,t.textContent=e.path,p.append(t)}let u=()=>{let e=d.find(e=>s.props[t.name]===`var(${e.cssVariable})`);p.value=e?.path??"custom",i.dataset.mode=e?"token":"custom"};p.addEventListener("change",()=>{let i=d.find(e=>e.path===p.value),a=i?`var(${i.cssVariable})`:"string"==typeof s.props[t.name]&&String(s.props[t.name]).startsWith("var(")?e.ownerDocument.defaultView?.getComputedStyle(e).getPropertyValue(n).trim()??"":"string"==typeof s.props[t.name]?s.props[t.name]:"";Y(e,s,t.name,a,l,o)&&u()}),i.append(r,p),a.append(i),u()}}d.append(a)}return d}export{U as attachStyleTokenControls,A as beginReactTextEdit,j as canUndoDesignTokenEdit,T as canUndoReactProp,L as cancelReactTextEdit,_ as createDesignThemePanel,F as createElementTokenControl,Z as createReactPropsPanel,M as finishReactTextEdit,O as hasDesignTokenEdit,N as hasReactPropChanges,D as installCommentCapture,J as noteDesignTokenOverride,z as previewReactTextEdit,q as proposedDesignChanges,R as proposedReactChanges,B as resetDesignTokenEdits,Q as resetReactProps,P as showDesignBefore,X as syncDesignTokenBinding,I as tokenBoundProperties,V as undoDesignTokenEdit,G as undoReactProp};
@@ -1 +0,0 @@
1
- import"./chunk-I7AUKTXE.js";var t=12,e=/^[\p{L}\p{N}][\p{L}\p{N} ._-]{0,31}$/u;function n(t){let n=t.trim().replace(/^#/,"").toLocaleLowerCase("en-US");return e.test(n)?n:null}function a(t,e){let a=[...e.tags],o=!1,i=!1,r=(...e)=>{i=!0,t.replaceChildren(...e),i=!1},l=`komo-tags-${Math.random().toString(36).slice(2)}`,d=null,p=0,s=()=>{cancelAnimationFrame(p),d?.remove(),d=null};!function c(g=!1){s();let u=document.createElement("style");u.textContent='\n.tag-row { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; min-width: 0; min-height: 24px; font-size: 12px; }\n.tag-row .tag-chip {\n display: inline-flex; align-items: center; gap: 2px; max-width: 160px; height: 22px; padding: 0 2px 0 7px;\n border-radius: 6px; font-weight: 500; line-height: 1; color: var(--accent, #bda6ef);\n background: color-mix(in srgb, var(--accent, #bda6ef) 14%, transparent);\n}\n.tag-row .tag-chip span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.tag-row .tag-chip button, .tag-row .tag-add {\n display: inline-flex; align-items: center; border: 0; padding: 0; color: inherit; background: none; cursor: pointer; font-family: inherit;\n}\n.tag-row .tag-chip button { justify-content: center; width: 18px; height: 18px; border-radius: 4px; opacity: .6; }\n.tag-row .tag-chip button:hover, .tag-row .tag-chip button:focus-visible { opacity: 1; background: color-mix(in srgb, currentColor 16%, transparent); }\n.tag-row .tag-add {\n gap: 4px; height: 22px; padding: 0 6px; border-radius: 6px; font-size: 12px; color: #858585;\n transition: color var(--duration-quick, 150ms), background var(--duration-quick, 150ms);\n}\n.tag-row .tag-add:hover, .tag-row .tag-add:focus-visible { color: #eee; background: #ffffff0d; }\n.tag-row .tag-input {\n width: 96px; height: 24px; padding: 0 8px; border: 0; border-radius: 6px; outline: none;\n font-family: inherit; font-size: 12px; color: #eee; background: #ffffff07; box-shadow: inset 0 0 0 1px #ffffff05;\n}\n.tag-row .tag-input::placeholder { color: #858585; }\n.tag-row .tag-input:focus { box-shadow: inset 0 0 0 1px #ffffff20; }\n.tag-row .tag-input[aria-invalid="true"] { box-shadow: inset 0 0 0 1px #f28b8299; }\n/* A floating menu attached to komo\'s root, so no container can clip it. */\n.tag-options {\n position: fixed; z-index: 40; display: grid; gap: 1px; width: 220px; max-height: 220px; overflow: auto;\n padding: 4px; border-radius: 10px; background: #2a2a2a; box-shadow: 0 0 0 1px #ffffff14, 0 12px 32px #0007;\n font-size: 12px;\n}\n.tag-options:empty { display: none; }\n.tag-option {\n display: flex; align-items: center; gap: 6px; min-height: 28px; padding: 0 8px; border-radius: 6px;\n color: #ddd; cursor: pointer; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;\n}\n.tag-option[aria-selected="true"] { background: #ffffff14; color: #fff; }\n.tag-option-hint, .tag-option-empty { color: #858585; }\n.tag-option-empty { padding: 6px 8px; }\n/* The tag row grows when the picker opens, instead of spilling over the text above it. */\n.new-comment-composer .draft-body:has(.tag-slot) { grid-template-rows: minmax(28px, auto) minmax(28px, auto); }\n.new-comment-composer .draft-body .tag-slot { grid-row: 2; grid-column: 2; align-self: start; min-width: 0; padding-top: 2px; }\n.new-comment-composer .draft-body:has(.tag-slot) .send { align-self: start; }\n.new-comment-composer .draft-body:not(:has(.avatar)) .tag-slot { grid-column: 1; }\n/* Line up with message text: 16px gutter plus the 24px avatar and 8px gap. */\n.thread-tags { padding: 8px 16px 12px 48px; }\n';let f=document.createElement("div");f.className="tag-row",f.setAttribute("role","group"),f.setAttribute("aria-label","Tags");for(let t of a){let n=document.createElement("span");n.className="tag-chip";let o=document.createElement("span");o.textContent=`#${t}`;let i=document.createElement("button");i.type="button",i.textContent="×",i.setAttribute("aria-label",`Remove tag ${t}`),i.addEventListener("click",()=>{a=a.filter(e=>e!==t),e.onRemove(t),c()}),n.append(o,i),f.append(n)}if(o){let m=document.createElement("input");m.className="tag-input",m.placeholder="Add tag…",m.maxLength=33,m.autocomplete="off",m.setAttribute("role","combobox"),m.setAttribute("aria-label","Add tag"),m.setAttribute("aria-autocomplete","list"),m.setAttribute("aria-controls",l);let x=document.createElement("div");x.className="tag-options",x.id=l,x.setAttribute("role","listbox"),x.setAttribute("aria-label","Tags");let h=[],b=-1,w=t=>{!a.includes(t)&&a.length<12&&(a=[...a,t].sort(),e.onAdd(t)),o=a.length<12,c(o)},v=t=>{b=t,x.querySelectorAll("[role=option]").forEach((e,n)=>{e.setAttribute("aria-selected",String(n===t)),n===t&&e.scrollIntoView?.({block:"nearest"})}),t>=0?m.setAttribute("aria-activedescendant",`${l}-${t}`):m.removeAttribute("aria-activedescendant")},y=()=>{let t=m.value.trim().replace(/^#/,"").toLocaleLowerCase("en-US"),o=n(m.value),i=e.suggestions.filter(t=>!a.includes(t));h=(t?[...i.filter(e=>e.startsWith(t)),...i.filter(e=>!e.startsWith(t)&&e.includes(t))]:i).map(t=>({tag:t,create:!1})),o&&!a.includes(o)&&!i.includes(o)&&h.push({tag:o,create:!0}),x.replaceChildren(...h.map(({tag:t,create:e},n)=>{let a=document.createElement("div");return a.id=`${l}-${n}`,a.className="tag-option",a.setAttribute("role","option"),e&&a.append(Object.assign(document.createElement("span"),{className:"tag-option-hint",textContent:"Create"})),a.append(Object.assign(document.createElement("span"),{textContent:`#${t}`})),a.addEventListener("pointerdown",t=>t.preventDefault()),a.addEventListener("click",()=>w(t)),a.addEventListener("pointermove",()=>v(n)),a})),h.length||x.append(Object.assign(document.createElement("div"),{className:"tag-option-empty",textContent:t?a.includes(o??"")?"Already added":"Use letters, numbers, spaces, . _ or -":"Type to create a tag"})),m.setAttribute("aria-expanded",String(h.length>0)),v(t&&h.length?0:-1)};m.addEventListener("input",y),m.addEventListener("keydown",t=>{if(t.stopPropagation(),!t.isComposing)if("ArrowDown"===t.key||"ArrowUp"===t.key){if(t.preventDefault(),!h.length)return;let e=h.length-1;v("ArrowDown"===t.key?b>=e?0:b+1:b<=0?e:b-1)}else if("Enter"===t.key||","===t.key)if(t.preventDefault(),b>=0&&h[b])w(h[b].tag);else if(m.value.trim()){let t=n(m.value);t?w(t):m.setAttribute("aria-invalid","true")}else o=!1,c();else if("Escape"===t.key)t.preventDefault(),o=!1,c();else if("Backspace"===t.key&&!m.value&&a.length){let t=a.at(-1);a=a.slice(0,-1),e.onRemove(t),c(!0)}}),m.addEventListener("input",()=>m.removeAttribute("aria-invalid")),m.addEventListener("blur",()=>{i||!m.isConnected||!o||(o=!1,c())}),f.append(m),r(u,f);let A=t.getRootNode();(A instanceof ShadowRoot?A:document.body).append(x),d=x;let k=()=>{if(!m.isConnected)return s();let t=m.getBoundingClientRect(),e=x.offsetHeight,n=window.innerHeight-t.bottom-8,a=e+4<=n||t.top-8<n?t.bottom+4:t.top-4-e;x.style.top=`${Math.max(8,a)}px`,x.style.left=`${Math.max(8,Math.min(t.left,window.innerWidth-x.offsetWidth-8))}px`,p=requestAnimationFrame(k)};return y(),k(),void((g||o)&&m.focus({preventScroll:!0}))}if(a.length<12){let t=document.createElement("button");t.type="button",t.className="tag-add",t.textContent=a.length?"+":"+ Add tag",t.setAttribute("aria-label","Add tag"),t.addEventListener("click",()=>{o=!0,c(!0)}),f.append(t)}r(u,f)}()}export{t as MAX_TAGS,n as normalizeTag,a as tagEditor};