pipeup 0.5.1 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1 @@
1
- function ge(e){let t="";for(let n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Re(e){let t=atob(e.replace(/-/g,"+").replace(/_/g,"/")),n=new Uint8Array(t.length);for(let o=0;o<t.length;o++)n[o]=t.charCodeAt(o);return n}function jn(e=16){return ge(crypto.getRandomValues(new Uint8Array(e)))}function ve(e){return new TextEncoder().encode(e)}function Xe(e){if(e===null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(Xe).join(",")+"]";let t=e;return"{"+Object.keys(t).filter(n=>t[n]!==void 0).sort().map(n=>JSON.stringify(n)+":"+Xe(t[n])).join(",")+"}"}function He(e){return e.replace(/\s+/g," ").trim()}function De(e){let t=He(e),n=2166136261;for(let o=0;o<t.length;o++)n^=t.charCodeAt(o),n=Math.imul(n,16777619)>>>0;return n.toString(16).padStart(8,"0")}var cr=/^[A-Za-z0-9_-]{43}$/,dr=512,Je=new Map;async function cn(){let e=await crypto.subtle.generateKey({name:"Ed25519"},!1,["sign","verify"]),t=new Uint8Array(await crypto.subtle.exportKey("raw",e.publicKey));return{publicKey:ge(t),privateKey:e.privateKey}}async function Pt(e,t){let n=await crypto.subtle.sign({name:"Ed25519"},e.privateKey,t);return ge(new Uint8Array(n))}async function Gn(e,t,n){if(!cr.test(e))return!1;try{if(ge(Re(e))!==e)return!1;let o=Je.get(e);if(!o){Je.size>=dr&&Je.delete(Je.keys().next().value),o=crypto.subtle.importKey("raw",Re(e),{name:"Ed25519"},!0,["verify"]),Je.set(e,o);let r=o;r.catch(()=>{Je.get(e)===r&&Je.delete(e)})}return await crypto.subtle.verify({name:"Ed25519"},await o,Re(n),t)}catch{return!1}}var Ot=1e4,pr=2**18,pn=2**40,un=2**47,G={doc:64,path:2e3,snapshot:500,anchorId:200,quote:1e4,context:64,viewEntries:16,viewKey:64,viewValue:200},ur=/^[0-9a-f]{8}$/,dn=/^[A-Za-z0-9_-]{43}$/,fr=/^[A-Za-z0-9_-]{43}$/,mr=new Set(["create","reply","edit","delete","resolve","reopen"]);async function Jn(e,t){if(e.author!==t.publicKey)throw new Error("pipeup: an op must be signed by its author");return{body:e,sig:await Pt(t,ve(Xe(e)))}}var Ae=(e,t)=>typeof e=="string"&&e.length<=t,it=e=>!!e&&typeof e=="object",Xn=e=>typeof e=="number"&&Number.isFinite(e)&&e>=0&&e<=1;function fn(e){if(!it(e))return!1;let{id:t,path:n,fingerprint:o,snapshot:r,quote:s,point:l,view:c}=e;if(!Ae(n,G.path)||!Ae(r,G.snapshot)||typeof o!="string"||!ur.test(o)||t!==void 0&&(!Ae(t,G.anchorId)||t==="")||s!==void 0&&(!it(s)||!Ae(s.exact,G.quote)||s.exact===""||!Ae(s.prefix,G.context)||!Ae(s.suffix,G.context))||l!==void 0&&(!it(l)||!Xn(l.x)||!Xn(l.y)))return!1;if(c!==void 0){if(!it(c)||Array.isArray(c))return!1;let m=Object.entries(c);if(m.length>G.viewEntries||!m.every(([u,g])=>u.length<=G.viewKey&&Ae(g,G.viewValue)))return!1}return!0}function Qn(e){if(!it(e))return!1;let{body:t,sig:n}=e;if(typeof n!="string"||!it(t)||JSON.stringify({body:t,sig:n}).length>pr)return!1;let o=t;return!(o.v!==1||typeof o.id!="string"||!dn.test(o.id)||!mr.has(o.kind)||!Ae(o.doc,G.doc)||o.doc===""||typeof o.thread!="string"||!dn.test(o.thread)||typeof o.author!="string"||!fr.test(o.author)||typeof o.name!="string"||o.name.length>80||o.name!==o.name.trim()||typeof o.clock!="number"||!Number.isSafeInteger(o.clock)||o.clock<1||o.clock>pn||typeof o.at!="number"||!Number.isSafeInteger(o.at)||o.at<0||o.at>un||o.text!==void 0&&(!Ae(o.text,Ot)||o.text!==o.text.trim())||o.target!==void 0&&(typeof o.target!="string"||!dn.test(o.target))||(o.kind==="create"||o.kind==="reply"||o.kind==="edit")&&!o.text||(o.kind==="reply"||o.kind==="edit"||o.kind==="delete")&&!o.target||o.kind==="create"&&(o.id!==o.thread||!fn(o.anchor)))}function Zn(e){return Gn(e.body.author,ve(Xe(e.body)),e.sig)}function eo(e,t){return e.body.clock!==t.body.clock?e.body.clock-t.body.clock:e.body.at!==t.body.at?e.body.at-t.body.at:e.body.author!==t.body.author?e.body.author<t.body.author?-1:1:e.body.id!==t.body.id?e.body.id<t.body.id?-1:1:0}function no(e){let t=new Map,n=new Map,o=new Map;for(let{body:r}of[...e].sort(eo)){if(r.name&&o.set(r.author,r.name),r.kind==="create"){if(t.has(r.id)||!r.anchor||r.text===void 0)continue;let c=to(r.id,r.author,r.name,r.text,r.at);t.set(r.id,{id:r.id,anchor:r.anchor,root:c,resolved:!1}),n.set(r.id,{comment:c,thread:r.id});continue}let s=t.get(r.thread);if(!s)continue;if(r.kind==="resolve"||r.kind==="reopen"){s.resolved=r.kind==="resolve";continue}let l=r.target?n.get(r.target):void 0;if(!(!l||l.thread!==r.thread)){if(r.kind==="reply"){if(n.has(r.id)||r.text===void 0)continue;let c=to(r.id,r.author,r.name,r.text,r.at);s.root.replies.push(c),n.set(r.id,{comment:c,thread:r.thread});continue}r.author!==l.comment.author||l.comment.deleted||(r.kind==="edit"&&r.text!==void 0&&(l.comment.text=r.text,l.comment.edited=!0),r.kind==="delete"&&(l.comment.text="",l.comment.deleted=!0))}}for(let{comment:r}of n.values())r.name||(r.unnamed=!0,r.name=o.get(r.author)??"");return[...t.values()]}function to(e,t,n,o,r){return{id:e,author:t,name:n,text:o,at:r,edited:!1,deleted:!1,replies:[]}}async function mn(e){let t={...e,id:void 0,thread:e.kind==="create"?void 0:e.thread},n=await crypto.subtle.digest("SHA-256",ve(Xe(t)));return ge(new Uint8Array(n))}var It=class{constructor(t){this.doc=t}ops=new Map;clock=0;createAt=new Map;threadAt=new Map;get size(){return this.ops.size}all(){return[...this.ops.values()]}threads(){return no(this.ops.values())}async add(t){let n=[];for(let o of t){if(!Qn(o)||o.body.doc!==this.doc||this.ops.has(o.body.id)||o.body.id!==await mn(o.body)||!await Zn(o))continue;let r={body:o.body,sig:o.sig};this.ops.set(r.body.id,r),this.clock=Math.max(this.clock,r.body.clock),r.body.kind==="create"&&this.createAt.set(r.body.author,Math.max(this.createAt.get(r.body.author)??0,r.body.at)),this.threadAt.set(r.body.thread,Math.max(this.threadAt.get(r.body.thread)??0,r.body.at)),n.push(r)}return n}async append(t,n,o){let r={v:1,...o,id:"",thread:o.kind==="create"?"":o.thread,doc:this.doc,author:t.publicKey,name:n,clock:Math.min(this.clock+1,pn),at:Math.min(Math.max(Date.now(),o.kind==="create"?(this.createAt.get(t.publicKey)??0)+1:(this.threadAt.get(o.thread)??0)+1),un)};r.id=await mn(r);let s=this.ops.get(r.id);if(s)return s;r.kind==="create"&&(r.thread=r.id);let[l]=await this.add([await Jn(r,t)]);if(!l)throw new Error("pipeup: could not record this change");return l}};var hr=/^([A-Za-z0-9_-]{16}):([A-Za-z0-9_-]{43})$/;function gr(){return`${jn(12)}:${ge(crypto.getRandomValues(new Uint8Array(32)))}`}async function hn(e){let t=hr.exec(e.trim()),n=t?.[1],o=t?.[2];if(!n||!o)throw new Error('pipeup: data-pipeup-doc must look like "<id>:<key>", as made by newDocumentAttribute()');let r=await crypto.subtle.importKey("raw",Re(o),{name:"AES-GCM"},!1,["encrypt","decrypt"]);return{id:n,key:r}}async function oo(e,t,n){let o=crypto.getRandomValues(new Uint8Array(12)),r=await crypto.subtle.encrypt({name:"AES-GCM",iv:o,additionalData:ve(n)},e,ve(t));return{iv:ge(o),data:ge(new Uint8Array(r))}}async function ro(e,t,n){try{let o=await crypto.subtle.decrypt({name:"AES-GCM",iv:Re(t.iv),additionalData:ve(n)},e,Re(t.data));return new TextDecoder().decode(o)}catch{throw new Error("pipeup: this feedback could not be opened with this document")}}var vr=5e6,io=e=>`pipeup-file:${e}`;async function so(e,t,n){let o=n?{pipeup:1,doc:e,sealed:!0,...await oo(n,JSON.stringify(t),io(e))}:{pipeup:1,doc:e,sealed:!1,ops:t};return JSON.stringify(o,null,2)}async function ao(e,t,n){if(e.length>vr)throw new Error("pipeup: this feedback file is too large");let o;try{o=JSON.parse(e)}catch{throw new Error("pipeup: this is not an Pipeup feedback file")}if(!o||typeof o!="object"||o.pipeup!==1||typeof o.doc!="string")throw new Error("pipeup: this is not an Pipeup feedback file");if(o.doc!==t)throw new Error("pipeup: this feedback is for a different document");if(!o.sealed)return Array.isArray(o.ops)?o.ops:[];if(!n)throw new Error("pipeup: this feedback is sealed, and this page has no document key");if(typeof o.iv!="string"||typeof o.data!="string")throw new Error("pipeup: this is not an Pipeup feedback file");let r;try{r=await ro(n,{iv:o.iv,data:o.data},io(t))}catch{throw new Error("pipeup: this feedback could not be opened with this document's key")}let s;try{s=JSON.parse(r)}catch{throw new Error("pipeup: this is not an Pipeup feedback file")}return Array.isArray(s)?s:[]}var yr=5e3,wr=/^[a-z][a-z0-9-]{1,23}\/[a-z][a-z0-9-]{0,31}$/,lo=80,Ee=class extends Error{constructor(n,o,r=1){super("pipeup: shown here, but not saved yet");this.id=n;this.cause=o;this.count=r;this.name="UnsavedChangeError"}},dt=class e{constructor(t,n){this.log=t;this.options=n;this.displayName=n.name.trim()?co(n.name):""}listeners=new Set;cache=[];comments=new Map;displayName;ce=Promise.resolve();unsaved=[];static async open(t){if(typeof t.doc!="string"||t.doc===""||t.doc.length>G.doc)throw new Error(`pipeup: the document id must be 1 to ${G.doc} characters`);let n=new It(t.doc),o=await t.store.load(t.doc),r=o.length-(await n.add(o)).length;r&&console.warn(`pipeup: ${r} saved change${r===1?"":"s"} on this page couldn't be read; kept as saved`);let s=new e(n,t);return s.refresh(!1),s}get id(){return this.options.doc}get me(){return this.options.identity.publicKey}get name(){return this.displayName}set name(t){this.displayName=co(t),this.refresh(!0,[],"")}threads(){return this.cache}ops(){return this.log.all()}onChange(t){return this.listeners.add(t),()=>this.listeners.delete(t)}comment(t,n){return this.enqueue(()=>this.write({kind:"create",anchor:t,text:gn(n)}))}reply(t,n){return this.enqueue(()=>this.write({kind:"reply",thread:this.find(t).thread,target:t,text:gn(n)}))}edit(t,n){return this.enqueue(async()=>{let{thread:o}=this.mine(t);await this.write({kind:"edit",thread:o,target:t,text:gn(n)})})}remove(t){return this.enqueue(async()=>{let{thread:n}=this.mine(t);await this.write({kind:"delete",thread:n,target:t})})}resolve(t){return this.enqueue(async()=>{await this.write({kind:"resolve",thread:this.thread(t)})})}reopen(t){return this.enqueue(async()=>{await this.write({kind:"reopen",thread:this.thread(t)})})}sign(t,n){if(!wr.test(t))throw new Error('pipeup: a signing purpose looks like "<add-on id>/<name>"');return Pt(this.options.identity,ve(`pipeup:${t}
2
- ${n}`))}flush(){return this.enqueue(()=>this.persist())}exportFile(){return so(this.options.doc,this.log.all(),this.options.key)}async importFile(t){return this.merge(await ao(t,this.options.doc,this.options.key),"file")}merge(t,n){return t.length>yr?Promise.reject(new RangeError("pipeup: too many changes to merge at once")):this.enqueue(async()=>{let o=await this.log.add([...t]);this.unsaved.push(...o),o.length>0&&this.refresh(!0,o,n);try{await this.persist()}catch(r){throw o.length>0?new Ee(o[0].body.id,r,o.length):r}return o.length})}enqueue(t){let n=this.ce.then(t);return this.ce=n.catch(()=>{}),n}async write(t){let n=await this.log.append(this.options.identity,this.displayName,t);this.unsaved.push(n),this.refresh(!0,[n],"local");try{await this.persist()}catch(o){throw new Ee(n.body.id,o)}return n.body.id}async persist(){if(this.unsaved.length===0)return;let t=[...this.unsaved];await this.options.store.append(this.options.doc,t),this.unsaved=this.unsaved.filter(n=>!t.includes(n))}refresh(t,n=[],o=""){this.cache=this.log.threads(),this.comments.clear();let r=(s,l)=>{s.unnamed&&s.author===this.me&&this.displayName&&(s.name=this.displayName),this.comments.set(s.id,{comment:s,thread:l});for(let c of s.replies)r(c,l)};for(let s of this.cache)r(s.root,s.id);if(t)for(let s of this.listeners)try{s(this.cache,n,o)}catch(l){globalThis.reportError?.(l)}}find(t){let n=this.comments.get(t);if(!n)throw new Error("pipeup: there is no comment with that id");return n}mine(t){let n=this.find(t);if(n.comment.author!==this.me)throw new Error("pipeup: only the writer can change a comment");return n}thread(t){if(!this.cache.some(n=>n.id===t))throw new Error("pipeup: there is no thread with that id");return t}};function gn(e){let t=e.trim();if(!t)throw new Error("pipeup: a comment needs some words");if(t.length>Ot)throw new Error(`pipeup: comments are limited to ${Ot} characters`);return t}function co(e){let t=e.replace(/\s+/g," ").trim();if(!t||t.length>lo)throw new Error(`pipeup: choose a name of 1 to ${lo} characters`);return t}var pt=class{docs=new Map;profile=null;async load(t){return[...this.docs.get(t)?.values()??[]]}async append(t,n){let o=this.docs.get(t);o||this.docs.set(t,o=new Map);for(let r of n)o.set(r.body.id,r)}async loadProfile(){return this.profile}async saveProfile(t){this.profile=t}async saveProfileIfAbsent(t){return this.profile||(this.profile=t),this.profile}},po="",br="Reviewer";async function ut(e,t=po){let n=await e.loadProfile();if(n)return n.name===br?{...n,name:""}:n;let o={identity:await cn(),name:t};return e.saveProfileIfAbsent(o)}var ft=class e{constructor(t){this.db=t}static open(t="pipeup"){return new Promise((n,o)=>{let r=indexedDB.open(t,1);r.onupgradeneeded=()=>{let s=r.result;s.createObjectStore("ops",{keyPath:["doc","id"]}).createIndex("doc","doc"),s.createObjectStore("meta")},r.onsuccess=()=>{let s=r.result;s.onversionchange=()=>s.close(),n(new e(s))},r.onerror=()=>o(r.error??new Error("pipeup: could not open local storage"))})}close(){this.db.close()}async load(t){return(await this.request("ops","readonly",o=>o.index("doc").getAll(t))).map(o=>o.op)}async append(t,n){if(n.length===0)return;let o=this.db.transaction("ops","readwrite"),r=o.objectStore("ops"),s=uo(o);try{for(let l of n)r.put({doc:t,id:l.body.id,op:l})}catch(l){throw o.abort(),s.catch(()=>{}),l}await s}async loadProfile(){return await this.request("meta","readonly",t=>t.get("profile"))??null}async saveProfile(t){await this.request("meta","readwrite",n=>n.put(t,"profile"))}async saveProfileIfAbsent(t){let n=this.db.transaction("meta","readwrite"),o=n.objectStore("meta"),r=uo(n),s=t,l=o.get("profile");return l.onsuccess=()=>{l.result?s=l.result:o.put(t,"profile")},await r,s}request(t,n,o){return new Promise((r,s)=>{let l=o(this.db.transaction(t,n).objectStore(t));l.onsuccess=()=>r(l.result),l.onerror=()=>s(l.error??new Error("pipeup: local storage request failed"))})}};function uo(e){return new Promise((t,n)=>{e.oncomplete=()=>t(),e.onerror=()=>n(e.error??new Error("pipeup: local storage write failed")),e.onabort=()=>n(e.error??new Error("pipeup: local storage write aborted"))})}function mt(e){let n=(e.ownerDocument??e).createTreeWalker(e,NodeFilter.SHOW_TEXT),o=[],r="";for(let s=n.nextNode();s;s=n.nextNode())o.push({node:s,start:r.length}),r+=s.data;return{text:r,nodes:o}}function vn(e,t,n){let r=(e.ownerDocument??e).createRange();return r.setStart(e,0),r.setEnd(t,n),r.toString().length}function yn(e,t,n){let o=fo(e,t,!1),r=fo(e,n,!0);if(!o||!r||n<t)return null;let s=o.node.ownerDocument.createRange();return s.setStart(o.node,o.offset),s.setEnd(r.node,r.offset),s}function fo(e,t,n){let o=e.nodes.find(r=>t>=r.start&&t<r.start+r.node.data.length+Number(n));return o&&{node:o.node,offset:t-o.start}}var mo=32,go=200,xr="p,li,h1,h2,h3,h4,h5,h6,td,th,blockquote,pre,figcaption,dt,dd,summary,caption";function vo(e){return e.nodeType===Node.ELEMENT_NODE?e:e.parentElement}function yo(e,t){for(let n=vo(e)?.closest("[data-pipeup-id]")??null;n;){if(!t.contains(n))return null;let o=n.getAttribute("data-pipeup-id")??"";if(o!==""&&o.length<=G.anchorId)return n;n=n.parentElement?.closest("[data-pipeup-id]")??null}return null}function Nt(e,t,n){return e.slice(t,n).replace(/^[\uDC00-\uDFFF]|[\uD800-\uDBFF]$/g,"")}function Er(e,t){let n=kr(e,t);if(n.length>G.path)throw new Error("pipeup: this element is nested too deeply to comment on \u2014 give a nearby container a data-pipeup-id");return n}function wo(e){if(!fn(e))throw new Error("pipeup: could not describe this place on the page");return e}function $t(e,t){let n=vo(e),o=n?.closest(xr)??null;return o&&t.contains(o)?o:n&&t.contains(n)?n:t}function kr(e,t){if(e===t)return"";let n=[];for(let o=t;o&&o!==e;o=o.parentElement){let r=1;for(let s=o.previousElementSibling;s;s=s.previousElementSibling)s.tagName===o.tagName&&r++;n.unshift(`${o.tagName.toLowerCase()}:nth-of-type(${r})`)}return":scope > "+n.join(" > ")}function wn(e,t,n){if(!t.contains(e.commonAncestorContainer))throw new Error("pipeup: the selection is outside the commentable area");let o=yo(e.commonAncestorContainer,t),r=o??t,{text:s}=mt(r),l=vn(r,e.startContainer,e.startOffset),c=vn(r,e.endContainer,e.endOffset),m=s.slice(l,c);if(m==="")throw new Error("pipeup: select some text to comment on");if(m.length>G.quote)throw new Error(`pipeup: selections are limited to ${G.quote} characters`);let u=Nt(s,Math.max(0,l-mo),l),g=Nt(s,c,c+mo);return wo({...o?{id:o.getAttribute("data-pipeup-id")??""}:{},path:"",quote:{exact:m,prefix:u,suffix:g},...n?{view:n}:{},fingerprint:De($t(e.startContainer,t).textContent??""),snapshot:Nt(He(u+m+g),0,go)})}function bn(e,t,n,o){let r=yo(e,t);return wo({...r?{id:r.getAttribute("data-pipeup-id")??""}:{},path:Er(r??t,e),...n?{point:{x:ho(n.x),y:ho(n.y)}}:{},...o?{view:o}:{},fingerprint:De(e.textContent??""),snapshot:Nt(He(e.textContent??""),0,go)})}function ho(e){return Number.isFinite(e)?Math.min(1,Math.max(0,e)):0}function bo(e,t,n){let o=Array.from({length:t.length+1},(l,c)=>c),r=[...o],s=[t.length];for(let l=1;l<=e.length;l++){r[0]=n?0:l;for(let c=1;c<=t.length;c++){let m=e.charCodeAt(l-1)===t.charCodeAt(c-1)?0:1;r[c]=Math.min(o[c]+1,r[c-1]+1,o[c-1]+m)}s.push(r[t.length]),[o,r]=[r,o]}return s}var Sr=(e,t)=>bo(e,t,!1).pop();function xo(e,t,n){let o=t.length;if(o===0)return null;let r=-1,s=1/0;if(bo(e,t,!0).forEach((m,u)=>{u&&m<s&&(s=m,r=u)}),s>n)return null;let l=Math.max(0,r-o),c=1/0;for(let m=Math.max(0,r-o-n);m<=Math.min(r,r-o+n);m++){let u=Sr(e.slice(m,r),t);u<c&&(c=u,l=m)}return{start:l,end:r,distance:c}}var ht={state:"orphaned",element:null,range:null},Tr=5e4,Ar=300,Lr=12,Mr=":scope > ";function Cr(e,t){for(let n of e.querySelectorAll("[data-pipeup-id]"))if(n.getAttribute("data-pipeup-id")===t)return n;return null}function Rt(e,t,n={}){let o=e.id?Cr(t,e.id):t;return e.quote?Or(e,e.quote,o,t,n.fuzzy!==!1):Pr(e,o)}function Pr(e,t){if(!t)return ht;let n=t;if(e.path){if(!e.path.startsWith(Mr))return ht;try{n=t.querySelector(e.path)}catch{return ht}}return n?{state:De(n.textContent??"")===e.fingerprint?"attached":"moved",element:n,range:null}:ht}function Or(e,t,n,o,r){let s=n??o,l=mt(s),c=Ir(l.text,t);if(c>=0){let m=yn(l,c,c+t.exact.length);if(m){let u=$t(m.startContainer,o);return{state:n!==null&&De(u.textContent??"")===e.fingerprint?"attached":"moved",element:u,range:m}}}if(r){let m=s===o?l:mt(o);if(m.text.length<=Tr&&t.exact.length>=Lr&&t.exact.length<=Ar){let u=xo(m.text,t.exact,Math.floor(t.exact.length/4)),g=u?yn(m,u.start,u.end):null;if(g)return{state:"moved",element:$t(g.startContainer,o),range:g}}}return ht}function Ir(e,t){if(!t.exact)return-1;let n=-1,o=-1;for(let r=e.indexOf(t.exact);r!==-1;r=e.indexOf(t.exact,r+1)){let s=e.slice(Math.max(0,r-t.prefix.length),r),l=e.slice(r+t.exact.length,r+t.exact.length+t.suffix.length),c=$r(s,t.prefix)+Nr(l,t.suffix);c>o&&(n=r,o=c)}return n}function Nr(e,t){let n=0;for(;n<e.length&&n<t.length&&e[n]===t[n];)n++;return n}function $r(e,t){let n=0;for(;n<e.length&&n<t.length&&e[e.length-1-n]===t[t.length-1-n];)n++;return n}var Rr={A:"Link",BUTTON:"Button",P:"Paragraph",LI:"List item",IMG:"Image",TABLE:"Table",TD:"Cell",TH:"Cell",FIGURE:"Figure",SVG:"Graphic",CANVAS:"Graphic",LABEL:"Label",INPUT:"Field",SELECT:"Field",TEXTAREA:"Field",SUMMARY:"Question",BLOCKQUOTE:"Quote",SECTION:"Section",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading"},Hr=40;function Ht(e){return e.getAttribute("data-pipeup-label")||Rr[e.tagName.toUpperCase()]||"Block"}function En(e){return xn(He(e.getAttribute("aria-label")??e.getAttribute("alt")??e.innerText??e.textContent??""),Hr)}function Be(e){let t=e.getAttribute("data-pipeup-label");if(t)return t;let n=En(e);return n?`${Ht(e)} \xB7 ${n}`:Ht(e)}function kn(e,t,n){let o=e.id??null,r=e.quote?.exact??null,s=e.point?`${Math.round(e.point.x*100)}% across, ${Math.round(e.point.y*100)}% down the element`:null,l=t.element;if(t.state==="orphaned"||!l)return{where:`No longer on the page (it read: "${e.snapshot}")`,element:null,id:o,quote:r,pin:s};let c=[],m=e.view?.slide;if(m){let g=l.closest("[data-pipeup-slide]")?.querySelector("h1,h2,h3")?.textContent;c.push(`Slide ${m}`+(g?` "${xn(He(g))}"`:""))}else{let g=Dt(e.view);g&&c.push(g);let E=Dr(l,n);E&&c.push(`Section "${xn(He(E.textContent??""))}"`)}let u=Be(l);return c.push(u),{where:c.join(" \u203A "),element:u,id:o,quote:r,pin:s}}function Dt(e){return e?e.label||Object.entries(e).filter(([t,n])=>n&&t!=="slide").map(([,t])=>t).join(" \xB7 "):""}function Dr(e,t){let n=null;for(let o of t.querySelectorAll("h1,h2,h3")){if(o===e||o.contains(e))break;if(o.compareDocumentPosition(e)&4)n=o;else break}return n}function xn(e,t=60){return e.length>t?e.slice(0,t-1)+"\u2026":e}var st=["Otter","Fox","Owl","Bear","Rabbit"],Sn=["Red","Orange","Yellow","Green","Teal","Blue","Purple","Pink","Brown","Grey"];function Eo(e){let t=2166136261;for(let n=0;n<e.length;n++)t=Math.imul(t^e.charCodeAt(n),16777619);return t=Math.imul(t^t>>>16,2246822507),t=Math.imul(t^t>>>13,3266489909),(t^t>>>16)>>>0}var Tn=e=>Eo(e)%st.length,An=e=>Math.floor(Eo(e)/st.length)%Sn.length,ye=e=>`${Sn[An(e)]} ${st[Tn(e)]}`,fe=e=>e.name||ye(e.author);var Br="Each thread says where it is: the slide or section, the element (its data-pipeup-id attribute in the HTML), and the exact quoted text or pin position. Work through the open threads in order, and for each one say what you changed or why you did not.";function at(e,t){let n=Math.max(0,Math.round((t-e)/1e3));if(n<60)return"just now";let o=Math.round(n/60);if(o<60)return`${o}m ago`;let r=Math.round(o/60);return r<48?`${r}h ago`:`${Math.round(r/24)}d ago`}function Ln(e,t,n,o){return t==="ai"?ko(e,"## Comment thread",o,n):So(e)}function Mn(e,t,n){let o=e.filter(c=>!c.thread.resolved);if(t==="text")return o.map(So).join(`
3
- `);let r=e.length-o.length,s=[`# Review comments: ${ie(n.title)}`,"",`- **Page:** ${ie(n.url)}`,`- **Exported:** ${n.exportedAt.toISOString()}`,`- **Open threads:** ${o.length}${r?` (${r} resolved, not included)`:""}`,"",Br,"",""].join(`
4
- `),l=n.exportedAt.getTime();return s+o.map((c,m)=>ko(c,`## Thread ${m+1}`,l)).join(`
5
- `)}function ie(e){return e.replace(/\s+/g," ").trim()}function ko(e,t,n,o){let{thread:r,location:s}=e,l=r.root.replies.length,c=[`${t} \xB7 ${r.resolved?"resolved":"open"}`];if(c.push(`- **Thread:** ${r.id}`),o&&c.push(`- **Page:** ${ie(o)}`),c.push(`- **Where:** ${ie(s.where)}`),s.id){let m=ie(s.id.replace(/`/g,""));c.push(`- **Element:** \`[data-pipeup-id="${m}"]\`${s.element?` (${ie(s.element)})`:""}`)}s.quote&&c.push(`- **Quoted text:** "${ie(s.quote)}"`),s.pin&&c.push(`- **Pin:** ${ie(s.pin)}`),c.push(`- **Started by:** ${ie(fe(r.root))}, ${at(r.root.at,n)}${l?` \xB7 ${l} ${l===1?"reply":"replies"}`:""}`,"",`**${ie(fe(r.root))}** (${at(r.root.at,n)}): ${Bt(r.root," ")}`);for(let m of r.root.replies)c.push(`- **${ie(fe(m))}** (${at(m.at,n)}): ${Bt(m," ")} <!-- comment:${m.id} -->`);return c.join(`
6
- `)+`
7
- `}function So(e){let{thread:t,location:n}=e,o=[ie(n.where)+(n.quote?`, on the text "${ie(n.quote)}"`:""),`${ie(fe(t.root))}: ${Bt(t.root," ")}`];for(let r of t.root.replies)o.push(` ${ie(fe(r))}: ${Bt(r," ")}`);return o.join(`
8
- `)+`
9
- `}function Bt(e,t){return e.deleted?"(deleted)":e.text.replace(/\r\n|\r|\n/g,`
10
- `+t)+(e.edited?" (edited)":"")}var To="0.5.1";function v(e,t={},...n){let o=document.createElement(e);for(let[r,s]of Object.entries(t))s===void 0||s===!1||(r==="class"?o.className=String(s):o.setAttribute(r,s===!0?"":s));for(let r of n)r!=null&&r!==!1&&o.append(r);return o}function Q(e,t){let n=e.getRootNode().activeElement;t&&n instanceof HTMLElement&&e.contains(n)&&n.blur(),e.inert=t}function Ft(e,t,n=null){let o=e.getRootNode().activeElement,r=!1;for(let s=t.length;s--;n=t[s])t[s].nextSibling!==n&&(r=!!e.insertBefore(t[s],n));return r&&o&&t.some(s=>s.contains(o))&&o.focus({preventScroll:!0}),r}var lt=()=>{let e=window.getSelection();return e&&!e.isCollapsed&&e.toString().trim()?e:null};function we(e,t){return e.length>t?e.slice(0,t-1)+"\u2026":e}function Fe(e,t,n=4){e.style.left=`${t.left-n}px`,e.style.top=`${t.top-n}px`,e.style.width=`${t.width+n*2}px`,e.style.height=`${t.height+n*2}px`}var Fr=/\bhttps?:\/\/[^\s<>"'`]+/gi,Vr=`.,;:!?'"]}`,_r=2048,Ur=/[\u202A-\u202E\u2066-\u2069]/;function qr(e){let t=0,n=0;for(let r of e)r==="("?t++:r===")"&&n++;let o=e.length;for(;o>0;){let r=e[o-1];if(r===")"&&n>t)n--;else if(!Vr.includes(r))break;o--}return e.slice(0,o)}function Vt(e){let t=[],n=0;for(let o of e.matchAll(Fr)){if(o[0].length>_r||Ur.test(o[0]))continue;let r=qr(o[0]),s=o.index??0,l;try{let m=new URL(r);if(m.protocol!=="http:"&&m.protocol!=="https:")continue;l=m.href}catch{continue}s>n&&t.push(e.slice(n,s));let c=v("a",{href:l,target:"_blank",rel:"noopener noreferrer"},r);c.addEventListener("click",m=>m.stopPropagation()),t.push(c),n=s+r.length}return n<e.length&&t.push(e.slice(n)),t}var Ao="http://www.w3.org/2000/svg",Kr={comment:["M20.5 11.5a8 8 0 0 1-11.7 7.1L4 19.8l1.2-4.4A8 8 0 1 1 20.5 11.5z","M12.3 8.2v6.6M9 11.5h6.6"],send:["M21 12L3.5 4.5 6.2 12l-2.7 7.5zM6.2 12H13"],copy:["M10 8h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-8a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2z","M16 8V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h2"],resolve:["M5 12.5l4.5 4.5L19 7.5"],reopen:["M3 12a9 9 0 1 0 3-6.7","M3 4v5h5"],lines:["M4 7h16M4 12h10M4 17h7"],list:["M3 6.5a1.5 1.5 0 1 0 3 0a1.5 1.5 0 1 0-3 0M3 12a1.5 1.5 0 1 0 3 0a1.5 1.5 0 1 0-3 0M3 17.5a1.5 1.5 0 1 0 3 0a1.5 1.5 0 1 0-3 0M9 6.5h11M9 12h11M9 17.5h7"],expand:["M14 4h6v6M20 4l-6 6M10 20H4v-6M4 20l6-6M20 14v6h-6M20 20l-6-6M4 10V4h6M4 4l6 6"],pin:["M6 18v-6a6 6 0 1 1 6 6z"],shrink:["M20 10h-6V4M14 10l6-6M4 14h6v6M10 14l-6 6M14 20v-6h6M14 14l6 6M10 4v6H4M10 10L4 4"],bubble:["M20.5 11.5a8 8 0 0 1-11.7 7.1L4 19.8l1.2-4.4A8 8 0 1 1 20.5 11.5z"],close:["M6 6l12 12M18 6L6 18"],edit:["M4 20h4L19 9l-4-4L4 16z"]};function Z(e,t=15,n){let o=Le(Kr[e],t);return n&&o.setAttribute("stroke-width",String(n)),o}function Le(e,t){let n=document.createElementNS(Ao,"svg"),o={width:String(t),height:String(t),viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.8","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"};for(let[r,s]of Object.entries(o))n.setAttribute(r,s);for(let r of e){let s=document.createElementNS(Ao,"path");s.setAttribute("d",r),n.append(s)}return n}var _t=(e,t,n)=>`M${e} ${t}a${n} ${n} 0 1 0 ${2*n} 0a${n} ${n} 0 1 0 -${2*n} 0`,zr={Otter:"M4 13.2C4 9.2 7.6 6.5 12 6.5s8 2.7 8 6.7-3.6 6.3-8 6.3-8-2.3-8-6.3zM5.6 9.6a1.8 1.8 0 1 1 2.7-2.3M18.4 9.6a1.8 1.8 0 1 0-2.7-2.3M9.2 11.6h.01M14.8 11.6h.01M11 14h2l-1 1zM9.8 15.8l-3.2.4M9.9 17l-2.7 1.1M14.2 15.8l3.2.4M14.1 17l2.7 1.1",Fox:"M3.5 4l5 3.5h7l5-3.5-1.5 8.5L12 20l-7-7.5zM9 12h.01M15 12h.01M12 17h.01",Owl:`M5 4.5l3 2.5h8l3-2.5V14a7 7 0 0 1-14 0z${_t(7.4,11.5,1.9)}${_t(12.8,11.5,1.9)}M11.3 14.6l.7 1 .7-1`,Bear:`${_t(5,13.5,7)}M8.9 7.22A2.8 2.8 0 1 0 5.89 10.09M18.11 10.09A2.8 2.8 0 1 0 15.1 7.22M9.4 12.6h.01M14.6 12.6h.01M10.3 16.4c0-1 .8-1.6 1.7-1.6s1.7.6 1.7 1.6-.8 1.6-1.7 1.6-1.7-.6-1.7-1.6z`,Rabbit:`${_t(6.5,15.5,5.5)}M9.6 10.5C8.2 6.5 8.4 2.5 9.8 2.5s2.4 3.5 1.6 7.5M14.4 10.5c1.4-4 1.2-8-.2-8s-2.4 3.5-1.6 7.5M10 15h.01M14 15h.01M11.3 17.3l.7.5.7-.5`};function Lo(e){let t=/[\p{L}\p{N}]/u.exec(e);if(!t)return"";let n=t[0].toUpperCase();return[...n].length===1?n:t[0]}var gt=(e,t)=>Lo(t)||ye(e);function Me(e,t){return v("span",{class:`av c${An(e)}`,"aria-hidden":"true","data-animal":ye(e)},Lo(t)||Le([zr[st[Tn(e)]]],24))}var Wr=320;function Ut(e,t){setTimeout(()=>{e.remove(),t?.()},Wr)}function qt(e){return requestAnimationFrame(()=>{e.offsetWidth,e.classList.add("in")}),e}var Cn=null,Pn=e=>{Cn=e},Mo=()=>Cn?.note()??null,vt="pu-source";function Kt(e){let t=v("textarea",{class:"input",rows:"1","aria-label":e.label}),n=v("button",{class:"send",type:"button","aria-label":"Send",title:"Send",inert:!0},Z("send")),o=v("span",{class:"tools"});o.hidden=!0;let r=v("div",{class:"row"},e.before,t,o,n),s=e.kind??"comment",l=!1,c=new Set,m=()=>{for(let d of[...c])d()},u=()=>{let d=t.value.trim()!=="";n.classList.toggle("show",d),n.inert=!d,t.style.height="auto",t.style.height=`${Math.max(27,t.scrollHeight)}px`},g=()=>{let d=-1,S=0,C=(p,y)=>{d<0&&(d=t.selectionStart,S=0);let P=t.value.slice(0,d),O=p&&P&&!/\s$/.test(P)&&!/^\s/.test(p)?" ":"";t.setRangeText(O+p,d,d+S,"end"),S=O.length+p.length,y&&(d=-1),u()};return{update:p=>C(p,!1),commit:p=>C(p,!0),cancel:()=>{d>=0&&S&&t.setRangeText("",d,d+S,"end"),d=-1,S=0,u()}}},E=new Map,T=()=>{let d=(Cn?.tools()??[]).filter(S=>S.available?.()!==!1);for(let[S,C]of E)d.some(p=>p.id===S)||(C.remove(),E.delete(S));for(let S of d){if(E.has(S.id))continue;let C=v("button",{class:"ib tool",type:"button","aria-label":S.label,title:S.label,"aria-pressed":"false"},Le(S.icon,15));C.addEventListener("mousedown",p=>p.preventDefault()),C.addEventListener("click",p=>{p.stopPropagation();try{S.press({kind:s,thread:e.thread?.()??null,text:()=>t.value,focus:()=>t.focus({preventScroll:!0}),connected:()=>r.isConnected,setPressed:y=>C.setAttribute("aria-pressed",String(y)),dictate:g,onEnd:y=>(c.add(y),()=>c.delete(y))})}catch(y){globalThis.reportError?.(y)}}),E.set(S.id,C),o.append(C)}o.hidden=E.size===0};T(),r.addEventListener(vt,T);let L=async()=>{let d=t.value.trim();if(!(!d||l)){l=!0;try{await e.V(d),n.matches(":focus")&&t.focus(),t.value="",u(),m()}catch{}finally{l=!1}}};return r.addEventListener("mousedown",d=>{d.target===t||n.contains(d.target)||o.contains(d.target)||(d.preventDefault(),t.focus({preventScroll:!0}),t.setSelectionRange(t.value.length,t.value.length))}),t.addEventListener("input",u),t.addEventListener("keydown",d=>{d.stopPropagation(),d.key==="Enter"&&!d.shiftKey&&!d.isComposing?(d.preventDefault(),L()):d.key==="Escape"&&(d.preventDefault(),t.value="",u(),t.blur(),m(),e._?.())}),n.addEventListener("click",d=>{d.stopPropagation(),L()}),{element:r,input:t,focus:()=>t.focus({preventScroll:!0})}}var Wt=1,Co=["sync","menu","notify","note","composer","panel","styles","status","overlay","here","sign"],Yr=/^[a-z][a-z0-9-]{1,23}$/,jr=new Set(["local","file","page","user","pipeup","presence","sync"]),Gr=1e4,Yt=class{constructor(t,n,o){this.ctx=t;this.shadow=n;this.after=o;Pn({tools:()=>this.U,note:()=>[...this.X.values()].at(-1)??null})}G=0;$=[];X=new Map;J=new Map;U=[];Q=new Set;R=new Set;q=new Set;K=new Map;k=new Map;z=new Map;remote={n:0,who:new Set};last=0;timer=0;de="";subscribe(t){return this.q.add(t),()=>void this.q.delete(t)}changed(t){t&&this.G++;for(let n of[...this.q])n(t);for(let n of this.ctx.t.querySelectorAll(".row, .draft"))n.dispatchEvent(new Event(vt))}H(t,n){let o=this.z.get(t)??this.z.set(t,new Set).get(t),r=()=>void(o.delete(r)&&n());return o.add(r),r}pe(){return[...this.J.values()].map(t=>t.text).join(" \xB7 ")}Ae(t,n){return this.$.push(n),this.changed(!0),{update:()=>this.changed(!1),remove:this.H(t,()=>{this.$.splice(this.$.indexOf(n),1),this.changed(!0)})}}ue(t,n,o){o?t.set(n,o):t.delete(n),this.changed(!1)}Le(t,n){return this.U.push(n),this.changed(!1),this.H(t,()=>{this.U.splice(this.U.indexOf(n),1),this.changed(!1)})}closed(){return this.ctx.state.hidden&&!this.ctx.state.d}Me(t,n){this.closed()?this.k.set(t,n):this.ctx.Z(n)}flush(){if(this.closed()||this.k.size===0)return;let t=[...this.k.values()].at(-1);this.k.clear(),this.ctx.Z(t)}Ce(){return this.shadow.activeElement instanceof HTMLTextAreaElement||[...this.ctx.t.querySelectorAll("textarea")].some(t=>t.value.trim()!=="")}Pe(t){this.ctx.state.hidden||this.ctx.w(t)}Oe(t,n){if(!(n==="local"||n==="")){for(let{body:o}of t)o.author===this.ctx.doc.me||o.kind!=="create"&&o.kind!=="reply"||(this.remote.n++,this.remote.who.add(o.name||ye(o.author)));this.fe()}}fe(t=Math.max(0,this.last+Gr-Date.now())){this.timer||!this.remote.n||(this.timer=window.setTimeout(()=>{if(this.timer=0,this.ctx.state.hidden||this.Ce())return this.fe(1e3);let{n,who:o}=this.remote;this.remote={n:0,who:new Set},this.last=Date.now(),this.ctx.w(`${n} new comment${n===1?"":"s"} from ${o.size===1?[...o][0]:`${o.size} people`}`)},t))}Ie(t){let n=this.K.get(t);return n||(n=v("div",{class:"ov","aria-hidden":"true","data-addon":t}),this.ctx.t.insertBefore(n,this.after.nextSibling),this.K.set(t,n)),n}Ne(t,n){let o=this.ctx.host.ownerDocument.defaultView?.CSSStyleSheet,r=o&&"replaceSync"in o.prototype&&"adoptedStyleSheets"in this.shadow?new o:null;r&&(r.replaceSync(n),this.shadow.adoptedStyleSheets=[...this.shadow.adoptedStyleSheets,r]);let s=r??this.shadow.appendChild(v("style",{},n));return this.H(t,()=>r?this.shadow.adoptedStyleSheets=this.shadow.adoptedStyleSheets.filter(l=>l!==r):s.remove())}he(t,n,o){return n.add(o),this.H(t,()=>n.delete(o))}$e(t,n){return this.he(t,this.Q,n)}Re(t,n){let o=this.he(t,this.R,n);return this.call(this.R,n,this.ge()),o}ge(){let{state:t}=this.ctx,n=this.shadow.activeElement;return{shown:!t.hidden,commentMode:t.l,allOpen:t.c,dark:this.ctx.t.classList.contains("dark"),view:this.ctx.p.view(),writing:n instanceof HTMLTextAreaElement?n.closest("[data-thread]")?.dataset.thread??"":null}}S(){for(let o of[...this.Q])this.call(this.Q,o);if(this.R.size===0)return;let t=this.ge(),n=JSON.stringify(t);if(n!==this.de){this.de=n;for(let o of[...this.R])this.call(this.R,o,t)}}call(t,n,...o){try{n(...o)}catch(r){t.delete(n),globalThis.reportError?.(r)}}He(t,n,o){let r=this.ctx.t,s=this.shadow.activeElement,l=v("button",{class:"ib",type:"button","aria-label":"Close"},Le(["M6 6l12 12M18 6L6 18"],15)),c=v("div",{class:"xp",role:"dialog","aria-label":o.label,"data-addon":t},v("div",{class:"hd"},v("span",{},o.label),l),v("div",{class:"xb"},n)),m=[...r.children].filter(E=>E instanceof HTMLElement&&!E.inert);for(let E of m)E.inert=!0;r.append(c),c.offsetWidth,c.classList.add("show");let u=E=>{E.key==="Escape"&&(E.stopPropagation(),E.preventDefault(),g())},g=this.H(t,()=>{window.removeEventListener("keydown",u,!0);for(let E of m)E.inert=!1;c.classList.remove("show"),c.inert=!0,window.setTimeout(()=>c.remove(),300),s?.focus?.({preventScroll:!0});try{o.onClose?.()}catch(E){globalThis.reportError?.(E)}});return l.addEventListener("click",g),window.addEventListener("keydown",u,!0),(c.querySelector("button, input, textarea, select, a[href]")??c).focus?.({preventScroll:!0}),{close:g}}clear(t){for(let n of[...this.z.get(t)??[]])n();this.z.delete(t),this.K.get(t)?.remove(),this.K.delete(t);for(let n of[this.X,this.J,this.k])n.delete(t);this.changed(!0)}destroy(){window.clearTimeout(this.timer),Pn(null),this.q.clear()}},wt=new Map,yt=null,Ve=(()=>{let e=globalThis.Pipeup;return e?.VERSION?e:null})();function Xr(){return Ve?Ve.addons():[...wt.values()].map(e=>({...e.info}))}function zt(e){if(Ve)return Ve.use(e);let t=l=>console.warn(`pipeup: ${l}`),n=e;if(!n||typeof n!="object"||typeof n.id!="string"||!Yr.test(n.id)||jr.has(n.id)||typeof n.setup!="function"||typeof n.network?.says!="string")return t("an add-on needs an id of 2 to 24 lowercase letters, digits and dashes (not a reserved one), a setup function and a network statement");if(wt.has(n.id))return t(`the add-on "${n.id}" is already registered; the second is ignored`);let o={id:n.id,version:String(n.version??""),network:n.network,state:"waiting"},r=(n.needs??[]).find(l=>!Co.includes(l));n.api!==Wt?(o.state="off",o.reason=`needs add-on API ${String(n.api)}; this Pipeup has ${Wt}`):r&&(o.state="off",o.reason=`this Pipeup has no ${r} slot`);let s={addon:e,info:o};wt.set(n.id,s),yt?.i&&o.state==="waiting"&&Oo(s,yt)}function Po(){if(Ve)return!0;let e=globalThis,t=e.pipeupAddons;if(Array.isArray(t))for(let n of t)zt(n);else if(t&&typeof t=="object"&&t.push!==zt)return!1;return e.pipeupAddons={push:zt},!0}function Jr(e){return e instanceof Error?e.message:String(e)}async function Oo(e,t){let{addon:n,info:o}=e,r=new AbortController,s=new Set,{surface:l,doc:c}=t,m=()=>!r.signal.aborted,u=Object.assign(()=>{},{update(){},remove(){},close(){}}),g=p=>(...y)=>m()?p(...y):u,E={id:c.id,me:c.me,get name(){return c.name},threads:()=>c.threads(),ops:()=>c.ops(),onChange:p=>{let y=c.onChange(p);return s.add(y),()=>{y(),s.delete(y)}}},T=n.id,L={api:Wt,version:t.version,document:E,root:t.root,ephemeral:t.ephemeral,signal:r.signal,has:p=>Co.includes(p),off:p=>{S=String(p)},merge:p=>m()?c.merge(p,T):Promise.resolve(0),addMenuItem:g(p=>l.Ae(T,p)),notify:g(p=>l.Me(T,p)),announce:g(p=>l.Pe(p)),setComposerNote:g(p=>l.ue(l.X,T,p)),addComposerTool:g(p=>l.Le(T,p)),openPanel:g((p,y)=>l.He(T,p,y)),addStyles:g(p=>l.Ne(T,p)),setStatus:g(p=>l.ue(l.J,T,p)),overlay:()=>l.Ie(T),onFrame:g(p=>l.$e(T,p)),where:p=>l.ctx.p.view(p),isHere:p=>l.ctx.p.u(p),go:p=>l.ctx.p.W(p),onUi:g(p=>l.Re(T,p)),avatar:(p,y)=>{let P=Me(p,y);return P.classList.add("in"),P},sign:(p,y)=>c.sign(`${T}/${p}`,y)},d,S,C=()=>{if(m()){r.abort();for(let p of[...s])p();try{d?.()}catch(p){globalThis.reportError?.(p)}l.clear(T),o.state==="on"&&(o.state="waiting")}};e.stop=C;try{if(d=await n.setup(L),!m()){d?.();return}if(S!==void 0){C(),o.state="off",o.reason=S;return}o.state="on",delete o.reason}catch(p){o.state="failed",o.reason=Jr(p),C(),o.state="failed",globalThis.reportError?.(p)}}function Io(e){let t={...e,i:!0};yt=t;for(let n of wt.values())n.info.state==="waiting"&&Oo(n,t);return()=>{t.i=!1,yt===t&&(yt=null);for(let n of[...wt.values()].reverse())n.stop?.(),delete n.stop;e.surface.destroy()}}var Qr={code:"KeyC"},bt=typeof navigator<"u"&&/Mac|iP(hone|ad|od)/.test(navigator.platform)?"\u21E7\u2325C":"Shift+Alt+C",On="Shift+Alt+C";function No(e){return e.code===Qr.code&&e.shiftKey&&e.altKey&&!e.metaKey&&!e.ctrlKey&&!e.repeat&&!e.getModifierState("AltGraph")}function Zr(e){let t=v("button",{class:"me",type:"button",tabindex:"-1","aria-hidden":"true"});t.addEventListener("mousedown",p=>p.preventDefault());let n=Kt({label:"Comment",kind:"comment",before:t,V:e.V,_:e._}),o=v("div",{class:"note"}),r=()=>{let p=Mo();o.textContent=p??"",o.hidden=!p};r();let s=v("div",{class:"say"}),l=v("input",{class:"input",type:"text",maxlength:"80","aria-label":"Your name"}),c=v("div",{class:"nf"},l),m=v("div",{class:"you"},s,c),u="",g=!1,E=()=>{let p=e.name(),y=p?"change":"add your name";if(t.title=p?"Change your name":"Add your name",!t.lastChild||u!==p){let O=Me(e.me,p),x=t.lastChild;x?(qt(O),Ut(x)):O.classList.add("in"),t.append(O),u=p}let P=v("button",{type:"button"},y);P.addEventListener("click",L),s.replaceChildren(v("span",{class:"nm"},p||`You're ${ye(e.me)}`)," \xB7 ",P)},T=p=>{m.classList.toggle("naming",p),Q(s,p),Q(c,!p)};function L(p){p.stopPropagation(),l.value=e.name(),T(!0),l.focus({preventScroll:!0}),l.select()}let d=()=>{T(!1),n.focus()};t.addEventListener("click",L),l.addEventListener("keydown",p=>{if(p.stopPropagation(),p.key==="Escape")p.preventDefault(),d();else if(p.key==="Enter"){p.preventDefault();let y=l.value.trim();if(!y||y===e.name())return d();if(g)return;g=!0,e.rename(y).finally(()=>{g=!1,E(),d()})}}),E(),T(!1);let S=v("div",{class:"ctx"},e.label),C=v("div",{class:"draft"},S,o,n.element,m);return C.addEventListener(vt,r),{element:C,ve:()=>{let{selectionStart:p,selectionEnd:y}=n.input;return()=>{n.focus(),n.input.setSelectionRange(p,y)}},ee:p=>{S.hidden=p},ye:p=>{S.textContent=p},focus:()=>n.focus(),De:()=>n.input.value.trim()===""}}function jt(e,t){let n=Zr({label:t.label,me:e.doc.me,name:()=>e.d.name(),rename:o=>e.d.rename(o),V:o=>e.Be(o),_:()=>e.Fe()});return e.D(n),n}function Gt(e,t){if(t.state==="orphaned"||!t.element||e.quote)return null;let n=t.element.getBoundingClientRect();if(!n.width&&!n.height)return null;if(e.point)return{x:n.left+e.point.x*n.width,y:n.top+e.point.y*n.height};let o=t.element.ownerDocument.createRange();o.selectNodeContents(t.element);let r=o.getBoundingClientRect();return{x:r.width?Math.min(n.right-8,r.right+6):n.right-8,y:(r.height?r.top:n.top)+8}}function xt(e){return e.range?[...e.range.getClientRects()]:[]}function In(e,t){let n=xt(t)[0];if(n)return n.top;if(t.state==="orphaned"||!t.element)return null;let o=t.element.getBoundingClientRect();return e.point?o.top+e.point.y*o.height:o.top}function Et(e,t){let n=xt(t).at(-1);if(n)return{x:n.left,y:n.bottom,below:!0};let o=Gt(e,t);return o?{...o,below:!1}:null}function $o(e,t,n){for(let o of n)if(e>=o.left&&e<=o.right&&t>=o.top&&t<=o.bottom)return!0;return!1}function Ro(e,t,n=10){let o=[...e].sort((c,m)=>c.T-m.T),r=new Array(o.length).fill(0),s=o.findIndex(c=>c.id===t),l=c=>o[c];if(s<0)o.forEach((c,m)=>{r[m]=m===0?c.T:Math.max(c.T,(r[m-1]??0)+l(m-1).height+n)});else{r[s]=l(s).T;for(let c=s+1;c<o.length;c++)r[c]=Math.max(l(c).T,(r[c-1]??0)+l(c-1).height+n);for(let c=s-1;c>=0;c--)r[c]=Math.min(l(c).T,(r[c+1]??0)-l(c).height-n)}return new Map(o.map((c,m)=>[c.id,r[m]??0]))}var kt=320,ei=300,Ce=()=>window.innerWidth>=900?400:ei,ti=480,Qe=()=>window.innerWidth<=ti;function Xt(e){let t=window.innerWidth;return{width:e&&!Qe()?t-kt:t,height:window.innerHeight}}function Jt(e,t,n,o=12){let r,s;return e.below?(r=Math.min(e.x,n.width-t.width-o),s=e.y+8,s+t.height>n.height-o&&(s=e.y-t.height-40)):(r=e.x+14,r+t.width>n.width-o&&(r=e.x-t.width-28),s=Math.min(e.y-12,n.height-t.height-o)),{left:Math.max(o,r),top:Math.max(o,s)}}function Ho(e,t,n,o=12,r=44){let s=e.top-r>=8,l=e.top+e.height+8+(s?0:r),c=e.top-8-(s?r:0)-t.height,m=l+t.height<=n.height-o||c<o,u=m?l:c;return{above:!m,left:Math.max(o,Math.min(e.left,n.width-t.width-o)),top:Math.max(o,u)}}function Qt(e,t,n){let o=e.top-t.height-10;return o<8&&(o=e.top+e.height+10),{left:Math.max(8,Math.min(e.left+e.width/2-t.width/2,n.width-t.width-8)),top:o}}function Zt(e,t){let n=e.resolved.get(t.id);return n?.range?.startContainer??n?.element??null}var _e=e=>(t,n)=>{let o=Zt(e,t),r=Zt(e,n),s=l=>l.anchor.point??{x:0,y:-1};return o!==r?!r||o&&o.compareDocumentPosition(r)&4?-1:1:s(t).y-s(n).y||s(t).x-s(n).x};var en=e=>`${e} ${e===1?"reply":"replies"}`;function ct(e,t,n){let o={...n},r=e.id,s=v("div",{class:"rbox always"},v("div",{},Kt({label:"Reply",kind:"reply",thread:()=>r,V:p=>t.reply(r,p),_:t.close}).element)),l=v("div",{}),c=v("span",{class:"note"},"This thread was resolved. Your words are kept until you send or clear them.");c.hidden=!0,s.prepend(c);let m=v("div",{}),u=null,g=v("div",{},m,v("div",{class:"more"},l)),E=new Map,T=new Map,L=new Map,d=p=>{let y=gt(p.author,p.name),P=E.get(p.id),O=P?.e;if((!O||P.key!==y)&&(O=qt(Me(p.author,p.name)),P)){let H=P.e;L.set(p.id,H),Ut(H,()=>L.get(p.id)===H&&L.delete(p.id))}O.title=fe(p),T.set(p.id,{key:y,e:O});let x=L.get(p.id);return x?[x,O]:[O]},S=(p,y,P)=>{let O=v("button",{class:"ib",type:"button","aria-label":y,title:y},Z(p));return O.addEventListener("click",x=>{x.stopPropagation(),P()}),O};function C(p,y={}){Object.assign(o,y),r=p.id;let P=(o.now??Date.now)(),O=p.root.replies.length,x=W=>v("span",{class:"who"},`${fe(W)} \xB7 ${at(W.at,P)}`),H=W=>v("div",{class:W.deleted?"tx del":"tx"},...W.deleted?["Deleted"]:[...Vt(W.text),W.edited?" (edited)":""]),q=p.resolved?"Resolved"+(O?` \xB7 ${en(O)}`:""):O?en(O):"",F=v("div",{class:o.Y==="column"&&q?"ft has-rest":"ft"},o.Y==="column"&&q?v("span",{class:"rest"},q):null,v("span",{class:"hover"},x(p.root),v("span",{class:"acts"},S("copy","Copy thread",()=>t.copy(p.id)),p.resolved?S("reopen","Reopen",()=>void t.reopen(p.id)):S("resolve","Resolve",()=>void t.resolve(p.id))))),z=o.lost?v("div",{class:"ctx"},`${o.place||"No longer on the page"} \u2014 it read \u201C${we(o.lost,120)}\u201D`):o.quote?v("div",{class:"ctx"},`\u201C${we(o.quote,80)}\u201D`):null;T=new Map;let J=v("div",{class:"root"},...d(p.root),z,H(p.root),F);m.replaceWith(J),m=J,u?.remove(),u=O?v("div",{class:"rps"},...p.root.replies.map(W=>v("div",{class:"it"},...d(W),H(W),v("div",{class:"rft"},x(W))))):null,u&&l.prepend(u),E=T;let D=s.querySelector("textarea").value.trim()!=="";c.hidden=!(p.resolved&&D),p.resolved&&!D?s.remove():s.parentNode!==l&&l.append(s),g.className=p.resolved?"thread resolved":"thread",g.setAttribute("data-thread",p.id)}return C(e),{element:g,update:C}}var ni="a,button,input,select,textarea,label,summary,[role=button],[contenteditable]",oi=400;function Nn(e,t){let n=new Map,o=v("div",{class:"tip",role:"tooltip"}),r=v("div",{class:"mark"}),s=v("div",{class:"pop",role:"dialog","aria-label":"Comment thread"});o.inert=s.inert=!0,e.t.append(r,o,s);let l=v("div",{class:"bub pin ghost","aria-hidden":"true"}),c=[],m=null,u=null,g=null,E=window.matchMedia?.("(prefers-reduced-motion: reduce)").matches===!0,T=0,L=null,d=null,S=null,C=0,p=M=>c.find($=>$.id===M)??null,y=()=>t.te||e.state.c,P=!1,O=M=>{let $=e.resolved.get(M.id);return $?Et(M.anchor,$):null};function x(M,$,R){let{left:B,top:Y}=Jt($,{width:M.offsetWidth||R,height:M.offsetHeight},Xt(e.state.c));M.style.left=`${B}px`,M.style.top=`${Y}px`}function H(M){let $=M&&y()&&e.state.i!==M?p(M):null,R=$?O($):null;if(!$||!R){S=null,o.classList.remove("show"),Q(o,!0);return}if(S!==$.id){let B=$.root.replies.length;o.replaceChildren(v("div",{class:"tx clamp"},...$.root.deleted?["Deleted"]:Vt($.root.text)),v("div",{class:"who"},`${fe($.root)}${B?` \xB7 ${B} ${B===1?"reply":"replies"}`:""}`)),S=$.id}x(o,R,260),o.classList.contains("show")||o.offsetWidth,o.classList.add("show"),o.inert=!1}function q(M){L=M,H(M),e.L(M)}function F(M){if(window.clearTimeout(C),M!==null){q(M);return}C=window.setTimeout(()=>q(null),y()?oi:0)}o.addEventListener("mouseenter",()=>window.clearTimeout(C)),o.addEventListener("mouseleave",()=>F(null)),o.addEventListener("click",M=>{M.stopPropagation();let $=S;$&&(window.clearTimeout(C),q(null),e.open($))});function z(M){let $=n.get(M.id);if($)return $;let R=v("button",{class:"bub",type:"button","data-thread":M.id});return R.addEventListener("mouseenter",()=>F(M.id)),R.addEventListener("mouseleave",()=>F(null)),R.addEventListener("click",B=>{B.stopPropagation(),H(null),e.open(M.id)}),e.t.insertBefore(R,r),n.set(M.id,R),R}let J=!1;function D(){let M=e.state.o,$=g&&M&&!M.anchor.quote&&!M.anchor.point?M.resolved.element:null;if($){let{left:B,top:Y,above:_}=Ho($.getBoundingClientRect(),{width:s.offsetWidth||Ce(),height:s.offsetHeight},{width:window.innerWidth,height:window.innerHeight}),K=g?.above!==null&&g?.above!==_;if(g&&(g.above=_),K&&oe())return;s.style.left=`${B}px`,s.style.top=`${Y}px`;return}let R=g&&M?Et(M.anchor,M.resolved):m?O(m):null;R&&x(s,R,Ce())}let W=M=>e.state.l&&!M.anchor.quote&&!M.anchor.point;function oe(M=()=>{}){return window.clearTimeout(T),E?(s.classList.remove("show"),T=window.setTimeout(()=>{M(),D(),s.classList.add("show")},220),!0):(M(),s.classList.add("glide"),T=window.setTimeout(()=>s.classList.remove("glide"),450),!1)}function ke(){if(!y())return null;let M=e.state.o;return M?M.anchor.quote||M.anchor.point||e.state.l?null:M.resolved.element:!m||m.anchor.quote||m.anchor.point?null:e.resolved.get(m.id)?.element??null}function se(M){c=M;let $=new Set;for(let _ of M){if(!e.B(_)||_.anchor.quote)continue;let K=e.resolved.get(_.id);if(!K||K.state==="orphaned")continue;$.add(_.id);let j=z(_);j.classList.toggle("done",_.resolved),j.classList.toggle("on",e.state.i===_.id),j.classList.toggle("pin",_.anchor.point!==void 0);let ee=`Comment on ${Be(K.element)}: ${we(_.root.text,60)}`;j.getAttribute("aria-label")!==ee&&j.setAttribute("aria-label",ee)}Ft(e.t,M.filter(_=>$.has(_.id)).sort(_e(e)).map(_=>n.get(_.id)),r);for(let[_,K]of n)$.has(_)||(K.classList.remove("in"),n.delete(_),window.setTimeout(()=>K.remove(),300));H(L),P!==e.state.c&&s.classList.contains("show")&&!E&&oe(),P=e.state.c;let R=t.te?e.state.o:null;if(R){let _=R.anchor.point??R.resolved.element;g?.of!==R?(window.clearTimeout(T),s.classList.remove("glide"),g={s:jt(e,R),of:R,at:_,above:null},g.s.ee(W(R)),s.replaceChildren(g.s.element),s.inert=!1,g.s.focus(),m=null,u=null,D(),s.classList.add("show")):g&&(g.at!==_&&(g.at=_,g.above=null,oe(()=>g?.s.ye(R.label))),g.s.ee(W(R)));let K=!e.p.u(R.anchor.view);K!==J&&(J=K,s.classList.toggle("show",!K),s.inert=K,K||D());return}g&&(window.clearTimeout(T),s.classList.remove("glide"),g=null,J=!1,e.D(null));let B=y()&&e.state.i?p(e.state.i):null;if(!B||!e.B(B)){m=null,u=null,s.classList.remove("show"),Q(s,!0);return}let Y=B.anchor.quote?.exact??null;!m||!u||m.id!==B.id?(u=ct(B,e.j,{Y:"popover",quote:Y}),s.replaceChildren(u.element),m=B,D(),s.classList.add("show"),s.inert=!1):m!==B&&(u.update(B,{quote:Y}),m=B)}function le(){for(let[B,Y]of n){let _=p(B),K=e.resolved.get(B),j=_&&K?Gt(_.anchor,K):null;if(!j||j.y<-40||j.y>window.innerHeight+40){Y.style.visibility="hidden";continue}Y.style.visibility="",Y.style.left=`${j.x}px`,Y.style.top=`${j.y}px`,Y.classList.contains("in")||(Y.offsetWidth,Y.classList.add("in"))}let M=e.state.o,$=M?.anchor.point&&e.p.u(M.anchor.view)?Gt(M.anchor,M.resolved):null;$?(l.style.left=`${$.x}px`,l.style.top=`${$.y}px`,l.classList.contains("in")||(e.t.insertBefore(l,r),l.offsetWidth,l.classList.add("in"))):l.classList.contains("in")&&(l.classList.remove("in"),window.setTimeout(()=>l.classList.contains("in")||l.remove(),300)),s.classList.contains("show")&&D();let R=ke();r.classList.toggle("show",R!==null),R&&Fe(r,R.getBoundingClientRect(),4)}let ce=M=>{if(e.m(M)){let R=M.composedPath()[0];d!==null&&!(R instanceof Element&&R.closest(".tip,.bub"))&&F(null),d=null;return}let $=e.ne(M.clientX,M.clientY)?.id??null;$!==d&&(d=$,F($))},Se=M=>{if(e.m(M))return;let $=window.getSelection();if($&&!$.isCollapsed||(e.state.l?M.altKey:M.target instanceof Element&&M.target.closest(ni)))return;let R=e.ne(M.clientX,M.clientY);R&&(e.we(M),H(null),e.open(R.id))};return window.addEventListener("pointermove",ce,{capture:!0,passive:!0}),window.addEventListener("click",Se,!0),{f:se,S:le,destroy(){window.clearTimeout(C),window.clearTimeout(T),window.removeEventListener("pointermove",ce,!0),window.removeEventListener("click",Se,!0),e.D(null);for(let M of n.values())M.remove();l.remove(),o.remove(),r.remove(),s.remove()}}}var ri={display:"block",position:"static",clips:!1,off:!1},ii=48,si="button link img figure region list listitem tab tabpanel article navigation complementary banner contentinfo form search group dialog menu menuitem checkbox switch radio slider textbox combobox option row cell heading table".split(" ").map(e=>`[role=${e}]`),ai=["button,a,input,select,textarea,label,summary,details,img,svg,canvas,video,picture,figure,figcaption,table,th,td","li,ul,ol,dl,dt,dd,p,h1,h2,h3,h4,h5,h6,blockquote,pre","section,article,aside,nav,header,footer,main,form,fieldset",...si].join(","),$n="a,button,label,summary,[role=button],[role=link],[role=tab],[role=option],[role=menuitem]",li=`${$n},input,select,textarea,img,svg,canvas,video,picture,[role=img]`,Do=24,ci=.6,tn=2,Rn=(e,t)=>Math.abs(e.left-t.left)<=tn&&Math.abs(e.top-t.top)<=tn&&Math.abs(e.width-t.width)<=tn&&Math.abs(e.height-t.height)<=tn;function Bo(e,t){let n=t.s(e);if(n.width<2||n.height<2)return!1;if(e.hasAttribute("data-pipeup-id"))return!0;let o=t.oe();return n.width*n.height<=ci*o.width*o.height&&(e.matches(ai)||t.Ve(e)||e.childElementCount>1&&!e.parentElement?.closest($n)&&t._e(e))}function St(e,t,n){if(e===t||!t.contains(e)||e.closest("[data-pipeup-ignore]"))return null;let o=null;for(let s=e;s&&s!==t&&!o;s=s.parentElement)Bo(s,n)&&(o=s);if(!o||o.hasAttribute("data-pipeup-id"))return o;let r=n.s(o);for(let s=o.parentElement;s&&s!==t&&Rn(n.s(s),r);s=s.parentElement)if(s.hasAttribute("data-pipeup-id"))return s;return o}function Hn(e,t,n){let o=n.s(e);for(let r=e.parentElement;r&&r!==t;){let s=St(r,t,n);if(!s)return null;if(!Rn(n.s(s),o))return s;r=s.parentElement}return null}function Fo(){return{s:e=>e.getBoundingClientRect(),Ve:e=>{let t=getComputedStyle(e),n=t.backgroundColor!=="transparent"&&!/,\s*0\)$/.test(t.backgroundColor),o=["top","right","bottom","left"].some(r=>parseFloat(t.getPropertyValue(`border-${r}-width`))>0);return n||o||t.backgroundImage!=="none"||t.boxShadow!=="none"},_e:e=>/^(inline-)?(flex|grid)$/.test(getComputedStyle(e).display),flow:e=>{let t=getComputedStyle(e),n=[t.overflowX,t.overflowY];return{display:t.display,position:t.position,clips:n.some(o=>o==="hidden"||o==="clip")&&!n.some(o=>o==="auto"||o==="scroll")&&e!==document.documentElement&&e!==document.body,off:t.pointerEvents==="none"}},oe:()=>({width:innerWidth,height:innerHeight})}}var di=(e,t)=>e.left<t.left+t.width&&t.left<e.left+e.width&&e.top<t.top+t.height&&t.top<e.top+e.height,pi=(e,t)=>{let n=Math.max(e.left,t.left),o=Math.max(e.top,t.top);return{left:n,top:o,width:Math.max(0,Math.min(e.left+e.width,t.left+t.width)-n),height:Math.max(0,Math.min(e.top+e.height,t.top+t.height)-o)}};function Dn(e,t,n=()=>!0){let o=[],r=(s,l,c,m,u,g)=>{for(let E of s.children){if(E.hasAttribute("data-pipeup-ignore")||E.getAttribute("aria-hidden")==="true"||!n(E))continue;let T=t.flow?.(E)??ri,L=E.offsetParent,d=T.position==="fixed"||T.position==="absolute"&&!!m&&!(L&&m.contains(L)),S=d?null:c,C=t.s(E),p=C.width>0&&C.height>0;if(S&&p&&!di(C,S))continue;let y=E.matches($n),O=(T.display.startsWith("inline")||g)&&!E.matches(li)&&(T.display==="inline"||C.height<=ii),x=C.width<=Do&&C.height<=Do,H=E.hasAttribute("data-pipeup-id")||!u&&!T.off&&!O&&!(x&&!y),q=l;H&&Bo(E,t)&&(l&&Rn(t.s(l.e),C)?(E.hasAttribute("data-pipeup-id")||!l.e.hasAttribute("data-pipeup-id"))&&(l.e=E):o.push(q={e:E,I:l,E:0}));let F=T.clips&&p;r(E,q,F?S?pi(S,C):C:S,F?E:d?null:m,u||y,/^inline-(flex|grid)$/.test(T.display)||g&&/(flex|grid)$/.test(T.display))}};r(e,null,null,null,!1,!1);for(let s=o.length-1;s>=0;s--){let l=o[s];l.I&&(l.I.E=Math.max(l.I.E,l.E+1))}return o}var Ze=(e,t)=>e.filter(n=>n.E<=t&&(!n.I||n.I.E>t)),Vo=(e,t)=>e.filter(n=>n.I===t);var nn="a,button,summary,[role=button],[role=link],[role=switch],[role=tab],[role=checkbox],input[type=checkbox],input[type=radio],input[type=submit],input[type=button],input[type=reset]",ui=`${nn},input,select,textarea,[contenteditable]:not([contenteditable=false]),[tabindex]:not([tabindex="-1"])`,_o=["click","dblclick","auxclick","submit","contextmenu","dragstart"],Uo=[...["over","out","enter","leave","down","up"].flatMap(e=>[`pointer${e}`,`mouse${e}`]),"mousemove","touchstart","touchmove","touchend","touchcancel"],fi=400,Bn="Tab moves between blocks \xB7 \u2191 \u2193 change level \xB7 Enter comments \xB7 Esc to finish \xB7 F7 selects text",mi=4,hi=150;function qo(e){let t=Fo(),n=v("span",{hidden:!0},Bn),o=v("div",{class:"pick"},n),r=[0,1].map(()=>{let i=v("div",{class:"km",tabindex:"-1",role:"button"},v("span",{hidden:!0}),v("span",{hidden:!0}));return i.inert=!0,i.addEventListener("keydown",rt),i.addEventListener("click",f=>{f.stopPropagation(),Ge()}),i.addEventListener("focus",()=>o.classList.add("kf")),i.addEventListener("blur",()=>o.classList.remove("kf")),i}),s=v("span",{class:"lbl"}),l=(i,f,b,a)=>{let w=v("button",{class:"nb",type:"button","aria-label":i,title:f},Z(b,16));return w.addEventListener("click",A=>{A.stopPropagation(),a()}),w},c=l("Around it","Select the block around it","expand",xe),m=l("Inside it","Select a block inside it","shrink",Ne),u=l("Pin","Pin its centre","pin",()=>e.be(()=>j(d??x,{x:.5,y:.5}))),g=v("div",{class:"namebar",role:"group","aria-label":"Chosen block"},s,c,m,u);g.inert=!0;let E=e.t.querySelector(".launch");for(let i of[o,...r,g])e.t.insertBefore(i,E);g.addEventListener("mousedown",i=>i.preventDefault());let T=window.matchMedia?.("(prefers-reduced-motion: reduce)").matches===!0,L=null,d=null,S=null,C=null,p=0,y=()=>{},P=null,O=()=>{},x=null,H=0,q=0,F=!1,z=null,J=null,D=null,W=0,oe=-1,ke=!0,se=null,le=null,ce=i=>!e.m(i)&&!(i.target instanceof Element&&i.target.closest("[data-pipeup-ignore]"));function Se(){C&&(o.classList.toggle("glide",performance.now()<p),Fe(o,C.getBoundingClientRect(),4))}function M(){if(!P)return;g.classList.toggle("glide",performance.now()<p&&g.classList.contains("show"));let{left:i,top:f}=Qt(P.getBoundingClientRect(),{width:g.offsetWidth||200,height:g.offsetHeight||34},{width:window.innerWidth,height:window.innerHeight});g.style.left=`${i}px`,g.style.top=`${f}px`}function $(i,f){C=i,p=f?performance.now()+fi:0,Se(),o.classList.add("show")}function R(i,f){let b=getComputedStyle(i);if(b.opacity==="0")return f(),()=>{};let a=0,w=()=>{window.clearTimeout(a),i.removeEventListener("transitionend",N)},A=()=>{w(),f()},N=U=>{U.target===i&&U.propertyName==="opacity"&&A()},V=Math.max(...b.transitionDuration.split(",").map(U=>parseFloat(U)*1e3||0));return a=window.setTimeout(A,V+100),i.addEventListener("transitionend",N),w}function B(i){if(i!==L){if(L=i,y(),!i){o.classList.remove("show");return}getComputedStyle(o).opacity==="0"?$(i,!1):T?(o.classList.remove("show"),y=R(o,()=>$(i,!1))):$(i,!0)}}function Y(i){d=i,o.classList.toggle("on",i!==null),B(i),_(i)}function _(i){O(),g.inert=!i,i?T?(g.classList.remove("show"),O=R(g,()=>K(i))):K(i):(g.classList.remove("show"),P=null)}function K(i){s.textContent=s.title=Be(i),c.hidden=Hn(i,e.root,t)===null,m.hidden=(x?Ye(i).length:Dn(i,t,me).length)===0;let f=g.classList.contains("show");P=i,M(),f||(g.offsetWidth,g.classList.add("show"))}function j(i,f){let b;try{b=bn(i,e.root,f,e.p.view(i))}catch(A){e.re(A);return}let a={anchor:b,label:f?`Pin on ${Be(i).replace(/^[A-Z](?=[a-z])/,A=>A.toLowerCase())}`:Be(i),ranges:[],resolved:{state:"attached",element:i,range:null}},w=e.state.o;x&&(x=i,oe=-1),Y(f?null:i),S=w??a,e.Ue(a),e.w(f?a.label:`Commenting on ${a.label}`)}function ee(i){e.be(()=>j(i))}function Ue(i){let f=(i.target instanceof Element?St(i.target,e.root,t):null)??e.root;f!==e.root&&(z=f);let b=f.getBoundingClientRect();b.width&&b.height&&j(f,{x:(i.clientX-b.left)/b.width,y:(i.clientY-b.top)/b.height})}function be(i){let f=window.getSelection();if(f&&!f.isCollapsed)return;if(e.state.o&&(i.altKey||!e.C())){e.N();return}if(!i.altKey&&e.ne(i.clientX,i.clientY))return;if(e.state.i&&e.open(null),x&&i.detail&&he(),i.altKey){Ue(i);return}let b=i.target instanceof Element?St(i.target,e.root,t):null;b&&(z=b),b?j(b):(e.N(),Y(null))}let qe=i=>{if(e.m(i))return;if(!ce(i)){d||B(null);return}if(i.stopPropagation(),d||e.state.o)return;let f=!lt()&&i.target instanceof Element?St(i.target,e.root,t):null;if(x){if(!f||f===x||(W+=Math.abs(i.movementX)+Math.abs(i.movementY),W<=mi))return;he()}f&&(z=f),B(f)},Pe=()=>{lt()&&(x&&he(),d||B(null))},te=i=>{ce(i)&&(i.stopPropagation(),(i.type==="pointerdown"||i.type==="mousedown")&&i.target instanceof Element&&i.target.closest(ui)&&i.preventDefault())},Ke=i=>{if(!ce(i))return;let f=i.target;if((f===le||f.form&&f.form===le?.form)&&(i.type==="submit"||i.type==="click"&&!i.detail)){le=i.type==="click"&&f.type==="submit"?f.form:null;return}i.preventDefault(),i.stopPropagation(),i.type==="click"&&!e.state.d&&!e.qe(i)&&be(i)},X=i=>{if(le=null,h="",i.key==="Tab"&&Te(i))return i.preventDefault(),i.stopPropagation(),h=i.key,e.N(),e.state.i&&e.open(null),e.state.d&&(e.state.d=!1,e.f()),Ie(i.shiftKey?-1:1);if(!(!ce(i)||!(i.target instanceof Element)))if((i.key==="Enter"||i.key===" ")&&i.target.closest(nn)){if(!x){le=i.target;return}i.preventDefault(),i.stopPropagation()}else i.key==="Enter"&&!x&&i.target.form&&(le=i.target)},Te=i=>{if(i.ctrlKey||i.metaKey||i.altKey||i.isComposing)return!1;let f=i.composedPath()[0];return!(f instanceof Element)||r.some(b=>b===f)?!1:e.m(i)?!!f.closest(".launch,.menu")&&!f.closest("input,textarea,select,[contenteditable]"):!i.composedPath().some(b=>b instanceof Element&&b.hasAttribute("data-pipeup-ignore"))},de=()=>e.t.getRootNode().activeElement,pe=()=>r.some(i=>i===de()),me=i=>(i.checkVisibility?.({opacityProperty:!0,visibilityProperty:!0})!==!1||getComputedStyle(i).display==="contents")&&e.p.u(e.p.view(i)),re=()=>(se?.some(i=>!i.e.isConnected)&&(se=null),se??=Dn(e.root,t,me)),Oe=i=>re().find(f=>f.e===i),ae=(i,f=!1)=>{let b=i.getBoundingClientRect();return b.bottom>0&&b.top<window.innerHeight&&(!f||b.top>=0)},ze=()=>{let i=Ze(re(),0);return i.find(f=>ae(f.e,!0))??i.find(f=>ae(f.e))??i[0]},We=i=>e.doc.threads().filter(f=>e.B(f)&&i.contains(Zt(e,f))).sort(_e(e));function nt(i,f){let[b,a]=i.children,w=Ze(re(),H),A=We(f).length;b.textContent=`${Ht(f)}, ${w.findIndex(U=>U.e===f)+1} of ${w.length}${A?`, has ${A} comment${A===1?"":"s"}`:""}`;let N=(f.innerText??f.textContent??"").length<=hi;a.textContent=En(f);let V=ke?[n]:[];ke=!1,i.ariaLabelledByElements!==void 0?(i.ariaLabelledByElements=N?[b,f]:[b,a],i.ariaDescribedByElements=N?V:[...V,f]):i.setAttribute("aria-label",`${b.textContent}, ${a.textContent}`)}function ne(i,f=!0){W=0;let b=re(),a=b.find(A=>A.e===i);if(a&&!Ze(b,H).includes(a)&&(H=a.E),i!==x&&(oe=-1),i!==d&&(d=null),x=i,B(i),_(i),i.scrollIntoView({block:"nearest",inline:"nearest",behavior:T?"auto":"smooth"}),!f)return;e.Ke();let w=r[q^=1];nt(w,i),Fe(w,i.getBoundingClientRect(),4),w.inert=!1,w.focus({preventScroll:!0}),r[q^1].inert=!0}function ue(){se=null;let i=document.activeElement;J=de()??i;let f=Oe(z),b=f??(i&&i!==document.body&&e.root.contains(i)&&!i.closest("[data-pipeup-ignore]")?re().filter(a=>a.e.contains(i)).pop():void 0)??ze();return b?(f||(H=b.E),F=!0,ne(b.e),!0):!1}function he(){let i=pe();z=x,x=null,B(null),_(null);for(let f of r)Q(f,!0);return i}function ot(){let i=J;i&&i!==document.body&&i.isConnected&&i.focus?.({preventScroll:!0}),(!i||i===document.body||!i.matches?.(":focus"))&&e.t.querySelector(".launch .mode")?.focus({preventScroll:!0})}function Ye(i){let f=Oe(i);return f?Vo(re(),f):[]}function je(i){let f=Ze(re(),H),b=f.findIndex(w=>w.e===x),a=f[b<0?i>0?0:f.length-1:(b+i+f.length)%f.length];a&&ne(a.e)}function Ie(i){if(x)return je(i);se=null;let f=document.activeElement;J=de()??f;let b=z?.isConnected?z:null,a=b&&Oe(b),w;if(a){H=a.E;let A=Ze(re(),H),N=A.indexOf(a);w=A[(N+i+A.length)%A.length]}else if(b){H=0;let A=Ze(re(),0),N=U=>(b.compareDocumentPosition(U.e)&Node.DOCUMENT_POSITION_FOLLOWING)!==0,V=U=>U.e.contains(b);i>0?w=A.find(U=>N(U)&&!V(U))??A[0]:w=A.filter(U=>!N(U)&&!V(U)).pop()??A[A.length-1]}else w=ze(),w&&(H=w.E);if(!w)return e.w("Nothing here to comment on");F=!0,ne(w.e)}function xe(){let i=d??x,f=i&&Hn(i,e.root,t);if(!f)return e.w("Nothing around it");if((!D||!i.contains(D))&&(D=i),d)return ee(f);ne(f)}function Ne(){let i=d??x,f=i?Ye(i):[],b=f.find(a=>D&&a.e.contains(D))??f.find(a=>ae(a.e))??f[0];if(!b)return e.w("Nothing inside it");d?ee(b.e):ne(b.e)}function Ge(i=!1){if(!x)return;if(e.state.o&&!e.C())return e.ze();if(!i)return j(x);let f=We(x);if(!f.length)return e.w("No comments on this block");oe=(oe+1)%f.length,e.open(f[oe].id),f.length>1&&e.w(`Comment ${oe+1} of ${f.length} on this block`)}function rt(i){if(["Tab","ArrowUp","ArrowDown","Enter"," ","Escape"].includes(i.key)&&!(i.key.startsWith("Arrow")&&(i.metaKey||i.ctrlKey||i.altKey))){if(i.preventDefault(),i.stopPropagation(),h=i.key,i.key==="Escape")return void e.ie();if(i.key==="Enter"||i.key===" ")return Ge(i.shiftKey&&i.key==="Enter");i.key==="Tab"&&e.N(),e.state.i&&e.open(null),i.key==="Tab"?je(i.shiftKey?-1:1):i.key==="ArrowUp"?xe():Ne()}}let $e=()=>{let i=de();return i?!!i.closest("[inert]"):!document.activeElement||document.activeElement===document.body},h="",k=!1,I=i=>{k&&window.removeEventListener("keyup",I,!0),i.key===h&&(h="",i.preventDefault(),i.stopPropagation())};window.addEventListener("keyup",I,!0),window.addEventListener("pointermove",qe,!0),document.addEventListener("selectionchange",Pe);for(let i of Uo)window.addEventListener(i,te,!0);for(let i of _o)window.addEventListener(i,Ke,!0);return window.addEventListener("keydown",X,!0),{ie(){return d?(Y(null),!0):!1},se:()=>x!==null,We:()=>F&&!x,xe:ue,ae(){x&&!pe()&&ne(x)},f(){if(se=null,x&&!(x.isConnected&&me(x))){let b=ze();b?ne(b.e,pe()||$e()):he()}let i=e.t.querySelector(".launch");if(i&&g.nextElementSibling!==i&&!pe()&&!g.contains(de()))for(let b of[o,...r,g])e.t.insertBefore(b,i);let f=e.state.o;S&&f!==S?(S=null,Y(null),x&&ne(x,$e())):f&&!S&&(L||d)&&Y(null)},S(){Se(),M(),x&&Fe(r[q],x.getBoundingClientRect(),4)},destroy(){he()&&ot();for(let i of r)i.remove();y(),O(),k=!0,h||window.removeEventListener("keyup",I,!0),window.removeEventListener("pointermove",qe,!0),document.removeEventListener("selectionchange",Pe);for(let i of Uo)window.removeEventListener(i,te,!0);for(let i of _o)window.removeEventListener(i,Ke,!0);window.removeEventListener("keydown",X,!0),o.classList.remove("show"),g.classList.remove("show"),Q(g,!0),R(o,()=>o.remove()),R(g,()=>g.remove())}}}var gi=300,vi=32,yi=220,Tt=320,wi=24,Ko=24;function Fn(e,t=!1){let n=e.ownerDocument.documentElement,o=n.getAttribute("data-pipeup-layout");if(o==="bubbles"||e.querySelector("[data-pipeup-slide]"))return null;let r=e.querySelector("article, main, [role=main]")??(o==="column"?e:null);if(!r)return null;if(n.hasAttribute("data-pipeup-reserve")){let c=n.clientWidth,u=getComputedStyle(r).maxWidth,g;return u.endsWith("px")?g=parseFloat(u):u.endsWith("%")?g=parseFloat(u)/100*c:g=r.getBoundingClientRect().width,o!=="column"&&c<g+Tt-(t?wi:0)?null:{x:c-Tt+Ko,width:Tt-2*Ko}}let s=r.getBoundingClientRect().right;if(window.innerWidth-s<gi&&o!=="column")return null;let l=s+vi;return{x:l,width:Math.max(220,Math.min(300,window.innerWidth-l-16))}}function Vn(e,t){let n=e.resolved.get(t.id);return!n||n.state==="orphaned"&&!e.k.has(t.id)}function zo(e){let t=v("div",{class:"col"});e.t.append(t);let n=new Map,o=null,r=new ResizeObserver(()=>c()),s=d=>Vn(e,d);function l(d){let S=e.resolved.get(d.id),C=S?In(d.anchor,S):null;return C===null?Number.POSITIVE_INFINITY:C+window.scrollY-4}function c(){let d=[],S=[];for(let[O,x]of n){let H=l(x.thread);if(Number.isFinite(H))x.placed=H;else if(e.k.has(O)){if(x.placed===null){x.e.classList.add("wait");continue}H=x.placed}Number.isFinite(H)?d.push({id:O,T:H,height:x.e.offsetHeight}):S.push({id:O,height:x.e.offsetHeight})}let C=e.state.o,p=C?In(C.anchor,C.resolved):null;o&&p!==null&&d.push({id:"draft",T:p+window.scrollY-4,height:o.e.offsetHeight});let y=Ro(d,o?"draft":e.state.i),P=Math.max(0,...d.map(O=>(y.get(O.id)??0)+O.height))+24;for(let O of S)y.set(O.id,P),P+=O.height+10;for(let[O,x]of n){if(x.e.classList.contains("wait")){if(!y.has(O))continue;x.e.style.transition="none",x.e.style.transform=`translateY(${Math.round(y.get(O))}px)`,x.e.offsetWidth,x.e.style.transition="",x.e.classList.remove("wait");continue}x.e.style.transform=`translateY(${Math.round(y.get(O)??0)}px)`}o&&(o.e.style.transform=`translateY(${Math.round(y.get("draft")??0)}px)`)}function m(d,S){d.thread=S,d.lost=s(S),d.view.update(S,{lost:d.lost?S.anchor.snapshot:null})}function u(d){let S=s(d),C=ct(d,e.j,{Y:"column",lost:S?d.anchor.snapshot:null}),p=v("div",{class:"th","data-thread":d.id},v("button",{class:"opn sr",type:"button","data-thread":d.id}),C.element);return p.style.transition="none",p.addEventListener("mouseenter",()=>e.L(d.id)),p.addEventListener("mouseleave",()=>e.L(null)),p.addEventListener("click",()=>e.open(d.id)),t.append(p),r.observe(p),{e:p,thread:d,lost:S,placed:null,view:C}}function g(d){r.unobserve(d),d.classList.add("out"),window.setTimeout(()=>d.remove(),yi)}function E(){let d=e.state.o;if(o&&o.of!==d&&(g(o.e),o=null,d||e.D(null)),!d)return;let S=!o;if(o)o.s.ye(d.label);else{let C=jt(e,d),p=v("div",{class:"th on"},C.element);p.style.transition="none",t.append(p),r.observe(p),o={e:p,s:C,of:d}}o.s.ee(e.state.l&&!d.anchor.quote&&!d.anchor.point),S&&o.s.focus()}function T(d){Q(t,e.state.c);let S=new Set,C=[],p=e.state.i!==null||e.state.o!==null;for(let y of d){if(!e.B(y))continue;S.add(y.id);let P=n.get(y.id);P?(P.thread!==y||P.lost!==s(y))&&m(P,y):(P=u(y),n.set(y.id,P),C.push(P.e));let O=P.e,x=e.state.i===y.id;O.classList.toggle("on",x);let H=O.firstElementChild,q=y.root.replies.length;H.setAttribute("aria-label",`Open thread: ${we(y.root.text,60)}, ${en(q)}`),H.setAttribute("aria-expanded",String(x)),Q(H,x);let F=O.querySelector(".more");F&&Q(F,!x),O.classList.toggle("dim",p&&!x),O.classList.toggle("hot",e.state.L===y.id&&!x),O.classList.toggle("resolved",y.resolved),O.classList.toggle("lost",P.lost)}for(let[y,P]of n)S.has(y)||(n.delete(y),g(P.e));E(),Ft(t,d.filter(y=>S.has(y.id)).sort(_e(e)).map(y=>n.get(y.id).e),o?.e??null)&&t.offsetWidth,c(),o&&C.push(o.e);for(let y of C)y.offsetWidth,y.style.transition=""}function L(){let d=Fn(e.root,!0);d&&(t.style.width=`${d.width}px`,t.style.transform=`translate(${d.x}px, ${-window.scrollY}px)`)}return{f:T,S:L,destroy(){r.disconnect(),e.D(null),t.remove()}}}var Wo="[data-pipeup-ignore],input,textarea,select,[contenteditable]:not([contenteditable=false])";function Yo(e){let t=v("button",{type:"button","aria-label":"Comment",title:"Comment"},Z("comment",17)),n=v("div",{class:"selbar"},t);n.inert=!0,e.t.append(n);let o=null,r=0,s=!1,l=L=>{let d=L&&(L.nodeType===Node.ELEMENT_NODE?L:L.parentElement);return!!d&&e.root.contains(d)&&!d.closest(Wo)};function c(){if(!o)return;let{left:L,top:d}=Qt(o.getBoundingClientRect(),{width:n.offsetWidth||36,height:n.offsetHeight||34},{width:window.innerWidth,height:window.innerHeight});n.style.left=`${L}px`,n.style.top=`${d}px`}function m(){o=null,n.inert=!0,n.classList.remove("show")}function u(L=!1){let d=lt();if(!e.state.l||!d||!l(d.anchorNode)||!l(d.focusNode)){m();return}!o&&!L&&e.w("Enter comments on the selected words"),o=d.getRangeAt(0).cloneRange(),c(),n.inert=!1,n.classList.add("show")}t.addEventListener("mousedown",L=>L.preventDefault()),t.addEventListener("click",L=>{if(L.stopPropagation(),e.state.o&&!e.C())return e.N();let d=o;if(!d)return;let S;try{S=wn(d,e.root,e.p.view(d.commonAncestorContainer))}catch(p){e.re(p),m();return}let C=we(d.toString().replace(/\s+/g," ").trim(),60);window.getSelection()?.removeAllRanges(),m(),e.Ye({anchor:S,label:`\u201C${C}\u201D`,ranges:[d],resolved:{state:"attached",element:null,range:d}})});let g=()=>{window.clearTimeout(r),r=window.setTimeout(()=>s||u(),250),o&&(lt()||m())};document.addEventListener("selectionchange",g);let E=L=>{L.type!=="keyup"&&(s=L.type==="mousedown"),!(s||e.m(L))&&window.setTimeout(()=>u(L.type==="mouseup"),0)};window.addEventListener("mousedown",E,!0),window.addEventListener("mouseup",E,!0),window.addEventListener("keyup",E,!0);let T=L=>{L.key!=="Enter"||!o||e.m(L)||L.target instanceof Element&&L.target.closest(`${Wo},${nn}`)||(L.preventDefault(),L.stopPropagation(),t.click())};return window.addEventListener("keydown",T,!0),{f(){!e.state.l&&o&&m()},S(){o&&c()},destroy(){window.removeEventListener("mousedown",E,!0),window.removeEventListener("mouseup",E,!0),window.removeEventListener("keyup",E,!0),window.removeEventListener("keydown",T,!0),window.clearTimeout(r),document.removeEventListener("selectionchange",g),n.remove()}}}async function _n(e,t){try{await navigator.clipboard.writeText(e);return}catch{}let n=document.createElement("textarea");n.value=e,n.setAttribute("readonly",""),n.style.cssText="position:fixed;opacity:0;pointer-events:none",t.append(n),n.select();let o=document.execCommand("copy");if(n.remove(),!o)throw new Error("pipeup: your browser blocked copying")}var bi=3e3,jo="Hidden on the page";function Go(e){let t=[v("span",{class:"n"}),v("span",{class:"n"})],n=Z("comment",20,1.4);n.lastElementChild.setAttribute("stroke-width","1.6");let o=v("button",{class:"mode",type:"button","aria-label":"Comment","aria-keyshortcuts":On,"aria-haspopup":"menu","aria-expanded":"false"},v("span",{class:"plus"},n),v("span",{class:"cnt"},Z("bubble",34,1.4),...t),v("span",{class:"dot"})),r=document.createTextNode("Comment"),s=v("span",{class:"ttip","aria-hidden":"true"},r,v("small",{},bt)),l=v("div",{class:"launch"},o,s),c=v("div",{class:"menu",role:"menu","aria-label":"Comments"}),m=v("div",{class:"list",role:"menu","aria-label":"All comments"}),u=v("span",{class:"pn"}),g=v("button",{class:"ib",type:"button","aria-label":"Close"},Z("close")),E=v("button",{class:"hs",type:"button",role:"switch","aria-checked":"false"},"Show resolved",v("span",{class:"sw","aria-hidden":"true"}));E.addEventListener("click",h=>{h.stopPropagation(),e.d.je()});let T=v("div",{class:"all",role:"dialog","aria-label":"All comments"},v("div",{class:"hd"},v("span",{},"All comments"),u,E,g),m),L=v("div",{class:"pop side",role:"dialog","aria-label":"Comment thread"});c.inert=T.inert=L.inert=!0,e.t.append(c,l,T);let d=!1,S=null,C=0,p=[],y=0,P=null,O=window.matchMedia?.("(prefers-reduced-motion: reduce)").matches===!0,x=h=>{d=e.state.d=h,h&&e.addons.flush(),window.clearTimeout(C),C=0,h||S?.(!0),c.classList.toggle("show",h),Q(c,!h),o.setAttribute("aria-expanded",String(h))},H=(h,k=!1)=>{e.state.c!==h&&(e.state.c=h,e.f(),h?(q(m)[0]??g).focus({preventScroll:!0}):k&&o.focus({preventScroll:!0}))},q=(h=c)=>[...h.querySelectorAll(".mi")],F=()=>c.getRootNode().activeElement,z=()=>{x(!1),o.focus({preventScroll:!0})},J=h=>{let k=q(h.currentTarget);if(k.length===0)return;let I=F(),i=k.indexOf(I),f=b=>{h.preventDefault(),k[(b+k.length)%k.length]?.focus({preventScroll:!0})};h.key==="ArrowDown"?f(i+1):h.key==="ArrowUp"?f(i<0?k.length-1:i-1):h.key==="Home"?f(0):h.key==="End"&&f(k.length-1)};c.addEventListener("keydown",J),m.addEventListener("keydown",J),g.addEventListener("click",h=>{h.stopPropagation(),H(!1,!0)});let D=h=>Vn(e,h),W=h=>p.filter(k=>!k.resolved&&(h===void 0||e.F(k)===h)).length,oe=()=>W(!1),ke=()=>W(!0),se=()=>W(),le=h=>{let k=h.anchor.view?.slide,I=e.p.u(h.anchor.view)?"":Dt(h.anchor.view);return k&&e.p.slide()!==null?`On slide ${k}`:I?`In ${I}`:jo},ce=(h,k,I="")=>v("div",{role:"group","aria-label":I?`${h} \xB7 ${I}`:h},v("div",{class:"sec","aria-hidden":"true"},h,I&&v("b",{},I)),...k);function Se(h,k){let I=e.p.slide(),i=new Map;for(let f of h){let b=f.thread,a=I!==null?b.anchor.view?.slide??I:e.F(b)?e.p.u(b.anchor.view)?"":Dt(b.anchor.view):null;i.set(a,[...i.get(a)??[],f])}if(I===null){let f=i.get(null)??[];return i.delete(null),[...f.map(k),...[...i].map(([b,a])=>ce(b||jo,a.map(k)))]}return[...i].sort(([f],[b])=>Number(f)-Number(b)||0).map(([f,b])=>ce(`Slide ${f} \xB7 ${b.filter(a=>!a.thread.resolved).length} open`,b.map(k),f===I?"This slide":""))}function M(){let h=F()?.dataset.thread,k=e.d.all().filter(b=>!b.thread.resolved||e.state.M),I=b=>{let a=b.thread,w=Me(a.root.author,a.root.name);w.classList.add("in");let A=v("button",{class:a.resolved?"mi done":"mi",type:"button",role:"menuitem","data-thread":a.id},w,v("span",{},v("span",{class:"clamp"},a.root.deleted?"Deleted":a.root.text),v("small",{},D(a)?`\u201C${we(a.anchor.snapshot,80)}\u201D`:b.location.where)));return A.addEventListener("click",N=>{N.stopPropagation(),$(a.id,A.getBoundingClientRect().top)}),A},i=k.filter(b=>D(b.thread));u.textContent=String(se()),E.setAttribute("aria-checked",String(e.state.M)),m.replaceChildren(k.length?"":v("div",{class:"sec",role:"presentation"},"No open comments"),...Se(k.filter(b=>!D(b.thread)),I),i.length?ce("No longer on the page",i.map(I)):"");let f=q(m);h&&f.find(b=>b.dataset.thread===h)?.focus({preventScroll:!0})}function $(h,k){Qe()&&(e.state.O=!0,H(!1)),B(h,k)}let R="";function B(h,k){let I=p.find(i=>i.id===h);if(I){if(R=h,!e.F(I))return Y(I,k);if(e.state.o&&!e.C())return e.N();e.p.W(I.anchor.view??{}).then(()=>{e.Ee();let i=p.find(f=>f.id===h);i&&R===h&&(e.state.c||e.state.O)&&Y(i,k)})}}function Y(h,k){let I=h.id,i=e.resolved.get(I),f=i&&!D(h)&&!e.F(h)?i.element??i.range?.startContainer.parentElement??null:null;if(f?.scrollIntoView({block:"center",inline:"nearest",behavior:O?"auto":"smooth"}),f&&i&&Et(h.anchor,i)&&f.checkVisibility?.({visibilityProperty:!0})!==!1){K(),e.open(I);return}e.open(null),Qe()&&(e.state.O=!0,e.f()),_(h,k)}function _(h,k){let I=!D(h)&&e.F(h),i={quote:h.anchor.quote?.exact??null,lost:D(h)||I?h.anchor.snapshot:null,place:I?le(h):null};if(P?.id===h.id?P.view.update(h,i):(P={id:h.id,view:ct(h,e.j,{Y:"popover",...i})},L.replaceChildren(P.view.element)),k===void 0)return;L.isConnected||(e.t.insertBefore(L,T),L.offsetWidth);let f=Xt(e.state.c),{left:b,top:a}=Jt({x:f.width,y:k,below:!1},{width:Ce(),height:L.offsetHeight},f);L.style.left=`${b}px`,L.style.top=`${a}px`,L.classList.add("show"),L.inert=!1,e.Ge(h.id)}function K(h=!1){P&&(P=null,L.classList.remove("show"),Q(L,!0),h&&e.state.O&&(e.state.O=!1,e.f()))}function j(h,k,I=!1,...i){let f=v("button",{class:"mi",type:"button",role:I?"menuitemcheckbox":"menuitem"},h,v("span",{class:"lb"}),...i,I&&v("span",{class:"sw","aria-hidden":"true"}),v("span",{class:"tt","aria-hidden":"true"}));return f.addEventListener("click",b=>{b.stopPropagation(),k(b)}),f}let ee=(h,k,I,i)=>{let f=h.querySelector(".lb");f.textContent!==k&&(f.textContent=k),h.querySelector(".tt").textContent=I,h.setAttribute("aria-description",I),i!==void 0&&h.setAttribute("aria-checked",String(i))},Ue=()=>v("div",{class:"sep",role:"separator"}),be=v("span",{class:"ma"}),qe=v("span",{class:"kc"}),Pe="",te=j(be,ot,!1,qe);te.dataset.item="name";let Ke=j(Z("copy"),()=>{z(),e.d.copyAll("ai")}),X=j(Z("lines"),()=>{z(),e.d.copyAll("text")}),Te=v("span",{class:"kc"}),de=j(Z("list"),()=>{x(!1),H(!0)},!1,Te),pe=j(Z("comment"),h=>{let k=!e.state.l&&h.detail===0;e.Xe(!e.state.l,k),k&&x(!1)},!0,v("span",{class:"kc","aria-hidden":"true"},bt));pe.dataset.item="comment",pe.setAttribute("aria-keyshortcuts",On);let me=v("div",{class:"sec",role:"presentation"}),re=Ue(),Oe=Ue(),ae=new Map,ze=h=>{let k=ae.get(h);return k||(k=j(Le(h.icon,15),()=>{h.checked||z(),Promise.resolve().then(()=>h.select()).catch(I=>e.re(I)).finally(()=>d&&ue())},!!h.checked,v("span",{class:"kc"})),ae.set(h,k)),k},We=()=>[te,re,Ke,X,de,...e.addons.$.map(ze),Oe,pe],nt=-1,ne=h=>{try{return h()}catch(k){return globalThis.reportError?.(k),""}};function ue(){let h=se(),k=e.d.name(),I=k||ye(e.doc.me);if(ee(te,I,k?"The name on your comments":"Add a name to show on your comments"),te.setAttribute("aria-label",`${I}, ${k?"edit":"add"} your name`),qe.replaceChildren(k?Z("edit",13):"Add name"),gt(e.doc.me,k)!==Pe){Pe=gt(e.doc.me,k);let f=Me(e.doc.me,k);f.classList.add("in"),be.replaceChildren(f)}ee(Ke,"Copy as Markdown","Markdown, with where each thread is"),ee(X,"Copy as Text","Just the words"),ee(de,"All comments","Every thread, and where it is"),Te.textContent=h?String(h):"";let i=e.addons.pe();me.textContent=i,i?!me.isConnected&&c.contains(te)&&c.prepend(me):me.remove();for(let f of e.addons.$){let b=ae.get(f);if(!b)continue;let a;try{a=f.checked?.()}catch(w){globalThis.reportError?.(w)}ee(b,ne(f.label),ne(f.hint),a),b.querySelector(".kc").textContent=f.count?ne(f.count):""}ee(pe,"Start commenting",e.state.l?"Turn off to hide the comments again":"Shows the comments; choose any part of the page to comment on it",e.state.l)}function he(){ue(),(nt!==e.addons.G||!c.contains(te))&&(c.replaceChildren(...We()),nt=e.addons.G,ue())}function ot(){let h=v("input",{class:"input",type:"text",maxlength:"80","aria-label":"Your name"});h.value=e.d.name();let k=v("div",{class:"ed"},be.cloneNode(!0),h),I=(i,f=!1)=>{if(S!==I)return;S=null;let b=h.value.trim();i&&b&&b!==e.d.name()&&e.d.rename(b).then(ue),k.replaceWith(te),f&&te.focus({preventScroll:!0})};S=I,h.addEventListener("keydown",i=>{i.stopPropagation(),(i.key==="Enter"||i.key==="Escape")&&(i.preventDefault(),I(i.key==="Enter",!0))}),h.addEventListener("blur",()=>I(!0)),te.replaceWith(k),h.focus({preventScroll:!0})}o.addEventListener("click",h=>{if(h.stopPropagation(),d){x(!1);return}he(),x(!0),h.detail===0&&q().at(-1)?.focus({preventScroll:!0})});let Ye=!1,je=()=>{Ye=T.contains(F())},Ie=h=>{let k=h.composedPath();d&&!k.includes(c)&&!k.includes(o)&&(x(!1),e.state.l&&!e.m(h)&&(e.we(h),h.preventDefault(),h.stopPropagation())),e.state.c&&!e.m(h)&&H(!1,Ye&&(!document.activeElement||document.activeElement===document.body)),!k.includes(L)&&!k.includes(T)&&K(!0)},xe=h=>{if(!d||h.pointerType==="touch"||h.type==="pointerout"&&h.relatedTarget)return;let k=h.composedPath();h.type==="pointerover"&&(k.includes(c)||k.includes(o))?(window.clearTimeout(C),C=0):C||(C=window.setTimeout(()=>{C=0,S||x(!1)},bi))},Ne={n:0,label:""},Ge=()=>{let{n:h,label:k}=Ne,I=e.addons.pe(),i=`Comment${e.state.l?", comment mode on":""}${k?`, ${k}`:h?`, ${h} open`:""}${I?`, ${I}`:""}`;o.getAttribute("aria-label")!==i&&o.setAttribute("aria-label",i);let f=(k||"Comment")+(I?` \xB7 ${I}`:"");r.data!==f&&(r.data=f)},rt=e.addons.subscribe(h=>{Ge(),!(!d||S)&&(h?he():ue())});window.addEventListener("pointerdown",je,!0),window.addEventListener("click",Ie,!0),window.addEventListener("pointerover",xe,!0),window.addEventListener("pointerout",xe,!0);let $e=h=>{if(h.key!=="Escape"||S)return;let k=h.composedPath()[0];if(d)z();else if(e.state.c&&!(k instanceof HTMLTextAreaElement&&!T.contains(k)))H(!1,!0);else if(P)K(!0),e.j.close();else return;h.stopPropagation()};return window.addEventListener("keydown",$e,!0),{f(h){p=h;let k=oe();if(k!==y){if(k){let[b,a]=t[0].classList.contains("on")?t:[t[1],t[0]];a.textContent=k>99?"99+":String(k),a.classList.toggle("s",k>99),b.classList.remove("on"),a.classList.add("on")}o.classList.toggle("has",k>0),y=k}let I=ke(),i=I?`${k} here \xB7 ${I} ${e.p.slide()!==null?"on other slides":"in other views"}`:"";o.classList.toggle("else",I>0),Ne={n:k,label:i},Ge(),o.classList.toggle("on",e.state.l),d&&!e.state.d&&x(!1),d&&ue();let f=e.state.c;if(T.classList.toggle("full",Qe()),T.classList.contains("show")!==f&&(T.classList.toggle("show",f),Q(T,!f)),f&&M(),P){let b=h.find(a=>a.id===P?.id);!b||e.state.i||b.resolved&&!e.state.M?K():_(b)}},S(){},destroy(){rt(),window.removeEventListener("pointerdown",je,!0),window.removeEventListener("click",Ie,!0),window.removeEventListener("pointerover",xe,!0),window.removeEventListener("pointerout",xe,!0),window.clearTimeout(C),window.removeEventListener("keydown",$e,!0),c.remove(),T.remove(),L.remove(),l.remove()}}}var At="[data-pipeup-slide]",Xo=1e3,Jo=["scroll","resize","keyup","click","transitionend","slidechanged"],Un=null,Mt=null,on=new Set,qn=new Set,Lt=e=>{try{e()}catch(t){globalThis.reportError?.(t)}};function xi(e){let t=null;if(e){t={};let n=0;for(let[o,r]of Object.entries(e))if(!(typeof r!="string"||o==="slide"||o.length>G.viewKey||r.length>G.viewValue)){if(++n>=G.viewEntries)break;t[o]=r}}Un=t;for(let n of qn)n()}function Ei(e){return on.add(e),()=>void on.delete(e)}function rn(e){Mt=typeof e?.current=="function"&&typeof e.go=="function"?e:null}function ki(e,t,n){let o=t.oe(),r=null,s=0,l=0;for(let c of e){if(!t.shown(c))continue;let m=t.s(c),u=Math.min(m.left+m.width,o.width)-Math.max(m.left,0),g=Math.min(m.top+m.height,o.height)-Math.max(m.top,0);if(u<=0||g<=0)continue;let E=Math.round(u*g),T=t.opacity(c);(E>s||E===s&&(T>l||T===l&&c===n))&&(r=c,s=E,l=T)}return r}function Si(e,t,n){return t!==null?e?.slide===void 0||e.slide===t:!e||!n?!0:Object.entries(e).every(([o,r])=>o==="label"||o==="slide"||n[o]===r)}function Ti(){return{s:e=>e.getBoundingClientRect(),shown:e=>e.checkVisibility?.({opacityProperty:!0,visibilityProperty:!0})!==!1,opacity:e=>parseFloat(getComputedStyle(e).opacity)||0,oe:()=>({width:window.innerWidth,height:window.innerHeight})}}var Qo=()=>{let e=window.Reveal;return typeof e?.getIndices=="function"&&typeof e.slide=="function"?e:null};function Zo(e,t,n=Ti()){let o=window.matchMedia?.("(prefers-reduced-motion: reduce)").matches===!0,r=null,s=null,l=0,c=!1,m=()=>[...e.querySelectorAll(At)],u=()=>[...e.querySelectorAll(".slides > section")],g=y=>typeof y=="string"&&y.length>0&&y.length<=G.viewValue?y:null,E=y=>g(y?.getAttribute("data-pipeup-slide"));function T(){if(Mt){let P=null;if(Lt(()=>{let O=Mt.current();Number.isInteger(O)&&O>0&&(P=String(O))}),P!==null)return P}let y=Qo();if(y){let P=null;if(Lt(()=>{let O=y.getIndices().h,x=u()[O];P=E(x?.matches(At)?x:x?.querySelector(At))??g(String(O+1))}),P!==null)return P}return r&&!r.isConnected&&(r=null),r=ki(m(),n,r)??r,E(r)}function L(){l=0,s=T(),t()}let d=()=>{!l&&!c&&(l=requestAnimationFrame(L))},S=y=>Si(y,s,Un);function C(y){if(S(y))return Promise.resolve(!0);let P=y.slide,O=Qo(),x=m().find(F=>E(F)===P),H=/^[1-9]\d{0,5}$/.test(P??"");if(H&&Mt)Lt(()=>Mt.go(Number(P)));else if(H&&O){let F=x?u().findIndex(z=>z===x||z.contains(x)):-1;Lt(()=>O.slide(F>=0?F:Number(P)-1))}else if(on.size)for(let F of on)Lt(()=>F({...y}));else if(x)x.scrollIntoView({block:"start",behavior:o?"auto":"smooth"});else return Promise.resolve(!1);let q=performance.now();return new Promise(F=>{let z=W=>{clearTimeout(J),F(W)},J=setTimeout(()=>z(!1),Xo),D=()=>{if(c)return z(!1);if(s=T(),S(y))return z(!0);if(performance.now()-q>=Xo)return z(!1);requestAnimationFrame(D)};requestAnimationFrame(D)})}let p=new MutationObserver(y=>{y.some(P=>P.target instanceof Element&&P.target.matches(At))&&d()});p.observe(e,{subtree:!0,attributes:!0,attributeFilter:["class","style","hidden"]});for(let y of Jo)window.addEventListener(y,d,{capture:!0,passive:!0});return qn.add(d),s=T(),{slide:()=>s,view(y){let P=y instanceof Element?y:y?.parentElement,O=E(P?.closest(At))??s,x={...O!==null?{slide:O}:{},...Un};return Object.keys(x).length?x:void 0},u:S,W:C,destroy(){c=!0,cancelAnimationFrame(l),p.disconnect();for(let y of Jo)window.removeEventListener(y,d,!0);qn.delete(d)}}}var Kn=["pipeup-quote","pipeup-on","pipeup-done"],Ai={"pipeup-quote":[[250,227,188,.75],[250,200,100,.28]],"pipeup-on":[[247,212,154,.95],[250,200,100,.42]],"pipeup-done":[[180,178,169,.22],[180,178,169,.2]]},Li=(e,t)=>Kn.map(n=>{let[o,r,s,l]=Ai[n][e?1:0];return`::highlight(${n}){background-color:rgba(${o},${r},${s},${+(l*t).toFixed(3)})}`}).join("");function tr(){return typeof CSS<"u"&&"highlights"in CSS&&typeof Highlight<"u"}var Mi="<svg xmlns='http://www.w3.org/2000/svg' width='32' height='32'><rect x='7' y='7' width='23' height='23' rx='4' fill='none' stroke='#534AB7' stroke-width='2' stroke-dasharray='4 3'/><path d='M3 2v15l4-3.5 3 6.5 2.5-1.2-3-6.3H15z' fill='#fff' stroke='#2C2C2A' stroke-width='1.2' stroke-linejoin='round'/></svg>",Ci=`:not([data-pipeup-ignore],[data-pipeup-ignore] *){cursor:url("data:image/svg+xml,${encodeURIComponent(Mi)}") 3 2,crosshair!important}`;function nr(e=document,t=!1){let n=e.defaultView?.CSSStyleSheet;if(!n||!("replaceSync"in n.prototype)||!("adoptedStyleSheets"in e))return{ke(){},Se(){},le(){},Te(){},remove:()=>er()};let o=new n,r=null,s=!1,l=1,c=0,m="",u=0,g=()=>o.replaceSync(Li(t,l)+(r===null?"":`:root{--pipeup-gutter:${r}px}`)+(s?Ci:"")+(c||m?`html{--pipeup-panel:${c}px;${c?`margin-right:${c}px!important;`:""}${m}}`:""));return g(),e.adoptedStyleSheets=[...e.adoptedStyleSheets,o],{ke(E){E!==r&&(r=E,g())},Se(E){E!==s&&(s=E,g())},le(E){l=E,g()},Te(E,T){E!==c&&(c=E,m=T?"":"transition:margin-right .34s cubic-bezier(.4,0,.2,1)!important",clearTimeout(u),!E&&m&&(u=window.setTimeout(()=>{m="",g()},400)),g())},remove(){clearTimeout(u),e.adoptedStyleSheets=e.adoptedStyleSheets.filter(E=>E!==o),er()}}}function or(e){if(tr())for(let t of Kn)CSS.highlights.set(t,new Highlight(...e[t.slice(7)]))}function er(){if(tr())for(let e of Kn)CSS.highlights.delete(e)}var zn=':host{all:initial}*{box-sizing:border-box}button{appearance:none;font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}svg{display:block}.layer{all:initial;display:block;position:fixed;inset:0;pointer-events:none;font:13px/1.5 var(--pu-font,system-ui,sans-serif);color:var(--k);--k:#2C2C2A;--mu:#5F5E5A;--fa:#888780;--ln:#E5E3DA;--ru:#ECEAE2;--so:#FAFAF7;--su:#FFFFFF;--ho:#F1EFE8;--as:color-mix(in srgb,var(--pu-accent,#534AB7) 12%,transparent);--sh:0 8px 28px rgba(44,44,42,.1);--in:.26s;--mv:.34s;--out:.2s;--pl:1.2s;--eo:cubic-bezier(.22,.61,.36,1);--eio:cubic-bezier(.4,0,.2,1);--ei:cubic-bezier(.4,0,1,1);--pu-text:var(--k);--pu-muted:var(--mu);--pu-faint:var(--fa);--pu-line:var(--ln);--pu-surface:var(--su);--pu-soft:var(--so);--pu-hover:var(--ho);--pu-shadow:var(--sh);--pu-ease:var(--eo)}.layer.dark{--k:#ECEBE6;--mu:#B4B2A9;--fa:#8D8B84;--ln:#3A3936;--ru:#34332F;--so:#22221F;--su:#1B1B19;--ho:#2C2C29;--sh:0 8px 28px rgba(0,0,0,.45)}.layer.hidden .bub,.layer.hidden .col,.layer.hidden .pop,.layer.hidden .tip,.layer.hidden .mark,.layer.hidden .selbar{opacity:0!important;pointer-events:none!important}.tx{font-size:14px;line-height:1.5;color:var(--k);white-space:pre-wrap;overflow-wrap:anywhere}.tx.del,.who,.rest,.ctx{color:var(--fa)}.who,.rest{font-size:12px}.who{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rft>.who{display:block}.ctx[hidden]{display:none}.ctx{font-size:12px;margin-bottom:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.clamp{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.tx a{color:var(--pu-accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}.ft,.rft{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows var(--in) var(--eo),opacity var(--in) var(--eo)}.ft>*,.rft>*{overflow:hidden;min-height:0;display:flex;align-items:center}.root:hover>.ft,.root:focus-within>.ft,.it:hover>.rft,.it:focus-within>.rft{grid-template-rows:1fr;opacity:1}.ft.has-rest{grid-template-rows:1fr;opacity:1}.ft.has-rest>*{grid-area:1/1}.ft .hover{opacity:0;transition:opacity var(--in) var(--eo)}.ft .rest{transition:opacity var(--in) var(--eo)}.root:hover>.ft .hover,.root:focus-within>.ft .hover,.ft:not(.has-rest) .hover{opacity:1}.root:hover>.ft .rest,.root:focus-within>.ft .rest{opacity:0}.acts{margin-left:6px;display:flex;flex:none}.ib{width:24px;height:22px;display:grid;place-items:center;border-radius:6px;color:var(--mu);transition:background-color .2s var(--eo),color .2s var(--eo)}.ib:hover,.ib:focus-visible{background:var(--ho);color:var(--k);outline:none}.rps,.rbox{padding-left:14px}.rps .it{padding-top:6px}.more{display:grid;grid-template-rows:1fr;transition:grid-template-rows var(--mv) var(--eio)}.more>div{overflow:hidden;min-height:0}.th:not(.on) .more{grid-template-rows:0fr}.row{display:flex;align-items:center;gap:8px;padding:8px 0 2px;cursor:text}.input{flex:1;min-width:0;height:27px;display:block;border:0;border-bottom:1px solid var(--ln);outline:none;resize:none;overflow:hidden;font:inherit;font-size:14px;line-height:1.5;padding:3px 0;color:var(--k);background:transparent;transition:border-color var(--in) var(--eo)}.row:hover .input,.input:hover{border-bottom-color:var(--mu)}.input:focus{border-bottom-color:var(--pu-accent)}.ed{display:flex;gap:10px;align-items:center;min-height:34px;padding:6px 10px}.ed .input{font-size:13px;height:22px}.root,.it{position:relative;padding-right:30px}.av{display:grid;place-items:center;width:22px;height:22px;border-radius:32%;font-size:12px;font-weight:600;line-height:1;opacity:0;transform:scale(.85);transition:opacity var(--in) var(--eo),transform var(--in) var(--eo)}.av.in{opacity:1;transform:none}.av svg{width:80%;height:80%}.root>.av,.it>.av{position:absolute;top:0;right:0}.it>.av{top:6px}.av{--av-l:92%;--av-d:30%;--s:60%;background:hsl(var(--h) var(--s) var(--av-l));color:hsl(var(--h) var(--s) var(--av-d))}.dark .av{--av-l:20%;--av-d:78%}.c0{--h:0}.c1{--h:25}.c2{--h:50}.c3{--h:130}.c4{--h:175}.c5{--h:215}.c6{--h:270}.c7{--h:330}.c8{--h:28;--s:35%}.c9{--h:220;--s:8%}.me{flex:none;display:grid}.me>.av{grid-area:1/1;width:26px;height:26px;font-size:13px}.you{display:grid;padding:0 34px;min-height:24px;font-size:12px;color:var(--fa)}.you>*{grid-area:1/1;display:flex;align-items:center;min-width:0;transition:opacity var(--in) var(--eo),transform var(--in) var(--eo)}.say{white-space:pre;overflow:hidden}.nm{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.say button{flex:none}.say button{color:var(--mu);text-decoration:underline;text-decoration-color:var(--ln);text-underline-offset:2px;transition:color .2s var(--eo)}.say button:hover,.say button:focus-visible{color:var(--pu-accent);outline:none}.nf{opacity:0;transform:translateY(-4px);pointer-events:none}.nf .input{font-size:13px;height:24px}.you.naming .nf{opacity:1;transform:none;pointer-events:auto}.you.naming .say{opacity:0;pointer-events:none}.send{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;color:var(--pu-accent);flex:none;opacity:0;pointer-events:none;transition:opacity var(--in) var(--eo),background-color .2s var(--eo)}.send.show{opacity:1;pointer-events:auto}.send:hover{background:var(--as)}.bub{position:fixed;left:0;top:0;width:20px;height:20px;margin:-20px 0 0 -2px;border-radius:50% 50% 50% 0;background:var(--pu-accent);border:2px solid var(--su);box-shadow:0 1px 4px #0003;pointer-events:auto;opacity:0;transform:translateY(-6px) scale(.9);transform-origin:2px 20px;transition:opacity var(--out) var(--ei),transform var(--out) var(--ei)}.bub.in{opacity:1;transform:none;transition:opacity var(--in) var(--eo),transform var(--in) var(--eo)}.bub.in:hover,.bub.on{transform:scale(1.18)}.bub.done{background:var(--fa)}.bub.ghost{pointer-events:none}.tip,.pop,.menu,.all,.xp,.toast,.selbar,.namebar,.ttip,.tt,.mode{background:var(--su);border:1px solid var(--ln);box-shadow:var(--sh)}.tip{position:fixed;max-width:260px;border-radius:10px;padding:7px 10px;opacity:0;transform:translateY(3px);transition:opacity .22s var(--eo),transform .26s var(--eo)}.tip.show{opacity:1;transform:none;pointer-events:auto;cursor:pointer;transition:opacity .22s var(--eo),transform .26s var(--eo),left var(--mv) var(--eio),top var(--mv) var(--eio)}.pop{position:fixed;width:var(--pu-pop);border-radius:12px;padding:10px 12px 8px;pointer-events:none;opacity:0;transform:translateY(6px) scale(.98);transition:opacity var(--out) var(--ei),transform var(--out) var(--ei)}.pop.show{opacity:1;transform:none;pointer-events:auto;transition:opacity var(--in) var(--eo),transform var(--mv) var(--eo)}.pop.show.glide{transition:opacity var(--in) var(--eo),transform var(--mv) var(--eo),left var(--mv) var(--eio),top var(--mv) var(--eio)}.mark{position:fixed;border:2px solid color-mix(in srgb,var(--pu-accent) 50%,transparent);background:var(--as);border-radius:8px;opacity:0;transition:opacity .3s var(--eo)}.mark.show{opacity:1}.pulse{position:fixed;border:2px solid var(--pu-accent);border-radius:8px;background:var(--as);animation:pu-pulse var(--pl) var(--eio) forwards}@keyframes pu-pulse{0%{opacity:0;transform:scale(.985)}35%{opacity:.85;transform:scale(1)}to{opacity:0;transform:scale(1.02)}}.col{position:fixed;left:0;top:0;pointer-events:none;transition:opacity var(--in) var(--eo)}.th{position:absolute;left:0;right:0;top:0;padding:4px 4px 4px 12px;pointer-events:auto;cursor:pointer;box-shadow:inset 2px 0 0 transparent;transition:transform var(--mv) var(--eio),box-shadow var(--in) var(--eo),opacity var(--in) var(--eo)}.th.hot{box-shadow:inset 2px 0 0 var(--ln)}.th.on{box-shadow:inset 2px 0 0 var(--pu-accent);cursor:default}.th.dim{opacity:.45}.th.resolved:not(.on):not(.hot){opacity:.6}.th.lost .ctx{white-space:normal}.th.wait{opacity:0!important;pointer-events:none}.th.out{opacity:0!important;pointer-events:none;transition:opacity var(--out) var(--ei)}.th:has(.opn:focus-visible){box-shadow:inset 2px 0 0 var(--ln);outline:2px solid var(--pu-accent);outline-offset:2px;border-radius:4px}.selbar{position:fixed;display:flex;border-radius:10px;padding:2px;opacity:0;transform:translateY(4px);pointer-events:none;transition:opacity var(--in) var(--eo),transform .3s var(--eo)}.selbar.show{opacity:1;transform:none;pointer-events:auto}.selbar button{width:32px;height:30px;display:grid;place-items:center;border-radius:8px;color:var(--pu-accent);transition:background-color .2s var(--eo)}.selbar button:hover,.selbar button:focus-visible{background:var(--as);outline:none}.pick{position:fixed;left:0;top:0;border:2px solid color-mix(in srgb,var(--pu-accent) 70%,transparent);background:color-mix(in srgb,var(--pu-accent) 6%,transparent);border-radius:8px;pointer-events:none;opacity:0;transition:opacity var(--out) var(--ei),border-color var(--out) var(--ei),border-width var(--out) var(--ei),box-shadow var(--out) var(--ei)}.pick.show{opacity:1;transition-duration:var(--in);transition-timing-function:var(--eo)}.pick.show.glide{transition-property:all;transition-duration:var(--mv);transition-timing-function:var(--eio)}.pick.on{border-color:var(--pu-accent)}.pick.kf{border:3px solid var(--pu-accent);box-shadow:0 0 0 2px var(--su)}.km{position:fixed;left:0;top:0;pointer-events:none;outline:none}.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.namebar{position:fixed;left:0;top:0;display:flex;align-items:center;gap:2px;padding:2px 2px 2px 10px;border-radius:10px;font-size:12px;color:var(--mu);white-space:nowrap;pointer-events:none;opacity:0;transform:translateY(4px);transition:opacity var(--out) var(--ei),transform var(--out) var(--ei)}.namebar.show{opacity:1;transform:none;pointer-events:auto;transition:opacity var(--in) var(--eo),transform .3s var(--eo)}.namebar.show.glide{transition-property:all;transition-duration:var(--mv);transition-timing-function:var(--eio)}.namebar .lbl{margin-right:6px;max-width:260px;overflow:hidden;text-overflow:ellipsis}.namebar .nb{padding:4px;display:grid;place-items:center;border-radius:7px;transition:background-color .2s var(--eo),color .2s var(--eo)}.namebar .nb:hover,.namebar .nb:focus-visible{background:var(--ho);color:var(--k);outline:none}.namebar .nb[hidden]{display:none}.launch{position:fixed;right:20px;bottom:20px;pointer-events:auto}.launch .mode{position:relative;display:grid;place-items:center;width:46px;height:46px;border-radius:50%;transition:background-color .3s var(--eo),color .3s var(--eo)}.mode>*,.cnt>*{grid-area:1/1}.mode>*{display:grid;place-items:center;transition:opacity var(--in) var(--eo)}.cnt,.has>.plus{opacity:0}.has>.cnt{opacity:1}.n{font-size:12px;font-weight:500;line-height:1;margin:-1.4px 0 0 1.4px;font-variant-numeric:tabular-nums;opacity:0;transition:opacity var(--in) var(--eo)}.n.s{font-size:9.5px;letter-spacing:-.04em}.n.on{opacity:1}.launch .mode:hover,.launch .mode[aria-expanded=true]{background:var(--ho)}.launch .mode.on{background:var(--pu-accent);color:var(--pu-on,#fff)}.mode>.dot{position:absolute;top:3px;right:3px;width:9px;height:9px;border-radius:50%;background:var(--pu-accent);border:2px solid var(--su);opacity:0}.mode.else>.dot{opacity:1}.ttip{position:absolute;right:0;bottom:54px;white-space:nowrap;border-radius:8px;padding:4px 9px;font-size:12px;pointer-events:none;opacity:0;transform:translateY(3px);transition:opacity var(--out) var(--ei),transform var(--out) var(--ei)}.ttip small{margin-left:8px}.ttip small,.mi .kc{font-size:12px;color:var(--fa)}.mode:hover+.ttip,.mode:focus-visible+.ttip{opacity:1;transform:none;transition:opacity var(--in) var(--eo) .5s,transform var(--in) var(--eo) .5s}.launch .mode[aria-expanded=true]+.ttip{opacity:0;transition:opacity var(--out) var(--ei)}@media(hover:none){.ttip,.tt{display:none}}.menu{position:fixed;right:20px;bottom:76px;width:290px;border-radius:12px;padding:4px;pointer-events:none;opacity:0;transform:translateY(6px);transition:opacity var(--out) var(--ei),transform var(--out) var(--ei)}.menu.show{opacity:1;transform:none;pointer-events:auto;transition:opacity var(--in) var(--eo),transform var(--mv) var(--eo)}.mi{position:relative;display:flex;gap:10px;align-items:center;width:100%;min-height:34px;text-align:left;padding:6px 10px;border-radius:8px;transition:background-color .2s var(--eo)}.mi:hover,.mi:focus-visible{background:var(--so);outline:none}.mi svg{color:var(--mu);flex:none}.mi small{display:block;color:var(--fa);font-size:12px}.lb{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ma{flex:none;display:grid;margin:-2px 0}.ma .av{width:20px;height:20px;font-size:11px}.mi .av svg{color:inherit}.sep{height:1px;margin:4px 10px;background:var(--ru)}.tt{position:absolute;right:calc(100% + 14px);top:50%;translate:0 -50%;width:max-content;max-width:220px;padding:4px 9px;border-radius:8px;font-size:12px;line-height:1.4;color:var(--mu);pointer-events:none;opacity:0;transform:translate(3px);transition:opacity var(--out) var(--ei),transform var(--out) var(--ei)}.mi:hover>.tt,.mi:focus-visible>.tt{opacity:1;transform:none;transition:opacity var(--in) var(--eo) .5s,transform var(--in) var(--eo) .5s}@media(max-width:600px){.tt{right:8px;top:auto;bottom:100%;translate:none;transform:translateY(3px)}}.sw{position:relative;flex:none;width:26px;height:16px;border-radius:8px;background:var(--ln);transition:background-color var(--mv) var(--eio)}.sw:before,.sw:after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #00000040;transition:transform var(--mv) var(--eio),opacity var(--mv) var(--eio)}.sw:before{opacity:0;transform:translate(10px)}[aria-checked=true]>.sw{background:var(--pu-accent)}[aria-checked=true]>.sw:after{transform:translate(10px)}.tools{display:flex;flex:none;gap:2px}.tools[hidden]{display:none}.tool[aria-pressed=true]{background:var(--as);color:var(--pu-accent)}.note{display:block;padding:0 0 4px;font-size:12px;color:var(--fa)}.note[hidden]{display:none}.ov{position:absolute;inset:0;pointer-events:none;overflow:hidden}.xb{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:4px 16px 16px;font-size:13px}.xb p{margin:0 0 10px}.all,.xp{position:fixed;top:0;right:0;bottom:0;width:var(--pu-panel);display:flex;flex-direction:column;border-width:0 0 0 1px;opacity:0;transform:translate(100%);transition:transform var(--out) var(--ei),opacity var(--out) var(--ei)}.all.show,.xp.show{opacity:1;transform:none;pointer-events:auto;transition:transform var(--mv) var(--eo),opacity var(--in) var(--eo)}.all.full{width:100%}.hd{display:flex;align-items:center;gap:8px;padding:12px 10px 8px 16px;font-weight:600}.pn{font-weight:400;color:var(--fa)}.hs{margin-left:auto;display:flex;align-items:center;gap:6px;padding:3px 4px 3px 6px;border-radius:6px;font-size:12px;font-weight:400;color:var(--mu);transition:background-color .2s var(--eo)}.hs:hover,.hs:focus-visible{background:var(--ho);outline:none}.list{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:4px}.all .mi{align-items:flex-start}.all .mi>.av{flex:none}.all .mi>span:last-child{flex:1;min-width:0}.all .mi small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.all .mi.done{opacity:.6}.layer.listing .col{opacity:0;transition:opacity var(--out) var(--ei)}.sec{padding:8px 10px 2px;font-size:12px;color:var(--fa)}.sec b{margin-left:6px;font-weight:500;color:var(--pu-accent)}.toast{position:fixed;left:50%;bottom:28px;border-radius:10px;padding:8px 14px;font-size:13px;opacity:0;transform:translate(-50%,6px);transition:opacity .3s var(--eo),transform .36s var(--eo)}.toast.show{opacity:1;transform:translate(-50%)}@media(forced-colors:active){.pick.kf{border:3px solid Highlight}.layer :is(.ib,.mi,.nb,.hs,.selbar button,.say button,.xb button):focus-visible{outline:2px solid Highlight}}@media(prefers-reduced-motion:reduce){.bub,.bub.in,.bub.in:hover,.bub.on,.tip,.pop,.selbar,.menu,.all,.xp,.ttip,.tt,.toast{transform:none!important}.sw:after{transform:none!important;transition-property:opacity}[aria-checked=true]>.sw:after{opacity:0}[aria-checked=true]>.sw:before{opacity:1}.th{transition-property:opacity,box-shadow}.tip.show{transition-property:opacity}.pick,.pick.show{transition:opacity .16s ease-in-out}.all,.all.show,.xp,.xp.show{transition-property:opacity}.namebar,.namebar.show{transform:none!important;transition:opacity .16s ease-in-out}.av,.nf{transform:none!important}@keyframes pu-pulse{0%{opacity:0}35%{opacity:.85}to{opacity:0}}}';var rr="#534AB7",Pi="#9A94EE",Oi="rgb(0, 0, 238)";function sn(e){let t=/rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)(?:\s*[,/]\s*([\d.]+%?))?\s*\)/.exec(e);if(!t||t[1]===void 0||t[2]===void 0||t[3]===void 0)return null;let n=t[4]===void 0?1:t[4].endsWith("%")?parseFloat(t[4])/100:parseFloat(t[4]);return{r:Number(t[1]),g:Number(t[2]),b:Number(t[3]),a:n}}function Wn(e){let t=n=>{let o=n/255;return o<=.03928?o/12.92:((o+.055)/1.055)**2.4};return .2126*t(e.r)+.7152*t(e.g)+.0722*t(e.b)}var ir=(e,t)=>(Math.max(e,t)+.05)/(Math.min(e,t)+.05);function Yn(e){let t=e.ownerDocument,n=t.defaultView;if(!n)return{font:"system-ui, sans-serif",accent:rr,dark:!1,on:"#fff"};let o=t.documentElement,r=n.getComputedStyle(e).fontFamily||"system-ui, sans-serif",s=(n.getComputedStyle(o).getPropertyValue("--pipeup-accent")||o.style.getPropertyValue("--pipeup-accent")).trim(),l=e.querySelector("a[href]"),c=l?n.getComputedStyle(l).color:"",m=sn(n.getComputedStyle(t.body).backgroundColor);(!m||m.a===0)&&(m=sn(n.getComputedStyle(o).backgroundColor));let u=!!(m&&m.a>0?Wn(m)<.2:n.matchMedia?.("(prefers-color-scheme: dark)").matches===!0&&/dark/.test(n.getComputedStyle(o).colorScheme||"")),g=c&&c!==Oi?sn(c):null,E=g&&ir(Wn(g),u?.011:1)>=3,T=s||(E?c:u?Pi:rr),L=sn(T),d=L&&ir(Wn(L),1)<3?"#111":"#fff";return{font:r,accent:T,dark:u,on:d}}function an(e,t){e.style.setProperty("--pu-font",t.font),e.style.setProperty("--pu-accent",t.accent),e.style.setProperty("--pu-on",t.on),e.classList.toggle("dark",t.dark)}function sr(e,t=document){let n=t.createElement("pipeup-root");n.setAttribute("data-pipeup-ignore",""),n.style.cssText="position:fixed!important;inset:0!important;pointer-events:none!important;z-index:2147483000!important;display:block!important;margin:0!important;visibility:visible!important;opacity:1!important;transform:none!important;filter:none!important;";let o=n.attachShadow({mode:"open"}),r=t.defaultView?.CSSStyleSheet;if(r&&"replaceSync"in r.prototype&&"adoptedStyleSheets"in o){let l=new r;l.replaceSync(zn),o.adoptedStyleSheets=[l]}else{let l=t.createElement("style");l.textContent=zn,o.append(l)}let s=t.createElement("div");return s.className="layer",s.style.setProperty("--pu-panel",`${kt}px`),s.style.setProperty("--pu-pop",`${Ce()}px`),an(s,e),o.append(s),t.documentElement.append(n),{element:n,shadow:o,t:s,destroy:()=>n.remove()}}var Ii=40,Ni=250,$i=120,Ri=2400,Hi=4e3,Di=1e4;function ar(e,t=!1){return Fn(e,t)?"column":"bubbles"}function Bi(e){return[...e.state.mode==="column"?[zo(e),Nn(e,{te:!1})]:[Nn(e,{te:!0})],Yo(e),Go(e)]}var Fi=1e3,ln="Shown here, but not saved yet \u2014 it will be saved with your next change",et=e=>e instanceof Error?e.message.replace(/^pipeup: /,""):"Something went wrong";function lr(e){let t=Yn(e.root),n=sr(t),o=nr(document,t.dark);o.le(0);let r=window.matchMedia?.("(prefers-reduced-motion: reduce)").matches===!0,s=document.documentElement.hasAttribute("data-pipeup-reserve"),l=new Map,c=new Set,m=new WeakSet,u={i:null,L:null,M:!1,hidden:!0,mode:ar(e.root),o:null,l:!1,c:!1,O:!1,d:!1},g=v("div",{class:"toast",role:"status","aria-live":"polite"}),E=v("div",{class:"sr","aria-live":"polite"});n.t.append(g,E);let T=null,L=[],d=null,S=!1,C=0,p=0,y=0,P=0,O=0,x=new Set,H="",q=new Map,F=Zo(e.root,()=>{!S&&K()&&X()}),z=!1,J=0;function D(a,w=Ri,A=!1,N=!1){S||(z=A,g.textContent=a,N?g.setAttribute("aria-hidden","true"):g.removeAttribute("aria-hidden"),g.classList.add("show"),window.clearTimeout(C),C=window.setTimeout(()=>g.classList.remove("show"),w))}function W(){z&&(z=!1,window.clearTimeout(C),g.classList.remove("show"))}function oe(a){E.textContent="",cancelAnimationFrame(J),J=requestAnimationFrame(()=>E.textContent=a)}function ke(a){D(et(a))}function se(a){throw ke(a),a}let le=a=>({thread:a,location:kn(a.anchor,l.get(a.id)??Rt(a.anchor,e.root),e.root)}),ce=a=>(n.t.querySelector(`[data-thread="${a}"] .rbox textarea`)?.value.trim()??"")!=="",Se=a=>u.i!==a||u.M?!1:(d?.se()?d.ae():n.t.querySelector(".launch .mode")?.focus({preventScroll:!0}),!0),M={reply:async(a,w)=>{try{await e.doc.reply(a,w)}catch(A){A instanceof Ee?D(ln):se(A)}},resolve:async a=>{try{await e.doc.resolve(a),D("Resolved \xB7 Show resolved brings it back")}catch(w){D(w instanceof Ee?`Resolved \xB7 ${ln}`:et(w))}Se(a)&&(u.i=null)},reopen:async a=>{try{await e.doc.reopen(a),D("Reopened")}catch(w){D(w instanceof Ee?`Reopened \xB7 ${ln}`:et(w))}},close:()=>{ae(null);let a=Te&&n.t.querySelector(Te);a?a.focus({preventScroll:!0}):d?.ae(),Te=""},copy:a=>{try{let w=e.doc.threads().find(N=>N.id===a);if(!w)return;let A=Ln(le(w),"ai",location.href,Date.now());_n(A,n.t).then(()=>D("Thread copied as Markdown for AI"),N=>D(et(N)))}catch(w){D(et(w))}}},$={copyAll:async a=>{let w=$.all(),A=Mn(w,a,{title:document.title,url:location.href,exportedAt:new Date});try{await _n(A,n.t);let N=w.filter(V=>!V.thread.resolved).length;D(`Copied ${N} thread${N===1?"":"s"}${a==="ai"?" as Markdown for AI":""}`)}catch(N){D(et(N))}},je:()=>{u.M=!u.M,X()},rename:async a=>{let w=a.replace(/\s+/g," ").trim();try{await Ye(w)?D(`New comments will say ${w}, but this browser couldn't remember it`):D(`New comments will say ${w}`)}catch(A){D(et(A))}},name:()=>e.doc.name,all:()=>[...e.doc.threads()].sort(_e(B)).map(le)},R={},B={get addons(){return R.surface},doc:e.doc,root:e.root,t:n.t,host:n.element,state:u,resolved:l,k:c,j:M,d:$,p:F,F:a=>x.has(a.id),Ee:()=>{K()&&X()},B:a=>!u.hidden&&(!a.resolved||u.M||ce(a.id))&&!x.has(a.id),Je:(a,w)=>{for(let A of e.doc.threads()){let N=l.get(A.id);if(A.anchor.quote&&B.B(A)&&N?.range&&$o(a,w,xt(N)))return A}return null},ne:(a,w)=>B.C()?B.Je(a,w):null,m:a=>a.composedPath().includes(n.element),we:a=>void m.add(a),qe:a=>m.has(a),open:ae,Ge:a=>re(a),L:ze,Ye:We,Ue:nt,C:()=>!T||T.De(),be:a=>{let w=T?.ve();a(),w?.()},ze:()=>{let a=u.o?.anchor.view,w=T?.ve();Promise.resolve(F.u(a)||F.W(a??{}).then(()=>B.Ee())).then(w)},Be:je,Fe:ne,Xe:ue,N:ot,D:a=>{T=a},Z:D,w:oe,Ke:W,re:ke,Qe:Ie,f:X,ie:he},Y=R.surface=new Yt(B,n.shadow,E);function _(a){let w=performance.now(),A=e.doc.threads();for(let N of A){if(a&&!a.has(N.id))continue;let V=performance.now()-w<Ii,U=Rt(N.anchor,e.root,{fuzzy:V});l.set(N.id,U),!V&&U.state==="orphaned"?c.add(N.id):c.delete(N.id)}for(let N of[...l.keys()])A.some(V=>V.id===N)||l.delete(N);c.size===0?(window.clearTimeout(P),P=0):P===0&&(P=window.setTimeout(()=>{P=0,!S&&(_(new Set(c)),X())},Ni))}function K(){let a=new Set,w=F.slide()!==null,A=new Set;for(let V of e.doc.threads()){A.add(V.id);let U=l.get(V.id)?.element;(!F.u(V.anchor.view)||!w&&U?.checkVisibility?.({visibilityProperty:!0})===!1)&&a.add(V.id)}x=a;for(let V of q.keys())A.has(V)||q.delete(V);let N=`${F.slide()}|${[...a].join()}`;return N===H?!1:(H=N,!0)}function j(a){let w=[],A=[],N=[];for(let V of a){let U=l.get(V.id);V.resolved&&!u.M||!U?.range||x.has(V.id)||(V.id===u.i||V.id===u.L?A.push(U.range):V.resolved?N.push(U.range):w.push(U.range))}u.o&&F.u(u.o.anchor.view)&&A.push(...u.o.ranges),or({quote:w,on:A,done:N})}let ee=0,Ue=0,be=0;function qe(a){if(a===Ue)return;Ue=a,cancelAnimationFrame(be);let w=ee,A=performance.now(),N=a?260:200,V=U=>{let Ct=Math.min(1,(U-A)/N);ee=w+(a-w)*(a?1-(1-Ct)**3:Ct*Ct),o.le(ee),Ct<1&&(be=requestAnimationFrame(V))};be=requestAnimationFrame(V)}let Pe=0,te=0;function Ke(a){a!==Pe&&(Pe=a,o.Te(a,r),window.clearTimeout(te),te=window.setTimeout(()=>{_(),X()},r?0:400))}function X(){if(S)return;let a=e.doc.threads();if(K(),u.i&&x.has(u.i)){let A=n.t.querySelector(`[data-thread="${u.i}"] .rbox textarea`)?.value;A&&q.set(u.i,A),u.i=null}u.hidden=!u.l&&!u.c&&!u.O&&!u.o,u.hidden&&(u.i=null),qe(u.hidden?0:1),n.t.classList.toggle("hidden",u.hidden),n.t.classList.toggle("listing",u.c);let w=u.c&&!Qe();Ke(w?kt:0),o.ke(s?u.mode==="column"&&!u.hidden&&!w?Tt:0:null),j(a);for(let A of L)A.f(a);d?.f(a),u.hidden||Y.flush()}let Te="",de=()=>n.t.getRootNode().activeElement,pe="input,textarea,select,[contenteditable]:not([contenteditable=false])",me=()=>{let a=de();return a instanceof HTMLTextAreaElement&&a.value!==""||!!document.activeElement?.matches(pe)};function re(a,w=me(),A=de()){let N=[...n.t.querySelectorAll(`[data-thread="${a}"] .rbox textarea`)].find(U=>!U.closest("[inert]")),V=A?.getAttribute("data-thread");Te=V?`.${A.classList[0]}[data-thread="${V}"]`:"",!(w||!N)&&N.focus({preventScroll:!0})}function Oe(){let a=u.o;return!a||B.C()?!1:(F.u(a.anchor.view)||F.W(a.anchor.view??{}),!0)}function ae(a,w=!1){if(a&&Oe())return;if(u.i===a&&!u.o)return a?re(a):void 0;let A=!w&&me(),N=de();if(a||(u.O=!1),u.i=a,a&&(u.o=null,Ie(a)),X(),a){let V=q.get(a),U=V&&n.t.querySelector(`[data-thread="${a}"] .rbox textarea`);U&&!U.value&&(U.value=V,U.dispatchEvent(new Event("input",{bubbles:!0}))),q.delete(a),w&&d?.se()?d.ae():re(a,A,N)}}function ze(a){u.L!==a&&(u.L=a,a&&a!==u.i&&Ie(a),X())}function We(a){W(),u.c=!1,u.o=a,u.i=null,X()}function nt(a){if(!u.o)return We(a);Object.assign(u.o,a),X()}function ne(){u.o&&(u.o=null,X())}function ue(a,w=!1){u.l!==a&&(u.l=a,o.Se(a),a?(u.i=null,u.c=!1,d=qo(B)):(W(),d?.destroy(),d=null,oe("Comment mode off")),X(),d&&(w&&d.xe(),w?d.se()?D(Bn,Di,!0,!0):D("Nothing here to comment on"):D(`Click anything to comment, or Tab between blocks \xB7 Option-click (Alt-click) to pin \xB7 ${bt} or Esc to finish`,Hi,!0)))}function he(){u.o&&(F.u(u.o.anchor.view)||B.C())?ne():u.i?ae(null):d&&!d.ie()&&ue(!1)}function ot(){if(u.o){Oe()||ne();return}u.i&&ae(null)}async function Ye(a){try{return await e.onName(a),!1}catch(w){if(e.doc.name!==a)throw w;return!0}}async function je(a){let w=u.o;if(w)try{let A=await e.doc.comment(w.anchor,a);u.o=null,_(new Set([A])),ae(A,!0)}catch(A){if(A instanceof Ee){u.o=null,_(new Set([A.id])),ae(A.id,!0),D(ln);return}se(A)}}function Ie(a){let w=l.get(a);if(!w||w.state==="orphaned")return;let A=w.range?xt(w):w.element?[w.element.getBoundingClientRect()]:[];for(let N of A.slice(0,6)){let V=v("div",{class:"pulse"});Fe(V,N,4),n.t.prepend(V),window.setTimeout(()=>V.remove(),1300)}}function xe(){for(let a of L)a.destroy();L=Bi(B),X()}let Ne=()=>{if(!S){for(let a of L)a.S();d?.S(),Y.S(),O=requestAnimationFrame(Ne)}},Ge=a=>{let w=a.composedPath()[0];return w instanceof Element&&w.closest(pe)!==null},rt=a=>{if(a.key==="Escape")return he();if(No(a)&&!a.isComposing&&!a.defaultPrevented&&!Ge(a)){if(a.preventDefault(),d?.We()&&d.xe())return;ue(!u.l,!0)}},$e=a=>{if(B.m(a)||m.has(a))return;let w=window.getSelection();w&&!w.isCollapsed||ot()},h=()=>{n.t.style.setProperty("--pu-pop",`${Ce()}px`);let a=ar(e.root,u.mode==="column");a!==u.mode?(u.mode=a,xe()):X()};function k(){let a=performance.now();p===0&&(y=a),window.clearTimeout(p);let w=Math.min($i,Math.max(0,y+Fi-a));p=window.setTimeout(()=>{p=0,_(),X()},w)}let I=new MutationObserver(a=>{a.every(w=>n.element.contains(w.target))||k()});window.addEventListener("keydown",rt),window.addEventListener("click",$e),window.addEventListener("resize",h),I.observe(e.root,{subtree:!0,childList:!0,characterData:!0});let i=new MutationObserver(()=>an(n.t,Yn(e.root)));for(let a of[document.documentElement,document.body])i.observe(a,{attributes:!0});let f=new ResizeObserver(k);f.observe(e.root);let b=e.doc.onChange((a,w,A)=>{Y.Oe(w,A),_(),X()});return _(),xe(),O=requestAnimationFrame(Ne),{ctx:B,destroy(){S=!0,cancelAnimationFrame(O),cancelAnimationFrame(be),cancelAnimationFrame(J),F.destroy(),window.clearTimeout(te),window.clearTimeout(C),window.clearTimeout(p),window.clearTimeout(P),I.disconnect(),f.disconnect(),i.disconnect(),b(),window.removeEventListener("keydown",rt),window.removeEventListener("click",$e),window.removeEventListener("resize",h),d?.destroy();for(let a of L)a.destroy();Y.destroy(),o.remove(),n.destroy()}}}var tt=null,Vi=4e3;function _i(e={}){if(Ve)return Ve.mount(e);if(!Po())return Promise.reject(new Error("pipeup: another copy of Pipeup owns the add-on queue. Remove one script."));if(tt)return tt;let t=qi(e,()=>t).catch(n=>{throw tt===t&&(tt=null),n});return tt=t,t}function Ui(e,t){return new Promise((n,o)=>{let r=setTimeout(()=>o(new Error("timed out")),t);e.then(n,o).finally(()=>clearTimeout(r))})}async function qi(e,t){let n=document.documentElement.getAttribute("data-pipeup-doc"),{id:o,key:r}=n?await hn(n):{id:`page-${De(location.origin+location.pathname)}`,key:null},s,l=!1,c;if(e.store)s=e.store,c=await ut(s);else try{let d=ft.open();s=await Ui(d,Vi).catch(S=>{throw d.then(C=>C.close(),()=>{}),S}),c=await ut(s)}catch{s=new pt,l=!0,c=await ut(s)}let m=e.name?.trim();m&&m!==c.name&&(c={...c,name:m},await s.saveProfile(c));let u=await dt.open({doc:o,key:r,store:s,identity:c.identity,name:c.name});rn(e.slides??null);let g;try{g=lr({doc:u,root:e.root??document.body,onName:async d=>{u.name=d,c={...c,name:d},await s.saveProfile(c)}})}catch(d){throw rn(null),d}l&&g.ctx.Z("This browser can't keep comments for this page \u2014 copy the comments (Copy as Markdown) to keep them");let E=()=>void u.flush().catch(d=>globalThis.reportError?.(d)),T=Io({surface:g.ctx.addons,doc:u,root:e.root??document.body,ephemeral:l,version:To}),L=!1;return window.addEventListener("pagehide",E),{document:u,flush:()=>u.flush(),unmount:()=>{L||(L=!0,window.removeEventListener("pagehide",E),T(),g.destroy(),rn(null),tt===t()&&(tt=null))}}}export{Wt as ADDON_API,st as ANIMALS,Sn as COLOURS,po as DEFAULT_PROFILE_NAME,ft as IndexedDbStore,pt as MemoryStore,dt as PipeupDocument,Ee as UnsavedChangeError,To as VERSION,Xr as addons,ye as animalName,Mn as copyAll,Ln as copyThread,cn as createIdentity,bn as describeElement,wn as describeRange,at as formatAgo,Be as labelOf,ut as loadOrCreateProfile,kn as locate,_i as mount,fe as nameOf,gr as newDocumentAttribute,Ei as onReveal,hn as parseDocumentAttribute,Rt as resolveAnchor,xi as setViewState,zt as use};
1
+ function e(e){let t="";for(let n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function t(e){let t=atob(e.replace(/-/g,"+").replace(/_/g,"/")),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function n(e){return(new TextEncoder).encode(e)}function o(e){if(null===e||"object"!=typeof e)return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(o).join(",")+"]";let t=e;return"{"+Object.keys(t).filter(e=>void 0!==t[e]).sort().map(e=>JSON.stringify(e)+":"+o(t[e])).join(",")+"}"}function i(e){return e.replace(/\s+/g," ").trim()}function r(e){let t=i(e),n=2166136261;for(let e=0;e<t.length;e++)n^=t.charCodeAt(e),n=Math.imul(n,16777619)>>>0;return n.toString(16).padStart(8,"0")}var a=/^[A-Za-z0-9_-]{43}$/,l=new Map;async function s(){let t=await crypto.subtle.generateKey({name:"Ed25519"},!1,["sign","verify"]);return{publicKey:e(new Uint8Array(await crypto.subtle.exportKey("raw",t.publicKey))),privateKey:t.privateKey}}async function d(t,n){let o=await crypto.subtle.sign({name:"Ed25519"},t.privateKey,n);return e(new Uint8Array(o))}var c=2**40,u=2**47,p=1e4,h=/^[0-9a-f]{8}$/,f=/^[A-Za-z0-9_-]{43}$/,m=/^[A-Za-z0-9_-]{43}$/,v=new Set(["create","reply","edit","delete","resolve","reopen"]);async function g(e,t){if(e.author!==t.publicKey)throw new Error("pipeup: an op must be signed by its author");return{body:e,sig:await d(t,n(o(e)))}}var w=(e,t)=>"string"==typeof e&&e.length<=t,y=e=>!!e&&"object"==typeof e,b=e=>"number"==typeof e&&Number.isFinite(e)&&e>=0&&e<=1;function x(e){if(!y(e))return!1;let{id:t,path:n,fingerprint:o,snapshot:i,quote:r,point:a,view:l}=e;if(!(w(n,2e3)&&w(i,500)&&"string"==typeof o&&h.test(o)&&(void 0===t||w(t,200)&&""!==t)&&(void 0===r||y(r)&&w(r.exact,p)&&""!==r.exact&&w(r.prefix,64)&&w(r.suffix,64))&&(void 0===a||y(a)&&b(a.x)&&b(a.y))))return!1;if(void 0!==l){if(!y(l)||Array.isArray(l))return!1;let e=Object.entries(l);if(e.length>16||!e.every(([e,t])=>e.length<=64&&w(t,200)))return!1}return!0}function k(e){if(!y(e))return!1;let{body:t,sig:n}=e;if("string"!=typeof n||!y(t)||JSON.stringify({body:t,sig:n}).length>262144)return!1;let o=t;return!(1!==o.v||"string"!=typeof o.id||!f.test(o.id)||!v.has(o.kind)||!w(o.doc,64)||""===o.doc||"string"!=typeof o.thread||!f.test(o.thread)||"string"!=typeof o.author||!m.test(o.author)||"string"!=typeof o.name||o.name.length>80||o.name!==o.name.trim()||"number"!=typeof o.clock||!Number.isSafeInteger(o.clock)||o.clock<1||o.clock>c||"number"!=typeof o.at||!Number.isSafeInteger(o.at)||o.at<0||o.at>u||void 0!==o.text&&(!w(o.text,1e4)||o.text!==o.text.trim())||void 0!==o.target&&("string"!=typeof o.target||!f.test(o.target))||("create"===o.kind||"reply"===o.kind||"edit"===o.kind)&&!o.text||("reply"===o.kind||"edit"===o.kind||"delete"===o.kind)&&!o.target||"create"===o.kind&&(o.id!==o.thread||!x(o.anchor)))}function E(i){return async function(n,o,i){if(!a.test(n))return!1;try{if(e(t(n))!==n)return!1;let r=l.get(n);if(!r){l.size>=512&&l.delete(l.keys().next().value),r=crypto.subtle.importKey("raw",t(n),{name:"Ed25519"},!0,["verify"]),l.set(n,r);let e=r;e.catch(()=>{l.get(n)===e&&l.delete(n)})}return await crypto.subtle.verify({name:"Ed25519"},await r,t(i),o)}catch{return!1}}(i.body.author,n(o(i.body)),i.sig)}function S(e,t){return e.body.clock!==t.body.clock?e.body.clock-t.body.clock:e.body.at!==t.body.at?e.body.at-t.body.at:e.body.author!==t.body.author?e.body.author<t.body.author?-1:1:e.body.id!==t.body.id?e.body.id<t.body.id?-1:1:0}function $(e,t,n,o,i){return{id:e,author:t,name:n,text:o,at:i,edited:!1,deleted:!1,replies:[]}}async function L(t){let i={...t,id:void 0,thread:"create"===t.kind?void 0:t.thread},r=await crypto.subtle.digest("SHA-256",n(o(i)));return e(new Uint8Array(r))}var M=class{constructor(e){this.doc=e}ops=new Map;clock=0;createAt=new Map;threadAt=new Map;get size(){return this.ops.size}all(){return[...this.ops.values()]}threads(){return function(e){let t=new Map,n=new Map,o=new Map;for(let{body:i}of[...e].sort(S)){if(i.name&&o.set(i.author,i.name),"create"===i.kind){if(t.has(i.id)||!i.anchor||void 0===i.text)continue;let e=$(i.id,i.author,i.name,i.text,i.at);t.set(i.id,{id:i.id,anchor:i.anchor,root:e,resolved:!1}),n.set(i.id,{comment:e,thread:i.id});continue}let e=t.get(i.thread);if(!e)continue;if("resolve"===i.kind||"reopen"===i.kind){e.resolved="resolve"===i.kind;continue}let r=i.target?n.get(i.target):void 0;if(r&&r.thread===i.thread){if("reply"===i.kind){if(n.has(i.id)||void 0===i.text)continue;let t=$(i.id,i.author,i.name,i.text,i.at);e.root.replies.push(t),n.set(i.id,{comment:t,thread:i.thread});continue}i.author!==r.comment.author||r.comment.deleted||("edit"===i.kind&&void 0!==i.text&&(r.comment.text=i.text,r.comment.edited=!0),"delete"===i.kind&&(r.comment.text="",r.comment.deleted=!0))}}for(let{comment:e}of n.values())e.name||(e.unnamed=!0,e.name=o.get(e.author)??"");return[...t.values()]}(this.ops.values())}async add(e){let t=[];for(let n of e){if(!k(n)||n.body.doc!==this.doc||this.ops.has(n.body.id)||n.body.id!==await L(n.body)||!await E(n))continue;let e={body:n.body,sig:n.sig};this.ops.set(e.body.id,e),this.clock=Math.max(this.clock,e.body.clock),"create"===e.body.kind&&this.createAt.set(e.body.author,Math.max(this.createAt.get(e.body.author)??0,e.body.at)),this.threadAt.set(e.body.thread,Math.max(this.threadAt.get(e.body.thread)??0,e.body.at)),t.push(e)}return t}async append(e,t,n){let o={v:1,...n,id:"",thread:"create"===n.kind?"":n.thread,doc:this.doc,author:e.publicKey,name:t,clock:Math.min(this.clock+1,c),at:Math.min(Math.max(Date.now(),"create"===n.kind?(this.createAt.get(e.publicKey)??0)+1:(this.threadAt.get(n.thread)??0)+1),u)};o.id=await L(o);let i=this.ops.get(o.id);if(i)return i;"create"===o.kind&&(o.thread=o.id);let[r]=await this.add([await g(o,e)]);if(!r)throw new Error("pipeup: could not record this change");return r}},C=["Otter","Fox","Owl","Bear","Rabbit"],A=["Red","Orange","Yellow","Green","Teal","Blue","Purple","Pink","Brown","Grey"];function T(e){let t=2166136261;for(let n=0;n<e.length;n++)t=Math.imul(t^e.charCodeAt(n),16777619);return t=Math.imul(t^t>>>16,2246822507),t=Math.imul(t^t>>>13,3266489909),(t^t>>>16)>>>0}var P=e=>T(e)%C.length,N=e=>Math.floor(T(e)/C.length)%A.length,q=e=>`${A[N(e)]} ${C[P(e)]}`,z=e=>e.name||q(e.author),R="AI assistant",O=e=>e===R||e.startsWith(`${R} `),D=/^([A-Za-z0-9_-]{16}):([A-Za-z0-9_-]{43})$/;function F(){return`${function(t=16){return e(crypto.getRandomValues(new Uint8Array(t)))}(12)}:${e(crypto.getRandomValues(new Uint8Array(32)))}`}async function B(e){let n=D.exec(e.trim()),o=n?.[1],i=n?.[2];if(!o||!i)throw new Error('pipeup: data-pipeup-doc must look like "<id>:<key>", as made by newDocumentAttribute()');return{id:o,key:await crypto.subtle.importKey("raw",t(i),{name:"AES-GCM"},!1,["encrypt","decrypt"])}}async function I(t,o,i){let r=crypto.getRandomValues(new Uint8Array(12)),a=await crypto.subtle.encrypt({name:"AES-GCM",iv:r,additionalData:n(i)},t,n(o));return{iv:e(r),data:e(new Uint8Array(a))}}var H=e=>`pipeup-file:${e}`;var W=/^[a-z][a-z0-9-]{1,23}\/[a-z][a-z0-9-]{0,31}$/,j=class extends Error{constructor(e,t,n=1){super("pipeup: shown here, but not saved yet"),this.id=e,this.cause=t,this.count=n,this.name="UnsavedChangeError"}},K=class e{constructor(e,t){this.log=e,this.options=t,this.displayName=t.name.trim()?U(t.name):""}listeners=new Set;cache=[];comments=new Map;displayName;le=Promise.resolve();unsaved=[];static async open(t){if("string"!=typeof t.doc||""===t.doc||t.doc.length>64)throw new Error("pipeup: the document id must be 1 to 64 characters");let n=new M(t.doc),o=await t.store.load(t.doc),i=o.length-(await n.add(o)).length;i&&console.warn(`pipeup: ${i} saved change${1===i?"":"s"} on this page couldn't be read; kept as saved`);let r=new e(n,t);return r.refresh(!1),r}get id(){return this.options.doc}get me(){return this.options.identity.publicKey}get name(){return this.displayName}set name(e){this.displayName=U(e),this.refresh(!0,[],"")}threads(){return this.cache}ops(){return this.log.all()}onChange(e){return this.listeners.add(e),()=>this.listeners.delete(e)}comment(e,t){return this.enqueue(()=>this.write({kind:"create",anchor:e,text:V(t)}))}reply(e,t){return this.enqueue(()=>this.write({kind:"reply",thread:this.find(e).thread,target:e,text:V(t)}))}edit(e,t){return this.enqueue(async()=>{let{thread:n}=this.mine(e);await this.write({kind:"edit",thread:n,target:e,text:V(t)})})}remove(e){return this.enqueue(async()=>{let{thread:t}=this.mine(e);await this.write({kind:"delete",thread:t,target:e})})}resolve(e){return this.enqueue(async()=>{await this.write({kind:"resolve",thread:this.thread(e)})})}reopen(e){return this.enqueue(async()=>{await this.write({kind:"reopen",thread:this.thread(e)})})}sign(e,t){if(!W.test(e))throw new Error('pipeup: a signing purpose looks like "<add-on id>/<name>"');return d(this.options.identity,n(`pipeup:${e}\n${t}`))}flush(){return this.enqueue(()=>this.persist())}exportFile(){return async function(e,t,n){let o=n?{pipeup:1,doc:e,sealed:!0,...await I(n,JSON.stringify(t),H(e))}:{pipeup:1,doc:e,sealed:!1,ops:t};return JSON.stringify(o,null,2)}(this.options.doc,this.log.all(),this.options.key)}async importFile(e){return this.merge(await async function(e,o,i){if(e.length>5e6)throw new Error("pipeup: this feedback file is too large");let r,a,l;try{r=JSON.parse(e)}catch{throw new Error("pipeup: this is not an Pipeup feedback file")}if(!r||"object"!=typeof r||1!==r.pipeup||"string"!=typeof r.doc)throw new Error("pipeup: this is not an Pipeup feedback file");if(r.doc!==o)throw new Error("pipeup: this feedback is for a different document");if(!r.sealed)return Array.isArray(r.ops)?r.ops:[];if(!i)throw new Error("pipeup: this feedback is sealed, and this page has no document key");if("string"!=typeof r.iv||"string"!=typeof r.data)throw new Error("pipeup: this is not an Pipeup feedback file");try{a=await async function(e,o,i){try{let r=await crypto.subtle.decrypt({name:"AES-GCM",iv:t(o.iv),additionalData:n(i)},e,t(o.data));return(new TextDecoder).decode(r)}catch{throw new Error("pipeup: this feedback could not be opened with this document")}}(i,{iv:r.iv,data:r.data},H(o))}catch{throw new Error("pipeup: this feedback could not be opened with this document's key")}try{l=JSON.parse(a)}catch{throw new Error("pipeup: this is not an Pipeup feedback file")}return Array.isArray(l)?l:[]}(e,this.options.doc,this.options.key),"file")}merge(e,t){return e.length>5e3?Promise.reject(new RangeError("pipeup: too many changes to merge at once")):this.enqueue(async()=>{let n=await this.log.add([...e]);this.unsaved.push(...n),n.length>0&&this.refresh(!0,n,t);try{await this.persist()}catch(e){throw n.length>0?new j(n[0].body.id,e,n.length):e}return n.length})}enqueue(e){let t=this.le.then(e);return this.le=t.catch(()=>{}),t}async write(e){let t=await this.log.append(this.options.identity,this.displayName,e);this.unsaved.push(t),this.refresh(!0,[t],"local");try{await this.persist()}catch(e){throw new j(t.body.id,e)}return t.body.id}async persist(){if(0===this.unsaved.length)return;let e=[...this.unsaved];await this.options.store.append(this.options.doc,e),this.unsaved=this.unsaved.filter(t=>!e.includes(t))}refresh(e,t=[],n=""){this.cache=this.log.threads(),this.comments.clear();let o=(e,t)=>{e.unnamed&&e.author===this.me&&this.displayName&&(e.name=this.displayName),this.comments.set(e.id,{comment:e,thread:t});for(let n of e.replies)o(n,t)};for(let e of this.cache)o(e.root,e.id);if(e)for(let e of this.listeners)try{e(this.cache,t,n)}catch(e){globalThis.reportError?.(e)}}find(e){let t=this.comments.get(e);if(!t)throw new Error("pipeup: there is no comment with that id");return t}mine(e){let t=this.find(e);if(t.comment.author!==this.me)throw new Error("pipeup: only the writer can change a comment");return t}thread(e){if(!this.cache.some(t=>t.id===e))throw new Error("pipeup: there is no thread with that id");return e}};function V(e){let t=e.trim();if(!t)throw new Error("pipeup: a comment needs some words");if(t.length>1e4)throw new Error("pipeup: comments are limited to 10000 characters");return t}function U(e){let t=e.replace(/\s+/g," ").trim();if(!t||t.length>80)throw new Error("pipeup: choose a name of 1 to 80 characters");if(O(t))throw new Error("pipeup: that name is kept for AI replies; choose another");return t}var Y=class{docs=new Map;profile=null;async load(e){return[...this.docs.get(e)?.values()??[]]}async append(e,t){let n=this.docs.get(e);n||this.docs.set(e,n=new Map);for(let e of t)n.set(e.body.id,e)}async loadProfile(){return this.profile}async saveProfile(e){this.profile=e}async saveProfileIfAbsent(e){return this.profile||(this.profile=e),this.profile}},_="";async function G(e,t=""){let n=await e.loadProfile();if(n)return"Reviewer"===n.name?{...n,name:""}:n;let o={identity:await s(),name:t};return e.saveProfileIfAbsent(o)}var J=class e{constructor(e){this.db=e}static open(t="pipeup"){return new Promise((n,o)=>{let i=indexedDB.open(t,1);i.onupgradeneeded=()=>{let e=i.result;e.createObjectStore("ops",{keyPath:["doc","id"]}).createIndex("doc","doc"),e.createObjectStore("meta")},i.onsuccess=()=>{let t=i.result;t.onversionchange=()=>t.close(),n(new e(t))},i.onerror=()=>o(i.error??new Error("pipeup: could not open local storage"))})}close(){this.db.close()}async load(e){return(await this.request("ops","readonly",t=>t.index("doc").getAll(e))).map(e=>e.op)}async append(e,t){if(0===t.length)return;let n=this.db.transaction("ops","readwrite"),o=n.objectStore("ops"),i=X(n);try{for(let n of t)o.put({doc:e,id:n.body.id,op:n})}catch(e){throw n.abort(),i.catch(()=>{}),e}await i}async loadProfile(){return await this.request("meta","readonly",e=>e.get("profile"))??null}async saveProfile(e){await this.request("meta","readwrite",t=>t.put(e,"profile"))}async saveProfileIfAbsent(e){let t=this.db.transaction("meta","readwrite"),n=t.objectStore("meta"),o=X(t),i=e,r=n.get("profile");return r.onsuccess=()=>{r.result?i=r.result:n.put(e,"profile")},await o,i}request(e,t,n){return new Promise((o,i)=>{let r=n(this.db.transaction(e,t).objectStore(e));r.onsuccess=()=>o(r.result),r.onerror=()=>i(r.error??new Error("pipeup: local storage request failed"))})}};function X(e){return new Promise((t,n)=>{e.oncomplete=()=>t(),e.onerror=()=>n(e.error??new Error("pipeup: local storage write failed")),e.onabort=()=>n(e.error??new Error("pipeup: local storage write aborted"))})}function Z(e){let t=(e.ownerDocument??e).createTreeWalker(e,NodeFilter.SHOW_TEXT),n=[],o="";for(let e=t.nextNode();e;e=t.nextNode())n.push({node:e,start:o.length}),o+=e.data;return{text:o,nodes:n}}function Q(e,t,n){let o=(e.ownerDocument??e).createRange();return o.setStart(e,0),o.setEnd(t,n),o.toString().length}function ee(e,t,n){let o=te(e,t,!1),i=te(e,n,!0);if(!o||!i||n<t)return null;let r=o.node.ownerDocument.createRange();return r.setStart(o.node,o.offset),r.setEnd(i.node,i.offset),r}function te(e,t,n){let o=e.nodes.find(e=>t>=e.start&&t<e.start+e.node.data.length+Number(n));return o&&{node:o.node,offset:t-o.start}}function ne(e){return e.nodeType===Node.ELEMENT_NODE?e:e.parentElement}function oe(e,t){for(let n=ne(e)?.closest("[data-pipeup-id]")??null;n;){if(!t.contains(n))return null;let e=n.getAttribute("data-pipeup-id")??"";if(""!==e&&e.length<=200)return n;n=n.parentElement?.closest("[data-pipeup-id]")??null}return null}function ie(e,t,n){return e.slice(t,n).replace(/^[\uDC00-\uDFFF]|[\uD800-\uDBFF]$/g,"")}function re(e,t){let n=function(e,t){if(e===t)return"";let n=[];for(let o=t;o&&o!==e;o=o.parentElement){let e=1;for(let t=o.previousElementSibling;t;t=t.previousElementSibling)t.tagName===o.tagName&&e++;n.unshift(`${o.tagName.toLowerCase()}:nth-of-type(${e})`)}return":scope > "+n.join(" > ")}(e,t);if(n.length>2e3)throw new Error("pipeup: this element is nested too deeply to comment on — give a nearby container a data-pipeup-id");return n}function ae(e){if(!x(e))throw new Error("pipeup: could not describe this place on the page");return e}function le(e,t){let n=ne(e),o=n?.closest("p,li,h1,h2,h3,h4,h5,h6,td,th,blockquote,pre,figcaption,dt,dd,summary,caption")??null;return o&&t.contains(o)?o:n&&t.contains(n)?n:t}function se(e,t,n){if(!t.contains(e.commonAncestorContainer))throw new Error("pipeup: the selection is outside the commentable area");let o=oe(e.commonAncestorContainer,t),a=o??t,{text:l}=Z(a),s=Q(a,e.startContainer,e.startOffset),d=Q(a,e.endContainer,e.endOffset),c=l.slice(s,d);if(""===c)throw new Error("pipeup: select some text to comment on");if(c.length>p)throw new Error("pipeup: selections are limited to 10000 characters");let u=ie(l,Math.max(0,s-32),s),h=ie(l,d,d+32);return ae({...o?{id:o.getAttribute("data-pipeup-id")??""}:{},path:"",quote:{exact:c,prefix:u,suffix:h},...n?{view:n}:{},fingerprint:r(le(e.startContainer,t).textContent??""),snapshot:ie(i(u+c+h),0,200)})}function de(e,t,n,o){let a=oe(e,t);return ae({...a?{id:a.getAttribute("data-pipeup-id")??""}:{},path:re(a??t,e),...n?{point:{x:ce(n.x),y:ce(n.y)}}:{},...o?{view:o}:{},fingerprint:r(e.textContent??""),snapshot:ie(i(e.textContent??""),0,200)})}function ce(e){return Number.isFinite(e)?Math.min(1,Math.max(0,e)):0}function ue(e,t,n){let o=Array.from({length:t.length+1},(e,t)=>t),i=[...o],r=[t.length];for(let a=1;a<=e.length;a++){i[0]=n?0:a;for(let n=1;n<=t.length;n++){let r=e.charCodeAt(a-1)===t.charCodeAt(n-1)?0:1;i[n]=Math.min(o[n]+1,i[n-1]+1,o[n-1]+r)}r.push(i[t.length]),[o,i]=[i,o]}return r}var pe=(e,t)=>ue(e,t,!1).pop(),he={state:"orphaned",element:null,range:null};function fe(e,t,n={}){let o=e.id?function(e,t){for(let n of e.querySelectorAll("[data-pipeup-id]"))if(n.getAttribute("data-pipeup-id")===t)return n;return null}(t,e.id):t;return e.quote?function(e,t,n,o,i){let a=n??o,l=Z(a),s=function(e,t){if(!t.exact)return-1;let n=-1,o=-1;for(let i=e.indexOf(t.exact);-1!==i;i=e.indexOf(t.exact,i+1)){let r=e.slice(Math.max(0,i-t.prefix.length),i),a=e.slice(i+t.exact.length,i+t.exact.length+t.suffix.length),l=ve(r,t.prefix)+me(a,t.suffix);l>o&&(n=i,o=l)}return n}(l.text,t);if(s>=0){let i=ee(l,s,s+t.exact.length);if(i){let t=le(i.startContainer,o);return{state:null!==n&&r(t.textContent??"")===e.fingerprint?"attached":"moved",element:t,range:i}}}if(i){let e=a===o?l:Z(o);if(e.text.length<=5e4&&t.exact.length>=12&&t.exact.length<=300){let n=function(e,t,n){let o=t.length;if(0===o)return null;let i=-1,r=1/0;if(ue(e,t,!0).forEach((e,t)=>{t&&e<r&&(r=e,i=t)}),r>n)return null;let a=Math.max(0,i-o),l=1/0;for(let r=Math.max(0,i-o-n);r<=Math.min(i,i-o+n);r++){let n=pe(e.slice(r,i),t);n<l&&(l=n,a=r)}return{start:a,end:i,distance:l}}(e.text,t.exact,Math.floor(t.exact.length/4)),i=n?ee(e,n.start,n.end):null;if(i)return{state:"moved",element:le(i.startContainer,o),range:i}}}return he}(e,e.quote,o,t,!1!==n.fuzzy):function(e,t){if(!t)return he;let n=t;if(e.path){if(!e.path.startsWith(":scope > "))return he;try{n=t.querySelector(e.path)}catch{return he}}return n?{state:r(n.textContent??"")===e.fingerprint?"attached":"moved",element:n,range:null}:he}(e,o)}function me(e,t){let n=0;for(;n<e.length&&n<t.length&&e[n]===t[n];)n++;return n}function ve(e,t){let n=0;for(;n<e.length&&n<t.length&&e[e.length-1-n]===t[t.length-1-n];)n++;return n}var ge={A:"Link",BUTTON:"Button",P:"Paragraph",LI:"List item",IMG:"Image",TABLE:"Table",TD:"Cell",TH:"Cell",FIGURE:"Figure",SVG:"Graphic",CANVAS:"Graphic",LABEL:"Label",INPUT:"Field",SELECT:"Field",TEXTAREA:"Field",SUMMARY:"Question",BLOCKQUOTE:"Quote",SECTION:"Section",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading"};function we(e){return e.getAttribute("data-pipeup-label")||ge[e.tagName.toUpperCase()]||"Block"}function ye(e){return Ee(i(e.getAttribute("aria-label")??e.getAttribute("alt")??e.innerText??e.textContent??""),40)}function be(e){let t=e.getAttribute("data-pipeup-label");if(t)return t;let n=ye(e);return n?`${we(e)} · ${n}`:we(e)}function xe(e,t,n){let o=e.id??null,r=e.quote?.exact??null,a=e.point?`${Math.round(100*e.point.x)}% across, ${Math.round(100*e.point.y)}% down the element`:null,l=t.element;if("orphaned"===t.state||!l)return{where:`No longer on the page (it read: "${e.snapshot}")`,element:null,id:o,quote:r,pin:a};let s=[],d=e.view?.slide;if(d){let e=l.closest("[data-pipeup-slide]")?.querySelector("h1,h2,h3")?.textContent;s.push(`Slide ${d}`+(e?` "${Ee(i(e))}"`:""))}else{let t=ke(e.view);t&&s.push(t);let o=function(e,t){let n=null;for(let o of t.querySelectorAll("h1,h2,h3")){if(o===e||o.contains(e))break;if(!(4&o.compareDocumentPosition(e)))break;n=o}return n}(l,n);o&&s.push(`Section "${Ee(i(o.textContent??""))}"`)}let c=be(l);return s.push(c),{where:s.join(" › "),element:c,id:o,quote:r,pin:a}}function ke(e){return e?e.label||Object.entries(e).filter(([e,t])=>t&&"slide"!==e).map(([,e])=>e).join(" · "):""}function Ee(e,t=60){return e.length>t?e.slice(0,t-1)+"…":e}var Se="Each thread says where it is: the slide or section, the element (its data-pipeup-id attribute in the HTML), and the exact quoted text or pin position. Work through the open threads in order, and for each one say what you changed or why you did not.";function $e(e,t){let n=Math.max(0,Math.round((t-e)/1e3));if(n<60)return"just now";let o=Math.round(n/60);if(o<60)return`${o}m ago`;let i=Math.round(o/60);return i<48?`${i}h ago`:`${Math.round(i/24)}d ago`}function Le(e,t,n,o){return"ai"===t?Ae(e,"## Comment thread",o,n):Te(e)}function Me(e,t,n){let o=e.filter(e=>!e.thread.resolved);if("text"===t)return o.map(Te).join("\n");let i=e.length-o.length,r=[`# Review comments: ${Ce(n.title)}`,"",`- **Page:** ${Ce(n.url)}`,`- **Exported:** ${n.exportedAt.toISOString()}`,`- **Open threads:** ${o.length}${i?` (${i} resolved, not included)`:""}`,"",Se,"",""].join("\n"),a=n.exportedAt.getTime();return r+o.map((e,t)=>Ae(e,`## Thread ${t+1}`,a)).join("\n")}function Ce(e){return e.replace(/\s+/g," ").trim()}function Ae(e,t,n,o){let{thread:i,location:r}=e,a=i.root.replies.length,l=[`${t} · ${i.resolved?"resolved":"open"}`];if(l.push(`- **Thread:** ${i.id}`),o&&l.push(`- **Page:** ${Ce(o)}`),l.push(`- **Where:** ${Ce(r.where)}`),r.id){let e=Ce(r.id.replace(/`/g,""));l.push(`- **Element:** \`[data-pipeup-id="${e}"]\`${r.element?` (${Ce(r.element)})`:""}`)}r.quote&&l.push(`- **Quoted text:** "${Ce(r.quote)}"`),r.pin&&l.push(`- **Pin:** ${Ce(r.pin)}`),l.push(`- **Started by:** ${Ce(z(i.root))}, ${$e(i.root.at,n)}${a?` · ${a} ${1===a?"reply":"replies"}`:""}`,"",`**${Ce(z(i.root))}** (${$e(i.root.at,n)}): ${Pe(i.root," ")}`);for(let e of i.root.replies)l.push(`- **${Ce(z(e))}** (${$e(e.at,n)}): ${Pe(e," ")} \x3c!-- comment:${e.id} --\x3e`);return l.join("\n")+"\n"}function Te(e){let{thread:t,location:n}=e,o=[Ce(n.where)+(n.quote?`, on the text "${Ce(n.quote)}"`:""),`${Ce(z(t.root))}: ${Pe(t.root," ")}`];for(let e of t.root.replies)o.push(` ${Ce(z(e))}: ${Pe(e," ")}`);return o.join("\n")+"\n"}function Pe(e,t){return e.deleted?"(deleted)":e.text.replace(/\r\n|\r|\n/g,"\n"+t)+(e.edited?" (edited)":"")}var Ne="0.5.3",qe=new Map,ze=new Map,Re=new Map,Oe={},De=e=>`${qe.get(e)??""}|${ze.get(e)??""}`;function Fe(e,t={},...n){let o=document.createElement(e);for(let[e,n]of Object.entries(t))void 0===n||!1===n||("class"===e?o.className=String(n):o.setAttribute(e,!0===n?"":n));for(let e of n)null!=e&&!1!==e&&o.append(e);return o}function Be(e,t){let n=e.getRootNode().activeElement;t&&n instanceof HTMLElement&&e.contains(n)&&n.blur(),e.inert=t}function Ie(e,t,n=null){let o=e.getRootNode().activeElement,i=!1;for(let o=t.length;o--;n=t[o])t[o].nextSibling!==n&&(i=!!e.insertBefore(t[o],n));return i&&o&&t.some(e=>e.contains(o))&&o.focus({preventScroll:!0}),i}var He=()=>{let e=window.getSelection();return e&&!e.isCollapsed&&e.toString().trim()?e:null};function We(e,t){return e.length>t?e.slice(0,t-1)+"…":e}function je(e,t,n=4){e.style.left=t.left-n+"px",e.style.top=t.top-n+"px",e.style.width=`${t.width+2*n}px`,e.style.height=`${t.height+2*n}px`}var Ke=/\bhttps?:\/\/[^\s<>"'`]+/gi,Ve=/[\u202A-\u202E\u2066-\u2069]/;function Ue(e){let t=0,n=0;for(let o of e)"("===o?t++:")"===o&&n++;let o=e.length;for(;o>0;){let i=e[o-1];if(")"===i&&n>t)n--;else if(!".,;:!?'\"]}".includes(i))break;o--}return e.slice(0,o)}function Ye(e){let t=[],n=e.split("\n").filter(e=>{let n=/^\[(\d{1,2})\]:?\s+(\S+)(?:\s+([^|]{1,40}?))?(?:\s*\|\s*(.{1,300}))?$/.exec(e.trim()),o=n?.[2]?function(e){return/^slide:\d{1,4}$/.test(e)||/^quote:\S{1,300}$/.test(e)?e:function(e){if(e.length>2048||Ve.test(e))return null;try{let t=new URL(e);return"http:"===t.protocol||"https:"===t.protocol?t.href:null}catch{return null}}(e)}(n[2]):null;return n?.[1]&&o&&t.push({n:n[1],to:o,label:n[3]?.trim()??"",says:n[4]?.trim()??""}),!(n?.[1]&&o)}).join("\n").replace(/\s*\[\d{1,2}\]/g,"").trim();if(!t.length)return _e(e);let o=t.slice(0,4).map(e=>{let t=e.to.startsWith("slide:"),n=e.label||(t?`Slide ${e.to.slice(6)}`:`[${e.n}]`),o=[t?Fe("i",{class:"sl"}):null,Fe("span",{},t||""===e.label?n:`[${e.n}] ${n}`),e.says?Fe("span",{class:"rc",role:"tooltip"},e.says):null];if(/^https?:/.test(e.to)){let t=Fe("a",{class:"ref",href:e.to,target:"_blank",rel:"noopener noreferrer",title:e.says?void 0:e.to},...o);return t.addEventListener("click",e=>e.stopPropagation()),t}let i=Fe("button",{class:"ref",type:"button",title:e.says?void 0:t?n:`Show where: ${n}`},...o);return i.addEventListener("click",t=>{t.stopPropagation(),Oe.go?.(e.to)}),i});return[..._e(n),Fe("div",{class:"refs"},...o)]}function _e(e){let t=[],n=0;for(let o of e.matchAll(Ke)){if(o[0].length>2048||Ve.test(o[0]))continue;let i,r=Ue(o[0]),a=o.index??0;try{let e=new URL(r);if("http:"!==e.protocol&&"https:"!==e.protocol)continue;i=e.href}catch{continue}a>n&&t.push(e.slice(n,a));let l=Fe("a",{href:i,target:"_blank",rel:"noopener noreferrer"},r);l.addEventListener("click",e=>e.stopPropagation()),t.push(l),n=a+r.length}return n<e.length&&t.push(e.slice(n)),t}var Ge="http://www.w3.org/2000/svg",Je={comment:["M20.5 11.5a8 8 0 0 1-11.7 7.1L4 19.8l1.2-4.4A8 8 0 1 1 20.5 11.5z","M12.3 8.2v6.6M9 11.5h6.6"],send:["M21 12L3.5 4.5 6.2 12l-2.7 7.5zM6.2 12H13"],copy:["M10 8h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-8a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2z","M16 8V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h2"],resolve:["M5 12.5l4.5 4.5L19 7.5"],reopen:["M3 12a9 9 0 1 0 3-6.7","M3 4v5h5"],lines:["M4 7h16M4 12h10M4 17h7"],list:["M3 6.5a1.5 1.5 0 1 0 3 0a1.5 1.5 0 1 0-3 0M3 12a1.5 1.5 0 1 0 3 0a1.5 1.5 0 1 0-3 0M3 17.5a1.5 1.5 0 1 0 3 0a1.5 1.5 0 1 0-3 0M9 6.5h11M9 12h11M9 17.5h7"],expand:["M14 4h6v6M20 4l-6 6M10 20H4v-6M4 20l6-6M20 14v6h-6M20 20l-6-6M4 10V4h6M4 4l6 6"],pin:["M6 18v-6a6 6 0 1 1 6 6z"],shrink:["M20 10h-6V4M14 10l6-6M4 14h6v6M10 14l-6 6M14 20v-6h6M14 14l6 6M10 4v6H4M10 10L4 4"],bubble:["M20.5 11.5a8 8 0 0 1-11.7 7.1L4 19.8l1.2-4.4A8 8 0 1 1 20.5 11.5z"],close:["M6 6l12 12M18 6L6 18"],edit:["M4 20h4L19 9l-4-4L4 16z"]};function Xe(e,t=15,n){let o=Ze(Je[e],t);return n&&o.setAttribute("stroke-width",String(n)),o}function Ze(e,t){let n=document.createElementNS(Ge,"svg"),o={width:String(t),height:String(t),viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.8","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"};for(let[e,t]of Object.entries(o))n.setAttribute(e,t);for(let t of e){let e=document.createElementNS(Ge,"path");e.setAttribute("d",t),n.append(e)}return n}var Qe=(e,t,n)=>`M${e} ${t}a${n} ${n} 0 1 0 ${2*n} 0a${n} ${n} 0 1 0 -${2*n} 0`,et={Otter:"M4 13.2C4 9.2 7.6 6.5 12 6.5s8 2.7 8 6.7-3.6 6.3-8 6.3-8-2.3-8-6.3zM5.6 9.6a1.8 1.8 0 1 1 2.7-2.3M18.4 9.6a1.8 1.8 0 1 0-2.7-2.3M9.2 11.6h.01M14.8 11.6h.01M11 14h2l-1 1zM9.8 15.8l-3.2.4M9.9 17l-2.7 1.1M14.2 15.8l3.2.4M14.1 17l2.7 1.1",Fox:"M3.5 4l5 3.5h7l5-3.5-1.5 8.5L12 20l-7-7.5zM9 12h.01M15 12h.01M12 17h.01",Owl:`M5 4.5l3 2.5h8l3-2.5V14a7 7 0 0 1-14 0z${Qe(7.4,11.5,1.9)}${Qe(12.8,11.5,1.9)}M11.3 14.6l.7 1 .7-1`,Bear:`${Qe(5,13.5,7)}M8.9 7.22A2.8 2.8 0 1 0 5.89 10.09M18.11 10.09A2.8 2.8 0 1 0 15.1 7.22M9.4 12.6h.01M14.6 12.6h.01M10.3 16.4c0-1 .8-1.6 1.7-1.6s1.7.6 1.7 1.6-.8 1.6-1.7 1.6-1.7-.6-1.7-1.6z`,Rabbit:`${Qe(6.5,15.5,5.5)}M9.6 10.5C8.2 6.5 8.4 2.5 9.8 2.5s2.4 3.5 1.6 7.5M14.4 10.5c1.4-4 1.2-8-.2-8s-2.4 3.5-1.6 7.5M10 15h.01M14 15h.01M11.3 17.3l.7.5.7-.5`};function tt(e){let t=/[\p{L}\p{N}]/u.exec(e);if(!t)return"";let n=t[0].toUpperCase();return 1===[...n].length?n:t[0]}var nt=(e,t)=>tt(t)||q(e);function ot(e,t,n=!1){return O(t)?Fe("span",{class:n?"av ai busy":"av ai","aria-hidden":"true"},"AI"):Fe("span",{class:`av c${N(e)}`,"aria-hidden":"true","data-animal":q(e)},tt(t)||Ze([et[C[P(e)]]],24))}function it(e,t){setTimeout(()=>{e.remove(),t?.()},320)}function rt(e){return requestAnimationFrame(()=>{e.offsetWidth,e.classList.add("in")}),e}var at=null,lt=e=>{at=e},st="pu-source";function dt(e){let t=Fe("textarea",{class:"input",rows:"1","aria-label":e.label}),n=Fe("button",{class:"send",type:"button","aria-label":"Send",title:"Send",inert:!0},Xe("send")),o=Fe("span",{class:"tools"});o.hidden=!0;let i=Fe("div",{class:"row"},e.before,t,o,n),r=e.kind??"comment",a=!1,l=new Set,s=()=>{for(let e of[...l])e()},d=()=>{let e=""!==t.value.trim();n.classList.toggle("show",e),n.inert=!e,t.style.height="auto",t.style.height=`${Math.max(27,t.scrollHeight)}px`},c=()=>{let e=-1,n=0,o=(o,i)=>{e<0&&(e=t.selectionStart,n=0);let r=t.value.slice(0,e),a=o&&r&&!/\s$/.test(r)&&!/^\s/.test(o)?" ":"";t.setRangeText(a+o,e,e+n,"end"),n=a.length+o.length,i&&(e=-1),d()};return{update:e=>o(e,!1),commit:e=>o(e,!0),cancel:()=>{e>=0&&n&&t.setRangeText("",e,e+n,"end"),e=-1,n=0,d()}}},u=new Map,p=()=>{let n=(at?.tools()??[]).filter(e=>!1!==e.available?.());for(let[e,t]of u)n.some(t=>t.id===e)||(t.remove(),u.delete(e));for(let a of n){if(u.has(a.id))continue;let n=Fe("button",{class:"ib tool",type:"button","aria-label":a.label,title:a.label,"aria-pressed":"false"},Ze(a.icon,15));n.addEventListener("mousedown",e=>e.preventDefault()),n.addEventListener("click",o=>{o.stopPropagation();try{a.press({kind:r,thread:e.thread?.()??null,text:()=>t.value,focus:()=>t.focus({preventScroll:!0}),connected:()=>i.isConnected,setPressed:e=>n.setAttribute("aria-pressed",String(e)),dictate:c,onEnd:e=>(l.add(e),()=>l.delete(e))})}catch(e){globalThis.reportError?.(e)}}),u.set(a.id,n),o.append(n)}o.hidden=0===u.size};p(),i.addEventListener(st,p);let h=async()=>{let o=t.value.trim();if(o&&!a){a=!0;try{await e._(o),n.matches(":focus")&&t.focus(),t.value="",d(),s()}catch{}finally{a=!1}}};return i.addEventListener("mousedown",e=>{e.target===t||n.contains(e.target)||o.contains(e.target)||(e.preventDefault(),t.focus({preventScroll:!0}),t.setSelectionRange(t.value.length,t.value.length))}),t.addEventListener("input",d),t.addEventListener("keydown",n=>{n.stopPropagation(),"Enter"!==n.key||n.shiftKey||n.isComposing?"Escape"===n.key&&(n.preventDefault(),t.value="",d(),t.blur(),s(),e.q?.()):(n.preventDefault(),h())}),n.addEventListener("click",e=>{e.stopPropagation(),h()}),{element:i,input:t,focus:()=>t.focus({preventScroll:!0})}}var ct=1,ut=["sync","menu","notify","note","composer","panel","styles","status","overlay","here","sign"],pt=/^[a-z][a-z0-9-]{1,23}$/,ht=new Set(["local","file","page","user","pipeup","presence","sync"]),ft=class{constructor(e,t,n){this.ctx=e,this.shadow=t,this.after=n,lt({tools:()=>this.U,note:()=>[...this.j.values()].at(-1)??null})}Y=0;$=[];j=new Map;writing=new Map;marked=new Map;paint=0;G=new Map;U=[];X=new Set;I=new Set;K=new Set;z=new Map;S=new Map;W=new Map;remote={n:0,who:new Set};last=0;timer=0;ce="";subscribe(e){return this.K.add(e),()=>{this.K.delete(e)}}changed(e){e&&this.Y++;for(let t of[...this.K])t(e);for(let e of this.ctx.t.querySelectorAll(".row, .draft"))e.dispatchEvent(new Event(st))}N(e,t){let n=this.W.get(e)??this.W.set(e,new Set).get(e),o=()=>{n.delete(o)&&t()};return n.add(o),o}de(){return[...this.G.values()].map(e=>e.text).join(" · ")}Ae(e,t){return this.$.push(t),this.changed(!0),{update:()=>this.changed(!1),remove:this.N(e,()=>{this.$.splice(this.$.indexOf(t),1),this.changed(!0)})}}setThread(e,t,n){let o=this.writing.get(e)??this.writing.set(e,new Set).get(e);null===n?(qe.delete(t),o.delete(t)):(qe.set(t,n),o.add(t)),this.repaint()}setMark(e,t,n,o){let i=this.marked.get(e)??this.marked.set(e,new Set).get(e);if(null===n){if(Re.delete(t),!ze.delete(t))return;i.delete(t)}else{if(ze.get(t)===n&&!!Re.get(t)==!!o)return;ze.set(t,n),o?Re.set(t,o):Re.delete(t),i.add(t)}this.repaint()}repaint(){this.paint||(this.paint=window.requestAnimationFrame(()=>{this.paint=0,this.ctx.m()}))}pe(e,t,n){n?e.set(t,n):e.delete(t),this.changed(!1)}Me(e,t){return this.U.push(t),this.changed(!1),this.N(e,()=>{this.U.splice(this.U.indexOf(t),1),this.changed(!1)})}closed(){return this.ctx.state.hidden&&!this.ctx.state.c}Le(e,t){this.closed()?this.S.set(e,t):this.ctx.J(t)}flush(){if(this.closed()||0===this.S.size)return;let e=[...this.S.values()].at(-1);this.S.clear(),this.ctx.J(e)}Ce(){return this.shadow.activeElement instanceof HTMLTextAreaElement||[...this.ctx.t.querySelectorAll("textarea")].some(e=>""!==e.value.trim())}Pe(e){this.ctx.state.hidden||this.ctx.E(e)}Oe(e,t){if("local"!==t&&""!==t){for(let{body:t}of e)t.author===this.ctx.doc.me||"create"!==t.kind&&"reply"!==t.kind||(this.remote.n++,this.remote.who.add(t.name||q(t.author)));this.ue()}}ue(e=Math.max(0,this.last+1e4-Date.now())){this.timer||!this.remote.n||(this.timer=window.setTimeout(()=>{if(this.timer=0,this.ctx.state.hidden||this.Ce())return this.ue(1e3);let{n:e,who:t}=this.remote;this.remote={n:0,who:new Set},this.last=Date.now(),this.ctx.E(`${e} new comment${1===e?"":"s"} from ${1===t.size?[...t][0]:`${t.size} people`}`)},e))}$e(e){let t=this.z.get(e);return t||(t=Fe("div",{class:"ov","aria-hidden":"true","data-addon":e}),this.ctx.t.insertBefore(t,this.after.nextSibling),this.z.set(e,t)),t}Ie(e,t){let n=this.ctx.host.ownerDocument.defaultView?.CSSStyleSheet,o=n&&"replaceSync"in n.prototype&&"adoptedStyleSheets"in this.shadow?new n:null;o&&(o.replaceSync(t),this.shadow.adoptedStyleSheets=[...this.shadow.adoptedStyleSheets,o]);let i=o??this.shadow.appendChild(Fe("style",{},t));return this.N(e,()=>o?this.shadow.adoptedStyleSheets=this.shadow.adoptedStyleSheets.filter(e=>e!==o):i.remove())}fe(e,t,n){return t.add(n),this.N(e,()=>t.delete(n))}Ne(e,t){return this.fe(e,this.X,t)}Re(e,t){let n=this.fe(e,this.I,t);return this.call(this.I,t,this.he()),n}he(){let{state:e}=this.ctx,t=this.shadow.activeElement;return{shown:!e.hidden,commentMode:e.l,allOpen:e.d,dark:this.ctx.t.classList.contains("dark"),view:this.ctx.p.view(),writing:t instanceof HTMLTextAreaElement?t.closest("[data-thread]")?.dataset.thread??"":null}}T(){for(let e of[...this.X])this.call(this.X,e);if(0===this.I.size)return;let e=this.he(),t=JSON.stringify(e);if(t!==this.ce){this.ce=t;for(let t of[...this.I])this.call(this.I,t,e)}}call(e,t,...n){try{t(...n)}catch(n){e.delete(t),globalThis.reportError?.(n)}}He(e,t,n){let o=this.ctx.t,i=this.shadow.activeElement,r=Fe("button",{class:"ib",type:"button","aria-label":"Close"},Ze(["M6 6l12 12M18 6L6 18"],15)),a=Fe("div",{class:"xp",role:"dialog","aria-label":n.label,"data-addon":e},Fe("div",{class:"hd"},Fe("span",{},n.label),r),Fe("div",{class:"xb"},t)),l=[...o.children].filter(e=>e instanceof HTMLElement&&!e.inert);for(let e of l)e.inert=!0;o.append(a),a.offsetWidth,a.classList.add("show");let s=e=>{"Escape"===e.key&&(e.stopPropagation(),e.preventDefault(),d())},d=this.N(e,()=>{window.removeEventListener("keydown",s,!0);for(let e of l)e.inert=!1;a.classList.remove("show"),a.inert=!0,window.setTimeout(()=>a.remove(),300),i?.focus?.({preventScroll:!0});try{n.onClose?.()}catch(e){globalThis.reportError?.(e)}});return r.addEventListener("click",d),window.addEventListener("keydown",s,!0),(a.querySelector("button, input, textarea, select, a[href]")??a).focus?.({preventScroll:!0}),{close:d}}clear(e){for(let t of[...this.W.get(e)??[]])t();this.W.delete(e),this.z.get(e)?.remove(),this.z.delete(e);for(let t of[this.j,this.G,this.S])t.delete(e);for(let t of this.writing.get(e)??[])qe.delete(t);this.writing.delete(e);for(let t of this.marked.get(e)??[])ze.delete(t),Re.delete(t);this.marked.delete(e),this.repaint(),this.changed(!0)}destroy(){window.clearTimeout(this.timer),lt(null),this.K.clear()}},mt=new Map,vt=null,gt=(()=>{let e=globalThis.Pipeup;return e?.VERSION?e:null})();function wt(){return gt?gt.addons():[...mt.values()].map(e=>({...e.info}))}function yt(e){if(gt)return gt.use(e);let t=e=>console.warn(`pipeup: ${e}`),n=e;if(!n||"object"!=typeof n||"string"!=typeof n.id||!pt.test(n.id)||ht.has(n.id)||"function"!=typeof n.setup||"string"!=typeof n.network?.says)return t("an add-on needs an id of 2 to 24 lowercase letters, digits and dashes (not a reserved one), a setup function and a network statement");if(mt.has(n.id))return t(`the add-on "${n.id}" is already registered; the second is ignored`);let o={id:n.id,version:String(n.version??""),network:n.network,state:"waiting"},i=(n.needs??[]).find(e=>!ut.includes(e));1!==n.api?(o.state="off",o.reason=`needs add-on API ${String(n.api)}; this Pipeup has 1`):i&&(o.state="off",o.reason=`this Pipeup has no ${i} slot`);let r={addon:e,info:o};mt.set(n.id,r),vt?.i&&"waiting"===o.state&&bt(r,vt)}async function bt(e,t){let n,o,{addon:i,info:r}=e,a=new AbortController,l=new Set,{surface:s,doc:d}=t,c=()=>!a.signal.aborted,u=Object.assign(()=>{},{update(){},remove(){},close(){}}),p=e=>(...t)=>c()?e(...t):u,h={id:d.id,me:d.me,get name(){return d.name},threads:()=>d.threads(),ops:()=>d.ops(),onChange:e=>{let t=d.onChange(e);return l.add(t),()=>{t(),l.delete(t)}}},f=i.id,m={api:1,version:t.version,document:h,root:t.root,ephemeral:t.ephemeral,signal:a.signal,has:e=>ut.includes(e),off:e=>{o=String(e)},merge:e=>c()?d.merge(e,f):Promise.resolve(0),addMenuItem:p(e=>s.Ae(f,e)),notify:p(e=>s.Le(f,e)),announce:p(e=>s.Pe(e)),setComposerNote:p(e=>s.pe(s.j,f,e)),setThreadNote:p((e,t)=>s.setThread(f,e,t)),setThreadMark:p((e,t,n)=>s.setMark(f,e,t,n)),addComposerTool:p(e=>s.Me(f,e)),openPanel:p((e,t)=>s.He(f,e,t)),addStyles:p(e=>s.Ie(f,e)),setStatus:p(e=>s.pe(s.G,f,e)),overlay:()=>s.$e(f),onFrame:p(e=>s.Ne(f,e)),where:e=>s.ctx.p.view(e),isHere:e=>s.ctx.p.u(e),go:e=>s.ctx.p.R(e),onUi:p(e=>s.Re(f,e)),avatar:(e,t)=>{let n=ot(e,t);return n.classList.add("in"),n},sign:(e,t)=>d.sign(`${f}/${e}`,t)},v=()=>{if(c()){a.abort();for(let e of[...l])e();try{n?.()}catch(e){globalThis.reportError?.(e)}s.clear(f),"on"===r.state&&(r.state="waiting")}};e.stop=v;try{if(n=await i.setup(m),!c())return void n?.();if(void 0!==o)return v(),r.state="off",void(r.reason=o);r.state="on",delete r.reason}catch(e){r.state="failed",r.reason=function(e){return e instanceof Error?e.message:String(e)}(e),v(),r.state="failed",globalThis.reportError?.(e)}}var xt=typeof navigator<"u"&&/Mac|iP(hone|ad|od)/.test(navigator.platform)?"⇧⌥C":"Shift+Alt+C",kt="Shift+Alt+C";function Et(e,t){let n=function(e){let t=Fe("button",{class:"me",type:"button",tabindex:"-1","aria-hidden":"true"});t.addEventListener("mousedown",e=>e.preventDefault());let n=dt({label:"Comment",kind:"comment",before:t,_:e._,q:e.q}),o=Fe("div",{class:"note"}),i=()=>{let e=at?.note()??null;o.textContent=e??"",o.hidden=!e};i();let r=Fe("div",{class:"say"}),a=Fe("input",{class:"input",type:"text",maxlength:"80","aria-label":"Your name"}),l=Fe("div",{class:"nf"},a),s=Fe("div",{class:"you"},r,l),d="",c=!1,u=()=>{let n=e.name(),o=n?"change":"add your name";if(t.title=n?"Change your name":"Add your name",!t.lastChild||d!==n){let o=ot(e.me,n),i=t.lastChild;i?(rt(o),it(i)):o.classList.add("in"),t.append(o),d=n}let i=Fe("button",{type:"button"},o);i.addEventListener("click",h),r.replaceChildren(Fe("span",{class:"nm"},n||`You're ${q(e.me)}`)," · ",i)},p=e=>{s.classList.toggle("naming",e),Be(r,e),Be(l,!e)};function h(t){t.stopPropagation(),a.value=e.name(),p(!0),a.focus({preventScroll:!0}),a.select()}let f=()=>{p(!1),n.focus()};t.addEventListener("click",h),a.addEventListener("keydown",t=>{if(t.stopPropagation(),"Escape"===t.key)t.preventDefault(),f();else if("Enter"===t.key){t.preventDefault();let n=a.value.trim();if(!n||n===e.name())return f();if(c)return;c=!0,e.rename(n).finally(()=>{c=!1,u(),f()})}}),u(),p(!1);let m=Fe("div",{class:"ctx"},e.label),v=Fe("div",{class:"draft"},m,o,n.element,s);return v.addEventListener(st,i),{element:v,ge:()=>{let{selectionStart:e,selectionEnd:t}=n.input;return()=>{n.focus(),n.input.setSelectionRange(e,t)}},Q:e=>{m.hidden=e},ve:e=>{m.textContent=e},focus:()=>n.focus(),De:()=>""===n.input.value.trim()}}({label:t.label,me:e.doc.me,name:()=>e.c.name(),rename:t=>e.c.rename(t),_:t=>e.Be(t),q:()=>e.Fe()});return e.H(n),n}function St(e,t){if("orphaned"===t.state||!t.element||e.quote)return null;let n=t.element.getBoundingClientRect();if(!n.width&&!n.height)return null;if(e.point)return{x:n.left+e.point.x*n.width,y:n.top+e.point.y*n.height};let o=t.element.ownerDocument.createRange();o.selectNodeContents(t.element);let i=o.getBoundingClientRect();return{x:i.width?Math.min(n.right-8,i.right+6):n.right-8,y:(i.height?i.top:n.top)+8}}function $t(e){return e.range?[...e.range.getClientRects()]:[]}function Lt(e,t){let n=$t(t)[0];if(n)return n.top;if("orphaned"===t.state||!t.element)return null;let o=t.element.getBoundingClientRect();return e.point?o.top+e.point.y*o.height:o.top}function Mt(e,t){let n=$t(t).at(-1);if(n)return{x:n.left,y:n.bottom,below:!0};let o=St(e,t);return o?{...o,below:!1}:null}function Ct(e,t,n){for(let o of n)if(e>=o.left&&e<=o.right&&t>=o.top&&t<=o.bottom)return!0;return!1}var At=()=>window.innerWidth>=900?400:300,Tt=()=>window.innerWidth<=480;function Pt(e,t,n){let o=e.top-t.height-10;return o<8&&(o=e.top+e.height+10),{left:Math.max(8,Math.min(e.left+e.width/2-t.width/2,n.width-t.width-8)),top:o}}function Nt(e,t){let n=e.resolved.get(t.id);return n?.range?.startContainer??n?.element??null}var qt=e=>(t,n)=>{let o=Nt(e,t),i=Nt(e,n),r=e=>e.anchor.point??{x:0,y:-1};return o!==i?!i||o&&4&o.compareDocumentPosition(i)?-1:1:r(t).y-r(n).y||r(t).x-r(n).x},zt=e=>`${e} ${1===e?"reply":"replies"}`;function Rt(e,t,n){let o={...n},i=e.id,r=Fe("div",{class:"rbox always"},Fe("div",{},dt({label:"Reply",kind:"reply",thread:()=>i,_:e=>t.reply(i,e),q:t.close}).element)),a=Fe("div",{}),l=Fe("span",{class:"note"},"This thread was resolved. Your words are kept until you send or clear them.");l.hidden=!0,r.prepend(l);let s=Fe("div",{}),d=null,c=null,u=Fe("div",{},s,Fe("div",{class:"more"},a)),p=new Map,h=new Map,f=new Map,m=e=>{let t=nt(e.author,e.name),n=p.get(e.id),o=n?.e;if((!o||n.key!==t)&&(o=rt(ot(e.author,e.name)),n)){let t=n.e;f.set(e.id,t),it(t,()=>f.get(e.id)===t&&f.delete(e.id))}o.title=z(e),h.set(e.id,{key:t,e:o});let i=f.get(e.id);return i?[i,o]:[o]},v=(e,t,n)=>{let o=Fe("button",{class:"ib",type:"button","aria-label":t,title:t},Xe(e));return o.addEventListener("click",e=>{e.stopPropagation(),n()}),o};function g(e,n={}){Object.assign(o,n),i=e.id;let f=(o.now??Date.now)(),g=e.root.replies.length,w=e=>Fe("span",{class:"who"},`${z(e)} · ${$e(e.at,f)}`),y=e=>Fe("div",{class:e.deleted?"tx del":"tx"},...e.deleted?["Deleted"]:[...O(e.name)?Ye(e.text):_e(e.text),e.edited?" (edited)":""]),b=e.resolved?"Resolved"+(g?` · ${zt(g)}`:""):g?zt(g):"",x=Fe("div",{class:"column"===o.D?b?"ft has-rest":"ft":"ft open"},"column"===o.D&&b?Fe("span",{class:"rest"},b):null,Fe("span",{class:"hover"},w(e.root),Fe("span",{class:"acts"},v("copy","Copy thread",()=>t.copy(e.id)),e.resolved?v("reopen","Reopen",()=>{t.reopen(e.id)}):v("resolve","Resolve",()=>{t.resolve(e.id)})))),k=o.lost?Fe("div",{class:"ctx"},`${o.place||"No longer on the page"} — it read “${We(o.lost,120)}”`):o.quote?Fe("div",{class:"ctx"},`“${We(o.quote,80)}”`):null;h=new Map;let E=Fe("div",{class:"root"},...m(e.root),k,y(e.root),x);s.replaceWith(E),s=E,d?.remove();let S=qe.get(e.id);d=g||void 0!==S?Fe("div",{class:"rps"},...e.root.replies.map(e=>Fe("div",{class:"it"},...m(e),y(e),Fe("div",{class:"column"===o.D?"rft":"rft open"},w(e)))),void 0===S?null:Fe("div",{class:"it ghost"},ot("",R,!0),Fe("div",{class:"tx"},S,Fe("span",{class:"dots"},Fe("i"),Fe("i"),Fe("i"))),Fe("div",{class:"rft open"},Fe("span",{class:"who"},`${R} · writing now`)))):null,d&&a.prepend(d),c?.remove();let $=ze.get(e.id),L=Re.get(e.id);if(c=void 0===$?null:Fe("div",{class:"seen"},Fe("i"),$),c&&L){let e=Fe("button",{type:"button"},"Check again");e.addEventListener("click",e=>{e.stopPropagation(),L()}),c.append(e)}c&&a.insertBefore(c,r.parentNode===a?r:null),p=h;let M=""!==r.querySelector("textarea").value.trim();l.hidden=!(e.resolved&&M),e.resolved&&!M?r.remove():r.parentNode!==a&&a.append(r),u.className=e.resolved?"thread resolved":"thread",u.setAttribute("data-thread",e.id)}return g(e),{element:u,update:g}}function Ot(e,t){let n=new Map,o=Fe("div",{class:"tip",role:"tooltip"}),i=Fe("div",{class:"mark"}),r=Fe("div",{class:"pop",role:"dialog","aria-label":"Comment thread"});o.inert=r.inert=!0,e.t.append(i,o,r);let a,l=Fe("div",{class:"bub pin ghost","aria-hidden":"true"}),s=[],d=null,c=null,u=null,p=!0===window.matchMedia?.("(prefers-reduced-motion: reduce)").matches,h=0,f=null,m=null,v=null,g=0,w=e=>s.find(t=>t.id===e)??null,y=()=>t.Z||e.state.d,b=!1,x=t=>{let n=e.resolved.get(t.id);return n?Mt(t.anchor,n):null};function k(t,n,o){let{left:i,top:r}=function(e,t,n,o=12){let i,r;return e.below?(i=Math.min(e.x,n.width-t.width-o),r=e.y+8,r+t.height>n.height-o&&(r=e.y-t.height-40)):(i=e.x+14,i+t.width>n.width-o&&(i=e.x-t.width-28),r=Math.min(e.y-12,n.height-t.height-o)),{left:Math.max(o,i),top:Math.max(o,r)}}(n,{width:t.offsetWidth||o,height:t.offsetHeight},function(e){let t=window.innerWidth;return{width:e&&!Tt()?t-320:t,height:window.innerHeight}}(e.state.d));t.style.left=`${i}px`,t.style.top=`${r}px`}function E(t){let n=t&&y()&&e.state.i!==t?w(t):null,i=n?x(n):null;if(!n||!i)return v=null,o.classList.remove("show"),void Be(o,!0);if(v!==n.id){let e=n.root.replies.length;o.replaceChildren(Fe("div",{class:"tx clamp"},...n.root.deleted?["Deleted"]:_e(n.root.text)),Fe("div",{class:"who"},`${z(n.root)}${e?` · ${e} ${1===e?"reply":"replies"}`:""}`)),v=n.id}k(o,i,260),o.classList.contains("show")||o.offsetWidth,o.classList.add("show"),o.inert=!1}function S(t){f=t,E(t),e.f(t)}function $(e){window.clearTimeout(g),null===e?g=window.setTimeout(()=>S(null),y()?400:0):S(e)}function L(t){let o=n.get(t.id);if(o)return o;let r=Fe("button",{class:"bub",type:"button","data-thread":t.id});return r.addEventListener("mouseenter",()=>$(t.id)),r.addEventListener("mouseleave",()=>$(null)),r.addEventListener("click",n=>{n.stopPropagation(),E(null),e.open(t.id)}),e.t.insertBefore(r,i),n.set(t.id,r),r}o.addEventListener("mouseenter",()=>window.clearTimeout(g)),o.addEventListener("mouseleave",()=>$(null)),o.addEventListener("click",t=>{t.stopPropagation();let n=v;n&&(window.clearTimeout(g),S(null),e.open(n))});let M=!1;function C(){let t=e.state.o,n=u&&t&&!t.anchor.quote&&!t.anchor.point?t.resolved.element:null;if(n){let{left:e,top:t,above:o}=function(e,t,n,o=12,i=44){let r=e.top-i>=8,a=e.top+e.height+8+(r?0:i),l=e.top-8-(r?i:0)-t.height,s=a+t.height<=n.height-o||l<o,d=s?a:l;return{above:!s,left:Math.max(o,Math.min(e.left,n.width-t.width-o)),top:Math.max(o,d)}}(n.getBoundingClientRect(),{width:r.offsetWidth||At(),height:r.offsetHeight},{width:window.innerWidth,height:window.innerHeight}),i=null!==u?.above&&u?.above!==o;if(u&&(u.above=o),i&&T())return;return r.style.left=`${e}px`,void(r.style.top=`${t}px`)}let o=u&&t?Mt(t.anchor,t.resolved):d?x(d):null;o&&k(r,o,At())}let A=t=>e.state.l&&!t.anchor.quote&&!t.anchor.point;function T(e=()=>{}){return window.clearTimeout(h),p?(r.classList.remove("show"),h=window.setTimeout(()=>{e(),C(),r.classList.add("show")},220),!0):(e(),r.classList.add("glide"),h=window.setTimeout(()=>r.classList.remove("glide"),450),!1)}let P=t=>{if(e.w(t)){let e=t.composedPath()[0];return null!==m&&!(e instanceof Element&&e.closest(".tip,.bub"))&&$(null),void(m=null)}let n=e.te(t.clientX,t.clientY)?.id??null;n!==m&&(m=n,$(n))},N=t=>{if(e.w(t))return;let n=window.getSelection();if(n&&!n.isCollapsed||(e.state.l?t.altKey:t.target instanceof Element&&t.target.closest("a,button,input,select,textarea,label,summary,[role=button],[contenteditable]")))return;let o=e.te(t.clientX,t.clientY);o&&(e.ye(t),E(null),e.open(o.id))};return window.addEventListener("pointermove",P,{capture:!0,passive:!0}),window.addEventListener("click",N,!0),{m:function(o){s=o;let l=new Set;for(let t of o){if(!e.B(t)||t.anchor.quote)continue;let n=e.resolved.get(t.id);if(!n||"orphaned"===n.state)continue;l.add(t.id);let o=L(t);o.classList.toggle("done",t.resolved),o.classList.toggle("on",e.state.i===t.id),o.classList.toggle("pin",void 0!==t.anchor.point);let i=`Comment on ${be(n.element)}: ${We(t.root.text,60)}`;o.getAttribute("aria-label")!==i&&o.setAttribute("aria-label",i)}Ie(e.t,o.filter(e=>l.has(e.id)).sort(qt(e)).map(e=>n.get(e.id)),i);for(let[e,t]of n)l.has(e)||(t.classList.remove("in"),n.delete(e),window.setTimeout(()=>t.remove(),300));E(f),b!==e.state.d&&r.classList.contains("show")&&!p&&T(),b=e.state.d;let m=t.Z?e.state.o:null;if(m){let t=m.anchor.point??m.resolved.element;u?.of!==m?(window.clearTimeout(h),r.classList.remove("glide"),u={s:Et(e,m),of:m,at:t,above:null},u.s.Q(A(m)),r.replaceChildren(u.s.element),r.inert=!1,u.s.focus(),d=null,c=null,C(),r.classList.add("show")):u&&(u.at!==t&&(u.at=t,u.above=null,T(()=>u?.s.ve(m.label))),u.s.Q(A(m)));let n=!e.p.u(m.anchor.view);return void(n!==M&&(M=n,r.classList.toggle("show",!n),r.inert=n,n||C()))}u&&(window.clearTimeout(h),r.classList.remove("glide"),u=null,M=!1,e.H(null));let v=y()&&e.state.i?w(e.state.i):null;if(!v||!e.B(v))return d=null,c=null,r.classList.remove("show"),void Be(r,!0);let g=v.anchor.quote?.exact??null;d&&c&&d.id===v.id?(d!==v||a!==De(v.id))&&(c.update(v,{quote:g}),d=v,a=De(v.id)):(c=Rt(v,e.ee,{D:"popover",quote:g}),r.replaceChildren(c.element),d=v,a=De(v.id),C(),r.classList.add("show"),r.inert=!1)},T:function(){for(let[t,o]of n){let n=w(t),i=e.resolved.get(t),r=n&&i?St(n.anchor,i):null;!r||r.y<-40||r.y>window.innerHeight+40?o.style.visibility="hidden":(o.style.visibility="",o.style.left=`${r.x}px`,o.style.top=`${r.y}px`,o.classList.contains("in")||(o.offsetWidth,o.classList.add("in")))}let t=e.state.o,o=t?.anchor.point&&e.p.u(t.anchor.view)?St(t.anchor,t.resolved):null;o?(l.style.left=`${o.x}px`,l.style.top=`${o.y}px`,l.classList.contains("in")||(e.t.insertBefore(l,i),l.offsetWidth,l.classList.add("in"))):l.classList.contains("in")&&(l.classList.remove("in"),window.setTimeout(()=>l.classList.contains("in")||l.remove(),300)),r.classList.contains("show")&&C();let a=function(){if(!y())return null;let t=e.state.o;return t?t.anchor.quote||t.anchor.point||e.state.l?null:t.resolved.element:!d||d.anchor.quote||d.anchor.point?null:e.resolved.get(d.id)?.element??null}();i.classList.toggle("show",null!==a),a&&je(i,a.getBoundingClientRect(),4)},destroy(){window.clearTimeout(g),window.clearTimeout(h),window.removeEventListener("pointermove",P,!0),window.removeEventListener("click",N,!0),e.H(null);for(let e of n.values())e.remove();l.remove(),o.remove(),i.remove(),r.remove()}}}var Dt={display:"block",position:"static",clips:!1,off:!1},Ft=["button,a,input,select,textarea,label,summary,details,img,svg,canvas,video,picture,figure,figcaption,table,th,td","li,ul,ol,dl,dt,dd,p,h1,h2,h3,h4,h5,h6,blockquote,pre","section,article,aside,nav,header,footer,main,form,fieldset",..."button link img figure region list listitem tab tabpanel article navigation complementary banner contentinfo form search group dialog menu menuitem checkbox switch radio slider textbox combobox option row cell heading table".split(" ").map(e=>`[role=${e}]`)].join(","),Bt="a,button,label,summary,[role=button],[role=link],[role=tab],[role=option],[role=menuitem]",It=`${Bt},input,select,textarea,img,svg,canvas,video,picture,[role=img]`,Ht=(e,t)=>Math.abs(e.left-t.left)<=2&&Math.abs(e.top-t.top)<=2&&Math.abs(e.width-t.width)<=2&&Math.abs(e.height-t.height)<=2;function Wt(e,t){let n=t.s(e);if(n.width<2||n.height<2)return!1;if(e.hasAttribute("data-pipeup-id"))return!0;let o=t.ne();return n.width*n.height<=.6*o.width*o.height&&(e.matches(Ft)||t.Ve(e)||e.childElementCount>1&&!e.parentElement?.closest(Bt)&&t._e(e))}function jt(e,t,n){if(e===t||!t.contains(e)||e.closest("[data-pipeup-ignore]"))return null;let o=null;for(let i=e;i&&i!==t&&!o;i=i.parentElement)Wt(i,n)&&(o=i);if(!o||o.hasAttribute("data-pipeup-id"))return o;let i=n.s(o);for(let e=o.parentElement;e&&e!==t&&Ht(n.s(e),i);e=e.parentElement)if(e.hasAttribute("data-pipeup-id"))return e;return o}function Kt(e,t,n){let o=n.s(e);for(let i=e.parentElement;i&&i!==t;){let e=jt(i,t,n);if(!e)return null;if(!Ht(n.s(e),o))return e;i=e.parentElement}return null}var Vt=(e,t)=>e.left<t.left+t.width&&t.left<e.left+e.width&&e.top<t.top+t.height&&t.top<e.top+e.height,Ut=(e,t)=>{let n=Math.max(e.left,t.left),o=Math.max(e.top,t.top);return{left:n,top:o,width:Math.max(0,Math.min(e.left+e.width,t.left+t.width)-n),height:Math.max(0,Math.min(e.top+e.height,t.top+t.height)-o)}};function Yt(e,t,n=()=>!0){let o=[],i=(e,r,a,l,s,d)=>{for(let c of e.children){if(c.hasAttribute("data-pipeup-ignore")||"true"===c.getAttribute("aria-hidden")||!n(c))continue;let e=t.flow?.(c)??Dt,u=c.offsetParent,p="fixed"===e.position||"absolute"===e.position&&!!l&&!(u&&l.contains(u)),h=p?null:a,f=t.s(c),m=f.width>0&&f.height>0;if(h&&m&&!Vt(f,h))continue;let v=c.matches(Bt),g=(e.display.startsWith("inline")||d)&&!c.matches(It)&&("inline"===e.display||f.height<=48),w=f.width<=24&&f.height<=24,y=r;(c.hasAttribute("data-pipeup-id")||!s&&!e.off&&!g&&(!w||v))&&Wt(c,t)&&(r&&Ht(t.s(r.e),f)?(c.hasAttribute("data-pipeup-id")||!r.e.hasAttribute("data-pipeup-id"))&&(r.e=c):o.push(y={e:c,O:r,k:0}));let b=e.clips&&m;i(c,y,b?h?Ut(h,f):f:h,b?c:p?null:l,s||v,/^inline-(flex|grid)$/.test(e.display)||d&&/(flex|grid)$/.test(e.display))}};i(e,null,null,null,!1,!1);for(let e=o.length-1;e>=0;e--){let t=o[e];t.O&&(t.O.k=Math.max(t.O.k,t.k+1))}return o}var _t=(e,t)=>e.filter(e=>e.k<=t&&(!e.O||e.O.k>t)),Gt="a,button,summary,[role=button],[role=link],[role=switch],[role=tab],[role=checkbox],input[type=checkbox],input[type=radio],input[type=submit],input[type=button],input[type=reset]",Jt=`${Gt},input,select,textarea,[contenteditable]:not([contenteditable=false]),[tabindex]:not([tabindex="-1"])`,Xt=["click","dblclick","auxclick","submit","contextmenu","dragstart"],Zt=[...["over","out","enter","leave","down","up"].flatMap(e=>[`pointer${e}`,`mouse${e}`]),"mousemove","touchstart","touchmove","touchend","touchcancel"],Qt="Tab moves between blocks · ↑ ↓ change level · Enter comments · Esc to finish · F7 selects text";function en(e){let t={s:e=>e.getBoundingClientRect(),Ve:e=>{let t=getComputedStyle(e),n="transparent"!==t.backgroundColor&&!/,\s*0\)$/.test(t.backgroundColor),o=["top","right","bottom","left"].some(e=>parseFloat(t.getPropertyValue(`border-${e}-width`))>0);return n||o||"none"!==t.backgroundImage||"none"!==t.boxShadow},_e:e=>/^(inline-)?(flex|grid)$/.test(getComputedStyle(e).display),flow:e=>{let t=getComputedStyle(e),n=[t.overflowX,t.overflowY];return{display:t.display,position:t.position,clips:n.some(e=>"hidden"===e||"clip"===e)&&!n.some(e=>"auto"===e||"scroll"===e)&&e!==document.documentElement&&e!==document.body,off:"none"===t.pointerEvents}},ne:()=>({width:innerWidth,height:innerHeight})},n=Fe("span",{hidden:!0},Qt),o=Fe("div",{class:"pick"},n),i=[0,1].map(()=>{let e=Fe("div",{class:"km",tabindex:"-1",role:"button"},Fe("span",{hidden:!0}),Fe("span",{hidden:!0}));return e.inert=!0,e.addEventListener("keydown",pe),e.addEventListener("click",e=>{e.stopPropagation(),ue()}),e.addEventListener("focus",()=>o.classList.add("kf")),e.addEventListener("blur",()=>o.classList.remove("kf")),e}),r=Fe("span",{class:"lbl"}),a=(e,t,n,o)=>{let i=Fe("button",{class:"nb",type:"button","aria-label":e,title:t},Xe(n,16));return i.addEventListener("click",e=>{e.stopPropagation(),o()}),i},l=a("Around it","Select the block around it","expand",se),s=a("Inside it","Select a block inside it","shrink",ce),d=a("Pin","Pin its centre","pin",()=>e.we(()=>W(f??x,{x:.5,y:.5}))),c=Fe("div",{class:"namebar",role:"group","aria-label":"Chosen block"},r,l,s,d);c.inert=!0;let u=e.t.querySelector(".launch");for(let t of[o,...i,c])e.t.insertBefore(t,u);c.addEventListener("mousedown",e=>e.preventDefault());let p=!0===window.matchMedia?.("(prefers-reduced-motion: reduce)").matches,h=null,f=null,m=null,v=null,g=0,w=()=>{},y=null,b=()=>{},x=null,k=0,E=0,S=!1,$=null,L=null,M=null,C=0,A=-1,T=!0,P=null,N=null,q=t=>!(e.w(t)||t.target instanceof Element&&t.target.closest("[data-pipeup-ignore]"));function z(){v&&(o.classList.toggle("glide",performance.now()<g),je(o,v.getBoundingClientRect(),4))}function R(){if(!y)return;c.classList.toggle("glide",performance.now()<g&&c.classList.contains("show"));let{left:e,top:t}=Pt(y.getBoundingClientRect(),{width:c.offsetWidth||200,height:c.offsetHeight||34},{width:window.innerWidth,height:window.innerHeight});c.style.left=`${e}px`,c.style.top=`${t}px`}function O(e,t){v=e,g=t?performance.now()+400:0,z(),o.classList.add("show")}function D(e,t){let n=getComputedStyle(e);if("0"===n.opacity)return t(),()=>{};let o=0,i=()=>{window.clearTimeout(o),e.removeEventListener("transitionend",a)},r=()=>{i(),t()},a=t=>{t.target===e&&"opacity"===t.propertyName&&r()},l=Math.max(...n.transitionDuration.split(",").map(e=>1e3*parseFloat(e)||0));return o=window.setTimeout(r,l+100),e.addEventListener("transitionend",a),i}function F(e){if(e!==h){if(h=e,w(),!e)return void o.classList.remove("show");"0"===getComputedStyle(o).opacity?O(e,!1):p?(o.classList.remove("show"),w=D(o,()=>O(e,!1))):O(e,!0)}}function B(e){f=e,o.classList.toggle("on",null!==e),F(e),I(e)}function I(e){b(),c.inert=!e,e?p?(c.classList.remove("show"),b=D(c,()=>H(e))):H(e):(c.classList.remove("show"),y=null)}function H(n){r.textContent=r.title=be(n),l.hidden=null===Kt(n,e.root,t),s.hidden=0===(x?ae(n).length:Yt(n,t,Z).length);let o=c.classList.contains("show");y=n,R(),o||(c.offsetWidth,c.classList.add("show"))}function W(t,n){let o;try{o=de(t,e.root,n,e.p.view(t))}catch(t){return void e.oe(t)}let i={anchor:o,label:n?`Pin on ${be(t).replace(/^[A-Z](?=[a-z])/,e=>e.toLowerCase())}`:be(t),ranges:[],resolved:{state:"attached",element:t,range:null}},r=e.state.o;x&&(x=t,A=-1),B(n?null:t),m=r??i,e.qe(i),e.E(n?i.label:`Commenting on ${i.label}`)}function j(t){e.we(()=>W(t))}let K=n=>{if(e.w(n))return;if(!q(n))return void(f||F(null));if(n.stopPropagation(),f||e.state.o)return;let o=!He()&&n.target instanceof Element?jt(n.target,e.root,t):null;if(x){if(!o||o===x||(C+=Math.abs(n.movementX)+Math.abs(n.movementY),C<=4))return;re()}o&&($=o),F(o)},V=()=>{He()&&(x&&re(),f||F(null))},U=e=>{q(e)&&(e.stopPropagation(),("pointerdown"===e.type||"mousedown"===e.type)&&e.target instanceof Element&&e.target.closest(Jt)&&e.preventDefault())},Y=n=>{if(!q(n))return;let o=n.target;!(o===N||o.form&&o.form===N?.form)||"submit"!==n.type&&("click"!==n.type||n.detail)?(n.preventDefault(),n.stopPropagation(),"click"===n.type&&!e.state.c&&!e.Ue(n)&&function(n){let o=window.getSelection();if(o&&!o.isCollapsed)return;if(e.state.o&&(n.altKey||!e.L()))return void e.F();if(!n.altKey&&e.te(n.clientX,n.clientY))return;if(e.state.i&&e.open(null),x&&n.detail&&re(),n.altKey)return void function(n){let o=(n.target instanceof Element?jt(n.target,e.root,t):null)??e.root;o!==e.root&&($=o);let i=o.getBoundingClientRect();i.width&&i.height&&W(o,{x:(n.clientX-i.left)/i.width,y:(n.clientY-i.top)/i.height})}(n);let i=n.target instanceof Element?jt(n.target,e.root,t):null;i&&($=i),i?W(i):(e.F(),B(null))}(n)):N="click"===n.type&&"submit"===o.type?o.form:null},_=t=>{if(N=null,fe="","Tab"===t.key&&G(t))return t.preventDefault(),t.stopPropagation(),fe=t.key,e.F(),e.state.i&&e.open(null),e.state.c&&(e.state.c=!1,e.m()),function(t){if(x)return le(t);P=null;let n=document.activeElement;L=J()??n;let o,i=$?.isConnected?$:null,r=i&&ee(i);if(r){k=r.k;let e=_t(Q(),k),n=e.indexOf(r);o=e[(n+t+e.length)%e.length]}else if(i){k=0;let e=_t(Q(),0),n=e=>0!==(i.compareDocumentPosition(e.e)&Node.DOCUMENT_POSITION_FOLLOWING),r=e=>e.e.contains(i);o=t>0?e.find(e=>n(e)&&!r(e))??e[0]:e.filter(e=>!n(e)&&!r(e)).pop()??e[e.length-1]}else o=ne(),o&&(k=o.k);if(!o)return e.E("Nothing here to comment on");S=!0,ie(o.e)}(t.shiftKey?-1:1);if(q(t)&&t.target instanceof Element)if("Enter"!==t.key&&" "!==t.key||!t.target.closest(Gt))"Enter"===t.key&&!x&&t.target.form&&(N=t.target);else{if(!x)return void(N=t.target);t.preventDefault(),t.stopPropagation()}},G=t=>{if(t.ctrlKey||t.metaKey||t.altKey||t.isComposing)return!1;let n=t.composedPath()[0];return n instanceof Element&&!i.some(e=>e===n)&&(e.w(t)?!!n.closest(".launch,.menu")&&!n.closest("input,textarea,select,[contenteditable]"):!t.composedPath().some(e=>e instanceof Element&&e.hasAttribute("data-pipeup-ignore")))},J=()=>e.t.getRootNode().activeElement,X=()=>i.some(e=>e===J()),Z=t=>(!1!==t.checkVisibility?.({opacityProperty:!0,visibilityProperty:!0})||"contents"===getComputedStyle(t).display)&&e.p.u(e.p.view(t)),Q=()=>(P?.some(e=>!e.e.isConnected)&&(P=null),P??=Yt(e.root,t,Z)),ee=e=>Q().find(t=>t.e===e),te=(e,t=!1)=>{let n=e.getBoundingClientRect();return n.bottom>0&&n.top<window.innerHeight&&(!t||n.top>=0)},ne=()=>{let e=_t(Q(),0);return e.find(e=>te(e.e,!0))??e.find(e=>te(e.e))??e[0]},oe=t=>e.doc.threads().filter(n=>e.B(n)&&t.contains(Nt(e,n))).sort(qt(e));function ie(t,o=!0){C=0;let r=Q(),a=r.find(e=>e.e===t);if(a&&!_t(r,k).includes(a)&&(k=a.k),t!==x&&(A=-1),t!==f&&(f=null),x=t,F(t),I(t),t.scrollIntoView({block:"nearest",inline:"nearest",behavior:p?"auto":"smooth"}),!o)return;e.Ke();let l=i[E^=1];(function(e,t){let[o,i]=e.children,r=_t(Q(),k),a=oe(t).length;o.textContent=`${we(t)}, ${r.findIndex(e=>e.e===t)+1} of ${r.length}${a?`, has ${a} comment${1===a?"":"s"}`:""}`;let l=(t.innerText??t.textContent??"").length<=150;i.textContent=ye(t);let s=T?[n]:[];T=!1,void 0!==e.ariaLabelledByElements?(e.ariaLabelledByElements=l?[o,t]:[o,i],e.ariaDescribedByElements=l?s:[...s,t]):e.setAttribute("aria-label",`${o.textContent}, ${i.textContent}`)})(l,t),je(l,t.getBoundingClientRect(),4),l.inert=!1,l.focus({preventScroll:!0}),i[1^E].inert=!0}function re(){let e=X();$=x,x=null,F(null),I(null);for(let e of i)Be(e,!0);return e}function ae(e){let t=ee(e);return t?((e,t)=>e.filter(e=>e.O===t))(Q(),t):[]}function le(e){let t=_t(Q(),k),n=t.findIndex(e=>e.e===x),o=t[n<0?e>0?0:t.length-1:(n+e+t.length)%t.length];o&&ie(o.e)}function se(){let n=f??x,o=n&&Kt(n,e.root,t);return o?((!M||!n.contains(M))&&(M=n),f?j(o):void ie(o)):e.E("Nothing around it")}function ce(){let t=f??x,n=t?ae(t):[],o=n.find(e=>M&&e.e.contains(M))??n.find(e=>te(e.e))??n[0];if(!o)return e.E("Nothing inside it");f?j(o.e):ie(o.e)}function ue(t=!1){if(!x)return;if(e.state.o&&!e.L())return e.ze();if(!t)return W(x);let n=oe(x);if(!n.length)return e.E("No comments on this block");A=(A+1)%n.length,e.open(n[A].id),n.length>1&&e.E(`Comment ${A+1} of ${n.length} on this block`)}function pe(t){if(["Tab","ArrowUp","ArrowDown","Enter"," ","Escape"].includes(t.key)&&(!t.key.startsWith("Arrow")||!(t.metaKey||t.ctrlKey||t.altKey))){if(t.preventDefault(),t.stopPropagation(),fe=t.key,"Escape"===t.key)return void e.re();if("Enter"===t.key||" "===t.key)return ue(t.shiftKey&&"Enter"===t.key);"Tab"===t.key&&e.F(),e.state.i&&e.open(null),"Tab"===t.key?le(t.shiftKey?-1:1):"ArrowUp"===t.key?se():ce()}}let he=()=>{let e=J();return e?!!e.closest("[inert]"):!document.activeElement||document.activeElement===document.body},fe="",me=!1,ve=e=>{me&&window.removeEventListener("keyup",ve,!0),e.key===fe&&(fe="",e.preventDefault(),e.stopPropagation())};window.addEventListener("keyup",ve,!0),window.addEventListener("pointermove",K,!0),document.addEventListener("selectionchange",V);for(let e of Zt)window.addEventListener(e,U,!0);for(let e of Xt)window.addEventListener(e,Y,!0);return window.addEventListener("keydown",_,!0),{re:()=>!!f&&(B(null),!0),ie:()=>null!==x,We:()=>S&&!x,be:function(){P=null;let t=document.activeElement;L=J()??t;let n=ee($),o=n??(t&&t!==document.body&&e.root.contains(t)&&!t.closest("[data-pipeup-ignore]")?Q().filter(e=>e.e.contains(t)).pop():void 0)??ne();return!!o&&(n||(k=o.k),S=!0,ie(o.e),!0)},se(){x&&!X()&&ie(x)},m(){if(P=null,x&&(!x.isConnected||!Z(x))){let e=ne();e?ie(e.e,X()||he()):re()}let t=e.t.querySelector(".launch");if(t&&c.nextElementSibling!==t&&!X()&&!c.contains(J()))for(let n of[o,...i,c])e.t.insertBefore(n,t);let n=e.state.o;m&&n!==m?(m=null,B(null),x&&ie(x,he())):(n||e.state.i)&&!m&&(h||f)&&B(null)},T(){z(),R(),x&&je(i[E],x.getBoundingClientRect(),4)},destroy(){re()&&function(){let t=L;t&&t!==document.body&&t.isConnected&&t.focus?.({preventScroll:!0}),(!t||t===document.body||!t.matches?.(":focus"))&&e.t.querySelector(".launch .mode")?.focus({preventScroll:!0})}();for(let e of i)e.remove();w(),b(),me=!0,fe||window.removeEventListener("keyup",ve,!0),window.removeEventListener("pointermove",K,!0),document.removeEventListener("selectionchange",V);for(let e of Zt)window.removeEventListener(e,U,!0);for(let e of Xt)window.removeEventListener(e,Y,!0);window.removeEventListener("keydown",_,!0),o.classList.remove("show"),c.classList.remove("show"),Be(c,!0),D(o,()=>o.remove()),D(c,()=>c.remove())}}}function tn(e,t=!1){let n=e.ownerDocument.documentElement,o=n.getAttribute("data-pipeup-layout");if("bubbles"===o||e.querySelector("[data-pipeup-slide]"))return null;let i=e.querySelector("article, main, [role=main]")??("column"===o?e:null);if(!i)return null;if(n.hasAttribute("data-pipeup-reserve")){let e,r=n.clientWidth,a=getComputedStyle(i).maxWidth;return e=a.endsWith("px")?parseFloat(a):a.endsWith("%")?parseFloat(a)/100*r:i.getBoundingClientRect().width,"column"!==o&&r<e+320-(t?24:0)?null:{x:r-320+24,width:272}}let r=i.getBoundingClientRect().right;if(window.innerWidth-r<300&&"column"!==o)return null;let a=r+32;return{x:a,width:Math.max(220,Math.min(300,window.innerWidth-a-16))}}function nn(e,t){let n=e.resolved.get(t.id);return!n||"orphaned"===n.state&&!e.S.has(t.id)}function on(e){let t=Fe("div",{class:"col"});e.t.append(t);let n=new Map,o=null,i=new ResizeObserver(()=>l()),r=t=>nn(e,t);function a(t){let n=e.resolved.get(t.id),o=n?Lt(t.anchor,n):null;return null===o?Number.POSITIVE_INFINITY:o+window.scrollY-4}function l(){let t=[],i=[];for(let[o,r]of n){let n=a(r.thread);if(Number.isFinite(n))r.placed=n;else if(e.S.has(o)){if(null===r.placed){r.e.classList.add("wait");continue}n=r.placed}Number.isFinite(n)?t.push({id:o,M:n,height:r.e.offsetHeight}):i.push({id:o,height:r.e.offsetHeight})}let r=e.state.o,l=r?Lt(r.anchor,r.resolved):null;o&&null!==l&&t.push({id:"draft",M:l+window.scrollY-4,height:o.e.offsetHeight});let s=function(e,t,n=10){let o=[...e].sort((e,t)=>e.M-t.M),i=new Array(o.length).fill(0),r=o.findIndex(e=>e.id===t),a=e=>o[e];if(r<0)o.forEach((e,t)=>{i[t]=0===t?e.M:Math.max(e.M,(i[t-1]??0)+a(t-1).height+n)});else{i[r]=a(r).M;for(let e=r+1;e<o.length;e++)i[e]=Math.max(a(e).M,(i[e-1]??0)+a(e-1).height+n);for(let e=r-1;e>=0;e--)i[e]=Math.min(a(e).M,(i[e+1]??0)-a(e).height-n)}return new Map(o.map((e,t)=>[e.id,i[t]??0]))}(t,o?"draft":e.state.i),d=Math.max(0,...t.map(e=>(s.get(e.id)??0)+e.height))+24;for(let e of i)s.set(e.id,d),d+=e.height+10;for(let[e,t]of n)if(t.e.classList.contains("wait")){if(!s.has(e))continue;t.e.style.transition="none",t.e.style.transform=`translateY(${Math.round(s.get(e))}px)`,t.e.offsetWidth,t.e.style.transition="",t.e.classList.remove("wait")}else t.e.style.transform=`translateY(${Math.round(s.get(e)??0)}px)`;o&&(o.e.style.transform=`translateY(${Math.round(s.get("draft")??0)}px)`)}function s(e,t){e.thread=t,e.note=De(t.id),e.lost=r(t),e.view.update(t,{lost:e.lost?t.anchor.snapshot:null})}function d(n){let o=r(n),a=Rt(n,e.ee,{D:"column",lost:o?n.anchor.snapshot:null}),l=Fe("div",{class:"th","data-thread":n.id},Fe("button",{class:"opn sr",type:"button","data-thread":n.id}),a.element);return l.style.transition="none",l.addEventListener("mouseenter",()=>e.f(n.id)),l.addEventListener("mouseleave",()=>e.f(null)),l.addEventListener("click",()=>e.open(n.id)),t.append(l),i.observe(l),{e:l,thread:n,lost:o,placed:null,view:a}}function c(e){i.unobserve(e),e.classList.add("out"),window.setTimeout(()=>e.remove(),220)}return{m:function(a){Be(t,e.state.d);let u=new Set,p=[],h=null!==e.state.i||null!==e.state.o;for(let t of a){if(!e.B(t))continue;u.add(t.id);let o=n.get(t.id);o?(o.thread!==t||o.lost!==r(t)||o.note!==De(t.id))&&s(o,t):(o=d(t),n.set(t.id,o),p.push(o.e));let i=o.e,a=e.state.i===t.id;i.classList.toggle("on",a);let l=i.firstElementChild,c=t.root.replies.length;l.setAttribute("aria-label",`Open thread: ${We(t.root.text,60)}, ${zt(c)}`),l.setAttribute("aria-expanded",String(a)),Be(l,a);let f=i.querySelector(".more");f&&Be(f,!a),i.classList.toggle("dim",h&&!a),i.classList.toggle("hot",e.state.f===t.id&&!a),i.classList.toggle("resolved",t.resolved),i.classList.toggle("lost",o.lost)}for(let[e,t]of n)u.has(e)||(n.delete(e),c(t.e));(function(){let n=e.state.o;if(o&&o.of!==n&&(c(o.e),o=null,n||e.H(null)),!n)return;let r=!o;if(o)o.s.ve(n.label);else{let r=Et(e,n),a=Fe("div",{class:"th on"},r.element);a.style.transition="none",t.append(a),i.observe(a),o={e:a,s:r,of:n}}o.s.Q(e.state.l&&!n.anchor.quote&&!n.anchor.point),r&&o.s.focus()})(),Ie(t,a.filter(e=>u.has(e.id)).sort(qt(e)).map(e=>n.get(e.id).e),o?.e??null)&&t.offsetWidth,l(),o&&p.push(o.e);for(let e of p)e.offsetWidth,e.style.transition=""},T:function(){let n=tn(e.root,!0);n&&(t.style.width=`${n.width}px`,t.style.transform=`translate(${n.x}px, ${-window.scrollY}px)`)},destroy(){i.disconnect(),e.H(null),t.remove()}}}var rn="[data-pipeup-ignore],input,textarea,select,[contenteditable]:not([contenteditable=false])";function an(e){let t=Fe("button",{type:"button","aria-label":"Comment",title:"Comment"},Xe("comment",17)),n=Fe("div",{class:"selbar"},t);n.inert=!0,e.t.append(n);let o=null,i=0,r=!1,a=t=>{let n=t&&(t.nodeType===Node.ELEMENT_NODE?t:t.parentElement);return!!n&&e.root.contains(n)&&!n.closest(rn)};function l(){if(!o)return;let{left:e,top:t}=Pt(o.getBoundingClientRect(),{width:n.offsetWidth||36,height:n.offsetHeight||34},{width:window.innerWidth,height:window.innerHeight});n.style.left=`${e}px`,n.style.top=`${t}px`}function s(){o=null,n.inert=!0,n.classList.remove("show")}function d(t=!1){let i=He();e.state.l&&i&&a(i.anchorNode)&&a(i.focusNode)?(!o&&!t&&e.E("Enter comments on the selected words"),o=i.getRangeAt(0).cloneRange(),l(),n.inert=!1,n.classList.add("show")):s()}t.addEventListener("mousedown",e=>e.preventDefault()),t.addEventListener("click",t=>{if(t.stopPropagation(),e.state.o&&!e.L())return e.F();let n,i=o;if(!i)return;try{n=se(i,e.root,e.p.view(i.commonAncestorContainer))}catch(t){return e.oe(t),void s()}let r=We(i.toString().replace(/\s+/g," ").trim(),60);window.getSelection()?.removeAllRanges(),s(),e.Ye({anchor:n,label:`“${r}”`,ranges:[i],resolved:{state:"attached",element:null,range:i}})});let c=()=>{window.clearTimeout(i),i=window.setTimeout(()=>r||d(),250),o&&(He()||s())};document.addEventListener("selectionchange",c);let u=t=>{"keyup"!==t.type&&(r="mousedown"===t.type),!r&&!e.w(t)&&window.setTimeout(()=>d("mouseup"===t.type),0)};window.addEventListener("mousedown",u,!0),window.addEventListener("mouseup",u,!0),window.addEventListener("keyup",u,!0);let p=n=>{"Enter"!==n.key||!o||e.w(n)||n.target instanceof Element&&n.target.closest(`${rn},${Gt}`)||(n.preventDefault(),n.stopPropagation(),t.click())};return window.addEventListener("keydown",p,!0),{m(){!e.state.l&&o&&s()},T(){o&&l()},destroy(){window.removeEventListener("mousedown",u,!0),window.removeEventListener("mouseup",u,!0),window.removeEventListener("keyup",u,!0),window.removeEventListener("keydown",p,!0),window.clearTimeout(i),document.removeEventListener("selectionchange",c),n.remove()}}}async function ln(e,t){try{return void await navigator.clipboard.writeText(e)}catch{}let n=document.createElement("textarea");n.value=e,n.setAttribute("readonly",""),n.style.cssText="position:fixed;opacity:0;pointer-events:none",t.append(n),n.select();let o=document.execCommand("copy");if(n.remove(),!o)throw new Error("pipeup: your browser blocked copying")}var sn="Hidden on the page";function dn(e){let t=[Fe("span",{class:"n"}),Fe("span",{class:"n"})],n=Xe("comment",20,1.4);n.lastElementChild.setAttribute("stroke-width","1.6");let o=Fe("button",{class:"mode",type:"button","aria-label":"Comment","aria-keyshortcuts":kt,"aria-haspopup":"menu","aria-expanded":"false"},Fe("span",{class:"plus"},n),Fe("span",{class:"cnt"},Xe("bubble",34,1.4),...t),Fe("span",{class:"dot"})),i=document.createTextNode("Comment"),r=Fe("span",{class:"ttip","aria-hidden":"true"},i,Fe("small",{},xt)),a=Fe("div",{class:"launch"},o,r),l=Fe("div",{class:"menu",role:"menu","aria-label":"Comments"}),s=Fe("div",{class:"list",role:"menu","aria-label":"All comments"}),d=Fe("span",{class:"pn"}),c=Fe("button",{class:"ib",type:"button","aria-label":"Close"},Xe("close")),u=Fe("button",{class:"hs",type:"button",role:"switch","aria-checked":"false"},"Show resolved",Fe("span",{class:"sw","aria-hidden":"true"}));u.addEventListener("click",t=>{t.stopPropagation(),e.c.je()});let p=Fe("div",{class:"all",role:"dialog","aria-label":"All comments"},Fe("div",{class:"hd"},Fe("span",{},"All comments"),d,u,c),s),h=document.createElementNS("http://www.w3.org/2000/svg","svg");h.setAttribute("class","cx"),h.setAttribute("aria-hidden","true");let f=document.createElementNS("http://www.w3.org/2000/svg","path"),m=document.createElementNS("http://www.w3.org/2000/svg","circle");m.setAttribute("r","4"),h.append(f,m),l.inert=p.inert=!0,e.t.append(l,a,h,p);let v=!1,g=null,w=0,y=[],b=0,x=null,k=null,E=!0===window.matchMedia?.("(prefers-reduced-motion: reduce)").matches,S=t=>{v=e.state.c=t,t&&e.addons.flush(),window.clearTimeout(w),w=0,t||g?.(!0),l.classList.toggle("show",t),Be(l,!t),o.setAttribute("aria-expanded",String(t))},$=(t,n=!1)=>{e.state.d!==t&&(e.state.d=t,e.m(),t?(L(s)[0]??c).focus({preventScroll:!0}):n&&o.focus({preventScroll:!0}))},L=(e=l)=>[...e.querySelectorAll(".mi")],M=()=>l.getRootNode().activeElement,C=()=>{S(!1),o.focus({preventScroll:!0})},A=e=>{let t=L(e.currentTarget);if(0===t.length)return;let n=M(),o=t.indexOf(n),i=n=>{e.preventDefault(),t[(n+t.length)%t.length]?.focus({preventScroll:!0})};"ArrowDown"===e.key?i(o+1):"ArrowUp"===e.key?i(o<0?t.length-1:o-1):"Home"===e.key?i(0):"End"===e.key&&i(t.length-1)};l.addEventListener("keydown",A),s.addEventListener("keydown",A),c.addEventListener("click",e=>{e.stopPropagation(),$(!1,!0)});let T=t=>nn(e,t),P=t=>y.filter(n=>!n.resolved&&(void 0===t||e.V(n)===t)).length,N=()=>P(),z=t=>{let n=t.anchor.view?.slide,o=e.p.u(t.anchor.view)?"":ke(t.anchor.view);return n&&null!==e.p.slide()?`On slide ${n}`:o?`In ${o}`:sn},R=(e,t,n="")=>Fe("div",{role:"group","aria-label":n?`${e} · ${n}`:e},Fe("div",{class:"sec","aria-hidden":"true"},e,n&&Fe("b",{},n)),...t);function O(){let t=M(),n=t?.dataset.thread,o=null!==k&&k.element.contains(t),i=e.c.all().filter(t=>!t.thread.resolved||e.state.C||t.thread.id===x),r=t=>{let n=t.thread,o=n.id===x,i=ot(n.root.author,n.root.name);i.classList.add("in");let r=Fe("button",{class:`mi${n.resolved?" done":""}${o?" open":""}`,type:"button",role:"menuitem","aria-expanded":String(o),"data-thread":n.id},i,Fe("span",{},Fe("span",{class:"clamp"},n.root.deleted?"Deleted":n.root.text),Fe("small",{},T(n)?`“${We(n.anchor.snapshot,80)}”`:t.location.where)));r.addEventListener("click",t=>{t.stopPropagation(),function(t){if(x===t)return B(!0);let n=y.find(e=>e.id===t);if(n){if(x=F=t,k=Rt(n,{...e.ee,close:()=>B(!0)},D(n)),O(),k.element.querySelector("textarea")?.focus({preventScroll:!0}),!e.V(n))return I(n);e.state.o&&!e.L()||e.p.R(n.anchor.view??{}).then(()=>{e.xe();let n=y.find(e=>e.id===t);n&&F===t&&x===t&&I(n)})}}(n.id)});let a=document.createDocumentFragment();return a.append(r),o&&k&&(k.update(n,D(n)),a.append(Fe("div",{class:"xr",role:"region","aria-label":"Comment thread"},k.element))),a},a=i.filter(e=>T(e.thread));d.textContent=String(N()),u.setAttribute("aria-checked",String(e.state.C)),s.replaceChildren(i.length?"":Fe("div",{class:"sec",role:"presentation"},"No open comments"),...function(t,n){let o=e.p.slide(),i=new Map;for(let n of t){let t=n.thread,r=null!==o?t.anchor.view?.slide??o:e.V(t)?e.p.u(t.anchor.view)?"":ke(t.anchor.view):null;i.set(r,[...i.get(r)??[],n])}if(null===o){let e=i.get(null)??[];return i.delete(null),[...e.map(n),...[...i].map(([e,t])=>R(e||sn,t.map(n)))]}return[...i].sort(([e],[t])=>Number(e)-Number(t)||0).map(([e,t])=>R(`Slide ${e} · ${t.filter(e=>!e.thread.resolved).length} open`,t.map(n),e===o?"This slide":""))}(i.filter(e=>!T(e.thread)),r),a.length?R("No longer on the page",a.map(r)):""),o?k.element.querySelector("textarea")?.focus({preventScroll:!0}):n&&L(s).find(e=>e.dataset.thread===n)?.focus({preventScroll:!0})}function D(t){let n=!T(t)&&e.V(t);return{D:"popover",quote:t.anchor.quote?.exact??null,lost:T(t)||n?t.anchor.snapshot:null,place:n?z(t):null}}let F="";function B(t=!1){if(!x)return;let n=x;x=k=null,e.f(null),O(),t&&L(s).find(e=>e.dataset.thread===n)?.focus({preventScroll:!0})}function I(t){let n=e.resolved.get(t.id),o=n&&!T(t)?n.element??n.range?.startContainer.parentElement??null:null;o?.scrollIntoView({block:"center",inline:"nearest",behavior:E?"auto":"smooth"}),o&&e.f(t.id)}function H(e,t,n=!1,...o){let i=Fe("button",{class:"mi",type:"button",role:n?"menuitemcheckbox":"menuitem"},e,Fe("span",{class:"lb"}),...o,n&&Fe("span",{class:"sw","aria-hidden":"true"}),Fe("span",{class:"tt","aria-hidden":"true"}));return i.addEventListener("click",e=>{e.stopPropagation(),t(e)}),i}let W=(e,t,n,o)=>{let i=e.querySelector(".lb");i.textContent!==t&&(i.textContent=t),e.querySelector(".tt").textContent=n,e.setAttribute("aria-description",n),void 0!==o&&e.setAttribute("aria-checked",String(o))},j=()=>Fe("div",{class:"sep",role:"separator"}),K=Fe("span",{class:"ma"}),V=Fe("span",{class:"kc"}),U="",Y=H(K,function(){let t=Fe("input",{class:"input",type:"text",maxlength:"80","aria-label":"Your name"});t.value=e.c.name();let n=Fe("div",{class:"ed"},K.cloneNode(!0),t),o=(i,r=!1)=>{if(g!==o)return;g=null;let a=t.value.trim();i&&a&&a!==e.c.name()&&e.c.rename(a).then(ae),n.replaceWith(Y),r&&Y.focus({preventScroll:!0})};g=o,t.addEventListener("keydown",e=>{e.stopPropagation(),("Enter"===e.key||"Escape"===e.key)&&(e.preventDefault(),o("Enter"===e.key,!0))}),t.addEventListener("blur",()=>o(!0)),Y.replaceWith(n),t.focus({preventScroll:!0})},!1,V);Y.dataset.item="name";let _=H(Xe("copy"),()=>{C(),e.c.copyAll("ai")}),G=H(Xe("lines"),()=>{C(),e.c.copyAll("text")}),J=Fe("span",{class:"kc"}),X=H(Xe("list"),()=>{S(!1),$(!0)},!1,J),Z=H(Xe("comment"),t=>{let n=!e.state.l&&0===t.detail;e.Ge(!e.state.l,n),n&&S(!1)},!0,Fe("span",{class:"kc","aria-hidden":"true"},xt));Z.dataset.item="comment",Z.setAttribute("aria-keyshortcuts",kt);let Q=Fe("div",{class:"sec",role:"presentation"}),ee=j(),te=j(),ne=new Map,oe=t=>{let n=ne.get(t);return n||(n=H(Ze(t.icon,15),()=>{t.checked||C(),Promise.resolve().then(()=>t.select()).catch(t=>e.oe(t)).finally(()=>v&&ae())},!!t.checked,Fe("span",{class:"kc"})),ne.set(t,n)),n},ie=-1,re=e=>{try{return e()}catch(e){return globalThis.reportError?.(e),""}};function ae(){let t=N(),n=e.c.name(),o=n||q(e.doc.me);if(W(Y,o,n?"The name on your comments":"Add a name to show on your comments"),Y.setAttribute("aria-label",`${o}, ${n?"edit":"add"} your name`),V.replaceChildren(n?Xe("edit",13):"Add name"),nt(e.doc.me,n)!==U){U=nt(e.doc.me,n);let t=ot(e.doc.me,n);t.classList.add("in"),K.replaceChildren(t)}W(_,"Copy as Markdown","Markdown, with where each thread is"),W(G,"Copy as Text","Just the words"),W(X,"All comments","Every thread, and where it is"),J.textContent=t?String(t):"";let i=e.addons.de();Q.textContent=i,i?!Q.isConnected&&l.contains(Y)&&l.prepend(Q):Q.remove();for(let t of e.addons.$){let e,n=ne.get(t);if(n){try{e=t.checked?.()}catch(e){globalThis.reportError?.(e)}W(n,re(t.label),re(t.hint),e),n.querySelector(".kc").textContent=t.count?re(t.count):""}}W(Z,"Start commenting",e.state.l?"Turn off to hide the comments again":"Shows the comments; choose any part of the page to comment on it",e.state.l)}function le(){ae(),(ie!==e.addons.Y||!l.contains(Y))&&(l.replaceChildren(Y,ee,_,G,X,...e.addons.$.map(oe),te,Z),ie=e.addons.Y,ae())}o.addEventListener("click",e=>{e.stopPropagation(),v?S(!1):(le(),S(!0),0===e.detail&&L().at(-1)?.focus({preventScroll:!0}))});let se=!1,de=()=>{se=p.contains(M())},ce=t=>{let n=t.composedPath();v&&!n.includes(l)&&!n.includes(o)&&(S(!1),e.state.l&&!e.w(t)&&(e.ye(t),t.preventDefault(),t.stopPropagation())),e.state.d&&!e.w(t)&&$(!1,se&&(!document.activeElement||document.activeElement===document.body))},ue=e=>{if(!v||"touch"===e.pointerType||"pointerout"===e.type&&e.relatedTarget)return;let t=e.composedPath();"pointerover"===e.type&&(t.includes(l)||t.includes(o))?(window.clearTimeout(w),w=0):w||(w=window.setTimeout(()=>{w=0,g||S(!1)},3e3))},pe={n:0,label:""},he=()=>{let{n:t,label:n}=pe,r=e.addons.de(),a=`Comment${e.state.l?", comment mode on":""}${n?`, ${n}`:t?`, ${t} open`:""}${r?`, ${r}`:""}`;o.getAttribute("aria-label")!==a&&o.setAttribute("aria-label",a);let l=(n||"Comment")+(r?` · ${r}`:"");i.data!==l&&(i.data=l)},fe=e.addons.subscribe(e=>{he(),v&&!g&&(e?le():ae())});window.addEventListener("pointerdown",de,!0),window.addEventListener("click",ce,!0),window.addEventListener("pointerover",ue,!0),window.addEventListener("pointerout",ue,!0);let me=t=>{if("Escape"!==t.key||g)return;let n=t.composedPath()[0];if(v)C();else{if(!e.state.d||n instanceof HTMLTextAreaElement&&!p.contains(n))return;x?B(!0):$(!1,!0)}t.stopPropagation()};return window.addEventListener("keydown",me,!0),{m(n){y=n;let i=P(!1);if(i!==b){if(i){let[e,n]=t[0].classList.contains("on")?t:[t[1],t[0]];n.textContent=i>99?"99+":String(i),n.classList.toggle("s",i>99),e.classList.remove("on"),n.classList.add("on")}o.classList.toggle("has",i>0),b=i}let r=P(!0),a=r?`${i} here · ${r} ${null!==e.p.slide()?"on other slides":"in other views"}`:"";o.classList.toggle("else",r>0),pe={n:i,label:a},he(),o.classList.toggle("on",e.state.l),v&&!e.state.c&&S(!1),v&&ae();let l=e.state.d;p.classList.toggle("full",Tt()),p.classList.contains("show")!==l&&(p.classList.toggle("show",l),Be(p,!l)),x&&(!l||!n.some(e=>e.id===x))&&(x=k=null,e.state.f=null),l&&O()},T:function(){let t=x?y.find(e=>e.id===x):null,n=x?s.querySelector(".mi.open"):null,o=t&&function(t){let n=e.resolved.get(t.id),o=n?.element??n?.range?.startContainer.parentElement;if(!n||Tt()||T(t)||e.V(t)||!1===o?.checkVisibility?.({visibilityProperty:!0}))return null;let i=n.range?$t(n).at(-1):void 0,r=o?.closest("p,li,h1,h2,h3,h4,h5,h6,blockquote,td,th,figcaption,div")?.getBoundingClientRect().right,a=n.element?.getBoundingClientRect(),l=Mt(t.anchor,n),s=i?{x:Math.max(i.right,r??0)+4,y:(i.top+i.bottom)/2,from:"right"}:a?{x:a.left+a.width/2,y:a.top,from:"top"}:l&&{x:l.x,y:l.y,from:"right"};return s&&s.x>=0&&s.x<=window.innerWidth-320&&s.y>=0&&s.y<=window.innerHeight?s:null}(t),i=n?.getBoundingClientRect(),r=s.getBoundingClientRect();if(!o||!i||i.top+12<r.top||i.top+12>r.bottom)return void h.classList.remove("show");let a,l=i.left,d=i.top+14;if("right"===o.from&&l-o.x>60){let e=o.x+28,t=o.y>=d?1:-1,n=Math.min(24,Math.abs(o.y-d)/2);a=`M${l} ${d}C${l-24} ${d} ${e} ${d} ${e} ${d+t*n}L${e} ${o.y-t*n}C${e} ${o.y} ${e} ${o.y} ${o.x} ${o.y}`}else{let e=o.y-8,t=l-40,n=e>=d?1:-1,i=Math.min(20,Math.abs(e-d)/2);a=`M${l} ${d}C${l-20} ${d} ${t} ${d} ${t} ${d+n*i}L${t} ${e-n*i}C${t} ${e} ${t} ${e} ${t-i} ${e}L${o.x+8} ${e}C${o.x} ${e} ${o.x} ${e} ${o.x} ${o.y}`}f.setAttribute("d",a),m.setAttribute("cx",String(o.x)),m.setAttribute("cy",String(o.y)),h.classList.add("show")},destroy(){fe(),window.removeEventListener("pointerdown",de,!0),window.removeEventListener("click",ce,!0),window.removeEventListener("pointerover",ue,!0),window.removeEventListener("pointerout",ue,!0),window.clearTimeout(w),window.removeEventListener("keydown",me,!0),l.remove(),p.remove(),h.remove(),a.remove()}}}var cn="[data-pipeup-slide]",un=["scroll","resize","keyup","click","transitionend","slidechanged"],pn=null,hn=null,fn=new Set,mn=new Set,vn=e=>{try{e()}catch(e){globalThis.reportError?.(e)}};function gn(e){let t=null;if(e){t={};let n=0;for(let[o,i]of Object.entries(e))if(!("string"!=typeof i||"slide"===o||o.length>64||i.length>200)){if(++n>=16)break;t[o]=i}}pn=t;for(let e of mn)e()}function wn(e){return fn.add(e),()=>{fn.delete(e)}}function yn(e){hn="function"==typeof e?.current&&"function"==typeof e.go?e:null}var bn=()=>{let e=window.Reveal;return"function"==typeof e?.getIndices&&"function"==typeof e.slide?e:null};var xn=["pipeup-quote","pipeup-on","pipeup-done"],kn={"pipeup-quote":[[250,227,188,.75],[250,200,100,.28]],"pipeup-on":[[247,212,154,.95],[250,200,100,.42]],"pipeup-done":[[180,178,169,.22],[180,178,169,.2]]};function En(){return typeof CSS<"u"&&"highlights"in CSS&&typeof Highlight<"u"}var Sn=`:not([data-pipeup-ignore],[data-pipeup-ignore] *){cursor:url("data:image/svg+xml,${encodeURIComponent("<svg xmlns='http://www.w3.org/2000/svg' width='32' height='32'><rect x='7' y='7' width='23' height='23' rx='4' fill='none' stroke='#534AB7' stroke-width='2' stroke-dasharray='4 3'/><path d='M3 2v15l4-3.5 3 6.5 2.5-1.2-3-6.3H15z' fill='#fff' stroke='#2C2C2A' stroke-width='1.2' stroke-linejoin='round'/></svg>")}") 3 2,crosshair!important}`;function $n(){if(En())for(let e of xn)CSS.highlights.delete(e)}var Ln=':host{all:initial}*{box-sizing:border-box}button{appearance:none;font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}svg{display:block}.layer{all:initial;display:block;position:fixed;inset:0;pointer-events:none;font:13px/1.5 var(--pu-font,system-ui,sans-serif);color:var(--k);--k:#2C2C2A;--mu:#5F5E5A;--fa:#888780;--ln:#E5E3DA;--ru:#ECEAE2;--so:#FAFAF7;--su:#FFFFFF;--ho:#F1EFE8;--as:color-mix(in srgb,var(--pu-accent,#534AB7) 12%,transparent);--sh:0 8px 28px rgba(44,44,42,.1);--in:.26s;--mv:.34s;--out:.2s;--pl:1.2s;--eo:cubic-bezier(.22,.61,.36,1);--eio:cubic-bezier(.4,0,.2,1);--ei:cubic-bezier(.4,0,1,1);--pu-text:var(--k);--pu-muted:var(--mu);--pu-faint:var(--fa);--pu-line:var(--ln);--pu-surface:var(--su);--pu-soft:var(--so);--pu-hover:var(--ho);--pu-shadow:var(--sh);--pu-ease:var(--eo)}.layer.dark{--k:#ECEBE6;--mu:#B4B2A9;--fa:#8D8B84;--ln:#3A3936;--ru:#34332F;--so:#22221F;--su:#1B1B19;--ho:#2C2C29;--sh:0 8px 28px rgba(0,0,0,.45)}.layer.hidden .bub,.layer.hidden .col,.layer.hidden .pop,.layer.hidden .tip,.layer.hidden .mark,.layer.hidden .selbar{opacity:0!important;pointer-events:none!important}.tx{font-size:14px;line-height:1.5;color:var(--k);white-space:pre-wrap;overflow-wrap:anywhere}.tx.del,.who,.rest,.ctx{color:var(--fa)}.who,.rest{font-size:12px}.who{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rft>.who{display:block}.ctx[hidden]{display:none}.ctx{font-size:12px;margin-bottom:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.clamp{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.tx a{color:var(--pu-accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}.ft,.rft{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows var(--in) var(--eo),opacity var(--in) var(--eo)}.ft>*,.rft>*{overflow:hidden;min-height:0;display:flex;align-items:center}.root:hover>.ft,.root:focus-within>.ft,.it:hover>.rft,.it:focus-within>.rft{grid-template-rows:1fr;opacity:1}.ft.has-rest,.ft.open,.rft.open{grid-template-rows:1fr;opacity:1}.ft.has-rest>*{grid-area:1/1}.ft .hover{opacity:0;transition:opacity var(--in) var(--eo)}.ft .rest{transition:opacity var(--in) var(--eo)}.root:hover>.ft .hover,.root:focus-within>.ft .hover,.ft:not(.has-rest) .hover{opacity:1}.root:hover>.ft .rest,.root:focus-within>.ft .rest{opacity:0}.acts{margin-left:6px;display:flex;flex:none}.ib{width:24px;height:22px;display:grid;place-items:center;border-radius:6px;color:var(--mu);transition:background-color .2s var(--eo),color .2s var(--eo)}.ib:hover,.ib:focus-visible{background:var(--ho);color:var(--k);outline:none}.rps,.rbox{padding-left:14px}.rps .it{padding-top:6px}.more{display:grid;grid-template-rows:1fr;transition:grid-template-rows var(--mv) var(--eio)}.more>div{overflow:hidden;min-height:0}.th:not(.on) .more{grid-template-rows:0fr}.row{display:flex;align-items:center;gap:8px;padding:8px 0 2px;cursor:text}.input{flex:1;min-width:0;height:27px;display:block;border:0;border-bottom:1px solid var(--ln);outline:none;resize:none;overflow:hidden;font:inherit;font-size:14px;line-height:1.5;padding:3px 0;color:var(--k);background:transparent;transition:border-color var(--in) var(--eo)}.row:hover .input,.input:hover{border-bottom-color:var(--mu)}.input:focus{border-bottom-color:var(--pu-accent)}.ed{display:flex;gap:10px;align-items:center;min-height:34px;padding:6px 10px}.ed .input{font-size:13px;height:22px}.root,.it{position:relative;padding-right:30px}.av{display:grid;place-items:center;width:22px;height:22px;border-radius:32%;font-size:12px;font-weight:600;line-height:1;opacity:0;transform:scale(.85);transition:opacity var(--in) var(--eo),transform var(--in) var(--eo)}.av.in{opacity:1;transform:none}.av svg{width:80%;height:80%}.root>.av,.it>.av{position:absolute;top:0;right:0}.it>.av{top:6px}.av{--av-l:92%;--av-d:30%;--s:60%;background:hsl(var(--h) var(--s) var(--av-l));color:hsl(var(--h) var(--s) var(--av-d))}.dark .av{--av-l:20%;--av-d:78%}.av.ai{position:relative;border-radius:50%;background:var(--su);color:var(--pu-accent);font-size:9px;letter-spacing:.02em}.av.ai:before,.av.ai:after{content:"";position:absolute;inset:3px;border-radius:50%;border:1.5px solid var(--pu-accent);pointer-events:none}.av.ai:after{animation:pu-pulse-ring 3s var(--eo) infinite}.av.ai.busy:after{animation-duration:1.6s}.root>.av.ai,.it>.av.ai{position:absolute}@keyframes pu-pulse-ring{0%{opacity:.7;transform:scale(1)}80%,to{opacity:0;transform:scale(1.375)}}.refs{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px;white-space:normal}.refs .ref{display:inline-flex;align-items:center;gap:5px;max-width:160px;padding:1px 9px;border:1px solid var(--ln);border-radius:999px;background:var(--so);color:var(--mu);font:inherit;font-size:11.5px;line-height:1.6;text-decoration:none;cursor:pointer;transition:background-color .2s var(--eo),color .2s var(--eo),border-color .2s var(--eo)}.refs .ref:hover,.refs .ref:focus-visible{background:var(--as);color:var(--pu-accent);border-color:var(--pu-accent);outline:none}.ref span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.refs .ref{position:relative}.ref .rc{position:absolute;left:0;top:calc(100% + 6px);z-index:3;width:max-content;max-width:min(240px,70vw);padding:6px 9px;border:1px solid var(--ln);border-radius:8px;background:var(--su);box-shadow:var(--sh);color:var(--k);font-size:12px;line-height:1.45;white-space:normal;text-align:left;overflow:visible;opacity:0;visibility:hidden;transform:translateY(-3px);pointer-events:none;transition:opacity .2s var(--eo),transform .2s var(--eo),visibility 0s .2s}.ref:hover .rc,.ref:focus-visible .rc{opacity:1;visibility:visible;transform:none;transition-delay:0s}.ref .sl{width:10px;height:7px;border:1.3px solid currentColor;border-radius:2px;flex:none}.seen{display:flex;align-items:center;gap:6px;padding:6px 0 0 14px;font-size:12px;color:var(--fa)}.seen button{margin-left:auto;padding:0 6px;border:0;border-radius:6px;background:none;color:var(--fa);font:inherit;cursor:pointer;transition:color .2s var(--eo),background-color .2s var(--eo)}.seen button:hover,.seen button:focus-visible{color:var(--pu-accent);background:var(--as);outline:none}.seen i{width:12px;height:12px;border-radius:50%;border:1.5px solid var(--pu-accent);flex:none}.ghost .dots{display:inline-flex;gap:3px;margin-left:4px;vertical-align:middle}.ghost .dots i{width:4px;height:4px;border-radius:50%;background:var(--fa);animation:pu-dot 1.6s var(--eio) infinite}.ghost .dots i:nth-child(2){animation-delay:.2s}.ghost .dots i:nth-child(3){animation-delay:.4s}@keyframes pu-dot{0%,to{opacity:.25}50%{opacity:1}}.c0{--h:0}.c1{--h:25}.c2{--h:50}.c3{--h:130}.c4{--h:175}.c5{--h:215}.c6{--h:270}.c7{--h:330}.c8{--h:28;--s:35%}.c9{--h:220;--s:8%}.me{flex:none;display:grid}.me>.av{grid-area:1/1;width:26px;height:26px;font-size:13px}.you{display:grid;padding:0 34px;min-height:24px;font-size:12px;color:var(--fa)}.you>*{grid-area:1/1;display:flex;align-items:center;min-width:0;transition:opacity var(--in) var(--eo),transform var(--in) var(--eo)}.say{white-space:pre;overflow:hidden}.nm{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.say button{flex:none}.say button{color:var(--mu);text-decoration:underline;text-decoration-color:var(--ln);text-underline-offset:2px;transition:color .2s var(--eo)}.say button:hover,.say button:focus-visible{color:var(--pu-accent);outline:none}.nf{opacity:0;transform:translateY(-4px);pointer-events:none}.nf .input{font-size:13px;height:24px}.you.naming .nf{opacity:1;transform:none;pointer-events:auto}.you.naming .say{opacity:0;pointer-events:none}.send{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;color:var(--pu-accent);flex:none;opacity:0;pointer-events:none;transition:opacity var(--in) var(--eo),background-color .2s var(--eo)}.send.show{opacity:1;pointer-events:auto}.send:hover{background:var(--as)}.bub{position:fixed;left:0;top:0;width:20px;height:20px;margin:-20px 0 0 -2px;border-radius:50% 50% 50% 0;background:var(--pu-accent);border:2px solid var(--su);box-shadow:0 1px 4px #0003;pointer-events:auto;opacity:0;transform:translateY(-6px) scale(.9);transform-origin:2px 20px;transition:opacity var(--out) var(--ei),transform var(--out) var(--ei)}.bub.in{opacity:1;transform:none;transition:opacity var(--in) var(--eo),transform var(--in) var(--eo)}.bub.in:hover,.bub.on{transform:scale(1.18)}.bub.done{background:var(--fa)}.bub.ghost{pointer-events:none}.tip,.pop,.menu,.all,.xp,.toast,.selbar,.namebar,.ttip,.tt,.mode{background:var(--su);border:1px solid var(--ln);box-shadow:var(--sh)}.tip{position:fixed;max-width:260px;border-radius:10px;padding:7px 10px;opacity:0;transform:translateY(3px);transition:opacity .22s var(--eo),transform .26s var(--eo)}.tip.show{opacity:1;transform:none;pointer-events:auto;cursor:pointer;transition:opacity .22s var(--eo),transform .26s var(--eo),left var(--mv) var(--eio),top var(--mv) var(--eio)}.pop{position:fixed;width:var(--pu-pop);border-radius:12px;padding:10px 12px 8px;pointer-events:none;opacity:0;transform:translateY(6px) scale(.98);transition:opacity var(--out) var(--ei),transform var(--out) var(--ei)}.pop.show{opacity:1;transform:none;pointer-events:auto;transition:opacity var(--in) var(--eo),transform var(--mv) var(--eo)}.pop.show.glide{transition:opacity var(--in) var(--eo),transform var(--mv) var(--eo),left var(--mv) var(--eio),top var(--mv) var(--eio)}.mark{position:fixed;border:2px solid color-mix(in srgb,var(--pu-accent) 50%,transparent);background:var(--as);border-radius:8px;opacity:0;transition:opacity .3s var(--eo)}.mark.show{opacity:1}.pulse{position:fixed;border:2px solid var(--pu-accent);border-radius:8px;background:var(--as);animation:pu-pulse var(--pl) var(--eio) forwards}@keyframes pu-pulse{0%{opacity:0;transform:scale(.985)}35%{opacity:.85;transform:scale(1)}to{opacity:0;transform:scale(1.02)}}.col{position:fixed;left:0;top:0;pointer-events:none;transition:opacity var(--in) var(--eo)}.th{position:absolute;left:0;right:0;top:0;padding:4px 4px 4px 12px;pointer-events:auto;cursor:pointer;box-shadow:inset 2px 0 0 transparent;transition:transform var(--mv) var(--eio),box-shadow var(--in) var(--eo),opacity var(--in) var(--eo)}.th.hot{box-shadow:inset 2px 0 0 var(--ln)}.th.on{box-shadow:inset 2px 0 0 var(--pu-accent);cursor:default}.th.dim{opacity:.45}.th.resolved:not(.on):not(.hot){opacity:.6}.th.lost .ctx{white-space:normal}.th.wait{opacity:0!important;pointer-events:none}.th.out{opacity:0!important;pointer-events:none;transition:opacity var(--out) var(--ei)}.th:has(.opn:focus-visible){box-shadow:inset 2px 0 0 var(--ln);outline:2px solid var(--pu-accent);outline-offset:2px;border-radius:4px}.selbar{position:fixed;display:flex;border-radius:10px;padding:2px;opacity:0;transform:translateY(4px);pointer-events:none;transition:opacity var(--in) var(--eo),transform .3s var(--eo)}.selbar.show{opacity:1;transform:none;pointer-events:auto}.selbar button{width:32px;height:30px;display:grid;place-items:center;border-radius:8px;color:var(--pu-accent);transition:background-color .2s var(--eo)}.selbar button:hover,.selbar button:focus-visible{background:var(--as);outline:none}.pick{position:fixed;left:0;top:0;border:2px solid color-mix(in srgb,var(--pu-accent) 70%,transparent);background:color-mix(in srgb,var(--pu-accent) 6%,transparent);border-radius:8px;pointer-events:none;opacity:0;transition:opacity var(--out) var(--ei),border-color var(--out) var(--ei),border-width var(--out) var(--ei),box-shadow var(--out) var(--ei)}.pick.show{opacity:1;transition-duration:var(--in);transition-timing-function:var(--eo)}.pick.show.glide{transition-property:all;transition-duration:var(--mv);transition-timing-function:var(--eio)}.pick.on{border-color:var(--pu-accent)}.pick.kf{border:3px solid var(--pu-accent);box-shadow:0 0 0 2px var(--su)}.km{position:fixed;left:0;top:0;pointer-events:none;outline:none}.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.namebar{position:fixed;left:0;top:0;display:flex;align-items:center;gap:2px;padding:2px 2px 2px 10px;border-radius:10px;font-size:12px;color:var(--mu);white-space:nowrap;pointer-events:none;opacity:0;transform:translateY(4px);transition:opacity var(--out) var(--ei),transform var(--out) var(--ei)}.namebar.show{opacity:1;transform:none;pointer-events:auto;transition:opacity var(--in) var(--eo),transform .3s var(--eo)}.namebar.show.glide{transition-property:all;transition-duration:var(--mv);transition-timing-function:var(--eio)}.namebar .lbl{margin-right:6px;max-width:260px;overflow:hidden;text-overflow:ellipsis}.namebar .nb{padding:4px;display:grid;place-items:center;border-radius:7px;transition:background-color .2s var(--eo),color .2s var(--eo)}.namebar .nb:hover,.namebar .nb:focus-visible{background:var(--ho);color:var(--k);outline:none}.namebar .nb[hidden]{display:none}.launch{position:fixed;right:20px;bottom:20px;pointer-events:auto}.launch .mode{position:relative;display:grid;place-items:center;width:46px;height:46px;border-radius:50%;transition:background-color .3s var(--eo),color .3s var(--eo)}.mode>*,.cnt>*{grid-area:1/1}.mode>*{display:grid;place-items:center;transition:opacity var(--in) var(--eo)}.cnt,.has>.plus{opacity:0}.has>.cnt{opacity:1}.n{font-size:12px;font-weight:500;line-height:1;margin:-1.4px 0 0 1.4px;font-variant-numeric:tabular-nums;opacity:0;transition:opacity var(--in) var(--eo)}.n.s{font-size:9.5px;letter-spacing:-.04em}.n.on{opacity:1}.launch .mode:hover,.launch .mode[aria-expanded=true]{background:var(--ho)}.launch .mode.on{background:var(--pu-accent);color:var(--pu-on,#fff)}.mode>.dot{position:absolute;top:3px;right:3px;width:9px;height:9px;border-radius:50%;background:var(--pu-accent);border:2px solid var(--su);opacity:0}.mode.else>.dot{opacity:1}.ttip{position:absolute;right:0;bottom:54px;white-space:nowrap;border-radius:8px;padding:4px 9px;font-size:12px;pointer-events:none;opacity:0;transform:translateY(3px);transition:opacity var(--out) var(--ei),transform var(--out) var(--ei)}.ttip small{margin-left:8px}.ttip small,.mi .kc{font-size:12px;color:var(--fa)}.mode:hover+.ttip,.mode:focus-visible+.ttip{opacity:1;transform:none;transition:opacity var(--in) var(--eo) .5s,transform var(--in) var(--eo) .5s}.launch .mode[aria-expanded=true]+.ttip{opacity:0;transition:opacity var(--out) var(--ei)}@media(hover:none){.ttip,.tt{display:none}}.menu{position:fixed;right:20px;bottom:76px;width:290px;border-radius:12px;padding:4px;pointer-events:none;opacity:0;transform:translateY(6px);transition:opacity var(--out) var(--ei),transform var(--out) var(--ei)}.menu.show{opacity:1;transform:none;pointer-events:auto;transition:opacity var(--in) var(--eo),transform var(--mv) var(--eo)}.mi{position:relative;display:flex;gap:10px;align-items:center;width:100%;min-height:34px;text-align:left;padding:6px 10px;border-radius:8px;transition:background-color .2s var(--eo)}.mi:hover,.mi:focus-visible{background:var(--so);outline:none}.mi svg{color:var(--mu);flex:none}.mi small{display:block;color:var(--fa);font-size:12px}.lb{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ma{flex:none;display:grid;margin:-2px 0}.ma .av{width:20px;height:20px;font-size:11px}.mi .av svg{color:inherit}.sep{height:1px;margin:4px 10px;background:var(--ru)}.tt{position:absolute;right:calc(100% + 14px);top:50%;translate:0 -50%;width:max-content;max-width:220px;padding:4px 9px;border-radius:8px;font-size:12px;line-height:1.4;color:var(--mu);pointer-events:none;opacity:0;transform:translate(3px);transition:opacity var(--out) var(--ei),transform var(--out) var(--ei)}.mi:hover>.tt,.mi:focus-visible>.tt{opacity:1;transform:none;transition:opacity var(--in) var(--eo) .5s,transform var(--in) var(--eo) .5s}@media(max-width:600px){.tt{right:8px;top:auto;bottom:100%;translate:none;transform:translateY(3px)}}.sw{position:relative;flex:none;width:26px;height:16px;border-radius:8px;background:var(--ln);transition:background-color var(--mv) var(--eio)}.sw:before,.sw:after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #00000040;transition:transform var(--mv) var(--eio),opacity var(--mv) var(--eio)}.sw:before{opacity:0;transform:translate(10px)}[aria-checked=true]>.sw{background:var(--pu-accent)}[aria-checked=true]>.sw:after{transform:translate(10px)}.tools{display:flex;flex:none;gap:2px}.tools[hidden]{display:none}.tool[aria-pressed=true]{background:var(--as);color:var(--pu-accent)}.note{display:block;padding:0 0 4px;font-size:12px;color:var(--fa)}.note[hidden]{display:none}.ov{position:absolute;inset:0;pointer-events:none;overflow:hidden}.xb{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:4px 16px 16px;font-size:13px}.xb p{margin:0 0 10px}.all,.xp{position:fixed;top:0;right:0;bottom:0;width:var(--pu-panel);display:flex;flex-direction:column;border-width:0 0 0 1px;opacity:0;transform:translate(100%);transition:transform var(--out) var(--ei),opacity var(--out) var(--ei)}.all.show,.xp.show{opacity:1;transform:none;pointer-events:auto;transition:transform var(--mv) var(--eo),opacity var(--in) var(--eo)}.all.full{width:100%}.hd{display:flex;align-items:center;gap:8px;padding:12px 10px 8px 16px;font-weight:600}.pn{font-weight:400;color:var(--fa)}.hs{margin-left:auto;display:flex;align-items:center;gap:6px;padding:3px 4px 3px 6px;border-radius:6px;font-size:12px;font-weight:400;color:var(--mu);transition:background-color .2s var(--eo)}.hs:hover,.hs:focus-visible{background:var(--ho);outline:none}.list{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:4px}.all .mi{align-items:flex-start}.all .mi>.av{flex:none}.all .mi>span:last-child{flex:1;min-width:0}.all .mi small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.all .mi.done{opacity:.6}.all .mi.open{background:var(--so)}.all .mi.open>.av,.all .mi.open .clamp{display:none}.xr{padding:2px 12px 10px 16px}.cx{position:fixed;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none;opacity:0;transition:opacity var(--in) var(--eo)}.cx.show{opacity:1}.cx path{fill:none;stroke:var(--pu-accent);stroke-width:1.5;stroke-linecap:round;opacity:.7}.cx circle{fill:var(--pu-accent)}.layer.listing .col{opacity:0;transition:opacity var(--out) var(--ei)}.sec{padding:8px 10px 2px;font-size:12px;color:var(--fa)}.sec b{margin-left:6px;font-weight:500;color:var(--pu-accent)}.toast{position:fixed;left:50%;bottom:28px;border-radius:10px;padding:8px 14px;font-size:13px;opacity:0;transform:translate(-50%,6px);transition:opacity .3s var(--eo),transform .36s var(--eo)}.toast.show{opacity:1;transform:translate(-50%)}@media(forced-colors:active){.pick.kf{border:3px solid Highlight}.layer :is(.ib,.mi,.nb,.hs,.selbar button,.say button,.xb button):focus-visible{outline:2px solid Highlight}}@media(prefers-reduced-motion:reduce){.bub,.bub.in,.bub.in:hover,.bub.on,.tip,.pop,.selbar,.menu,.all,.xp,.ttip,.tt,.toast,.ref .rc{transform:none!important}.sw:after{transform:none!important;transition-property:opacity}[aria-checked=true]>.sw:after{opacity:0}[aria-checked=true]>.sw:before{opacity:1}.th{transition-property:opacity,box-shadow}.tip.show{transition-property:opacity}.pick,.pick.show{transition:opacity .16s ease-in-out}.all,.all.show,.xp,.xp.show{transition-property:opacity}.namebar,.namebar.show{transform:none!important;transition:opacity .16s ease-in-out}.av,.nf{transform:none!important}.av.ai:after{animation:none;opacity:0}.ghost .dots i{animation:none;opacity:.6}@keyframes pu-pulse{0%{opacity:0}35%{opacity:.85}to{opacity:0}}}',Mn="#534AB7";function Cn(e){let t=/rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)(?:\s*[,/]\s*([\d.]+%?))?\s*\)/.exec(e);if(!t||void 0===t[1]||void 0===t[2]||void 0===t[3])return null;let n=void 0===t[4]?1:t[4].endsWith("%")?parseFloat(t[4])/100:parseFloat(t[4]);return{r:Number(t[1]),g:Number(t[2]),b:Number(t[3]),a:n}}function An(e){let t=e=>{let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4};return.2126*t(e.r)+.7152*t(e.g)+.0722*t(e.b)}var Tn=(e,t)=>(Math.max(e,t)+.05)/(Math.min(e,t)+.05);function Pn(e){let t=e.ownerDocument,n=t.defaultView;if(!n)return{font:"system-ui, sans-serif",accent:Mn,dark:!1,on:"#fff"};let o=t.documentElement,i=n.getComputedStyle(e).fontFamily||"system-ui, sans-serif",r=(n.getComputedStyle(o).getPropertyValue("--pipeup-accent")||o.style.getPropertyValue("--pipeup-accent")).trim(),a=e.querySelector("a[href]"),l=a?n.getComputedStyle(a).color:"",s=Cn(n.getComputedStyle(t.body).backgroundColor);(!s||0===s.a)&&(s=Cn(n.getComputedStyle(o).backgroundColor));let d=!!(s&&s.a>0?An(s)<.2:!0===n.matchMedia?.("(prefers-color-scheme: dark)").matches&&/dark/.test(n.getComputedStyle(o).colorScheme||"")),c=l&&"rgb(0, 0, 238)"!==l?Cn(l):null,u=c&&Tn(An(c),d?.011:1)>=3,p=r||(u?l:d?"#9A94EE":Mn),h=Cn(p);return{font:i,accent:p,dark:d,on:h&&Tn(An(h),1)<3?"#111":"#fff"}}function Nn(e,t){e.style.setProperty("--pu-font",t.font),e.style.setProperty("--pu-accent",t.accent),e.style.setProperty("--pu-on",t.on),e.classList.toggle("dark",t.dark)}function qn(e,t=!1){return tn(e,t)?"column":"bubbles"}var zn="Shown here, but not saved yet — it will be saved with your next change",Rn=e=>e instanceof Error?e.message.replace(/^pipeup: /,""):"Something went wrong";function On(e){let t=Pn(e.root),n=function(e,t=document){let n=t.createElement("pipeup-root");n.setAttribute("data-pipeup-ignore",""),n.style.cssText="position:fixed!important;inset:0!important;pointer-events:none!important;z-index:2147483000!important;display:block!important;margin:0!important;visibility:visible!important;opacity:1!important;transform:none!important;filter:none!important;";let o=n.attachShadow({mode:"open"}),i=t.defaultView?.CSSStyleSheet;if(i&&"replaceSync"in i.prototype&&"adoptedStyleSheets"in o){let e=new i;e.replaceSync(Ln),o.adoptedStyleSheets=[e]}else{let e=t.createElement("style");e.textContent=Ln,o.append(e)}let r=t.createElement("div");return r.className="layer",r.style.setProperty("--pu-panel","320px"),r.style.setProperty("--pu-pop",`${At()}px`),Nn(r,e),o.append(r),t.documentElement.append(n),{element:n,shadow:o,t:r,destroy:()=>n.remove()}}(t),o=function(e=document,t=!1){let n=e.defaultView?.CSSStyleSheet;if(!n||!("replaceSync"in n.prototype)||!("adoptedStyleSheets"in e))return{Ee(){},ke(){},ae(){},Se(){},remove:()=>$n()};let o=new n,i=null,r=!1,a=1,l=0,s="",d=0,c=()=>o.replaceSync(((e,t)=>xn.map(n=>{let[o,i,r,a]=kn[n][e?1:0];return`::highlight(${n}){background-color:rgba(${o},${i},${r},${+(a*t).toFixed(3)})}`}).join(""))(t,a)+(null===i?"":`:root{--pipeup-gutter:${i}px}`)+(r?Sn:"")+(l||s?`html{--pipeup-panel:${l}px;${l?`margin-right:${l}px!important;`:""}${s}}`:""));return c(),e.adoptedStyleSheets=[...e.adoptedStyleSheets,o],{Ee(e){e!==i&&(i=e,c())},ke(e){e!==r&&(r=e,c())},ae(e){a=e,c()},Se(e,t){e!==l&&(l=e,s=t?"":"transition:margin-right .34s cubic-bezier(.4,0,.2,1)!important",clearTimeout(d),!e&&s&&(d=window.setTimeout(()=>{s="",c()},400)),c())},remove(){clearTimeout(d),e.adoptedStyleSheets=e.adoptedStyleSheets.filter(e=>e!==o),$n()}}}(document,t.dark);o.ae(0);let i=!0===window.matchMedia?.("(prefers-reduced-motion: reduce)").matches,r=document.documentElement.hasAttribute("data-pipeup-reserve"),a=new Map,l=new Set,s=new WeakSet,d={i:null,f:null,C:!1,hidden:!0,mode:qn(e.root),o:null,l:!1,d:!1,Te:!1,c:!1},c=Fe("div",{class:"toast",role:"status","aria-live":"polite"}),u=Fe("div",{class:"sr","aria-live":"polite"});n.t.append(c,u);let p=null,h=[],f=null,m=!1,v=0,g=0,w=0,y=0,b=0,x=new Set,k="",E=new Map,S=function(e,t,n=function(){return{s:e=>e.getBoundingClientRect(),shown:e=>!1!==e.checkVisibility?.({opacityProperty:!0,visibilityProperty:!0}),opacity:e=>parseFloat(getComputedStyle(e).opacity)||0,ne:()=>({width:window.innerWidth,height:window.innerHeight})}}()){let o=!0===window.matchMedia?.("(prefers-reduced-motion: reduce)").matches,i=null,r=null,a=0,l=!1,s=()=>[...e.querySelectorAll(cn)],d=()=>[...e.querySelectorAll(".slides > section")],c=e=>"string"==typeof e&&e.length>0&&e.length<=200?e:null,u=e=>c(e?.getAttribute("data-pipeup-slide"));function p(){if(hn){let e=null;if(vn(()=>{let t=hn.current();Number.isInteger(t)&&t>0&&(e=String(t))}),null!==e)return e}let e=bn();if(e){let t=null;if(vn(()=>{let n=e.getIndices().h,o=d()[n];t=u(o?.matches(cn)?o:o?.querySelector(cn))??c(String(n+1))}),null!==t)return t}return i&&!i.isConnected&&(i=null),i=function(e,t,n){let o=t.ne(),i=null,r=0,a=0;for(let l of e){if(!t.shown(l))continue;let e=t.s(l),s=Math.min(e.left+e.width,o.width)-Math.max(e.left,0),d=Math.min(e.top+e.height,o.height)-Math.max(e.top,0);if(s<=0||d<=0)continue;let c=Math.round(s*d),u=t.opacity(l);(c>r||c===r&&(u>a||u===a&&l===n))&&(i=l,r=c,a=u)}return i}(s(),n,i)??i,u(i)}function h(){a=0,r=p(),t()}let f=()=>{!a&&!l&&(a=requestAnimationFrame(h))},m=e=>function(e,t,n){return null!==t?void 0===e?.slide||e.slide===t:!e||!n||Object.entries(e).every(([e,t])=>"label"===e||"slide"===e||n[e]===t)}(e,r,pn),v=new MutationObserver(e=>{e.some(e=>e.target instanceof Element&&e.target.matches(cn))&&f()});v.observe(e,{subtree:!0,attributes:!0,attributeFilter:["class","style","hidden"]});for(let e of un)window.addEventListener(e,f,{capture:!0,passive:!0});return mn.add(f),r=p(),{slide:()=>r,view(e){let t=e instanceof Element?e:e?.parentElement,n=u(t?.closest(cn))??r,o={...null!==n?{slide:n}:{},...pn};return Object.keys(o).length?o:void 0},u:m,R:function(e){if(m(e))return Promise.resolve(!0);let t=e.slide,n=bn(),i=s().find(e=>u(e)===t),a=/^[1-9]\d{0,5}$/.test(t??"");if(a&&hn)vn(()=>hn.go(Number(t)));else if(a&&n){let e=i?d().findIndex(e=>e===i||e.contains(i)):-1;vn(()=>n.slide(e>=0?e:Number(t)-1))}else if(fn.size)for(let t of fn)vn(()=>t({...e}));else{if(!i)return Promise.resolve(!1);i.scrollIntoView({block:"start",behavior:o?"auto":"smooth"})}let c=performance.now();return new Promise(t=>{let n=e=>{clearTimeout(o),t(e)},o=setTimeout(()=>n(!1),1e3),i=()=>l?n(!1):(r=p(),m(e)?n(!0):performance.now()-c>=1e3?n(!1):void requestAnimationFrame(i));requestAnimationFrame(i)})},destroy(){l=!0,cancelAnimationFrame(a),v.disconnect();for(let e of un)window.removeEventListener(e,f,!0);mn.delete(f)}}}(e.root,()=>{!m&&B()&&U()}),$=!1,L=0;function M(e,t=2400,n=!1,o=!1){m||($=n,c.textContent=e,o?c.setAttribute("aria-hidden","true"):c.removeAttribute("aria-hidden"),c.classList.add("show"),window.clearTimeout(v),v=window.setTimeout(()=>c.classList.remove("show"),t))}function C(){$&&($=!1,window.clearTimeout(v),c.classList.remove("show"))}function A(e){u.textContent="",cancelAnimationFrame(L),L=requestAnimationFrame(()=>u.textContent=e)}function T(e){M(Rn(e))}function P(e){throw T(e),e}let N=t=>({thread:t,location:xe(t.anchor,a.get(t.id)??fe(t.anchor,e.root),e.root)}),q={reply:async(t,n)=>{try{await e.doc.reply(t,n)}catch(e){e instanceof j?M(zn):P(e)}},resolve:async t=>{try{await e.doc.resolve(t),M("Resolved · Show resolved brings it back")}catch(e){M(e instanceof j?`Resolved · ${zn}`:Rn(e))}(e=>d.i===e&&!d.C&&(f?.ie()?f.se():n.t.querySelector(".launch .mode")?.focus({preventScroll:!0}),!0))(t)&&(d.i=null)},reopen:async t=>{try{await e.doc.reopen(t),M("Reopened")}catch(e){M(e instanceof j?`Reopened · ${zn}`:Rn(e))}},close:()=>{Q(null);let e=Y&&n.t.querySelector(Y);e?e.focus({preventScroll:!0}):f?.se(),Y=""},copy:t=>{try{let o=e.doc.threads().find(e=>e.id===t);if(!o)return;ln(Le(N(o),"ai",location.href,Date.now()),n.t).then(()=>M("Thread copied as Markdown for AI"),e=>M(Rn(e)))}catch(e){M(Rn(e))}}},z={copyAll:async e=>{let t=z.all(),o=Me(t,e,{title:document.title,url:location.href,exportedAt:new Date});try{await ln(o,n.t);let i=t.filter(e=>!e.thread.resolved).length;M(`Copied ${i} thread${1===i?"":"s"}${"ai"===e?" as Markdown for AI":""}`)}catch(e){M(Rn(e))}},je:()=>{d.C=!d.C,U()},rename:async t=>{let n=t.replace(/\s+/g," ").trim();try{await async function(t){try{return await e.onName(t),!1}catch(n){if(e.doc.name!==t)throw n;return!0}}(n)?M(`New comments will say ${n}, but this browser couldn't remember it`):M(`New comments will say ${n}`)}catch(e){M(Rn(e))}},name:()=>e.doc.name,all:()=>[...e.doc.threads()].sort(qt(O)).map(N)},R={},O={get addons(){return R.surface},doc:e.doc,root:e.root,t:n.t,host:n.element,state:d,resolved:a,S:l,ee:q,c:z,p:S,V:e=>x.has(e.id),xe:()=>{B()&&U()},B:e=>!d.hidden&&(!e.resolved||d.C||(e=>""!==(n.t.querySelector(`[data-thread="${e}"] .rbox textarea`)?.value.trim()??""))(e.id))&&!x.has(e.id),Xe:(t,n)=>{for(let o of e.doc.threads()){let e=a.get(o.id);if(o.anchor.quote&&O.B(o)&&e?.range&&Ct(t,n,$t(e)))return o}return null},te:(e,t)=>O.L()?O.Xe(e,t):null,w:e=>e.composedPath().includes(n.element),ye:e=>{s.add(e)},Ue:e=>s.has(e),open:Q,Je:e=>X(e),f:function(e){d.f!==e&&(d.f=e,e&&e!==d.i&&re(e),U())},Ye:ee,qe:function(e){if(!d.o)return ee(e);Object.assign(d.o,e),U()},L:()=>!p||p.De(),we:e=>{let t=p?.ge();e(),t?.()},ze:()=>{let e=d.o?.anchor.view,t=p?.ge();Promise.resolve(S.u(e)||S.R(e??{}).then(()=>O.xe())).then(t)},Be:async function(t){let n=d.o;if(n)try{let o=await e.doc.comment(n.anchor,t);d.o=null,F(new Set([o])),Q(o,!0)}catch(e){if(e instanceof j)return d.o=null,F(new Set([e.id])),Q(e.id,!0),void M(zn);P(e)}},Fe:te,Ge:ne,F:ie,H:e=>{p=e},J:M,E:A,Ke:C,oe:T,Qe:re,m:U,re:oe},D=R.surface=new ft(O,n.shadow,u);function F(t){let n=performance.now(),o=e.doc.threads();for(let i of o){if(t&&!t.has(i.id))continue;let o=performance.now()-n<40,r=fe(i.anchor,e.root,{fuzzy:o});a.set(i.id,r),o||"orphaned"!==r.state?l.delete(i.id):l.add(i.id)}for(let e of[...a.keys()])o.some(t=>t.id===e)||a.delete(e);0===l.size?(window.clearTimeout(y),y=0):0===y&&(y=window.setTimeout(()=>{y=0,!m&&(F(new Set(l)),U())},250))}function B(){let t=new Set,n=null!==S.slide(),o=new Set;for(let i of e.doc.threads()){o.add(i.id);let e=a.get(i.id)?.element;(!S.u(i.anchor.view)||!n&&!1===e?.checkVisibility?.({visibilityProperty:!0}))&&t.add(i.id)}x=t;for(let e of E.keys())o.has(e)||E.delete(e);let i=`${S.slide()}|${[...t].join()}`;return i!==k&&(k=i,!0)}let I=0,H=0,W=0,K=0,V=0;function U(){if(m)return;let t=e.doc.threads();if(B(),d.i&&x.has(d.i)){let e=n.t.querySelector(`[data-thread="${d.i}"] .rbox textarea`)?.value;e&&E.set(d.i,e),d.i=null}d.hidden=!(d.l||d.d||d.Te||d.o),d.hidden&&(d.i=null),function(e){if(e===H)return;H=e,cancelAnimationFrame(W);let t=I,n=performance.now(),i=e?260:200,r=a=>{let l=Math.min(1,(a-n)/i);I=t+(e-t)*(e?1-(1-l)**3:l*l),o.ae(I),l<1&&(W=requestAnimationFrame(r))};W=requestAnimationFrame(r)}(d.hidden?0:1),n.t.classList.toggle("hidden",d.hidden),n.t.classList.toggle("listing",d.d);let l=d.d&&!Tt();(function(e){e!==K&&(K=e,o.Se(e,i),window.clearTimeout(V),V=window.setTimeout(()=>{F(),U()},i?0:400))})(l?320:0),o.Ee(r?"column"!==d.mode||d.hidden||l?0:320:null),function(e){let t=[],n=[],o=[];for(let i of e){let e=a.get(i.id);i.resolved&&!d.C||!e?.range||x.has(i.id)||(i.id===d.i||i.id===d.f?n.push(e.range):i.resolved?o.push(e.range):t.push(e.range))}d.o&&S.u(d.o.anchor.view)&&n.push(...d.o.ranges),function(e){if(En())for(let t of xn)CSS.highlights.set(t,new Highlight(...e[t.slice(7)]))}({quote:t,on:n,done:o})}(t);for(let e of h)e.m(t);f?.m(t),d.hidden||D.flush()}let Y="",_=()=>n.t.getRootNode().activeElement,G="input,textarea,select,[contenteditable]:not([contenteditable=false])",J=()=>{let e=_();return e instanceof HTMLTextAreaElement&&""!==e.value||!!document.activeElement?.matches(G)};function X(e,t=J(),o=_()){let i=[...n.t.querySelectorAll(`[data-thread="${e}"] .rbox textarea`)].find(e=>!e.closest("[inert]")),r=o?.getAttribute("data-thread");Y=r?`.${o.classList[0]}[data-thread="${r}"]`:"",!t&&i&&i.focus({preventScroll:!0})}function Z(){let e=d.o;return!(!e||O.L()||(S.u(e.anchor.view)||S.R(e.anchor.view??{}),0))}function Q(e,t=!1){if(e&&Z())return;if(d.i===e&&!d.o)return e?X(e):void 0;let o=!t&&J(),i=_();if(e||(d.Te=!1),d.i=e,e&&(d.o=null,re(e)),U(),e){let r=E.get(e),a=r&&n.t.querySelector(`[data-thread="${e}"] .rbox textarea`);a&&!a.value&&(a.value=r,a.dispatchEvent(new Event("input",{bubbles:!0}))),E.delete(e),t&&f?.ie()?f.se():X(e,o,i)}}function ee(e){C(),d.d=!1,d.o=e,d.i=null,U()}function te(){d.o&&(d.o=null,U())}function ne(e,t=!1){d.l!==e&&(d.l=e,o.ke(e),e?(d.i=null,d.d=!1,f=en(O)):(C(),f?.destroy(),f=null,A("Comment mode off")),U(),f&&(t&&f.be(),t?f.ie()?M(Qt,1e4,!0,!0):M("Nothing here to comment on"):M(`Click anything to comment, or Tab between blocks · Option-click (Alt-click) to pin · ${xt} or Esc to finish`,4e3,!0)))}function oe(){d.o&&(S.u(d.o.anchor.view)||O.L())?te():d.i?Q(null):f&&!f.re()&&ne(!1)}function ie(){d.o?Z()||te():d.i&&Q(null)}function re(e){let t=a.get(e);!t||"orphaned"===t.state||ae(t.range?$t(t):t.element?[t.element.getBoundingClientRect()]:[])}function ae(e){for(let t of e.slice(0,6)){let e=Fe("div",{class:"pulse"});je(e,t,4),n.t.prepend(e),window.setTimeout(()=>e.remove(),1300)}}function le(){for(let e of h)e.destroy();h=function(e){return[..."column"===e.state.mode?[on(e),Ot(e,{Z:!1})]:[Ot(e,{Z:!0})],an(e),dn(e)]}(O),U()}Oe.go=t=>{if(t.startsWith("slide:"))return void S.R({slide:t.slice(6)});let n=decodeURIComponent(t.slice(6)).replace(/\s+/g," ").toLowerCase(),o=[...e.root.querySelectorAll("p,li,h1,h2,h3,h4,h5,h6,td,th,blockquote,figcaption,dt,dd")].find(e=>(e.textContent??"").replace(/\s+/g," ").toLowerCase().includes(n));o&&(o.scrollIntoView({block:"center",behavior:i?"auto":"smooth"}),window.setTimeout(()=>ae([o.getBoundingClientRect()]),i?0:450))};let se=()=>{if(!m){for(let e of h)e.T();f?.T(),D.T(),b=requestAnimationFrame(se)}},de=e=>{if("Escape"===e.key)return oe();if(function(e){return"KeyC"===e.code&&e.shiftKey&&e.altKey&&!e.metaKey&&!e.ctrlKey&&!e.repeat&&!e.getModifierState("AltGraph")}(e)&&!e.isComposing&&!e.defaultPrevented&&!(e=>{let t=e.composedPath()[0];return t instanceof Element&&null!==t.closest(G)})(e)){if(e.preventDefault(),f?.We()&&f.be())return;ne(!d.l,!0)}},ce=e=>{if(O.w(e)||s.has(e))return;let t=window.getSelection();t&&!t.isCollapsed||ie()},ue=()=>{n.t.style.setProperty("--pu-pop",`${At()}px`);let t=qn(e.root,"column"===d.mode);t!==d.mode?(d.mode=t,le()):U()};function pe(){let e=performance.now();0===g&&(w=e),window.clearTimeout(g);let t=Math.min(120,Math.max(0,w+1e3-e));g=window.setTimeout(()=>{g=0,F(),U()},t)}let he=new MutationObserver(e=>{e.every(e=>n.element.contains(e.target))||pe()});window.addEventListener("keydown",de),window.addEventListener("click",ce),window.addEventListener("resize",ue),he.observe(e.root,{subtree:!0,childList:!0,characterData:!0});let me=new MutationObserver(()=>Nn(n.t,Pn(e.root)));for(let e of[document.documentElement,document.body])me.observe(e,{attributes:!0});let ve=new ResizeObserver(pe);ve.observe(e.root);let ge=e.doc.onChange((e,t,n)=>{D.Oe(t,n),F(),U()});return F(),le(),b=requestAnimationFrame(se),{ctx:O,destroy(){m=!0,cancelAnimationFrame(b),cancelAnimationFrame(W),cancelAnimationFrame(L),S.destroy(),window.clearTimeout(V),window.clearTimeout(v),window.clearTimeout(g),window.clearTimeout(y),he.disconnect(),Oe.go=void 0,ve.disconnect(),me.disconnect(),ge(),window.removeEventListener("keydown",de),window.removeEventListener("click",ce),window.removeEventListener("resize",ue),f?.destroy();for(let e of h)e.destroy();D.destroy(),o.remove(),n.destroy()}}}var Dn=null;function Fn(e={}){if(gt)return gt.mount(e);if(!function(){if(gt)return!0;let e=globalThis,t=e.pipeupAddons;if(Array.isArray(t))for(let e of t)yt(e);else if(t&&"object"==typeof t&&t.push!==yt)return!1;return e.pipeupAddons={push:yt},!0}())return Promise.reject(new Error("pipeup: another copy of Pipeup owns the add-on queue. Remove one script."));if(Dn)return Dn;let t=async function(e,t){let n,o,i=document.documentElement.getAttribute("data-pipeup-doc"),{id:a,key:l}=i?await B(i):{id:`page-${r(location.origin+location.pathname)}`,key:null},s=!1;if(e.store)n=e.store,o=await G(n);else try{let e=J.open();n=await function(e){return new Promise((t,n)=>{let o=setTimeout(()=>n(new Error("timed out")),4e3);e.then(t,n).finally(()=>clearTimeout(o))})}(e).catch(t=>{throw e.then(e=>e.close(),()=>{}),t}),o=await G(n)}catch{n=new Y,s=!0,o=await G(n)}let d=e.name?.trim();d&&d!==o.name&&(o={...o,name:d},await n.saveProfile(o));let c,u=await K.open({doc:a,key:l,store:n,identity:o.identity,name:o.name});yn(e.slides??null);try{c=On({doc:u,root:e.root??document.body,onName:async e=>{u.name=e,o={...o,name:e},await n.saveProfile(o)}})}catch(e){throw yn(null),e}s&&c.ctx.J("This browser can't keep comments for this page — copy the comments (Copy as Markdown) to keep them");let p=()=>{u.flush().catch(e=>globalThis.reportError?.(e))},h=function(e){let t={...e,i:!0};vt=t;for(let e of mt.values())"waiting"===e.info.state&&bt(e,t);return()=>{t.i=!1,vt===t&&(vt=null);for(let e of[...mt.values()].reverse())e.stop?.(),delete e.stop;e.surface.destroy()}}({surface:c.ctx.addons,doc:u,root:e.root??document.body,ephemeral:s,version:Ne}),f=!1;return window.addEventListener("pagehide",p),{document:u,flush:()=>u.flush(),unmount:()=>{f||(f=!0,window.removeEventListener("pagehide",p),h(),c.destroy(),yn(null),Dn===t()&&(Dn=null))}}}(e,()=>t).catch(e=>{throw Dn===t&&(Dn=null),e});return Dn=t,t}export{ct as ADDON_API,R as AI_NAME,C as ANIMALS,A as COLOURS,_ as DEFAULT_PROFILE_NAME,J as IndexedDbStore,Y as MemoryStore,K as PipeupDocument,j as UnsavedChangeError,Ne as VERSION,wt as addons,q as animalName,L as computeOpId,Me as copyAll,Le as copyThread,s as createIdentity,de as describeElement,se as describeRange,$e as formatAgo,O as isAiName,be as labelOf,G as loadOrCreateProfile,xe as locate,Fn as mount,z as nameOf,F as newDocumentAttribute,wn as onReveal,B as parseDocumentAttribute,fe as resolveAnchor,gn as setViewState,g as signOp,yt as use};