@panphora/hyper-cms 0.6.0 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
- var hypercms=(()=>{var rt=Object.defineProperty;var zr=Object.getOwnPropertyDescriptor;var Wr=Object.getOwnPropertyNames;var Vr=Object.prototype.hasOwnProperty;var nt=(e,t)=>{for(var r in t)rt(e,r,{get:t[r],enumerable:!0})},Kr=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Wr(t))!Vr.call(e,i)&&i!==r&&rt(e,i,{get:()=>t[i],enumerable:!(n=zr(t,i))||n.enumerable});return e};var Gr=e=>Kr(rt({},"__esModule",{value:!0}),e);var io={};nt(io,{cms:()=>ro,default:()=>no});var Ce=["textContent","innerText","innerHTML","outerHTML","value","checked","selected","disabled","readOnly","type","tagName","nodeName","nodeType","nodeValue","childElementCount","id","className","classList","baseURI","offsetWidth","offsetHeight","clientWidth","clientHeight","scrollWidth","scrollHeight","dataset","currentSrc","duration","paused","title","documentURI","contentType"],it=new Set(Ce),$t=new Set(["textContent","innerText","innerHTML","value","checked","selected","disabled","readOnly","type","id","className","title"]),Bt=new Set(["tagName","nodeName","nodeType","nodeValue","childElementCount","classList","baseURI","documentURI","contentType","offsetWidth","offsetHeight","clientWidth","clientHeight","scrollWidth","scrollHeight","currentSrc","duration","paused","dataset"]);var Me={};nt(Me,{EmptyListInsert:()=>pe,MAX_RULE_DEPTH:()=>ne,MaxRuleDepthExceeded:()=>G,RuleTargetReadOnly:()=>fe,RulesParseError:()=>re,ShapeMismatch:()=>he,UnknownRulesVersion:()=>me,UpgradeAlreadyRegistered:()=>Re});var re=class extends Error{constructor(t,r){super(t),this.name="RulesParseError",this.cause=r}},me=class extends Error{constructor(t){super(`unknown rules version: ${t}. Library supports "1".`),this.name="UnknownRulesVersion",this.version=t}},ne=20,G=class extends Error{constructor(t){super(`rule depth exceeded ${ne} at path: ${t.join(".")}`),this.name="MaxRuleDepthExceeded",this.path=t}},he=class extends Error{constructor(t){super(`shape mismatch: ${t.length} field(s) failed validation`),this.name="ShapeMismatch",this.mismatches=t}},pe=class extends Error{constructor(t){super(`cannot add items to empty list at "${t.join(".")}" \u2014 no sibling to clone as template. Seed the list with a hidden item first.`),this.name="EmptyListInsert",this.path=t}},fe=class extends Error{constructor(t){super(`cannot write to read-only DOM property "${t}"`),this.name="RuleTargetReadOnly",this.target=t}},Re=class extends Error{constructor(){super("upgrade transform already registered; only one registration is allowed per page."),this.name="UpgradeAlreadyRegistered"}};function z(e,t,r,n={}){return ot(e,t,r,{depth:0,path:[]},n)}function ot(e,t,r,n,i){if(n.depth>ne)throw new G(n.path);if(typeof r=="string")return Yr(e,t,r,i);if(Array.isArray(r)){let[o,a]=r;return e.find(t,o,i).map((l,c)=>ot(e,l,a,{depth:n.depth+1,path:[...n.path,c]},i))}if(typeof r=="object"&&r!==null){let o={};for(let[a,s]of Object.entries(r))o[a]=ot(e,t,s,{depth:n.depth+1,path:[...n.path,a]},i);return o}return null}function Yr(e,t,r,n){if(r.endsWith("[]")){let o=r.slice(0,-2);return e.find(t,o,n).map(a=>e.text(a))}if(r.startsWith("@"))return Pt(e,t,r.slice(1));if(r.includes("@")){let o=r.lastIndexOf("@"),a=r.slice(0,o),s=r.slice(o+1),l=a?e.find(t,a,n):[t];return l.length===0?null:Pt(e,l[0],s)}if(r===".")return e.text(t);let i=e.find(t,r,n);return i.length===0?null:e.text(i[0])}function Pt(e,t,r){if(it.has(r)){let i=e.prop(t,r);return i==null?null:String(i)}let n=e.attr(t,r);return n||null}var Jr=.5;function st(e,t,r,n,i,o,a,s={}){let l=e.find(t,r,s);if(i.length===0){l.forEach(S=>e.remove(S));return}let c=i.length>l.length,d=l[0]||null;if(c&&!d&&(d=tn(e,t,r,s),!d))throw new pe(o.path);let m=l.map(S=>Xr(e,S,n,s)),h=null;if(d){h=e.clone(d),s.templateAttr&&e.removeAttr(h,s.templateAttr);let S=e.stripIds(h);S>0&&console.warn(`[hyper-html-api] stripped ${S} id attribute(s) from cloned template at "${o.path.join(".")||"(root)"}"`)}let y=Zr(i,m,n),x=l[0]||d,T=e.parent(x),k=l.length>0?en(e,T,x):0,M=new Set,E=i.map((S,C)=>{let A=y[C];if(A>=0)return M.add(A),l[A];let b=e.clone(h);return e.stripIds(b),b});l.forEach((S,C)=>{M.has(C)||e.remove(S)}),E.forEach((S,C)=>{let A=k+C;e.children(T).findIndex(u=>e.sameNode(u,S))!==A&&e.insertAt(T,S,A)}),E.forEach((S,C)=>{if(n===null){let A=i[C],b=A==null?"":String(A);e.text(S)!==b&&e.text(S,b)}else{let A=a(e,S,n,i[C],{depth:o.depth+1,path:[...o.path,C]},s);A&&A!==S&&(E[C]=A)}})}function Xr(e,t,r,n){return r===null?e.text(t):z(e,t,r,n)}function Zr(e,t,r){let n=new Array(e.length).fill(-1),i=new Set;return e.forEach((o,a)=>{let s=-1,l=-1;t.forEach((c,d)=>{if(i.has(d))return;let m=Qr(o,c,r),h=m===l&&s>=0?Math.abs(d-a)<Math.abs(s-a):!1;(m>l||h)&&(l=m,s=d)}),l>=Jr&&(n[a]=s,i.add(s))}),n}function Qr(e,t,r){if(r===null)return e===t?1:0;let n=Object.keys(r||{});if(n.length===0)return 0;let i=0;for(let o of n)JSON.stringify(e?.[o])===JSON.stringify(t?.[o])&&i++;return i/n.length}function en(e,t,r){let n=e.children(t);for(let i=0;i<n.length;i++)if(e.sameNode(n[i],r))return i;return-1}function tn(e,t,r,n){if(!n.templateAttr)return null;let i=t;for(;i;){let o=e.find(i,r,{includeRulesTag:!1});for(let a of o)if(e.attr(a,n.templateAttr)!=null)return a;i=e.parent(i)}return null}var Ht=new Set(["checked","selected","disabled","readOnly","paused"]);function Y(e,t,r,n,i={}){let o=[];if(at(r,n,[],o),o.length)throw new he(o);Te(e,t,r,n,{depth:0,path:[]},i)}function Te(e,t,r,n,i,o={}){if(i.depth>ne)throw new G(i.path);if(n===void 0)return t;if(typeof r=="string")return rn(e,t,r,n,i,o);if(Array.isArray(r)){let[a,s]=r;return st(e,t,a,s,n,i,Te,o),t}if(typeof r=="object"&&r!==null){for(let[a,s]of Object.entries(r)){let l=Te(e,t,s,n==null?n:n[a],{depth:i.depth+1,path:[...i.path,a]},o);l&&l!==t&&(t=l)}return t}return t}function rn(e,t,r,n,i,o){if(r.endsWith("[]")){let s=r.slice(0,-2);return st(e,t,s,null,n,i,Te,o),t}if(r.startsWith("@"))return Ut(e,t,r.slice(1),n);if(r.includes("@")){let s=r.lastIndexOf("@"),l=r.slice(0,s),c=r.slice(s+1),d=l?e.find(t,l,o):[t];return d.length===0||Ut(e,d[0],c,n),t}if(r===".")return e.text(t,n==null?"":String(n)),t;let a=e.find(t,r,o);return a.length===0||e.text(a[0],n==null?"":String(n)),t}function Ut(e,t,r,n){if(Bt.has(r))throw new fe(r);if(r==="outerHTML"){let i=n==null?"":String(n);return e.replaceWith(t,i)}return $t.has(r)?(e.prop(t,r,nn(r,n)),t):(e.attr(t,r,n==null?"":String(n)),t)}function nn(e,t){return t==null?Ht.has(e)?!1:"":Ht.has(e)?!!t:t}function at(e,t,r,n){if(t!==void 0){if(typeof e=="string"){if(e.endsWith("[]")){Array.isArray(t)?t.forEach((i,o)=>{typeof i=="object"&&i!==null&&n.push({path:ge([...r,o]),expected:"scalar",got:be(i)})}):n.push({path:ge(r),expected:"array",got:be(t)});return}t!==null&&typeof t=="object"&&n.push({path:ge(r),expected:"scalar",got:be(t)});return}if(Array.isArray(e)){if(!Array.isArray(t)){n.push({path:ge(r),expected:"array",got:be(t)});return}let i=e[1];t.forEach((o,a)=>at(i,o,[...r,a],n));return}if(typeof e=="object"&&e!==null){if(t===null||Array.isArray(t)||typeof t!="object"){n.push({path:ge(r),expected:"object",got:be(t)});return}for(let[i,o]of Object.entries(e))at(o,t[i],[...r,i],n)}}}function be(e){return e===null?"null":Array.isArray(e)?"array":typeof e}function ge(e){return e.join(".")}function lt(e){try{return JSON.parse(e)}catch(t){throw new re(`Invalid strict JSON: ${t.message}`,t)}}function ke(e){try{return JSON.parse(e)}catch{}let t={BRACE_OPEN:"{",BRACE_CLOSE:"}",BRACKET_OPEN:"[",BRACKET_CLOSE:"]",COLON:":",COMMA:",",STRING:"STRING",SELECTOR:"SELECTOR",IDENTIFIER:"IDENTIFIER",NUMBER:"NUMBER",BOOLEAN:"BOOLEAN"};function r(i){let o=[],a=0;for(;a<i.length;){let s=i[a];if(/\s/.test(s)){a++;continue}if("{}".includes(s)){o.push({type:s,value:s}),a++;continue}if(s==="["){let m=!1,h=a+1;for(;h<i.length&&/\s/.test(i[h]);)h++;if(h<i.length&&/[a-zA-Z_]/.test(i[h])&&(m=!0),!m){o.push({type:s,value:s}),a++;continue}}if(s==="]"){o.push({type:s,value:s}),a++;continue}if(s===":"){o.push({type:t.COLON,value:s}),a++;continue}if(s===","){o.push({type:t.COMMA,value:s}),a++;continue}if(s==='"'||s==="'"){let m=s,h=a+1;for(;h<i.length&&i[h]!==m;)i[h]==="\\"&&h++,h++;o.push({type:t.STRING,value:i.substring(a+1,h),quoted:!0,sourceQuote:m}),a=h+1;continue}let l=a,c;for(;l<i.length&&!/[{},]/.test(i[l]);)if(i[l]===":"){let m=[":first",":last",":nth-child",":nth-of-type",":first-child",":last-child",":first-of-type",":last-of-type",":only-child",":only-of-type",":hover",":focus",":active",":visited",":disabled",":enabled",":checked",":empty",":root",":target",":not",":before",":after",":nth-last-child",":nth-last-of-type"],h=!1;for(let y of m){let x=y.substring(1);if(i.substring(l+1,l+1+x.length)===x){h=!0,l+=x.length;break}}if(!h)break}else if(i[l]==="["){for(l++;l<i.length&&i[l]!=="]";){if(i[l]==='"'||i[l]==="'"){let m=i[l];for(l++;l<i.length&&i[l]!==m;)i[l]==="\\"&&l++,l++}l++}l<i.length&&i[l]==="]"&&l++}else l++;c=i.substring(a,l);let d=t.IDENTIFIER;/^-?\d+(\.\d+)?$/.test(c)?d=t.NUMBER:c==="true"||c==="false"||c==="null"?d=t.BOOLEAN:/^[.#@\[]|[.#@\[]| /.test(c)&&(d=t.SELECTOR),o.push({type:d,value:c,quoted:!1}),a=l}return o}function n(i){let o="";for(let a=0;a<i.length;a++){let s=i[a];if("{}".includes(s.type)||"[]".includes(s.type)){o+=s.value;continue}if(s.type===t.COLON){o+=s.value;continue}if(s.type===t.COMMA){let l=i[a+1];if(l&&(l.type==="}"||l.type==="]"))continue;o+=s.value;continue}if(s.type===t.STRING&&s.quoted){let l=s.value;s.sourceQuote==="'"&&(l=l.replace(/\\'/g,"'"),l=l.replace(/(\\*)"/g,(c,d)=>d.length%2===0?d+'\\"':c)),o+=`"${l}"`;continue}if(s.type===t.NUMBER||s.type===t.BOOLEAN){o+=s.value;continue}if(s.type===t.SELECTOR||s.type===t.IDENTIFIER){o+=`"${s.value}"`;continue}o+=`"${s.value}"`}return o}try{let i=r(e),o=n(i);return JSON.parse(o)}catch(i){throw new re("Invalid extraction rules syntax: "+i.message,i)}}var on="1",zt=/^[a-zA-Z0-9_-]+$/;function J(e,t,r){let n;if(r===void 0)n="script[data-rules-name]";else{if(typeof r!="string"||!zt.test(r))throw new Error(`hyper-html-api: invalid rules token ${JSON.stringify(r)} (must match ${zt})`);n=`script[data-rules-name~="${r}"]`}let i=e.find(t,n,{includeRulesTag:!0});if(i.length===0)return null;r!==void 0&&i.length>1&&console.warn(`hyper-html-api: ${i.length} rules tags match data-rules-name~="${r}"; using the first.`);let o=i[0],a=e.attr(o,"data-rules-version");if(a!==on)throw new me(a);return{rules:ke(e.text(o)),tagNode:o}}function ct(e,t,r){if(r&&typeof r=="object")return{rules:r,tagNode:null};if(typeof r=="string"){let n=t&&t.ownerDocument?t.ownerDocument:t;return J(e,n,r)}return null}function Wt(e,t,r,n){let i=ct(e,t,r);if(!i){let s=typeof r=="string"?`data-rules-name~="${r}"`:"the provided rules object";throw new Error(`hyper-html-api: could not resolve rules for ${s}`)}let{rules:o,tagNode:a}=i;return{rules:o,tagNode:a,get:()=>z(e,t,o,n),set:s=>Y(e,t,o,s,n)}}var Gt={includeClasses:!0,includeAttributes:["href","src","name","type","role","aria-label","alt","title"],excludeAttributePrefixes:["data-morph-","data-hyper-","data-im-"],textHintLength:64,excludeIds:!0,maxPathDepth:4,landmarks:["HEADER","NAV","MAIN","ASIDE","FOOTER","SECTION","ARTICLE"],weights:{signature:100,pathSegment:10,textMatch:20,textMismatch:25,uniqueCandidate:50,positionPenalty:1,slotMatch:30},minConfidence:101};function ln(e){let t=5381;for(let r=0;r<e.length;r++)t=(t<<5)+t^e.charCodeAt(r);return Math.abs(t).toString(36)}function cn(e){if(e.classList&&e.classList.length>0)return Array.from(e.classList).sort().join(" ");let t=e.getAttribute?.("class");return t?t.split(/\s+/).filter(Boolean).sort().join(" "):""}function dn(e,t){let r=[];for(let n of e.attributes||[]){let i=n.name;i==="id"||i==="class"||t.excludeAttributePrefixes.some(o=>i.startsWith(o))||t.includeAttributes.includes(i)&&r.push(`${i}=${n.value}`)}return r.sort().join("|")}function un(e,t){return(e.textContent||"").replace(/\s+/g," ").trim().slice(0,t.textHintLength)}function mn(e,t){let r=[e.tagName];return t.includeClasses&&r.push(cn(e)),r.push(dn(e,t)),ln(r.join("|"))}function hn(e){let t=e.tagName,r=1,n=e.previousElementSibling;for(;n;)n.tagName===t&&r++,n=n.previousElementSibling;return r}function pn(e,t){return e.id||e.getAttribute?.("role")?!0:t.landmarks.includes(e.tagName)}function fn(e){if(e.id)return`#${e.id}`;let t=e.getAttribute?.("role");return t?`@${t}`:e.tagName}function bn(e,t){let r=[],n=e;for(;n&&n.tagName&&r.length<t.maxPathDepth;){let i=`${n.tagName}:${hn(n)}`;if(r.unshift(i),n!==e&&pn(n,t)){r.unshift(fn(n));break}n=n.parentElement}return r}function gn(e,t){let r=0,n=e.length-1,i=t.length-1;for(;n>=0&&i>=0&&e[n]===t[i];)r++,n--,i--;return r}function P(e,t,r){if(r.has(e))return r.get(e);let n={signature:mn(e,t),path:bn(e,t),textHint:un(e,t)};return r.set(e,n),n}function Zt(e,t,r,n){if(n.has(e))return n.get(e);let i=new Map,o=e.querySelectorAll("*"),a=0;for(let s of o){let l=P(s,t,r);l.domIndex=a++,i.has(l.signature)||i.set(l.signature,[]),i.get(l.signature).push(s)}return n.set(e,i),i}function kn(e,t,r){r.delete(e),t.delete(e);let n=e.querySelectorAll("*");for(let i of n)t.delete(i)}function dt(e,t,r,n,i){let o=P(e,r,n),a=P(t,r,n),s=r.weights,l={},c=0;if(o.signature!==a.signature)return{score:0,breakdown:{rejected:"signature mismatch"}};c+=s.signature,l.signature=s.signature;let m=gn(o.path,a.path)*s.pathSegment;c+=m,l.path=m;let h=!0;if(o.textHint&&a.textHint?o.textHint===a.textHint?(c+=s.textMatch,l.text=s.textMatch):(c-=s.textMismatch,l.text=-s.textMismatch,h=!1):o.textHint!==a.textHint&&(c-=s.textMismatch,l.text=-s.textMismatch,h=!1),i.candidateCount===1&&h&&(c+=s.uniqueCandidate,l.unique=s.uniqueCandidate),typeof o.domIndex=="number"&&typeof a.domIndex=="number"){let y=Math.abs(o.domIndex-a.domIndex),x=Math.min(y*s.positionPenalty,20);c-=x,l.drift=-x}return{score:c,breakdown:l}}function Yt(e,t,r,n,i){if(r.excludeIds&&e.id)return null;let o=Zt(t,r,n,i),a=P(e,r,n);if(typeof a.domIndex!="number"){let h=0,y=e.previousElementSibling;for(;y;)h++,y=y.previousElementSibling;a.domIndex=h}let s=o.get(a.signature)||[],l=r.excludeIds?s.filter(h=>!h.id):s;if(l.length===0)return null;let c=null,d=0,m=null;for(let h of l){let{score:y,breakdown:x}=dt(e,h,r,n,{candidateCount:l.length});y>d&&(d=y,c=h,m=x)}return d<r.minConfidence?null:{element:c,confidence:d,breakdown:m}}function yn(e,t,r,n){let i=[],o=r.weights.signature+r.weights.slotMatch,a={slot:o};function s(m){if(m.children)return m.children;let h=m.childNodes;if(!h)return[];let y=[];for(let x=0;x<h.length;x++)h[x].nodeType===1&&y.push(h[x]);return y}function l(m,h){let y=s(m),x=s(h);if(y.length===x.length)for(let T=0;T<y.length;T++){let k=y[T],M=x[T];if(r.excludeIds&&(k.id||M.id)||k.tagName!==M.tagName)continue;let E=P(k,r,n).signature,S=P(M,r,n).signature;E!==S&&i.push({newEl:k,oldEl:M,score:o,breakdown:a}),l(k,M)}}function c(m,h){for(;;){if(m.tagName===h.tagName)return[m,h];let y=s(m);if(!m.tagName&&y.length===1){m=y[0];continue}let x=s(h);if(x.length===1&&x[0].tagName===m.tagName){h=x[0];continue}return null}}let d=c(e,t);return d&&l(d[0],d[1]),i}function Jt(e,t,r,n,i){let o=t.querySelectorAll("*"),a=Zt(e,r,n,i),s=0;for(let m of o){let h=P(m,r,n);h.domIndex=s++}let l=[];for(let m of o){if(r.excludeIds&&m.id)continue;let h=P(m,r,n),y=a.get(h.signature)||[],x=r.excludeIds?y.filter(T=>!T.id):y;for(let T of x){let{score:k,breakdown:M}=dt(m,T,r,n,{candidateCount:x.length});k>=r.minConfidence&&l.push({newEl:m,oldEl:T,score:k,breakdown:M})}}if(r.weights.slotMatch>0){let m=yn(t,e,r,n);for(let h of m)l.push(h)}l.sort((m,h)=>h.score-m.score);let c=new Map,d=new Set;for(let{newEl:m,oldEl:h}of l)c.has(m)||d.has(h)||(c.set(m,h),d.add(h));return c}function Xt(e,t,r,n){let i=P(e,r,n),o=P(t,r,n),{score:a,breakdown:s}=dt(e,t,r,n,{candidateCount:1});return{matches:a>=r.minConfidence,score:a,breakdown:s,newMeta:{signature:i.signature,path:i.path,textHint:i.textHint},oldMeta:{signature:o.signature,path:o.path,textHint:o.textHint}}}function Qt(e={}){let t={...Gt,...e,weights:{...Gt.weights,...e.weights}},r=new WeakMap,n=new WeakMap;return{findMatch:(i,o)=>Yt(i,o,t,r,n),computeMatches:(i,o)=>Jt(i,o,t,r,n),explain:(i,o)=>Xt(i,o,t,r),invalidate:i=>kn(i,r,n),session:()=>{let i=new WeakMap,o=new WeakMap;return{findMatch:(a,s)=>Yt(a,s,t,i,o),computeMatches:(a,s)=>Jt(a,s,t,i,o),explain:(a,s)=>Xt(a,s,t,i)}},getConfig:()=>({...t})}}var vn=Qt(),ut=(function(){"use strict";let e=()=>{};function t(k){if(!(k instanceof Element))return!1;if(k.hasAttribute("save-ignore"))return!0;if(k.tagName==="LINK"||k.tagName==="SCRIPT"){let M=k.getAttribute("src")||k.getAttribute("href")||"";if(M.startsWith("chrome-extension://")||M.startsWith("moz-extension://")||M.startsWith("safari-web-extension://"))return!0}return!1}function r(k,M){if(M!=="smart")return k.outerHTML;let E=k.getAttribute("src"),S=k.getAttribute("type")||"text/javascript";if(E)try{let C=new URL(E,window.location.href);return`ext:${S}:${C.origin}${C.pathname}${C.search}`}catch{return`ext:${S}:${E}`}else{let C=k.textContent.trim(),A=5381;for(let b=0;b<C.length;b++)A=(A<<5)+A^C.charCodeAt(b);return`inline:${S}:${Math.abs(A).toString(36)}`}}let n={morphStyle:"outerHTML",callbacks:{beforeNodeAdded:e,afterNodeAdded:e,beforeNodeMorphed:e,afterNodeMorphed:e,beforeNodeRemoved:e,afterNodeRemoved:e,beforeAttributeUpdated:e},head:{style:"merge",shouldPreserve:k=>k.getAttribute("im-preserve")==="true",shouldReAppend:k=>k.getAttribute("im-re-append")==="true",shouldRemove:e,afterHeadMorphed:e},scripts:{handle:!1,matchMode:"outerHTML",shouldPreserve:k=>k.getAttribute("im-preserve")==="true",shouldReAppend:k=>k.getAttribute("im-re-append")==="true",shouldRemove:e,afterScriptsHandled:e},restoreFocus:!0},i={computeMatches(k,M){let{computeMatches:E}=vn.session();return E(k,M)}};function o(k,M,E={}){k=x(k);let S=T(M),C=y(k,S,E),A=C.scripts.matchMode,b=new Set(Array.from(k.querySelectorAll("script")).map(p=>r(p,A))),w=s(C,()=>d(C,k,S,p=>p.morphStyle==="innerHTML"?(l(p,k,S),Array.from(k.childNodes)):a(p,k,S)));C.pantry.remove();let u=h(k,b,C);return u.length>0?w instanceof Promise?w.then(p=>Promise.all(u).then(()=>p)):Promise.all(u).then(()=>w):w}function a(k,M,E){let S=T(M);return l(k,S,E,M,M.nextSibling),Array.from(S.childNodes)}function s(k,M){if(!k.config.restoreFocus)return M();let E=document.activeElement;if(!(E instanceof HTMLInputElement||E instanceof HTMLTextAreaElement))return M();let{id:S,selectionStart:C,selectionEnd:A}=E,b=M();return S&&S!==document.activeElement?.getAttribute("id")&&(E=k.target.querySelector(`[id="${S}"]`),E?.focus()),E&&!E.selectionEnd&&A!=null&&E.setSelectionRange(C,A),b}let l=(function(){function k(u,p,g,f=null,v=null){p instanceof HTMLTemplateElement&&g instanceof HTMLTemplateElement&&(p=p.content,g=g.content),f||=p.firstChild;for(let _ of g.childNodes){if(t(_))continue;if(f&&f!=v){let O=E(u,_,f,v);if(O){O!==f&&C(u,f,O),c(O,_,u),f=O.nextSibling;continue}}if(_ instanceof Element){let O=_.getAttribute("id");if(u.persistentIds.has(O)){let j=A(p,O,f,u);c(j,_,u),f=j.nextSibling;continue}if(!u.idMap.has(_)){let j=u.hyperMatches.get(_);if(j&&!u.idMap.has(j)){w(p,j,f),c(j,_,u),f=j.nextSibling;continue}}}let R=M(p,_,f,u);R&&(f=R.nextSibling)}for(;f&&f!=v;){let _=f;f=f.nextSibling,t(_)||S(u,_)}}function M(u,p,g,f){if(f.callbacks.beforeNodeAdded(p)===!1)return null;if(f.idMap.has(p)){let v=document.createElement(p.tagName);return u.insertBefore(v,g),c(v,p,f),f.callbacks.afterNodeAdded(v),v}else{let v=document.importNode(p,!0);return u.insertBefore(v,g),f.callbacks.afterNodeAdded(v),v}}let E=(function(){function u(f,v,_,R){let O=v instanceof Element&&!f.idMap.has(v)?f.hyperMatches.get(v):null,j=null,$=v.nextSibling,ue=0,N=_;for(;N&&N!=R;){if(g(N,v)){if(p(f,N,v)||N===O&&!f.idMap.has(N))return N;if(j===null){let ee=N instanceof Element&&f.hyperMatchedOldElements.has(N);!f.idMap.has(N)&&!ee&&(j=N)}}if(j===null&&$&&g(N,$)&&(ue++,$=$.nextSibling,ue>=2&&(j=void 0)),f.activeElementAndParents.includes(N))break;N=N.nextSibling}return j||null}function p(f,v,_){let R=f.idMap.get(v),O=f.idMap.get(_);if(!O||!R)return!1;for(let j of R)if(O.has(j))return!0;return!1}function g(f,v){let _=f,R=v;return _.nodeType===R.nodeType&&_.tagName===R.tagName&&(!_.getAttribute?.("id")||_.getAttribute?.("id")===R.getAttribute?.("id"))}return u})();function S(u,p){let g=p instanceof Element&&u.hyperMatchedOldElements.has(p)&&!u.idMap.has(p);if(u.idMap.has(p)||g)w(u.pantry,p,null);else{if(u.callbacks.beforeNodeRemoved(p)===!1)return;p.parentNode?.removeChild(p),u.callbacks.afterNodeRemoved(p)}}function C(u,p,g){let f=p;for(;f&&f!==g;){let v=f;f=f.nextSibling,t(v)||S(u,v)}return f}function A(u,p,g,f){let v=f.target.getAttribute?.("id")===p&&f.target||f.target.querySelector(`[id="${p}"]`)||f.pantry.querySelector(`[id="${p}"]`);return b(v,f),w(u,v,g),v}function b(u,p){let g=u.getAttribute("id");for(;u=u.parentNode;){let f=p.idMap.get(u);f&&(f.delete(g),f.size||p.idMap.delete(u))}}function w(u,p,g){if(u.moveBefore)try{u.moveBefore(p,g)}catch{u.insertBefore(p,g)}else u.insertBefore(p,g)}return k})(),c=(function(){function k(b,w,u){return u.ignoreActive&&b===document.activeElement?null:(u.callbacks.beforeNodeMorphed(b,w)===!1||(b instanceof HTMLHeadElement&&u.head.ignore||(b instanceof HTMLHeadElement&&u.head.style!=="morph"?m(b,w,u):(M(b,w,u),A(b,u)||l(u,b,w))),u.callbacks.afterNodeMorphed(b,w)),b)}function M(b,w,u){let p=w.nodeType;if(p===1){let g=b,f=w,v=g.attributes,_=f.attributes;for(let R of _)C(R.name,g,"update",u)||g.getAttribute(R.name)!==R.value&&g.setAttribute(R.name,R.value);for(let R=v.length-1;0<=R;R--){let O=v[R];if(O&&!f.hasAttribute(O.name)){if(C(O.name,g,"remove",u))continue;g.removeAttribute(O.name)}}A(g,u)||E(g,f,u)}(p===8||p===3)&&b.nodeValue!==w.nodeValue&&(b.nodeValue=w.nodeValue)}function E(b,w,u){if(b instanceof HTMLInputElement&&w instanceof HTMLInputElement&&w.type!=="file"){let p=w.value,g=b.value;S(b,w,"checked",u),S(b,w,"disabled",u),u.formStateSync==="property"?g!==p&&(C("value",b,"update",u)||(b.value=p)):w.hasAttribute("value")?g!==p&&(C("value",b,"update",u)||(b.setAttribute("value",p),b.value=p)):C("value",b,"remove",u)||(b.value="",b.removeAttribute("value"))}else if(b instanceof HTMLOptionElement&&w instanceof HTMLOptionElement)S(b,w,"selected",u);else if(b instanceof HTMLTextAreaElement&&w instanceof HTMLTextAreaElement){let p=w.value,g=b.value;if(C("value",b,"update",u))return;p!==g&&(b.value=p),b.firstChild&&b.firstChild.nodeValue!==p&&(b.firstChild.nodeValue=p)}}function S(b,w,u,p){let g=w[u],f=b[u];if(g!==f){let v=C(u,b,"update",p);if(v||(b[u]=w[u]),p.formStateSync==="property")return;g?v||b.setAttribute(u,""):C(u,b,"remove",p)||b.removeAttribute(u)}}function C(b,w,u,p){return b==="value"&&p.ignoreActiveValue&&w===document.activeElement?!0:p.callbacks.beforeAttributeUpdated(b,w,u)===!1}function A(b,w){return!!w.ignoreActiveValue&&b===document.activeElement&&b!==document.body}return k})();function d(k,M,E,S){if(k.head.block){let C=M.querySelector("head"),A=E.querySelector("head");if(C&&A){let b=m(C,A,k);return Promise.all(b).then(()=>{let w=Object.assign(k,{head:{block:!1,ignore:!0}});return S(w)})}}return S(k)}function m(k,M,E){let S=[],C=[],A=[],b=[],w=E.scripts.matchMode,u=f=>{if(f.tagName==="SCRIPT")return r(f,w);if(f.tagName==="LINK"&&w==="smart"){let v=f.getAttribute("href");if(v)try{let _=new URL(v,window.location.href);return`link:${f.getAttribute("rel")||""}:${_.origin}${_.pathname}${_.search}`}catch{}}return f.outerHTML},p=new Map;for(let f of M.children)t(f)||p.set(u(f),f);for(let f of k.children){let v=u(f),_=p.has(v),R=E.head.shouldReAppend(f),O=E.head.shouldPreserve(f);_||O?R?C.push(f):(p.delete(v),A.push(f)):E.head.style==="append"?R&&(C.push(f),b.push(f)):E.head.shouldRemove(f)!==!1&&!t(f)&&C.push(f)}b.push(...p.values());let g=[];for(let f of b){let v=document.createRange().createContextualFragment(f.outerHTML).firstChild;if(E.callbacks.beforeNodeAdded(v)!==!1){if("href"in v&&v.href||"src"in v&&v.src){let _,R=new Promise(function(O){_=O});v.addEventListener("load",function(){_()}),g.push(R)}k.appendChild(v),E.callbacks.afterNodeAdded(v),S.push(v)}}for(let f of C)E.callbacks.beforeNodeRemoved(f)!==!1&&(k.removeChild(f),E.callbacks.afterNodeRemoved(f));return E.head.afterHeadMorphed(k,{added:S,kept:A,removed:C}),g}function h(k,M,E){if(!E.scripts.handle)return[];let S=[],C=[],A=[],b=[],w=E.scripts.matchMode,u=Array.from(k.querySelectorAll("script"));for(let g of u){let f=r(g,w),v=M.has(f),_=E.scripts.shouldPreserve(g),R=E.scripts.shouldReAppend(g);v||_?R?(C.push(g),b.push(g)):A.push(g):b.push(g)}for(let g of M){let f=u.some(v=>v.outerHTML===g)}let p=[];for(let g of b){if(E.callbacks.beforeNodeAdded(g)===!1)continue;let f=document.createRange().createContextualFragment(g.outerHTML).firstChild;if(f.src){let v,_=new Promise(function(R){v=R});f.addEventListener("load",function(){v()}),f.addEventListener("error",function(){v()}),p.push(_)}g.replaceWith(f),E.callbacks.afterNodeAdded(f),S.push(f)}return E.scripts.afterScriptsHandled(k,{added:S,kept:A,removed:C}),p}let y=(function(){function k(u,p,g){let{persistentIds:f,idMap:v}=b(u,p),_=i.computeMatches(u,p);if(typeof g.key=="function"){let $=new Map,ue=new Set,N=F=>{let I=g.key(F);I!=null&&($.has(I)?ue.add(I):$.set(I,F))};u instanceof Element&&N(u);for(let F of u.querySelectorAll("*"))N(F);for(let F of ue)$.delete(F);let ee=new Map;for(let[F,I]of _)ee.set(I,F);let Qe=p.__hyperMorphRoot||p,Ee=new Map,qt=new Set,Dt=F=>{let I=g.key(F);I!=null&&(Ee.has(I)?qt.add(I):Ee.set(I,F))};Qe instanceof Element&&Dt(Qe);for(let F of Qe.querySelectorAll("*"))Dt(F);for(let F of qt)Ee.delete(F);for(let[F,I]of Ee){let te=$.get(F);if(!te||te.tagName!==I.tagName)continue;let et=ee.get(te);et&&et!==I&&_.delete(et);let tt=_.get(I);tt&&tt!==te&&ee.delete(tt),_.set(I,te),ee.set(te,I)}}let R=new Set;for(let $ of _.values())R.add($);let O=M(g),j=O.morphStyle||"outerHTML";if(!["innerHTML","outerHTML"].includes(j))throw`Do not understand how to morph style ${j}`;return{target:u,newContent:p,config:O,morphStyle:j,ignoreActive:O.ignoreActive,ignoreActiveValue:O.ignoreActiveValue,restoreFocus:O.restoreFocus,formStateSync:O.formStateSync||"attribute",idMap:v,persistentIds:f,hyperMatches:_,hyperMatchedOldElements:R,pantry:E(),activeElementAndParents:S(u),callbacks:O.callbacks,head:O.head,scripts:O.scripts}}function M(u){let p=Object.assign({},n);return Object.assign(p,u),p.callbacks=Object.assign({},n.callbacks,u.callbacks),p.head=Object.assign({},n.head,u.head),p.scripts=Object.assign({},n.scripts,u.scripts),p}function E(){let u=document.createElement("div");return u.hidden=!0,document.body.insertAdjacentElement("afterend",u),u}function S(u){let p=[],g=document.activeElement;if(g?.tagName!=="BODY"&&u.contains(g))for(;g&&(p.push(g),g!==u);)g=g.parentElement;return p}function C(u){let p=Array.from(u.querySelectorAll("[id]"));return u.getAttribute?.("id")&&p.push(u),p}function A(u,p,g,f){for(let v of f){let _=v.getAttribute("id");if(p.has(_)){let R=v;for(;R;){let O=u.get(R);if(O==null&&(O=new Set,u.set(R,O)),O.add(_),R===g)break;R=R.parentElement}}}}function b(u,p){let g=C(u),f=C(p),v=w(g,f),_=new Map;A(_,v,u,g);let R=p.__hyperMorphRoot||p;return A(_,v,R,f),{persistentIds:v,idMap:_}}function w(u,p){let g=new Set,f=new Map;for(let{id:_,tagName:R}of u)f.has(_)?g.add(_):f.set(_,R);let v=new Set;for(let{id:_,tagName:R}of p)v.has(_)?g.add(_):f.get(_)===R&&v.add(_);for(let _ of g)v.delete(_);return v}return k})(),{normalizeElement:x,normalizeParent:T}=(function(){let k=new WeakSet;function M(A){return A instanceof Document?A.documentElement:A}function E(A){if(A==null)return document.createElement("div");if(typeof A=="string")return E(C(A));if(k.has(A))return A;if(A instanceof Node){if(A.parentNode)return new S(A);{let b=document.createElement("div");return b.append(A),b}}else{let b=document.createElement("div");for(let w of[...A])b.append(w);return b}}class S{constructor(b){this.originalNode=b,this.realParentNode=b.parentNode,this.previousSibling=b.previousSibling,this.nextSibling=b.nextSibling}get childNodes(){let b=[],w=this.previousSibling?this.previousSibling.nextSibling:this.realParentNode.firstChild;for(;w&&w!=this.nextSibling;)b.push(w),w=w.nextSibling;return b}querySelectorAll(b){return this.childNodes.reduce((w,u)=>{if(u instanceof Element){u.matches(b)&&w.push(u);let p=u.querySelectorAll(b);for(let g=0;g<p.length;g++)w.push(p[g])}return w},[])}insertBefore(b,w){return this.realParentNode.insertBefore(b,w)}moveBefore(b,w){return this.realParentNode.moveBefore(b,w)}get __hyperMorphRoot(){return this.originalNode}}function C(A){let b=new DOMParser,w=A.replace(/<svg(\s[^>]*>|>)([\s\S]*?)<\/svg>/gim,"");if(w.match(/<\/html>/)||w.match(/<\/head>/)||w.match(/<\/body>/)){let u=b.parseFromString(A,"text/html");if(w.match(/<\/html>/))return k.add(u),u;{let p=u.firstChild;return p&&k.add(p),p}}else{let p=b.parseFromString("<body><template>"+A+"</template></body>","text/html").body.querySelector("template").content;return k.add(p),p}}return{normalizeElement:M,normalizeParent:E}})();return{morph:o,defaults:n}})();var zo=ut.morph,Wo=ut.defaults,mt=ut;var Sn=null;function Oe(){return Sn}function je(e,t){let r={carriedOver:0,discarded:0,listItems:0},n=ht(t,e,r);return pt(t,e,r),{data:n,summary:r}}function ht(e,t,r){if(typeof e=="string")return e.endsWith("[]")?Array.isArray(t)?(r.listItems+=t.length,r.carriedOver+=t.length,t):void 0:t==null?void 0:(r.carriedOver++,t);if(Array.isArray(e)){let[,n]=e;return Array.isArray(t)?(r.listItems+=t.length,t.map(i=>ht(n,i,r))):void 0}if(typeof e=="object"&&e!==null){let n={};for(let[i,o]of Object.entries(e)){let a=ht(o,t?.[i],r);a!==void 0&&(n[i]=a)}return n}}function pt(e,t,r){if(t!=null){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(typeof t!="object"||Array.isArray(t))return;let n=new Set(Object.keys(e));for(let i of Object.keys(t))n.has(i)?pt(e[i],t[i],r):r.discarded+=Le(t[i]);return}if(Array.isArray(e)&&Array.isArray(t)){let n=e[1];t.forEach(i=>pt(n,i,r));return}typeof e=="string"&&!e.endsWith("[]")&&typeof t=="object"&&t!==null&&(r.discarded+=Le(t))}}function Le(e){return e==null?0:Array.isArray(e)?e.reduce((t,r)=>t+Le(r),0):typeof e=="object"?Object.values(e).reduce((t,r)=>t+Le(r),0):1}function En(e){return e&&e.nodeType===1&&e.tagName==="SCRIPT"&&e.hasAttribute&&e.hasAttribute("data-rules-name")}function Cn(e){return e?(e.nodeType===9||e.nodeType===11,e):null}var Rn={find(e,t,r={}){let n=Cn(e);if(!n||!n.querySelectorAll)return[];let i=Array.from(n.querySelectorAll(t));r.includeRulesTag||(i=i.filter(a=>!En(a)));let o=[];if(r.skip&&o.push(r.skip),r.templateAttr&&o.push("["+r.templateAttr+"]"),o.length){let a=o.join(", ");i=i.filter(s=>!s.closest||!s.closest(a))}return i},parent(e){return e?e.parentElement:null},children(e){return e?Array.from(e.children):[]},text(e,t){if(t===void 0)return(e.textContent||"").trim();e.textContent=t},attr(e,t,r){if(r===void 0)return e.hasAttribute&&e.hasAttribute(t)?e.getAttribute(t):null;e.setAttribute(t,r)},removeAttr(e,t){e&&e.removeAttribute&&e.removeAttribute(t)},prop(e,t,r){if(r===void 0){let n=e?e[t]:void 0;return n!==void 0?n:null}e[t]=r},clone(e){return e.cloneNode(!0)},insertAt(e,t,r){let n=e.children[r]||null;e.insertBefore(t,n)},remove(e){e&&e.parentNode&&e.parentNode.removeChild(e)},replaceWith(e,t){if(!e||!e.parentNode)throw new Error("dom.replaceWith: node has no parent");let n=e.ownerDocument.createElement("template");n.innerHTML=t;let i=n.content.firstElementChild;if(!i)throw new Error("dom.replaceWith: html did not parse to an element");return e.parentNode.replaceChild(i,e),i},stripIds(e){let t=0;return e.id&&(e.removeAttribute("id"),t++),(e.querySelectorAll?e.querySelectorAll("[id]"):[]).forEach(n=>{n.removeAttribute("id"),t++}),t},sameNode(e,t){return e===t}},H=Rn;var Mn="_hyperHtmlApi",Tn="upgrade-helper",On="parentOrigin";function gt(e=typeof location<"u"?location:null){if(!e)return!1;try{return new URLSearchParams(e.search).get(Mn)===Tn}catch{return!1}}function er(e=typeof location<"u"?location:null){return e?new URLSearchParams(e.search).get(On):null}function kt({win:e,doc:t,parentOrigin:r}={}){if(e=e||(typeof window<"u"?window:null),t=t||(typeof document<"u"?document:null),!e||!t||(r=r||er(e.location),!r))return;let n=()=>Ln({win:e,doc:t,parentOrigin:r});t.readyState==="loading"?t.addEventListener("DOMContentLoaded",n,{once:!0}):n()}function Ln({win:e,doc:t,parentOrigin:r}){let n;try{n=J(H,t.body)}catch(l){return ft(e,r,l)}if(!n)return ft(e,r,new Error("helper-mode: no rules tag in v2 document"));let i=n.rules,o=Nn(t,"hyper-version"),a=!!Oe(),s=l=>{if(l.source!==e.parent||l.origin!==r)return;let c=l.data;if(!(!c||c.type!=="hha:upgrade-data")){e.removeEventListener("message",s);try{let d=jn({doc:t,rules:i,v1Data:c.v1Data});e.parent.postMessage({type:"hha:upgrade-result",html:d.html,summary:d.summary},r)}catch(d){ft(e,r,d)}}};e.addEventListener("message",s),e.parent.postMessage({type:"hha:upgrade-ready",rules:i,version:o,hasTransform:a},r)}function jn({doc:e,rules:t,v1Data:r}){let n=Oe(),i=r,o=!1;n&&(i=n(r),o=!0);let{data:a,summary:s}=je(i,t);Y(H,e.body,t,a);let l=z(H,e.body,t);return{html:`<!DOCTYPE html>
2
- `+e.documentElement.outerHTML,summary:{...s,transformApplied:o,appliedFieldCount:bt(l)}}}function ft(e,t,r){e.parent.postMessage({type:"hha:upgrade-error",name:r?.name||"Error",message:r?.message||String(r)},t)}function Nn(e,t){let r=e.querySelector(`meta[name="${t}"]`);return r?r.getAttribute("content"):null}function bt(e){return e==null?0:Array.isArray(e)?e.reduce((t,r)=>t+bt(r),0):typeof e=="object"?Object.values(e).reduce((t,r)=>t+bt(r),0):1}var q={extract:(e,t,r)=>z(H,e,t,r),apply:(e,t,r,n)=>Y(H,e,t,r,n),findRulesIn:(e,t)=>J(H,e,t),findRules:(e,t)=>ct(H,e,t),bind:(e,t,r)=>Wt(H,e,t,r),parseStrict:lt,parseRelaxed:ke,errors:Me,DOM_PROPERTIES:Ce};typeof window<"u"&&gt(window.location)&&kt({win:window,doc:document});var vt={};nt(vt,{fromString:()=>W,getRuleAtPath:()=>X,getValueAtPath:()=>$n,setAtPath:()=>yt,toString:()=>Dn});function Dn(e){return e.map(String).join(".")}function W(e){return e===""?[]:e.split(".").map(t=>/^\d+$/.test(t)?Number(t):t)}function X(e,t){let r=e;for(let n of t){if(r==null)return;if(typeof r=="string"){if(r.endsWith("[]")&&(typeof n=="number"||n==="*")){r=r.slice(0,-2);continue}return}if(Array.isArray(r)){if(typeof n!="number"&&n!=="*")return;r=r[1];continue}if(typeof r=="object"){if(typeof n=="number"||!(n in r))return;r=r[n];continue}return}return r}function $n(e,t){let r=e;for(let n of t){if(r==null)return;r=r[n]}return r}function yt(e,t,r){if(t.length===0)return r;let[n,...i]=t;if(typeof n=="number"){let o=Array.isArray(e)?[...e]:[];return o[n]=yt(o[n],i,r),o}return{...e&&typeof e=="object"?e:{},[n]:yt((e||{})[n],i,r)}}function ye(e){if(typeof e=="string")return e.endsWith("[]")?[]:"";if(Array.isArray(e))return[];if(typeof e=="object"&&e!==null){let t={};for(let[r,n]of Object.entries(e))t[r]=ye(n);return t}return""}function Ne(e,t,{ignoreActiveValue:r=!0}={}){mt.morph(e,t,{morphStyle:"innerHTML",ignoreActiveValue:r,restoreFocus:!0,formStateSync:"property"})}function Ie(e){return e.replace(/([a-z])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").replace(/[-_]/g," ").replace(/\s+/g," ").trim().replace(/^./,t=>t.toUpperCase())}var Bn='<div class="hcms-drag-handle mirk-sortable__grip" aria-hidden="true"><div class="mirk-sortable__dots"><span class="mirk-sortable__dot"></span><span class="mirk-sortable__dot"></span><span class="mirk-sortable__dot"></span><span class="mirk-sortable__dot"></span><span class="mirk-sortable__dot"></span><span class="mirk-sortable__dot"></span><span class="mirk-sortable__dot"></span><span class="mirk-sortable__dot"></span></div></div>',xt='<svg class="hcms-x" viewBox="0 0 16 16" shape-rendering="crispEdges" aria-hidden="true"><path d="M4 4 L12 12 M12 4 L4 12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="square"></path></svg>',nr={"@scalar":`
1
+ var hypercms=(()=>{var bt=Object.defineProperty;var vn=Object.getOwnPropertyDescriptor;var xn=Object.getOwnPropertyNames;var wn=Object.prototype.hasOwnProperty;var kt=(e,t)=>{for(var r in t)bt(e,r,{get:t[r],enumerable:!0})},_n=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of xn(t))!wn.call(e,i)&&i!==r&&bt(e,i,{get:()=>t[i],enumerable:!(n=vn(t,i))||n.enumerable});return e};var An=e=>_n(bt({},"__esModule",{value:!0}),e);var Ko={};kt(Ko,{cms:()=>Vo,default:()=>Wo});var nr={includeClasses:!0,includeAttributes:["href","src","name","type","role","aria-label","alt","title"],excludeAttributePrefixes:["data-morph-","data-hyper-","data-im-"],textHintLength:64,excludeIds:!0,maxPathDepth:4,landmarks:["HEADER","NAV","MAIN","ASIDE","FOOTER","SECTION","ARTICLE"],weights:{signature:100,pathSegment:10,textMatch:20,textMismatch:25,uniqueCandidate:50,positionPenalty:1,maxDriftPenalty:19,slotMatch:30},minConfidence:101,maxScoredCandidates:16};function En(e){let t=5381;for(let r=0;r<e.length;r++)t=(t<<5)+t^e.charCodeAt(r);return Math.abs(t).toString(36)}function Cn(e){if(e.classList&&e.classList.length>0)return Array.from(e.classList).sort().join(" ");let t=e.getAttribute?.("class");return t?t.split(/\s+/).filter(Boolean).sort().join(" "):""}function Rn(e,t){let r=[];for(let n of e.attributes||[]){let i=n.name;i==="id"||i==="class"||t.excludeAttributePrefixes.some(o=>i.startsWith(o))||t.includeAttributes.includes(i)&&r.push(`${i}=${n.value}`)}return r.sort().join("|")}function Tn(e,t){return(e.textContent||"").replace(/\s+/g," ").trim().slice(0,t.textHintLength)}function On(e,t){let r=[e.tagName];return t.includeClasses&&r.push(Cn(e)),r.push(Rn(e,t)),En(r.join("|"))}function Mn(e){let t=e.tagName,r=1,n=e.previousElementSibling;for(;n;)n.tagName===t&&r++,n=n.previousElementSibling;return r}function Nn(e,t){return e.getAttribute?.("id")||e.getAttribute?.("role")?!0:t.landmarks.includes(e.tagName)}function In(e){let t=e.getAttribute?.("id");if(t)return`#${t}`;let r=e.getAttribute?.("role");return r?`@${r}`:e.tagName}function Ln(e,t){let r=[],n=e;for(;n&&n.tagName&&r.length<t.maxPathDepth;){let i=`${n.tagName}:${Mn(n)}`;if(r.unshift(i),n!==e&&Nn(n,t)){r.unshift(In(n));break}n=n.parentElement}return r}function jn(e,t){let r=0,n=e.length-1,i=t.length-1;for(;n>=0&&i>=0&&e[n]===t[i];)r++,n--,i--;return r}function J(e,t,r){if(r.has(e))return r.get(e);let n={signature:On(e,t),path:Ln(e,t),textHint:Tn(e,t)};return r.set(e,n),n}function ar(e,t,r,n){if(n.has(e))return n.get(e);let i=new Map,o=e.querySelectorAll("*"),a=0;for(let s of o){let l=J(s,t,r);l.domIndex=a++,!t.shouldIgnore?.(s)&&(i.has(l.signature)||i.set(l.signature,[]),i.get(l.signature).push(s))}return n.set(e,i),i}function Fn(e,t,r){r.delete(e),t.delete(e);let n=e.querySelectorAll("*");for(let i of n)t.delete(i)}function yt(e,t,r,n,i){let o=J(e,r,n),a=J(t,r,n),s=r.weights,l={},c=0;if(o.signature!==a.signature)return{score:0,breakdown:{rejected:"signature mismatch"}};c+=s.signature,l.signature=s.signature;let d=jn(o.path,a.path)*s.pathSegment;c+=d,l.path=d;let h=!0;if(o.textHint&&a.textHint?o.textHint===a.textHint?(c+=s.textMatch,l.text=s.textMatch):(c-=s.textMismatch,l.text=-s.textMismatch,h=!1):o.textHint!==a.textHint&&(c-=s.textMismatch,l.text=-s.textMismatch,h=!1),i.candidateCount===1&&h&&(c+=s.uniqueCandidate,l.unique=s.uniqueCandidate),typeof o.domIndex=="number"&&typeof a.domIndex=="number"){let f=Math.abs(o.domIndex-a.domIndex),k=Math.min(f*s.positionPenalty,s.maxDriftPenalty);c-=k,l.drift=-k}return{score:c,breakdown:l}}function ir(e,t,r,n,i){if(r.excludeIds&&e.getAttribute("id"))return null;let o=ar(t,r,n,i),a=J(e,r,n);if(typeof a.domIndex!="number"){let h=0,f=e.previousElementSibling;for(;f;)h++,f=f.previousElementSibling;a.domIndex=h}let s=o.get(a.signature)||[],l=r.excludeIds?s.filter(h=>!h.getAttribute("id")):s;if(l.length===0)return null;let c=null,m=0,d=null;for(let h of l){let{score:f,breakdown:k}=yt(e,h,r,n,{candidateCount:l.length});f>m&&(m=f,c=h,d=k)}return m<r.minConfidence?null:{element:c,confidence:m,breakdown:d}}function qn(e,t,r,n){let i=[],o=r.weights.signature+r.weights.slotMatch,a={slot:o};function s(d){if(d.children)return d.children;let h=d.childNodes;if(!h)return[];let f=[];for(let k=0;k<h.length;k++)h[k].nodeType===1&&f.push(h[k]);return f}function l(d,h){let f=s(d),k=s(h);if(f.length===k.length)for(let C=0;C<f.length;C++){let N=f[C],D=k[C];if(r.shouldIgnore?.(N)||r.shouldIgnore?.(D)||r.excludeIds&&(N.getAttribute("id")||D.getAttribute("id"))||N.tagName!==D.tagName)continue;let K=J(N,r,n).signature,F=J(D,r,n).signature;K!==F&&i.push({newEl:N,oldEl:D,score:o,breakdown:a}),l(N,D)}}function c(d,h){for(;;){if(d.tagName===h.tagName)return[d,h];let f=s(d);if(!d.tagName&&f.length===1){d=f[0];continue}let k=s(h);if(k.length===1&&k[0].tagName===d.tagName){h=k[0];continue}return null}}let m=c(e,t);return m&&l(m[0],m[1]),i}function or(e,t,r,n,i){let o=t.querySelectorAll("*"),a=ar(e,r,n,i),s=0;for(let f of o){let k=J(f,r,n);k.domIndex=s++}let l=[],c=new Map;function m(f,k,C){let N=new Set;if(f.textHint){let L=c.get(f.signature);if(!L){L=new Map;for(let X of k){let pe=J(X,r,n).textHint,le=L.get(pe);le||(le=[],L.set(pe,le)),le.push(X)}c.set(f.signature,L)}let V=L.get(f.textHint);if(V)for(let X=0;X<V.length&&X<C;X++)N.add(V[X])}let D=0,K=k.length;for(;D<K;){let L=D+K>>1;J(k[L],r,n).domIndex<f.domIndex?D=L+1:K=L}let F=Math.max(0,Math.min(D-(C>>1),k.length-C)),z=Math.min(F+C,k.length);for(let L=F;L<z;L++)N.add(k[L]);return[...N]}for(let f of o){if(r.shouldIgnore?.(f)||r.excludeIds&&f.getAttribute("id"))continue;let k=J(f,r,n),C=a.get(k.signature)||[],N=r.excludeIds?C.filter(F=>!F.getAttribute("id")):C,D=r.maxScoredCandidates,K=D&&N.length>D?m(k,N,D):N;for(let F of K){let{score:z,breakdown:L}=yt(f,F,r,n,{candidateCount:N.length});z>=r.minConfidence&&l.push({newEl:f,oldEl:F,score:z,breakdown:L})}}if(r.weights.slotMatch>0){let f=qn(t,e,r,n);for(let k of f)l.push(k)}l.sort((f,k)=>k.score-f.score);let d=new Map,h=new Set;for(let{newEl:f,oldEl:k}of l)d.has(f)||h.has(k)||(d.set(f,k),h.add(k));return d}function sr(e,t,r,n){let i=J(e,r,n),o=J(t,r,n),{score:a,breakdown:s}=yt(e,t,r,n,{candidateCount:1});return{matches:a>=r.minConfidence,score:a,breakdown:s,newMeta:{signature:i.signature,path:i.path,textHint:i.textHint},oldMeta:{signature:o.signature,path:o.path,textHint:o.textHint}}}function lr(e={}){let t={...nr,...e,weights:{...nr.weights,...e.weights}},r=new WeakMap,n=new WeakMap;return{findMatch:(i,o)=>ir(i,o,t,r,n),computeMatches:(i,o)=>or(i,o,t,r,n),explain:(i,o)=>sr(i,o,t,r),invalidate:i=>Fn(i,r,n),session:()=>{let i=new WeakMap,o=new WeakMap;return{findMatch:(a,s)=>ir(a,s,t,i,o),computeMatches:(a,s)=>or(a,s,t,i,o),explain:(a,s)=>sr(a,s,t,i)}},getConfig:()=>({...t})}}function vt(e,t){for(;;){for(;t<e.length&&/\s/.test(e[t]);)t++;if(e[t]==="/"&&e[t+1]==="/"){for(;t<e.length&&e[t]!==`
2
+ `;)t++;continue}if(e[t]==="/"&&e[t+1]==="*"){let r=e.indexOf("*/",t+2);if(r===-1)return e.length;t=r+2;continue}return t}}function cr(e){return e.replace(/\\'/g,"'").replace(/(\\*)"/g,(t,r)=>r.length%2===0?r+'\\"':t)}var Dn=/^-?(0|[1-9]\d*)(\.\d+)?([eE][+-]?\d+)?$/,$n=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function He(e){try{return JSON.parse(e)}catch{return JSON.parse(Bn(e))}}function Bn(e){let t="",r=0,n=(i,o)=>{throw new Error(`Invalid relaxed JSON: ${i} at position ${o}`)};for(;r<e.length&&(r=vt(e,r),!(r>=e.length));){let i=e[r];if("{}[]:".includes(i)){t+=i,r++;continue}if(i===","){let s=vt(e,r+1);if(e[s]==="}"||e[s]==="]"){r++;continue}t+=i,r++;continue}if(i==='"'||i==="'"){let s=r+1;for(;s<e.length&&e[s]!==i;)e[s]==="\\"&&s++,s++;s>=e.length&&n("unterminated string",r);let l=e.slice(r+1,s);i==="'"&&(l=cr(l)),t+='"'+l+'"',r=s+1;continue}let o=r;for(;o<e.length&&/[A-Za-z0-9_$.+\-]/.test(e[o]);)o++;o===r&&n("unexpected character "+JSON.stringify(i),r);let a=e.slice(r,o);if(a==="true"||a==="false"||a==="null"||Dn.test(a)){t+=a,r=o;continue}if($n.test(a)){if(e[vt(e,o)]===":"){t+='"'+a+'"',r=o;continue}n("unquoted value "+JSON.stringify(a),r)}n("invalid token "+JSON.stringify(a),r)}return t}function dr(e){try{return JSON.parse(e)}catch{}let t={BRACE_OPEN:"{",BRACE_CLOSE:"}",BRACKET_OPEN:"[",BRACKET_CLOSE:"]",COLON:":",COMMA:",",STRING:"STRING",SELECTOR:"SELECTOR",IDENTIFIER:"IDENTIFIER",NUMBER:"NUMBER",BOOLEAN:"BOOLEAN"};function r(i){let o=[],a=0;for(;a<i.length;){let s=i[a];if(/\s/.test(s)){a++;continue}if("{}".includes(s)){o.push({type:s,value:s}),a++;continue}if(s==="["){let d=!1,h=a+1;for(;h<i.length&&/\s/.test(i[h]);)h++;if(h<i.length&&/[a-zA-Z_]/.test(i[h])&&(d=!0),!d){o.push({type:s,value:s}),a++;continue}}if(s==="]"){o.push({type:s,value:s}),a++;continue}if(s===":"){o.push({type:t.COLON,value:s}),a++;continue}if(s===","){o.push({type:t.COMMA,value:s}),a++;continue}if(s==='"'||s==="'"){let d=s,h=a+1;for(;h<i.length&&i[h]!==d;)i[h]==="\\"&&h++,h++;o.push({type:t.STRING,value:i.substring(a+1,h),quoted:!0,sourceQuote:d}),a=h+1;continue}let l=a,c;for(;l<i.length&&!/[{},]/.test(i[l]);)if(i[l]===":"){let d=[":first",":last",":nth-child",":nth-of-type",":first-child",":last-child",":first-of-type",":last-of-type",":only-child",":only-of-type",":hover",":focus",":active",":visited",":disabled",":enabled",":checked",":empty",":root",":target",":not",":before",":after",":nth-last-child",":nth-last-of-type"],h=!1;for(let f of d){let k=f.substring(1);if(i.substring(l+1,l+1+k.length)===k){h=!0,l+=k.length;break}}if(!h)break}else if(i[l]==="["){for(l++;l<i.length&&i[l]!=="]";){if(i[l]==='"'||i[l]==="'"){let d=i[l];for(l++;l<i.length&&i[l]!==d;)i[l]==="\\"&&l++,l++}l++}l<i.length&&i[l]==="]"&&l++}else l++;c=i.substring(a,l);let m=t.IDENTIFIER;/^-?\d+(\.\d+)?$/.test(c)?m=t.NUMBER:c==="true"||c==="false"||c==="null"?m=t.BOOLEAN:/^[.#@\[]|[.#@\[]| /.test(c)&&(m=t.SELECTOR),o.push({type:m,value:c,quoted:!1}),a=l}return o}function n(i){let o="";for(let a=0;a<i.length;a++){let s=i[a];if("{}".includes(s.type)||"[]".includes(s.type)){o+=s.value;continue}if(s.type===t.COLON){o+=s.value;continue}if(s.type===t.COMMA){let l=i[a+1];if(l&&(l.type==="}"||l.type==="]"))continue;o+=s.value;continue}if(s.type===t.STRING){let l=s.value;s.sourceQuote==="'"&&(l=cr(l)),o+=`"${l}"`;continue}if(s.type===t.NUMBER||s.type===t.BOOLEAN){o+=s.value;continue}o+=`"${s.value}"`}return o}try{let i=r(e),o=n(i);return JSON.parse(o)}catch(i){throw new Error("Invalid extraction rules syntax: "+i.message)}}var B=Symbol("hyper-morph-json-merge:missing"),mr=["id","_id","uuid","key","slug","code","name"];function ge(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Oe(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function zn(e,t,r){Object.defineProperty(e,t,{value:r,enumerable:!0,writable:!0,configurable:!0})}function ie(e,t){if(e===t)return!0;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(!ie(e[r],t[r]))return!1;return!0}if(ge(e)&&ge(t)){let r=Object.keys(e);if(r.length!==Object.keys(t).length)return!1;for(let n of r)if(!Oe(t,n)||!ie(e[n],t[n]))return!1;return!0}return!1}function ur(e,t,r,n){return ie(t,r)?t:ie(t,e)?r:ie(r,e)?t:ge(t)&&ge(r)?Pn(ge(e)?e:{},t,r,n):Array.isArray(t)&&Array.isArray(r)?Wn(Array.isArray(e)?e:[],t,r,n):r}function hr(e,t,r,n){return t===B&&r===B?B:t===B?e===B?r:ie(r,e)?B:r:r===B?e===B?t:B:ur(e,t,r,n)}function Pn(e,t,r,n){let i={},o=new Set([...Object.keys(e),...Object.keys(t),...Object.keys(r)]);for(let a of o){let s=hr(Oe(e,a)?e[a]:B,Oe(t,a)?t[a]:B,Oe(r,a)?r[a]:B,n);s!==B&&zn(i,a,s)}return i}function Un(e){return e===null||typeof e!="object"}function Ve(e){return typeof e+":"+String(e)}function Hn(e,t){for(let r of t){let n=new Set;for(let i of r){if(!Oe(i,e))return!1;let o=i[e];if(typeof o!="string"&&typeof o!="number")return!1;let a=Ve(o);if(n.has(a))return!1;n.add(a)}}return!0}function Vn(e,t,r,n){let i=[e,t,r],o=!0;for(let a of i)for(let s of a)ge(s)||(o=!1);if(o){for(let a of n.keyCandidates)if(Hn(a,i))return{kind:"keyed",field:a};return null}for(let a of i){let s=new Set;for(let l of a){if(!Un(l))return null;let c=Ve(l);if(s.has(c))return null;s.add(c)}}return{kind:"self"}}function Wn(e,t,r,n){let i=Vn(e,t,r,n);if(!i)return r;let o=i.kind==="self"?Ve:f=>Ve(f[i.field]),a=f=>{let k=new Map;for(let C of f)k.set(o(C),C);return k},s=a(e),l=a(t),c=a(r),m=new Map,d=new Set([...s.keys(),...l.keys(),...c.keys()]);for(let f of d){let k=hr(s.has(f)?s.get(f):B,l.has(f)?l.get(f):B,c.has(f)?c.get(f):B,n);k!==B&&m.set(f,k)}let h=[];for(let f of r){let k=o(f);m.has(k)&&h.push(k)}for(let f=0;f<t.length;f++){let k=o(t[f]);if(!m.has(k)||h.includes(k))continue;let C=0;for(let N=f-1;N>=0;N--){let D=h.indexOf(o(t[N]));if(D!==-1){C=D+1;break}}h.splice(C,0,k)}return h.map(f=>m.get(f))}function xt(e,t,r,n={}){let i=n.keyCandidates?[...n.keyCandidates,...mr]:mr;return ur(e===void 0?B:e,t,r,{keyCandidates:i})}function wt(e,t,r,n={}){let i=n.parse||He,o=[],a=(d,h)=>{if(typeof d!="string")return B;try{return i(d)}catch(f){return o.push(`${h} side is not valid JSON (${f.message})`),B}},s=a(t,"local"),l=a(r,"remote");if(s===B)return{text:r,warnings:o};if(l===B)return{text:t,warnings:o};let c=a(e,"base"),m=xt(c===B?void 0:c,s,l,n);return ie(m,l)?{text:r,warnings:o}:ie(m,s)?{text:t,warnings:o}:{text:JSON.stringify(m,null,2),warnings:o}}var _t=(function(){"use strict";let e=()=>{},t='[save-ignore],[snapshot-remove],[no-snapshot],[no-save],[save-remove],[freeze],[save-freeze],[clay~="no-save"],[clay~="no-snapshot"],[clay~="freeze"]';function r(v){if(!(v instanceof Element))return!1;if(v.matches(t))return!0;if(v.tagName==="LINK"||v.tagName==="SCRIPT"){let E=v.getAttribute("src")||v.getAttribute("href")||"";if(E.startsWith("chrome-extension://")||E.startsWith("moz-extension://")||E.startsWith("safari-web-extension://"))return!0}return!1}function n(v){return v instanceof Element?v.closest(t)?!0:r(v):!1}let i=lr({shouldIgnore:n});function o(v,E,S){if(S){let M=S.identityOf(v);if(M&&!S.disabled.has(M.key))return"hm-merge:"+M.key}if(E!=="smart")return v.outerHTML;let O=v.getAttribute("src"),R=v.getAttribute("type")||"text/javascript";if(O)try{let M=new URL(O,window.location.href);return`ext:${R}:${M.origin}${M.pathname}${M.search}`}catch{return`ext:${R}:${O}`}else{let M=v.textContent.trim(),y=5381;for(let A=0;A<M.length;A++)y=(y<<5)+y^M.charCodeAt(A);return`inline:${R}:${Math.abs(y).toString(36)}`}}let a="http://www.w3.org/1999/xhtml";function s(v){return v instanceof Element&&v.tagName==="SCRIPT"&&v.namespaceURI===a}function l(v){let E=document.createElement("div");E.innerHTML="<script><\/script>";let S=E.firstChild;for(let O of v.attributes)S.setAttribute(O.name,O.value);return S.textContent=v.textContent,S}function c(v){if(s(v))return l(v);if(v instanceof Element)for(let E of v.querySelectorAll("script"))s(E)&&E.replaceWith(l(E));return v}function m(v){let E=(v.getAttribute("type")||"").split(";")[0].trim().toLowerCase();return E==="application/json"||E.endsWith("+json")}let d={match:v=>v.hasAttribute("merge"),identity:v=>v.getAttribute("merge")};function h(v,E,S){if(S.merge===!1)return null;let O=[d,...S.mergeTags||[]],R=new WeakMap,M=g=>{if(R.has(g))return R.get(g);let w=null;if(s(g)&&!g.getAttribute("src")&&!n(g)){let _=g;for(let T=0;T<O.length;T++)if(O[T].match(_)){if(!m(_))console.warn("[hyper-morph] merge ignored: script type is not JSON",_);else{let j=O[T].identity(_);j!=null&&j!==""&&(w={key:T+":"+j,raw:j,recognizer:O[T]})}break}}return R.set(g,w),w},y=new Set,A=g=>{let w=new Map,_=T=>{let j=M(T);j&&(w.has(j.key)?(y.add(j.key),console.warn(`[hyper-morph] merge disabled for duplicate identity "${j.raw}"`)):w.set(j.key,T))};s(g)&&_(g);for(let T of g.querySelectorAll("script"))_(T);return w},b=A(v),p=A(E.__hyperMorphRoot||E);if(b.size===0&&p.size===0)return null;let u=null;return{identityOf:M,disabled:y,oldByKey:b,newByKey:p,baseTexts:()=>{if(u)return u;u=new Map;let g=S.mergeBase;if(!g)return u;let w;typeof g=="string"?w=new DOMParser().parseFromString(g,"text/html").documentElement:g instanceof Document?w=g.documentElement:w=g;let _=T=>{let j=M(T);j&&!u.has(j.key)&&u.set(j.key,T.textContent)};s(w)&&_(w);for(let T of w.querySelectorAll("script"))_(T);return u}}}function f(v,E,S){let O=v.merge;if(!O)return!1;let R=O.identityOf(E);if(!R||O.disabled.has(R.key))return!1;let M=O.identityOf(S);if(!M||M.key!==R.key)return!1;let y=E,A=S,b=A.getAttribute("merge-key")||y.getAttribute("merge-key"),{text:p,warnings:u}=wt(O.baseTexts().get(R.key),y.textContent,A.textContent,{parse:R.recognizer.parse,keyCandidates:b?b.split(/[\s,]+/).filter(Boolean):void 0});for(let x of u)console.warn(`[hyper-morph] merge "${R.raw}": ${x}`);return y.textContent!==p&&(y.textContent=p),!0}let k={morphStyle:"outerHTML",callbacks:{beforeNodeAdded:e,afterNodeAdded:e,beforeNodeMorphed:e,afterNodeMorphed:e,beforeNodeRemoved:e,afterNodeRemoved:e,beforeAttributeUpdated:e},head:{style:"merge",shouldPreserve:v=>v.getAttribute("im-preserve")==="true",shouldReAppend:v=>v.getAttribute("im-re-append")==="true",shouldRemove:e,afterHeadMorphed:e},scripts:{handle:!0,matchMode:"outerHTML",shouldPreserve:v=>v.getAttribute("im-preserve")==="true",shouldReAppend:v=>v.getAttribute("im-re-append")==="true",shouldRemove:e,afterScriptsHandled:e},restoreFocus:!0},C={computeMatches(v,E){let{computeMatches:S}=i.session();return S(v,E)}};function N(v,E,S={}){v=yn(v);let O=Xt(E),R=kn(v,O,S),M=R.scripts.handle?new Set(Array.from(v.querySelectorAll("script")).map(p=>o(p,R.scripts.matchMode,R.merge))):null,y=F(R),A=X(R,v,O,p=>p.morphStyle==="innerHTML"?(L(p,v,O),Array.from(v.childNodes)):K(p,v,O)),b=p=>{y&&z(R,y),D(R);let u=M?bn(p,M,R):[];return u.length>0?Promise.all(u).then(()=>p):p};return A instanceof Promise?A.then(b):b(A)}function D(v){for(let E of Array.from(v.pantry.childNodes))v.callbacks.beforeNodeRemoved(E)!==!1&&v.callbacks.afterNodeRemoved(E);v.pantry.remove()}function K(v,E,S){let O=Xt(E);return L(v,O,S,E,E.nextSibling),Array.from(O.childNodes)}function F(v){if(!v.config.restoreFocus)return null;let E=document.activeElement;if(!(E instanceof HTMLInputElement||E instanceof HTMLTextAreaElement))return null;let{id:S,selectionStart:O,selectionEnd:R}=E;return{element:E,id:S,selectionStart:O,selectionEnd:R}}function z(v,E){let S=E.element;if(E.id&&E.id!==document.activeElement?.getAttribute("id")&&(S=v.target.querySelector(`[id="${CSS.escape(E.id)}"]`),S?.focus()),S&&!S.selectionEnd&&E.selectionEnd!=null)try{S.setSelectionRange(E.selectionStart,E.selectionEnd)}catch{}}let L=(function(){function v(p,u,x,g=null,w=null){u instanceof HTMLTemplateElement&&x instanceof HTMLTemplateElement&&(u=u.content,x=x.content),g||=u.firstChild;for(let _ of x.childNodes){if(r(_))continue;if(g&&g!=w){let j=S(p,_,g,w);if(j){j!==g&&R(p,g,j),V(j,_,p),g=j.nextSibling;continue}}if(_ instanceof Element){let j=_.getAttribute("id");if(p.persistentIds.has(j)){let $=M(u,j,g,p);V($,_,p),g=$.nextSibling;continue}if(!p.idMap.has(_)){let $=p.hyperMatches.get(_);if($&&!p.idMap.has($)&&!b($,u)){A(u,$,g),V($,_,p),g=$.nextSibling;continue}}}let T=E(u,_,g,p);T&&(g=T.nextSibling)}for(;g&&g!=w;){let _=g;g=g.nextSibling,r(_)||O(p,_)}}function E(p,u,x,g){if(g.callbacks.beforeNodeAdded(u)===!1)return null;if(g.idMap.has(u)){let w=u,_=document.createElementNS(w.namespaceURI,w.localName);return p.insertBefore(_,x),V(_,u,g),g.callbacks.afterNodeAdded(_),_}else{let w=c(document.importNode(u,!0));return p.insertBefore(w,x),g.callbacks.afterNodeAdded(w),w}}let S=(function(){function p(g,w,_,T){let j=w instanceof Element&&!g.idMap.has(w)?g.hyperMatches.get(w):null,$=null,H=w.nextSibling,Q=0,q=_;for(;q&&q!=T;){if(r(q)){q=q.nextSibling;continue}if(x(q,w)){if(u(g,q,w)||q===j&&!g.idMap.has(q))return q;if($===null){let G=q instanceof Element&&g.hyperMatchedOldElements.has(q);!g.idMap.has(q)&&!G&&($=q)}}if($===null&&H&&x(q,H)&&(Q++,H=H.nextSibling,Q>=2&&($=void 0)),g.activeElementAndParents.includes(q))break;q=q.nextSibling}return $||null}function u(g,w,_){let T=g.idMap.get(w),j=g.idMap.get(_);if(!j||!T)return!1;for(let $ of T)if(j.has($))return!0;return!1}function x(g,w){let _=g,T=w;return _.nodeType===T.nodeType&&_.tagName===T.tagName&&(!_.getAttribute?.("id")||_.getAttribute?.("id")===T.getAttribute?.("id"))}return p})();function O(p,u){let x=u instanceof Element&&p.hyperMatchedOldElements.has(u)&&!p.idMap.has(u);if(p.idMap.has(u)||x)A(p.pantry,u,null);else{if(p.callbacks.beforeNodeRemoved(u)===!1)return;u.parentNode?.removeChild(u),p.callbacks.afterNodeRemoved(u)}}function R(p,u,x){let g=u;for(;g&&g!==x;){let w=g;g=g.nextSibling,r(w)||O(p,w)}return g}function M(p,u,x,g){let w=g.target.getAttribute?.("id")===u&&g.target||g.target.querySelector(`[id="${CSS.escape(u)}"]`)||g.pantry.querySelector(`[id="${CSS.escape(u)}"]`);return y(w,g),A(p,w,x),w}function y(p,u){let x=p.getAttribute("id");for(;p=p.parentNode;){let g=u.idMap.get(p);g&&(g.delete(x),g.size||u.idMap.delete(p))}}function A(p,u,x){if(p.moveBefore)try{p.moveBefore(u,x)}catch{p.insertBefore(u,x)}else p.insertBefore(u,x)}function b(p,u){let x=u instanceof Element?u:u.realParentNode;return!!x&&p.contains(x)}return v})(),V=(function(){function v(y,A,b){return b.ignoreActive&&y===document.activeElement?null:(b.callbacks.beforeNodeMorphed(y,A)===!1||(y instanceof HTMLHeadElement&&b.head.ignore||(y instanceof HTMLHeadElement&&b.head.style!=="morph"?le(y,A,b):(E(y,A,b),f(b,y,A)||M(y,b)||L(b,y,A))),b.callbacks.afterNodeMorphed(y,A)),y)}function E(y,A,b){let p=A.nodeType;if(p===1){let u=y,x=A,g=u.attributes,w=x.attributes;for(let _ of w)R(_.name,u,"update",b)||u.getAttribute(_.name)!==_.value&&u.setAttribute(_.name,_.value);for(let _=g.length-1;0<=_;_--){let T=g[_];if(T&&!x.hasAttribute(T.name)){if(R(T.name,u,"remove",b))continue;u.removeAttribute(T.name)}}M(u,b)||S(u,x,b)}(p===8||p===3)&&y.nodeValue!==A.nodeValue&&(y.nodeValue=A.nodeValue)}function S(y,A,b){if(y instanceof HTMLInputElement&&A instanceof HTMLInputElement&&A.type!=="file"){let p=A.value,u=y.value;O(y,A,"checked",b),O(y,A,"disabled",b),b.formStateSync==="property"&&y.indeterminate!==A.indeterminate&&(y.indeterminate=A.indeterminate),b.formStateSync==="property"?u!==p&&(R("value",y,"update",b)||(y.value=p)):A.hasAttribute("value")?u!==p&&(R("value",y,"update",b)||(y.setAttribute("value",p),y.value=p)):R("value",y,"remove",b)||(y.value="",y.removeAttribute("value"))}else if(y instanceof HTMLOptionElement&&A instanceof HTMLOptionElement)O(y,A,"selected",b);else if(y instanceof HTMLTextAreaElement&&A instanceof HTMLTextAreaElement){let p=A.value,u=y.value;if(R("value",y,"update",b)||(p!==u&&(y.value=p),b.formStateSync==="property"))return;y.firstChild&&y.firstChild.nodeValue!==p&&(y.firstChild.nodeValue=p)}}function O(y,A,b,p){let u=A[b],x=y[b];if(u!==x){let g=R(b,y,"update",p);if(g||(y[b]=A[b]),p.formStateSync==="property")return;u?g||y.setAttribute(b,""):R(b,y,"remove",p)||y.removeAttribute(b)}}function R(y,A,b,p){return y==="value"&&p.ignoreActiveValue&&A===document.activeElement?!0:p.callbacks.beforeAttributeUpdated(y,A,b)===!1}function M(y,A){return!!A.ignoreActiveValue&&y===document.activeElement&&y!==document.body}return v})();function X(v,E,S,O){if(v.head.block){let R=E.querySelector("head"),M=S.querySelector("head");if(R&&M){let y=le(R,M,v);return Promise.all(y).then(()=>(v.head.block=!1,v.head.ignore=!0,O(v)))}}return O(v)}function pe(v){return v.tagName==="SCRIPT"?!!v.getAttribute("src"):v.tagName==="LINK"?(v.getAttribute("rel")||"").toLowerCase().split(/\s+/).includes("stylesheet")&&!!v.getAttribute("href"):!1}function le(v,E,S){let O=[],R=[],M=[],y=[],A=S.scripts.matchMode,b=x=>{if(x.tagName==="SCRIPT")return o(x,A,S.merge);if(x.tagName==="LINK"&&A==="smart"){let g=x.getAttribute("href");if(g)try{let w=new URL(g,window.location.href);return`link:${x.getAttribute("rel")||""}:${w.origin}${w.pathname}${w.search}`}catch{}}return x.outerHTML},p=new Map;for(let x of E.children){if(r(x))continue;let g=b(x),w=p.get(g);w||(w=[],p.set(g,w)),w.push(x)}for(let x of v.children){let g=b(x),w=p.get(g),_=!!(w&&w.length),T=S.head.shouldReAppend(x),j=S.head.shouldPreserve(x);if(_||j)if(T)R.push(x);else{if(w&&w.length){let $=w.pop();w.length||p.delete(g),f(S,x,$)}M.push(x)}else S.head.style==="append"?T&&(R.push(x),y.push(x)):S.head.shouldRemove(x)!==!1&&!r(x)&&R.push(x)}for(let x of p.values())y.push(...x);let u=[];for(let x of y){let g=document.createRange().createContextualFragment(x.outerHTML).firstChild;if(S.callbacks.beforeNodeAdded(g)!==!1){if(g instanceof Element&&pe(g)){let w,_=new Promise(function(T){w=T});g.addEventListener("load",function(){w()}),g.addEventListener("error",function(){w()}),u.push(_)}v.appendChild(g),S.callbacks.afterNodeAdded(g),O.push(g)}}for(let x of R)S.callbacks.beforeNodeRemoved(x)!==!1&&(v.removeChild(x),S.callbacks.afterNodeRemoved(x));return S.head.afterHeadMorphed(v,{added:O,kept:M,removed:R}),u}function bn(v,E,S){if(!S.scripts.handle)return[];let O=[],R=[],M=[],y=[],A=S.scripts.matchMode,b=[];for(let u of v)if(u instanceof Element){s(u)&&b.push(u);for(let x of u.querySelectorAll("script"))s(x)&&b.push(x)}for(let u of b){if(u.closest("head")||n(u))continue;let x=o(u,A,S.merge),g=E.has(x),w=S.scripts.shouldPreserve(u),_=S.scripts.shouldReAppend(u);g||w?_?(R.push(u),y.push(u)):M.push(u):y.push(u)}let p=[];for(let u of y){if(S.callbacks.beforeNodeAdded(u)===!1)continue;let x=document.createElement("script");for(let g of u.attributes)x.setAttribute(g.name,g.value);if(x.textContent=u.textContent,x.src){let g,w=new Promise(function(_){g=_});x.addEventListener("load",function(){g()}),x.addEventListener("error",function(){g()}),p.push(w)}u.replaceWith(x),S.callbacks.afterNodeAdded(x),O.push(x)}return S.scripts.afterScriptsHandled(S.target,{added:O,kept:M,removed:R}),p}let kn=(function(){function v(b,p,u){let{persistentIds:x,idMap:g}=y(b,p),w=C.computeMatches(b,p);if(typeof u.key=="function"){let H=new Map,Q=new Set,q=P=>{let U=u.key(P);U!=null&&(H.has(U)?Q.add(U):H.set(U,P))};b instanceof Element&&q(b);for(let P of b.querySelectorAll("*"))q(P);for(let P of Q)H.delete(P);let G=new Map;for(let[P,U]of w)G.set(U,P);let ce=p.__hyperMorphRoot||p,ne=new Map,Qt=new Set,er=P=>{let U=u.key(P);U!=null&&(ne.has(U)?Qt.add(U):ne.set(U,P))};ce instanceof Element&&er(ce);for(let P of ce.querySelectorAll("*"))er(P);for(let P of Qt)ne.delete(P);for(let[P,U]of ne){let fe=H.get(P);if(!fe||fe.tagName!==U.tagName)continue;let ft=G.get(fe);ft&&ft!==U&&w.delete(ft);let gt=w.get(U);gt&&gt!==fe&&G.delete(gt),w.set(U,fe),G.set(fe,U)}}let _=E(u),T=h(b,p,_.scripts);if(T){let H=new Map;for(let[Q,q]of w)H.set(q,Q);for(let[Q,q]of T.newByKey){if(T.disabled.has(Q))continue;let G=T.oldByKey.get(Q);if(!G)continue;let ce=H.get(G);ce&&ce!==q&&w.delete(ce);let ne=w.get(q);ne&&ne!==G&&H.delete(ne),w.set(q,G),H.set(G,q)}}let j=new Set;for(let H of w.values())j.add(H);let $=_.morphStyle||"outerHTML";if(!["innerHTML","outerHTML"].includes($))throw new Error(`Do not understand how to morph style ${$}`);return{target:b,newContent:p,config:_,morphStyle:$,ignoreActive:_.ignoreActive,ignoreActiveValue:_.ignoreActiveValue,restoreFocus:_.restoreFocus,formStateSync:_.formStateSync||"attribute",idMap:g,persistentIds:x,hyperMatches:w,hyperMatchedOldElements:j,merge:T,pantry:S(),activeElementAndParents:O(b),callbacks:_.callbacks,head:_.head,scripts:_.scripts}}function E(b){let p=Object.assign({},k);return Object.assign(p,b),p.callbacks=Object.assign({},k.callbacks,b.callbacks),p.head=Object.assign({},k.head,b.head),p.scripts=Object.assign({},k.scripts,b.scripts),p}function S(){let b=document.createElement("div");return b.hidden=!0,document.body.insertAdjacentElement("afterend",b),b}function O(b){let p=[],u=document.activeElement;if(u?.tagName!=="BODY"&&b.contains(u))for(;u&&(p.push(u),u!==b);)u=u.parentElement;return p}function R(b){let p=Array.from(b.querySelectorAll("[id]"));return b.getAttribute?.("id")&&p.push(b),p}function M(b,p,u,x){for(let g of x){let w=g.getAttribute("id");if(p.has(w)){let _=g;for(;_;){let T=b.get(_);if(T==null&&(T=new Set,b.set(_,T)),T.add(w),_===u)break;_=_.parentElement}}}}function y(b,p){let u=R(b),x=R(p),g=A(u,x),w=new Map;M(w,g,b,u);let _=p.__hyperMorphRoot||p;return M(w,g,_,x),{persistentIds:g,idMap:w}}function A(b,p){let u=new Set,x=new Map;for(let w of b){let _=w.getAttribute("id");x.has(_)?u.add(_):x.set(_,w.tagName)}let g=new Set;for(let w of p){let _=w.getAttribute("id");g.has(_)?u.add(_):x.get(_)===w.tagName&&g.add(_)}for(let w of u)g.delete(w);return g}return v})(),{normalizeElement:yn,normalizeParent:Xt}=(function(){let v=new WeakSet;function E(y){return y instanceof Document?y.documentElement:y}function S(y){if(y==null)return document.createElement("div");if(typeof y=="string")return S(M(y));if(v.has(y))return y;if(y instanceof Node){if(y.parentNode)return new O(y);{let A=document.createElement("div");return A.append(y),A}}else{let A=document.createElement("div");for(let b of[...y])A.append(b);return A}}class O{constructor(A){this.originalNode=A,this.realParentNode=A.parentNode,this.previousSibling=A.previousSibling,this.nextSibling=A.nextSibling}get childNodes(){let A=[],b=this.previousSibling?this.previousSibling.nextSibling:this.realParentNode.firstChild;for(;b&&b!=this.nextSibling;)A.push(b),b=b.nextSibling;return A}querySelectorAll(A){return this.childNodes.reduce((b,p)=>{if(p instanceof Element){p.matches(A)&&b.push(p);let u=p.querySelectorAll(A);for(let x=0;x<u.length;x++)b.push(u[x])}return b},[])}insertBefore(A,b){return this.realParentNode.insertBefore(A,b)}moveBefore(A,b){return this.realParentNode.moveBefore(A,b)}get __hyperMorphRoot(){return this.originalNode}}function R(y){let A=x=>`<${x}(?:\\s(?:[^>"']|"[^"]*"|'[^']*')*)?>`,b=y.replace(/<!--[\s\S]*?-->/g,"");for(let x of["script","style","textarea","title"])b=b.replace(new RegExp(`${A(x)}[\\s\\S]*?</${x}\\s*>`,"gi"),"");let p=new RegExp(`${A("svg")}[\\s\\S]*?</svg\\s*>`,"gi"),u;do u=b,b=b.replace(p,"");while(b!==u);return b}function M(y){let A=new DOMParser,b=R(y);if(b.match(/<\/html>/)||b.match(/<\/head>/)||b.match(/<\/body>/)){let p=A.parseFromString(y,"text/html");if(b.match(/<\/html>/))return v.add(p),p;{let u=p.firstChild;return u&&v.add(u),u}}else{let u=A.parseFromString("<body><template>"+y+"</template></body>","text/html").body.querySelector("template").content;return v.add(u),u}}return{normalizeElement:E,normalizeParent:S}})();return{morph:N,defaults:k,mergeJson:xt,mergeScriptText:wt,parseJsonRelaxed:He,parseRulesRelaxed:dr}})();var hs=_t.morph,ps=_t.defaults;var At=_t;var We=["textContent","innerText","innerHTML","outerHTML","value","checked","selected","disabled","readOnly","type","tagName","nodeName","nodeType","nodeValue","childElementCount","id","className","classList","baseURI","offsetWidth","offsetHeight","clientWidth","clientHeight","scrollWidth","scrollHeight","dataset","currentSrc","duration","paused","title","documentURI","contentType"],St=new Set(We),pr=new Set(["textContent","innerText","innerHTML","value","checked","selected","disabled","readOnly","type","id","className","title"]),fr=new Set(["tagName","nodeName","nodeType","nodeValue","childElementCount","classList","baseURI","documentURI","contentType","offsetWidth","offsetHeight","clientWidth","clientHeight","scrollWidth","scrollHeight","currentSrc","duration","paused","dataset"]);var Ke={};kt(Ke,{EmptyListInsert:()=>Ne,MAX_RULE_DEPTH:()=>ye,MaxRuleDepthExceeded:()=>de,RuleTargetReadOnly:()=>Ie,RulesParseError:()=>be,ShapeMismatch:()=>Me,UnknownRulesVersion:()=>ke});var be=class extends Error{constructor(t,r){super(t),this.name="RulesParseError",this.cause=r}},ke=class extends Error{constructor(t){super(`unknown rules version: ${t}. Library supports "1".`),this.name="UnknownRulesVersion",this.version=t}},ye=20,de=class extends Error{constructor(t){super(`rule depth exceeded ${ye} at path: ${t.join(".")}`),this.name="MaxRuleDepthExceeded",this.path=t}},Me=class extends Error{constructor(t){super(`shape mismatch: ${t.length} field(s) failed validation`),this.name="ShapeMismatch",this.mismatches=t}},Ne=class extends Error{constructor(t){super(`cannot add items to empty list at "${t.join(".")}" \u2014 no sibling to clone as template. Seed the list with a hidden item first.`),this.name="EmptyListInsert",this.path=t}},Ie=class extends Error{constructor(t){super(`cannot write to read-only DOM property "${t}"`),this.name="RuleTargetReadOnly",this.target=t}};function oe(e,t,r,n={}){return Et(e,t,r,{depth:0,path:[]},n)}function Et(e,t,r,n,i){if(n.depth>ye)throw new de(n.path);if(typeof r=="string")return Zn(e,t,r,i);if(Array.isArray(r)){let[o,a]=r;return e.find(t,o,i).map((l,c)=>Et(e,l,a,{depth:n.depth+1,path:[...n.path,c]},i))}if(typeof r=="object"&&r!==null){let o={};for(let[a,s]of Object.entries(r))o[a]=Et(e,t,s,{depth:n.depth+1,path:[...n.path,a]},i);return o}return null}function Zn(e,t,r,n){if(r.endsWith("[]")){let o=r.slice(0,-2);return e.find(t,o,n).map(a=>e.text(a))}if(r.startsWith("@"))return gr(e,t,r.slice(1));if(r.includes("@")){let o=r.lastIndexOf("@"),a=r.slice(0,o),s=r.slice(o+1),l=a?e.find(t,a,n):[t];return l.length===0?null:gr(e,l[0],s)}if(r===".")return e.text(t);let i=e.find(t,r,n);return i.length===0?null:e.text(i[0])}function gr(e,t,r){if(St.has(r)){let i=e.prop(t,r);return i==null?null:String(i)}let n=e.attr(t,r);return n||null}function Xn(e){return e&&e.nodeType===1&&e.tagName==="SCRIPT"&&e.hasAttribute&&e.hasAttribute("data-rules-name")}function Qn(e){return e?(e.nodeType===9||e.nodeType===11,e):null}var ei={find(e,t,r={}){let n=Qn(e);if(!n||!n.querySelectorAll)return[];let i=Array.from(n.querySelectorAll(t));r.includeRulesTag||(i=i.filter(s=>!Xn(s)));let o=[];r.skip&&o.push(r.skip);let a=r.templateAttr===null?null:r.templateAttr||"cms-template";if(a&&o.push("["+a+"]"),o.length){let s=o.join(", ");i=i.filter(l=>!l.closest||!l.closest(s))}return i},parent(e){return e?e.parentElement:null},children(e){return e?Array.from(e.children):[]},text(e,t){if(t===void 0)return(e.textContent||"").trim();e.textContent=t},attr(e,t,r){if(r===void 0)return e.hasAttribute&&e.hasAttribute(t)?e.getAttribute(t):null;e.setAttribute(t,r)},removeAttr(e,t){e&&e.removeAttribute&&e.removeAttribute(t)},prop(e,t,r){if(r===void 0){let n=e?e[t]:void 0;return n!==void 0?n:null}e[t]=r},clone(e){return e.cloneNode(!0)},insertAt(e,t,r){let n=e.children[r]||null;e.insertBefore(t,n)},remove(e){e&&e.parentNode&&e.parentNode.removeChild(e)},replaceWith(e,t){if(!e||!e.parentNode)throw new Error("dom.replaceWith: node has no parent");let n=e.ownerDocument.createElement("template");n.innerHTML=t;let i=n.content.firstElementChild;if(!i)throw new Error("dom.replaceWith: html did not parse to an element");return e.parentNode.replaceChild(i,e),i},stripIds(e){let t=0;return e.id&&(e.removeAttribute("id"),t++),(e.querySelectorAll?e.querySelectorAll("[id]"):[]).forEach(n=>{n.removeAttribute("id"),t++}),t},sameNode(e,t){return e===t}},se=ei;function Ct(e){try{return JSON.parse(e)}catch(t){throw new be(`Invalid strict JSON: ${t.message}`,t)}}function ve(e){try{return JSON.parse(e)}catch{}let t={BRACE_OPEN:"{",BRACE_CLOSE:"}",BRACKET_OPEN:"[",BRACKET_CLOSE:"]",COLON:":",COMMA:",",STRING:"STRING",SELECTOR:"SELECTOR",IDENTIFIER:"IDENTIFIER",NUMBER:"NUMBER",BOOLEAN:"BOOLEAN"};function r(i){let o=[],a=0;for(;a<i.length;){let s=i[a];if(/\s/.test(s)){a++;continue}if("{}".includes(s)){o.push({type:s,value:s}),a++;continue}if(s==="["){let d=!1,h=a+1;for(;h<i.length&&/\s/.test(i[h]);)h++;if(h<i.length&&/[a-zA-Z_]/.test(i[h])&&(d=!0),!d){o.push({type:s,value:s}),a++;continue}}if(s==="]"){o.push({type:s,value:s}),a++;continue}if(s===":"){o.push({type:t.COLON,value:s}),a++;continue}if(s===","){o.push({type:t.COMMA,value:s}),a++;continue}if(s==='"'||s==="'"){let d=s,h=a+1;for(;h<i.length&&i[h]!==d;)i[h]==="\\"&&h++,h++;o.push({type:t.STRING,value:i.substring(a+1,h),quoted:!0,sourceQuote:d}),a=h+1;continue}let l=a,c;for(;l<i.length&&!/[{},]/.test(i[l]);)if(i[l]===":"){let d=[":first",":last",":nth-child",":nth-of-type",":first-child",":last-child",":first-of-type",":last-of-type",":only-child",":only-of-type",":hover",":focus",":active",":visited",":disabled",":enabled",":checked",":empty",":root",":target",":not",":before",":after",":nth-last-child",":nth-last-of-type"],h=!1;for(let f of d){let k=f.substring(1);if(i.substring(l+1,l+1+k.length)===k){h=!0,l+=k.length;break}}if(!h)break}else if(i[l]==="["){for(l++;l<i.length&&i[l]!=="]";){if(i[l]==='"'||i[l]==="'"){let d=i[l];for(l++;l<i.length&&i[l]!==d;)i[l]==="\\"&&l++,l++}l++}l<i.length&&i[l]==="]"&&l++}else l++;c=i.substring(a,l);let m=t.IDENTIFIER;/^-?\d+(\.\d+)?$/.test(c)?m=t.NUMBER:c==="true"||c==="false"||c==="null"?m=t.BOOLEAN:/^[.#@\[]|[.#@\[]| /.test(c)&&(m=t.SELECTOR),o.push({type:m,value:c,quoted:!1}),a=l}return o}function n(i){let o="";for(let a=0;a<i.length;a++){let s=i[a];if("{}".includes(s.type)||"[]".includes(s.type)){o+=s.value;continue}if(s.type===t.COLON){o+=s.value;continue}if(s.type===t.COMMA){let l=i[a+1];if(l&&(l.type==="}"||l.type==="]"))continue;o+=s.value;continue}if(s.type===t.STRING&&s.quoted){let l=s.value;s.sourceQuote==="'"&&(l=l.replace(/\\'/g,"'"),l=l.replace(/(\\*)"/g,(c,m)=>m.length%2===0?m+'\\"':c)),o+=`"${l}"`;continue}if(s.type===t.NUMBER||s.type===t.BOOLEAN){o+=s.value;continue}if(s.type===t.SELECTOR||s.type===t.IDENTIFIER){o+=`"${s.value}"`;continue}o+=`"${s.value}"`}return o}try{let i=r(e),o=n(i);return JSON.parse(o)}catch(i){throw new be("Invalid extraction rules syntax: "+i.message,i)}}var kr="1",br=/^[a-zA-Z0-9_-]+$/;function Le(e,t,r){let n;if(r===void 0)n="script[data-rules-name]";else{if(typeof r!="string"||!br.test(r))throw new Error(`hyper-html-api: invalid rules token ${JSON.stringify(r)} (must match ${br})`);n=`script[data-rules-name~="${r}"]`}let i=e.find(t,n,{includeRulesTag:!0});if(i.length===0)return null;r!==void 0&&i.length>1&&console.warn(`hyper-html-api: ${i.length} rules tags match data-rules-name~="${r}"; using the first.`);let o=i[0],a=e.attr(o,"data-rules-version");if(a!==kr)throw new ke(a);return{rules:ve(e.text(o)),tagNode:o}}var Hs=new Function("url","return import(url)");var ri=.5;function Rt(e,t,r,n,i,o,a,s={}){let l=e.find(t,r,s);if(i.length===0){l.forEach(F=>e.remove(F));return}let c=i.length>l.length,m=l[0]||null;if(c&&!m&&(m=ai(e,t,r,s),!m))throw new Ne(o.path);let d=l.map(F=>ni(e,F,n,s)),h=null;if(m){h=e.clone(m),s.templateAttr&&e.removeAttr(h,s.templateAttr);let F=e.stripIds(h);F>0&&console.warn(`[hyper-html-api] stripped ${F} id attribute(s) from cloned template at "${o.path.join(".")||"(root)"}"`)}let f=ii(i,d,n),k=l[0]||m,C=e.parent(k),N=l.length>0?si(e,C,k):0,D=new Set,K=i.map((F,z)=>{let L=f[z];if(L>=0)return D.add(L),l[L];let V=e.clone(h);return e.stripIds(V),V});l.forEach((F,z)=>{D.has(z)||e.remove(F)}),K.forEach((F,z)=>{let L=N+z;e.children(C).findIndex(pe=>e.sameNode(pe,F))!==L&&e.insertAt(C,F,L)}),K.forEach((F,z)=>{if(n===null){let L=i[z],V=L==null?"":String(L);e.text(F)!==V&&e.text(F,V)}else{let L=a(e,F,n,i[z],{depth:o.depth+1,path:[...o.path,z]},s);L&&L!==F&&(K[z]=L)}})}function ni(e,t,r,n){return r===null?e.text(t):oe(e,t,r,n)}function ii(e,t,r){let n=new Array(e.length).fill(-1),i=new Set;return e.forEach((o,a)=>{let s=-1,l=-1;t.forEach((c,m)=>{if(i.has(m))return;let d=oi(o,c,r),h=d===l&&s>=0?Math.abs(m-a)<Math.abs(s-a):!1;(d>l||h)&&(l=d,s=m)}),l>=ri&&(n[a]=s,i.add(s))}),n}function oi(e,t,r){if(r===null)return e===t?1:0;let n=Object.keys(r||{});if(n.length===0)return 0;let i=0;for(let o of n)JSON.stringify(e?.[o])===JSON.stringify(t?.[o])&&i++;return i/n.length}function si(e,t,r){let n=e.children(t);for(let i=0;i<n.length;i++)if(e.sameNode(n[i],r))return i;return-1}function ai(e,t,r,n){if(!n.templateAttr)return null;let i=t;for(;i;){let o=e.find(i,r,{includeRulesTag:!1,templateAttr:null});for(let a of o)if(e.attr(a,n.templateAttr)!=null)return a;i=e.parent(i)}return null}var wr=new Set(["checked","selected","disabled","readOnly","paused"]);function xe(e,t,r,n,i={}){let o=[];if(Tt(r,n,[],o),o.length)throw new Me(o);Ge(e,t,r,n,{depth:0,path:[]},i)}function Ge(e,t,r,n,i,o={}){if(i.depth>ye)throw new de(i.path);if(n===void 0)return t;if(typeof r=="string")return li(e,t,r,n,i,o);if(Array.isArray(r)){let[a,s]=r;return Rt(e,t,a,s,n,i,Ge,o),t}if(typeof r=="object"&&r!==null){for(let[a,s]of Object.entries(r)){let l=Ge(e,t,s,n==null?n:n[a],{depth:i.depth+1,path:[...i.path,a]},o);l&&l!==t&&(t=l)}return t}return t}function li(e,t,r,n,i,o){if(r.endsWith("[]")){let s=r.slice(0,-2);return Rt(e,t,s,null,n,i,Ge,o),t}if(r.startsWith("@"))return _r(e,t,r.slice(1),n);if(r.includes("@")){let s=r.lastIndexOf("@"),l=r.slice(0,s),c=r.slice(s+1),m=l?e.find(t,l,o):[t];return m.length===0||_r(e,m[0],c,n),t}if(r===".")return e.text(t,n==null?"":String(n)),t;let a=e.find(t,r,o);return a.length===0||e.text(a[0],n==null?"":String(n)),t}function _r(e,t,r,n){if(fr.has(r))throw new Ie(r);if(r==="outerHTML"){let i=n==null?"":String(n);return e.replaceWith(t,i)}return pr.has(r)?(e.prop(t,r,ci(r,n)),t):(e.attr(t,r,n==null?"":String(n)),t)}function ci(e,t){return t==null?wr.has(e)?!1:"":wr.has(e)?!!t:t}function Tt(e,t,r,n){if(t!==void 0){if(typeof e=="string"){if(e.endsWith("[]")){Array.isArray(t)?t.forEach((i,o)=>{typeof i=="object"&&i!==null&&n.push({path:Fe([...r,o]),expected:"scalar",got:je(i)})}):n.push({path:Fe(r),expected:"array",got:je(t)});return}t!==null&&typeof t=="object"&&n.push({path:Fe(r),expected:"scalar",got:je(t)});return}if(Array.isArray(e)){if(!Array.isArray(t)){n.push({path:Fe(r),expected:"array",got:je(t)});return}let i=e[1];t.forEach((o,a)=>Tt(i,o,[...r,a],n));return}if(typeof e=="object"&&e!==null){if(t===null||Array.isArray(t)||typeof t!="object"){n.push({path:Fe(r),expected:"object",got:je(t)});return}for(let[i,o]of Object.entries(e))Tt(o,t[i],[...r,i],n)}}}function je(e){return e===null?"null":Array.isArray(e)?"array":typeof e}function Fe(e){return e.join(".")}function Ot(e,t,r){if(r&&typeof r=="object")return{rules:r,tagNode:null};if(typeof r=="string"){let n=t&&t.ownerDocument?t.ownerDocument:t;return Le(e,n,r)}return null}function Sr(e,t,r,n){let i=Ot(e,t,r);if(!i){let s=typeof r=="string"?`data-rules-name~="${r}"`:"the provided rules object";throw new Error(`hyper-html-api: could not resolve rules for ${s}`)}let{rules:o,tagNode:a}=i;return{rules:o,tagNode:a,get:()=>oe(e,t,o,n),set:s=>xe(e,t,o,s,n)}}var W={extract:(e,t,r)=>oe(se,e,t,r),apply:(e,t,r,n)=>xe(se,e,t,r,n),findRulesIn:(e,t)=>Le(se,e,t),findRules:(e,t)=>Ot(se,e,t),bind:(e,t,r)=>Sr(se,e,t,r),parseStrict:Ct,parseRelaxed:ve,errors:Ke,DOM_PROPERTIES:We};var Nt={};kt(Nt,{fromString:()=>te,getRuleAtPath:()=>me,getValueAtPath:()=>_i,setAtPath:()=>Mt,toString:()=>wi});function wi(e){return e.map(String).join(".")}function te(e){return e===""?[]:e.split(".").map(t=>/^\d+$/.test(t)?Number(t):t)}function me(e,t){let r=e;for(let n of t){if(r==null)return;if(typeof r=="string"){if(r.endsWith("[]")&&(typeof n=="number"||n==="*")){r=r.slice(0,-2);continue}return}if(Array.isArray(r)){if(typeof n!="number"&&n!=="*")return;r=r[1];continue}if(typeof r=="object"){if(typeof n=="number"||!(n in r))return;r=r[n];continue}return}return r}function _i(e,t){let r=e;for(let n of t){if(r==null)return;r=r[n]}return r}function Mt(e,t,r){if(t.length===0)return r;let[n,...i]=t;if(typeof n=="number"){let o=Array.isArray(e)?[...e]:[];return o[n]=Mt(o[n],i,r),o}return{...e&&typeof e=="object"?e:{},[n]:Mt((e||{})[n],i,r)}}function qe(e){if(typeof e=="string")return e.endsWith("[]")?[]:"";if(Array.isArray(e))return[];if(typeof e=="object"&&e!==null){let t={};for(let[r,n]of Object.entries(e))t[r]=qe(n);return t}return""}function Je(e,t,{ignoreActiveValue:r=!0}={}){At.morph(e,t,{morphStyle:"innerHTML",ignoreActiveValue:r,restoreFocus:!0,formStateSync:"property"})}function Ze(e){return e.replace(/([a-z])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").replace(/[-_]/g," ").replace(/\s+/g," ").trim().replace(/^./,t=>t.toUpperCase())}var Ai='<div class="hcms-drag-handle mirk-sortable__grip" aria-hidden="true"><div class="mirk-sortable__dots"><span class="mirk-sortable__dot"></span><span class="mirk-sortable__dot"></span><span class="mirk-sortable__dot"></span><span class="mirk-sortable__dot"></span><span class="mirk-sortable__dot"></span><span class="mirk-sortable__dot"></span><span class="mirk-sortable__dot"></span><span class="mirk-sortable__dot"></span></div></div>',It='<svg class="hcms-x" viewBox="0 0 16 16" shape-rendering="crispEdges" aria-hidden="true"><path d="M4 4 L12 12 M12 4 L4 12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="square"></path></svg>',Rr={"@scalar":`
3
3
  <label class="hcms-field" data-hcms-shape="scalar">
4
4
  <span class="hcms-label" data-hcms-label></span>
5
- <input class="mirk-input" data-hcms-field />
5
+ <textarea class="mirk-textarea" rows="1" data-hcms-field></textarea>
6
6
  <div class="hcms-error" hidden></div>
7
7
  </label>
8
8
  `,"@object":`
@@ -39,13 +39,13 @@ var hypercms=(()=>{var rt=Object.defineProperty;var zr=Object.getOwnPropertyDesc
39
39
  </section>
40
40
  `,"@object-array-item":`
41
41
  <article class="hcms-card mirk-sortable__item" draggable="true">
42
- ${Bn}
42
+ ${Ai}
43
43
  <div class="hcms-card-body mirk-sortable__body">
44
44
  <div class="hcms-card-fields"></div>
45
45
  <div class="hcms-card-controls">
46
46
  <button type="button" class="hcms-move hcms-move-up hcms-sr-only" data-hcms-action="move-up" aria-label="Move up">\u2191</button>
47
47
  <button type="button" class="hcms-move hcms-move-down hcms-sr-only" data-hcms-action="move-down" aria-label="Move down">\u2193</button>
48
- <button type="button" class="hcms-remove hcms-remove--card" data-hcms-action="remove" aria-label="Remove">${xt}</button>
48
+ <button type="button" class="hcms-remove hcms-remove--card" data-hcms-action="remove" aria-label="Remove">${It}</button>
49
49
  </div>
50
50
  </div>
51
51
  <div class="hcms-error" hidden></div>
@@ -59,7 +59,7 @@ var hypercms=(()=>{var rt=Object.defineProperty;var zr=Object.getOwnPropertyDesc
59
59
  <span class="mirk-button__label">Choose</span>
60
60
  </label>
61
61
  <a class="mirk-file__name" data-hcms-field></a>
62
- <button type="button" class="hcms-upload-clear" data-hcms-action="clear-upload" aria-label="Remove file">${xt}</button>
62
+ <button type="button" class="hcms-upload-clear" data-hcms-action="clear-upload" aria-label="Remove file">${It}</button>
63
63
  </div>
64
64
  <div class="hcms-error" hidden></div>
65
65
  </div>
@@ -73,7 +73,7 @@ var hypercms=(()=>{var rt=Object.defineProperty;var zr=Object.getOwnPropertyDesc
73
73
  </label>
74
74
  <figure class="mirk-image__thumb">
75
75
  <span class="mirk-image__frame"><img class="mirk-image__preview" data-hcms-field alt="" /></span>
76
- <button type="button" class="hcms-upload-clear hcms-upload-clear--badge" data-hcms-action="clear-upload" aria-label="Remove image">${xt}</button>
76
+ <button type="button" class="hcms-upload-clear hcms-upload-clear--badge" data-hcms-action="clear-upload" aria-label="Remove image">${It}</button>
77
77
  </figure>
78
78
  </div>
79
79
  <div class="hcms-error" hidden></div>
@@ -123,6 +123,12 @@ var hypercms=(()=>{var rt=Object.defineProperty;var zr=Object.getOwnPropertyDesc
123
123
  <textarea class="mirk-textarea" rows="3" data-hcms-field></textarea>
124
124
  <div class="hcms-error" hidden></div>
125
125
  </label>
126
+ `,"@richtext":`
127
+ <div class="hcms-field" data-hcms-shape="scalar">
128
+ <span class="hcms-label" data-hcms-label></span>
129
+ <div class="mirk-textarea hcms-richtext" contenteditable="true" data-hcms-field></div>
130
+ <div class="hcms-error" hidden></div>
131
+ </div>
126
132
  `,"@number":`
127
133
  <label class="hcms-field" data-hcms-shape="scalar">
128
134
  <span class="hcms-label" data-hcms-label></span>
@@ -141,11 +147,11 @@ var hypercms=(()=>{var rt=Object.defineProperty;var zr=Object.getOwnPropertyDesc
141
147
  <input class="hcms-chip-field" data-hcms-field aria-label="Item" placeholder="\u2026" />
142
148
  <button type="button" class="hcms-remove" data-hcms-action="remove" aria-label="Remove">\xD7</button>
143
149
  </span>
144
- `},Pn=["@scalar","@object","@scalar-array","@scalar-array-item","@object-array","@object-array-item"];function qe(e){let t=e.head||e.documentElement;if(t)for(let r of Pn)ar(e,t,r)}function wt(e,t){if(!nr[t])return null;let r=e&&(e.head||e.documentElement);return r?ar(e,r,t):null}var tr={src:"@image",checked:"@checkbox"},Fe={image:"@image",file:"@file",checkbox:"@checkbox",toggle:"@toggle",select:"@select",radio:"@radio",textarea:"@textarea",number:"@number"},Hn=new Set([...Object.values(Fe),"@chips","@chips-item"]);function ve(e,t,r){if(typeof e!="string")return"@scalar";let n=e.lastIndexOf("@"),i=Be(xe(e,n),t,"data-hcms-component");if(i&&Fe[i]){let o=Fe[i],a=Array.isArray(r)&&r.some(s=>s==="*"||typeof s=="number");return o==="@number"&&!rr(e,n,t,a).every(zn)||(o==="@checkbox"||o==="@toggle")&&(n<0||e.slice(n+1)!=="checked")&&!rr(e,n,t,a).every(Wn)?"@scalar":o}if(n>=0){let o=e.slice(n+1);if(tr[o])return tr[o]}return"@scalar"}function ir(e,t){if(typeof e!="string")return null;let r=e.lastIndexOf("@"),n=Be(xe(e,r),t,"data-hcms-component");return n&&Fe[n]||null}var Un=/^-?\d+(\.\d+)?([eE][+-]?\d+)?$/;function zn(e){return e==null||e===""?!0:Un.test(String(e))}function Wn(e){return e==null||e===""||e==="true"||e==="false"}function rr(e,t,r,n){if(!r||!r.querySelectorAll)return[];let i=xe(e,t);if(!i||i===".")return[];let o=null;try{o=r.querySelectorAll(i)}catch{return[]}let a=t>=0?e.slice(t+1):null,s=[];for(let l of o)if(!(l.closest&&l.closest("[cms-template], [data-hcms-shell]"))&&(a?a==="value"&&"value"in l?s.push(l.value):s.push(l.getAttribute?l.getAttribute(a):null):s.push((l.textContent||"").trim()),!n))break;return s}function De(e,t){if(typeof e!="string"||!e.endsWith("[]")||!t||!t.querySelector)return null;let r=e.slice(0,-2).trim();if(!r)return null;let n=null;try{n=t.querySelector(r)}catch{return null}let i=n&&n.closest?n.closest("[data-hcms-component]"):null;return(i&&i.getAttribute?i.getAttribute("data-hcms-component"):null)==="chips"?{array:"@chips",item:"@chips-item"}:null}function ie(e,t,r){let n=e.join("."),i=e.map(o=>typeof o=="number"?"*":o).join(".");return n&&B(r,n)||i&&i!==n&&B(r,i)||B(r,t)}function $e(e,t,r){let n=De(e,r);if(!n)return null;let i=ie(t,n.array,r);return i&&i.getAttribute("data-hcms-tpl")===n.array?n:null}function or(e,t){if(typeof e!="string")return null;let r=e.lastIndexOf("@"),n=Be(xe(e,r),t,"data-hcms-options");if(n==null)return null;let i=n.trim().split(/\s+/).filter(Boolean);return i.length?i:null}function sr(e,t){if(typeof e!="string")return null;let r=e.lastIndexOf("@");return Be(xe(e,r),t,"data-hcms-crop")}function xe(e,t){return t>=0?e.slice(0,t):e}function Be(e,t,r){if(!t||!t.querySelector||!e||e===".")return null;let n=null;try{n=t.querySelector(e)}catch{return null}return n&&n.getAttribute?n.getAttribute(r):null}function Pe(e,t){if(!e||t==null)return;r(t);function r(n){let i=Z(n);if(i==="scalar"){let o=ve(n,e);Hn.has(o)&&wt(e,o);return}if(i==="scalar-array"){let o=De(n,e);o&&(wt(e,o.array),wt(e,o.item));return}if(i==="object"){for(let o of Object.values(n))r(o);return}if(i==="object-array"){let o=n[1];if(o&&typeof o=="object"&&!Array.isArray(o))for(let a of Object.values(o))r(a);else r(o)}}}function ar(e,t,r){let n=B(e,r);if(n)return n;let i=e.createElement("template");return i.setAttribute("data-hcms-tpl",r),i.setAttribute("save-remove",""),i.innerHTML=nr[r].trim(),t.appendChild(i),i}function B(e,t){return!e||!e.querySelector?null:e.querySelector(`template[data-hcms-tpl="${Vn(t)}"]`)}function Vn(e){return typeof CSS<"u"&&CSS.escape?CSS.escape(e):String(e).replace(/[^a-zA-Z0-9_\-.*]/g,t=>"\\"+t)}function Z(e){return typeof e=="string"?e.endsWith("[]")?"scalar-array":"scalar":Array.isArray(e)?"object-array":typeof e=="object"&&e!==null?"object":"scalar"}function we(e){return e?!!(e.content||e).querySelector("[data-hcms-field]"):!1}var lr={IMG:"src",A:"href"};function He(e){if(!e)return"value";let t=(e.tagName||"").toUpperCase();return t==="INPUT"?(e.getAttribute("type")||"text").toLowerCase()==="checkbox"?"checked":"value":t==="TEXTAREA"||t==="SELECT"?"value":lr[t]?lr[t]:null}function cr(e,t){let r=(e.tagName||"").toUpperCase(),n=(e.getAttribute&&e.getAttribute("type")||"").toLowerCase(),i=He(e),a=`${ur(r,n)}[data-hcms-field="${oe(t)}"]`;return r==="INPUT"&&n==="radio"?`${a}:checked@value`:i?`${a}@${i}`:a}function Kn(e){let t=(e.tagName||"").toUpperCase(),r=(e.getAttribute&&e.getAttribute("type")||"").toLowerCase(),n=He(e),o=`${ur(t,r)}[data-hcms-field]`;return t==="INPUT"&&r==="radio"?`${o}:checked@value`:n?`${o}@${n}`:o}function ur(e,t){return e==="INPUT"?t?`input[type="${t}"]`:"input":e==="TEXTAREA"?"textarea":e==="SELECT"?"select":e==="IMG"?"img":e==="A"?"a":':not([data-hcms-shape="scalar"]):not([data-hcms-shape="object"]):not([data-hcms-shape="object-array"]):not([data-hcms-shape="scalar-array"])'}function oe(e){return typeof CSS<"u"&&CSS.escape?CSS.escape(e):String(e).replace(/[^a-zA-Z0-9_\-.*]/g,t=>"\\"+t)}var dr=new Set(["__proto__","constructor","prototype"]);function Ue(e,t){return r(e,[]);function r(c,d){let m=Z(c);if(m==="scalar")return n(c,d);if(m==="scalar-array")return i(c,d);if(m==="object-array")return o(c,d);if(m==="object"){let h=Object.create(null);for(let[y,x]of Object.entries(c)){if(dr.has(y))throw new Error(`hypercms: rule key "${y}" is forbidden at "${d.join(".")||"<root>"}"`);h[y]=r(x,[...d,y])}return h}return null}function n(c,d){let m=d.length?d[d.length-1]:null,h=typeof m=="string"?m:"__value",y=l(d,h);if(y)return cr(y,h);let x=s(ve(c,t,d),h);return x?cr(x,h):`input[data-hcms-field="${oe(h)}"]@value`}function i(c,d){let m=$e(c,d,t),h=m&&s(m.item,null)||s("@scalar-array-item",null),y=h?Kn(h):"input[data-hcms-field]@value";return[a(d,"[data-hcms-array-item]"),y]}function o(c,d){let[,m]=c,h=[...d,"*"],y=a(d,"[data-hcms-card]");if(m&&typeof m=="object"&&!Array.isArray(m)){let x=Object.create(null);for(let[T,k]of Object.entries(m)){if(dr.has(T))throw new Error(`hypercms: rule key "${T}" is forbidden at "${h.join(".")}"`);x[T]=r(k,[...h,T])}return[y,x]}return[y,r(m,[...h,0])]}function a(c,d){let m=c.length?c[c.length-1]:"",h=c.some(T=>T==="*"),y=c.join(".");return`${h?`[data-hcms-field="${oe(m)}"]`:`[data-hcms-path="${oe(y)}"]`} > .hcms-array-items > ${d}`}function s(c,d){if(!t)return null;let m=B(t,c);if(!m)return null;let h=m.content||m;if(d){let y=h.querySelector(`[data-hcms-field="${oe(d)}"]`);if(y)return y}return h.querySelector("[data-hcms-field]")}function l(c,d){if(!t)return null;let m=c.map(x=>typeof x=="number"?"*":x).join("."),y=[c.join("."),m];for(let x=c.length-1;x>=0;x--){let T=c.slice(0,x).map(k=>typeof k=="number"?"*":k);T.push("*"),y.push(T.join("."))}for(let x of y){if(!x)continue;let T=B(t,x);if(!T||!we(T))continue;let k=T.content||T,M=k.querySelector(`[data-hcms-field="${oe(d)}"]`)||k.querySelector("[data-hcms-field]");if(M)return M}return null}}function _t(e){if(!e)return"";let t=String(e).split(/[?#]/)[0],r=t.split("/").pop()||t;try{return decodeURIComponent(r)}catch{return r}}function ze({pageRules:e,formRules:t,data:r,doc:n}){let i=n.createDocumentFragment(),o=At(e,[],r,n);return o&&i.appendChild(o),i}function hr({shape:e,itemShape:t,pathArr:r,data:n,doc:i,itemKey:o}){if(e==="object-array-item")return fr(t,r,n,i);if(e==="scalar-array-item")return br(r,n,i,o||null);throw new Error(`hypercms: buildItem called with unknown shape "${e}"`)}function At(e,t,r,n){let i=Z(e);return i==="scalar"?Gn(e,t,r,n):i==="object"?Zn(e,t,r,n):i==="object-array"?Qn(e,t,r,n):i==="scalar-array"?ei(e,t,r,n):null}function Gn(e,t,r,n){let i=ve(e,n,t),o=ie(t,i,n);if(!o)throw new Error(`hypercms: missing template for scalar at "${t.join(".")}"`);let a=ir(e,n);a==="@number"&&i==="@scalar"&&console.info(`[hypercms] field "${t.join(".")}" declares component "@number" but its value isn't a plain number; rendering a text input so the value is preserved`),(a==="@checkbox"||a==="@toggle")&&i==="@scalar"&&console.info(`[hypercms] field "${t.join(".")}" declares component "${a}" but its value isn't true/false; rendering a text input so the value is preserved`),pr(o,a===i?a:null,t);let s=se(o,n);ae(s,t);let l=o.getAttribute?.("data-hcms-tpl");if((i==="@select"||i==="@radio")&&l===i&&Yn(s,e,t,r,n,i),i==="@image"&&l==="@image"){let c=sr(e,n);c!=null&&!s.hasAttribute("data-hcms-crop")&&s.setAttribute("data-hcms-crop",c)}return ti(s,V(t)),We(s,V(t)),Ve(s,V(t)),xr(s,r),i==="@file"&&Xn(s),s}function pr(e,t,r){if(!t)return;let n=e.getAttribute?.("data-hcms-tpl");n&&n!==t&&console.info(`[hypercms] field "${r.join(".")}" declares component "${t}" but custom template "${n}" wins`)}function Yn(e,t,r,n,i,o){let a=or(t,i),s=a?[...a]:[],l=n==null?"":String(n);if(l!==""&&!s.includes(l)&&s.unshift(l),!a&&(Jn(e,"data-hcms-options required (space-separated values)"),s.length===0)){e.querySelector(".mirk-radio")?.remove();return}if(o==="@select"){let m=e.querySelector("select[data-hcms-field]");if(!m)return;for(let h of s){let y=i.createElement("option");y.value=h,y.textContent=Ie(h),m.appendChild(y)}return}let c=e.querySelector(".mirk-radio");if(!c||!c.parentNode)return;let d=St(r.join("."));for(let m of s){let h=c.cloneNode(!0),y=h.querySelector('input[type="radio"]');y&&(y.value=m,y.name=d);let x=h.querySelector(".mirk-radio__label");x&&(x.textContent=Ie(m)),c.parentNode.insertBefore(h,c)}c.remove()}function St(e){return"hcms-"+String(e).replace(/[^A-Za-z0-9_-]/g,"-")}function Jn(e,t){let r=e.querySelector?e.querySelector(".hcms-error"):null;r&&(r.textContent=t,r.hidden=!1)}function Xn(e){let t=e.querySelector?e.querySelector("a.mirk-file__name[data-hcms-field]"):null;t&&(t.textContent=_t(t.getAttribute("href")))}function Zn(e,t,r,n){let i=ie(t,"@object",n);if(!i)throw new Error(`hypercms: missing template for object at "${t.join(".")}"`);let o=se(i,n);if(ae(o,t),We(o,V(t)),Ve(o,V(t)),we(i))return _r(o,e,t),wr(o,e,r),o;let a=Ke(o,".hcms-object-fields",i,t);for(let[s,l]of Object.entries(e)){let c=r==null?null:r[s],d=At(l,[...t,s],c,n);d&&a.appendChild(d)}return o}function Qn(e,t,r,n){let i=ie(t,"@object-array",n);if(!i)throw new Error(`hypercms: missing template for object-array at "${t.join(".")}"`);let o=se(i,n);ae(o,t),We(o,V(t)),Ve(o,V(t)),kr(o,i),vr(o,i,t);let a=Ke(o,".hcms-array-items",i,t),[,s]=e;return(Array.isArray(r)?r:[]).forEach((c,d)=>{let m=fr(s,[...t,d],c,n);m&&a.appendChild(m)}),yr(o),o}function fr(e,t,r,n){let i=gr(t,"object-array-item",n);if(!i)throw new Error(`hypercms: missing item template for "${t.join(".")}"`);let o=se(i,n);if(o.setAttribute("data-hcms-card",""),o.classList.contains("hcms-card")||o.classList.add("hcms-card"),ae(o,t),we(i))return e&&typeof e=="object"&&!Array.isArray(e)&&(_r(o,e,t),wr(o,e,r)),o;let a=Ke(o,".hcms-card-fields",i,t);if(e&&typeof e=="object"&&!Array.isArray(e))for(let[s,l]of Object.entries(e)){let c=r==null?null:r[s],d=At(l,[...t,s],c,n);d&&a.appendChild(d)}return o}function ei(e,t,r,n){let i=De(e,n),o=$e(e,t,n),a=i?i.array:"@scalar-array",s=ie(t,a,n);if(!s)throw new Error(`hypercms: missing template for scalar-array at "${t.join(".")}"`);pr(s,i?i.array:null,t);let l=se(s,n);ae(l,t),We(l,V(t)),Ve(l,V(t)),kr(l,s),vr(l,s,t),o&&l.setAttribute("data-hcms-item-tpl",o.item);let c=Ke(l,".hcms-array-items",s,t);return(Array.isArray(r)?r:[]).forEach((m,h)=>{let y=br([...t,h],m,n,o?o.item:null);y&&c.appendChild(y)}),yr(l),l}function br(e,t,r,n){let i=gr(e,"scalar-array-item",r,n);if(!i)throw new Error(`hypercms: missing item template for "${e.join(".")}"`);let o=se(i,r);return o.setAttribute("data-hcms-array-item",""),o.classList.contains("hcms-array-item")||o.classList.add("hcms-array-item"),ae(o,e),xr(o,t),o}function gr(e,t,r,n){let i=e.map(o=>typeof o=="number"?"*":o).join(".");return B(r,i)||n&&B(r,n)||B(r,"@"+t)}function se(e,t){let r=e.content||e,n=t.createElement("div");return n.appendChild(r.cloneNode(!0)),n.firstElementChild||n}function ae(e,t){e.setAttribute("data-hcms-path",t.join("."))}function ti(e,t){let r=t==null?"":String(t);if(e.matches&&e.matches("[data-hcms-field]")){e.getAttribute("data-hcms-field")||e.setAttribute("data-hcms-field",r);return}(e.querySelectorAll?e.querySelectorAll("[data-hcms-field]"):[]).forEach(i=>{i.getAttribute("data-hcms-field")||i.setAttribute("data-hcms-field",r)})}function We(e,t){t==null||t===""||!e.setAttribute||e.hasAttribute?.("data-hcms-field")||e.setAttribute("data-hcms-field",String(t))}function Ve(e,t){if(t==null||t==="")return;(e.querySelectorAll?e.querySelectorAll("[data-hcms-label]"):[]).forEach(n=>{(n.textContent||"").trim()===""&&(n.textContent=Ie(String(t)))})}function kr(e,t){["data-hcms-no-add","data-hcms-no-remove","data-hcms-no-reorder"].forEach(r=>{t.hasAttribute(r)&&e.setAttribute(r,"")}),["data-hcms-min-items","data-hcms-max-items"].forEach(r=>{t.hasAttribute(r)&&e.setAttribute(r,t.getAttribute(r))})}function yr(e){let t=e.querySelector?e.querySelector(".hcms-array-items"):null;if(!t)return;let r=Array.from(t.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]")),n=r.length,i=mr(e,"data-hcms-max-items"),o=mr(e,"data-hcms-min-items"),a=e.hasAttribute("data-hcms-no-add"),s=e.hasAttribute("data-hcms-no-remove"),l=e.hasAttribute("data-hcms-no-reorder"),c=e.querySelector('[data-hcms-action="add"]');c&&(c.hidden=a||i!=null&&n>=i),r.forEach((d,m)=>{let h=d.querySelector('[data-hcms-action="remove"]');h&&(h.hidden=s||o!=null&&n<=o);let y=d.querySelector('[data-hcms-action="move-up"]');y&&(y.hidden=l||m===0);let x=d.querySelector('[data-hcms-action="move-down"]');x&&(x.hidden=l||m===n-1)})}function mr(e,t){if(!e||!e.hasAttribute(t))return null;let r=parseInt(e.getAttribute(t),10);return Number.isFinite(r)?r:null}function vr(e,t,r){if(e.hasAttribute("data-hcms-no-reorder")||t.hasAttribute("data-hcms-no-reorder"))return;let n=e.querySelector(".hcms-array-items");if(!n)return;let i="hcms-"+r.join(".");n.setAttribute("sortable",i),n.setAttribute("onsorted","hypercmsCommit && hypercmsCommit()")}function V(e){return e.length?e[e.length-1]:null}function xr(e,t){let r=ri(e);if(r.length!==0)for(let n of r)Ar(n,t)}function ri(e){if(!e)return[];let t=[];return e.matches?.("[data-hcms-field]")&&ni(e)&&t.push(e),(e.querySelectorAll?e.querySelectorAll("input[data-hcms-field], textarea[data-hcms-field], select[data-hcms-field], img[data-hcms-field], a[data-hcms-field], [contenteditable][data-hcms-field]"):[]).forEach(n=>t.push(n)),t}function ni(e){let t=(e.tagName||"").toUpperCase();return!!(t==="INPUT"||t==="TEXTAREA"||t==="SELECT"||t==="IMG"||t==="A"||e.hasAttribute?.("contenteditable"))}function wr(e,t,r){(e.querySelectorAll?e.querySelectorAll("[data-hcms-field]"):[]).forEach(i=>{let o=i.getAttribute("data-hcms-field");if(!o)return;if(!t||typeof t!="object"||!(o in t)){console.warn(`[hypercms] inline template field "${o}" is not in the rule shape; ignoring`);return}let a=r==null?null:r[o];Ar(i,a)})}function _r(e,t,r){if(!e.querySelectorAll)return;e.querySelectorAll("[data-hcms-field]").forEach(i=>{let o=i.getAttribute("data-hcms-field");if(!o||t&&typeof t=="object"&&!(o in t))return;let a=[...r,o].join(".");i.setAttribute("data-hcms-path",a)})}function Ke(e,t,r,n){if(!e.querySelector)return e;let i=e.querySelector(t);if(i)return i;let o=r?.getAttribute?.("data-hcms-tpl")||n.join(".");throw new Error(`hypercms: template "${o}" is in slotted mode but has no ${t} element`)}function Ar(e,t){let r=He(e),n=(e.tagName||"").toUpperCase(),i=(e.getAttribute("type")||"").toLowerCase();if(n==="INPUT"&&i==="radio"){e.checked=e.value!=null&&String(e.value)===String(t??"");return}if(r==="checked"){e.checked=t===!0||t==="true";return}if(r){e[r]=t==null?"":String(t);return}e.textContent=t==null?"":String(t)}var Sr={skip:"[data-hcms-shell]",templateAttr:"cms-template"};function Er(e,t,r,n={}){let{observerHandle:i,shellRoot:o,structural:a,structuralPath:s}=n;i?.pause?.();try{if(!a)try{return q.apply(e,t,r,Sr),{ok:!0}}catch(m){return{ok:!1,error:m}}let l=ii(e,t,s),c=l?si(l):null,d=l?null:li(e,o);try{return q.apply(e,t,r,Sr),{ok:!0}}catch(m){return c?ai(l,c):d&&ci(e,o,d),{ok:!1,error:m}}}finally{i?.resume?.()}}function ii(e,t,r){if(!r||!e)return null;let n=W(r),i=[],o=t;for(let a of n){if(typeof o=="string"||o==null||Array.isArray(o))break;if(typeof o=="object"&&a in o){if(i.push(a),o=o[a],Array.isArray(o)||typeof o=="string"&&o.endsWith("[]"))break}else return null}return!Array.isArray(o)&&!(typeof o=="string"&&o.endsWith("[]"))?null:oi(e,t,i)}function oi(e,t,r){if(r.length===0)return null;let n=e,i=t;for(let o=0;o<r.length;o++){let a=r[o];if(!i||typeof i!="object"||Array.isArray(i))return null;let s=i[a];if(s==null)return null;if(o===r.length-1){if(Array.isArray(s)){let[l]=s;return n.querySelector?.(l)?.parentElement||null}if(typeof s=="string"&&s.endsWith("[]")){let l=s.slice(0,-2);return n.querySelector?.(l)?.parentElement||null}return null}i=s}return null}function si(e){let t=[];for(let r of Array.from(e.childNodes))t.push(r.cloneNode(!0));return t}function ai(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);for(let r of t)e.appendChild(r)}function li(e,t){let r=[];for(let n of Array.from(e.childNodes))n===t||t&&n.contains?.(t)||r.push(n.cloneNode(!0));return r}function ci(e,t,r){for(let i of Array.from(e.childNodes))i===t||t&&i.contains?.(t)||e.removeChild(i);let n=di(e,t);for(let i of r)e.insertBefore(i,n||null)}function di(e,t){if(!t)return null;for(let r of Array.from(e.childNodes))if(r===t||r.contains?.(t))return r;return null}var Et=new WeakSet;function ce(e,t){let r=typeof window<"u"&&window.hyperclay&&window.hyperclay.undo||null;if(!r)return t();r.pause();try{let n=t();return n&&n.ok?r.commitCaptured(e):r.discardCaptured(),n}finally{r.resume()}}function Je(e){let t=typeof window<"u"&&window.hyperclay&&window.hyperclay.undo||null;if(!t)return e();t.pause();try{return e()}finally{t.discardCaptured(),t.resume()}}function Mr(e){let{formRoot:t}=e;if(!t||Et.has(t))return;Et.add(t);let r=a=>{let s=a.target;!s||!s.closest||s.closest("[data-hcms-form-root]")&&s.matches("input, textarea, select")&&(s.matches('input[type="file"]')||!s.closest("[data-hcms-field]")&&!s.hasAttribute?.("data-hcms-field")||Cr(s,e))},n=a=>{let s=a.target;if(!(!s||!s.closest)&&s.closest("[data-hcms-form-root]")){if(s.matches('input[type="file"][data-hcms-upload]')){gi(s,e);return}s.matches('input[type="checkbox"], input[type="radio"], select')&&Cr(s,e)}},i=a=>{let s=a.target;if(!s||!s.closest)return;let l=s.closest("[data-hcms-action]");if(!l)return;let c=l.getAttribute("data-hcms-action");if(c==="add"||c==="remove"||c==="move-up"||c==="move-down"||c==="clear-upload"){if(!l.closest("[data-hcms-form-root]"))return}else if(c==="close"&&!l.closest("[data-hcms-shell]"))return;if(c==="add"){let d=l.closest("[data-hcms-path]");if(!d)return;let m=d.getAttribute("data-hcms-path");Ct(m,e)}else if(c==="remove"){let d=l.closest("[data-hcms-card], [data-hcms-array-item]");if(!d)return;_i(d,e)}else if(c==="move-up"||c==="move-down"){let d=l.closest("[data-hcms-card], [data-hcms-array-item]");if(!d)return;xi(d,c==="move-up"?-1:1,e)}else c==="clear-upload"?ki(l,e):c==="close"&&e.onCloseRequested?.()},o=t.ownerDocument;o.addEventListener("input",r,!0),o.addEventListener("change",n,!0),o.addEventListener("click",i,!0),e.detachEvents=()=>{o.removeEventListener("input",r,!0),o.removeEventListener("change",n,!0),o.removeEventListener("click",i,!0),Et.delete(t)}}var ui=new Set(["value","checked"]);function mi(e,t){if(!t)return null;let r=W(t);if(r.some(l=>typeof l=="number"||l==="*"))return null;let n=X(e.pageRules,r);if(typeof n!="string")return null;let i=n.lastIndexOf("@");if(i===-1)return null;let o=n.slice(i+1);if(!ui.has(o))return null;let a=n.slice(0,i),s=a?e.pageRoot.querySelector(a):e.pageRoot;return s?{el:s,prop:o,oldValue:s[o]}:null}function Cr(e,t){let n=(e.closest("[data-hcms-field]")||e).closest("[data-hcms-path]")?.getAttribute("data-hcms-path")||"",i=mi(t,n);if(U(D(t),{path:n,structural:!1},t),i){let o=typeof window<"u"&&window.hyperclay&&window.hyperclay.undo||null;o&&typeof o.recordValue=="function"&&o.recordValue(i.el,{prop:i.prop,oldValue:i.oldValue,newValue:i.el[i.prop]})}}var hi={type:"image/webp",quality:.85,maxWidth:2048,maxHeight:2048};async function pi(e,t){let r=t&&t.getAttribute?t.getAttribute("data-hcms-crop"):null;if(r==null)return{file:e};let n=typeof window<"u"&&window.hyperclay&&window.hyperclay.quickcrop||null;if(typeof n!="function")return{file:e};try{let i=await n(e,{aspect:fi(r),...hi});return i===null?null:{file:bi(i.blob,e.name),dataURL:i.dataURL}}catch(i){return _e(t,i&&i.message||"Crop failed"),null}}function fi(e){let t=String(e??"").trim().toLowerCase();if(t===""||t==="free")return null;let r=t.match(/^(\d+(?:\.\d+)?)\s*[:/]\s*(\d+(?:\.\d+)?)$/);if(!r)return null;let n=parseFloat(r[1]),i=parseFloat(r[2]);return!n||!i?null:n/i}function bi(e,t){let r=e.type==="image/webp"?".webp":e.type==="image/jpeg"?".jpg":".png",n=String(t||"image").replace(/\.[^.]+$/,"");try{return new File([e],n+r,{type:e.type})}catch{return e}}async function gi(e,t){let r=e.files&&e.files[0];if(!r)return;let n=e.closest("[data-hcms-path]");if(!n)return;let i=n.getAttribute("data-hcms-path")||"";_e(n,null);let o=await pi(r,n);if(!o||t.closed){Q(e);return}let a=o.file,s=o.dataURL||null,l=typeof window<"u"&&window.hyperclay&&window.hyperclay.uploadFileBasic||null,c=null;if(typeof l=="function")try{let d=await l(a);c=d&&d.uploads&&d.uploads[0]&&d.uploads[0].url}catch(d){if(t.closed){Q(e);return}_e(n,d&&d.message||"Upload failed"),t.dispatch?.("hcms:error",{error:d,path:i}),Q(e);return}if(t.closed){Q(e);return}if(c||(c=s||vi(a)),!c){Q(e);return}_e(n,null),Tr(n,c,a.name),U(D(t),{path:i,structural:!1},t),Q(e)}function ki(e,t){let r=e.closest("[data-hcms-path]");if(!r)return;let n=r.getAttribute("data-hcms-path")||"";Tr(r,"","");let i=r.querySelector('input[type="file"][data-hcms-upload]');i&&Q(i),_e(r,null),U(D(t),{path:n,structural:!1},t)}function yi(e){return e.querySelector?e.querySelector("img[data-hcms-field], a[data-hcms-field]"):null}function Tr(e,t,r){let n=yi(e);if(!n)return;let i=(n.tagName||"").toUpperCase();i==="IMG"?n.src=t||"":i==="A"&&(n.href=t||"",n.textContent=t?r||_t(t):"")}function Q(e){try{e.value=""}catch{}}function vi(e){let t=typeof URL<"u"&&URL.createObjectURL?URL:null;if(!t)return"";try{return t.createObjectURL(e)}catch{return""}}function _e(e,t){let r=e.querySelector?e.querySelector(":scope > .hcms-error"):null;r&&(t?(r.textContent=t,r.hidden=!1):(r.textContent="",r.hidden=!0))}function Ct(e,t){let{formRoot:r,pageRules:n}=t,i=r.querySelector(`[data-hcms-path="${Ti(e)}"]`);if(!i)throw new Error(`hypercms: no element at path "${e}"`);let o=i.querySelector(".hcms-array-items");if(!o)throw new Error(`hypercms: array container missing .hcms-array-items at "${e}"`);let a=W(e),s=Ci(n,a),l=Array.isArray(s),c=typeof s=="string"&&s.endsWith("[]");if(!l&&!c)throw new Error(`hypercms: path "${e}" is not an array`);let d=Ye(i,"data-hcms-max-items"),m=o.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]");if(i.hasAttribute("data-hcms-no-add")||d!=null&&m.length>=d)return;let h=m.length,y=l?s[1]:s.replace(/\[\]$/,""),x=ye(l?y:"string"),T=hr({shape:l?"object-array-item":"scalar-array-item",itemShape:y,pathArr:[...a,h],data:x,doc:t.doc,itemKey:i.getAttribute("data-hcms-item-tpl")||null});return o.appendChild(T),Mt(i),ce(`Add ${e}`,()=>U(D(t),{path:e,structural:!0},t))}function xi(e,t,r){let n=e.closest('[data-hcms-shape="object-array"], [data-hcms-shape="scalar-array"]');if(!n||n.hasAttribute("data-hcms-no-reorder"))return;let i=n.querySelector(".hcms-array-items");if(!i)return;let o=Array.from(i.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]")),a=o.indexOf(e);if(a<0)return;let s=a+t;if(s<0||s>=o.length)return;let l=e.querySelector(`[data-hcms-action="${t<0?"move-up":"move-down"}"]`);return t<0?i.insertBefore(e,o[s]):i.insertBefore(e,o[s].nextSibling),Ot(i),Mt(n),l&&typeof l.focus=="function"&&e.querySelector(`[data-hcms-action="${t<0?"move-up":"move-down"}"]`)?.focus?.(),ce(`Reorder ${n.getAttribute("data-hcms-path")||""}`,()=>U(D(r),{path:n.getAttribute("data-hcms-path")||"",structural:!0},r))}var Ge="Delete this item?";function wi(e,t){let r=e&&e.getAttribute("data-hcms-confirm-remove");if(r!=null)return/^(off|false|no|0)$/i.test(r.trim())?null:r||Ge;let n=t&&t.confirmRemove;return n===!1?null:typeof n=="string"?n||Ge:n===!0||e&&e.getAttribute("data-hcms-shape")==="object-array"?Ge:null}function _i(e,t){let r=e.closest('[data-hcms-shape="object-array"], [data-hcms-shape="scalar-array"]'),n=wi(r,t);if(n==null)return le(e,t);let i=typeof window<"u"&&(window.hyperclay?.consent||window.consent);typeof i=="function"?Promise.resolve(i(n)).then(()=>le(e,t),()=>{}):typeof window<"u"&&typeof window.confirm=="function"?window.confirm(n)&&le(e,t):le(e,t)}function le(e,t){let r=e.getAttribute("data-hcms-path")||"",n=e.parentElement,i=e.closest('[data-hcms-shape="object-array"], [data-hcms-shape="scalar-array"]');if(!i?.hasAttribute("data-hcms-no-remove")){if(i){let o=Ye(i,"data-hcms-min-items"),a=i.querySelector(".hcms-array-items"),s=a?a.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]").length:0;if(o!=null&&s<=o)return}return e.remove(),n&&Ot(n),i&&Mt(i),ce(`Remove ${r}`,()=>U(D(t),{path:r,structural:!0},t))}}function U(e,t,r){let n=Ae(e);if(n===r.lastFingerprint)return{ok:!0,skipped:!0};let i=Er(r.pageRoot,r.pageRules,e,{observerHandle:r.observerHandle,shellRoot:r.shellRoot,structural:!!t.structural,structuralPath:t.path||null});return i.ok?(r.lastFingerprint=n,r.lastData=e,Rr(r,null),r.dispatch?.("hcms:change",{data:e,path:t.path,structural:!!t.structural}),r.onChange?.(e,t)):(Rr(r,Ei(i.error,t.path)),r.dispatch?.("hcms:error",{error:i.error,attemptedData:e}),r.onError?.(i.error)),i}function D(e){let t=q.extract(e.formRoot,e.formRules);return K(t,e.formRules)}function K(e,t){if(t==null||e==null)return e;if(typeof t=="string")return t.endsWith("@checked")?e===!0||e==="true":e;if(Array.isArray(t)){if(!Array.isArray(e))return e;let[,r]=t;return e.map(n=>K(n,r))}if(typeof t=="object"){if(typeof e!="object"||Array.isArray(e))return e;let r={};for(let[n,i]of Object.entries(t))r[n]=K(e[n],i);return r}return e}function Rr(e,t){e.lastErrors=t&&t.length?t:null,Rt(e)}function Rt(e){if(Ai(e),e.errorEl&&(e.errorEl.textContent="",e.errorEl.hidden=!0),!e.lastErrors)return;let t=[];for(let{message:r,path:n}of e.lastErrors){if(n!=null&&n!==""){let i=Si(e.formRoot,n);if(i){i.textContent=i.textContent?`${i.textContent}
150
+ `},Si=["@scalar","@object","@scalar-array","@scalar-array-item","@object-array","@object-array-item"];function Xe(e){let t=e.head||e.documentElement;if(t)for(let r of Si)Nr(e,t,r)}function Lt(e,t){if(!Rr[t])return null;let r=e&&(e.head||e.documentElement);return r?Nr(e,r,t):null}var Er={src:"@image",checked:"@checkbox",innerHTML:"@richtext"},Ye={image:"@image",file:"@file",checkbox:"@checkbox",toggle:"@toggle",select:"@select",radio:"@radio",textarea:"@textarea",number:"@number",richtext:"@richtext"},Ei=new Set([...Object.values(Ye),"@chips","@chips-item"]);function De(e,t,r){if(typeof e!="string")return"@scalar";let n=e.lastIndexOf("@"),i=tt($e(e,n),t,"data-hcms-component");if(i&&Ye[i]){let o=Ye[i],a=Array.isArray(r)&&r.some(s=>s==="*"||typeof s=="number");return o==="@number"&&!Cr(e,n,t,a).every(Ri)||(o==="@checkbox"||o==="@toggle")&&(n<0||e.slice(n+1)!=="checked")&&!Cr(e,n,t,a).every(Ti)?"@scalar":o}if(n>=0){let o=e.slice(n+1);if(Er[o])return Er[o]}return"@scalar"}function Tr(e,t){if(typeof e!="string")return null;let r=e.lastIndexOf("@"),n=tt($e(e,r),t,"data-hcms-component");return n&&Ye[n]||null}var Ci=/^-?\d+(\.\d+)?([eE][+-]?\d+)?$/;function Ri(e){return e==null||e===""?!0:Ci.test(String(e))}function Ti(e){return e==null||e===""||e==="true"||e==="false"}function Cr(e,t,r,n){if(!r||!r.querySelectorAll)return[];let i=$e(e,t);if(!i||i===".")return[];let o=null;try{o=r.querySelectorAll(i)}catch{return[]}let a=t>=0?e.slice(t+1):null,s=[];for(let l of o)if(!(l.closest&&l.closest("[cms-template], [data-hcms-shell]"))&&(a?a==="value"&&"value"in l?s.push(l.value):s.push(l.getAttribute?l.getAttribute(a):null):s.push((l.textContent||"").trim()),!n))break;return s}function Qe(e,t){if(typeof e!="string"||!e.endsWith("[]")||!t||!t.querySelector)return null;let r=e.slice(0,-2).trim();if(!r)return null;let n=null;try{n=t.querySelector(r)}catch{return null}let i=n&&n.closest?n.closest("[data-hcms-component]"):null;return(i&&i.getAttribute?i.getAttribute("data-hcms-component"):null)==="chips"?{array:"@chips",item:"@chips-item"}:null}function we(e,t,r){let n=e.join("."),i=e.map(o=>typeof o=="number"?"*":o).join(".");return n&&Z(r,n)||i&&i!==n&&Z(r,i)||Z(r,t)}function et(e,t,r){let n=Qe(e,r);if(!n)return null;let i=we(t,n.array,r);return i&&i.getAttribute("data-hcms-tpl")===n.array?n:null}function Or(e,t){if(typeof e!="string")return null;let r=e.lastIndexOf("@"),n=tt($e(e,r),t,"data-hcms-options");if(n==null)return null;let i=n.trim().split(/\s+/).filter(Boolean);return i.length?i:null}function Mr(e,t){if(typeof e!="string")return null;let r=e.lastIndexOf("@");return tt($e(e,r),t,"data-hcms-crop")}function $e(e,t){return t>=0?e.slice(0,t):e}function tt(e,t,r){if(!t||!t.querySelector||!e||e===".")return null;let n=null;try{n=t.querySelector(e)}catch{return null}return n&&n.getAttribute?n.getAttribute(r):null}function rt(e,t){if(!e||t==null)return;r(t);function r(n){let i=ue(n);if(i==="scalar"){let o=De(n,e);Ei.has(o)&&Lt(e,o);return}if(i==="scalar-array"){let o=Qe(n,e);o&&(Lt(e,o.array),Lt(e,o.item));return}if(i==="object"){for(let o of Object.values(n))r(o);return}if(i==="object-array"){let o=n[1];if(o&&typeof o=="object"&&!Array.isArray(o))for(let a of Object.values(o))r(a);else r(o)}}}function Nr(e,t,r){let n=Z(e,r);if(n)return n;let i=e.createElement("template");return i.setAttribute("data-hcms-tpl",r),i.setAttribute("save-remove",""),i.innerHTML=Rr[r].trim(),t.appendChild(i),i}function Z(e,t){return!e||!e.querySelector?null:e.querySelector(`template[data-hcms-tpl="${Oi(t)}"]`)}function Oi(e){return typeof CSS<"u"&&CSS.escape?CSS.escape(e):String(e).replace(/[^a-zA-Z0-9_\-.*]/g,t=>"\\"+t)}function ue(e){return typeof e=="string"?e.endsWith("[]")?"scalar-array":"scalar":Array.isArray(e)?"object-array":typeof e=="object"&&e!==null?"object":"scalar"}function Be(e){return e?!!(e.content||e).querySelector("[data-hcms-field]"):!1}var Ir={IMG:"src",A:"href"};function nt(e){if(!e)return"value";let t=(e.tagName||"").toUpperCase();return t==="INPUT"?(e.getAttribute("type")||"text").toLowerCase()==="checkbox"?"checked":"value":t==="TEXTAREA"||t==="SELECT"?"value":Ir[t]?Ir[t]:e.hasAttribute&&e.hasAttribute("contenteditable")?"innerHTML":null}function Lr(e,t){let r=(e.tagName||"").toUpperCase(),n=(e.getAttribute&&e.getAttribute("type")||"").toLowerCase(),i=nt(e),a=`${Fr(r,n)}[data-hcms-field="${_e(t)}"]`;return r==="INPUT"&&n==="radio"?`${a}:checked@value`:i?`${a}@${i}`:a}function Mi(e){let t=(e.tagName||"").toUpperCase(),r=(e.getAttribute&&e.getAttribute("type")||"").toLowerCase(),n=nt(e),o=`${Fr(t,r)}[data-hcms-field]`;return t==="INPUT"&&r==="radio"?`${o}:checked@value`:n?`${o}@${n}`:o}function Fr(e,t){return e==="INPUT"?t?`input[type="${t}"]`:"input":e==="TEXTAREA"?"textarea":e==="SELECT"?"select":e==="IMG"?"img":e==="A"?"a":':not([data-hcms-shape="scalar"]):not([data-hcms-shape="object"]):not([data-hcms-shape="object-array"]):not([data-hcms-shape="scalar-array"])'}function _e(e){return typeof CSS<"u"&&CSS.escape?CSS.escape(e):String(e).replace(/[^a-zA-Z0-9_\-.*]/g,t=>"\\"+t)}var jr=new Set(["__proto__","constructor","prototype"]);function it(e,t){return r(e,[]);function r(c,m){let d=ue(c);if(d==="scalar")return n(c,m);if(d==="scalar-array")return i(c,m);if(d==="object-array")return o(c,m);if(d==="object"){let h=Object.create(null);for(let[f,k]of Object.entries(c)){if(jr.has(f))throw new Error(`hypercms: rule key "${f}" is forbidden at "${m.join(".")||"<root>"}"`);h[f]=r(k,[...m,f])}return h}return null}function n(c,m){let d=m.length?m[m.length-1]:null,h=typeof d=="string"?d:"__value",f=l(m,h);if(f)return Lr(f,h);let k=s(De(c,t,m),h);return k?Lr(k,h):`input[data-hcms-field="${_e(h)}"]@value`}function i(c,m){let d=et(c,m,t),h=d&&s(d.item,null)||s("@scalar-array-item",null),f=h?Mi(h):"input[data-hcms-field]@value";return[a(m,"[data-hcms-array-item]"),f]}function o(c,m){let[,d]=c,h=[...m,"*"],f=a(m,"[data-hcms-card]");if(d&&typeof d=="object"&&!Array.isArray(d)){let k=Object.create(null);for(let[C,N]of Object.entries(d)){if(jr.has(C))throw new Error(`hypercms: rule key "${C}" is forbidden at "${h.join(".")}"`);k[C]=r(N,[...h,C])}return[f,k]}return[f,r(d,[...h,0])]}function a(c,m){let d=c.length?c[c.length-1]:"",h=c.some(C=>C==="*"),f=c.join(".");return`${h?`[data-hcms-field="${_e(d)}"]`:`[data-hcms-path="${_e(f)}"]`} > .hcms-array-items > ${m}`}function s(c,m){if(!t)return null;let d=Z(t,c);if(!d)return null;let h=d.content||d;if(m){let f=h.querySelector(`[data-hcms-field="${_e(m)}"]`);if(f)return f}return h.querySelector("[data-hcms-field]")}function l(c,m){if(!t)return null;let d=c.map(k=>typeof k=="number"?"*":k).join("."),f=[c.join("."),d];for(let k=c.length-1;k>=0;k--){let C=c.slice(0,k).map(N=>typeof N=="number"?"*":N);C.push("*"),f.push(C.join("."))}for(let k of f){if(!k)continue;let C=Z(t,k);if(!C||!Be(C))continue;let N=C.content||C,D=N.querySelector(`[data-hcms-field="${_e(m)}"]`)||N.querySelector("[data-hcms-field]");if(D)return D}return null}}function jt(e){if(!e)return"";let t=String(e).split(/[?#]/)[0],r=t.split("/").pop()||t;try{return decodeURIComponent(r)}catch{return r}}function ot({pageRules:e,formRules:t,data:r,doc:n}){let i=n.createDocumentFragment(),o=Ft(e,[],r,n);return o&&i.appendChild(o),i}function Dr({shape:e,itemShape:t,pathArr:r,data:n,doc:i,itemKey:o}){if(e==="object-array-item")return Br(t,r,n,i);if(e==="scalar-array-item")return zr(r,n,i,o||null);throw new Error(`hypercms: buildItem called with unknown shape "${e}"`)}function Ft(e,t,r,n){let i=ue(e);return i==="scalar"?Ni(e,t,r,n):i==="object"?Fi(e,t,r,n):i==="object-array"?qi(e,t,r,n):i==="scalar-array"?Di(e,t,r,n):null}function Ni(e,t,r,n){let i=De(e,n,t),o=we(t,i,n);if(!o)throw new Error(`hypercms: missing template for scalar at "${t.join(".")}"`);let a=Tr(e,n);a==="@number"&&i==="@scalar"&&console.info(`[hypercms] field "${t.join(".")}" declares component "@number" but its value isn't a plain number; rendering a text input so the value is preserved`),(a==="@checkbox"||a==="@toggle")&&i==="@scalar"&&console.info(`[hypercms] field "${t.join(".")}" declares component "${a}" but its value isn't true/false; rendering a text input so the value is preserved`),$r(o,a===i?a:null,t);let s=Ae(o,n);Se(s,t);let l=o.getAttribute?.("data-hcms-tpl");if((i==="@select"||i==="@radio")&&l===i&&Ii(s,e,t,r,n,i),i==="@image"&&l==="@image"){let c=Mr(e,n);c!=null&&!s.hasAttribute("data-hcms-crop")&&s.setAttribute("data-hcms-crop",c)}return $i(s,re(t)),st(s,re(t)),at(s,re(t)),Wr(s,r),i==="@file"&&ji(s),s}function $r(e,t,r){if(!t)return;let n=e.getAttribute?.("data-hcms-tpl");n&&n!==t&&console.info(`[hypercms] field "${r.join(".")}" declares component "${t}" but custom template "${n}" wins`)}function Ii(e,t,r,n,i,o){let a=Or(t,i),s=a?[...a]:[],l=n==null?"":String(n);if(l!==""&&!s.includes(l)&&s.unshift(l),!a&&(Li(e,"data-hcms-options required (space-separated values)"),s.length===0)){e.querySelector(".mirk-radio")?.remove();return}if(o==="@select"){let d=e.querySelector("select[data-hcms-field]");if(!d)return;for(let h of s){let f=i.createElement("option");f.value=h,f.textContent=Ze(h),d.appendChild(f)}return}let c=e.querySelector(".mirk-radio");if(!c||!c.parentNode)return;let m=qt(r.join("."));for(let d of s){let h=c.cloneNode(!0),f=h.querySelector('input[type="radio"]');f&&(f.value=d,f.name=m);let k=h.querySelector(".mirk-radio__label");k&&(k.textContent=Ze(d)),c.parentNode.insertBefore(h,c)}c.remove()}function qt(e){return"hcms-"+String(e).replace(/[^A-Za-z0-9_-]/g,"-")}function Li(e,t){let r=e.querySelector?e.querySelector(".hcms-error"):null;r&&(r.textContent=t,r.hidden=!1)}function ji(e){let t=e.querySelector?e.querySelector("a.mirk-file__name[data-hcms-field]"):null;t&&(t.textContent=jt(t.getAttribute("href")))}function Fi(e,t,r,n){let i=we(t,"@object",n);if(!i)throw new Error(`hypercms: missing template for object at "${t.join(".")}"`);let o=Ae(i,n);if(Se(o,t),st(o,re(t)),at(o,re(t)),Be(i))return Gr(o,e,t),Kr(o,e,r),o;let a=lt(o,".hcms-object-fields",i,t);for(let[s,l]of Object.entries(e)){let c=r==null?null:r[s],m=Ft(l,[...t,s],c,n);m&&a.appendChild(m)}return o}function qi(e,t,r,n){let i=we(t,"@object-array",n);if(!i)throw new Error(`hypercms: missing template for object-array at "${t.join(".")}"`);let o=Ae(i,n);Se(o,t),st(o,re(t)),at(o,re(t)),Ur(o,i),Vr(o,i,t);let a=lt(o,".hcms-array-items",i,t),[,s]=e;return(Array.isArray(r)?r:[]).forEach((c,m)=>{let d=Br(s,[...t,m],c,n);d&&a.appendChild(d)}),Hr(o),o}function Br(e,t,r,n){let i=Pr(t,"object-array-item",n);if(!i)throw new Error(`hypercms: missing item template for "${t.join(".")}"`);let o=Ae(i,n);if(o.setAttribute("data-hcms-card",""),o.classList.contains("hcms-card")||o.classList.add("hcms-card"),Se(o,t),Be(i))return e&&typeof e=="object"&&!Array.isArray(e)&&(Gr(o,e,t),Kr(o,e,r)),o;let a=lt(o,".hcms-card-fields",i,t);if(e&&typeof e=="object"&&!Array.isArray(e))for(let[s,l]of Object.entries(e)){let c=r==null?null:r[s],m=Ft(l,[...t,s],c,n);m&&a.appendChild(m)}return o}function Di(e,t,r,n){let i=Qe(e,n),o=et(e,t,n),a=i?i.array:"@scalar-array",s=we(t,a,n);if(!s)throw new Error(`hypercms: missing template for scalar-array at "${t.join(".")}"`);$r(s,i?i.array:null,t);let l=Ae(s,n);Se(l,t),st(l,re(t)),at(l,re(t)),Ur(l,s),Vr(l,s,t),o&&l.setAttribute("data-hcms-item-tpl",o.item);let c=lt(l,".hcms-array-items",s,t);return(Array.isArray(r)?r:[]).forEach((d,h)=>{let f=zr([...t,h],d,n,o?o.item:null);f&&c.appendChild(f)}),Hr(l),l}function zr(e,t,r,n){let i=Pr(e,"scalar-array-item",r,n);if(!i)throw new Error(`hypercms: missing item template for "${e.join(".")}"`);let o=Ae(i,r);return o.setAttribute("data-hcms-array-item",""),o.classList.contains("hcms-array-item")||o.classList.add("hcms-array-item"),Se(o,e),Wr(o,t),o}function Pr(e,t,r,n){let i=e.map(o=>typeof o=="number"?"*":o).join(".");return Z(r,i)||n&&Z(r,n)||Z(r,"@"+t)}function Ae(e,t){let r=e.content||e,n=t.createElement("div");return n.appendChild(r.cloneNode(!0)),n.firstElementChild||n}function Se(e,t){e.setAttribute("data-hcms-path",t.join("."))}function $i(e,t){let r=t==null?"":String(t);if(e.matches&&e.matches("[data-hcms-field]")){e.getAttribute("data-hcms-field")||e.setAttribute("data-hcms-field",r);return}(e.querySelectorAll?e.querySelectorAll("[data-hcms-field]"):[]).forEach(i=>{i.getAttribute("data-hcms-field")||i.setAttribute("data-hcms-field",r)})}function st(e,t){t==null||t===""||!e.setAttribute||e.hasAttribute?.("data-hcms-field")||e.setAttribute("data-hcms-field",String(t))}function at(e,t){if(t==null||t==="")return;(e.querySelectorAll?e.querySelectorAll("[data-hcms-label]"):[]).forEach(n=>{(n.textContent||"").trim()===""&&(n.textContent=Ze(String(t)))})}function Ur(e,t){["data-hcms-no-add","data-hcms-no-remove","data-hcms-no-reorder"].forEach(r=>{t.hasAttribute(r)&&e.setAttribute(r,"")}),["data-hcms-min-items","data-hcms-max-items"].forEach(r=>{t.hasAttribute(r)&&e.setAttribute(r,t.getAttribute(r))})}function Hr(e){let t=e.querySelector?e.querySelector(".hcms-array-items"):null;if(!t)return;let r=Array.from(t.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]")),n=r.length,i=qr(e,"data-hcms-max-items"),o=qr(e,"data-hcms-min-items"),a=e.hasAttribute("data-hcms-no-add"),s=e.hasAttribute("data-hcms-no-remove"),l=e.hasAttribute("data-hcms-no-reorder"),c=e.querySelector('[data-hcms-action="add"]');c&&(c.hidden=a||i!=null&&n>=i),r.forEach((m,d)=>{let h=m.querySelector('[data-hcms-action="remove"]');h&&(h.hidden=s||o!=null&&n<=o);let f=m.querySelector('[data-hcms-action="move-up"]');f&&(f.hidden=l||d===0);let k=m.querySelector('[data-hcms-action="move-down"]');k&&(k.hidden=l||d===n-1)})}function qr(e,t){if(!e||!e.hasAttribute(t))return null;let r=parseInt(e.getAttribute(t),10);return Number.isFinite(r)?r:null}function Vr(e,t,r){if(e.hasAttribute("data-hcms-no-reorder")||t.hasAttribute("data-hcms-no-reorder"))return;let n=e.querySelector(".hcms-array-items");if(!n)return;let i="hcms-"+r.join(".");n.setAttribute("sortable",i),n.setAttribute("onsorted","hypercmsCommit && hypercmsCommit()")}function re(e){return e.length?e[e.length-1]:null}function Wr(e,t){let r=Bi(e);if(r.length!==0)for(let n of r)Jr(n,t)}function Bi(e){if(!e)return[];let t=[];return e.matches?.("[data-hcms-field]")&&zi(e)&&t.push(e),(e.querySelectorAll?e.querySelectorAll("input[data-hcms-field], textarea[data-hcms-field], select[data-hcms-field], img[data-hcms-field], a[data-hcms-field], [contenteditable][data-hcms-field]"):[]).forEach(n=>t.push(n)),t}function zi(e){let t=(e.tagName||"").toUpperCase();return!!(t==="INPUT"||t==="TEXTAREA"||t==="SELECT"||t==="IMG"||t==="A"||e.hasAttribute?.("contenteditable"))}function Kr(e,t,r){(e.querySelectorAll?e.querySelectorAll("[data-hcms-field]"):[]).forEach(i=>{let o=i.getAttribute("data-hcms-field");if(!o)return;if(!t||typeof t!="object"||!(o in t)){console.warn(`[hypercms] inline template field "${o}" is not in the rule shape; ignoring`);return}let a=r==null?null:r[o];Jr(i,a)})}function Gr(e,t,r){if(!e.querySelectorAll)return;e.querySelectorAll("[data-hcms-field]").forEach(i=>{let o=i.getAttribute("data-hcms-field");if(!o||t&&typeof t=="object"&&!(o in t))return;let a=[...r,o].join(".");i.setAttribute("data-hcms-path",a)})}function lt(e,t,r,n){if(!e.querySelector)return e;let i=e.querySelector(t);if(i)return i;let o=r?.getAttribute?.("data-hcms-tpl")||n.join(".");throw new Error(`hypercms: template "${o}" is in slotted mode but has no ${t} element`)}function Jr(e,t){let r=nt(e),n=(e.tagName||"").toUpperCase(),i=(e.getAttribute("type")||"").toLowerCase();if(n==="INPUT"&&i==="radio"){e.checked=e.value!=null&&String(e.value)===String(t??"");return}if(r==="checked"){e.checked=t===!0||t==="true";return}if(r){e[r]=t==null?"":String(t);return}e.textContent=t==null?"":String(t)}var Yr={skip:"[data-hcms-shell]",templateAttr:"cms-template"};function Zr(e,t,r,n={}){let{observerHandle:i,shellRoot:o,structural:a,structuralPath:s}=n;i?.pause?.();try{if(!a)try{return W.apply(e,t,r,Yr),{ok:!0}}catch(d){return{ok:!1,error:d}}let l=Pi(e,t,s),c=l?Hi(l):null,m=l?null:Wi(e,o);try{return W.apply(e,t,r,Yr),{ok:!0}}catch(d){return c?Vi(l,c):m&&Ki(e,o,m),{ok:!1,error:d}}}finally{i?.resume?.()}}function Pi(e,t,r){if(!r||!e)return null;let n=te(r),i=[],o=t;for(let a of n){if(typeof o=="string"||o==null||Array.isArray(o))break;if(typeof o=="object"&&a in o){if(i.push(a),o=o[a],Array.isArray(o)||typeof o=="string"&&o.endsWith("[]"))break}else return null}return!Array.isArray(o)&&!(typeof o=="string"&&o.endsWith("[]"))?null:Ui(e,t,i)}function Ui(e,t,r){if(r.length===0)return null;let n=e,i=t;for(let o=0;o<r.length;o++){let a=r[o];if(!i||typeof i!="object"||Array.isArray(i))return null;let s=i[a];if(s==null)return null;if(o===r.length-1){if(Array.isArray(s)){let[l]=s;return n.querySelector?.(l)?.parentElement||null}if(typeof s=="string"&&s.endsWith("[]")){let l=s.slice(0,-2);return n.querySelector?.(l)?.parentElement||null}return null}i=s}return null}function Hi(e){let t=[];for(let r of Array.from(e.childNodes))t.push(r.cloneNode(!0));return t}function Vi(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);for(let r of t)e.appendChild(r)}function Wi(e,t){let r=[];for(let n of Array.from(e.childNodes))n===t||t&&n.contains?.(t)||r.push(n.cloneNode(!0));return r}function Ki(e,t,r){for(let i of Array.from(e.childNodes))i===t||t&&i.contains?.(t)||e.removeChild(i);let n=Gi(e,t);for(let i of r)e.insertBefore(i,n||null)}function Gi(e,t){if(!t)return null;for(let r of Array.from(e.childNodes))if(r===t||r.contains?.(t))return r;return null}function ct(e,t){if(!t||e==null)return e;return r(e);function r(n){if(typeof n=="string"){if(n.endsWith("[]")||n.lastIndexOf("@")>=0)return n;let i=null;try{i=t.querySelector(n)}catch{return n}return i&&i.children.length>0?n+"@innerHTML":n}if(Array.isArray(n))return n;if(n&&typeof n=="object"){let i=Object.create(null);for(let[o,a]of Object.entries(n))i[o]=r(a);return i}return n}}function Dt(e){if(!e||e.tagName!=="TEXTAREA")return;let t=e.ownerDocument.defaultView||(typeof window<"u"?window:null);t&&t.CSS&&t.CSS.supports&&t.CSS.supports("field-sizing: content")||(e.style.height="auto",e.style.height=e.scrollHeight+"px")}function Ee(e,t){if(!e||!e.querySelectorAll)return;e.querySelectorAll("textarea[data-hcms-field]").forEach(Dt);let r=t&&t.defaultView||(typeof window<"u"?window:null),n=r&&r.richclay&&r.richclay.RichClay||r&&r.hyperclay&&r.hyperclay.RichClay||(r&&typeof r.RichClay=="function"?r.RichClay:null);n&&e.querySelectorAll("[contenteditable][data-hcms-field]").forEach(i=>{if(i.__hcmsRichclay)return;let o;try{o=new n(i,{inline:!0,hyperclay:!1,toolbar:["bold","italic","link","undo","redo"]})}catch(s){console.warn("[hypercms] richclay activation failed; field stays plain contenteditable",s);return}i.__hcmsRichclay=o;let a=o&&o.squire;a&&typeof a.addEventListener=="function"&&a.addEventListener("input",()=>{let s=r&&r.Event||Event;i.dispatchEvent(new s("input",{bubbles:!0}))})})}var $t=new WeakSet;function Re(e,t){let r=typeof window<"u"&&window.hyperclay&&window.hyperclay.undo||null;if(!r)return t();r.pause();try{let n=t();return n&&n.ok?r.commitCaptured(e):r.discardCaptured(),n}finally{r.resume()}}function ut(e){let t=typeof window<"u"&&window.hyperclay&&window.hyperclay.undo||null;if(!t)return e();t.pause();try{return e()}finally{t.discardCaptured(),t.resume()}}function en(e){let{formRoot:t}=e;if(!t||$t.has(t))return;$t.add(t);let r=a=>{let s=a.target;!s||!s.closest||s.closest("[data-hcms-form-root]")&&s.matches("input, textarea, select, [contenteditable][data-hcms-field]")&&(s.tagName==="TEXTAREA"&&Dt(s),!s.matches('input[type="file"]')&&(!s.closest("[data-hcms-field]")&&!s.hasAttribute?.("data-hcms-field")||Xr(s,e)))},n=a=>{let s=a.target;if(!(!s||!s.closest)&&s.closest("[data-hcms-form-root]")){if(s.matches('input[type="file"][data-hcms-upload]')){to(s,e);return}s.matches('input[type="checkbox"], input[type="radio"], select')&&Xr(s,e)}},i=a=>{let s=a.target;if(!s||!s.closest)return;let l=s.closest("[data-hcms-action]");if(!l)return;let c=l.getAttribute("data-hcms-action");if(c==="add"||c==="remove"||c==="move-up"||c==="move-down"||c==="clear-upload"){if(!l.closest("[data-hcms-form-root]"))return}else if(c==="close"&&!l.closest("[data-hcms-shell]"))return;if(c==="add"){let m=l.closest("[data-hcms-path]");if(!m)return;let d=m.getAttribute("data-hcms-path");Bt(d,e)}else if(c==="remove"){let m=l.closest("[data-hcms-card], [data-hcms-array-item]");if(!m)return;ao(m,e)}else if(c==="move-up"||c==="move-down"){let m=l.closest("[data-hcms-card], [data-hcms-array-item]");if(!m)return;oo(m,c==="move-up"?-1:1,e)}else c==="clear-upload"?ro(l,e):c==="close"&&e.onCloseRequested?.()},o=t.ownerDocument;o.addEventListener("input",r,!0),o.addEventListener("change",n,!0),o.addEventListener("click",i,!0),e.detachEvents=()=>{o.removeEventListener("input",r,!0),o.removeEventListener("change",n,!0),o.removeEventListener("click",i,!0),$t.delete(t)}}var Ji=new Set(["value","checked"]);function Yi(e,t){if(!t)return null;let r=te(t);if(r.some(l=>typeof l=="number"||l==="*"))return null;let n=me(e.pageRules,r);if(typeof n!="string")return null;let i=n.lastIndexOf("@");if(i===-1)return null;let o=n.slice(i+1);if(!Ji.has(o))return null;let a=n.slice(0,i),s=a?e.pageRoot.querySelector(a):e.pageRoot;return s?{el:s,prop:o,oldValue:s[o]}:null}function Xr(e,t){let n=(e.closest("[data-hcms-field]")||e).closest("[data-hcms-path]")?.getAttribute("data-hcms-path")||"",i=Yi(t,n);if(ee(Y(t),{path:n,structural:!1},t),i){let o=typeof window<"u"&&window.hyperclay&&window.hyperclay.undo||null;o&&typeof o.recordValue=="function"&&o.recordValue(i.el,{prop:i.prop,oldValue:i.oldValue,newValue:i.el[i.prop]})}}var Zi={type:"image/webp",quality:.85,maxWidth:2048,maxHeight:2048};async function Xi(e,t){let r=t&&t.getAttribute?t.getAttribute("data-hcms-crop"):null;if(r==null)return{file:e};let n=typeof window<"u"&&window.hyperclay&&window.hyperclay.quickcrop||null;if(typeof n!="function")return{file:e};try{let i=await n(e,{aspect:Qi(r),...Zi});return i===null?null:{file:eo(i.blob,e.name),dataURL:i.dataURL}}catch(i){return ze(t,i&&i.message||"Crop failed"),null}}function Qi(e){let t=String(e??"").trim().toLowerCase();if(t===""||t==="free")return null;let r=t.match(/^(\d+(?:\.\d+)?)\s*[:/]\s*(\d+(?:\.\d+)?)$/);if(!r)return null;let n=parseFloat(r[1]),i=parseFloat(r[2]);return!n||!i?null:n/i}function eo(e,t){let r=e.type==="image/webp"?".webp":e.type==="image/jpeg"?".jpg":".png",n=String(t||"image").replace(/\.[^.]+$/,"");try{return new File([e],n+r,{type:e.type})}catch{return e}}async function to(e,t){let r=e.files&&e.files[0];if(!r)return;let n=e.closest("[data-hcms-path]");if(!n)return;let i=n.getAttribute("data-hcms-path")||"";ze(n,null);let o=await Xi(r,n);if(!o||t.closed){he(e);return}let a=o.file,s=o.dataURL||null,l=typeof window<"u"&&window.hyperclay&&window.hyperclay.uploadFileBasic||null,c=null;if(typeof l=="function")try{let m=await l(a);c=m&&m.uploads&&m.uploads[0]&&m.uploads[0].url}catch(m){if(t.closed){he(e);return}ze(n,m&&m.message||"Upload failed"),t.dispatch?.("hcms:error",{error:m,path:i}),he(e);return}if(t.closed){he(e);return}if(c||(c=s||io(a)),!c){he(e);return}ze(n,null),tn(n,c,a.name),ee(Y(t),{path:i,structural:!1},t),he(e)}function ro(e,t){let r=e.closest("[data-hcms-path]");if(!r)return;let n=r.getAttribute("data-hcms-path")||"";tn(r,"","");let i=r.querySelector('input[type="file"][data-hcms-upload]');i&&he(i),ze(r,null),ee(Y(t),{path:n,structural:!1},t)}function no(e){return e.querySelector?e.querySelector("img[data-hcms-field], a[data-hcms-field]"):null}function tn(e,t,r){let n=no(e);if(!n)return;let i=(n.tagName||"").toUpperCase();i==="IMG"?n.src=t||"":i==="A"&&(n.href=t||"",n.textContent=t?r||jt(t):"")}function he(e){try{e.value=""}catch{}}function io(e){let t=typeof URL<"u"&&URL.createObjectURL?URL:null;if(!t)return"";try{return t.createObjectURL(e)}catch{return""}}function ze(e,t){let r=e.querySelector?e.querySelector(":scope > .hcms-error"):null;r&&(t?(r.textContent=t,r.hidden=!1):(r.textContent="",r.hidden=!0))}function Bt(e,t){let{formRoot:r,pageRules:n}=t,i=r.querySelector(`[data-hcms-path="${fo(e)}"]`);if(!i)throw new Error(`hypercms: no element at path "${e}"`);let o=i.querySelector(".hcms-array-items");if(!o)throw new Error(`hypercms: array container missing .hcms-array-items at "${e}"`);let a=te(e),s=uo(n,a),l=Array.isArray(s),c=typeof s=="string"&&s.endsWith("[]");if(!l&&!c)throw new Error(`hypercms: path "${e}" is not an array`);let m=mt(i,"data-hcms-max-items"),d=o.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]");if(i.hasAttribute("data-hcms-no-add")||m!=null&&d.length>=m)return;let h=d.length,f=l?s[1]:s.replace(/\[\]$/,""),k=qe(l?f:"string"),C=Dr({shape:l?"object-array-item":"scalar-array-item",itemShape:f,pathArr:[...a,h],data:k,doc:t.doc,itemKey:i.getAttribute("data-hcms-item-tpl")||null});return o.appendChild(C),Ee(C,t.doc),Pt(i),Re(`Add ${e}`,()=>ee(Y(t),{path:e,structural:!0},t))}function oo(e,t,r){let n=e.closest('[data-hcms-shape="object-array"], [data-hcms-shape="scalar-array"]');if(!n||n.hasAttribute("data-hcms-no-reorder"))return;let i=n.querySelector(".hcms-array-items");if(!i)return;let o=Array.from(i.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]")),a=o.indexOf(e);if(a<0)return;let s=a+t;if(s<0||s>=o.length)return;let l=e.querySelector(`[data-hcms-action="${t<0?"move-up":"move-down"}"]`);return t<0?i.insertBefore(e,o[s]):i.insertBefore(e,o[s].nextSibling),Ht(i),Pt(n),l&&typeof l.focus=="function"&&e.querySelector(`[data-hcms-action="${t<0?"move-up":"move-down"}"]`)?.focus?.(),Re(`Reorder ${n.getAttribute("data-hcms-path")||""}`,()=>ee(Y(r),{path:n.getAttribute("data-hcms-path")||"",structural:!0},r))}var dt="Delete this item?";function so(e,t){let r=e&&e.getAttribute("data-hcms-confirm-remove");if(r!=null)return/^(off|false|no|0)$/i.test(r.trim())?null:r||dt;let n=t&&t.confirmRemove;return n===!1?null:typeof n=="string"?n||dt:n===!0||e&&e.getAttribute("data-hcms-shape")==="object-array"?dt:null}function ao(e,t){let r=e.closest('[data-hcms-shape="object-array"], [data-hcms-shape="scalar-array"]'),n=so(r,t);if(n==null)return Ce(e,t);let i=typeof window<"u"&&(window.hyperclay?.consent||window.consent);typeof i=="function"?Promise.resolve(i(n)).then(()=>Ce(e,t),()=>{}):typeof window<"u"&&typeof window.confirm=="function"?window.confirm(n)&&Ce(e,t):Ce(e,t)}function Ce(e,t){let r=e.getAttribute("data-hcms-path")||"",n=e.parentElement,i=e.closest('[data-hcms-shape="object-array"], [data-hcms-shape="scalar-array"]');if(!i?.hasAttribute("data-hcms-no-remove")){if(i){let o=mt(i,"data-hcms-min-items"),a=i.querySelector(".hcms-array-items"),s=a?a.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]").length:0;if(o!=null&&s<=o)return}return e.remove(),n&&Ht(n),i&&Pt(i),Re(`Remove ${r}`,()=>ee(Y(t),{path:r,structural:!0},t))}}function ee(e,t,r){let n=Pe(e);if(n===r.lastFingerprint)return{ok:!0,skipped:!0};let i=Zr(r.pageRoot,r.pageRules,e,{observerHandle:r.observerHandle,shellRoot:r.shellRoot,structural:!!t.structural,structuralPath:t.path||null});return i.ok?(r.lastFingerprint=n,r.lastData=e,Qr(r,null),r.dispatch?.("hcms:change",{data:e,path:t.path,structural:!!t.structural}),r.onChange?.(e,t)):(Qr(r,mo(i.error,t.path)),r.dispatch?.("hcms:error",{error:i.error,attemptedData:e}),r.onError?.(i.error)),i}function Y(e){let t=W.extract(e.formRoot,e.formRules);return ae(t,e.formRules)}function ae(e,t){if(t==null||e==null)return e;if(typeof t=="string")return t.endsWith("@checked")?e===!0||e==="true":e;if(Array.isArray(t)){if(!Array.isArray(e))return e;let[,r]=t;return e.map(n=>ae(n,r))}if(typeof t=="object"){if(typeof e!="object"||Array.isArray(e))return e;let r={};for(let[n,i]of Object.entries(t))r[n]=ae(e[n],i);return r}return e}function Qr(e,t){e.lastErrors=t&&t.length?t:null,zt(e)}function zt(e){if(lo(e),e.errorEl&&(e.errorEl.textContent="",e.errorEl.hidden=!0),!e.lastErrors)return;let t=[];for(let{message:r,path:n}of e.lastErrors){if(n!=null&&n!==""){let i=co(e.formRoot,n);if(i){i.textContent=i.textContent?`${i.textContent}
145
151
  ${r}`:r,i.hidden=!1;continue}}t.push(r)}t.length&&e.errorEl&&(e.errorEl.textContent=t.join(`
146
- `),e.errorEl.hidden=!1)}function Ai(e){if(e.formRoot)for(let t of e.formRoot.querySelectorAll(".hcms-error"))t.textContent="",t.hidden=!0}function Si(e,t){if(!e)return null;let r=t.split(".");for(;r.length>0;){let n=r.join("."),i=typeof CSS<"u"&&CSS.escape?CSS.escape(n):n.replace(/[^a-zA-Z0-9_\-.*]/g,a=>"\\"+a),o=e.querySelector(`[data-hcms-path="${i}"]`);if(o){for(let a of o.children)if(a.classList&&a.classList.contains("hcms-error"))return a}r.pop()}return null}function Ei(e,t){return e?e.name==="EmptyListInsert"?[{message:"Add a seed item in HTML first.",path:t}]:e.name==="ShapeMismatch"&&Array.isArray(e.mismatches)&&e.mismatches.length?e.mismatches.map(r=>({message:`Shape mismatch: expected ${r.expected}, got ${r.got}`,path:r.path})):[{message:e.message||String(e),path:t}]:[{message:"unknown error",path:t}]}function Ci(e,t){let r=e;for(let n of t){if(r==null||typeof r=="string")return;if(Array.isArray(r)){if(typeof n!="number"&&n!=="*")return;r=r[1];continue}if(typeof r=="object"){if(typeof n=="number"||!(n in r))return;r=r[n];continue}return}return r}function Ye(e,t){if(!e||!e.hasAttribute(t))return null;let r=parseInt(e.getAttribute(t),10);return Number.isFinite(r)?r:null}function Mt(e){if(!e)return;let t=e.querySelector(".hcms-array-items");if(!t)return;let r=Array.from(t.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]")),n=r.length,i=Ye(e,"data-hcms-max-items"),o=Ye(e,"data-hcms-min-items"),a=e.hasAttribute("data-hcms-no-add"),s=e.hasAttribute("data-hcms-no-remove"),l=e.hasAttribute("data-hcms-no-reorder"),c=e.querySelector(':scope > .hcms-add, :scope > * > .hcms-add, :scope > [data-hcms-action="add"]');c&&(c.hidden=a||i!=null&&n>=i),r.forEach((d,m)=>{let h=d.querySelector('[data-hcms-action="remove"]');h&&(h.hidden=s||o!=null&&n<=o);let y=d.querySelector('[data-hcms-action="move-up"]');y&&(y.hidden=l||m===0);let x=d.querySelector('[data-hcms-action="move-down"]');x&&(x.hidden=l||m===n-1)})}function Tt(e){!e||!e.querySelectorAll||e.querySelectorAll(".hcms-array-items").forEach(t=>Ot(t))}function Ot(e){let t=e.querySelectorAll?Array.from(e.querySelectorAll('input[type="radio"][data-hcms-field]'),n=>[n,n.checked]):[],r=0;for(let n of e.children){if(!n.matches?.("[data-hcms-card], [data-hcms-array-item]"))continue;let i=n.getAttribute("data-hcms-path");if(!i)continue;let o=i.split(".");o[o.length-1]=String(r);let a=o.join(".");a!==i&&Ri(n,i,a),r++}for(let[n,i]of t)n.checked!==i&&(n.checked=i)}function Ri(e,t,r){let n=e.querySelectorAll("[data-hcms-path]");e.setAttribute("data-hcms-path",r);for(let i of n){let o=i.getAttribute("data-hcms-path");o===t?i.setAttribute("data-hcms-path",r):o&&o.startsWith(t+".")&&i.setAttribute("data-hcms-path",r+o.slice(t.length))}Mi(e)}function Mi(e){for(let t of e.querySelectorAll('input[type="radio"][data-hcms-field]')){if(!t.name||!t.name.startsWith("hcms-"))continue;let r=t.closest("[data-hcms-path]");r&&(t.name=St(r.getAttribute("data-hcms-path")))}}function Ae(e){return JSON.stringify(e,(t,r)=>{if(r&&typeof r=="object"&&!Array.isArray(r)){let n=Object.create(null);for(let i of Object.keys(r).sort())n[i]=r[i];return n}return r})}function Ti(e){return typeof CSS<"u"&&CSS.escape?CSS.escape(e):String(e).replace(/[^a-zA-Z0-9_\-.*]/g,t=>"\\"+t)}var qi={},Xe="hcms-shell-styles",Oi="hcms-bundled-styles-installed",Li='a[href], area[href], button:not([disabled]), input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])',de=new WeakSet,Lt="";function Lr(e){Lt=e}var ji=0;function Or(e){return String(e).replace(/[&<>"]/g,t=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[t])}function jr({mountTo:e,side:t="right",overlay:r=!1,showSaveButton:n=!1,title:i="Page content",eyebrow:o="Edit",theme:a=null,doc:s}){Nr(s);let l=`hcms-shell-title-${++ji}`,c=s.createElement("div");c.setAttribute("data-hcms-shell",""),c.setAttribute("save-remove",""),c.setAttribute("save-ignore",""),c.setAttribute("tabindex","-1"),c.setAttribute("role","dialog"),c.setAttribute("aria-modal","true"),c.setAttribute("aria-labelledby",l);let d=a==="dark"?" dark":a==="light"?" light":"";c.className="hcms-shell pixel-quiet hcms-side-"+t+(r?" hcms-overlay":"")+d;let m=Or(i),h=Or(o);c.innerHTML=`
152
+ `),e.errorEl.hidden=!1)}function lo(e){if(e.formRoot)for(let t of e.formRoot.querySelectorAll(".hcms-error"))t.textContent="",t.hidden=!0}function co(e,t){if(!e)return null;let r=t.split(".");for(;r.length>0;){let n=r.join("."),i=typeof CSS<"u"&&CSS.escape?CSS.escape(n):n.replace(/[^a-zA-Z0-9_\-.*]/g,a=>"\\"+a),o=e.querySelector(`[data-hcms-path="${i}"]`);if(o){for(let a of o.children)if(a.classList&&a.classList.contains("hcms-error"))return a}r.pop()}return null}function mo(e,t){return e?e.name==="EmptyListInsert"?[{message:"Add a seed item in HTML first.",path:t}]:e.name==="ShapeMismatch"&&Array.isArray(e.mismatches)&&e.mismatches.length?e.mismatches.map(r=>({message:`Shape mismatch: expected ${r.expected}, got ${r.got}`,path:r.path})):[{message:e.message||String(e),path:t}]:[{message:"unknown error",path:t}]}function uo(e,t){let r=e;for(let n of t){if(r==null||typeof r=="string")return;if(Array.isArray(r)){if(typeof n!="number"&&n!=="*")return;r=r[1];continue}if(typeof r=="object"){if(typeof n=="number"||!(n in r))return;r=r[n];continue}return}return r}function mt(e,t){if(!e||!e.hasAttribute(t))return null;let r=parseInt(e.getAttribute(t),10);return Number.isFinite(r)?r:null}function Pt(e){if(!e)return;let t=e.querySelector(".hcms-array-items");if(!t)return;let r=Array.from(t.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]")),n=r.length,i=mt(e,"data-hcms-max-items"),o=mt(e,"data-hcms-min-items"),a=e.hasAttribute("data-hcms-no-add"),s=e.hasAttribute("data-hcms-no-remove"),l=e.hasAttribute("data-hcms-no-reorder"),c=e.querySelector(':scope > .hcms-add, :scope > * > .hcms-add, :scope > [data-hcms-action="add"]');c&&(c.hidden=a||i!=null&&n>=i),r.forEach((m,d)=>{let h=m.querySelector('[data-hcms-action="remove"]');h&&(h.hidden=s||o!=null&&n<=o);let f=m.querySelector('[data-hcms-action="move-up"]');f&&(f.hidden=l||d===0);let k=m.querySelector('[data-hcms-action="move-down"]');k&&(k.hidden=l||d===n-1)})}function Ut(e){!e||!e.querySelectorAll||e.querySelectorAll(".hcms-array-items").forEach(t=>Ht(t))}function Ht(e){let t=e.querySelectorAll?Array.from(e.querySelectorAll('input[type="radio"][data-hcms-field]'),n=>[n,n.checked]):[],r=0;for(let n of e.children){if(!n.matches?.("[data-hcms-card], [data-hcms-array-item]"))continue;let i=n.getAttribute("data-hcms-path");if(!i)continue;let o=i.split(".");o[o.length-1]=String(r);let a=o.join(".");a!==i&&ho(n,i,a),r++}for(let[n,i]of t)n.checked!==i&&(n.checked=i)}function ho(e,t,r){let n=e.querySelectorAll("[data-hcms-path]");e.setAttribute("data-hcms-path",r);for(let i of n){let o=i.getAttribute("data-hcms-path");o===t?i.setAttribute("data-hcms-path",r):o&&o.startsWith(t+".")&&i.setAttribute("data-hcms-path",r+o.slice(t.length))}po(e)}function po(e){for(let t of e.querySelectorAll('input[type="radio"][data-hcms-field]')){if(!t.name||!t.name.startsWith("hcms-"))continue;let r=t.closest("[data-hcms-path]");r&&(t.name=qt(r.getAttribute("data-hcms-path")))}}function Pe(e){return JSON.stringify(e,(t,r)=>{if(r&&typeof r=="object"&&!Array.isArray(r)){let n=Object.create(null);for(let i of Object.keys(r).sort())n[i]=r[i];return n}return r})}function fo(e){return typeof CSS<"u"&&CSS.escape?CSS.escape(e):String(e).replace(/[^a-zA-Z0-9_\-.*]/g,t=>"\\"+t)}var wo={},ht="hcms-shell-styles",go="hcms-bundled-styles-installed",bo='a[href], area[href], button:not([disabled]), input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])',Te=new WeakSet,Vt="";function nn(e){Vt=e}var ko=0;function rn(e){return String(e).replace(/[&<>"]/g,t=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[t])}function on({mountTo:e,side:t="right",overlay:r=!1,showSaveButton:n=!1,title:i="Page content",eyebrow:o="Edit",theme:a=null,doc:s}){sn(s);let l=`hcms-shell-title-${++ko}`,c=s.createElement("div");c.setAttribute("data-hcms-shell",""),c.setAttribute("save-remove",""),c.setAttribute("save-ignore",""),c.setAttribute("tabindex","-1"),c.setAttribute("role","dialog"),c.setAttribute("aria-modal","true"),c.setAttribute("aria-labelledby",l);let m=a==="dark"?" dark":a==="light"?" light":"";c.className="hcms-shell pixel-quiet hcms-side-"+t+(r?" hcms-overlay":"")+m;let d=rn(i),h=rn(o);c.innerHTML=`
147
153
  <div class="hcms-shell-minibar" aria-hidden="true">
148
- <span class="hcms-shell-minibar-title">${m}</span>
154
+ <span class="hcms-shell-minibar-title">${d}</span>
149
155
  <button type="button" class="hcms-shell-close mirk-button mirk-button--small" data-hcms-action="close" aria-label="Close">
150
156
  <span class="mirk-button__label">\xD7</span>
151
157
  </button>
@@ -154,7 +160,7 @@ ${r}`:r,i.hidden=!1;continue}}t.push(r)}t.length&&e.errorEl&&(e.errorEl.textCont
154
160
  <header class="hcms-shell-header">
155
161
  <div class="hcms-shell-heading">
156
162
  <div class="hcms-shell-eyebrow">${h}</div>
157
- <h2 class="hcms-shell-title" id="${l}">${m}</h2>
163
+ <h2 class="hcms-shell-title" id="${l}">${d}</h2>
158
164
  </div>
159
165
  <button type="button" class="hcms-shell-close mirk-button mirk-button--small" data-hcms-action="close" aria-label="Close">
160
166
  <span class="mirk-button__label">\xD7</span>
@@ -168,7 +174,21 @@ ${r}`:r,i.hidden=!1;continue}}t.push(r)}t.length&&e.errorEl&&(e.errorEl.textCont
168
174
  </button>
169
175
  </footer>
170
176
  </div>
171
- `,(e||s.body).appendChild(c);let x=s.body;x.classList.add("hcms-open"),r&&x.classList.add("hcms-overlay"),t==="left"&&x.classList.add("hcms-side-left");let T=Ii(c,s),k=Fi(c);return{root:c,formRoot:c.querySelector("[data-hcms-form-root]"),errorEl:c.querySelector(".hcms-shell-error"),saveButton:c.querySelector(".hcms-shell-save"),destroy(){T.detach(),k.detach(),c.remove(),x.classList.remove("hcms-open","hcms-overlay","hcms-side-left")},restoreChrome(){Ni(s),x.classList.add("hcms-open"),r&&x.classList.add("hcms-overlay"),t==="left"&&x.classList.add("hcms-side-left")}}}function Ni(e){e&&(e.getElementById(Xe)||e.querySelector("style[data-hcms-bundled-styles]")||(de.delete(e),Nr(e)))}function Nr(e){if(e&&!de.has(e)){if(e[Oi]){de.add(e);return}if(e.getElementById(Xe)||e.querySelector("style[data-hcms-bundled-styles]")){de.add(e);return}if(Lt){let t=e.createElement("style");t.id=Xe,t.setAttribute("save-remove",""),t.setAttribute("save-ignore",""),t.textContent=Lt,(e.head||e.documentElement).appendChild(t),de.add(e);return}try{let t=new URL("./theme.generated.css",qi.url).href,r=e.createElement("link");r.rel="stylesheet",r.id=Xe,r.setAttribute("save-remove",""),r.setAttribute("save-ignore",""),r.href=t,(e.head||e.documentElement).appendChild(r),de.add(e)}catch{console.warn("hypercms: shell stylesheet not applied \u2014 cssText is empty and the co-located theme fallback is unavailable. Call installStyles(themeText) before opening the CMS.")}}}function Fi(e){let t=e.querySelector(".hcms-shell-body"),r=e.querySelector(".hcms-shell-header");if(!t||!r||typeof t.addEventListener!="function")return{detach(){}};let n=()=>{let i=(r.offsetHeight||0)-12;e.classList.toggle("is-condensed",t.scrollTop>i)};return t.addEventListener("scroll",n,{passive:!0}),n(),{detach(){t.removeEventListener("scroll",n)}}}function Ii(e,t){function r(n){if(n.key!=="Tab"||!e.contains(t.activeElement))return;let i=Array.from(e.querySelectorAll(Li));if(i.length===0)return;let o=i[0],a=i[i.length-1];n.shiftKey&&t.activeElement===o?(n.preventDefault(),a.focus()):!n.shiftKey&&t.activeElement===a&&(n.preventDefault(),o.focus())}return t.addEventListener("keydown",r),{detach:()=>t.removeEventListener("keydown",r)}}var Di={skip:"[data-hcms-shell]",templateAttr:"cms-template"};function Ze(e,{ignoreActiveValue:t}={}){let r=q.findRules(e.doc,e.rulesSource||"cms");r&&(e.pageRules=r.rules,e.rulesTagNode=r.tagNode),qe(e.doc),Pe(e.doc,e.pageRules),e.formRules=Ue(e.pageRules,e.doc);let n=K(q.extract(e.pageRoot,e.pageRules,Di),e.pageRules),i=ze({pageRules:e.pageRules,formRules:e.formRules,data:n,doc:e.doc});Ne(e.formRoot,i,{ignoreActiveValue:t}),Rt(e),e.updateFingerprint&&e.updateFingerprint()}function Fr({debounce:e=100,onRefresh:t}){let r=typeof window<"u"&&window.hyperclay&&window.hyperclay.Mutation||null;if(!r||typeof r.onAnyChange!="function")throw new Error("hypercms: window.hyperclay.Mutation is required. Load hyperclayjs (or just the mutation utility) before initializing hypercms.");let n=0,i=r.onAnyChange({debounce:e},()=>{n>0||t()});return{unsubscribe:typeof i=="function"?i:()=>{},pause(){n++},resume(){n=Math.max(0,n-1)}}}var $i="[hypercms]";function Ir(e,t){if(!e||!e.querySelectorAll||!t)return;let r=Bi(t);e.querySelectorAll("template[data-hcms-tpl]").forEach(i=>{let o=i.getAttribute("data-hcms-tpl");o&&(o.startsWith("@")||r.has(o)||console.warn(`${$i} template "${o}" doesn't match any rule path; ignored`))})}function Bi(e){let t=new Set;return r([],e),t;function r(n,i){let o=n.join("."),a=n.map(l=>typeof l=="number"?"*":l).join(".");o&&t.add(o),a&&t.add(a);let s=Z(i);if(s==="object")for(let[l,c]of Object.entries(i))r([...n,l],c);else if(s==="object-array"||s==="scalar-array"){let l=[...n,"*"],c=l.map(d=>typeof d=="number"?"*":d).join(".");if(t.add(c),s==="object-array"){let d=i[1];if(d&&typeof d=="object"&&!Array.isArray(d))for(let[m,h]of Object.entries(d))r([...l,m],h)}}}}function $r(e){Lr(e)}var L={isOpen:!1,ctx:null,shell:null,opts:null};function qr(e,t){if(L.ctx!==e)return;let r=t==="livesync";t==="livesync"&&L.shell?.restoreChrome?.(),Ze(e,{ignoreActiveValue:r})}var Dr=!1;function Pi(){if(Dr)return;let e=typeof window<"u"&&window.hyperclay&&window.hyperclay.onPrepareForSave||null;typeof e=="function"&&(e(t=>{let r=t&&t.querySelector&&t.querySelector("body");r&&r.classList.remove("hcms-open","hcms-overlay","hcms-side-left")}),Dr=!0)}function Br(e={}){if(L.isOpen){console.warn("cms.open() called while already open; ignoring");return}Pi();let t=e.pageRoot||(typeof document<"u"?document.body:null);if(!t)throw new Error("hypercms: no pageRoot available");let r=t.ownerDocument||(typeof document<"u"?document:null);if(!r)throw new Error("hypercms: no document available");let n=e.rules!==void 0?e.rules:"cms",i=q.findRules(r,n);if(!i){let m=typeof n=="string"?`data-rules-name~="${n}"`:"the provided rules object";throw new Error(`hypercms: no rules found for ${m}`)}let o=i.rules,a=i.tagNode;qe(r),Pe(r,o),Ir(r,o);let s=Ue(o,r),l=K(q.extract(t,o,{skip:"[data-hcms-shell]",templateAttr:"cms-template"}),o),c=Je(()=>jr({mountTo:e.mountTo||r.body,side:e.side||"right",overlay:!!e.overlay,showSaveButton:!!e.showSaveButton,title:e.title,eyebrow:e.eyebrow,theme:e.theme,doc:r})),d={doc:r,pageRoot:t,pageRules:o,formRules:s,rulesTagNode:a,rulesSource:n,formRoot:c.formRoot,shellRoot:c.root,errorEl:c.errorEl,lastFingerprint:null,lastData:null,observerHandle:null,undoUnsub:null,livesyncUnsub:null,onChange:e.onChange,onError:e.onError,confirmRemove:e.confirmRemove,previouslyFocused:r.activeElement,dispatch(m,h){let y=r.defaultView&&r.defaultView.CustomEvent||(typeof CustomEvent<"u"?CustomEvent:null);if(!y)return;let x=new y(m,{bubbles:!0,cancelable:m==="hcms:change",detail:h});c.root.dispatchEvent(x)},onCloseRequested(){Pr()}};d.updateFingerprint=()=>{d.lastFingerprint=Ae(D(d))};try{let m=ze({pageRules:o,formRules:s,data:l,doc:r});c.formRoot.appendChild(m),Mr(d),d.updateFingerprint(),d.observerHandle=Fr({onRefresh:()=>Ze(d)});let h=typeof window<"u"&&window.hyperclay&&window.hyperclay.undo||null;if(h&&typeof h.on=="function"){let x=()=>{if(L.ctx!==d)return;qr(d,"undo");let T=K(q.extract(d.pageRoot,d.pageRules,{skip:"[data-hcms-shell]",templateAttr:"cms-template"}),d.pageRules);Ae(T)!==Ae(d.lastData)&&(d.lastData=T,d.onChange?.(T,{path:"",structural:!1}))};h.on("undo",x),h.on("redo",x),d.undoUnsub=()=>{h.off("undo",x),h.off("redo",x)}}let y=()=>qr(d,"livesync");r.addEventListener("hyperclay:livesync-applied",y),d.livesyncUnsub=()=>r.removeEventListener("hyperclay:livesync-applied",y),Se.ctx=d,Ui(r),Hi(c.root),L.isOpen=!0,L.ctx=d,L.shell=c,L.opts=e,d.dispatch("hcms:open",{pageRoot:t})}catch(m){throw d.observerHandle?.unsubscribe?.(),d.undoUnsub?.(),d.livesyncUnsub?.(),d.detachEvents?.(),Se.ctx===d&&(Se.ctx=null),Je(()=>c.destroy()),L.isOpen=!1,L.ctx=null,L.shell=null,L.opts=null,m}}function Hi(e){let r=e.querySelector('input:not([disabled]):not([type="hidden"]), textarea:not([disabled]), select:not([disabled]), button:not([disabled]), [tabindex]:not([tabindex="-1"])');r&&typeof r.focus=="function"&&r.focus()}var Se={ctx:null};function Ui(e){let t=e.defaultView||(typeof globalThis<"u"?globalThis:null);if(!t)return;let r=function(){let i=Se.ctx;if(i)return Tt(i.formRoot),ce("Reorder",()=>U(D(i),{path:"",structural:!0},i))};typeof t.hypercmsCommit!="function"&&(t.hypercmsCommit=r),typeof globalThis<"u"&&typeof globalThis.hypercmsCommit!="function"&&(globalThis.hypercmsCommit=r)}var Nt="cms";function zi(e){let t=typeof e=="string"?e:"",r=t.indexOf("?"),n=r===-1?t:t.slice(r+1);if(!n)return t;let i=new URLSearchParams(n);return i.get(Nt)!=="true"?t:(i.set(Nt,"false"),"?"+i.toString())}function Wi(e){let t=typeof e=="string"?e:"",r=t.indexOf("?"),n=r===-1?t:t.slice(r+1);return n?new URLSearchParams(n).get(Nt)==="true":!1}function Vi(){if(typeof window>"u"||!window.location||!window.history||typeof window.history.replaceState!="function")return;let e=window.location.search,t=zi(e);t!==e&&window.history.replaceState(window.history.state,"",t+window.location.hash)}function Pr(){if(!L.isOpen)return;let{ctx:e,shell:t}=L;e.closed=!0;let r=e.previouslyFocused;if(e.dispatch("hcms:close",null),Vi(),e.observerHandle?.unsubscribe?.(),e.undoUnsub?.(),e.livesyncUnsub?.(),e.detachEvents?.(),Je(()=>t.destroy()),L.isOpen=!1,L.ctx=null,L.shell=null,L.opts=null,Se.ctx=null,r&&typeof r.focus=="function")try{r.focus()}catch{}}function Hr(){L.isOpen&&Ze(L.ctx)}var Ki={getData(){return L.isOpen?D(L.ctx):null},setValue(e,t){if(!L.isOpen)throw new Error("hypercms: cms is not open");let r=L.ctx,n=W(e),i=X(r.pageRules,n);if(i===void 0)throw new Error(`hypercms: no rule at path "${e}"`);if(typeof i!="string"||i.endsWith("[]"))throw new Error(`hypercms: setValue requires a leaf scalar path; "${e}" is not a leaf`);let o=Gi(r.formRoot,e);if(!o)throw new Error(`hypercms: no field element at path "${e}"`);Yi(o,t,r.formRoot,e),U(D(r),{path:e,structural:!1},r)},addItem(e){if(!L.isOpen)throw new Error("hypercms: cms is not open");Ct(e,L.ctx)},removeItem(e){if(!L.isOpen)throw new Error("hypercms: cms is not open");let t=L.ctx,r=W(e);if(typeof r[r.length-1]!="number")throw new Error(`hypercms: removeItem requires an item path; "${e}" is not an array index`);let i=X(t.pageRules,r.slice(0,-1));if(!(Array.isArray(i)||typeof i=="string"&&i.endsWith("[]")))throw new Error(`hypercms: removeItem requires an item path; parent of "${e}" is not an array`);let a=t.formRoot.querySelector(`[data-hcms-path="${It(e)}"]`);if(!a)throw new Error(`hypercms: no element at path "${e}"`);le(a,t)},refresh:Hr,_commit(){if(!L.isOpen)return;let e=L.ctx;return Tt(e.formRoot),ce("Update",()=>U(D(e),{path:"",structural:!0},e))}};function Gi(e,t){let r=It(t),n=`[data-hcms-path="${r}"] input[data-hcms-field], [data-hcms-path="${r}"] textarea[data-hcms-field], [data-hcms-path="${r}"] select[data-hcms-field], [data-hcms-path="${r}"] img[data-hcms-field], [data-hcms-path="${r}"] a[data-hcms-field], [data-hcms-path="${r}"] [contenteditable][data-hcms-field], input[data-hcms-path="${r}"][data-hcms-field], textarea[data-hcms-path="${r}"][data-hcms-field], select[data-hcms-path="${r}"][data-hcms-field], img[data-hcms-path="${r}"][data-hcms-field], a[data-hcms-path="${r}"][data-hcms-field], [contenteditable][data-hcms-path="${r}"][data-hcms-field]`;return e.querySelector(n)}function Yi(e,t,r,n){let i=(e.tagName||"").toUpperCase(),o=(e.getAttribute("type")||"").toLowerCase();if(i==="INPUT"&&o==="checkbox"){e.checked=t===!0||t==="true";return}if(i==="INPUT"&&o==="radio"){let a=It(n),s=r.querySelectorAll(`[data-hcms-path="${a}"][data-hcms-field][type="radio"], [data-hcms-path="${a}"] [data-hcms-field][type="radio"]`);s.length?s.forEach(l=>{l.checked=String(l.value)===String(t??"")}):e.checked=String(e.value)===String(t??"");return}if(i==="IMG"){e.src=t==null?"":String(t);return}if(i==="A"){e.href=t==null?"":String(t);return}if("value"in e){e.value=t==null?"":String(t);return}e.textContent=t==null?"":String(t)}var Ji=250,Xi=1e4;function Zi(){typeof window>"u"||typeof document>"u"||Wi(window.location?window.location.search:"")&&(L.isOpen||Qi(()=>{if(!L.isOpen)try{Br()}catch(e){console.warn("hypercms: auto-open failed",e)}}))}function jt(){return!!document.body&&!!(window.hyperclay&&window.hyperclay.Mutation)}function Qi(e){if(jt()){queueMicrotask(e);return}let t=Date.now()+Xi,r=!1,n=null,i=()=>{r||(r=!0,n!==null&&clearInterval(n),document.removeEventListener("hyperclay:mutation-ready",o))};function o(){if(L.isOpen){i();return}jt()&&(i(),e())}document.addEventListener("hyperclay:mutation-ready",o,{once:!0}),n=setInterval(()=>{if(L.isOpen){i();return}if(jt()){i(),e();return}Date.now()>=t&&(i(),console.warn("hypercms: ?cms=true auto-open gave up \u2014 window.hyperclay.Mutation never appeared. Load hyperclayjs (or the mutation utility) so the CMS can initialize."))},Ji)}Zi();var Ft={open:Br,close:Pr,refresh:Hr,api:Ki,get isOpen(){return L.isOpen},path:vt,scaffold:ye,morphForm:Ne};function It(e){return typeof CSS<"u"&&CSS.escape?CSS.escape(e):String(e).replace(/[^a-zA-Z0-9_\-.*]/g,t=>"\\"+t)}var Ur=`/* GENERATED by scripts/build-theme.js from mirk-interface/mirk.css \u2014 DO NOT EDIT.
177
+ `,(e||s.body).appendChild(c);let k=s.body;k.classList.add("hcms-open"),r&&k.classList.add("hcms-overlay"),t==="left"&&k.classList.add("hcms-side-left");let C=xo(c,s),N=vo(c);return{root:c,formRoot:c.querySelector("[data-hcms-form-root]"),errorEl:c.querySelector(".hcms-shell-error"),saveButton:c.querySelector(".hcms-shell-save"),destroy(){C.detach(),N.detach(),c.remove(),k.classList.remove("hcms-open","hcms-overlay","hcms-side-left")},restoreChrome(){yo(s),k.classList.add("hcms-open"),r&&k.classList.add("hcms-overlay"),t==="left"&&k.classList.add("hcms-side-left")}}}function yo(e){e&&(e.getElementById(ht)||e.querySelector("style[data-hcms-bundled-styles]")||(Te.delete(e),sn(e)))}function sn(e){if(e&&!Te.has(e)){if(e[go]){Te.add(e);return}if(e.getElementById(ht)||e.querySelector("style[data-hcms-bundled-styles]")){Te.add(e);return}if(Vt){let t=e.createElement("style");t.id=ht,t.setAttribute("save-remove",""),t.setAttribute("save-ignore",""),t.textContent=Vt,(e.head||e.documentElement).appendChild(t),Te.add(e);return}try{let t=new URL("./theme.generated.css",wo.url).href,r=e.createElement("link");r.rel="stylesheet",r.id=ht,r.setAttribute("save-remove",""),r.setAttribute("save-ignore",""),r.href=t,(e.head||e.documentElement).appendChild(r),Te.add(e)}catch{console.warn("hypercms: shell stylesheet not applied \u2014 cssText is empty and the co-located theme fallback is unavailable. Call installStyles(themeText) before opening the CMS.")}}}function vo(e){let t=e.querySelector(".hcms-shell-body"),r=e.querySelector(".hcms-shell-header");if(!t||!r||typeof t.addEventListener!="function")return{detach(){}};let n=()=>{let i=(r.offsetHeight||0)-12;e.classList.toggle("is-condensed",t.scrollTop>i)};return t.addEventListener("scroll",n,{passive:!0}),n(),{detach(){t.removeEventListener("scroll",n)}}}function xo(e,t){function r(n){if(n.key!=="Tab"||!e.contains(t.activeElement))return;let i=Array.from(e.querySelectorAll(bo));if(i.length===0)return;let o=i[0],a=i[i.length-1];n.shiftKey&&t.activeElement===o?(n.preventDefault(),a.focus()):!n.shiftKey&&t.activeElement===a&&(n.preventDefault(),o.focus())}return t.addEventListener("keydown",r),{detach:()=>t.removeEventListener("keydown",r)}}var _o={skip:"[data-hcms-shell]",templateAttr:"cms-template"};function pt(e,{ignoreActiveValue:t}={}){let r=W.findRules(e.doc,e.rulesSource||"cms");r&&(e.pageRules=e.richText?ct(r.rules,e.pageRoot):r.rules,e.rulesTagNode=r.tagNode),Xe(e.doc),rt(e.doc,e.pageRules),e.formRules=it(e.pageRules,e.doc);let n=ae(W.extract(e.pageRoot,e.pageRules,_o),e.pageRules),i=ot({pageRules:e.pageRules,formRules:e.formRules,data:n,doc:e.doc});Je(e.formRoot,i,{ignoreActiveValue:t}),Ee(e.formRoot,e.doc),zt(e),e.updateFingerprint&&e.updateFingerprint()}function an({debounce:e=100,onRefresh:t}){let r=typeof window<"u"&&window.hyperclay&&window.hyperclay.Mutation||null;if(!r||typeof r.onAnyChange!="function")throw new Error("hypercms: window.hyperclay.Mutation is required. Load hyperclayjs (or just the mutation utility) before initializing hypercms.");let n=0,i=r.onAnyChange({debounce:e},()=>{n>0||t()});return{unsubscribe:typeof i=="function"?i:()=>{},pause(){n++},resume(){n=Math.max(0,n-1)}}}var Ao="[hypercms]";function ln(e,t){if(!e||!e.querySelectorAll||!t)return;let r=So(t);e.querySelectorAll("template[data-hcms-tpl]").forEach(i=>{let o=i.getAttribute("data-hcms-tpl");o&&(o.startsWith("@")||r.has(o)||console.warn(`${Ao} template "${o}" doesn't match any rule path; ignored`))})}function So(e){let t=new Set;return r([],e),t;function r(n,i){let o=n.join("."),a=n.map(l=>typeof l=="number"?"*":l).join(".");o&&t.add(o),a&&t.add(a);let s=ue(i);if(s==="object")for(let[l,c]of Object.entries(i))r([...n,l],c);else if(s==="object-array"||s==="scalar-array"){let l=[...n,"*"],c=l.map(m=>typeof m=="number"?"*":m).join(".");if(t.add(c),s==="object-array"){let m=i[1];if(m&&typeof m=="object"&&!Array.isArray(m))for(let[d,h]of Object.entries(m))r([...l,d],h)}}}}var cn="hcms-toggle",dn="hcms-toggle-style",Eo=`
178
+ #hcms-toggle {
179
+ position: fixed; right: 16px; bottom: 16px; z-index: 2147482900;
180
+ display: inline-flex; align-items: center; gap: 7px; padding: 9px 14px;
181
+ border: 1px solid #3a3f58; background: #14161f; color: #f2f3f7;
182
+ font: 500 13px/1 system-ui, sans-serif; border-radius: 999px; cursor: pointer;
183
+ box-shadow: 0 10px 28px -12px rgba(0, 0, 0, .55);
184
+ }
185
+ #hcms-toggle:hover { background: #1d2030; }
186
+ #hcms-toggle .hcms-toggle__close { display: none; }
187
+ body.hcms-open #hcms-toggle .hcms-toggle__open { display: none; }
188
+ body.hcms-open #hcms-toggle .hcms-toggle__close { display: inline; }
189
+ body.hcms-open:not(.hcms-overlay):not(.hcms-side-left) #hcms-toggle { right: calc(380px + 16px); }
190
+ body.hcms-open.hcms-overlay #hcms-toggle { display: none; }
191
+ `;function Co({search:e="",cookie:t="",forced:r=null}={}){let n=typeof e=="string"?e:"",i=n.indexOf("?"),o=i===-1?n:n.slice(i+1),a=new URLSearchParams(o).get("editmode");return a?a==="true":r!=null?!!r:/(?:^|;\s*)isAdminOfCurrentResource=[^;]/.test(t)}function Ro({open:e,close:t,isOpen:r},n=document){let i=n.getElementById(cn);if(i)return i;if(!n.getElementById(dn)){let a=n.createElement("style");a.id=dn,a.setAttribute("snapshot-remove",""),a.textContent=Eo,n.head.appendChild(a)}let o=n.createElement("button");return o.type="button",o.id=cn,o.setAttribute("no-save",""),o.setAttribute("snapshot-remove",""),o.setAttribute("save-ignore",""),o.setAttribute("aria-label","Toggle content editor"),o.innerHTML='<span class="hcms-toggle__open">Edit content</span><span class="hcms-toggle__close">Close editor</span>',o.addEventListener("click",async()=>{try{r()?t():await e()}catch(a){console.warn("hypercms: toggle failed to open the CMS",a)}}),n.body.appendChild(o),o}function mn(e){if(typeof window>"u"||typeof document>"u")return;let t=window.__hyperclayEditMode!=null?window.__hyperclayEditMode:null;if(!Co({search:window.location.search,cookie:document.cookie,forced:t}))return;let r=()=>{document.body&&e.hasRules(document)&&Ro(e)};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",r,{once:!0}):r()}function pn(e){nn(e)}var I={isOpen:!1,ctx:null,shell:null,opts:null};function un(e,t){if(I.ctx!==e)return;let r=t==="livesync";t==="livesync"&&I.shell?.restoreChrome?.(),pt(e,{ignoreActiveValue:r})}var hn=!1;function To(){if(hn)return;let e=typeof window<"u"&&window.hyperclay&&window.hyperclay.onPrepareForSave||null;typeof e=="function"&&(e(t=>{let r=t&&t.querySelector&&t.querySelector("body");r&&r.classList.remove("hcms-open","hcms-overlay","hcms-side-left")}),hn=!0)}function Gt(e={}){if(I.isOpen){console.warn("cms.open() called while already open; ignoring");return}To();let t=e.pageRoot||(typeof document<"u"?document.body:null);if(!t)throw new Error("hypercms: no pageRoot available");let r=t.ownerDocument||(typeof document<"u"?document:null);if(!r)throw new Error("hypercms: no document available");let n=e.rules!==void 0?e.rules:"cms",i=W.findRules(r,n);if(!i){let h=typeof n=="string"?`data-rules-name~="${n}"`:"the provided rules object";throw new Error(`hypercms: no rules found for ${h}`)}let o=e.richText!==!1,a=o?ct(i.rules,t):i.rules,s=i.tagNode;Xe(r),rt(r,a),ln(r,a);let l=it(a,r),c=ae(W.extract(t,a,{skip:"[data-hcms-shell]",templateAttr:"cms-template"}),a),m=ut(()=>on({mountTo:e.mountTo||r.body,side:e.side||"right",overlay:!!e.overlay,showSaveButton:!!e.showSaveButton,title:e.title,eyebrow:e.eyebrow,theme:e.theme,doc:r})),d={doc:r,pageRoot:t,pageRules:a,formRules:l,rulesTagNode:s,rulesSource:n,richText:o,formRoot:m.formRoot,shellRoot:m.root,errorEl:m.errorEl,lastFingerprint:null,lastData:null,observerHandle:null,undoUnsub:null,livesyncUnsub:null,onChange:e.onChange,onError:e.onError,confirmRemove:e.confirmRemove,previouslyFocused:r.activeElement,dispatch(h,f){let k=r.defaultView&&r.defaultView.CustomEvent||(typeof CustomEvent<"u"?CustomEvent:null);if(!k)return;let C=new k(h,{bubbles:!0,cancelable:h==="hcms:change",detail:f});m.root.dispatchEvent(C)},onCloseRequested(){Jt()}};d.updateFingerprint=()=>{d.lastFingerprint=Pe(Y(d))};try{let h=ot({pageRules:a,formRules:l,data:c,doc:r});m.formRoot.appendChild(h),Ee(m.formRoot,r),en(d),d.updateFingerprint(),d.observerHandle=an({onRefresh:()=>pt(d)});let f=typeof window<"u"&&window.hyperclay&&window.hyperclay.undo||null;if(f&&typeof f.on=="function"){let C=()=>{if(I.ctx!==d)return;un(d,"undo");let N=ae(W.extract(d.pageRoot,d.pageRules,{skip:"[data-hcms-shell]",templateAttr:"cms-template"}),d.pageRules);Pe(N)!==Pe(d.lastData)&&(d.lastData=N,d.onChange?.(N,{path:"",structural:!1}))};f.on("undo",C),f.on("redo",C),d.undoUnsub=()=>{f.off("undo",C),f.off("redo",C)}}let k=()=>un(d,"livesync");r.addEventListener("hyperclay:livesync-applied",k),d.livesyncUnsub=()=>r.removeEventListener("hyperclay:livesync-applied",k),Ue.ctx=d,Mo(r),Oo(m.root),I.isOpen=!0,I.ctx=d,I.shell=m,I.opts=e,d.dispatch("hcms:open",{pageRoot:t})}catch(h){throw d.observerHandle?.unsubscribe?.(),d.undoUnsub?.(),d.livesyncUnsub?.(),d.detachEvents?.(),Ue.ctx===d&&(Ue.ctx=null),ut(()=>m.destroy()),I.isOpen=!1,I.ctx=null,I.shell=null,I.opts=null,h}}function Oo(e){let r=e.querySelector('input:not([disabled]):not([type="hidden"]), textarea:not([disabled]), select:not([disabled]), button:not([disabled]), [tabindex]:not([tabindex="-1"])');r&&typeof r.focus=="function"&&r.focus()}var Ue={ctx:null};function Mo(e){let t=e.defaultView||(typeof globalThis<"u"?globalThis:null);if(!t)return;let r=function(){let i=Ue.ctx;if(i)return Ut(i.formRoot),Re("Reorder",()=>ee(Y(i),{path:"",structural:!0},i))};typeof t.hypercmsCommit!="function"&&(t.hypercmsCommit=r),typeof globalThis<"u"&&typeof globalThis.hypercmsCommit!="function"&&(globalThis.hypercmsCommit=r)}var Kt="cms";function No(e){let t=typeof e=="string"?e:"",r=t.indexOf("?"),n=r===-1?t:t.slice(r+1);if(!n)return t;let i=new URLSearchParams(n);return i.get(Kt)!=="true"?t:(i.set(Kt,"false"),"?"+i.toString())}function Io(e){let t=typeof e=="string"?e:"",r=t.indexOf("?"),n=r===-1?t:t.slice(r+1);return n?new URLSearchParams(n).get(Kt)==="true":!1}function Lo(){if(typeof window>"u"||!window.location||!window.history||typeof window.history.replaceState!="function")return;let e=window.location.search,t=No(e);t!==e&&window.history.replaceState(window.history.state,"",t+window.location.hash)}function Jt(){if(!I.isOpen)return;let{ctx:e,shell:t}=I;e.closed=!0;let r=e.previouslyFocused;if(e.dispatch("hcms:close",null),Lo(),e.observerHandle?.unsubscribe?.(),e.undoUnsub?.(),e.livesyncUnsub?.(),e.detachEvents?.(),ut(()=>t.destroy()),I.isOpen=!1,I.ctx=null,I.shell=null,I.opts=null,Ue.ctx=null,r&&typeof r.focus=="function")try{r.focus()}catch{}}function fn(){I.isOpen&&pt(I.ctx)}function jo(){return I.isOpen}var Fo={getData(){return I.isOpen?Y(I.ctx):null},setValue(e,t){if(!I.isOpen)throw new Error("hypercms: cms is not open");let r=I.ctx,n=te(e),i=me(r.pageRules,n);if(i===void 0)throw new Error(`hypercms: no rule at path "${e}"`);if(typeof i!="string"||i.endsWith("[]"))throw new Error(`hypercms: setValue requires a leaf scalar path; "${e}" is not a leaf`);let o=qo(r.formRoot,e);if(!o)throw new Error(`hypercms: no field element at path "${e}"`);Do(o,t,r.formRoot,e),ee(Y(r),{path:e,structural:!1},r)},addItem(e){if(!I.isOpen)throw new Error("hypercms: cms is not open");Bt(e,I.ctx)},removeItem(e){if(!I.isOpen)throw new Error("hypercms: cms is not open");let t=I.ctx,r=te(e);if(typeof r[r.length-1]!="number")throw new Error(`hypercms: removeItem requires an item path; "${e}" is not an array index`);let i=me(t.pageRules,r.slice(0,-1));if(!(Array.isArray(i)||typeof i=="string"&&i.endsWith("[]")))throw new Error(`hypercms: removeItem requires an item path; parent of "${e}" is not an array`);let a=t.formRoot.querySelector(`[data-hcms-path="${Zt(e)}"]`);if(!a)throw new Error(`hypercms: no element at path "${e}"`);Ce(a,t)},refresh:fn,_commit(){if(!I.isOpen)return;let e=I.ctx;return Ut(e.formRoot),Re("Update",()=>ee(Y(e),{path:"",structural:!0},e))}};function qo(e,t){let r=Zt(t),n=`[data-hcms-path="${r}"] input[data-hcms-field], [data-hcms-path="${r}"] textarea[data-hcms-field], [data-hcms-path="${r}"] select[data-hcms-field], [data-hcms-path="${r}"] img[data-hcms-field], [data-hcms-path="${r}"] a[data-hcms-field], [data-hcms-path="${r}"] [contenteditable][data-hcms-field], input[data-hcms-path="${r}"][data-hcms-field], textarea[data-hcms-path="${r}"][data-hcms-field], select[data-hcms-path="${r}"][data-hcms-field], img[data-hcms-path="${r}"][data-hcms-field], a[data-hcms-path="${r}"][data-hcms-field], [contenteditable][data-hcms-path="${r}"][data-hcms-field]`;return e.querySelector(n)}function Do(e,t,r,n){let i=(e.tagName||"").toUpperCase(),o=(e.getAttribute("type")||"").toLowerCase();if(i==="INPUT"&&o==="checkbox"){e.checked=t===!0||t==="true";return}if(i==="INPUT"&&o==="radio"){let a=Zt(n),s=r.querySelectorAll(`[data-hcms-path="${a}"][data-hcms-field][type="radio"], [data-hcms-path="${a}"] [data-hcms-field][type="radio"]`);s.length?s.forEach(l=>{l.checked=String(l.value)===String(t??"")}):e.checked=String(e.value)===String(t??"");return}if(i==="IMG"){e.src=t==null?"":String(t);return}if(i==="A"){e.href=t==null?"":String(t);return}if(e.hasAttribute&&e.hasAttribute("contenteditable")){e.innerHTML=t==null?"":String(t);return}if("value"in e){e.value=t==null?"":String(t);return}e.textContent=t==null?"":String(t)}var $o=250,Bo=1e4;function zo(){typeof window>"u"||typeof document>"u"||Io(window.location?window.location.search:"")&&(I.isOpen||Po(()=>{if(!I.isOpen)try{Gt()}catch(e){console.warn("hypercms: auto-open failed",e)}}))}function Wt(){return!!document.body&&!!(window.hyperclay&&window.hyperclay.Mutation)}function Po(e){if(Wt()){queueMicrotask(e);return}let t=Date.now()+Bo,r=!1,n=null,i=()=>{r||(r=!0,n!==null&&clearInterval(n),document.removeEventListener("hyperclay:mutation-ready",o))};function o(){if(I.isOpen){i();return}Wt()&&(i(),e())}document.addEventListener("hyperclay:mutation-ready",o,{once:!0}),n=setInterval(()=>{if(I.isOpen){i();return}if(Wt()){i(),e();return}Date.now()>=t&&(i(),console.warn("hypercms: ?cms=true auto-open gave up \u2014 window.hyperclay.Mutation never appeared. Load hyperclayjs (or the mutation utility) so the CMS can initialize."))},$o)}zo();mn({open:Gt,close:Jt,isOpen:jo,hasRules:e=>!!W.findRules(e,"cms")});var Yt={open:Gt,close:Jt,refresh:fn,api:Fo,get isOpen(){return I.isOpen},path:Nt,scaffold:qe,morphForm:Je};function Zt(e){return typeof CSS<"u"&&CSS.escape?CSS.escape(e):String(e).replace(/[^a-zA-Z0-9_\-.*]/g,t=>"\\"+t)}var gn=`/* GENERATED by scripts/build-theme.js from mirk-interface/mirk.css \u2014 DO NOT EDIT.
172
192
  Source of truth: mirk-interface/mirk.css + src/theme/pixel-quiet.overrides.css.
173
193
  Regenerate with: npm run build:theme */
174
194
 
@@ -205,10 +225,84 @@ ${r}`:r,i.hidden=!1;continue}}t.push(r)}t.length&&e.errorEl&&(e.errorEl.textCont
205
225
  /* Preflight sets these to ui-monospace; keep them in Departure Mono. */
206
226
  .hcms-shell pre, .hcms-shell code, .hcms-shell kbd, .hcms-shell samp { font-family: inherit; }
207
227
 
208
- /* 28 tokens, one value each. light-dark() picks the side from color-scheme. */
228
+ /* 28 tokens, one value each. light-dark() picks the side from color-scheme.
229
+ :root paints the DEFAULT theme \u2014 "Pixel Quiet" (see 0030): mirk's warm soul
230
+ with the volume down. The louder original palette is the opt-in
231
+ [data-theme="full-volume"] block below. */
209
232
  .hcms-shell {
210
233
  color-scheme: light dark; /* default: follow the OS */
211
234
 
235
+ --mirk-canvas: light-dark(#FDF8F0, #0B0C13);
236
+ --mirk-bg: light-dark(#FDF8F0, #11131E);
237
+ --mirk-fg: light-dark(#2B241B, #ECEAF2);
238
+ --mirk-accent: light-dark(#efefe5, #1D1F2F);
239
+ --mirk-destructive: light-dark(#C24A3A, #ff5566);
240
+ --mirk-focus-color: light-dark(#C7AE93, #4A506B);
241
+ --mirk-bevel-bg: light-dark(#FCF8F1, #1A1D2C);
242
+ --mirk-bevel-fg: light-dark(#2B241B, #ECEAF2);
243
+ --mirk-bevel-tl: light-dark(#F0E7D8, #2A2E42);
244
+ --mirk-bevel-br: light-dark(#E2D4BF, #14182A);
245
+ --mirk-bevel-hover-bg: light-dark(#F4ECDF, #202436);
246
+ --mirk-pill-inner-top: light-dark(#FBF6EE, #202436);
247
+ --mirk-input-border: light-dark(#D8C8AF, #353B52);
248
+ --mirk-placeholder-color: light-dark(#A8987F, #6A7090);
249
+ --mirk-ctrl-bg: light-dark(#8C7660, #5F6582);
250
+ --mirk-toggle-bg: light-dark(#EFDBBD, #3E4660);
251
+ --mirk-toggle-hi: light-dark(#F4EADA, #4E567A);
252
+ --mirk-toggle-lo: light-dark(#C2A87E, #262B42);
253
+ --mirk-mark-fg: light-dark(#6B5942, #C9CDE0);
254
+ --mirk-sortable-dot: light-dark(#DDCBB0, #353B52);
255
+ --mirk-sortable-shadow: light-dark(#C9B493, #0E1120);
256
+ --mirk-sortable-label: light-dark(#8C7B62, #8A90AB);
257
+ --mirk-sortable-placeholder: light-dark(#A8987F, #6A7090);
258
+ --mirk-slider-fill: light-dark(#F2E0BD, #2A2E42);
259
+ --mirk-slider-nub-bg: light-dark(#EFDBBD, #3E4660);
260
+ --mirk-slider-nub-hi: light-dark(#F4EADA, #4E567A);
261
+ --mirk-slider-nub-lo: light-dark(#C2A87E, #262B42);
262
+
263
+ /* Chip \u2014 the recovery/notification component reads from the kit's own tokens
264
+ via 5 slim hooks, so it matches the kit by default and reskins by overriding
265
+ a hook (not a rule). Each follows the theme (incl. the Full Volume variant)
266
+ and OS light/dark with no per-theme repaint; the one exception is the primary
267
+ fill, which the default (Pixel Quiet) leaves as the theme's fg ink while the
268
+ Full Volume variant tints it a warm brown in light (see below). */
269
+ --mirk-chip-surface: var(--mirk-bg); /* raised panel face */
270
+ --mirk-chip-edge: var(--mirk-input-border); /* panel + recess outline */
271
+ --mirk-chip-primary-bg: var(--mirk-fg); /* primary action fill \u2014 the theme's fg ink (Full Volume tints it warm brown in light) */
272
+ --mirk-chip-primary-fg: var(--mirk-bg);
273
+ --mirk-chip-alert: var(--mirk-destructive); /* icon + struck "now" value */
274
+
275
+ --mirk-radius: 5px; /* the "rounded" corner */
276
+ --mirk-focus-offset: 2px; /* non-color \u2192 can't ride light-dark() */
277
+
278
+ background: var(--mirk-canvas);
279
+ color: var(--mirk-fg);
280
+ }
281
+
282
+ /* The one non-color token with a real light/dark split (was 2px / 3px). */
283
+ @media (prefers-color-scheme: dark) { .hcms-shell { --mirk-focus-offset: 3px; } }
284
+
285
+ /* Force a mode on any subtree with one attribute (class aliases for hosts that
286
+ prefer class-based theming and Tailwind's dark-variant convention). Each also
287
+ paints its own canvas so a wrapper visibly flips. */
288
+ .hcms-shell[data-theme="light"], .hcms-shell.light {
289
+ color-scheme: light; --mirk-focus-offset: 2px;
290
+ background: var(--mirk-canvas); color: var(--mirk-fg);
291
+ }
292
+ .hcms-shell[data-theme="dark"], .hcms-shell.dark {
293
+ color-scheme: dark; --mirk-focus-offset: 3px;
294
+ background: var(--mirk-canvas); color: var(--mirk-fg);
295
+ }
296
+
297
+ /* Built-in brand variant \u2014 "Full Volume": mirk's original full-strength palette,
298
+ the loud pole of the volume axis (Pixel Quiet, now the default, is the quiet
299
+ end). Full-contrast bevel, warm cream / deep navy, crimson destructive.
300
+ Authored with light-dark() like :root, so it follows the OS and still flips
301
+ with .dark / .light. Opt in: data-theme="full-volume". Sits after :root
302
+ (equal specificity, source order wins). --mirk-radius / --mirk-focus-offset /
303
+ --mirk-ctrl-bg and the four shared --mirk-chip-* hooks inherit from :root
304
+ unchanged; only the tokens that differ from the default are re-declared here. */
305
+ .hcms-shell[data-theme="full-volume"] {
212
306
  --mirk-canvas: light-dark(#F7F2EA, #0B0C13);
213
307
  --mirk-bg: light-dark(#F7F2EA, #1D1F2F);
214
308
  --mirk-fg: light-dark(#15120e, #F6F7F9);
@@ -223,7 +317,6 @@ ${r}`:r,i.hidden=!1;continue}}t.push(r)}t.length&&e.errorEl&&(e.errorEl.textCont
223
317
  --mirk-pill-inner-top: light-dark(#efdac7, #232639);
224
318
  --mirk-input-border: light-dark(#957E65, #6E738E);
225
319
  --mirk-placeholder-color: light-dark(#7F7366, #545973);
226
- --mirk-ctrl-bg: light-dark(#8C7660, #5F6582);
227
320
  --mirk-toggle-bg: light-dark(#DFC9AF, #656D95);
228
321
  --mirk-toggle-hi: light-dark(#E9D6C3, #7F87AD);
229
322
  --mirk-toggle-lo: light-dark(#C7A88A, #505677);
@@ -236,64 +329,9 @@ ${r}`:r,i.hidden=!1;continue}}t.push(r)}t.length&&e.errorEl&&(e.errorEl.textCont
236
329
  --mirk-slider-nub-bg: light-dark(#DFC9AF, #656D95);
237
330
  --mirk-slider-nub-hi: light-dark(#E9D6C3, #7F87AD);
238
331
  --mirk-slider-nub-lo: light-dark(#C7A88A, #505677);
239
-
240
- --mirk-radius: 5px; /* the "rounded" corner */
241
- --mirk-focus-offset: 2px; /* non-color \u2192 can't ride light-dark() */
242
-
243
- background: var(--mirk-canvas);
244
- color: var(--mirk-fg);
245
- }
246
-
247
- /* The one non-color token with a real light/dark split (was 2px / 3px). */
248
- @media (prefers-color-scheme: dark) { .hcms-shell { --mirk-focus-offset: 3px; } }
249
-
250
- /* Force a mode on any subtree with one attribute (class aliases for hosts that
251
- prefer class-based theming and Tailwind's dark-variant convention). Each also
252
- paints its own canvas so a wrapper visibly flips. */
253
- .hcms-shell[data-theme="light"], .hcms-shell.light {
254
- color-scheme: light; --mirk-focus-offset: 2px;
255
- background: var(--mirk-canvas); color: var(--mirk-fg);
256
- }
257
- .hcms-shell[data-theme="dark"], .hcms-shell.dark {
258
- color-scheme: dark; --mirk-focus-offset: 3px;
259
- background: var(--mirk-canvas); color: var(--mirk-fg);
260
- }
261
-
262
- /* Built-in brand variant \u2014 "Pixel Quiet": mirk's warm soul with the volume
263
- down. A softened, near-equal bevel, warmer ink, terracotta destructive, a
264
- deeper navy-black dark. Authored with light-dark() like :root, so it follows
265
- the OS and still flips with .dark / .light. Opt in: data-theme="pixel-quiet".
266
- Sits after :root (equal specificity, source order wins). --mirk-radius /
267
- --mirk-focus-offset are inherited unchanged; --mirk-ctrl-bg is unused. */
268
- .hcms-shell[data-theme="pixel-quiet"] {
269
- --mirk-fg: light-dark(#2B241B, #ECEAF2);
270
- --mirk-bg: light-dark(#F7F2EA, #11131E);
271
- --mirk-canvas: light-dark(#F7F2EA, #0B0C13);
272
- --mirk-accent: light-dark(#efefe5, #1D1F2F);
273
- --mirk-destructive: light-dark(#C24A3A, #ff5566);
274
- --mirk-focus-color: light-dark(#C7AE93, #4A506B);
275
- --mirk-bevel-bg: light-dark(#FCF8F1, #1A1D2C);
276
- --mirk-bevel-fg: light-dark(#2B241B, #ECEAF2);
277
- --mirk-bevel-tl: light-dark(#F0E7D8, #2A2E42);
278
- --mirk-bevel-br: light-dark(#E2D4BF, #14182A);
279
- --mirk-bevel-hover-bg: light-dark(#F4ECDF, #202436);
280
- --mirk-pill-inner-top: light-dark(#FBF6EE, #202436);
281
- --mirk-input-border: light-dark(#D8C8AF, #353B52);
282
- --mirk-placeholder-color: light-dark(#A8987F, #6A7090);
283
- --mirk-mark-fg: light-dark(#6B5942, #C9CDE0);
284
- --mirk-toggle-bg: light-dark(#EFDBBD, #3E4660);
285
- --mirk-toggle-hi: light-dark(#F4EADA, #4E567A);
286
- --mirk-toggle-lo: light-dark(#C2A87E, #262B42);
287
- --mirk-sortable-dot: light-dark(#DDCBB0, #353B52);
288
- --mirk-sortable-shadow: light-dark(#C9B493, #0E1120);
289
- --mirk-sortable-label: light-dark(#8C7B62, #8A90AB);
290
- --mirk-sortable-placeholder: light-dark(#A8987F, #6A7090);
291
- /* slider nub reuses the toggle family (identical pairing in :root); the fill
292
- is the one value with no CMS precedent \u2014 a soft warm / muted navy track. */
293
- --mirk-slider-fill: light-dark(#F2E0BD, #2A2E42);
294
- --mirk-slider-nub-bg: light-dark(#EFDBBD, #3E4660);
295
- --mirk-slider-nub-hi: light-dark(#F4EADA, #4E567A);
296
- --mirk-slider-nub-lo: light-dark(#C2A87E, #262B42);
332
+ /* :root (Pixel Quiet) leaves the chip primary as its own fg ink; the original
333
+ default tinted it a warm brown in light \u2014 restore that here. */
334
+ --mirk-chip-primary-bg: light-dark(#1C170E, var(--mirk-fg));
297
335
  }
298
336
 
299
337
  /* Roll your own the same way \u2014 an explicit [data-theme] block is the escape hatch:
@@ -364,6 +402,15 @@ ${r}`:r,i.hidden=!1;continue}}t.push(r)}t.length&&e.errorEl&&(e.errorEl.textCont
364
402
  .hcms-shell .mirk-button--round.mirk-button--large { border-radius: 16px; }
365
403
  .hcms-shell .mirk-button--round.mirk-button--large .mirk-button__label { padding: 7px 24px 9px; border-radius: 14px; }
366
404
 
405
+ /* Quiet: a borderless text button (transparent border keeps the hit area + the
406
+ baseline aligned with neighbouring bevel buttons). For tertiary actions. */
407
+ .hcms-shell .mirk-button--quiet {
408
+ background: none; background-image: none;
409
+ border-color: transparent; color: var(--mirk-placeholder-color);
410
+ }
411
+ .hcms-shell .mirk-button--quiet:hover { background: none; color: var(--mirk-fg); }
412
+ .hcms-shell .mirk-button--quiet:active { border-color: transparent; }
413
+
367
414
  /* ============================ TEXT INPUT ============================ */
368
415
  .hcms-shell .mirk-input {
369
416
  width: 100%;
@@ -541,6 +588,7 @@ ${r}`:r,i.hidden=!1;continue}}t.push(r)}t.length&&e.errorEl&&(e.errorEl.textCont
541
588
  .hcms-shell .mirk-toggle { display: inline-flex; align-items: center; gap: 0.75rem; cursor: pointer; width: fit-content; }
542
589
  .hcms-shell .mirk-toggle__track {
543
590
  position: relative; flex-shrink: 0; width: 49px; height: 27px; border-radius: 0;
591
+ background: var(--mirk-canvas); /* own recessed channel, like the slider track \u2014 never the host page (0033) */
544
592
  border: 1px solid var(--mirk-input-border);
545
593
  }
546
594
  .hcms-shell .mirk-toggle__thumb {
@@ -819,6 +867,326 @@ ${r}`:r,i.hidden=!1;continue}}t.push(r)}t.length&&e.errorEl&&(e.errorEl.textCont
819
867
  .hcms-shell .mirk-sortable--small .mirk-sortable__row { padding: 5px 13px 6px; }
820
868
  .hcms-shell .mirk-sortable--small .mirk-sortable__label { font-size: 10px; margin-bottom: 1px; }
821
869
  .hcms-shell .mirk-sortable--small .mirk-sortable__field { font-size: 14px; }
870
+
871
+ /* ============================ CHIP ============================ */
872
+ /* A collapsible recovery/notification: a round pill that expands into a RAISED
873
+ panel \u2014 the kit's one elevated surface (a distinct --mirk-bg face, a hairline
874
+ outline, and a soft drop shadow, the only shadow in the kit, reserved for this
875
+ raised tier). State lives in classes (--open, is-changes) so it round-trips via
876
+ outerHTML; mirk.js only flips them on click. Color reads from generic kit
877
+ tokens through 5 slim --mirk-chip-* hooks, so it matches the kit and reskins by
878
+ overriding a hook, not a rule. In a Hyperclay app, add \`save-remove\` to the
879
+ block so a transient prompt never persists into the saved file. */
880
+ .hcms-shell .mirk-chip { display: inline-flex; flex-direction: column; align-items: flex-start; }
881
+ .hcms-shell .mirk-chip__panel { display: none; }
882
+ .hcms-shell .mirk-chip--open .mirk-chip__trigger { display: none; }
883
+ .hcms-shell .mirk-chip--open .mirk-chip__panel { display: flex; }
884
+
885
+ /* Collapsed chip \u2014 a round mirk-button pill (mirk-button--round in the markup),
886
+ the alert glyph seated in the label, so it reads as a distinct affordance, not
887
+ a flat button. A soft, tight lift sets it above the page; deeper on a dark
888
+ canvas (same media + forced-mode pattern as the panel shadow below). */
889
+ .hcms-shell .mirk-chip__trigger .mirk-button__label { display: inline-flex; align-items: center; gap: 6px; font-size: 14px; }
890
+ .hcms-shell .mirk-chip__trigger { box-shadow: 0 6px 14px -8px rgba(43, 36, 27, 0.5), 0 2px 5px -3px rgba(43, 36, 27, 0.32); }
891
+ @media (prefers-color-scheme: dark) { .hcms-shell .mirk-chip__trigger { box-shadow: 0 6px 14px -8px rgba(0, 0, 0, 0.6), 0 2px 6px -3px rgba(0, 0, 0, 0.5); } }
892
+ .hcms-shell.light .mirk-chip__trigger, .hcms-shell[data-theme="light"] .mirk-chip__trigger { box-shadow: 0 6px 14px -8px rgba(43, 36, 27, 0.5), 0 2px 5px -3px rgba(43, 36, 27, 0.32); }
893
+ .hcms-shell.dark .mirk-chip__trigger, .hcms-shell[data-theme="dark"] .mirk-chip__trigger { box-shadow: 0 6px 14px -8px rgba(0, 0, 0, 0.6), 0 2px 6px -3px rgba(0, 0, 0, 0.5); }
894
+ /* Drive the warning fill from CSS, not an SVG fill="var(...)" presentation
895
+ attribute (var() is not reliably honored there). */
896
+ .hcms-shell .mirk-chip__warn { fill: var(--mirk-chip-alert); }
897
+ .hcms-shell .mirk-chip__trigger .mirk-chip__warn { vertical-align: -2px; }
898
+
899
+ /* The panel \u2014 the raised surface: a --mirk-bg face over the page, a hairline
900
+ outline, a soft drop shadow. */
901
+ .hcms-shell .mirk-chip__panel {
902
+ width: 300px; max-width: calc(100vw - 44px);
903
+ background: var(--mirk-chip-surface); color: var(--mirk-fg);
904
+ border: 1px solid var(--mirk-chip-edge); border-radius: var(--mirk-radius);
905
+ box-shadow: 0 20px 50px -30px rgba(43, 36, 27, 0.6);
906
+ padding: 14px 15px 13px; flex-direction: column; gap: 12px;
907
+ }
908
+ /* The panel's larger drop (the collapsed pill above carries a tighter one); deepen
909
+ both on a dark canvas. Mirrors the --focus-offset pattern: a media default for
910
+ the OS, plus explicit forced-mode overrides. */
911
+ @media (prefers-color-scheme: dark) { .hcms-shell .mirk-chip__panel { box-shadow: 0 20px 52px -26px rgba(0, 0, 0, 0.78); } }
912
+ .hcms-shell.light .mirk-chip__panel, .hcms-shell[data-theme="light"] .mirk-chip__panel { box-shadow: 0 20px 50px -30px rgba(43, 36, 27, 0.6); }
913
+ .hcms-shell.dark .mirk-chip__panel, .hcms-shell[data-theme="dark"] .mirk-chip__panel { box-shadow: 0 20px 52px -26px rgba(0, 0, 0, 0.78); }
914
+
915
+ /* Head \u2014 icon, text, collapse glyph. */
916
+ .hcms-shell .mirk-chip__head { display: flex; gap: 10px; align-items: flex-start; }
917
+ .hcms-shell .mirk-chip__icon { flex-shrink: 0; line-height: 0; margin-top: 1px; }
918
+ .hcms-shell .mirk-chip__headtext { min-width: 0; }
919
+ .hcms-shell .mirk-chip__eyebrow {
920
+ font-size: 9.5px; text-transform: uppercase; letter-spacing: 0.2em;
921
+ color: var(--mirk-placeholder-color); margin-bottom: 3px;
922
+ }
923
+ .hcms-shell .mirk-chip__title { margin: 0; font-size: 13px; font-weight: 400; line-height: 1.3; color: var(--mirk-fg); }
924
+ .hcms-shell .mirk-chip__collapse {
925
+ margin-left: auto; flex-shrink: 0; width: 24px; height: 24px;
926
+ display: inline-flex; align-items: center; justify-content: center;
927
+ background: none; border: 0; cursor: pointer; padding: 0;
928
+ color: var(--mirk-placeholder-color);
929
+ }
930
+ .hcms-shell .mirk-chip__collapse:hover { color: var(--mirk-fg); }
931
+ .hcms-shell .mirk-chip__collapse svg { display: block; }
932
+
933
+ /* Meta line. */
934
+ .hcms-shell .mirk-chip__meta { font-size: 11px; letter-spacing: 0.04em; color: var(--mirk-placeholder-color); }
935
+ .hcms-shell .mirk-chip__changes-toggle {
936
+ background: none; border: 0; cursor: pointer; font: inherit; font-size: 11px; padding: 0 0 0 4px;
937
+ color: var(--mirk-placeholder-color); text-decoration: underline; text-underline-offset: 2px;
938
+ }
939
+ .hcms-shell .mirk-chip__changes-toggle:hover { color: var(--mirk-fg); }
940
+
941
+ /* Before/after field table \u2014 a recessed stack, revealed by the changes toggle. */
942
+ .hcms-shell .mirk-chip__preview {
943
+ display: none; flex-direction: column; gap: 11px;
944
+ background: var(--mirk-bevel-bg); border: 1px solid var(--mirk-chip-edge);
945
+ padding: 10px 11px;
946
+ }
947
+ .hcms-shell .mirk-chip__panel.is-changes .mirk-chip__preview { display: flex; }
948
+ .hcms-shell .mirk-chip__row { display: flex; flex-direction: column; gap: 2px; }
949
+ .hcms-shell .mirk-chip__key {
950
+ font-size: 9.5px; text-transform: uppercase; letter-spacing: 0.1em;
951
+ color: var(--mirk-placeholder-color);
952
+ }
953
+ .hcms-shell .mirk-chip__old, .hcms-shell .mirk-chip__new { max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
954
+ .hcms-shell .mirk-chip__old { font-size: 11px; color: var(--mirk-chip-alert); text-decoration: line-through; opacity: 0.85; }
955
+ .hcms-shell .mirk-chip__new { font-size: 12px; color: var(--mirk-fg); }
956
+
957
+ /* Action stack \u2014 full-width buttons by weight: an embossed primary, a plain bevel
958
+ revert, a quiet (--quiet) dismiss. */
959
+ .hcms-shell .mirk-chip__actions { display: flex; flex-direction: column; gap: 8px; margin-top: 1px; }
960
+ .hcms-shell .mirk-chip__actions .mirk-button { width: 100%; }
961
+ /* Primary action \u2014 a genuine kit bevel button whose bevel palette is derived from
962
+ the chip's primary fill (lighter top-left, darker bottom-right), so it embosses
963
+ on any color. The base .mirk-button rules then drive its border, hover, and the
964
+ :active flip, identical to the kit's other buttons. */
965
+ .hcms-shell .mirk-chip__actions .mirk-chip__action--primary {
966
+ --mirk-bevel-bg: var(--mirk-chip-primary-bg);
967
+ --mirk-bevel-fg: var(--mirk-chip-primary-fg);
968
+ --mirk-bevel-tl: color-mix(in srgb, var(--mirk-chip-primary-bg), white 24%);
969
+ --mirk-bevel-br: color-mix(in srgb, var(--mirk-chip-primary-bg), black 32%);
970
+ --mirk-bevel-hover-bg: color-mix(in srgb, var(--mirk-chip-primary-bg), white 10%);
971
+ }
972
+
973
+ /* ============================ FIELD ============================ */
974
+ /* Label + control + hint as one unit, so a form composes without utilities
975
+ (and without needing the mirk-page rhythm). Any control drops in; the gap
976
+ matches the page scaffold's label/hint hug. Consecutive fields space
977
+ themselves. */
978
+ .hcms-shell .mirk-field { display: flex; flex-direction: column; gap: 6px; }
979
+ .hcms-shell .mirk-field__label { font-size: 16px; line-height: 1.5; }
980
+ .hcms-shell .mirk-field + .mirk-field { margin-block-start: 18px; }
981
+ .hcms-shell .mirk-field--small .mirk-field__label { font-size: 14px; }
982
+
983
+ /* An alert hint inside a field stays hidden until a control in the field
984
+ goes :user-invalid \u2014 a zero-JS native-validation message. Show one
985
+ unconditionally (a server-side error) by placing it outside the field or
986
+ overriding display. */
987
+ .hcms-shell .mirk-field .mirk-hint--alert { display: none; }
988
+ .hcms-shell .mirk-field:has(:user-invalid) .mirk-hint--alert { display: block; }
989
+
990
+ /* ============================ INVALID ============================ */
991
+ /* Native constraint validation, styled. :user-invalid fires only after the
992
+ user interacts (unlike :invalid, which would paint required fields red on
993
+ load). A flat destructive border is the 0012 stateful read; the focus ring
994
+ stays the focus signal. Pair the message with mirk-hint--alert. */
995
+ .hcms-shell .mirk-input:user-invalid, .hcms-shell .mirk-textarea:user-invalid, .hcms-shell .mirk-date__field:user-invalid, .hcms-shell .mirk-select__field:user-invalid, .hcms-shell .mirk-number:has(.mirk-number__input:user-invalid) {
996
+ border-color: var(--mirk-destructive);
997
+ }
998
+ .hcms-shell .mirk-checkbox:has(:user-invalid) .mirk-checkbox__box, .hcms-shell .mirk-toggle:has(:user-invalid) .mirk-toggle__track {
999
+ border-color: var(--mirk-destructive);
1000
+ }
1001
+ /* The unchecked ring is a borderless gradient pill; invalid swaps it for a
1002
+ flat destructive ring (the fill pill still seats inside). */
1003
+ .hcms-shell .mirk-radio:has(:user-invalid) .mirk-radio__ring {
1004
+ background-image: none;
1005
+ border: 2px solid var(--mirk-destructive);
1006
+ }
1007
+
1008
+ /* ============================ PROGRESS ============================ */
1009
+ /* A native <progress> in the slider's clothes: the canvas channel, the
1010
+ slider-fill value bar. --blocks segments the fill into pixel blocks.
1011
+ Keep the -webkit and -moz rules separate \u2014 an unrecognized pseudo-element
1012
+ invalidates the whole selector list. */
1013
+ .hcms-shell .mirk-progress {
1014
+ appearance: none; -webkit-appearance: none;
1015
+ display: block; width: 100%; height: 12px;
1016
+ border: 1px solid var(--mirk-input-border);
1017
+ background: var(--mirk-canvas);
1018
+ }
1019
+ .hcms-shell .mirk-progress::-webkit-progress-bar { background: transparent; }
1020
+ .hcms-shell .mirk-progress::-webkit-progress-value { background: var(--mirk-slider-fill); }
1021
+ .hcms-shell .mirk-progress::-moz-progress-bar { background: var(--mirk-slider-fill); }
1022
+ .hcms-shell .mirk-progress--small { height: 8px; }
1023
+ .hcms-shell .mirk-progress--round { border-radius: 9999px; overflow: hidden; }
1024
+ .hcms-shell .mirk-progress--blocks::-webkit-progress-value {
1025
+ background: repeating-linear-gradient(to right,
1026
+ var(--mirk-slider-fill) 0 8px, transparent 8px 11px);
1027
+ }
1028
+ .hcms-shell .mirk-progress--blocks::-moz-progress-bar {
1029
+ background: repeating-linear-gradient(to right,
1030
+ var(--mirk-slider-fill) 0 8px, transparent 8px 11px);
1031
+ }
1032
+
1033
+ /* ============================ NOTE ============================ */
1034
+ /* An informational callout. Flat on purpose: bevel means pressable in this
1035
+ kit (0012) and a note is content, so it gets the 1px content border over
1036
+ the recessed face, never the raised edge. The 4px left edge carries the
1037
+ status: neutral ink by default, destructive on --alert. */
1038
+ .hcms-shell .mirk-note {
1039
+ display: flex; flex-direction: column; gap: 4px;
1040
+ background: var(--mirk-bevel-bg);
1041
+ border: 1px solid var(--mirk-input-border);
1042
+ border-left: 4px solid var(--mirk-mark-fg);
1043
+ padding: 10px 14px 11px;
1044
+ font-size: 14px; line-height: 1.5;
1045
+ }
1046
+ .hcms-shell .mirk-note__title {
1047
+ font-size: 11px; text-transform: uppercase; letter-spacing: 0.2em;
1048
+ color: var(--mirk-mark-fg);
1049
+ }
1050
+ .hcms-shell .mirk-note__body { color: var(--mirk-fg); }
1051
+ .hcms-shell .mirk-note--alert { border-left-color: var(--mirk-destructive); }
1052
+ .hcms-shell .mirk-note--alert .mirk-note__title { color: var(--mirk-destructive); }
1053
+ .hcms-shell .mirk-note--rounded { border-radius: var(--mirk-radius); }
1054
+
1055
+ /* ============================ HINT ============================ */
1056
+ /* Small print under a field: neutral help text, or --alert validation text. */
1057
+ .hcms-shell .mirk-hint { margin: 0; font-size: 13px; line-height: 1.5; color: var(--mirk-placeholder-color); }
1058
+ .hcms-shell .mirk-hint--alert { color: var(--mirk-destructive); }
1059
+
1060
+ /* ============================ LIST ============================ */
1061
+ /* Content bullets. <ul> gets a square pixel dot (the sortable dot's idiom,
1062
+ one step larger); a nested <ul> hollows it. <ol> gets zero-padded counters
1063
+ in the muted label ink. Styles the bare <li> by descent, like the platform. */
1064
+ .hcms-shell .mirk-list {
1065
+ list-style: none; margin: 0; padding: 0;
1066
+ display: flex; flex-direction: column; gap: 6px;
1067
+ font-size: 16px; line-height: 1.5;
1068
+ }
1069
+ .hcms-shell .mirk-list li { position: relative; padding-left: 22px; }
1070
+ .hcms-shell ul.mirk-list > li::before {
1071
+ content: ""; position: absolute; left: 2px; top: 0.55em;
1072
+ width: 6px; height: 6px; background: var(--mirk-mark-fg);
1073
+ box-shadow: 1px 1px 0 0 var(--mirk-sortable-shadow);
1074
+ }
1075
+ .hcms-shell ol.mirk-list { counter-reset: mirk-li; }
1076
+ .hcms-shell ol.mirk-list > li { counter-increment: mirk-li; padding-left: 38px; }
1077
+ .hcms-shell ol.mirk-list > li::before {
1078
+ content: counter(mirk-li, decimal-leading-zero) ".";
1079
+ position: absolute; left: 0; top: 0;
1080
+ color: var(--mirk-sortable-label);
1081
+ }
1082
+
1083
+ /* One nested level: hollow square, same stack. */
1084
+ .hcms-shell .mirk-list ul {
1085
+ list-style: none; margin: 6px 0 0; padding: 0;
1086
+ display: flex; flex-direction: column; gap: 6px;
1087
+ }
1088
+ .hcms-shell .mirk-list ul > li::before {
1089
+ content: ""; position: absolute; left: 2px; top: 0.55em;
1090
+ width: 6px; height: 6px; background: transparent;
1091
+ border: 1.5px solid var(--mirk-mark-fg); box-shadow: none;
1092
+ }
1093
+
1094
+ .hcms-shell .mirk-list--small { font-size: 14px; gap: 4px; }
1095
+ .hcms-shell .mirk-list--small li { padding-left: 18px; }
1096
+ .hcms-shell ul.mirk-list--small > li::before, .hcms-shell .mirk-list--small ul > li::before { width: 5px; height: 5px; }
1097
+ .hcms-shell ol.mirk-list--small > li { padding-left: 32px; }
1098
+
1099
+ /* ============================ BADGE ============================ */
1100
+ /* A static tag label \u2014 the display counterpart to the mirk-tags input. Flat
1101
+ on purpose: bevel means pressable (0012), a badge is content. */
1102
+ .hcms-shell .mirk-badge {
1103
+ display: inline-flex; align-items: center; gap: 0.375rem;
1104
+ padding: 1px 8px 2px; font-size: 12px; line-height: 1.5;
1105
+ color: var(--mirk-fg); background: var(--mirk-bevel-bg);
1106
+ border: 1px solid var(--mirk-input-border);
1107
+ white-space: nowrap; vertical-align: middle;
1108
+ }
1109
+ .hcms-shell .mirk-badge--accent { background: var(--mirk-accent); }
1110
+ .hcms-shell .mirk-badge--round { border-radius: 9999px; padding: 1px 10px 2px; }
1111
+ .hcms-shell .mirk-badge--alert { color: var(--mirk-destructive); border-color: var(--mirk-destructive); }
1112
+
1113
+ /* ============================ TABLE ============================ */
1114
+ /* A flat data surface: the content face in a 1px frame, header cells in the
1115
+ eyebrow register, hairline row dividers. Semantic <table> styled by
1116
+ descent \u2014 no per-cell classes. The header/stripe tints ride color-mix
1117
+ toward the ink so they stay visible in every palette (Pixel Quiet's
1118
+ canvas and face are nearly the same value). Wrap in an overflow-x:auto
1119
+ div when the table can outgrow its column. */
1120
+ .hcms-shell .mirk-table {
1121
+ width: 100%; border-collapse: collapse;
1122
+ background: var(--mirk-bevel-bg);
1123
+ border: 1px solid var(--mirk-input-border);
1124
+ font-size: 14px; line-height: 1.5;
1125
+ }
1126
+ .hcms-shell .mirk-table th {
1127
+ text-align: left; font-weight: 400;
1128
+ font-size: 11px; text-transform: uppercase; letter-spacing: 0.15em;
1129
+ color: var(--mirk-placeholder-color);
1130
+ background: color-mix(in srgb, var(--mirk-bevel-bg), var(--mirk-fg) 4%);
1131
+ padding: 7px 14px;
1132
+ border-bottom: 1px solid var(--mirk-input-border);
1133
+ }
1134
+ .hcms-shell .mirk-table td {
1135
+ padding: 8px 14px;
1136
+ border-bottom: 1px solid var(--mirk-input-border);
1137
+ vertical-align: top;
1138
+ }
1139
+ .hcms-shell .mirk-table tbody tr:last-child td { border-bottom: 0; }
1140
+ .hcms-shell .mirk-table--striped tbody tr:nth-child(even) td {
1141
+ background: color-mix(in srgb, var(--mirk-bevel-bg), var(--mirk-fg) 3%);
1142
+ }
1143
+ .hcms-shell .mirk-table--small { font-size: 13px; }
1144
+ .hcms-shell .mirk-table--small th { padding: 5px 12px; font-size: 10px; }
1145
+ .hcms-shell .mirk-table--small td { padding: 5px 12px; }
1146
+
1147
+ /* ============================ PAGE ============================ */
1148
+ /* The quickstart shell: mirk-page on <body> (or any wrapper) gives a centered
1149
+ column + typographic defaults, so two CDN tags and one class boot a full
1150
+ page. Every rule rides :where() (zero specificity): any utility, component
1151
+ class, or consumer rule beats it. Flow rhythm targets direct children only,
1152
+ so margins never leak inside component internals. */
1153
+ .hcms-shell .mirk-page { max-width: 640px; margin-inline: auto; padding: 48px 24px 96px; }
1154
+ .hcms-shell .mirk-page--wide { max-width: 960px; }
1155
+
1156
+ /* Departure Mono ships one weight \u2014 hierarchy comes from size, never bold. */
1157
+ .hcms-shell .mirk-page :where(h1, h2, h3, h4) { margin: 0; font-weight: 400; line-height: 1.15; }
1158
+ .hcms-shell .mirk-page :where(h1) { font-size: 40px; }
1159
+ .hcms-shell .mirk-page :where(h2) { font-size: 26px; }
1160
+ .hcms-shell .mirk-page :where(h3) { font-size: 20px; }
1161
+ .hcms-shell .mirk-page :where(h4) { font-size: 16px; }
1162
+ .hcms-shell .mirk-page :where(p) { margin: 0; font-size: 16px; line-height: 1.6; }
1163
+
1164
+ .hcms-shell .mirk-page :where(a) { color: inherit; text-decoration: underline; text-underline-offset: 2px; }
1165
+ .hcms-shell .mirk-page :where(code, kbd) {
1166
+ font-size: 0.875em; padding: 1px 4px;
1167
+ background: var(--mirk-bevel-bg); border: 1px solid var(--mirk-input-border);
1168
+ }
1169
+ .hcms-shell .mirk-page :where(pre) {
1170
+ margin: 0; padding: 12px 14px; font-size: 13px; line-height: 1.5; overflow-x: auto;
1171
+ background: var(--mirk-bevel-bg); border: 1px solid var(--mirk-input-border);
1172
+ }
1173
+ .hcms-shell .mirk-page :where(pre code) { padding: 0; border: 0; background: none; font-size: inherit; }
1174
+ .hcms-shell .mirk-page :where(hr) { border: 0; border-top: 1px solid var(--mirk-input-border); }
1175
+
1176
+ /* Flow rhythm \u2014 direct children only; headings open sections, eyebrows and
1177
+ hints hug their neighbors. Equal specificity, so source order settles ties. */
1178
+ .hcms-shell .mirk-page > :where(* + *) { margin-block-start: 14px; }
1179
+ .hcms-shell .mirk-page > :where(h1, h2, h3, h4):where(* + *) { margin-block-start: 40px; }
1180
+ .hcms-shell .mirk-page > :where(.mirk-eyebrow + *), .hcms-shell .mirk-page > :where(* + .mirk-hint) { margin-block-start: 6px; }
1181
+
1182
+ /* ============================ EYEBROW ============================ */
1183
+ /* The kit's signature section label, as a shippable class. Block so it works
1184
+ the same on <p>, <label>, or <div>, and flow margins always apply. */
1185
+ .hcms-shell .mirk-eyebrow {
1186
+ display: block; margin: 0;
1187
+ font-size: 11px; text-transform: uppercase; letter-spacing: 0.2em;
1188
+ color: var(--mirk-placeholder-color);
1189
+ }
822
1190
  }
823
1191
 
824
1192
  /* Respect the machine \u2014 outside @layer components so it always wins. */
@@ -1060,7 +1428,7 @@ body.hcms-open.hcms-overlay { overflow: hidden; }
1060
1428
  display: flex;
1061
1429
  flex-direction: column;
1062
1430
  gap: 26px;
1063
- padding: 24px 24px 28px;
1431
+ padding: 12px 24px 28px;
1064
1432
  }
1065
1433
 
1066
1434
  /* one labeled scalar field */
@@ -1086,6 +1454,31 @@ body.hcms-open.hcms-overlay { overflow: hidden; }
1086
1454
  padding: 9px 14px 10px;
1087
1455
  }
1088
1456
  .hcms-shell.pixel-quiet textarea.mirk-input { min-height: 76px; resize: vertical; }
1457
+
1458
+ /* default scalar fields: one-row textareas that grow with their content.
1459
+ Browsers without field-sizing get a scrollHeight fallback (enhance.js). */
1460
+ .hcms-shell.pixel-quiet .hcms-form textarea.mirk-textarea {
1461
+ field-sizing: content;
1462
+ resize: none;
1463
+ overflow: hidden;
1464
+ min-height: 0;
1465
+ }
1466
+
1467
+ /* rich-text surface (@richtext): a contenteditable styled like a textarea */
1468
+ .hcms-shell.pixel-quiet .hcms-richtext {
1469
+ min-height: 2.5em;
1470
+ cursor: text;
1471
+ overflow-wrap: break-word;
1472
+ }
1473
+ .hcms-shell.pixel-quiet .hcms-richtext a {
1474
+ color: inherit;
1475
+ text-decoration: underline;
1476
+ text-underline-offset: 2px;
1477
+ }
1478
+ .hcms-shell.pixel-quiet .hcms-richtext:empty::before {
1479
+ content: attr(data-hcms-placeholder);
1480
+ color: var(--mirk-placeholder-color);
1481
+ }
1089
1482
  .hcms-shell.pixel-quiet .mirk-select__field {
1090
1483
  font-size: 15px;
1091
1484
  padding: 8px 40px 9px 14px;
@@ -1343,4 +1736,4 @@ body.hcms-open.hcms-overlay { overflow: hidden; }
1343
1736
  cursor: pointer;
1344
1737
  }
1345
1738
  .hcms-sr-only[hidden] { display: none; }
1346
- `;typeof window<"u"&&typeof document<"u"&&(function(){if(window.__mirk)return;window.__mirk=!0;let e='<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M4 4 12 12M12 4 4 12" stroke="currentColor" stroke-width="2" stroke-linecap="square" fill="none"/></svg>';document.addEventListener("click",r=>{let n=r.target.closest(".mirk-number__step");if(!n)return;let i=n.closest(".mirk-number").querySelector("input[type=number]");i&&(n.dataset.step==="up"?i.stepUp():i.stepDown(),i.dispatchEvent(new Event("change",{bubbles:!0})))}),document.addEventListener("input",r=>{let n=r.target.closest(".mirk-slider__input");n&&n.closest(".mirk-slider").style.setProperty("--mirk-value",`${n.value}%`)}),document.addEventListener("change",r=>{let n=r.target.closest(".mirk-file__input");if(!n||!n.files.length)return;let i=n.closest(".mirk-file"),o=i.querySelector(".mirk-file__name");if(!o)return;let a=n.files[0],s=document.createElement("a");if(s.className="mirk-file__name",s.dataset.filled="",s.href=URL.createObjectURL(a),s.target="_blank",s.rel="noopener",s.textContent=a.name,o.replaceWith(s),!i.querySelector(".mirk-file__remove")){let l=document.createElement("button");l.type="button",l.className="mirk-file__remove",l.setAttribute("aria-label","Remove file"),l.innerHTML=e,s.after(l)}}),document.addEventListener("change",r=>{let n=r.target.closest(".mirk-image__input");if(!n||!n.files.length)return;let i=n.closest(".mirk-image"),o=i.querySelector(".mirk-image__preview");if(!o)return;let a=i.querySelector(".mirk-image__placeholder"),s=new FileReader;s.onload=l=>{o.src=l.target.result,o.removeAttribute("hidden"),a&&a.setAttribute("hidden",""),i.querySelector(".mirk-image__thumb")?.removeAttribute("hidden"),i.querySelector(".mirk-image__upload")?.setAttribute("hidden","")},s.readAsDataURL(n.files[0])}),document.addEventListener("click",r=>{let n=r.target.closest(".mirk-file__remove");if(n){let o=n.closest(".mirk-file"),a=o?.querySelector(".mirk-file__input"),s=o?.querySelector(".mirk-file__name");if(a&&(a.value=""),s){let l=document.createElement("span");l.className="mirk-file__name",l.textContent="No file chosen",s.replaceWith(l)}n.remove();return}let i=r.target.closest(".mirk-image__remove");if(i){let o=i.closest(".mirk-image"),a=o?.querySelector(".mirk-image__input"),s=o?.querySelector(".mirk-image__preview");a&&(a.value=""),s&&(s.removeAttribute("src"),s.setAttribute("hidden","")),o?.querySelector(".mirk-image__thumb")?.setAttribute("hidden",""),o?.querySelector(".mirk-image__upload")?.removeAttribute("hidden")}});function t(r,n){let i=document.createElement("span");i.textContent=r;let o=document.createElement("input");o.type="hidden",o.name="tags[]",o.value=r;let a=document.createElement("button");a.type="button",a.className="mirk-tags__remove",a.textContent="\xD7";let s=document.createElement("span");if(s.className="mirk-tags__chip",n){let l=document.createElement("span");l.className="mirk-tags__chip-inner",l.append(i,o,a),s.append(l)}else s.append(i,o,a);return s}document.addEventListener("keydown",r=>{let n=r.target.closest(".mirk-tags__input");if(!n)return;let i=n.closest(".mirk-tags");if(r.key==="Enter"||r.key===","){let o=n.value.trim();if(!o)return;r.preventDefault(),n.before(t(o,i.classList.contains("mirk-tags--round"))),n.value=""}else if(r.key==="Backspace"&&!n.value){let o=i.querySelectorAll(".mirk-tags__chip");o[o.length-1]?.remove()}}),document.addEventListener("click",r=>{let n=r.target.closest(".mirk-tags__remove");if(n){n.closest(".mirk-tags__chip").remove();return}let i=r.target.closest(".mirk-tags");i&&r.target===i&&i.querySelector(".mirk-tags__input")?.focus()}),document.addEventListener("click",r=>{let n=r.target.closest("[data-copy-btn]");if(!n)return;let i=n.closest("[data-copy]");if(!i)return;let o=i.cloneNode(!0);o.querySelectorAll("[data-copy-btn]").forEach(l=>l.remove());let s=i.getAttribute("data-copy")==="text"?o.textContent.replace(/^\s+|\s+$/g,""):o.innerHTML.replace(/\s+data-copy(="[^"]*")?/g,"").replace(/^\s*\n/gm,"").trim();navigator.clipboard.writeText(s).then(()=>{let l=n.textContent;n.textContent="copied",n.dataset.copied="",setTimeout(()=>{n.textContent=l,delete n.dataset.copied},1200)}).catch(()=>{n.textContent="error",setTimeout(()=>{n.textContent="copy"},1200)})})})();$r(Ur);var ro=Ft,no={cms:Ft};return Gr(io);})();
1739
+ `;typeof window<"u"&&typeof document<"u"&&(function(){if(window.__mirk)return;window.__mirk=!0;let e='<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M4 4 12 12M12 4 4 12" stroke="currentColor" stroke-width="2" stroke-linecap="square" fill="none"/></svg>';document.addEventListener("click",r=>{let n=r.target.closest(".mirk-number__step");if(!n)return;let i=n.closest(".mirk-number").querySelector("input[type=number]");i&&(n.dataset.step==="up"?i.stepUp():i.stepDown(),i.dispatchEvent(new Event("change",{bubbles:!0})))}),document.addEventListener("input",r=>{let n=r.target.closest(".mirk-slider__input");n&&n.closest(".mirk-slider").style.setProperty("--mirk-value",`${n.value}%`)}),document.addEventListener("change",r=>{let n=r.target.closest(".mirk-file__input");if(!n||!n.files.length)return;let i=n.closest(".mirk-file"),o=i.querySelector(".mirk-file__name");if(!o)return;let a=n.files[0],s=document.createElement("a");if(s.className="mirk-file__name",s.dataset.filled="",s.href=URL.createObjectURL(a),s.target="_blank",s.rel="noopener",s.textContent=a.name,o.replaceWith(s),!i.querySelector(".mirk-file__remove")){let l=document.createElement("button");l.type="button",l.className="mirk-file__remove",l.setAttribute("aria-label","Remove file"),l.innerHTML=e,s.after(l)}}),document.addEventListener("change",r=>{let n=r.target.closest(".mirk-image__input");if(!n||!n.files.length)return;let i=n.closest(".mirk-image"),o=i.querySelector(".mirk-image__preview");if(!o)return;let a=i.querySelector(".mirk-image__placeholder"),s=new FileReader;s.onload=l=>{o.src=l.target.result,o.removeAttribute("hidden"),a&&a.setAttribute("hidden",""),i.querySelector(".mirk-image__thumb")?.removeAttribute("hidden"),i.querySelector(".mirk-image__upload")?.setAttribute("hidden","")},s.readAsDataURL(n.files[0])}),document.addEventListener("click",r=>{let n=r.target.closest(".mirk-file__remove");if(n){let o=n.closest(".mirk-file"),a=o?.querySelector(".mirk-file__input"),s=o?.querySelector(".mirk-file__name");if(a&&(a.value=""),s){let l=document.createElement("span");l.className="mirk-file__name",l.textContent="No file chosen",s.replaceWith(l)}n.remove();return}let i=r.target.closest(".mirk-image__remove");if(i){let o=i.closest(".mirk-image"),a=o?.querySelector(".mirk-image__input"),s=o?.querySelector(".mirk-image__preview");a&&(a.value=""),s&&(s.removeAttribute("src"),s.setAttribute("hidden","")),o?.querySelector(".mirk-image__thumb")?.setAttribute("hidden",""),o?.querySelector(".mirk-image__upload")?.removeAttribute("hidden")}});function t(r,n){let i=document.createElement("span");i.textContent=r;let o=document.createElement("input");o.type="hidden",o.name="tags[]",o.value=r;let a=document.createElement("button");a.type="button",a.className="mirk-tags__remove",a.textContent="\xD7";let s=document.createElement("span");if(s.className="mirk-tags__chip",n){let l=document.createElement("span");l.className="mirk-tags__chip-inner",l.append(i,o,a),s.append(l)}else s.append(i,o,a);return s}document.addEventListener("keydown",r=>{let n=r.target.closest(".mirk-tags__input");if(!n)return;let i=n.closest(".mirk-tags");if(r.key==="Enter"||r.key===","){let o=n.value.trim();if(!o)return;r.preventDefault(),n.before(t(o,i.classList.contains("mirk-tags--round"))),n.value=""}else if(r.key==="Backspace"&&!n.value){let o=i.querySelectorAll(".mirk-tags__chip");o[o.length-1]?.remove()}}),document.addEventListener("click",r=>{let n=r.target.closest(".mirk-tags__remove");if(n){n.closest(".mirk-tags__chip").remove();return}let i=r.target.closest(".mirk-tags");i&&r.target===i&&i.querySelector(".mirk-tags__input")?.focus()}),document.addEventListener("click",r=>{let n=r.target.closest("[data-mirk-chip]");if(!n)return;let i=n.getAttribute("data-mirk-chip");if(i==="open")n.closest(".mirk-chip")?.classList.add("mirk-chip--open");else if(i==="collapse")n.closest(".mirk-chip")?.classList.remove("mirk-chip--open");else if(i==="changes"){let o=n.closest(".mirk-chip__panel")?.classList.toggle("is-changes");n.textContent=o?"(hide changes)":"(view changes)"}}),document.addEventListener("click",r=>{let n=r.target.closest("[data-copy-btn]");if(!n)return;let i=n.closest("[data-copy]");if(!i)return;let o=i.cloneNode(!0);o.querySelectorAll("[data-copy-btn]").forEach(l=>l.remove());let s=i.getAttribute("data-copy")==="text"?o.textContent.replace(/^\s+|\s+$/g,""):o.innerHTML.replace(/\s+data-copy(="[^"]*")?/g,"").replace(/^\s*\n/gm,"").trim();navigator.clipboard.writeText(s).then(()=>{let l=n.textContent;n.textContent="copied",n.dataset.copied="",setTimeout(()=>{n.textContent=l,delete n.dataset.copied},1200)}).catch(()=>{n.textContent="error",setTimeout(()=>{n.textContent="copy"},1200)})})})();pn(gn);var Vo=Yt,Wo={cms:Yt};return An(Ko);})();