hyperframes 0.6.58 → 0.6.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +552 -476
- package/dist/hyperframe-runtime.js +10 -10
- package/dist/hyperframe.manifest.json +1 -1
- package/dist/hyperframe.runtime.iife.js +10 -10
- package/dist/studio/assets/index-B5EnhVCT.css +1 -0
- package/dist/studio/assets/index-DG5-N9Mj.js +139 -0
- package/dist/studio/index.html +2 -2
- package/package.json +1 -1
- package/dist/studio/assets/index-B1XH-ptc.js +0 -138
- package/dist/studio/assets/index-DH9QNjuX.css +0 -1
package/dist/cli.js
CHANGED
|
@@ -50,7 +50,7 @@ var VERSION;
|
|
|
50
50
|
var init_version = __esm({
|
|
51
51
|
"src/version.ts"() {
|
|
52
52
|
"use strict";
|
|
53
|
-
VERSION = true ? "0.6.
|
|
53
|
+
VERSION = true ? "0.6.60" : "0.0.0-dev";
|
|
54
54
|
}
|
|
55
55
|
});
|
|
56
56
|
|
|
@@ -8016,7 +8016,7 @@ var require_util = __commonJS({
|
|
|
8016
8016
|
return path2;
|
|
8017
8017
|
}
|
|
8018
8018
|
exports.normalize = normalize;
|
|
8019
|
-
function
|
|
8019
|
+
function join92(aRoot, aPath) {
|
|
8020
8020
|
if (aRoot === "") {
|
|
8021
8021
|
aRoot = ".";
|
|
8022
8022
|
}
|
|
@@ -8048,7 +8048,7 @@ var require_util = __commonJS({
|
|
|
8048
8048
|
}
|
|
8049
8049
|
return joined;
|
|
8050
8050
|
}
|
|
8051
|
-
exports.join =
|
|
8051
|
+
exports.join = join92;
|
|
8052
8052
|
exports.isAbsolute = function(aPath) {
|
|
8053
8053
|
return aPath.charAt(0) === "/" || urlRegexp.test(aPath);
|
|
8054
8054
|
};
|
|
@@ -8221,7 +8221,7 @@ var require_util = __commonJS({
|
|
|
8221
8221
|
parsed.path = parsed.path.substring(0, index + 1);
|
|
8222
8222
|
}
|
|
8223
8223
|
}
|
|
8224
|
-
sourceURL =
|
|
8224
|
+
sourceURL = join92(urlGenerate(parsed), sourceURL);
|
|
8225
8225
|
}
|
|
8226
8226
|
return normalize(sourceURL);
|
|
8227
8227
|
}
|
|
@@ -37859,6 +37859,24 @@ ${right.raw}`)
|
|
|
37859
37859
|
}
|
|
37860
37860
|
return findings;
|
|
37861
37861
|
},
|
|
37862
|
+
// gsap_timeline_not_registered
|
|
37863
|
+
({ scripts, rawSource, options }) => {
|
|
37864
|
+
const findings = [];
|
|
37865
|
+
const canInheritFromHost = options.isSubComposition || rawSource.trimStart().toLowerCase().startsWith("<template");
|
|
37866
|
+
for (const script of scripts) {
|
|
37867
|
+
const content = script.content;
|
|
37868
|
+
if (!/gsap\.timeline/.test(content)) continue;
|
|
37869
|
+
const hasRegistration = WINDOW_TIMELINE_ASSIGN_PATTERN.test(content);
|
|
37870
|
+
if (hasRegistration || canInheritFromHost) continue;
|
|
37871
|
+
findings.push({
|
|
37872
|
+
code: "gsap_timeline_not_registered",
|
|
37873
|
+
severity: "warning",
|
|
37874
|
+
message: "GSAP timeline is created but never registered in window.__timelines. The runtime discovers timelines from this registry \u2014 without registration, animations will not play during preview or render.",
|
|
37875
|
+
fixHint: 'Add `window.__timelines = window.__timelines || {};` and `window.__timelines["root"] = tl;` after creating the timeline (use the composition\'s data-composition-id as the key).'
|
|
37876
|
+
});
|
|
37877
|
+
}
|
|
37878
|
+
return findings;
|
|
37879
|
+
},
|
|
37862
37880
|
// gsap_from_opacity_noop — CSS opacity:0 + gsap.from({opacity:0}) = invisible forever
|
|
37863
37881
|
async ({ styles, scripts, tags }) => {
|
|
37864
37882
|
const findings = [];
|
|
@@ -39215,7 +39233,7 @@ var RUNTIME_IIFE;
|
|
|
39215
39233
|
var init_runtime_inline = __esm({
|
|
39216
39234
|
"../core/src/generated/runtime-inline.ts"() {
|
|
39217
39235
|
"use strict";
|
|
39218
|
-
RUNTIME_IIFE = '"use strict";(()=>{var ns=Object.create;var xn=Object.defineProperty;var is=Object.getOwnPropertyDescriptor;var rs=Object.getOwnPropertyNames;var os=Object.getPrototypeOf,ss=Object.prototype.hasOwnProperty;var as=(t,e,n)=>e in t?xn(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var Z=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var ls=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of rs(e))!ss.call(t,r)&&r!==n&&xn(t,r,{get:()=>e[r],enumerable:!(i=is(e,r))||i.enumerable});return t};var us=(t,e,n)=>(n=t!=null?ns(os(t)):{},ls(e||!t||!t.__esModule?xn(n,"default",{value:t,enumerable:!0}):n,t));var ye=(t,e,n)=>as(t,typeof e!="symbol"?e+"":e,n);var qi=Z((fc,Fn)=>{var K=String,Hi=function(){return{isColorSupported:!1,reset:K,bold:K,dim:K,italic:K,underline:K,inverse:K,hidden:K,strikethrough:K,black:K,red:K,green:K,yellow:K,blue:K,magenta:K,cyan:K,white:K,gray:K,bgBlack:K,bgRed:K,bgGreen:K,bgYellow:K,bgBlue:K,bgMagenta:K,bgCyan:K,bgWhite:K,blackBright:K,redBright:K,greenBright:K,yellowBright:K,blueBright:K,magentaBright:K,cyanBright:K,whiteBright:K,bgBlackBright:K,bgRedBright:K,bgGreenBright:K,bgYellowBright:K,bgBlueBright:K,bgMagentaBright:K,bgCyanBright:K,bgWhiteBright:K}};Fn.exports=Hi();Fn.exports.createColors=Hi});var wn=Z(()=>{});var qt=Z((hc,zi)=>{"use strict";var Vi=qi(),Ui=wn(),yt=class t extends Error{constructor(e,n,i,r,o,s){super(e),this.name="CssSyntaxError",this.reason=e,o&&(this.file=o),r&&(this.source=r),s&&(this.plugin=s),typeof n<"u"&&typeof i<"u"&&(typeof n=="number"?(this.line=n,this.column=i):(this.line=n.line,this.column=n.column,this.endLine=i.line,this.endColumn=i.column)),this.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(this,t)}setMessage(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"<css input>",typeof this.line<"u"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason}showSourceCode(e){if(!this.source)return"";let n=this.source;e==null&&(e=Vi.isColorSupported);let i=u=>u,r=u=>u,o=u=>u;if(e){let{bold:u,gray:m,red:f}=Vi.createColors(!0);r=x=>u(f(x)),i=x=>m(x),Ui&&(o=x=>Ui(x))}let s=n.split(/\\r?\\n/),l=Math.max(this.line-3,0),a=Math.min(this.line+2,s.length),c=String(a).length;return s.slice(l,a).map((u,m)=>{let f=l+1+m,x=" "+(" "+f).slice(-c)+" | ";if(f===this.line){if(u.length>160){let E=20,S=Math.max(0,this.column-E),B=Math.max(this.column+E,this.endColumn+E),D=u.slice(S,B),v=i(x.replace(/\\d/g," "))+u.slice(0,Math.min(this.column-1,E-1)).replace(/[^\\t]/g," ");return r(">")+i(x)+o(D)+`\n `+v+r("^")}let F=i(x.replace(/\\d/g," "))+u.slice(0,this.column-1).replace(/[^\\t]/g," ");return r(">")+i(x)+o(u)+`\n `+F+r("^")}return" "+i(x)+o(u)}).join(`\n`)}toString(){let e=this.showSourceCode();return e&&(e=`\n\n`+e+`\n`),this.name+": "+this.message+e}};zi.exports=yt;yt.default=yt});var Nn=Z((xc,$i)=>{"use strict";var _s=/(<)(\\/?style\\b)/gi,Rs=/(<)(!--)/g;function He(t){return typeof t!="string"||!t.includes("<")?t:t.replace(_s,"\\\\3c $2").replace(Rs,"\\\\3c $2")}var ji={after:`\n`,beforeClose:`\n`,beforeComment:`\n`,beforeDecl:`\n`,beforeOpen:" ",beforeRule:`\n`,colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function Ls(t){return t[0].toUpperCase()+t.slice(1)}var St=class{constructor(e){this.builder=e}atrule(e,n){let i=e.raws,r="@"+e.name,o=e.params?this.rawValue(e,"params"):"";if(typeof i.afterName<"u"?r+=i.afterName:o&&(r+=" "),e.nodes)this.block(e,r+o);else{let s=(i.between||"")+(n?";":"");this.builder(He(r+o+s),e)}}beforeAfter(e,n){let i;e.type==="decl"?i=this.raw(e,null,"beforeDecl"):e.type==="comment"?i=this.raw(e,null,"beforeComment"):n==="before"?i=this.raw(e,null,"beforeRule"):i=this.raw(e,null,"beforeClose");let r=e.parent,o=0;for(;r&&r.type!=="root";)o+=1,r=r.parent;if(i.includes(`\n`)){let s=this.raw(e,null,"indent");if(s.length)for(let l=0;l<o;l++)i+=s}return i}block(e,n){let i=this.raw(e,"between","beforeOpen");this.builder(He(n+i)+"{",e,"start");let r;e.nodes&&e.nodes.length?(this.body(e),r=this.raw(e,"after")):r=this.raw(e,"after","emptyBody"),r&&this.builder(He(r)),this.builder("}",e,"end")}body(e){let n=e.nodes,i=n.length-1;for(;i>0&&n[i].type==="comment";)i-=1;let r=this.raw(e,"semicolon"),o=e.type==="document";for(let s=0;s<n.length;s++){let l=n[s],a=this.raw(l,"before");a&&this.builder(o?a:He(a)),this.stringify(l,i!==s||r)}}comment(e){let n=this.raw(e,"left","commentLeft"),i=this.raw(e,"right","commentRight");this.builder(He("/*"+n+e.text+i+"*/"),e)}decl(e,n){let i=e.raws,r=this.raw(e,"between","colon"),o=e.prop+r+this.rawValue(e,"value");e.important&&(o+=i.important||" !important"),n&&(o+=";"),this.builder(He(o),e)}document(e){this.body(e)}raw(e,n,i){let r;if(i||(i=n),n&&(r=e.raws[n],typeof r<"u"))return r;let o=e.parent;if(i==="before"&&(!o||o.type==="root"&&o.first===e||o&&o.type==="document"))return"";if(!o)return ji[i];let s=e.root(),l=s.rawCache||(s.rawCache={});if(typeof l[i]<"u")return l[i];if(i==="before"||i==="after")return this.beforeAfter(e,i);{let a="raw"+Ls(i);this[a]?r=this[a](s,e):s.walk(c=>{if(r=c.raws[n],typeof r<"u")return!1})}return typeof r>"u"&&(r=ji[i]),l[i]=r,r}rawBeforeClose(e){let n;return e.walk(i=>{if(i.nodes&&i.nodes.length>0&&typeof i.raws.after<"u")return n=i.raws.after,n.includes(`\n`)&&(n=n.replace(/[^\\n]+$/,"")),!1}),n&&(n=n.replace(/\\S/g,"")),n}rawBeforeComment(e,n){let i;return e.walkComments(r=>{if(typeof r.raws.before<"u")return i=r.raws.before,i.includes(`\n`)&&(i=i.replace(/[^\\n]+$/,"")),!1}),typeof i>"u"?i=this.raw(n,null,"beforeDecl"):i&&(i=i.replace(/\\S/g,"")),i}rawBeforeDecl(e,n){let i;return e.walkDecls(r=>{if(typeof r.raws.before<"u")return i=r.raws.before,i.includes(`\n`)&&(i=i.replace(/[^\\n]+$/,"")),!1}),typeof i>"u"?i=this.raw(n,null,"beforeRule"):i&&(i=i.replace(/\\S/g,"")),i}rawBeforeOpen(e){let n;return e.walk(i=>{if(i.type!=="decl"&&(n=i.raws.between,typeof n<"u"))return!1}),n}rawBeforeRule(e){let n;return e.walk(i=>{if(i.nodes&&(i.parent!==e||e.first!==i)&&typeof i.raws.before<"u")return n=i.raws.before,n.includes(`\n`)&&(n=n.replace(/[^\\n]+$/,"")),!1}),n&&(n=n.replace(/\\S/g,"")),n}rawColon(e){let n;return e.walkDecls(i=>{if(typeof i.raws.between<"u")return n=i.raws.between.replace(/[^\\s:]/g,""),!1}),n}rawEmptyBody(e){let n;return e.walk(i=>{if(i.nodes&&i.nodes.length===0&&(n=i.raws.after,typeof n<"u"))return!1}),n}rawIndent(e){if(e.raws.indent)return e.raws.indent;let n;return e.walk(i=>{let r=i.parent;if(r&&r!==e&&r.parent&&r.parent===e&&typeof i.raws.before<"u"){let o=i.raws.before.split(`\n`);return n=o[o.length-1],n=n.replace(/\\S/g,""),!1}}),n}rawSemicolon(e){let n;return e.walk(i=>{if(i.nodes&&i.nodes.length&&i.last.type==="decl"&&(n=i.raws.semicolon,typeof n<"u"))return!1}),n}rawValue(e,n){let i=e[n],r=e.raws[n];return r&&r.value===i?r.raw:i}root(e){if(this.body(e),e.raws.after){let n=e.raws.after,i=e.parent&&e.parent.type==="document";this.builder(i?n:He(n))}}rule(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(He(e.raws.ownSemicolon),e,"end")}stringify(e,n){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,n)}};$i.exports=St;St.default=St});var bt=Z((gc,Gi)=>{"use strict";var Ds=Nn();function Cn(t,e){new Ds(e).stringify(t)}Gi.exports=Cn;Cn.default=Cn});var Vt=Z((yc,Mn)=>{"use strict";Mn.exports.isClean=Symbol("isClean");Mn.exports.my=Symbol("my")});var Ft=Z((Sc,Ki)=>{"use strict";var Bs=qt(),Is=Nn(),Os=bt(),{isClean:At,my:Ps}=Vt();function kn(t,e){let n=new t.constructor;for(let i in t){if(!Object.prototype.hasOwnProperty.call(t,i)||i==="proxyCache")continue;let r=t[i],o=typeof r;i==="parent"&&o==="object"?e&&(n[i]=e):i==="source"?n[i]=r:Array.isArray(r)?n[i]=r.map(s=>kn(s,n)):(o==="object"&&r!==null&&(r=kn(r)),n[i]=r)}return n}function Oe(t,e){if(e&&typeof e.offset<"u")return e.offset;let n=1,i=1,r=0;for(let o=0;o<t.length;o++){if(i===e.line&&n===e.column){r=o;break}t[o]===`\n`?(n=1,i+=1):n+=1}return r}var Et=class{get proxyOf(){return this}constructor(e={}){this.raws={},this[At]=!1,this[Ps]=!0;for(let n in e)if(n==="nodes"){this.nodes=[];for(let i of e[n])typeof i.clone=="function"?this.append(i.clone()):this.append(i)}else this[n]=e[n]}addToError(e){if(e.postcssNode=this,e.stack&&this.source&&/\\n\\s{4}at /.test(e.stack)){let n=this.source;e.stack=e.stack.replace(/\\n\\s{4}at /,`$&${n.input.from}:${n.start.line}:${n.start.column}$&`)}return e}after(e){return this.parent.insertAfter(this,e),this}assign(e={}){for(let n in e)this[n]=e[n];return this}before(e){return this.parent.insertBefore(this,e),this}cleanRaws(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between}clone(e={}){let n=kn(this);for(let i in e)n[i]=e[i];return n}cloneAfter(e={}){let n=this.clone(e);return this.parent.insertAfter(this,n),n}cloneBefore(e={}){let n=this.clone(e);return this.parent.insertBefore(this,n),n}error(e,n={}){if(this.source){let{end:i,start:r}=this.rangeBy(n);return this.source.input.error(e,{column:r.column,line:r.line},{column:i.column,line:i.line},n)}return new Bs(e)}getProxyProcessor(){return{get(e,n){return n==="proxyOf"?e:n==="root"?()=>e.root().toProxy():e[n]},set(e,n,i){return e[n]===i||(e[n]=i,(n==="prop"||n==="value"||n==="name"||n==="params"||n==="important"||n==="text")&&e.markDirty()),!0}}}markClean(){this[At]=!0}markDirty(){if(this[At]){this[At]=!1;let e=this;for(;e=e.parent;)e[At]=!1}}next(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e+1]}positionBy(e={}){let n=this.source.start;if(e.index)n=this.positionInside(e.index);else if(e.word){let i="document"in this.source.input?this.source.input.document:this.source.input.css,o=i.slice(Oe(i,this.source.start),Oe(i,this.source.end)).indexOf(e.word);o!==-1&&(n=this.positionInside(o))}return n}positionInside(e){let n=this.source.start.column,i=this.source.start.line,r="document"in this.source.input?this.source.input.document:this.source.input.css,o=Oe(r,this.source.start),s=o+e;for(let l=o;l<s;l++)r[l]===`\n`?(n=1,i+=1):n+=1;return{column:n,line:i,offset:s}}prev(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e-1]}rangeBy(e={}){let n="document"in this.source.input?this.source.input.document:this.source.input.css,i={column:this.source.start.column,line:this.source.start.line,offset:Oe(n,this.source.start)},r=this.source.end?{column:this.source.end.column+1,line:this.source.end.line,offset:typeof this.source.end.offset=="number"?this.source.end.offset:Oe(n,this.source.end)+1}:{column:i.column+1,line:i.line,offset:i.offset+1};if(e.word){let s=n.slice(Oe(n,this.source.start),Oe(n,this.source.end)).indexOf(e.word);s!==-1&&(i=this.positionInside(s),r=this.positionInside(s+e.word.length))}else e.start?i={column:e.start.column,line:e.start.line,offset:Oe(n,e.start)}:e.index&&(i=this.positionInside(e.index)),e.end?r={column:e.end.column,line:e.end.line,offset:Oe(n,e.end)}:typeof e.endIndex=="number"?r=this.positionInside(e.endIndex):e.index&&(r=this.positionInside(e.index+1));return(r.line<i.line||r.line===i.line&&r.column<=i.column)&&(r={column:i.column+1,line:i.line,offset:i.offset+1}),{end:r,start:i}}raw(e,n){return new Is().raw(this,e,n)}remove(){return this.parent&&this.parent.removeChild(this),this.parent=void 0,this}replaceWith(...e){if(this.parent){let n=this,i=!1;for(let r of e)r===this?i=!0:i?(this.parent.insertAfter(n,r),n=r):this.parent.insertBefore(n,r);i||this.remove()}return this}root(){let e=this;for(;e.parent&&e.parent.type!=="document";)e=e.parent;return e}toJSON(e,n){let i={},r=n==null;n=n||new Map;let o=0;for(let s in this){if(!Object.prototype.hasOwnProperty.call(this,s)||s==="parent"||s==="proxyCache")continue;let l=this[s];if(Array.isArray(l))i[s]=l.map(a=>typeof a=="object"&&a.toJSON?a.toJSON(null,n):a);else if(typeof l=="object"&&l.toJSON)i[s]=l.toJSON(null,n);else if(s==="source"){if(l==null)continue;let a=n.get(l.input);a==null&&(a=o,n.set(l.input,o),o++),i[s]={end:l.end,inputId:a,start:l.start}}else i[s]=l}return r&&(i.inputs=[...n.keys()].map(s=>s.toJSON())),i}toProxy(){return this.proxyCache||(this.proxyCache=new Proxy(this,this.getProxyProcessor())),this.proxyCache}toString(e=Os){e.stringify&&(e=e.stringify);let n="";return e(this,i=>{n+=i}),n}warn(e,n,i={}){let r={node:this};for(let o in i)r[o]=i[o];return e.warn(n,r)}};Ki.exports=Et;Et.default=Et});var Nt=Z((bc,Ji)=>{"use strict";var Ws=Ft(),wt=class extends Ws{constructor(e){super(e),this.type="comment"}};Ji.exports=wt;wt.default=wt});var Mt=Z((Ac,Qi)=>{"use strict";var Hs=Ft(),Ct=class extends Hs{get variable(){return this.prop.startsWith("--")||this.prop[0]==="$"}constructor(e){e&&typeof e.value<"u"&&typeof e.value!="string"&&(e={...e,value:String(e.value)}),super(e),this.type="decl"}};Qi.exports=Ct;Ct.default=Ct});var qe=Z((Ec,or)=>{"use strict";var Yi=Nt(),Zi=Mt(),qs=Ft(),{isClean:Xi,my:er}=Vt(),Tn,tr,nr,vn;function ir(t){return t.map(e=>(e.nodes&&(e.nodes=ir(e.nodes)),delete e.source,e))}function rr(t){if(t[Xi]=!1,t.proxyOf.nodes)for(let e of t.proxyOf.nodes)rr(e)}var _e=class t extends qs{get first(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}get last(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}append(...e){for(let n of e){let i=this.normalize(n,this.last);for(let r of i)this.proxyOf.nodes.push(r)}return this.markDirty(),this}cleanRaws(e){if(super.cleanRaws(e),this.nodes)for(let n of this.nodes)n.cleanRaws(e)}each(e){if(!this.proxyOf.nodes)return;let n=this.getIterator(),i,r;for(;this.indexes[n]<this.proxyOf.nodes.length&&(i=this.indexes[n],r=e(this.proxyOf.nodes[i],i),r!==!1);)this.indexes[n]+=1;return delete this.indexes[n],r}every(e){return this.nodes.every(e)}getIterator(){this.lastEach||(this.lastEach=0),this.indexes||(this.indexes={}),this.lastEach+=1;let e=this.lastEach;return this.indexes[e]=0,e}getProxyProcessor(){return{get(e,n){return n==="proxyOf"?e:e[n]?n==="each"||typeof n=="string"&&n.startsWith("walk")?(...i)=>e[n](...i.map(r=>typeof r=="function"?(o,s)=>r(o.toProxy(),s):r)):n==="every"||n==="some"?i=>e[n]((r,...o)=>i(r.toProxy(),...o)):n==="root"?()=>e.root().toProxy():n==="nodes"?e.nodes.map(i=>i.toProxy()):n==="first"||n==="last"?e[n].toProxy():e[n]:e[n]},set(e,n,i){return e[n]===i||(e[n]=i,(n==="name"||n==="params"||n==="selector")&&e.markDirty()),!0}}}index(e){return typeof e=="number"?e:(e.proxyOf&&(e=e.proxyOf),this.proxyOf.nodes.indexOf(e))}insertAfter(e,n){let i=this.index(e),r=this.normalize(n,this.proxyOf.nodes[i]).reverse();i=this.index(e);for(let s of r)this.proxyOf.nodes.splice(i+1,0,s);let o;for(let s in this.indexes)o=this.indexes[s],i<o&&(this.indexes[s]=o+r.length);return this.markDirty(),this}insertBefore(e,n){let i=this.index(e),r=i===0?"prepend":!1,o=this.normalize(n,this.proxyOf.nodes[i],r).reverse();i=this.index(e);for(let l of o)this.proxyOf.nodes.splice(i,0,l);let s;for(let l in this.indexes)s=this.indexes[l],i<=s&&(this.indexes[l]=s+o.length);return this.markDirty(),this}normalize(e,n){if(typeof e=="string")e=ir(tr(e).nodes);else if(typeof e>"u")e=[];else if(Array.isArray(e)){e=e.slice(0);for(let r of e)r.parent&&r.parent.removeChild(r,"ignore")}else if(e.type==="root"&&this.type!=="document"){e=e.nodes.slice(0);for(let r of e)r.parent&&r.parent.removeChild(r,"ignore")}else if(e.type)e=[e];else if(e.prop){if(typeof e.value>"u")throw new Error("Value field is missed in node creation");typeof e.value!="string"&&(e.value=String(e.value)),e=[new Zi(e)]}else if(e.selector||e.selectors)e=[new vn(e)];else if(e.name)e=[new Tn(e)];else if(e.text)e=[new Yi(e)];else throw new Error("Unknown node type in node creation");return e.map(r=>(r[er]||t.rebuild(r),r=r.proxyOf,r.parent&&r.parent.removeChild(r),r[Xi]&&rr(r),r.raws||(r.raws={}),typeof r.raws.before>"u"&&n&&typeof n.raws.before<"u"&&(r.raws.before=n.raws.before.replace(/\\S/g,"")),r.parent=this.proxyOf,r))}prepend(...e){e=e.reverse();for(let n of e){let i=this.normalize(n,this.first,"prepend").reverse();for(let r of i)this.proxyOf.nodes.unshift(r);for(let r in this.indexes)this.indexes[r]=this.indexes[r]+i.length}return this.markDirty(),this}push(e){return e.parent=this,this.proxyOf.nodes.push(e),this}removeAll(){for(let e of this.proxyOf.nodes)e.parent=void 0;return this.proxyOf.nodes=[],this.markDirty(),this}removeChild(e){e=this.index(e),this.proxyOf.nodes[e].parent=void 0,this.proxyOf.nodes.splice(e,1);let n;for(let i in this.indexes)n=this.indexes[i],n>=e&&(this.indexes[i]=n-1);return this.markDirty(),this}replaceValues(e,n,i){return i||(i=n,n={}),this.walkDecls(r=>{n.props&&!n.props.includes(r.prop)||n.fast&&!r.value.includes(n.fast)||(r.value=r.value.replace(e,i))}),this.markDirty(),this}some(e){return this.nodes.some(e)}walk(e){return this.each((n,i)=>{let r;try{r=e(n,i)}catch(o){throw n.addToError(o)}return r!==!1&&n.walk&&(r=n.walk(e)),r})}walkAtRules(e,n){return n?e instanceof RegExp?this.walk((i,r)=>{if(i.type==="atrule"&&e.test(i.name))return n(i,r)}):this.walk((i,r)=>{if(i.type==="atrule"&&i.name===e)return n(i,r)}):(n=e,this.walk((i,r)=>{if(i.type==="atrule")return n(i,r)}))}walkComments(e){return this.walk((n,i)=>{if(n.type==="comment")return e(n,i)})}walkDecls(e,n){return n?e instanceof RegExp?this.walk((i,r)=>{if(i.type==="decl"&&e.test(i.prop))return n(i,r)}):this.walk((i,r)=>{if(i.type==="decl"&&i.prop===e)return n(i,r)}):(n=e,this.walk((i,r)=>{if(i.type==="decl")return n(i,r)}))}walkRules(e,n){return n?e instanceof RegExp?this.walk((i,r)=>{if(i.type==="rule"&&e.test(i.selector))return n(i,r)}):this.walk((i,r)=>{if(i.type==="rule"&&i.selector===e)return n(i,r)}):(n=e,this.walk((i,r)=>{if(i.type==="rule")return n(i,r)}))}};_e.registerParse=t=>{tr=t};_e.registerRule=t=>{vn=t};_e.registerAtRule=t=>{Tn=t};_e.registerRoot=t=>{nr=t};or.exports=_e;_e.default=_e;_e.rebuild=t=>{t.type==="atrule"?Object.setPrototypeOf(t,Tn.prototype):t.type==="rule"?Object.setPrototypeOf(t,vn.prototype):t.type==="decl"?Object.setPrototypeOf(t,Zi.prototype):t.type==="comment"?Object.setPrototypeOf(t,Yi.prototype):t.type==="root"&&Object.setPrototypeOf(t,nr.prototype),t[er]=!0,t.nodes&&t.nodes.forEach(e=>{_e.rebuild(e)})}});var Ut=Z((Fc,ar)=>{"use strict";var sr=qe(),nt=class extends sr{constructor(e){super(e),this.type="atrule"}append(...e){return this.proxyOf.nodes||(this.nodes=[]),super.append(...e)}prepend(...e){return this.proxyOf.nodes||(this.nodes=[]),super.prepend(...e)}};ar.exports=nt;nt.default=nt;sr.registerAtRule(nt)});var zt=Z((wc,cr)=>{"use strict";var Vs=qe(),lr,ur,Ze=class extends Vs{constructor(e){super({type:"document",...e}),this.nodes||(this.nodes=[])}toResult(e={}){return new lr(new ur,this,e).stringify()}};Ze.registerLazyResult=t=>{lr=t};Ze.registerProcessor=t=>{ur=t};cr.exports=Ze;Ze.default=Ze});var fr=Z((Nc,dr)=>{var Us="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict",zs=(t,e=21)=>(n=e)=>{let i="",r=n|0;for(;r--;)i+=t[Math.random()*t.length|0];return i},js=(t=21)=>{let e="",n=t|0;for(;n--;)e+=Us[Math.random()*64|0];return e};dr.exports={nanoid:js,customAlphabet:zs}});var jt=Z(()=>{});var $t=Z(()=>{});var _n=Z(()=>{});var mr=Z(()=>{});var Ln=Z((Dc,xr)=>{"use strict";var{existsSync:$s,readFileSync:Gs}=mr(),{dirname:Rn,join:Ks}=jt(),{SourceMapConsumer:pr,SourceMapGenerator:hr}=$t();function Js(t){return Buffer?Buffer.from(t,"base64").toString():window.atob(t)}var kt=class{constructor(e,n){if(n.map===!1)return;n.unsafeMap&&(this.unsafeMap=!0),this.loadAnnotation(e),this.inline=this.startWith(this.annotation,"data:");let i=n.map?n.map.prev:void 0,r=this.loadMap(n.from,i);!this.mapFile&&n.from&&(this.mapFile=n.from),this.mapFile&&(this.root=Rn(this.mapFile)),r&&(this.text=r)}consumer(){return this.consumerCache||(this.consumerCache=new pr(this.json||this.text)),this.consumerCache}decodeInline(e){let n=/^data:application\\/json;charset=utf-?8;base64,/,i=/^data:application\\/json;base64,/,r=/^data:application\\/json;charset=utf-?8,/,o=/^data:application\\/json,/,s=e.match(r)||e.match(o);if(s)return decodeURIComponent(e.substr(s[0].length));let l=e.match(n)||e.match(i);if(l)return Js(e.substr(l[0].length));let a=e.slice(22);throw a=a.slice(0,a.indexOf(",")),new Error("Unsupported source map encoding "+a)}getAnnotationURL(e){return e.replace(/^\\/\\*\\s*# sourceMappingURL=/,"").trim()}isMap(e){return typeof e!="object"?!1:typeof e.mappings=="string"||typeof e._mappings=="string"||Array.isArray(e.sections)}loadAnnotation(e){let n=e.match(/\\/\\*\\s*# sourceMappingURL=/g);if(!n)return;let i=e.lastIndexOf(n.pop()),r=e.indexOf("*/",i);i>-1&&r>-1&&(this.annotation=this.getAnnotationURL(e.substring(i,r)))}loadFile(e,n,i){if(!(!i&&!this.unsafeMap&&!/\\.map$/i.test(e))&&(this.root=Rn(e),$s(e)))return this.mapFile=e,Gs(e,"utf-8").toString().trim()}loadMap(e,n){if(n===!1)return!1;if(n){if(typeof n=="string")return n;if(typeof n=="function"){let i=n(e);if(i){let r=this.loadFile(i,e,!0);if(!r)throw new Error("Unable to load previous source map: "+i.toString());return r}}else{if(n instanceof pr)return hr.fromSourceMap(n).toString();if(n instanceof hr)return n.toString();if(this.isMap(n))return JSON.stringify(n);throw new Error("Unsupported previous source map format: "+n.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){let i=this.annotation;e&&(i=Ks(Rn(e),i));let r=this.loadFile(i,e,!1);if(r)try{this.json=JSON.parse(r.replace(/^\\)]}\'[^\\n]*\\n/,""))}catch{return}return r}}}startWith(e,n){return e?e.substr(0,n.length)===n:!1}withContent(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)}};xr.exports=kt;kt.default=kt});var Tt=Z((Bc,Ar)=>{"use strict";var{nanoid:Qs}=fr(),{isAbsolute:In,resolve:On}=jt(),{SourceMapConsumer:Ys,SourceMapGenerator:Zs}=$t(),{fileURLToPath:gr,pathToFileURL:Gt}=_n(),yr=qt(),Xs=Ln(),Dn=wn(),Bn=Symbol("lineToIndexCache"),ea=!!(Ys&&Zs),Sr=!!(On&&In);function br(t){if(t[Bn])return t[Bn];let e=t.css.split(`\n`),n=new Array(e.length),i=0;for(let r=0,o=e.length;r<o;r++)n[r]=i,i+=e[r].length+1;return t[Bn]=n,n}var it=class{get from(){return this.file||this.id}constructor(e,n={}){if(e===null||typeof e>"u"||typeof e=="object"&&!e.toString)throw new Error(`PostCSS received ${e} instead of CSS string`);if(this.css=e.toString(),this.css[0]==="\\uFEFF"||this.css[0]==="\\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,this.document=this.css,n.document&&(this.document=n.document.toString()),n.from&&(!Sr||/^\\w+:\\/\\//.test(n.from)||In(n.from)?this.file=n.from:this.file=On(n.from)),Sr&&ea){let i=new Xs(this.css,n);if(i.text){this.map=i;let r=i.consumer().file;!this.file&&r&&(this.file=this.mapResolve(r))}}this.file||(this.id="<input css "+Qs(6)+">"),this.map&&(this.map.file=this.from)}error(e,n,i,r={}){let o,s,l,a,c;if(n&&typeof n=="object"){let m=n,f=i;if(typeof m.offset=="number"){a=m.offset;let x=this.fromOffset(a);n=x.line,i=x.col}else n=m.line,i=m.column,a=this.fromLineAndColumn(n,i);if(typeof f.offset=="number"){l=f.offset;let x=this.fromOffset(l);s=x.line,o=x.col}else s=f.line,o=f.column,l=this.fromLineAndColumn(f.line,f.column)}else if(i)a=this.fromLineAndColumn(n,i);else{a=n;let m=this.fromOffset(a);n=m.line,i=m.col}let u=this.origin(n,i,s,o);return u?c=new yr(e,u.endLine===void 0?u.line:{column:u.column,line:u.line},u.endLine===void 0?u.column:{column:u.endColumn,line:u.endLine},u.source,u.file,r.plugin):c=new yr(e,s===void 0?n:{column:i,line:n},s===void 0?i:{column:o,line:s},this.css,this.file,r.plugin),c.input={column:i,endColumn:o,endLine:s,endOffset:l,line:n,offset:a,source:this.css},this.file&&(Gt&&(c.input.url=Gt(this.file).toString()),c.input.file=this.file),c}fromLineAndColumn(e,n){return br(this)[e-1]+n-1}fromOffset(e){let n=br(this),i=n[n.length-1],r=0;if(e>=i)r=n.length-1;else{let o=n.length-2,s;for(;r<o;)if(s=r+(o-r>>1),e<n[s])o=s-1;else if(e>=n[s+1])r=s+1;else{r=s;break}}return{col:e-n[r]+1,line:r+1}}mapResolve(e){return/^\\w+:\\/\\//.test(e)?e:On(this.map.consumer().sourceRoot||this.map.root||".",e)}origin(e,n,i,r){if(!this.map)return!1;let o=this.map.consumer(),s=o.originalPositionFor({column:n,line:e});if(!s.source)return!1;let l;typeof i=="number"&&(l=o.originalPositionFor({column:r,line:i}));let a;In(s.source)?a=Gt(s.source):a=new URL(s.source,this.map.consumer().sourceRoot||Gt(this.map.mapFile));let c={column:s.column,endColumn:l&&l.column,endLine:l&&l.line,line:s.line,url:a.toString()};if(a.protocol==="file:")if(gr)c.file=gr(a);else throw new Error("file: protocol is not available in this PostCSS build");let u=o.sourceContentFor(s.source);return u&&(c.source=u),c}toJSON(){let e={};for(let n of["hasBOM","css","file","id"])this[n]!=null&&(e[n]=this[n]);return this.map&&(e.map={...this.map},e.map.consumerCache&&(e.map.consumerCache=void 0)),e}};Ar.exports=it;it.default=it;Dn&&Dn.registerInput&&Dn.registerInput(it)});var rt=Z((Ic,Nr)=>{"use strict";var Er=qe(),Fr,wr,Ve=class extends Er{constructor(e){super(e),this.type="root",this.nodes||(this.nodes=[])}normalize(e,n,i){let r=super.normalize(e);if(n){if(i==="prepend")this.nodes.length>1?n.raws.before=this.nodes[1].raws.before:delete n.raws.before;else if(this.first!==n)for(let o of r)o.raws.before=n.raws.before}return r}removeChild(e,n){let i=this.index(e);return!n&&i===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[i].raws.before),super.removeChild(e)}toResult(e={}){return new Fr(new wr,this,e).stringify()}};Ve.registerLazyResult=t=>{Fr=t};Ve.registerProcessor=t=>{wr=t};Nr.exports=Ve;Ve.default=Ve;Er.registerRoot(Ve)});var Pn=Z((Oc,Cr)=>{"use strict";var vt={comma(t){return vt.split(t,[","],!0)},space(t){let e=[" ",`\n`," "];return vt.split(t,e)},split(t,e,n){let i=[],r="",o=!1,s=0,l=!1,a="",c=!1;for(let u of t)c?c=!1:u==="\\\\"?c=!0:l?u===a&&(l=!1):u===\'"\'||u==="\'"?(l=!0,a=u):u==="("?s+=1:u===")"?s>0&&(s-=1):s===0&&e.includes(u)&&(o=!0),o?(r!==""&&i.push(r.trim()),r="",o=!1):r+=u;return(n||r!=="")&&i.push(r.trim()),i}};Cr.exports=vt;vt.default=vt});var Kt=Z((Pc,kr)=>{"use strict";var Mr=qe(),ta=Pn(),ot=class extends Mr{get selectors(){return ta.comma(this.selector)}set selectors(e){let n=this.selector?this.selector.match(/,\\s*/):null,i=n?n[0]:","+this.raw("between","beforeOpen");this.selector=e.join(i)}constructor(e){super(e),this.type="rule",this.nodes||(this.nodes=[])}};kr.exports=ot;ot.default=ot;Mr.registerRule(ot)});var vr=Z((Wc,Tr)=>{"use strict";var na=Ut(),ia=Nt(),ra=Mt(),oa=Tt(),sa=Ln(),aa=rt(),la=Kt();function _t(t,e){if(Array.isArray(t))return t.map(r=>_t(r));let{inputs:n,...i}=t;if(n){e=[];for(let r of n){let o={...r,__proto__:oa.prototype};o.map&&(o.map={...o.map,__proto__:sa.prototype}),e.push(o)}}if(i.nodes&&(i.nodes=t.nodes.map(r=>_t(r,e))),i.source){let{inputId:r,...o}=i.source;i.source=o,r!=null&&(i.source.input=e[r])}if(i.type==="root")return new aa(i);if(i.type==="decl")return new ra(i);if(i.type==="rule")return new la(i);if(i.type==="comment")return new ia(i);if(i.type==="atrule")return new na(i);throw new Error("Unknown node type: "+t.type)}Tr.exports=_t;_t.default=_t});var Hn=Z((Hc,Ir)=>{"use strict";var{dirname:Jt,relative:Rr,resolve:Lr,sep:Dr}=jt(),{SourceMapConsumer:Br,SourceMapGenerator:Qt}=$t(),{pathToFileURL:_r}=_n(),ua=Tt(),ca=!!(Br&&Qt),da=!!(Jt&&Lr&&Rr&&Dr),Wn=class{constructor(e,n,i,r){this.stringify=e,this.mapOpts=i.map||{},this.root=n,this.opts=i,this.css=r,this.originalCSS=r,this.usesFileUrls=!this.mapOpts.from&&this.mapOpts.absolute,this.memoizedFileURLs=new Map,this.memoizedPaths=new Map,this.memoizedURLs=new Map}addAnnotation(){let e;this.isInline()?e="data:application/json;base64,"+this.toBase64(this.map.toString()):typeof this.mapOpts.annotation=="string"?e=this.mapOpts.annotation:typeof this.mapOpts.annotation=="function"?e=this.mapOpts.annotation(this.opts.to,this.root):e=this.outputFile()+".map";let n=`\n`;this.css.includes(`\\r\n`)&&(n=`\\r\n`),this.css+=n+"/*# sourceMappingURL="+e+" */"}applyPrevMaps(){for(let e of this.previous()){let n=this.toUrl(this.path(e.file)),i=e.root||Jt(e.file),r;this.mapOpts.sourcesContent===!1?(r=new Br(e.text),r.sourcesContent&&(r.sourcesContent=null)):r=e.consumer(),this.map.applySourceMap(r,n,this.toUrl(this.path(i)))}}clearAnnotation(){if(this.mapOpts.annotation!==!1){if(this.root){let e;for(let n=this.root.nodes.length-1;n>=0;n--)e=this.root.nodes[n],e.type==="comment"&&e.text.startsWith("# sourceMappingURL=")&&this.root.removeChild(n)}else if(this.css){let e;for(;(e=this.css.lastIndexOf("/*#"))!==-1;){let n=this.css.indexOf("*/",e+3);if(n===-1)break;for(;e>0&&this.css[e-1]===`\n`;)e--;this.css=this.css.slice(0,e)+this.css.slice(n+2)}}}}generate(){if(this.clearAnnotation(),da&&ca&&this.isMap())return this.generateMap();{let e="";return this.stringify(this.root,n=>{e+=n}),[e]}}generateMap(){if(this.root)this.generateString();else if(this.previous().length===1){let e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=Qt.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new Qt({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):"<no source>"});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]}generateString(){this.css="",this.map=new Qt({file:this.outputFile(),ignoreInvalidMapping:!0});let e=1,n=1,i="<no source>",r={generated:{column:0,line:0},original:{column:0,line:0},source:""},o,s;this.stringify(this.root,(l,a,c)=>{if(this.css+=l,a&&c!=="end"&&(r.generated.line=e,r.generated.column=n-1,a.source&&a.source.start?(r.source=this.sourcePath(a),r.original.line=a.source.start.line,r.original.column=a.source.start.column-1,this.map.addMapping(r)):(r.source=i,r.original.line=1,r.original.column=0,this.map.addMapping(r))),s=l.match(/\\n/g),s?(e+=s.length,o=l.lastIndexOf(`\n`),n=l.length-o):n+=l.length,a&&c!=="start"){let u=a.parent||{raws:{}};(!(a.type==="decl"||a.type==="atrule"&&!a.nodes)||a!==u.last||u.raws.semicolon)&&(a.source&&a.source.end?(r.source=this.sourcePath(a),r.original.line=a.source.end.line,r.original.column=a.source.end.column-1,r.generated.line=e,r.generated.column=n-2,this.map.addMapping(r)):(r.source=i,r.original.line=1,r.original.column=0,r.generated.line=e,r.generated.column=n-1,this.map.addMapping(r)))}})}isAnnotation(){return this.isInline()?!0:typeof this.mapOpts.annotation<"u"?this.mapOpts.annotation:this.previous().length?this.previous().some(e=>e.annotation):!0}isInline(){if(typeof this.mapOpts.inline<"u")return this.mapOpts.inline;let e=this.mapOpts.annotation;return typeof e<"u"&&e!==!0?!1:this.previous().length?this.previous().some(n=>n.inline):!0}isMap(){return typeof this.opts.map<"u"?!!this.opts.map:this.previous().length>0}isSourcesContent(){return typeof this.mapOpts.sourcesContent<"u"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(e=>e.withContent()):!0}outputFile(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"}path(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\\w+:\\/\\//.test(e))return e;let n=this.memoizedPaths.get(e);if(n)return n;let i=this.opts.to?Jt(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(i=Jt(Lr(i,this.mapOpts.annotation)));let r=Rr(i,e);return this.memoizedPaths.set(e,r),r}previous(){if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(e=>{if(e.source&&e.source.input.map){let n=e.source.input.map;this.previousMaps.includes(n)||this.previousMaps.push(n)}});else{let e=new ua(this.originalCSS,this.opts);e.map&&this.previousMaps.push(e.map)}return this.previousMaps}setSourcesContent(){let e={};if(this.root)this.root.walk(n=>{if(n.source){let i=n.source.input.from;if(i&&!e[i]){e[i]=!0;let r=this.usesFileUrls?this.toFileUrl(i):this.toUrl(this.path(i));this.map.setSourceContent(r,n.source.input.css)}}});else if(this.css){let n=this.opts.from?this.toUrl(this.path(this.opts.from)):"<no source>";this.map.setSourceContent(n,this.css)}}sourcePath(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))}toBase64(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))}toFileUrl(e){let n=this.memoizedFileURLs.get(e);if(n)return n;if(_r){let i=_r(e).toString();return this.memoizedFileURLs.set(e,i),i}else throw new Error("`map.absolute` option is not available in this PostCSS build")}toUrl(e){let n=this.memoizedURLs.get(e);if(n)return n;Dr==="\\\\"&&(e=e.replace(/\\\\/g,"/"));let i=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,i),i}};Ir.exports=Wn});var Wr=Z((qc,Pr)=>{"use strict";var Yt=/[\\t\\n\\f\\r "#\'()/;[\\\\\\]{}]/g,Zt=/[\\t\\n\\f\\r !"#\'():;@[\\\\\\]{}]|\\/(?=\\*)/g,fa=/.[\\r\\n"\'(/\\\\]/,Or=/[\\da-f]/i;Pr.exports=function(e,n={}){let i=e.css.valueOf(),r=n.ignoreErrors,o,s,l,a,c,u,m,f,x,F,E=i.length,S=0,B=[],D=[],v=-1;function X(){return S}function q(N){throw e.error("Unclosed "+N,S)}function C(){return D.length===0&&S>=E}function g(N){if(D.length)return D.pop();if(S>=E)return;let w=N?N.ignoreUnclosed:!1;switch(o=i.charCodeAt(S),o){case 10:case 32:case 9:case 13:case 12:{a=S;do a+=1,o=i.charCodeAt(a);while(o===32||o===10||o===9||o===13||o===12);u=["space",i.slice(S,a)],S=a-1;break}case 91:case 93:case 123:case 125:case 58:case 59:case 41:{let M=String.fromCharCode(o);u=[M,M,S];break}case 40:{if(F=B.length?B.pop()[1]:"",x=i.charCodeAt(S+1),F==="url"&&x!==39&&x!==34&&x!==32&&x!==10&&x!==9&&x!==12&&x!==13){a=S;do{if(m=!1,a=i.indexOf(")",a+1),a===-1)if(r||w){a=S;break}else q("bracket");for(f=a;i.charCodeAt(f-1)===92;)f-=1,m=!m}while(m);u=["brackets",i.slice(S,a+1),S,a],S=a}else S<=v?u=["(","(",S]:(a=i.indexOf(")",S+1),s=i.slice(S,a+1),a===-1||fa.test(s)?(v=a===-1?E:a,u=["(","(",S]):(u=["brackets",s,S,a],S=a));break}case 39:case 34:{c=o===39?"\'":\'"\',a=S;do{if(m=!1,a=i.indexOf(c,a+1),a===-1)if(r||w){a=S+1;break}else q("string");for(f=a;i.charCodeAt(f-1)===92;)f-=1,m=!m}while(m);u=["string",i.slice(S,a+1),S,a],S=a;break}case 64:{Yt.lastIndex=S+1,Yt.test(i),Yt.lastIndex===0?a=i.length-1:a=Yt.lastIndex-2,u=["at-word",i.slice(S,a+1),S,a],S=a;break}case 92:{for(a=S,l=!0;i.charCodeAt(a+1)===92;)a+=1,l=!l;if(o=i.charCodeAt(a+1),l&&o!==47&&o!==32&&o!==10&&o!==9&&o!==13&&o!==12&&(a+=1,Or.test(i.charAt(a)))){for(;Or.test(i.charAt(a+1));)a+=1;i.charCodeAt(a+1)===32&&(a+=1)}u=["word",i.slice(S,a+1),S,a],S=a;break}default:{o===47&&i.charCodeAt(S+1)===42?(a=i.indexOf("*/",S+2)+1,a===0&&(r||w?a=i.length:q("comment")),u=["comment",i.slice(S,a+1),S,a],S=a):(Zt.lastIndex=S+1,Zt.test(i),Zt.lastIndex===0?a=i.length-1:a=Zt.lastIndex-2,u=["word",i.slice(S,a+1),S,a],B.push(u),S=a);break}}return S++,u}function A(N){D.push(N)}return{back:A,endOfFile:C,nextToken:g,position:X}}});var Ur=Z((Vc,Vr)=>{"use strict";var ma=Ut(),pa=Nt(),ha=Mt(),xa=rt(),Hr=Kt(),ga=Wr(),qr={empty:!0,space:!0};function ya(t){for(let e=t.length-1;e>=0;e--){let n=t[e],i=n[3]||n[2];if(i)return i}}var qn=class{constructor(e){this.input=e,this.root=new xa,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:e,start:{column:1,line:1,offset:0}}}atrule(e){let n=new ma;n.name=e[1].slice(1),n.name===""&&this.unnamedAtrule(n,e),this.init(n,e[2]);let i,r,o,s=!1,l=!1,a=[],c=[];for(;!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),i=e[0],i==="("||i==="["?c.push(i==="("?")":"]"):i==="{"&&c.length>0?c.push("}"):i===c[c.length-1]&&c.pop(),c.length===0)if(i===";"){n.source.end=this.getPosition(e[2]),n.source.end.offset++,this.semicolon=!0;break}else if(i==="{"){l=!0;break}else if(i==="}"){if(a.length>0){for(o=a.length-1,r=a[o];r&&r[0]==="space";)r=a[--o];r&&(n.source.end=this.getPosition(r[3]||r[2]),n.source.end.offset++)}this.end(e);break}else a.push(e);else a.push(e);if(this.tokenizer.endOfFile()){s=!0;break}}n.raws.between=this.spacesAndCommentsFromEnd(a),a.length?(n.raws.afterName=this.spacesAndCommentsFromStart(a),this.raw(n,"params",a),s&&(e=a[a.length-1],n.source.end=this.getPosition(e[3]||e[2]),n.source.end.offset++,this.spaces=n.raws.between,n.raws.between="")):(n.raws.afterName="",n.params=""),l&&(n.nodes=[],this.current=n)}checkMissedSemicolon(e){let n=this.colon(e);if(n===!1)return;let i=0,r;for(let o=n-1;o>=0&&(r=e[o],!(r[0]!=="space"&&(i+=1,i===2)));o--);throw this.input.error("Missed semicolon",r[0]==="word"?r[3]+1:r[2])}colon(e){let n=0,i,r,o;for(let[s,l]of e.entries()){if(r=l,o=r[0],o==="("&&(n+=1),o===")"&&(n-=1),n===0&&o===":")if(!i)this.doubleColon(r);else{if(i[0]==="word"&&i[1]==="progid")continue;return s}i=r}return!1}comment(e){let n=new pa;this.init(n,e[2]),n.source.end=this.getPosition(e[3]||e[2]),n.source.end.offset++;let i=e[1].slice(2,-2);if(!i.trim())n.text="",n.raws.left=i,n.raws.right="";else{let r=i.match(/^(\\s*)([^]*\\S)(\\s*)$/);n.text=r[2],n.raws.left=r[1],n.raws.right=r[3]}}createTokenizer(){this.tokenizer=ga(this.input)}decl(e,n){let i=new ha;this.init(i,e[0][2]);let r=e[e.length-1];for(r[0]===";"&&(this.semicolon=!0,e.pop()),i.source.end=this.getPosition(r[3]||r[2]||ya(e)),i.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),i.raws.before+=e.shift()[1];for(i.source.start=this.getPosition(e[0][2]),i.prop="";e.length;){let c=e[0][0];if(c===":"||c==="space"||c==="comment")break;i.prop+=e.shift()[1]}i.raws.between="";let o;for(;e.length;)if(o=e.shift(),o[0]===":"){i.raws.between+=o[1];break}else o[0]==="word"&&/\\w/.test(o[1])&&this.unknownWord([o]),i.raws.between+=o[1];(i.prop[0]==="_"||i.prop[0]==="*")&&(i.raws.before+=i.prop[0],i.prop=i.prop.slice(1));let s=[],l;for(;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)s.push(e.shift());this.precheckMissedSemicolon(e);for(let c=e.length-1;c>=0;c--){if(o=e[c],o[1].toLowerCase()==="!important"){i.important=!0;let u=this.stringFrom(e,c);u=this.spacesFromEnd(e)+u,u!==" !important"&&(i.raws.important=u);break}else if(o[1].toLowerCase()==="important"){let u=e.slice(0),m="";for(let f=c;f>0;f--){let x=u[f][0];if(m.trim().startsWith("!")&&x!=="space")break;m=u.pop()[1]+m}m.trim().startsWith("!")&&(i.important=!0,i.raws.important=m,e=u)}if(o[0]!=="space"&&o[0]!=="comment")break}e.some(c=>c[0]!=="space"&&c[0]!=="comment")&&(i.raws.between+=s.map(c=>c[1]).join(""),s=[]),this.raw(i,"value",s.concat(e),n),i.value.includes(":")&&!n&&this.checkMissedSemicolon(e)}doubleColon(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})}emptyRule(e){let n=new Hr;this.init(n,e[2]),n.selector="",n.raws.between="",this.current=n}end(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)}endFile(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())}freeSemicolon(e){if(this.spaces+=e[1],this.current.nodes){let n=this.current.nodes[this.current.nodes.length-1];n&&n.type==="rule"&&!n.raws.ownSemicolon&&(n.raws.ownSemicolon=this.spaces,this.spaces="",n.source.end=this.getPosition(e[2]),n.source.end.offset+=n.raws.ownSemicolon.length)}}getPosition(e){let n=this.input.fromOffset(e);return{column:n.col,line:n.line,offset:e}}init(e,n){this.current.push(e),e.source={input:this.input,start:this.getPosition(n)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)}other(e){let n=!1,i=null,r=!1,o=null,s=[],l=e[1].startsWith("--"),a=[],c=e;for(;c;){if(i=c[0],a.push(c),i==="("||i==="[")o||(o=c),s.push(i==="("?")":"]");else if(l&&r&&i==="{")o||(o=c),s.push("}");else if(s.length===0)if(i===";")if(r){this.decl(a,l);return}else break;else if(i==="{"){this.rule(a);return}else if(i==="}"){this.tokenizer.back(a.pop()),n=!0;break}else i===":"&&(r=!0);else i===s[s.length-1]&&(s.pop(),s.length===0&&(o=null));c=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(n=!0),s.length>0&&this.unclosedBracket(o),n&&r){if(!l)for(;a.length&&(c=a[a.length-1][0],!(c!=="space"&&c!=="comment"));)this.tokenizer.back(a.pop());this.decl(a,l)}else this.unknownWord(a)}parse(){let e;for(;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()}precheckMissedSemicolon(){}raw(e,n,i,r){let o,s,l=i.length,a="",c=!0,u,m;for(let f=0;f<l;f+=1)o=i[f],s=o[0],s==="space"&&f===l-1&&!r?c=!1:s==="comment"?(m=i[f-1]?i[f-1][0]:"empty",u=i[f+1]?i[f+1][0]:"empty",!qr[m]&&!qr[u]?a.slice(-1)===","?c=!1:a+=o[1]:c=!1):a+=o[1];if(!c){let f=i.reduce((x,F)=>x+F[1],"");e.raws[n]={raw:f,value:a}}e[n]=a}rule(e){e.pop();let n=new Hr;this.init(n,e[0][2]),n.raws.between=this.spacesAndCommentsFromEnd(e),this.raw(n,"selector",e),this.current=n}spacesAndCommentsFromEnd(e){let n,i="";for(;e.length&&(n=e[e.length-1][0],!(n!=="space"&&n!=="comment"));)i=e.pop()[1]+i;return i}spacesAndCommentsFromStart(e){let n,i="";for(;e.length&&(n=e[0][0],!(n!=="space"&&n!=="comment"));)i+=e.shift()[1];return i}spacesFromEnd(e){let n,i="";for(;e.length&&(n=e[e.length-1][0],n==="space");)i=e.pop()[1]+i;return i}stringFrom(e,n){let i="";for(let r=n;r<e.length;r++)i+=e[r][1];return e.splice(n,e.length-n),i}unclosedBlock(){let e=this.current.source.start;throw this.input.error("Unclosed block",e.line,e.column)}unclosedBracket(e){throw this.input.error("Unclosed bracket",{offset:e[2]},{offset:e[2]+1})}unexpectedClose(e){throw this.input.error("Unexpected }",{offset:e[2]},{offset:e[2]+1})}unknownWord(e){throw this.input.error("Unknown word "+e[0][1],{offset:e[0][2]},{offset:e[0][2]+e[0][1].length})}unnamedAtrule(e,n){throw this.input.error("At-rule without name",{offset:n[2]},{offset:n[2]+n[1].length})}};Vr.exports=qn});var en=Z((Uc,zr)=>{"use strict";var Sa=qe(),ba=Tt(),Aa=Ur();function Xt(t,e){let n=new ba(t,e),i=new Aa(n);try{i.parse()}catch(r){throw r}return i.root}zr.exports=Xt;Xt.default=Xt;Sa.registerParse(Xt)});var Vn=Z((zc,jr)=>{"use strict";var Rt=class{constructor(e,n={}){if(this.type="warning",this.text=e,n.node&&n.node.source){let i=n.node.rangeBy(n);this.line=i.start.line,this.column=i.start.column,this.endLine=i.end.line,this.endColumn=i.end.column}for(let i in n)this[i]=n[i]}toString(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text}};jr.exports=Rt;Rt.default=Rt});var tn=Z((jc,$r)=>{"use strict";var Ea=Vn(),Lt=class{get content(){return this.css}constructor(e,n,i){this.processor=e,this.messages=[],this.root=n,this.opts=i,this.css="",this.map=void 0}toString(){return this.css}warn(e,n={}){n.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(n.plugin=this.lastPlugin.postcssPlugin);let i=new Ea(e,n);return this.messages.push(i),i}warnings(){return this.messages.filter(e=>e.type==="warning")}};$r.exports=Lt;Lt.default=Lt});var Un=Z(($c,Kr)=>{"use strict";var Gr={};Kr.exports=function(e){Gr[e]||(Gr[e]=!0,typeof console<"u"&&console.warn&&console.warn(e))}});var $n=Z((Kc,Zr)=>{"use strict";var Fa=qe(),wa=zt(),Na=Hn(),Ca=en(),Jr=tn(),Ma=rt(),ka=bt(),{isClean:Be,my:Ta}=Vt(),Gc=Un(),va={atrule:"AtRule",comment:"Comment",decl:"Declaration",document:"Document",root:"Root",rule:"Rule"},_a={AtRule:!0,AtRuleExit:!0,Comment:!0,CommentExit:!0,Declaration:!0,DeclarationExit:!0,Document:!0,DocumentExit:!0,Once:!0,OnceExit:!0,postcssPlugin:!0,prepare:!0,Root:!0,RootExit:!0,Rule:!0,RuleExit:!0},Ra={Once:!0,postcssPlugin:!0,prepare:!0},st=0;function Dt(t){return typeof t=="object"&&typeof t.then=="function"}function Yr(t){let e=!1,n=va[t.type];return t.type==="decl"?e=t.prop.toLowerCase():t.type==="atrule"&&(e=t.name.toLowerCase()),e&&t.append?[n,n+"-"+e,st,n+"Exit",n+"Exit-"+e]:e?[n,n+"-"+e,n+"Exit",n+"Exit-"+e]:t.append?[n,st,n+"Exit"]:[n,n+"Exit"]}function Qr(t){let e;return t.type==="document"?e=["Document",st,"DocumentExit"]:t.type==="root"?e=["Root",st,"RootExit"]:e=Yr(t),{eventIndex:0,events:e,iterator:0,node:t,visitorIndex:0,visitors:[]}}function zn(t){return t[Be]=!1,t.nodes&&t.nodes.forEach(e=>zn(e)),t}var jn={},Ue=class t{get content(){return this.stringify().content}get css(){return this.stringify().css}get map(){return this.stringify().map}get messages(){return this.sync().messages}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){return this.sync().root}get[Symbol.toStringTag](){return"LazyResult"}constructor(e,n,i){this.stringified=!1,this.processed=!1;let r;if(typeof n=="object"&&n!==null&&(n.type==="root"||n.type==="document"))r=zn(n);else if(n instanceof t||n instanceof Jr)r=zn(n.root),n.map&&(typeof i.map>"u"&&(i.map={}),i.map.inline||(i.map.inline=!1),i.map.prev=n.map);else{let o=Ca;i.syntax&&(o=i.syntax.parse),i.parser&&(o=i.parser),o.parse&&(o=o.parse);try{r=o(n,i)}catch(s){this.processed=!0,this.error=s}r&&!r[Ta]&&Fa.rebuild(r)}this.result=new Jr(e,r,i),this.helpers={...jn,postcss:jn,result:this.result},this.plugins=this.processor.plugins.map(o=>typeof o=="object"&&o.prepare?{...o,...o.prepare(this.result)}:o)}async(){return this.error?Promise.reject(this.error):this.processed?Promise.resolve(this.result):(this.processing||(this.processing=this.runAsync()),this.processing)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}getAsyncError(){throw new Error("Use process(css).then(cb) to work with async plugins")}handleError(e,n){let i=this.result.lastPlugin;try{n&&n.addToError(e),this.error=e,e.name==="CssSyntaxError"&&!e.plugin?(e.plugin=i.postcssPlugin,e.setMessage()):i.postcssVersion}catch(r){console&&console.error&&console.error(r)}return e}prepareVisitors(){this.listeners={};let e=(n,i,r)=>{this.listeners[i]||(this.listeners[i]=[]),this.listeners[i].push([n,r])};for(let n of this.plugins)if(typeof n=="object")for(let i in n){if(!_a[i]&&/^[A-Z]/.test(i))throw new Error(`Unknown event ${i} in ${n.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`);if(!Ra[i])if(typeof n[i]=="object")for(let r in n[i])r==="*"?e(n,i,n[i][r]):e(n,i+"-"+r.toLowerCase(),n[i][r]);else typeof n[i]=="function"&&e(n,i,n[i])}this.hasListener=Object.keys(this.listeners).length>0}async runAsync(){this.plugin=0;for(let e=0;e<this.plugins.length;e++){let n=this.plugins[e],i=this.runOnRoot(n);if(Dt(i))try{await i}catch(r){throw this.handleError(r)}}if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[Be];){e[Be]=!0;let n=[Qr(e)];for(;n.length>0;){let i=this.visitTick(n);if(Dt(i))try{await i}catch(r){let o=n[n.length-1].node;throw this.handleError(r,o)}}}if(this.listeners.OnceExit)for(let[n,i]of this.listeners.OnceExit){this.result.lastPlugin=n;try{if(e.type==="document"){let r=e.nodes.map(o=>i(o,this.helpers));await Promise.all(r)}else await i(e,this.helpers)}catch(r){throw this.handleError(r)}}}return this.processed=!0,this.stringify()}runOnRoot(e){this.result.lastPlugin=e;try{if(typeof e=="object"&&e.Once){if(this.result.root.type==="document"){let n=this.result.root.nodes.map(i=>e.Once(i,this.helpers));return Dt(n[0])?Promise.all(n):n}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(n){throw this.handleError(n)}}stringify(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();let e=this.result.opts,n=ka;e.syntax&&(n=e.syntax.stringify),e.stringifier&&(n=e.stringifier),n.stringify&&(n=n.stringify);let i=this.result.root.source;if(e.map===void 0&&!(i&&i.input&&i.input.map)){let s="";return n(this.result.root,l=>{s+=l}),this.result.css=s,this.result}let o=new Na(n,this.result.root,this.result.opts).generate();return this.result.css=o[0],this.result.map=o[1],this.result}sync(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(let e of this.plugins){let n=this.runOnRoot(e);if(Dt(n))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[Be];)e[Be]=!0,this.walkSync(e);if(this.listeners.OnceExit)if(e.type==="document")for(let n of e.nodes)this.visitSync(this.listeners.OnceExit,n);else this.visitSync(this.listeners.OnceExit,e)}return this.result}then(e,n){return this.async().then(e,n)}toString(){return this.css}visitSync(e,n){for(let[i,r]of e){this.result.lastPlugin=i;let o;try{o=r(n,this.helpers)}catch(s){throw this.handleError(s,n.proxyOf)}if(n.type!=="root"&&n.type!=="document"&&!n.parent)return!0;if(Dt(o))throw this.getAsyncError()}}visitTick(e){let n=e[e.length-1],{node:i,visitors:r}=n;if(i.type!=="root"&&i.type!=="document"&&!i.parent){e.pop();return}if(r.length>0&&n.visitorIndex<r.length){let[s,l]=r[n.visitorIndex];n.visitorIndex+=1,n.visitorIndex===r.length&&(n.visitors=[],n.visitorIndex=0),this.result.lastPlugin=s;try{return l(i.toProxy(),this.helpers)}catch(a){throw this.handleError(a,i)}}if(n.iterator!==0){let s=n.iterator,l;for(;l=i.nodes[i.indexes[s]];)if(i.indexes[s]+=1,!l[Be]){l[Be]=!0,e.push(Qr(l));return}n.iterator=0,delete i.indexes[s]}let o=n.events;for(;n.eventIndex<o.length;){let s=o[n.eventIndex];if(n.eventIndex+=1,s===st){i.nodes&&i.nodes.length&&(i[Be]=!0,n.iterator=i.getIterator());return}else if(this.listeners[s]){n.visitors=this.listeners[s];return}}e.pop()}walkSync(e){e[Be]=!0;let n=Yr(e);for(let i of n)if(i===st)e.nodes&&e.each(r=>{r[Be]||this.walkSync(r)});else{let r=this.listeners[i];if(r&&this.visitSync(r,e.toProxy()))return}}warnings(){return this.sync().warnings()}};Ue.registerPostcss=t=>{jn=t};Zr.exports=Ue;Ue.default=Ue;Ma.registerLazyResult(Ue);wa.registerLazyResult(Ue)});var eo=Z((Qc,Xr)=>{"use strict";var La=Hn(),Da=en(),Ba=tn(),Ia=bt(),Jc=Un(),Bt=class{get content(){return this.result.css}get css(){return this.result.css}get map(){return this.result.map}get messages(){return[]}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){if(this._root)return this._root;let e,n=Da;try{e=n(this._css,this._opts)}catch(i){this.error=i}if(this.error)throw this.error;return this._root=e,e}get[Symbol.toStringTag](){return"NoWorkResult"}constructor(e,n,i){n=n.toString(),this.stringified=!1,this._processor=e,this._css=n,this._opts=i,this._map=void 0;let r=Ia;this.result=new Ba(this._processor,void 0,this._opts),this.result.css=n;let o=this;Object.defineProperty(this.result,"root",{get(){return o.root}});let s=new La(r,void 0,this._opts,n);if(s.isMap()){let[l,a]=s.generate();l&&(this.result.css=l),a&&(this.result.map=a)}else s.clearAnnotation(),this.result.css=s.css}async(){return this.error?Promise.reject(this.error):Promise.resolve(this.result)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}sync(){if(this.error)throw this.error;return this.result}then(e,n){return this.async().then(e,n)}toString(){return this._css}warnings(){return[]}};Xr.exports=Bt;Bt.default=Bt});var no=Z((Yc,to)=>{"use strict";var Oa=zt(),Pa=$n(),Wa=eo(),Ha=rt(),Xe=class{constructor(e=[]){this.version="8.5.14",this.plugins=this.normalize(e)}normalize(e){let n=[];for(let i of e)if(i.postcss===!0?i=i():i.postcss&&(i=i.postcss),typeof i=="object"&&Array.isArray(i.plugins))n=n.concat(i.plugins);else if(typeof i=="object"&&i.postcssPlugin)n.push(i);else if(typeof i=="function")n.push(i);else if(!(typeof i=="object"&&(i.parse||i.stringify)))throw new Error(i+" is not a PostCSS plugin");return n}process(e,n={}){return!this.plugins.length&&!n.parser&&!n.stringifier&&!n.syntax?new Wa(this,e,n):new Pa(this,e,n)}use(e){return this.plugins=this.plugins.concat(this.normalize([e])),this}};to.exports=Xe;Xe.default=Xe;Ha.registerProcessor(Xe);Oa.registerProcessor(Xe)});var co=Z((Zc,uo)=>{"use strict";var io=Ut(),ro=Nt(),qa=qe(),Va=qt(),oo=Mt(),so=zt(),Ua=vr(),za=Tt(),ja=$n(),$a=Pn(),Ga=Ft(),Ka=en(),Gn=no(),Ja=tn(),ao=rt(),lo=Kt(),Qa=bt(),Ya=Vn();function re(...t){return t.length===1&&Array.isArray(t[0])&&(t=t[0]),new Gn(t)}re.plugin=function(e,n){let i=!1;function r(...s){console&&console.warn&&!i&&(i=!0,console.warn(e+`: postcss.plugin was deprecated. Migration guide:\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration`),process.env.LANG&&process.env.LANG.startsWith("cn")&&console.warn(e+`: \\u91CC\\u9762 postcss.plugin \\u88AB\\u5F03\\u7528. \\u8FC1\\u79FB\\u6307\\u5357:\nhttps://www.w3ctech.com/topic/2226`));let l=n(...s);return l.postcssPlugin=e,l.postcssVersion=new Gn().version,l}let o;return Object.defineProperty(r,"postcss",{get(){return o||(o=r()),o}}),r.process=function(s,l,a){return re([r(a)]).process(s,l)},r};re.stringify=Qa;re.parse=Ka;re.fromJSON=Ua;re.list=$a;re.comment=t=>new ro(t);re.atRule=t=>new io(t);re.decl=t=>new oo(t);re.rule=t=>new lo(t);re.root=t=>new ao(t);re.document=t=>new so(t);re.CssSyntaxError=Va;re.Declaration=oo;re.Container=qa;re.Processor=Gn;re.Document=so;re.Comment=ro;re.Warning=Ya;re.AtRule=io;re.Result=Ja;re.Input=za;re.Rule=lo;re.Root=ao;re.Node=Ga;ja.registerPostcss(re);uo.exports=re;re.default=re});function _(t,e){if(typeof window>"u")return;let n=window,i=n.__hf?.onSwallowed;if(i)try{i({label:t,error:e})}catch(r){}(n.__hfDebug||n.__HYPERFRAMES_DEBUG)&&console.debug(`[hyperframes] ${t} swallowed:`,e)}function Ae(t){try{window.parent.postMessage(t,"*")}catch(e){_("bridge.postMessage",e)}}function hi(t){let e=n=>{let i=n.data;if(!i||i.source!=="hf-parent"||i.type!=="control")return;let r=i.action;if(r==="play"){t.onPlay();return}if(r==="pause"){t.onPause();return}if(r==="seek"){t.onSeek(Number(i.frame??0),i.seekMode??"commit");return}if(r==="tick"){t.onTick();return}if(r==="set-muted"){t.onSetMuted(!!i.muted);return}if(r==="set-volume"){t.onSetVolume(Math.max(0,Math.min(1,Number(i.volume??1))));return}if(r==="set-media-output-muted"){t.onSetMediaOutputMuted(!!i.muted);return}if(r==="set-playback-rate"){t.onSetPlaybackRate(Number(i.playbackRate??1));return}if(r==="enable-pick-mode"){t.onEnablePickMode();return}if(r==="disable-pick-mode"){t.onDisablePickMode();return}if(r==="flash-elements"){let o=i.selectors,s=i.duration||800;o&&cs(o,s)}};return window.addEventListener("message",e),e}function cs(t,e){if(!document.getElementById("__hf-flash-styles")){let n=document.createElement("style");n.id="__hf-flash-styles",n.textContent=`\n .__hf-flash {\n outline: 2px solid rgba(59, 130, 246, 0.6) !important;\n outline-offset: 2px !important;\n animation: __hf-flash-pulse ${e}ms ease-out forwards !important;\n }\n @keyframes __hf-flash-pulse {\n 0% { outline-color: rgba(59, 130, 246, 0.8); }\n 100% { outline-color: transparent; }\n }\n `,document.head.appendChild(n)}for(let n of t)try{document.querySelectorAll(n).forEach(r=>{r.classList.add("__hf-flash"),setTimeout(()=>r.classList.remove("__hf-flash"),e)})}catch(i){_("bridge.flashElements.querySelector",i)}}var gn=null;function xi(t){gn=t}function dt(t,e){if(gn)try{gn({source:"hf-preview",type:"analytics",event:t,properties:e??{}})}catch(n){_("runtime.analytics.site1",n)}}function gi(t){let e=[],n=l=>{if(typeof l.getAnimations!="function")return[];try{return l.getAnimations()}catch{return[]}},i=(l,a)=>{for(let c of l){try{c.currentTime=a}catch(u){_("runtime.adapters.css.site1",u)}try{c.pause()}catch(u){_("runtime.adapters.css.site2",u)}}},r=l=>{for(let a of l)try{a.play()}catch(c){_("runtime.adapters.css.site3",c)}},o=l=>{for(let a of l)try{a.pause()}catch(c){_("runtime.adapters.css.site4",c)}},s=l=>{l.baseDelay?l.el.style.animationDelay=l.baseDelay:l.el.style.removeProperty("animation-delay"),l.basePlayState?l.el.style.animationPlayState=l.basePlayState:l.el.style.removeProperty("animation-play-state")};return{name:"css",discover:()=>{e=[];let l=document.querySelectorAll("*");for(let a of l){if(!(a instanceof HTMLElement))continue;let c=window.getComputedStyle(a);!c.animationName||c.animationName==="none"||e.push({el:a,baseDelay:a.style.animationDelay||"",basePlayState:a.style.animationPlayState||""})}},seek:l=>{let a=Number(l.time)||0;for(let c of e){if(!c.el.isConnected)continue;let u=t?.resolveStartSeconds?t.resolveStartSeconds(c.el):Number.parseFloat(c.el.getAttribute("data-start")??"0")||0,m=Math.max(0,a-u)*1e3,f=n(c.el);if(f.length>0){i(f,m);continue}c.el.style.animationPlayState="paused",c.el.style.animationDelay=`-${(m/1e3).toFixed(3)}s`}},pause:()=>{for(let l of e){if(!l.el.isConnected)continue;let a=n(l.el);a.length>0&&o(a),s(l)}},play:()=>{for(let l of e)l.el.isConnected&&(s(l),r(n(l.el)))},revert:()=>{e=[]}}}function yi(t){return{name:"gsap",discover:()=>{},seek:e=>{let n=t.getTimeline();if(!n)return;n.pause();let i=Math.max(0,Number(e.time)||0);typeof n.totalTime=="function"?n.totalTime(i,!1):n.seek(i,!1)},pause:()=>{let e=t.getTimeline();e&&e.pause()}}}function Si(){return{name:"animejs",discover:()=>{try{let t=window.anime;if(!t||typeof t.running>"u")return;let e=t.running;if(!Array.isArray(e)||e.length===0)return;let n=window.__hfAnime??[],i=new Set(n);for(let r of e)i.has(r)||n.push(r);window.__hfAnime=n}catch(t){_("runtime.adapters.animejs.site1",t)}},seek:t=>{let e=Math.max(0,(Number(t.time)||0)*1e3),n=window.__hfAnime;if(!(!n||n.length===0))for(let i of n)try{typeof i.seek=="function"&&i.seek(e)}catch(r){_("runtime.adapters.animejs.site2",r)}},pause:()=>{let t=window.__hfAnime;if(!(!t||t.length===0))for(let e of t)try{typeof e.pause=="function"&&e.pause()}catch(n){_("runtime.adapters.animejs.site3",n)}},play:()=>{let t=window.__hfAnime;if(!(!t||t.length===0))for(let e of t)try{typeof e.play=="function"&&e.play()}catch(n){_("runtime.adapters.animejs.site4",n)}},revert:()=>{}}}function Ei(){return{name:"lottie",discover:()=>{try{let t=window.lottie;if(t&&typeof t.getRegisteredAnimations=="function"){let e=t.getRegisteredAnimations();if(Array.isArray(e)&&e.length>0){let n=window.__hfLottie??[],i=new Set(n);for(let r of e)i.has(r)||n.push(r);window.__hfLottie=n}}}catch(t){_("runtime.adapters.lottie.site1",t)}},seek:t=>{let e=Math.max(0,Number(t.time)||0),n=window.__hfLottie;if(!(!n||n.length===0))for(let i of n)try{if(bi(i))i.goToAndStop(e*1e3,!1);else if(Ai(i)){if(typeof i.setCurrentRawFrameValue=="function"){let r=i.totalFrames??0,o=i.frameRate??30,s=e*o;r>0&&i.setCurrentRawFrameValue(Math.min(s,r-1))}else if(typeof i.seek=="function"){let r=i.duration??1,o=Math.min(100,e/r*100);i.seek(o)}}}catch(r){_("runtime.adapters.lottie.site2",r)}},pause:()=>{let t=window.__hfLottie;if(!(!t||t.length===0))for(let e of t)try{(bi(e)||Ai(e))&&e.pause()}catch(n){_("runtime.adapters.lottie.site3",n)}},revert:()=>{}}}function bi(t){return typeof t=="object"&&t!==null&&typeof t.goToAndStop=="function"}function Ai(t){return typeof t=="object"&&t!==null&&typeof t.pause=="function"&&("totalFrames"in t||"duration"in t)}var Fi=-1;function Ht(t){if(t!==Fi){Fi=t;try{window.dispatchEvent(new CustomEvent("hf-seek",{detail:{time:t}}))}catch(e){_("runtime.adapters.seek-dispatch.site1",e)}}}function wi(){let t=null,e=0;return{name:"three",discover:()=>{},seek:n=>{t=Math.max(0,Number(n.time)||0),e=t,window.__hfThreeTime=t,Ht(t)},pause:()=>{t==null&&(t=Math.max(0,e))},play:()=>{t=null},revert:()=>{t=null,e=0}}}function Ni(){let t=null,e=0;return{name:"typegpu",discover:()=>{},seek:n=>{t=Math.max(0,Number(n.time)||0),e=t,window.__hfTypegpuTime=t,Ht(t)},pause:()=>{t==null&&(t=Math.max(0,e))},play:()=>{t=null},revert:()=>{t=null,e=0}}}function Ci(){let t=globalThis.GPUQueue;if(!t?.prototype?.copyExternalImageToTexture)return;let e=t.prototype.copyExternalImageToTexture;t.prototype.copyExternalImageToTexture=function(n,i,r){if(n?.source instanceof HTMLVideoElement){let o=n.source.nextElementSibling;if(o instanceof HTMLImageElement&&o.classList.contains("__render_frame__")&&o.complete&&o.naturalWidth>0)return e.call(this,{...n,source:o},i,r)}return e.call(this,n,i,r)}}function Mi(){let t=!1,e=0,n=new WeakMap,i=()=>{if(!document.getAnimations)return[];try{return document.getAnimations()}catch{return[]}},r=l=>{let a=Number(l.currentTime);return Number.isFinite(a)&&a>0?a:0},o=(l,a)=>a<=0?l:l>=a?Math.max(0,l-a):l,s=(l,a)=>{let c=n.get(l);if(c)return c;let u={compositionTimeMs:a,animationTimeMs:t?o(r(l),a):r(l)};return n.set(l,u),u};return{name:"waapi",discover:()=>{t=!0;for(let l of i())s(l,e)},seek:l=>{let a=Math.max(0,(Number(l.time)||0)*1e3);e=a;for(let c of i()){let u=t?s(c,a):s(c,0),m=u.animationTimeMs+Math.max(0,a-u.compositionTimeMs);try{c.currentTime=m}catch(f){_("runtime.adapters.waapi.site1",f)}try{c.pause()}catch(f){_("runtime.adapters.waapi.site2",f)}}},pause:()=>{if(document.getAnimations)for(let l of document.getAnimations())try{l.pause()}catch(a){_("runtime.adapters.waapi.site3",a)}}}}function ki(t,e){if(t.length===0)return 1;let n=0;for(;n<t.length-2&&e>=t[n+1].time;)n+=1;let i=t[n],r=t[n+1]??i,o=r.time-i.time,s=o<=0?0:Math.min(1,Math.max(0,(e-i.time)/o));return i.volume+(r.volume-i.volume)*s}function ds(t,e,n,i){let r=Number.parseFloat(t.dataset.start??"0")||0,o=Number.parseFloat(t.dataset.end??""),s=Number.parseFloat(t.dataset.duration??""),l=Number.isFinite(o)&&o>r?o:Number.isFinite(s)&&s>0?r+s:n,a=Number.parseFloat(t.dataset.volume??""),c=Number.isFinite(a)?Math.max(0,Math.min(1,a)):1;t.volume=c;let u=1/Math.min(60,Math.max(1,i)),m=Math.max(0,r),f=Math.min(n,l),x=[];for(let E=m;E<=f+1e-6;E+=u){let S=Math.min(f,E);e(S);let B=Number(t.volume);if(!Number.isFinite(B))continue;let D=Math.max(0,Math.min(1,B)),v=x.at(-1);if((!v||Math.abs(v.volume-D)>1e-4||S===f)&&x.push({time:Number(S.toFixed(6)),volume:Number(D.toFixed(6))}),S===f)break}return x.some(E=>Math.abs(E.volume-c)>1e-4)?x:null}function Ti(t,e,n,i){if(!e||!(t instanceof HTMLAudioElement)&&!(t instanceof HTMLVideoElement)||n<=0)return;let o=ds(t,s=>{try{typeof e.totalTime=="function"?e.totalTime(s,!0):typeof e.seek=="function"&&e.seek(s,!0)}catch{}},n,60);o&&i.set(t,o)}function vi(t){let e=Array.from(document.querySelectorAll("video, audio")),n=t?.shouldIncludeElement?e.filter(s=>t.shouldIncludeElement?.(s)):e.filter(s=>s.hasAttribute("data-start")),i=[],r=[],o=0;for(let s of n){let l=t?.resolveStartSeconds?t.resolveStartSeconds(s):Number.parseFloat(s.dataset.start??"0");if(!Number.isFinite(l))continue;let a=Number.parseFloat(s.dataset.playbackStart??s.dataset.mediaStart??"0")||0,c=s.defaultPlaybackRate,u=Number.isFinite(c)&&c>0?Math.max(.1,Math.min(5,c)):1,m=s.loop,f=Number.isFinite(s.duration)&&s.duration>0?s.duration:null,x=t?.resolveDurationSeconds?.(s)??Number.parseFloat(s.dataset.duration??"");(!Number.isFinite(x)||x<=0)&&f!=null&&(x=Math.max(0,(f-a)/u));let F=Number.isFinite(x)&&x>0?l+x:Number.POSITIVE_INFINITY,E=Number.parseFloat(s.dataset.volume??""),S={el:s,start:l,mediaStart:a,duration:Number.isFinite(x)&&x>0?x:Number.POSITIVE_INFINITY,end:F,volume:Number.isFinite(E)?E:null,playbackRate:u,loop:m,sourceDuration:f};i.push(S),s.tagName==="VIDEO"&&r.push(S),Number.isFinite(F)&&(o=Math.max(o,F))}return{timedMediaEls:n,mediaClips:i,videoClips:r,maxMediaEnd:o}}var yn=new WeakMap,ft=new WeakMap,Sn=new WeakSet,et=new WeakSet;function fs(t){if(et.has(t))return;et.add(t);let e=()=>et.delete(t);t.addEventListener("playing",e,{once:!0}),t.addEventListener("pause",e,{once:!0}),t.addEventListener("error",e,{once:!0})}var bn=new WeakMap;function mt(t){return Number.isFinite(t)?Math.max(0,Math.min(1,t)):1}function _i(t){let e=!!(t.outputMuted||t.userMuted);for(let n of t.clips){let{el:i}=n;if(!i.isConnected)continue;let r=(t.timeSeconds-n.start)*n.playbackRate+n.mediaStart;if(t.timeSeconds>=n.start&&t.timeSeconds<n.end&&r>=0){if(n.loop&&n.sourceDuration!=null&&n.sourceDuration>0){let w=n.sourceDuration-n.mediaStart;w>0&&r>=n.sourceDuration&&(r=n.mediaStart+(r-n.mediaStart)%w)}let s=mt(t.userVolume??1),l=mt(n.volume??1),a=bn.get(i),c=mt(i.volume),u;n.volumeKeyframes&&n.volumeKeyframes.length>0?u=mt(ki(n.volumeKeyframes,r)):a===void 0||Math.abs(c-a)>1e-4?u=c:u=l;let m=mt(u*s);i.volume=m,bn.set(i,m),t.onElementVolume?.(i,m),e&&(i.muted=!0),i.preload!=="auto"&&(i.preload="auto");try{i.playbackRate=n.playbackRate*t.playbackRate}catch(w){_("runtime.media.site1",w)}let f=.04,x=2,F=i.currentTime||0,E=Math.abs(F-r),S=r-F,B=yn.get(i);yn.set(i,S);let D=B===void 0,v=!D&&Math.abs(S-B)>.5,X=E>3,q=E>.5&&(D||v||X),C=i.tagName==="VIDEO"&&!i.paused,g=B!==void 0&&Math.abs(S-B)<.004,A=!1;if(!C&&!q&&!D&&g&&E>f){let w=(ft.get(i)??0)+1;ft.set(i,w),w>=x&&(A=!0,ft.set(i,0))}else E<=f&&ft.set(i,0);let N=!C&&t.forceSync&&E>.02;if(q||A||N){try{i.currentTime=r}catch(w){_("runtime.media.site2",w)}if(Math.abs(i.currentTime-r)>.5&&!Sn.has(i)){Sn.add(i),i.load();try{i.currentTime=r}catch(w){_("runtime.media.site3",w)}}et.delete(i)}t.playing&&i.paused&&!et.has(i)?(fs(i),i.play().catch(w=>{et.delete(i),(w&&typeof w=="object"&&"name"in w?String(w.name??""):"")==="NotAllowedError"&&t.onAutoplayBlocked?.()})):!t.playing&&!i.paused&&i.pause();continue}yn.delete(i),ft.delete(i),Sn.delete(i),bn.delete(i),i.paused||i.pause()}}var ms=["[data-hyperframes-ignore]","[data-hyperframes-picker-ignore]","[data-hf-ignore]","[data-no-inspect]","[data-no-pick]","[data-hyper-shader-loading]"].join(","),ps=["[data-hyperframes-picker-block]","[data-hyper-shader-loading]"].join(",");function Ri(t){let e=!1,n=null,i=null,r=null,o=null;function s(g,A){try{window.dispatchEvent(new CustomEvent(g,{detail:A}))}catch(N){_("runtime.picker.site1",N)}}function l(g){r=g,s("hyperframe:picker:hovered",{elementInfo:r,isPickMode:e,timestamp:Date.now()})}function a(g){o=g,s("hyperframe:picker:selected",{elementInfo:o,isPickMode:e,timestamp:Date.now()})}function c(g){let A=g.ownerDocument.defaultView;if(!A)return!1;let N=g;for(;N&&N!==document.body&&N!==document.documentElement;){let w=A.getComputedStyle(N);if(w.display==="none"||w.visibility==="hidden"||w.pointerEvents==="none")return!0;let M=Number.parseFloat(w.opacity);if(Number.isFinite(M)&&M<=.01)return!0;N=N.parentElement}return!1}function u(g){if(!g||g===document.body||g===document.documentElement)return!1;let A=g.tagName.toLowerCase();return!(A==="script"||A==="style"||A==="link"||A==="meta"||g.classList.contains("__hf-pick-highlight")||g.closest(ms)||c(g))}function m(g){return!!g?.closest(ps)}function f(g){let A=g;if(A.id)return`#${A.id}`;let N=g.getAttribute("data-composition-id");if(N)return`[data-composition-id="${N}"]`;let w=g.getAttribute("data-composition-src");if(w)return`[data-composition-src="${w}"]`;let M=g.getAttribute("data-track-index");if(M)return`[data-track-index="${M}"]`;let L=g.tagName.toLowerCase(),P=g.parentElement;if(!P)return L;let J=P.querySelectorAll(`:scope > ${L}`);if(J.length===1)return L;for(let R=0;R<J.length;R+=1)if(J[R]===g)return`${L}:nth-of-type(${R+1})`;return L}function x(g){let A=g.tagName.toLowerCase(),N=(g.textContent??"").trim().replace(/\\s+/g," "),w=(M,L)=>M.length>L?`${M.slice(0,L-1)}\\u2026`:M;return A==="h1"||A==="h2"||A==="h3"?"Heading":A==="p"||A==="span"||A==="div"?N.length>0?w(N,56):"Text":A==="img"?"Image":A==="video"?"Video":A==="audio"?"Audio":A==="svg"?"Shape":g.getAttribute("data-composition-src")?"Composition":A==="section"?"Section":`${A.charAt(0).toUpperCase()}${A.slice(1)}`}function F(g,A,N){let w=typeof N=="number"&&N>0?N:8,M=[];if(document.elementsFromPoint)M=document.elementsFromPoint(g,A);else if(document.elementFromPoint){let J=document.elementFromPoint(g,A);M=J?[J]:[]}if(m(M[0]??null))return[];let L={},P=[];for(let J=0;J<M.length;J+=1){let R=M[J];if(!u(R))continue;let le=`${R.tagName}::${R.id||""}::${J}`;if(!L[le]&&(L[le]=!0,P.push(R),P.length>=w))break}return P}function E(g){let A=g.getBoundingClientRect(),N={};for(let M=0;M<g.attributes.length;M+=1){let L=g.attributes[M];L.name.startsWith("data-")&&(N[L.name]=L.value)}return{id:g.id||null,tagName:g.tagName.toLowerCase(),selector:f(g),label:x(g),boundingBox:{x:A.left,y:A.top,width:A.width,height:A.height},textContent:g.textContent?g.textContent.trim().slice(0,200):null,src:g.getAttribute("src")||g.getAttribute("data-composition-src")||null,dataAttributes:N}}function S(g,A,N){return F(g,A,N).map(E)}function B(g){if(!e)return;let N=F(g.clientX,g.clientY,1)[0]??(g.target instanceof Element?g.target:null);if(!u(N)||n===N)return;n&&n.classList.remove("__hf-pick-highlight"),n=N,N.classList.add("__hf-pick-highlight");let w=E(N);l(w),t.postMessage({source:"hf-preview",type:"element-hovered",elementInfo:w})}function D(g){if(!e)return;g.preventDefault(),g.stopPropagation(),g.stopImmediatePropagation();let A=S(g.clientX,g.clientY,8);A.length!==0&&(l(A[0]??null),t.postMessage({source:"hf-preview",type:"element-pick-candidates",candidates:A,selectedIndex:0,point:{x:g.clientX,y:g.clientY}}))}function v(g){g.key==="Escape"&&(q(),t.postMessage({source:"hf-preview",type:"pick-mode-cancelled"}))}function X(){e||(e=!0,i=document.createElement("style"),i.textContent=[".__hf-pick-highlight { outline: 2px solid #4f8cf7 !important; outline-offset: 2px; cursor: crosshair !important; }",".__hf-pick-active * { cursor: crosshair !important; }"].join(`\n`),document.head.appendChild(i),document.body.classList.add("__hf-pick-active"),document.addEventListener("mousemove",B,!0),document.addEventListener("click",D,!0),document.addEventListener("keydown",v,!0),s("hyperframe:picker:mode",{isPickMode:!0,timestamp:Date.now()}))}function q(){e&&(e=!1,n&&(n.classList.remove("__hf-pick-highlight"),n=null),i&&(i.remove(),i=null),document.body.classList.remove("__hf-pick-active"),document.removeEventListener("mousemove",B,!0),document.removeEventListener("click",D,!0),document.removeEventListener("keydown",v,!0),s("hyperframe:picker:mode",{isPickMode:!1,timestamp:Date.now()}))}function C(){window.__HF_PICKER_API={enable:X,disable:q,isActive:()=>e,getHovered:()=>r,getSelected:()=>o,getCandidatesAtPoint:(g,A,N)=>Number.isFinite(g)&&Number.isFinite(A)?S(g,A,N):[],pickAtPoint:(g,A,N)=>{if(!Number.isFinite(g)||!Number.isFinite(A))return null;let w=S(g,A,8);if(!w.length)return null;let M=Math.max(0,Math.min(w.length-1,Number(N??0))),L=w[M]??null;return L?(a(L),t.postMessage({source:"hf-preview",type:"element-picked",elementInfo:L}),q(),L):null},pickManyAtPoint:(g,A,N)=>{if(!Number.isFinite(g)||!Number.isFinite(A))return[];let w=S(g,A,8);if(!w.length)return[];let M=[],L=Array.isArray(N)?N:[0];for(let P of L){let J=Math.max(0,Math.min(w.length-1,Math.floor(Number(P)))),R=w[J];if(!R)continue;M.some(Se=>Se.selector===R.selector&&Se.tagName===R.tagName)||M.push(R)}return M.length?(a(M[0]??null),t.postMessage({source:"hf-preview",type:"element-picked-many",elementInfos:M}),q(),M):[]}},s("hyperframe:picker:api-ready",{hasApi:!0,timestamp:Date.now()})}return{enablePickMode:X,disablePickMode:q,installPickerApi:C}}function tt(t,e){let n=Number.isFinite(e)&&e>0?e:30,i=Number.isFinite(t)&&t>0?t:0;return Math.floor(i*n+1e-9)/n}function pt(t,e,n){let i=t?.[e];return typeof i=="function"?Number(i.call(t))||n:typeof i=="number"&&Number.isFinite(i)?i:(i!=null&&_("runtime.player.nonConformantNum",{prop:e,actual:typeof i}),n)}function ve(t,e){let n=t?.[e];if(typeof n=="function"){n.call(t);return}n!==void 0&&_("runtime.player.nonConformantVoid",{method:e,actual:typeof n})}function ht(t,e,n){if(t){for(let i of Object.values(t))if(!(!i||i===e))try{n(i)}catch(r){_("runtime.player.site1",r)}}}function Li(t,e,n){let i=tt(e,n);return ve(t,"pause"),typeof t.totalTime=="function"?t.totalTime(i,!1):typeof t.seek=="function"&&t.seek(i,!1),i}function hs(t,e,n,i){let r=[];ht(t,e,o=>{ve(o,"play"),r.push(o)});try{return Li(e,n,i)}finally{for(let o of r)try{ve(o,"pause")}catch(s){_("runtime.player.site2",s)}}}function xs(t,e){ht(t,e,n=>{ve(n,"play")})}function Di(t){return{_timeline:null,play:()=>{let e=t.getTimeline();if(!e||t.getIsPlaying())return;let n=Math.max(0,Number(t.getSafeDuration?.()??pt(e,"duration",0))||0);n>0&&Math.max(0,pt(e,"time",0))>=n&&(ve(e,"pause"),typeof e.seek=="function"&&e.seek(0,!1),t.onDeterministicSeek(0),t.setIsPlaying(!1),t.onSyncMedia(0,!1),t.onRenderFrameSeek(0)),typeof e.timeScale=="function"&&e.timeScale(t.getPlaybackRate()),ve(e,"play"),ht(t.getTimelineRegistry?.(),e,i=>{typeof i.timeScale=="function"&&i.timeScale(t.getPlaybackRate()),ve(i,"play")}),t.onDeterministicPlay(),t.setIsPlaying(!0),t.onShowNativeVideos(),t.onStatePost(!0)},pause:()=>{let e=t.getTimeline();if(!e)return;ve(e,"pause"),ht(t.getTimelineRegistry?.(),e,i=>{ve(i,"pause")});let n=Math.max(0,pt(e,"time",0));t.onDeterministicSeek(n),t.onDeterministicPause(),t.setIsPlaying(!1),t.onSyncMedia(n,!1),t.onRenderFrameSeek(n),t.onStatePost(!0)},seek:(e,n)=>{let i=t.getTimeline();if(!i)return;let r=Math.max(0,Number(e)||0),o=t.getIsPlaying(),s=hs(t.getTimelineRegistry?.(),i,r,t.getCanonicalFps());t.onDeterministicSeek(s),n?.keepPlaying&&o?(typeof i.timeScale=="function"&&i.timeScale(t.getPlaybackRate()),ve(i,"play"),ht(t.getTimelineRegistry?.(),i,l=>{typeof l.timeScale=="function"&&l.timeScale(t.getPlaybackRate()),ve(l,"play")}),t.onDeterministicPlay(),t.onShowNativeVideos(),t.onSyncMedia(s,!0)):(t.setIsPlaying(!1),t.onSyncMedia(s,!1)),t.onRenderFrameSeek(s),t.onStatePost(!0)},renderSeek:e=>{let n=t.getTimeline(),i=t.getCanonicalFps(),r=n?(xs(t.getTimelineRegistry?.(),n),Li(n,e,i)):tt(Math.max(0,Number(e)||0),i);t.onDeterministicSeek(r),t.setIsPlaying(!1),t.onSyncMedia(r,!1),t.onRenderFrameSeek(r),t.onStatePost(!0)},getTime:()=>pt(t.getTimeline(),"time",0),getDuration:()=>pt(t.getTimeline(),"duration",0),isPlaying:()=>t.getIsPlaying(),setPlaybackRate:e=>t.setPlaybackRate(e),getPlaybackRate:()=>t.getPlaybackRate()}}function Bi(){return{capturedTimeline:null,isPlaying:!1,rafId:null,currentTime:0,deterministicAdapters:[],parityModeEnabled:!0,canonicalFps:30,bridgeMuted:!1,bridgeVolume:1,mediaOutputMuted:!1,mediaAutoplayBlockedPosted:!1,mediaForceSyncNextTick:!1,playbackRate:1,bridgeLastPostedFrame:-1,bridgeLastPostedAt:0,bridgeLastPostedPlaying:!1,bridgeLastPostedMuted:!1,bridgeMaxPostIntervalMs:80,controlBridgeHandler:null,clampDurationLoggedRaw:null,beforeUnloadHandler:null,domReadyHandler:null,injectedCompStyles:[],injectedCompScripts:[],cachedTimedMediaEls:[],cachedMediaClips:[],cachedVideoClips:[],cachedMediaTimelineDurationSeconds:0,tornDown:!1,nativeVisualWatchdogTick:0,transportClock:null,transportRafId:null}}var gs="data-hf-authored-duration",ys="data-hf-authored-end";function Qe(t){if(t==null||t==="")return null;let e=Number(t);return Number.isFinite(e)?e:null}function Ss(t){return Qe(t.getAttribute("data-duration"))}function bs(t){return Qe(t.getAttribute("data-end"))}function As(t){return Qe(t.getAttribute(gs))}function Es(t){return Qe(t.getAttribute(ys))}function Fs(t){let e=(t??"").trim();if(!e)return null;let n=Qe(e);if(n!=null)return{kind:"absolute",value:n};let i=e.match(/^([A-Za-z0-9_.:-]+)(?:\\s*([+-])\\s*([0-9]*\\.?[0-9]+))?$/);if(!i)return null;let r=(i[1]??"").trim();if(!r)return null;let o=i[2]??"+",s=i[3]??"0",l=Number.parseFloat(s),a=Number.isFinite(l)?Math.max(0,l):0,c=o==="-"?-a:a;return{kind:"reference",refId:r,offset:c}}function Ye(t){let e=t.timelineRegistry??{},n=t.includeAuthoredTimingAttrs??!1,i=new WeakMap,r=new WeakMap,o=new Set,s=u=>{let m=document.getElementById(u);return m||(document.querySelector(`[data-composition-id="${CSS.escape(u)}"]`)??null)},l=u=>{let m=r.get(u);if(m!==void 0)return m;let f=null,x=Ss(u)??(n?As(u):null);if(x!=null&&x>0&&(f=x),f==null||f<=0){let F=bs(u)??(n?Es(u):null);if(F!=null){let E=c(u,0),S=F-E;Number.isFinite(S)&&S>0&&(f=S)}}if((f==null||f<=0)&&u instanceof HTMLMediaElement){let F=Qe(u.getAttribute("data-playback-start"))??Qe(u.getAttribute("data-media-start"))??0;Number.isFinite(u.duration)&&u.duration>F&&(f=u.duration-F)}if(f==null||f<=0){let F=u.getAttribute("data-composition-id");if(F){let E=e[F]??null;if(E&&typeof E.duration=="function")try{let S=Number(E.duration());Number.isFinite(S)&&S>0&&(f=S)}catch(S){_("runtime.startResolver.site1",S)}}}return f!=null&&Number.isFinite(f)&&f>0?(r.set(u,f),f):(r.set(u,null),null)},a=(u,m)=>{if(u.hasAttribute("data-composition-id")){let x=u.parentElement?.closest("[data-composition-id]");return x?c(x,m):0}let f=u.closest("[data-composition-id]");return f?c(f,m):0},c=(u,m)=>{let f=i.get(u);if(f!==void 0)return f??m;if(o.has(u))return m;o.add(u);try{let x=Fs(u.getAttribute("data-start"));if(!x){if(u.hasAttribute("data-composition-id")){let D=u.parentElement;if(D&&(D.hasAttribute("data-composition-src")||D.hasAttribute("data-composition-id"))){let v=c(D,m);return i.set(u,v),v}}return i.set(u,m),m}if(x.kind==="absolute"){let D=Math.max(0,x.value),v=Math.max(0,a(u,m)+D);return i.set(u,v),v}let F=s(x.refId);if(!F)return i.set(u,m),m;let E=c(F,0),S=l(F);if(S==null||S<=0){let D=Math.max(0,E+x.offset);return i.set(u,D),D}let B=Math.max(0,E+S+x.offset);return i.set(u,B),B}finally{o.delete(u)}};return{resolveStartForElement:(u,m=0)=>c(u,Math.max(0,m)),resolveDurationForElement:u=>l(u)}}var ws="data-hf-authored-duration",Ns="data-hf-authored-end";function Ee(t){if(t==null||t==="")return null;let e=Number(t);return Number.isFinite(e)?e:null}function An(t){return Ee(t.getAttribute("data-duration"))??Ee(t.getAttribute(ws))}function Ii(t){return Ee(t.getAttribute("data-end"))??Ee(t.getAttribute(Ns))}function En(...t){let e=t.filter(n=>Number.isFinite(n??null));return e.length===0?null:Math.max(...e)}var Oi={composition:0,video:1,image:2,element:3,audio:4};function Cs(t){if(t.length===0)return;let e=new Map;for(let s of t){let l=e.get(s.track)??new Set;l.add(s.kind),e.set(s.track,l)}if(!Array.from(e.values()).some(s=>s.size>1))return;let i=0,r=new Map,o=[...e.keys()].sort((s,l)=>s-l);for(let s of o){let l=e.get(s);if(l.size===1)r.set(`${s}:${[...l][0]}`,i++);else{let a=[...l].sort((c,u)=>(Oi[c]??99)-(Oi[u]??99));for(let c of a)r.set(`${s}:${c}`,i++)}}for(let s of t){let l=`${s.track}:${s.kind}`,a=r.get(l);a!=null&&(s.track=a)}}function gt(t){let e=String(t??"").trim();if(!e)return null;let n=e.toLowerCase();if(n.startsWith("data:")||n.startsWith("javascript:"))return null;try{return new URL(e,document.baseURI).toString()}catch{return e}}function Pi(t){let e=t.getAttribute("src")??t.getAttribute("data-src");if(e)return gt(e);let n=t.getAttribute("data-composition-src");if(n)return gt(n);let i=t.querySelector("img[src], video[src], audio[src], source[src]");return i?gt(i.getAttribute("src")):null}function Ms(t){let e=t.className;return typeof e!="string"?null:e.split(/\\s+/).map(n=>n.trim()).find(n=>n&&n!=="clip"&&!n.startsWith("__hf-"))??null}function ks(t){if(!t)return null;try{return new URL(t,document.baseURI).pathname.split("/").filter(Boolean).at(-1)??null}catch{return t.split(/[\\\\/]/).filter(Boolean).at(-1)??null}}function Ts(t){let e=t.textContent?.replace(/\\s+/g," ").trim();return e?e.length>32?`${e.slice(0,31)}...`:e:null}function xt(t){let e=t.replace(/\\.[^.]+$/i,"").replace(/[-_]+/g," ").replace(/\\s+/g," ").trim();return e?e.replace(/\\b\\w/g,n=>n.toUpperCase()):t}function vs(t,e,n){let i=t.getAttribute("data-timeline-label")??t.getAttribute("data-label")??t.getAttribute("aria-label")??null;if(i?.trim())return i.trim();let r=t.getAttribute("data-composition-id");if(r)return xt(r);let o=t.id;if(o)return xt(o);let s=Ms(t);if(s)return xt(s);let l=ks(Pi(t));if(l)return xt(l);let a=Ts(t);return a||`${xt(e)} ${n+1}`}function Wi(t){let n=window.__timelines??{},i=Ye({timelineRegistry:n,includeAuthoredTimingAttrs:!0}),r=H=>{if(!H)return null;let k=n[H]??null;if(!k||typeof k.duration!="function")return null;try{let O=Number(k.duration());return Number.isFinite(O)&&O>0?O:null}catch{return null}},o=H=>{let k=Ee(H.getAttribute("data-duration"));if(k!=null&&k>0)return k;let O=Ee(H.getAttribute("data-playback-start"))??Ee(H.getAttribute("data-media-start"))??0;return Number.isFinite(H.duration)&&H.duration>O?Math.max(0,H.duration-O):null},s=()=>{let H=Array.from(document.querySelectorAll("video[data-start], audio[data-start]"));if(H.length===0)return null;let k=0;for(let O of H){let ne=O.hasAttribute("data-hf-auto-start")?i.resolveStartForElement(O,0):Math.max(0,Number(O.getAttribute("data-start")??0)||0);if(!Number.isFinite(ne))continue;let ee=o(O);ee==null||ee<=0||(k=Math.max(k,Math.max(0,ne)+ee))}return k>0?k:null},l=H=>{let k=H.trim().toLowerCase();return!(!k||k==="main"||k.includes("caption")||k.includes("ambient"))},a=(H,k)=>{let O=[],ne=null,ee=null,z=null,V=H.parentElement;for(;V;){let j=V.getAttribute("data-composition-id");j&&(O.push(j),!z&&V!==k&&(z=j),ne==null&&(ne=i.resolveStartForElement(V,0)),ee==null&&(ee=Ee(V.getAttribute("data-duration"))??r(j)??null)),V=V.parentElement}return{parentCompositionId:z,compositionAncestors:O.reverse(),inheritedStart:ne,inheritedDuration:ee}},c=document.querySelector("[data-composition-id]"),u=Array.from(document.querySelectorAll("[data-composition-id]")),m=c?.getAttribute("data-composition-id")??null,f=c?i.resolveStartForElement(c,0):0,x=s(),F=x!=null?Math.max(0,x-Math.max(0,f)):null,E=r(m),S=An(c??document.body),B=En(...u.filter(H=>H!==c).map(H=>{let k=i.resolveStartForElement(H,0),O=i.resolveDurationForElement(H)??r(H.getAttribute("data-composition-id"))??null;return!Number.isFinite(k)||O==null||O<=0?null:Math.max(0,k)+O})),D=B!=null?Math.max(0,B-Math.max(0,f)):null,v=typeof E=="number"&&Number.isFinite(E)&&E>0?E:null,X=typeof S=="number"&&Number.isFinite(S)&&S>0?S:null,q=typeof F=="number"&&Number.isFinite(F)&&F>0?F:null,C=typeof D=="number"&&Number.isFinite(D)&&D>0?D:null,g=En(q,C),A=v!=null&&g!=null&&v>g+1,w=X??(A?g:En(v,q,C))??null,L=(w!=null?f+w:null)??(typeof x=="number"&&Number.isFinite(x)&&x>0?x:null),P=(H,k)=>!Number.isFinite(k)||k<=0?0:L==null||!Number.isFinite(L)?k:!Number.isFinite(H)||H>=L?0:Math.max(0,Math.min(k,L-H)),J=[],R=[],le=Array.from(document.querySelectorAll("[data-start], [data-track-index], [data-composition-id], video, audio, img")),Se=0;for(let H=0;H<le.length;H+=1){let k=le[H];if(k===c||["SCRIPT","STYLE","LINK","META","TEMPLATE","NOSCRIPT"].includes(k.tagName))continue;let O=a(k,c),ne=i.resolveStartForElement(k,O.inheritedStart??0),ee=k.getAttribute("data-composition-id"),z=An(k);if((z==null||z<=0)&&ee&&ee!==m&&(z=r(ee)),(z==null||z<=0)&&k instanceof HTMLMediaElement){let we=Ee(k.getAttribute("data-playback-start"))??Ee(k.getAttribute("data-media-start"))??0;Number.isFinite(k.duration)&&k.duration>0&&(z=Math.max(0,k.duration-we))}if(z==null||z<=0){let we=O.inheritedDuration;if(we!=null&&we>0){let Le=(O.inheritedStart??0)+we;z=Math.max(0,Le-ne)}}if(z==null||z<=0||(z=P(ne,z),z<=0))continue;let V=ne+z;Se=Math.max(Se,V);let j=k.tagName.toLowerCase(),Ce=ee&&ee!==m?"composition":j==="video"?"video":j==="audio"?"audio":j==="img"?"image":"element";J.push({id:k.id||ee||null,label:vs(k,Ce,J.length),start:ne,duration:z,track:Number.parseInt(k.getAttribute("data-track-index")??k.getAttribute("data-track")??String(H),10)||0,kind:Ce,tagName:j,compositionId:k.getAttribute("data-composition-id"),compositionAncestors:O.compositionAncestors,parentCompositionId:O.parentCompositionId,nodePath:null,compositionSrc:gt(k.getAttribute("data-composition-src")),assetUrl:Pi(k),timelineRole:k.getAttribute("data-timeline-role"),timelineLabel:k.getAttribute("data-timeline-label"),timelineGroup:k.getAttribute("data-timeline-group"),timelinePriority:Ee(k.getAttribute("data-timeline-priority"))})}let $=new Set(J.map(H=>H.id)),U=c?.getAttribute("data-composition-id")??null,W=U?n[U]??null:null;if(W&&c){let H=W;if(typeof H.getChildren=="function")try{let k=H.getChildren(!0,!0,!1)??[],O=new Map;for(let z of c.children){let V=z;if(!V.id)continue;let j=V.tagName.toLowerCase();j==="script"||j==="style"||j==="link"||O.set(V,{id:V.id,start:1/0,end:-1/0})}let ne=z=>{let V=z;for(;V;){if(O.has(V))return V;if(V===c)return null;V=V.parentElement}return null};for(let z of k){if(typeof z.targets!="function"||typeof z.startTime!="function"||typeof z.duration!="function")continue;let V=z.startTime(),j=z.parent;for(;j&&j!==W&&typeof j.startTime=="function";)V+=j.startTime(),j=j.parent;let Ce=V+z.duration();if(!(!Number.isFinite(V)||!Number.isFinite(Ce)))for(let we of z.targets()){if(!(we instanceof Element))continue;let $e=ne(we);if(!$e)continue;let Le=O.get($e);Le&&(Le.start=Math.min(Le.start,V),Le.end=Math.max(Le.end,Ce))}}let ee=J.length>0?Math.max(...J.map(z=>z.track))+1:0;for(let[z,V]of O){if(V.start===1/0||V.end===-1/0)continue;let j=z;if($.has(j.id))continue;let Ce=Math.max(0,V.end-V.start);if(Ce<=0)continue;let we=P(V.start,Ce);we<=0||(Se=Math.max(Se,V.start+we),J.push({id:j.id,label:j.getAttribute("data-timeline-label")??j.getAttribute("data-label")??j.getAttribute("aria-label")??j.id,start:V.start,duration:we,track:Number.parseInt(j.getAttribute("data-track-index")??j.getAttribute("data-track")??"",10)||ee,kind:"element",tagName:j.tagName.toLowerCase(),compositionId:j.getAttribute("data-composition-id"),compositionAncestors:U?[U]:[],parentCompositionId:U,nodePath:null,compositionSrc:null,assetUrl:null,timelineRole:j.getAttribute("data-timeline-role"),timelineLabel:j.getAttribute("data-timeline-label"),timelineGroup:j.getAttribute("data-timeline-group"),timelinePriority:Ee(j.getAttribute("data-timeline-priority"))}),$.add(j.id))}}catch(k){_("runtime.timeline.site1",k)}}if(c&&w!=null&&w>0){let H=J.length>0?Math.max(...J.map(k=>k.track))+1:0;for(let k of c.children){let O=k;if(!O.id||$.has(O.id))continue;let ne=O.getAttribute("data-timeline-role");if(ne!=="overlay"&&ne!=="persistent-overlay")continue;let ee=O.tagName.toLowerCase();if(ee==="script"||ee==="style"||ee==="link"||ee==="meta"||window.getComputedStyle(O).display==="none")continue;let V=P(0,w);V<=0||(Se=Math.max(Se,V),J.push({id:O.id,label:O.getAttribute("data-timeline-label")??O.getAttribute("data-label")??O.getAttribute("aria-label")??O.id,start:0,duration:V,track:Number.parseInt(O.getAttribute("data-track-index")??O.getAttribute("data-track")??"",10)||H,kind:"element",tagName:ee,compositionId:O.getAttribute("data-composition-id"),compositionAncestors:U?[U]:[],parentCompositionId:U,nodePath:null,compositionSrc:null,assetUrl:null,timelineRole:ne,timelineLabel:O.getAttribute("data-timeline-label"),timelineGroup:O.getAttribute("data-timeline-group"),timelinePriority:Ee(O.getAttribute("data-timeline-priority"))}),$.add(O.id))}}Cs(J);for(let H of u){if(H===c)continue;let k=H.getAttribute("data-composition-id");if(!k||!l(k))continue;let O=i.resolveStartForElement(H,0),ne=An(H);if((ne==null||ne<=0)&&Ii(H)!=null){let j=Ii(H);ne=Math.max(0,j-O)}let ee=r(k),z=ne&&ne>0?ne:ee;if(z==null||z<=0)continue;let V=P(O,z);V<=0||R.push({id:k,label:H.getAttribute("data-label")??k,start:O,duration:V,thumbnailUrl:gt(H.getAttribute("data-thumbnail-url")),avatarName:null})}let Y=Math.max(1,Se||1,w??0);return{source:"hf-preview",type:"timeline",durationInFrames:A&&X==null?Number.POSITIVE_INFINITY:Math.max(1,Math.ceil(Y*Math.max(1,t.canonicalFps))),clips:J,scenes:R,compositionWidth:Ee(c?.getAttribute("data-width"))??1920,compositionHeight:Ee(c?.getAttribute("data-height"))??1080}}var ae=us(co(),1),fo=ae.default,Xc=ae.default.stringify,ed=ae.default.fromJSON,td=ae.default.plugin,nd=ae.default.parse,id=ae.default.list,rd=ae.default.document,od=ae.default.comment,sd=ae.default.atRule,ad=ae.default.rule,ld=ae.default.decl,ud=ae.default.root,cd=ae.default.CssSyntaxError,dd=ae.default.Declaration,fd=ae.default.Container,md=ae.default.Processor,pd=ae.default.Document,hd=ae.default.Comment,xd=ae.default.Warning,gd=ae.default.AtRule,yd=ae.default.Result,Sd=ae.default.Input,bd=ae.default.Rule,Ad=ae.default.Root,Ed=ae.default.Node;var Kn="data-hf-authored-id";function Jn(t){return t.replace(/[.*+?^${}()|[\\]\\\\]/g,"\\\\$&")}function Qn(t){return t.replace(/\\\\/g,"\\\\\\\\").replace(/"/g,\'\\\\"\')}function Za(t){return t&&t.replace(/[^a-zA-Z0-9_-]/g,n=>`\\\\${n}`).replace(/^-?\\d/,n=>`\\\\${n}`)}function mo(t){let e=t.trim();return e?Array.from(new Set([e,Za(e)])).filter(Boolean):[]}function Xa(t){return!!t&&/[\\w-]/.test(t)}function el(t,e,n){let i=mo(e).sort((l,a)=>a.length-l.length);if(i.length===0)return t;let r="",o=0,s=null;for(let l=0;l<t.length;l+=1){let a=t[l],c=l>0?t[l-1]:"";if(s){r+=a,a===s&&c!=="\\\\"&&(s=null);continue}if(a===\'"\'||a==="\'"){s=a,r+=a;continue}if(a==="["){o+=1,r+=a;continue}if(a==="]"){o=Math.max(0,o-1),r+=a;continue}if(a==="#"&&o===0){let u=i.find(m=>t.startsWith(m,l+1));if(u){let m=t[l+1+u.length];if(!Xa(m)){r+=n,l+=u.length;continue}}}r+=a}return r}function tl(t,e){let n=e?.trim();return n?el(t,n,`[${Kn}="${Qn(n)}"]`):t}function nl(t,e,n,i,r){let o=tl(t,i),s=il(o,e,n),l=s.trim();if(!l||/^(html|body|:root|\\*)$/i.test(l))return t;let a=new RegExp(`\\\\[\\\\s*data-composition-id\\\\s*=\\\\s*(["\'])${Jn(n)}\\\\1\\\\s*\\\\]`,"g");if(a.test(l))return s.replace(a,e);let c=s.match(/^\\s*/)?.[0]??"",u=s.match(/\\s*$/)?.[0]??"";if(r){let m=i?`[${Kn}="${Qn(i)}"]`:null;if(m&&l.startsWith(m)){let f=l.slice(m.length);return`${c}${e}${m}${f}${u}`}}return`${c}${e} ${l}${u}`}function il(t,e,n){let i=Jn(n),r=String.raw`\\[\\s*data-composition-id\\s*=\\s*(?:"${i}"|\'${i}\')\\s*\\]`,o=String.raw`\\s*\\[\\s*data-(?:start|duration)\\s*=\\s*(?:"[^"]*"|\'[^\']*\')\\s*\\]`;return t.replace(new RegExp(`${r}(?:${o})+`,"g"),e).replace(new RegExp(`(?:${o})+${r}`,"g"),e)}var rl=new Set(["keyframes","-webkit-keyframes","font-face"]);function ol(t){return t?.type==="atrule"}function sl(t){let e=t.parent;for(;e;){if(ol(e)&&rl.has(e.name.toLowerCase()))return!0;e=e.parent}return!1}function Yn(t,e,n,i,r){let o=e.trim();if(!t||!o)return t;let s=n||`[data-composition-id="${Qn(o)}"]`,l=fo.parse(t);return l.walkRules(a=>{sl(a)||(a.selectors=a.selectors.map(c=>nl(c,s,o,i,r?.compoundAuthoredRoot)))}),l.toResult({map:!1}).css}function po(t,e,n="[HyperFrames] composition script error:",i,r=e,o){let s=JSON.stringify(e),l=JSON.stringify(r),a=JSON.stringify(n),c=Jn(e),u=JSON.stringify(o?.trim()||null),m=JSON.stringify(i??null),f=JSON.stringify(String.raw`\\[\\s*data-composition-id\\s*=\\s*(?:"${c}"|\'${c}\')\\s*\\]`),x=JSON.stringify(String.raw`\\s*\\[\\s*data-(?:start|duration)\\s*=\\s*(?:"[^"]*"|\'[^\']*\')\\s*\\]`),F=JSON.stringify(mo(o?.trim()||""));return`(function(){\n var __hfCompId = ${s};\n var __hfTimelineCompId = ${l};\n var __hfErrorLabel = ${a};\n var __hfAuthoredRootId = ${u};\n var __hfAuthoredRootAttr = ${JSON.stringify(Kn)};\n var __hfEscapeAttr = function(value) {\n return (value + "").replace(/\\\\\\\\/g, "\\\\\\\\\\\\\\\\").replace(/"/g, "\\\\\\\\\\\\"");\n };\n var __hfRootSelector = ${m} || (__hfCompId\n ? \'[data-composition-id="\' + __hfEscapeAttr(__hfCompId) + \'"]\'\n : "");\n var __hfRoot = null;\n var __hfRootSelectorPattern = ${f};\n var __hfTimingSelectorPattern = ${x};\n var __hfAuthoredRootIdForms = ${F};\n var __hfAuthoredRootSelector = __hfAuthoredRootId\n ? "[" + __hfAuthoredRootAttr + \'="\' + __hfEscapeAttr(__hfAuthoredRootId) + \'"]\'\n : "";\n var __hfIsSelectorNameChar = function(char) {\n return !!char && /[\\\\w-]/.test(char);\n };\n var __hfReplaceAuthoredRootIdSelectors = function(selector) {\n if (!__hfAuthoredRootSelector || !__hfAuthoredRootIdForms.length || typeof selector !== "string") {\n return selector;\n }\n var result = "";\n var bracketDepth = 0;\n var quote = null;\n for (var index = 0; index < selector.length; index += 1) {\n var char = selector[index];\n var previousChar = index > 0 ? selector[index - 1] : "";\n if (quote) {\n result += char;\n if (char === quote && previousChar !== "\\\\\\\\") {\n quote = null;\n }\n continue;\n }\n if (char === \'"\' || char === "\'") {\n quote = char;\n result += char;\n continue;\n }\n if (char === "[") {\n bracketDepth += 1;\n result += char;\n continue;\n }\n if (char === "]") {\n bracketDepth = Math.max(0, bracketDepth - 1);\n result += char;\n continue;\n }\n if (char === "#" && bracketDepth === 0) {\n var matchedForm = null;\n for (var formIndex = 0; formIndex < __hfAuthoredRootIdForms.length; formIndex += 1) {\n var form = __hfAuthoredRootIdForms[formIndex];\n if (selector.slice(index + 1, index + 1 + form.length) === form) {\n matchedForm = form;\n break;\n }\n }\n if (matchedForm) {\n var nextChar = selector[index + 1 + matchedForm.length];\n if (!__hfIsSelectorNameChar(nextChar)) {\n result += __hfAuthoredRootSelector;\n index += matchedForm.length;\n continue;\n }\n }\n }\n result += char;\n }\n return result;\n };\n var __hfNormalizeSelector = function(selector) {\n if (!__hfCompId || typeof selector !== "string") return selector;\n var normalized = selector\n .replace(new RegExp(__hfRootSelectorPattern + \'(?:\' + __hfTimingSelectorPattern + \')+\', \'g\'), __hfRootSelector)\n .replace(new RegExp(\'(?:\' + __hfTimingSelectorPattern + \')+\' + __hfRootSelectorPattern, \'g\'), __hfRootSelector);\n if (__hfAuthoredRootSelector) {\n normalized = __hfReplaceAuthoredRootIdSelectors(normalized);\n }\n return normalized;\n };\n var __hfFindRoot = function() {\n if (!__hfRoot && __hfRootSelector) {\n __hfRoot = window.document.querySelector(__hfRootSelector);\n }\n return __hfRoot;\n };\n var __hfContains = function(node) {\n var root = __hfFindRoot();\n return !root || node === root || root.contains(node);\n };\n var __hfQueryAll = function(selector) {\n var root = __hfFindRoot();\n if (!root || typeof selector !== "string") {\n return window.document.querySelectorAll(selector);\n }\n return Array.prototype.filter.call(window.document.querySelectorAll(__hfNormalizeSelector(selector)), function(node) {\n return __hfContains(node);\n });\n };\n var __hfQueryOne = function(selector) {\n var matches = __hfQueryAll(selector);\n return matches[0] || null;\n };\n var __hfGetElementById = function(id) {\n var found = window.document.getElementById(id);\n if (found && __hfContains(found)) return found;\n var root = __hfFindRoot();\n if (!root) return found || null;\n var idValue = id + "";\n if (__hfAuthoredRootId && __hfAuthoredRootId === idValue && root.getAttribute && root.getAttribute(__hfAuthoredRootAttr) === idValue) {\n return root;\n }\n if (root.id === idValue) return root;\n if (typeof root.querySelector !== "function") return null;\n try {\n var authoredRootMatch = root.querySelector(\'[\' + __hfAuthoredRootAttr + \'="\' + __hfEscapeAttr(idValue) + \'"]\');\n if (authoredRootMatch) return authoredRootMatch;\n } catch {}\n if (typeof CSS !== "undefined" && CSS && typeof CSS.escape === "function") {\n try {\n return root.querySelector("#" + CSS.escape(idValue)) || null;\n } catch {}\n }\n try {\n return root.querySelector(\'[id="\' + __hfEscapeAttr(idValue) + \'"]\') || null;\n } catch {}\n return null;\n };\n var __hfScopedDocument = typeof Proxy === "function"\n ? new Proxy(window.document, {\n get: function(target, prop, receiver) {\n if (prop === "querySelector") return __hfQueryOne;\n if (prop === "querySelectorAll") return __hfQueryAll;\n if (prop === "getElementById") return __hfGetElementById;\n var value = Reflect.get(target, prop, target);\n return typeof value === "function" ? value.bind(target) : value;\n },\n })\n : window.document;\n var __hfTimelineRegistryProxy = null;\n var __hfGetTimelineRegistry = function() {\n window.__timelines = window.__timelines || {};\n if (!__hfCompId || __hfCompId === __hfTimelineCompId || typeof Proxy !== "function") {\n return window.__timelines;\n }\n if (!__hfTimelineRegistryProxy) {\n __hfTimelineRegistryProxy = new Proxy(window.__timelines, {\n get: function(target, prop, receiver) {\n return Reflect.get(target, prop === __hfCompId ? __hfTimelineCompId : prop, target);\n },\n set: function(target, prop, value, receiver) {\n return Reflect.set(target, prop === __hfCompId ? __hfTimelineCompId : prop, value, target);\n },\n });\n }\n return __hfTimelineRegistryProxy;\n };\n var __hfScopedWindow = typeof Proxy === "function"\n ? new Proxy(window, {\n get: function(target, prop, receiver) {\n if (prop === "__timelines") return __hfGetTimelineRegistry();\n return Reflect.get(target, prop, target);\n },\n set: function(target, prop, value, receiver) {\n if (prop === "__timelines") {\n target.__timelines = value || {};\n __hfTimelineRegistryProxy = null;\n return true;\n }\n return Reflect.set(target, prop, value, target);\n },\n })\n : window;\n var __hfResolveGsapTarget = function(target) {\n if (typeof target !== "string") return target;\n return __hfQueryAll(target);\n };\n var __hfScopeTimeline = function(timeline) {\n if (!timeline || timeline.__hfScopedCompositionRoot === __hfFindRoot()) return timeline;\n ["to", "from", "fromTo", "set"].forEach(function(method) {\n var original = timeline[method];\n if (typeof original !== "function") return;\n timeline[method] = function(target) {\n var args = Array.prototype.slice.call(arguments);\n args[0] = __hfResolveGsapTarget(target);\n return original.apply(timeline, args);\n };\n });\n try {\n Object.defineProperty(timeline, "__hfScopedCompositionRoot", {\n value: __hfFindRoot(),\n configurable: true,\n });\n } catch {\n // Best-effort: timelines coming from user code may have a frozen target\n // or a non-extensible defineProperty path. Swallow \\u2014 the scoped root\n // is an enrichment, not a correctness invariant for playback.\n }\n return timeline;\n };\n var __hfBaseGsap = typeof gsap === "undefined" ? window.gsap : gsap;\n var __hfScopedGsap = !__hfBaseGsap || typeof Proxy !== "function"\n ? __hfBaseGsap\n : new Proxy(__hfBaseGsap, {\n get: function(target, prop, receiver) {\n if (prop === "timeline") {\n return function() {\n return __hfScopeTimeline(target.timeline.apply(target, arguments));\n };\n }\n if (prop === "to" || prop === "from" || prop === "fromTo" || prop === "set") {\n return function(firstArg) {\n var args = Array.prototype.slice.call(arguments);\n args[0] = __hfResolveGsapTarget(firstArg);\n return target[prop].apply(target, args);\n };\n }\n if (prop === "utils" && target.utils && typeof Proxy === "function") {\n return new Proxy(target.utils, {\n get: function(utilsTarget, utilsProp, utilsReceiver) {\n if (utilsProp === "toArray") {\n return function(firstArg) {\n var args = Array.prototype.slice.call(arguments);\n args[0] = __hfResolveGsapTarget(firstArg);\n return utilsTarget.toArray.apply(utilsTarget, args);\n };\n }\n if (utilsProp === "selector") {\n return function(base) {\n var baseEl = typeof base === "string" ? __hfQueryOne(base) : base;\n var root = baseEl || __hfFindRoot();\n return function(selector) {\n if (!root || typeof selector !== "string") return [];\n return Array.prototype.filter.call(\n window.document.querySelectorAll(__hfNormalizeSelector(selector)),\n function(node) {\n return node === root || (typeof root.contains === "function" && root.contains(node));\n },\n );\n };\n };\n }\n var value = Reflect.get(utilsTarget, utilsProp, utilsTarget);\n return typeof value === "function" ? value.bind(utilsTarget) : value;\n },\n });\n }\n var value = Reflect.get(target, prop, target);\n return typeof value === "function" ? value.bind(target) : value;\n },\n });\n var __hfBaseHyperframes = window.__hyperframes;\n var __hfScopedHyperframes = !__hfBaseHyperframes\n ? __hfBaseHyperframes\n : Object.assign({}, __hfBaseHyperframes, {\n getVariables: function() {\n var byComp = window.__hfVariablesByComp;\n var scoped = byComp && __hfTimelineCompId ? byComp[__hfTimelineCompId] : null;\n return scoped ? Object.assign({}, scoped) : {};\n },\n });\n var __hfRun = function() {\n try {\n (function(document, gsap, window, __hyperframes) {\n${t.replace(/<\\/(script)/gi,"<\\\\/$1")}\n }).call(window, __hfScopedDocument, __hfScopedGsap, __hfScopedWindow, __hfScopedHyperframes);\n } catch (_err) {\n console.error(__hfErrorLabel, __hfCompId, _err);\n }\n };\n __hfFindRoot();\n __hfRun();\n})();`}function ho(){if(typeof document>"u")return{};let t=Zn(document.documentElement),e=al();return{...t,...e}}function Zn(t){if(!t)return{};let e=t.getAttribute("data-composition-variables");if(!e)return{};let n;try{n=JSON.parse(e)}catch{return{}}if(!Array.isArray(n))return{};let i={};for(let r of n){if(!r||typeof r!="object")continue;let o=r;typeof o.id!="string"||!("default"in o)||(i[o.id]=o.default)}return i}function al(){if(typeof window>"u")return{};let t=window.__hfVariables;return!t||typeof t!="object"||Array.isArray(t)?{}:t}var ll=8e3,ul=/^(?![a-zA-Z][a-zA-Z\\d+\\-.]*:)(?!\\/\\/)(?!\\/)(?!\\.\\.?\\/).+/;function cl(t,e){return`${t}__hf${e}`}var dl=t=>new Promise(e=>{let n=!1,i=Date.now(),r=null,o=s=>{n||(n=!0,r!=null&&window.clearTimeout(r),e({status:s,elapsedMs:Math.max(0,Date.now()-i)}))};t.addEventListener("load",()=>o("load"),{once:!0}),t.addEventListener("error",()=>o("error"),{once:!0}),r=window.setTimeout(()=>o("timeout"),ll)});function Xn(t){for(;t.firstChild;)t.removeChild(t.firstChild);t.textContent=""}var fl=["data-composition-id","data-composition-file","data-start","data-duration","data-end","data-track-index","data-track","data-composition-src","data-hf-authored-duration","data-hf-authored-end"];function ml(t){let e=document.importNode(t,!0),n=e.getAttribute("id")?.trim();for(let o of fl)e.removeAttribute(o);n&&(e.removeAttribute("id"),e.setAttribute("data-hf-authored-id",n)),e.setAttribute("data-hf-inner-root","true");let i=e.getAttribute("data-width"),r=e.getAttribute("data-height");return e.style.width=i?`${i}px`:"100%",e.style.height=r?`${r}px`:"100%",e}function xo(t,e){let n=t.trim();if(!n)return t;try{return ul.test(n)?new URL(n,document.baseURI).toString():e?new URL(n,e).toString():new URL(n,document.baseURI).toString()}catch{return t}}function pl(t){let e=t.getAttribute("data-variable-values");if(!e)return{};let n;try{n=JSON.parse(e)}catch{return{}}return!n||typeof n!="object"||Array.isArray(n)?{}:n}function nn(t){let e=(t.getAttribute("data-composition-id")||"").trim()||null;return{authoredCompositionId:(t.getAttribute("data-hf-original-composition-id")||e||"").trim()||null,runtimeCompositionId:e}}function hl(t){let e=new Map;for(let n of t){let i=nn(n).authoredCompositionId||"";i&&e.set(i,(e.get(i)||0)+1)}return e}function go(t){let e=nn(t).authoredCompositionId;return e?!!document.querySelector(`template#${CSS.escape(e)}-template`):!1}function xl(t){return!!t.querySelector(\'[data-hf-inner-root="true"]\')}function gl(t){return t.hasAttribute("data-composition-src")?!0:go(t)?t.children.length===0||t.hasAttribute("data-hf-original-composition-id")?!0:xl(t):!1}function ti(){return Array.from(document.querySelectorAll("[data-composition-src], [data-composition-id]")).filter(e=>e.hasAttribute("data-composition-src")?!0:go(e))}function yo(){let t=window.__hfVariablesByComp;if(!t)return;let e=new Set(ti().map(n=>nn(n).runtimeCompositionId).filter(n=>!!n));for(let n of Object.keys(t))e.has(n)||delete t[n]}function So(t,e=hl(t)){let n=new Map,i=new Map;for(let r of t){let{authoredCompositionId:o,runtimeCompositionId:s}=nn(r),l=gl(r);if(!o){i.set(r,{authoredCompositionId:null,runtimeCompositionId:s});continue}let a=(e.get(o)||0)>1,c=s||o;if(l){let u=a?(n.get(o)||0)+1:0;a&&n.set(o,u),c=a?cl(o,u):o,a?r.setAttribute("data-hf-original-composition-id",o):r.removeAttribute("data-hf-original-composition-id"),r.setAttribute("data-composition-id",c),s&&s!==c&&window.__hfVariablesByComp&&delete window.__hfVariablesByComp[s]}i.set(r,{authoredCompositionId:o,runtimeCompositionId:c})}return i}async function ei(t){let e=null;t.authoredCompositionId&&(e=Array.from(t.sourceNode.querySelectorAll("[data-composition-id]")).find(x=>x.getAttribute("data-composition-id")===t.authoredCompositionId)??null);let n=e??t.sourceNode,i=e?.getAttribute("data-composition-id")?.trim()||t.authoredCompositionId||null,r=t.runtimeCompositionId||i||null,o=e?.getAttribute("id")?.trim()||null,s=r?`[data-composition-id="${CSS.escape(r)}"]`:void 0;if(t.headLinks)for(let f of t.headLinks){let x=f.getAttribute("href")||"";x&&(document.head.querySelector(`link[href="${CSS.escape(x)}"]`)||document.head.appendChild(f.cloneNode(!0)))}if(t.headStyles)for(let f of t.headStyles){let x=f.cloneNode(!0);x instanceof HTMLStyleElement&&(i&&(x.textContent=Yn(x.textContent||"",i,s,o)),document.head.appendChild(x),t.injectedStyles.push(x))}let l=Array.from(n.querySelectorAll("style"));for(let f of l){let x=f.cloneNode(!0);x instanceof HTMLStyleElement&&(i&&(x.textContent=Yn(x.textContent||"",i,s,o)),document.head.appendChild(x),t.injectedStyles.push(x))}let a=[];if(t.headScripts)for(let f of t.headScripts){let x=f.getAttribute("type")?.trim()??"",F=f.getAttribute("src")?.trim()??"";if(F){let E=xo(F,t.compositionUrl);a.push({kind:"external",src:E,type:x})}else{let E=f.textContent?.trim()??"";E&&a.push({kind:"inline",content:E,type:x,scopeCompositionId:i})}}let c=Array.from(n.querySelectorAll("script")),u=[...a];for(let f of c){let x=f.getAttribute("type")?.trim()??"",F=f.getAttribute("src")?.trim()??"";if(F){let E=xo(F,t.compositionUrl);u.push({kind:"external",src:E,type:x})}else{let E=f.textContent?.trim()??"";E&&u.push({kind:"inline",content:E,type:x,scopeCompositionId:i})}f.parentNode?.removeChild(f)}let m=Array.from(n.querySelectorAll("style"));for(let f of m)f.parentNode?.removeChild(f);if(e){let f=e.getAttribute("data-width"),x=e.getAttribute("data-height"),F=t.parseDimensionPx(f),E=t.parseDimensionPx(x);f&&t.host.setAttribute("data-width",f),x&&t.host.setAttribute("data-height",x),F&&t.host instanceof HTMLElement&&(t.host.style.width=F),E&&t.host instanceof HTMLElement&&(t.host.style.height=E),e.hasAttribute("data-timeline-locked")&&t.host.setAttribute("data-timeline-locked",""),t.host.appendChild(ml(e))}else t.hasTemplate?t.host.appendChild(document.importNode(n,!0)):t.host.innerHTML=t.fallbackBodyInnerHtml;if(r){let f={...t.declaredVariableDefaults??{},...pl(t.host)};Object.keys(f).length>0?(window.__hfVariablesByComp||(window.__hfVariablesByComp={}),window.__hfVariablesByComp[r]=f):window.__hfVariablesByComp&&delete window.__hfVariablesByComp[r]}for(let f of u){let x=document.createElement("script");if(f.type&&(x.type=f.type),x.async=!1,f.kind==="external"?x.src=f.src:f.type.toLowerCase()==="module"?x.textContent=f.content:f.scopeCompositionId?x.textContent=po(f.content,f.scopeCompositionId,"[HyperFrames] composition script error:",s,r||f.scopeCompositionId,o):x.textContent=`(function(){${f.content}})();`,document.body.appendChild(x),t.injectedScripts.push(x),f.kind==="external"){let F=await dl(x);F.status!=="load"&&t.onDiagnostic?.({code:"external_composition_script_load_issue",details:{hostCompositionId:t.authoredCompositionId,runtimeCompositionId:t.runtimeCompositionId,hostCompositionSrc:t.hostCompositionSrc,resolvedScriptSrc:f.src,loadStatus:F.status,elapsedMs:F.elapsedMs}})}}}async function bo(t){let e=ti();if(yo(),e.length===0)return;let n=So(e),i=e.filter(r=>{if(r.hasAttribute("data-composition-src")||r.children.length>0)return!1;let o=n.get(r)?.authoredCompositionId;return o?!!document.querySelector(`template#${CSS.escape(o)}-template`):!1});if(i.length!==0)for(let r of i){let o=n.get(r),s=o?.authoredCompositionId;if(!s)continue;let l=document.querySelector(`template#${CSS.escape(s)}-template`);Xn(r),await ei({host:r,authoredCompositionId:s,runtimeCompositionId:o?.runtimeCompositionId||s,hostCompositionSrc:`template#${s}-template`,sourceNode:l.content,hasTemplate:!0,fallbackBodyInnerHtml:"",compositionUrl:null,injectedStyles:t.injectedStyles,injectedScripts:t.injectedScripts,parseDimensionPx:t.parseDimensionPx,onDiagnostic:t.onDiagnostic})}}async function Ao(t){let e=ti();if(yo(),e.length===0)return;let n=So(e),i=e.filter(r=>r.hasAttribute("data-composition-src"));i.length!==0&&await Promise.all(i.map(async r=>{let o=r.getAttribute("data-composition-src");if(!o)return;let s=n.get(r),l=s?.authoredCompositionId||null,a=s?.runtimeCompositionId||l||null,c=null;try{c=new URL(o,document.baseURI)}catch{c=null}Xn(r);try{let u=l!=null?document.querySelector(`template#${CSS.escape(l)}-template`):null;if(u){await ei({host:r,authoredCompositionId:l,runtimeCompositionId:a,hostCompositionSrc:o,sourceNode:u.content,hasTemplate:!0,fallbackBodyInnerHtml:"",compositionUrl:c,injectedStyles:t.injectedStyles,injectedScripts:t.injectedScripts,parseDimensionPx:t.parseDimensionPx,onDiagnostic:t.onDiagnostic});return}let m=await fetch(o);if(!m.ok)throw new Error(`HTTP ${m.status}`);let f=await m.text(),F=new DOMParser().parseFromString(f,"text/html"),E=(l?F.querySelector(`template#${CSS.escape(l)}-template`):null)??F.querySelector("template"),S=E?E.content:F.body,B=E?void 0:Array.from(F.head.querySelectorAll("style")),D=E?void 0:Array.from(F.head.querySelectorAll("script")),v=E?void 0:Array.from(F.head.querySelectorAll(\'link[rel="stylesheet"], link[rel="preconnect"]\'));await ei({host:r,authoredCompositionId:l,runtimeCompositionId:a,hostCompositionSrc:o,sourceNode:S,hasTemplate:!!E,fallbackBodyInnerHtml:F.body.innerHTML,compositionUrl:c,injectedStyles:t.injectedStyles,injectedScripts:t.injectedScripts,parseDimensionPx:t.parseDimensionPx,headStyles:B,headScripts:D,headLinks:v,declaredVariableDefaults:Zn(F.documentElement),onDiagnostic:t.onDiagnostic})}catch(u){t.onDiagnostic?.({code:"external_composition_load_failed",details:{hostCompositionId:l,runtimeCompositionId:a,hostCompositionSrc:o,errorMessage:u instanceof Error?u.message:"unknown_error"}}),Xn(r)}}))}function yl(t){return t instanceof HTMLElement?t.dataset.captionWrapper!=="true"?t:t.querySelector(":scope > span")??null:null}function Sl(){let t=[],e=document.querySelectorAll(".caption-group");for(let n of e)for(let i of n.children){if(!(i instanceof HTMLElement))continue;let r=i.dataset.captionWrapper==="true"?i.querySelector(":scope > span"):i.tagName==="SPAN"?i:null;r&&t.push(r)}return t}function bl(t){let e=t.parentElement;if(e?.dataset.captionWrapper==="true")return e;let n=document.createElement("span");return n.style.display="inline-block",n.dataset.captionWrapper="true",t.parentNode?.insertBefore(n,t),n.appendChild(t),n}function ni(){let t=window.gsap;t&&document.querySelectorAll(".caption-group").length!==0&&fetch("caption-overrides.json").then(e=>e.ok?e.json():null).then(e=>{if(!e||!Array.isArray(e)||e.length===0)return;let n=Sl();for(let i of e){let r=null;if(i.wordId&&(r=yl(document.getElementById(i.wordId))),!r&&i.wordIndex!==void 0&&(r=n[i.wordIndex]??null),!r)continue;let o={},s={};if(i.x!==void 0&&(o.x=i.x),i.y!==void 0&&(o.y=i.y),i.scale!==void 0&&(o.scale=i.scale),i.rotation!==void 0&&(o.rotation=i.rotation),i.opacity!==void 0&&(s.opacity=i.opacity),i.fontSize!==void 0&&(s.fontSize=`${i.fontSize}px`),i.fontWeight!==void 0&&(s.fontWeight=i.fontWeight),i.fontFamily!==void 0&&(s.fontFamily=i.fontFamily),i.activeColor||i.dimColor){let a=t.getTweensOf(r).filter(u=>u.vars.color!==void 0).sort((u,m)=>u.startTime()-m.startTime()),c=a.length>0?String(a[0].vars.color):"";for(let u of a)String(u.vars.color)===c?i.dimColor&&(u.vars.color=i.dimColor):i.activeColor&&(u.vars.color=i.activeColor);i.dimColor&&t.set(r,{color:i.dimColor})}if(Object.keys(s).length>0&&t.set(r,s),Object.keys(o).length>0){let l=bl(r);t.set(l,o)}}}).catch(()=>{})}var rn=class{constructor(e){ye(this,"_baseTime",0);ye(this,"_playStartMs",null);ye(this,"_rate",1);ye(this,"_duration",1/0);ye(this,"_nowMs");ye(this,"_audioSource",null);this._baseTime=e?.initialTime??0,this._rate=e?.rate??1,this._duration=e?.duration??1/0,this._nowMs=e?.nowMs??(()=>performance.now())}now(){if(this._playStartMs===null)return this._baseTime;if(this._audioSource){let i=null;if("currentTimeSeconds"in this._audioSource)i=this._audioSource.currentTimeSeconds;else{let{el:r,compositionStart:o,mediaStart:s}=this._audioSource;!r.paused&&Number.isFinite(r.currentTime)&&(i=(r.currentTime-s)/(r.playbackRate>0?r.playbackRate:1)*this._rate+o)}if(i!==null)return Number.isFinite(this._duration)&&i>=this._duration?this._duration:Math.max(0,i)}let e=(this._nowMs()-this._playStartMs)/1e3,n=this._baseTime+e*this._rate;return Number.isFinite(this._duration)&&n>=this._duration?this._duration:Math.max(0,n)}play(){return this._playStartMs!==null||Number.isFinite(this._duration)&&this._baseTime>=this._duration?!1:(this._playStartMs=this._nowMs(),!0)}pause(){return this._playStartMs===null?!1:(this._baseTime=this.now(),this._playStartMs=null,!0)}seek(e){let n=Number.isFinite(this._duration)?Math.max(0,Math.min(e,this._duration)):Math.max(0,e);this._baseTime=n,this._playStartMs!==null&&(this._playStartMs=this._nowMs())}isPlaying(){return this._playStartMs!==null}setRate(e){let n=Number.isFinite(e)&&e>0?Math.max(.1,Math.min(5,e)):1;this._playStartMs!==null&&(this._baseTime=this.now(),this._playStartMs=this._nowMs()),this._rate=n}getRate(){return this._rate}setDuration(e){this._duration=Number.isFinite(e)&&e>0?e:1/0,this._baseTime>this._duration&&(this._baseTime=this._duration)}getDuration(){return this._duration}attachAudioSource(e){this._audioSource=e}detachAudioSource(){this._audioSource&&this._playStartMs!==null&&(this._baseTime=this.now(),this._playStartMs=this._nowMs()),this._audioSource=null}hasAudioSource(){return this._audioSource!==null}getSource(){if(this._audioSource&&this._playStartMs!==null){if("currentTimeSeconds"in this._audioSource)return"audio";let{el:e}=this._audioSource;if(!e.paused&&Number.isFinite(e.currentTime))return"audio"}return"monotonic"}snapshot(){return{time:this.now(),playing:this.isPlaying(),rate:this._rate,duration:this._duration,source:this.getSource()}}reachedEnd(){return Number.isFinite(this._duration)&&this.now()>=this._duration}};function Eo(t){return!Number.isFinite(t)||t<=0?1:t}var on=class{constructor(){ye(this,"_ctx",null);ye(this,"_bufferCache",new Map);ye(this,"_failedSrcs",new Set);ye(this,"_activeSources",[]);ye(this,"_masterGain",null);ye(this,"_rateAnchorCtx",0);ye(this,"_rateAnchorComp",0);ye(this,"_rate",1);ye(this,"_paused",!0);ye(this,"_playGeneration",0)}async init(){try{return this._ctx=new AudioContext,this._masterGain=this._ctx.createGain(),this._masterGain.connect(this._ctx.destination),!0}catch{return!1}}get context(){return this._ctx}getTime(){return!this._ctx||this._paused?-1:this._rateAnchorComp+(this._ctx.currentTime-this._rateAnchorCtx)*this._rate}async decodeAudioElement(e){let n=e.currentSrc||e.getAttribute("src");if(!n)return null;if(this._bufferCache.has(n))return this._bufferCache.get(n);if(this._failedSrcs.has(n)||!this._ctx)return null;try{let i=await fetch(n);if(!i.ok)return this._failedSrcs.add(n),_("webAudioTransport.fetch",new Error(`${i.status} ${n}`)),null;let r=await i.arrayBuffer(),o=await this._ctx.decodeAudioData(r);return this._bufferCache.set(n,o),o}catch(i){return this._failedSrcs.add(n),_("webAudioTransport.decode",i),null}}startGeneration(){return this._playGeneration+=1,this._playGeneration}currentGeneration(){return this._playGeneration}async schedulePlayback(e,n,i,r,o,s,l,a=1){if(!this._ctx||!this._masterGain||l!==this._playGeneration)return null;try{if(this._ctx.state==="suspended"&&await this._ctx.resume(),l!==this._playGeneration)return null;let c=Eo(a),u=this._ctx.createBufferSource();u.buffer=n,u.playbackRate.value=c;let m=this._ctx.createGain();m.gain.value=s,u.connect(m),m.connect(this._masterGain);let f=o-i,x=this._ctx.currentTime;if(this._rate=c,this._rateAnchorCtx=x,this._rateAnchorComp=o,f>=0)u.start(0,f+r);else{let S=-f/c;u.start(x+S,r)}let F=e.muted;e.muted=!0;let E={el:e,sourceNode:u,gainNode:m,compositionStart:i,mediaStart:r,scheduledAt:x,priorMuted:F};return this._activeSources.push(E),this._paused=!1,E}catch(c){return _("webAudioTransport.schedule",c),null}}setRate(e){let n=Eo(e);if(n!==this._rate){this._ctx&&!this._paused&&(this._rateAnchorComp=this.getTime(),this._rateAnchorCtx=this._ctx.currentTime),this._rate=n;for(let i of this._activeSources)try{i.sourceNode.playbackRate.value=n}catch(r){_("webAudioTransport.setRate",r)}}}stopAll(){for(let e of this._activeSources){try{e.sourceNode.stop(),e.sourceNode.disconnect(),e.gainNode.disconnect()}catch{}e.el.muted=e.priorMuted}this._activeSources=[],this._paused=!0}setVolume(e){this._masterGain&&(this._masterGain.gain.value=Math.max(0,Math.min(1,e)))}setElementVolume(e,n){let i=Math.max(0,Math.min(1,n));for(let r of this._activeSources)if(r.el===e)try{r.gainNode.gain.value=i}catch(o){_("webAudioTransport.setElementVolume",o)}}setMuted(e){this._masterGain&&(this._masterGain.gain.value=e?0:1)}isActive(){return this._activeSources.length>0&&!this._paused}destroy(){if(this.stopAll(),this._bufferCache.clear(),this._ctx)try{this._ctx.close()}catch{}this._ctx=null,this._masterGain=null}};var Fo="data-hf-authored-duration",wo="data-hf-authored-end";function No(){let t=Bi(),e=null,n=null,i=[],r=new Set,o=null;if(typeof window.__hfRuntimeTeardown=="function")try{window.__hfRuntimeTeardown()}catch(d){_("runtime.init.site1",d)}document.documentElement&&(document.documentElement.style.margin="0",document.documentElement.style.padding="0",document.documentElement.style.overflow="hidden"),document.body&&(document.body.style.margin="0",document.body.style.padding="0",document.body.style.overflow="hidden"),window.__timelines=window.__timelines||{};let s=d=>{i.push(d)},l=(d,p,h)=>{let b=h??`${d}:${JSON.stringify(p)}`;r.has(b)||(r.add(b),Ae({source:"hf-preview",type:"diagnostic",code:d,details:p}))},a=d=>{let p={scale:1,focusX:960,focusY:540},h=[],b=[],y={time:d.getTime(),duration:d.getDuration(),isPlaying:d.isPlaying(),renderMode:!1,timelineDirty:!1};return{play:d.play,pause:d.pause,seek:d.seek,getTime:d.getTime,getDuration:d.getDuration,isPlaying:d.isPlaying,getMainTimeline:()=>null,getElementBounds:()=>{},getElementsAtPoint:()=>{},setElementPosition:()=>{},previewElementPosition:()=>{},setElementKeyframes:()=>{},setElementScale:()=>{},setElementFontSize:()=>{},setElementTextContent:()=>{},setElementTextColor:()=>{},setElementTextShadow:()=>{},setElementTextFontWeight:()=>{},setElementTextFontFamily:()=>{},setElementTextOutline:()=>{},setElementTextHighlight:()=>{},setElementVolume:()=>{},setStageZoom:()=>{},getStageZoom:()=>p,setStageZoomKeyframes:()=>{},getStageZoomKeyframes:()=>h,addElement:()=>!1,removeElement:()=>!1,updateElementTiming:()=>!1,setElementTiming:()=>{},updateElementSrc:()=>!1,updateElementLayer:()=>!1,updateElementBasePosition:()=>!1,markTimelineDirty:()=>{},isTimelineDirty:()=>!1,rebuildTimeline:()=>{},ensureTimeline:()=>{},enableRenderMode:()=>{},disableRenderMode:()=>{},renderSeek:d.renderSeek,getElementVisibility:()=>({visible:!1}),getVisibleElements:()=>b,getRenderState:()=>({...y,time:d.getTime(),duration:d.getDuration(),isPlaying:d.isPlaying()})}},c=1/60,u=.75,m=2,f=.05,x=100,F=240,E=d=>{if(d instanceof Error)return d.message||String(d);if(typeof d=="string")return d;try{return JSON.stringify(d)}catch{return String(d??"")}},S=d=>{let p=d.toLowerCase();return p.includes("cannot read properties of null")||p.includes("cannot set properties of null")?{code:"runtime_null_dom_access",category:"dom-null-access"}:p.includes("failed to execute \'queryselector\'")?{code:"runtime_invalid_selector",category:"selector-invalid"}:p.includes("is not defined")?{code:"runtime_reference_missing",category:"reference-missing"}:{code:"runtime_script_error",category:"script-error"}},B=d=>{if(d==null||d.trim()==="")return null;let p=Number.parseFloat(d);return!Number.isFinite(p)||p<=0?null:`${p}px`},D=()=>{let d=document.querySelector(\'[data-composition-id][data-root="true"]\');if(d instanceof HTMLElement)return d;let p=Array.from(document.querySelectorAll("[data-composition-id]"));return p.length===0?null:p.find(h=>!h.parentElement?.closest("[data-composition-id]"))??p[0]??null},v=()=>{let d=D();if(!d)return;let p=B(d.getAttribute("data-width")),h=B(d.getAttribute("data-height"));p&&(d.style.width=p),h&&(d.style.height=h),p&&d.style.setProperty("--comp-width",p),h&&d.style.setProperty("--comp-height",h)},X=()=>{let d=D(),p=Array.from(document.querySelectorAll("[data-composition-id]")).filter(h=>h.hasAttribute("data-duration")||h.hasAttribute("data-end"));for(let h of p){if(d&&h===d)continue;let b=h.getAttribute("data-duration"),y=h.getAttribute("data-end");b!=null&&!h.hasAttribute(Fo)&&h.setAttribute(Fo,b),y!=null&&!h.hasAttribute(wo)&&h.setAttribute(wo,y),h.removeAttribute("data-duration"),h.removeAttribute("data-end")}},q=()=>{let d=D();if(!d)return;d.style.position||(d.style.position="relative"),d.style.overflow="hidden";let p=B(d.getAttribute("data-width")),h=B(d.getAttribute("data-height"));p&&(d.style.width=p),h&&(d.style.height=h);let b=Array.from(d.children);for(let y of b){let T=y.tagName.toLowerCase();if(T==="script"||T==="style"||T==="link"||T==="meta"||!y.hasAttribute("data-start"))continue;let te=(y.style.top==="0px"||y.style.top==="0")&&(y.style.left==="0px"||y.style.left==="0")&&y.style.width==="100%"&&y.style.height==="100%",G=/translate\\(\\s*-50%\\s*,\\s*-50%\\s*\\)/.test(y.style.transform);if(te&&G&&!y.hasAttribute("data-width")&&!y.hasAttribute("data-height")){let Je=y.style.top,fe=y.style.left,ct=y.style.width,oe=y.style.height;y.style.top="",y.style.left="",y.style.width="",y.style.height="";let Q=window.getComputedStyle(y);Q.top!=="auto"||Q.bottom!=="auto"||Q.left!=="auto"||Q.right!=="auto"||Q.width!=="0px"||Q.height!=="0px"||(y.style.top=Je,y.style.left=fe,y.style.width=ct,y.style.height=oe)}let ie=window.getComputedStyle(y),xe=ie.position;if(xe!=="absolute"&&xe!=="fixed"&&(y.style.position="absolute"),!!y.style.top||!!y.style.bottom||ie.top!=="auto"||ie.bottom!=="auto"||(y.style.top="0"),!!y.style.left||!!y.style.right||ie.left!=="auto"||ie.right!=="auto"||(y.style.left="0"),T!=="audio"){let Je=B(y.getAttribute("data-width")),fe=B(y.getAttribute("data-height")),ct=ie.width!=="0px"&&ie.width!=="auto",oe=ie.height!=="0px"&&ie.height!=="auto";Je?!y.style.width&&!ct&&(y.style.width=Je):!y.style.width&&ie.width==="0px"&&(y.style.width="100%"),fe?!y.style.height&&!oe&&(y.style.height=fe):!y.style.height&&ie.height==="0px"&&(y.style.height="100%")}}},C=(d,p=0,h)=>Ye({timelineRegistry:window.__timelines??{},includeAuthoredTimingAttrs:h?.includeAuthoredTimingAttrs??!0}).resolveStartForElement(d,p),g=(d,p)=>Ye({timelineRegistry:window.__timelines??{},includeAuthoredTimingAttrs:p?.includeAuthoredTimingAttrs??!0}).resolveDurationForElement(d),A=(d,p=0)=>!d.hasAttribute("data-hf-auto-start")&&d.hasAttribute("data-start")?Math.max(0,Number(d.getAttribute("data-start")??0)||0):C(d,p),N=!!document.querySelector("[data-composition-src]"),w=!1;{let d=document.querySelectorAll("[data-composition-id]:not([data-composition-src])");for(let p of d){let h=p.getAttribute("data-composition-id");if(h&&p.children.length===0&&document.querySelector(`template#${CSS.escape(h)}-template`)){w=!0;break}}}let M=!N&&!w,L=d=>{if(!d||typeof d.duration!="function")return null;try{let p=Number(d.duration());return Number.isFinite(p)?Math.max(0,p):null}catch{return null}},P=d=>typeof d=="number"&&Number.isFinite(d)&&d>c,J=d=>{let p=Number(d.getAttribute("data-duration"));if(Number.isFinite(p)&&p>0)return p;let h=Number(d.getAttribute("data-playback-start")??d.getAttribute("data-media-start")??"0"),b=Number.isFinite(h)?Math.max(0,h):0;return Number.isFinite(d.duration)&&d.duration>b?Math.max(0,d.duration-b):null},R=()=>{let d=Array.from(document.querySelectorAll("video[data-start], audio[data-start]"));if(d.length===0)return null;let p=0;for(let h of d){let b=A(h,0);if(!Number.isFinite(b))continue;let y=J(h);y==null||y<=c||(p=Math.max(p,Math.max(0,b)+y))}return p>c?p:null},le=()=>{let d=D();if(!d)return null;let p=window.__timelines??{},h=Ye({timelineRegistry:p,includeAuthoredTimingAttrs:!0}),b=0,y=Array.from(d.querySelectorAll("[data-composition-id][data-start]"));for(let T of y){if(!(T instanceof Element)||T.parentElement?.closest("[data-composition-id]")!==d)continue;let G=h.resolveStartForElement(T,0),ie=h.resolveDurationForElement(T);!Number.isFinite(G)||ie==null||ie<=0||(b=Math.max(b,Math.max(0,G)+ie))}return b>c?b:null},Se=()=>{let d=R();return typeof d!="number"||!Number.isFinite(d)||d<=c?null:d},$=d=>P(d)?Math.max(c,d*u):c,U=(d,p=0)=>{let h=L(d),b=Se(),y=le(),T=Math.max(b??0,y??0),te=Number.isFinite(p)&&p>c?p:0,G=0;return P(h)?G=Math.max(h,T,te):P(T)?G=Math.max(T,te):G=te,G>0?Math.max(0,G):0},W=()=>{let d=window.__timelines??{},p=Ye({timelineRegistry:d,includeAuthoredTimingAttrs:!0}),h=Se(),b=le(),y=Math.max(h??0,b??0)||null,T=$(y),te=oe=>{let Q=document.querySelector(`[data-composition-id="${CSS.escape(oe)}"]`);return Q?p.resolveStartForElement(Q,0):0},G=oe=>{let Q=window.gsap;if(!Q||typeof Q.timeline!="function")return null;let ue=Q.timeline({paused:!0});for(let he of oe)ue.add(he.timeline,te(he.compositionId));return ue},ie=(oe,Q)=>{if(!P(oe))return null;let ue=window.gsap;if(!ue||typeof ue.timeline!="function")return null;let he=ue.timeline({paused:!0});if(Q)try{he.add(Q,0)}catch(se){_("runtime.init.site2",se)}let be=he;if(typeof be.to=="function")try{be.to({},{duration:oe})}catch(se){_("runtime.init.site3",se)}return he},xe=(oe,Q)=>{let ue=oe;if(typeof ue.getChildren!="function")return[];try{let he=ue.getChildren(!0,!0,!0)??[];if(!Array.isArray(he))return[];let be=[];for(let se of Q)if(!he.some(Te=>Te===se.timeline))try{let Te=te(se.compositionId);oe.add(se.timeline,Te),be.push(se.compositionId)}catch(Te){_("runtime.init.site4",Te)}return be}catch{return[]}},Ie=D(),de=Ie?.getAttribute("data-composition-id")??null;if(!de)return{timeline:null};let ge=d[de]??null,fe=(()=>{if(!Ie)return[];let oe=new Set,Q=Array.from(Ie.querySelectorAll("[data-composition-id]")),ue=[];for(let he of Q){let be=he.getAttribute("data-composition-id");if(!be||be===de||oe.has(be))continue;oe.add(be);let se=d[be]??null;if(!se||typeof se.play!="function"||typeof se.pause!="function")continue;let Ne=L(se);ue.push({compositionId:be,timeline:se,durationSeconds:Ne??0})}return ue})(),ct=oe=>{for(let Q of oe){let ue=Q.timeline;if(typeof ue.paused=="function")try{ue.paused(!1)}catch(he){_("runtime.init.site5",he)}}};if(fe.length>0&&ct(fe),ge){let oe=fe.length>0?xe(ge,fe):[];if((fe.length>0||!document.querySelector("[data-composition-id]:not([data-composition-id=\'"+de+"\'])"))&&(Y=!0),oe.length>0)try{let se=ge.time();ge.seek(se,!1)}catch{}let Q=L(ge);if(!P(Q)&&fe.length>0){let se=fe.map(ts=>ts.compositionId),Ne=G(fe),Te=L(Ne);if(Ne&&P(Te))return{timeline:Ne,selectedTimelineIds:se,selectedDurationSeconds:Te,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_unusable_fallback",details:{rootCompositionId:de,rootDurationSeconds:Q,fallbackKind:"composite_by_root_children",minCandidateDurationSeconds:T,selectedDurationSeconds:Te,mediaDurationFloorSeconds:h,authoredCompositionDurationFloorSeconds:b,selectedTimelineIds:se,autoNestedChildren:oe}}};let pn=ie(y??0,ge),hn=L(pn);if(pn&&P(hn))return{timeline:pn,selectedTimelineIds:[de],selectedDurationSeconds:hn,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_unusable_media_floor_fallback",details:{rootCompositionId:de,rootDurationSeconds:Q,fallbackKind:"media_duration_floor",mediaDurationFloorSeconds:h,authoredCompositionDurationFloorSeconds:b,selectedDurationSeconds:hn,selectedTimelineIds:[de],autoNestedChildren:oe}}}}if(!P(Q)&&fe.length===0){let se=ie(y??0,ge),Ne=L(se);if(se&&P(Ne))return{timeline:se,selectedTimelineIds:[de],selectedDurationSeconds:Ne,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_unusable_media_floor_fallback",details:{rootCompositionId:de,rootDurationSeconds:Q,fallbackKind:"media_duration_floor",mediaDurationFloorSeconds:h,authoredCompositionDurationFloorSeconds:b,selectedDurationSeconds:Ne,selectedTimelineIds:[de]}}}}let ue=Ie?.getAttribute("data-duration"),he=ue?parseFloat(ue):null,be=Math.max(P(he)?he:0,b??0);if(be>0&&P(be)&&P(Q)&&be>=Q+.5){let se=ge;if(typeof se.to=="function")try{se.to({},{duration:0},be)}catch(Te){_("runtime.init.site6",Te)}let Ne=L(ge);if(P(Ne))return{timeline:ge,selectedTimelineIds:[de],selectedDurationSeconds:Ne,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_padded_to_declared_duration",details:{rootCompositionId:de,rootDurationSeconds:Q,rootDeclaredDur:he,authoredCompositionDurationFloorSeconds:b,newDur:Ne}}}}return{timeline:ge,selectedTimelineIds:[de],selectedDurationSeconds:Q,mediaDurationFloorSeconds:h,diagnostics:oe.length>0?{code:"root_timeline_auto_nested_children",details:{rootCompositionId:de,selectedDurationSeconds:Q,autoNestedChildren:oe}}:void 0}}if(fe.length>0){let oe=fe.map(he=>he.compositionId),Q=G(fe),ue=L(Q);if(Q)return{timeline:Q,selectedTimelineIds:oe,selectedDurationSeconds:ue,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_missing_fallback",details:{rootCompositionId:de,fallbackKind:"composite_by_root_children",minCandidateDurationSeconds:T,selectedDurationSeconds:ue,mediaDurationFloorSeconds:h,selectedTimelineIds:oe}}}}return{timeline:null}},Y=!1,me=()=>{if(!M)return!1;let d=t.capturedTimeline,p=L(d),h=P(p);if(d&&h&&Y)return!1;let b=W();if(!b.timeline)return!1;if(d&&d===b.timeline)return typeof d.timeScale=="function"&&d.timeScale(t.playbackRate),!1;t.capturedTimeline=b.timeline,typeof t.capturedTimeline.timeScale=="function"&&t.capturedTimeline.timeScale(t.playbackRate);let y=U(t.capturedTimeline,0);if(y>0){try{I.setDuration(y)}catch{}t.capturedTimeline.pause()}b.diagnostics&&Ae({source:"hf-preview",type:"diagnostic",code:b.diagnostics.code,details:b.diagnostics.details}),Ae({source:"hf-preview",type:"diagnostic",code:"timeline_bound",details:{selectedTimelineIds:b.selectedTimelineIds??[],selectedDurationSeconds:b.selectedDurationSeconds??null,mediaDurationFloorSeconds:b.mediaDurationFloorSeconds??null}});for(let T of V)j.delete(T),Le(T);return!0};window.__hfForceTimelineRebind=()=>{Y=!1,me()};let Fe=()=>{let d=D();if(!(d instanceof HTMLElement))return;let p=d.getBoundingClientRect(),h=Number(d.getAttribute("data-width")),b=Number(d.getAttribute("data-height")),y=window.getComputedStyle(d),T=Number.isFinite(h)&&h>0&&Number.isFinite(b)&&b>0,te=p.width<=0||p.height<=0||d.clientWidth<=0||d.clientHeight<=0;!T||!te||l("root_stage_layout_zero",{compositionId:d.getAttribute("data-composition-id")??null,declaredWidth:h,declaredHeight:b,rectWidth:Math.round(p.width),rectHeight:Math.round(p.height),clientWidth:d.clientWidth,clientHeight:d.clientHeight,display:y.display,visibility:y.visibility,overflow:y.overflow},`root-stage-layout-zero:${d.getAttribute("data-composition-id")??"unknown"}`)},H=()=>{t.tornDown||(o!=null&&window.cancelAnimationFrame(o),o=window.requestAnimationFrame(()=>{o=null,Fe()}))},k=()=>{e=d=>{let p=E(d.error??d.message).slice(0,F);if(!p)return;let h=S(p);Ae({source:"hf-preview",type:"diagnostic",code:h.code,details:{category:h.category,message:p,filename:d.filename||null,line:Number.isFinite(d.lineno)?d.lineno:null,column:Number.isFinite(d.colno)?d.colno:null}})},n=d=>{let p=E(d.reason).slice(0,F);if(!p)return;let h=S(p);Ae({source:"hf-preview",type:"diagnostic",code:`${h.code}_unhandled_rejection`,details:{category:`${h.category}-unhandled-rejection`,message:p}})},window.addEventListener("error",e),window.addEventListener("unhandledrejection",n)},O=()=>{let d=Array.from(document.querySelectorAll("img, video, audio, source, link[rel=\'stylesheet\']"));for(let h of d){let b=()=>{if(!(h instanceof Element))return;let y=h.tagName.toLowerCase(),T=h.getAttribute("src")??h.getAttribute("href")??h.getAttribute("poster")??null,te=y==="link"?"runtime_stylesheet_load_failed":"runtime_asset_load_failed";l(te,{tagName:y,assetUrl:T,currentSrc:(h instanceof HTMLImageElement||h instanceof HTMLMediaElement)&&h.currentSrc||null,readyState:h instanceof HTMLMediaElement?h.readyState:null,networkState:h instanceof HTMLMediaElement?h.networkState:null},`${te}:${y}:${T??"unknown"}`)};h.addEventListener("error",b),s(()=>{h.removeEventListener("error",b)})}let p=document.fonts;p&&p.ready.then(()=>{if(t.tornDown)return;let h=Array.from(p).filter(b=>b.status==="error").map(b=>b.family).filter(b=>!!b).slice(0,10);h.length!==0&&l("runtime_font_load_issue",{failedFamilies:h,totalFaces:Array.from(p).length},`runtime-font-load-issue:${h.join("|")}`)}).catch(()=>{})},ne=(d,p)=>{if(!d.timeline)return!1;let h=t.capturedTimeline;if(h&&h===d.timeline)return!1;let b=Math.max(0,t.currentTime||0),y=t.isPlaying;t.capturedTimeline=d.timeline,typeof t.capturedTimeline.timeScale=="function"&&t.capturedTimeline.timeScale(t.playbackRate);try{t.capturedTimeline.pause(),t.capturedTimeline.seek(b,!1),y&&t.capturedTimeline.play()}catch(T){_("runtime.init.site7",T)}return Ae({source:"hf-preview",type:"diagnostic",code:"timeline_loop_guard_rebind",details:{reason:p,previousTime:b,selectedTimelineIds:d.selectedTimelineIds??[],selectedDurationSeconds:d.selectedDurationSeconds??null,mediaDurationFloorSeconds:d.mediaDurationFloorSeconds??null}}),!0},ee=null,z=!1,V=new Set,j=new WeakMap,Ce=()=>{t.tornDown||(ee!=null&&window.clearTimeout(ee),ee=window.setTimeout(()=>{if(t.tornDown)return;ee=null;let d=W();if(!d.timeline||!P(d.mediaDurationFloorSeconds??null))return;if(!t.capturedTimeline){me()&&(Ge(),Me(!0));return}if(z)return;let h=L(t.capturedTimeline),b=d.selectedDurationSeconds??L(d.timeline);P(b)&&(!P(h)||b>=h+f)&&ne(d,"manual")&&(z=!0,Ae({source:"hf-preview",type:"diagnostic",code:"timeline_rebind_after_media_metadata",details:{previousDurationSeconds:h??null,selectedDurationSeconds:b??null,selectedTimelineIds:d.selectedTimelineIds??[],mediaDurationFloorSeconds:d.mediaDurationFloorSeconds??null}}),Ge(),Me(!0))},x))},we=()=>{for(let d of V)d.removeEventListener("loadedmetadata",Ce),d.removeEventListener("durationchange",Ce);V.clear()},$e=()=>{if(t.tornDown)return;let d=Array.from(document.querySelectorAll("video, audio"));for(let p of d){if(V.has(p))continue;V.add(p);let h=Number.parseFloat(p.dataset.volume??"");Number.isFinite(h)&&(p.volume=Math.max(0,Math.min(1,h))),p.addEventListener("loadedmetadata",Ce),p.addEventListener("durationchange",Ce),p.preload!=="auto"&&(p.preload="auto"),p.readyState<HTMLMediaElement.HAVE_FUTURE_DATA&&p.load(),Le(p)}},Le=d=>{j.has(d)||Ti(d,t.capturedTimeline,U(t.capturedTimeline,0),j)},We=()=>{let d=y=>{let T=y.closest("[data-composition-id]"),te=T?C(T,0):null,G=T?g(T,{includeAuthoredTimingAttrs:!0}):null;return{compositionRoot:T,inheritedStart:te,inheritedDuration:G}},p=vi({shouldIncludeElement:y=>y.hasAttribute("data-start")||!!d(y).compositionRoot,resolveStartSeconds:y=>{let T=d(y);return A(y,T.inheritedStart??0)},resolveDurationSeconds:y=>{let T=d(y),te=A(y,T.inheritedStart??0),G=Number.parseFloat(y.dataset.playbackStart??y.dataset.mediaStart??"0")||0,ie=T.inheritedStart!=null&&T.inheritedDuration!=null&&T.inheritedDuration>0?Math.max(0,T.inheritedStart+T.inheritedDuration-te):null,xe=Number.isFinite(y.duration)&&y.duration>G?Math.max(0,y.duration-G):null;return xe!=null&&ie!=null?Math.min(xe,ie):xe??ie}});for(let y of p.mediaClips){let T=j.get(y.el);T&&(y.volumeKeyframes=T)}let h=t.mediaForceSyncNextTick;h&&(t.mediaForceSyncNextTick=!1),_i({clips:p.mediaClips,timeSeconds:t.currentTime,playing:t.isPlaying,playbackRate:t.playbackRate,outputMuted:t.mediaOutputMuted||pe.isActive(),userMuted:t.bridgeMuted,userVolume:t.bridgeVolume,forceSync:h,onElementVolume:(y,T)=>pe.setElementVolume(y,T),onAutoplayBlocked:()=>{t.mediaAutoplayBlockedPosted||(t.mediaAutoplayBlockedPosted=!0,Ae({source:"hf-preview",type:"media-autoplay-blocked"}))}});let b=Array.from(document.querySelectorAll("[data-start]"));for(let y of b){if(!(y instanceof HTMLElement))continue;let T=y.tagName.toLowerCase();if(T==="script"||T==="style"||T==="link"||T==="meta")continue;let te=T==="video"||T==="audio"?A(y,0):C(y,0),G=g(y),ie=y.getAttribute("data-composition-id");if(ie){let de=(window.__timelines??{})[ie],ge=null;if(de&&typeof de.duration=="function"){let fe=Number(de.duration());Number.isFinite(fe)&&fe>0&&(ge=fe)}let Je=y.hasAttribute("data-composition-src")||y.hasAttribute("data-composition-file");G!=null&&G>0&&ge!=null&&!Je?G=Math.min(G,ge):(G==null||G<=0)&&ge!=null&&(G=ge)}let xe=G!=null&&G>0?te+G:Number.POSITIVE_INFINITY,Ie=t.currentTime>=te&&(Number.isFinite(xe)?t.currentTime<xe:!0);y.style.visibility=Ie?"visible":"hidden"}},Me=d=>{let p=Math.max(0,Math.round((t.currentTime||0)*t.canonicalFps)),h=Date.now();(d||p!==t.bridgeLastPostedFrame||t.isPlaying!==t.bridgeLastPostedPlaying||t.bridgeMuted!==t.bridgeLastPostedMuted||h-t.bridgeLastPostedAt>=t.bridgeMaxPostIntervalMs)&&(t.bridgeLastPostedFrame=p,t.bridgeLastPostedPlaying=t.isPlaying,t.bridgeLastPostedMuted=t.bridgeMuted,t.bridgeLastPostedAt=h,Ae({source:"hf-preview",type:"state",frame:p,isPlaying:t.isPlaying,muted:t.bridgeMuted,playbackRate:t.playbackRate}))},Ge=()=>{X(),v(),q();let d=D();if(d){let h=B(d.getAttribute("data-width")),b=B(d.getAttribute("data-height")),y=h?parseInt(h,10):0,T=b?parseInt(b,10):0;y>0&&T>0&&Ae({source:"hf-preview",type:"stage-size",width:y,height:T})}me();let p=Wi({canonicalFps:t.canonicalFps});window.__clipManifest=p,Ae(p),H()},De=(d,p=0)=>{for(let h of t.deterministicAdapters){try{d==="discover"&&h.discover(),d==="pause"&&h.pause(),d==="play"&&h.play&&h.play()}catch(b){_("runtime.init.site8",b)}if(d==="discover")try{h.seek({time:p})}catch(b){_("runtime.init.site9",b)}}};if(M)ni();else{let d={injectedStyles:t.injectedCompStyles,injectedScripts:t.injectedCompScripts,parseDimensionPx:B,onDiagnostic:({code:p,details:h})=>{Ae({source:"hf-preview",type:"diagnostic",code:p,details:h})}};Ao(d).then(()=>bo(d)).finally(()=>{M=!0,me(),window.__renderReady=!0,$e(),De("discover",t.currentTime),O(),ni(),Ge(),Me(!0)})}let Pt=Ri({postMessage:d=>Ae(d)});Pt.installPickerApi();let dn=d=>{let p=Number(d);!Number.isFinite(p)||p<=0?t.playbackRate=1:t.playbackRate=Math.max(.1,Math.min(5,p)),t.mediaForceSyncNextTick=!0,t.capturedTimeline&&typeof t.capturedTimeline.timeScale=="function"&&t.capturedTimeline.timeScale(t.playbackRate);let h=document.querySelectorAll("video, audio");for(let b of h)if(b instanceof HTMLMediaElement)try{b.playbackRate=t.playbackRate}catch(y){_("runtime.init.site10",y)}},ce=Di({getTimeline:()=>t.capturedTimeline,setTimeline:d=>{t.capturedTimeline=d},getTimelineRegistry:()=>window.__timelines??{},getIsPlaying:()=>t.isPlaying,setIsPlaying:d=>{t.isPlaying!==d&&(t.mediaForceSyncNextTick=!0),t.isPlaying=d},getPlaybackRate:()=>t.playbackRate,setPlaybackRate:dn,getCanonicalFps:()=>t.canonicalFps,onSyncMedia:(d,p)=>{t.currentTime=Math.max(0,Number(d)||0),t.isPlaying!==p&&(t.mediaForceSyncNextTick=!0),t.isPlaying=p,We()},onStatePost:Me,onDeterministicSeek:d=>{for(let p of t.deterministicAdapters)try{p.seek({time:Number(d)||0})}catch(h){_("runtime.init.site11",h)}},onDeterministicPause:()=>De("pause"),onDeterministicPlay:()=>De("play"),onRenderFrameSeek:()=>{},onShowNativeVideos:()=>{},getSafeDuration:()=>U(t.capturedTimeline,0)});window.__player=a(ce),window.__playerReady=!0,xi(Ae),dt("composition_loaded",{duration:ce.getDuration(),compositionId:document.querySelector("[data-composition-id]")?.getAttribute("data-composition-id")??null}),t.controlBridgeHandler=hi({onPlay:()=>{ce.play(),dt("composition_played",{time:ce.getTime()})},onPause:()=>{ce.pause(),dt("composition_paused",{time:ce.getTime()})},onSeek:(d,p)=>{let h=Math.max(0,d)/t.canonicalFps;ce.seek(h),dt("composition_seeked",{time:h})},onSetMuted:d=>{t.bridgeMuted=d;let p=d||t.mediaOutputMuted;pe.setMuted(p);let h=document.querySelectorAll("video, audio");for(let b of h)b instanceof HTMLMediaElement&&(b.muted=p)},onSetVolume:d=>{t.bridgeVolume=d,pe.setVolume(d);let p=document.querySelectorAll("video, audio");for(let h of p){if(!(h instanceof HTMLMediaElement))continue;let b=parseFloat(h.dataset.volume??""),y=Number.isFinite(b)?b:1;h.volume=y*d}},onSetMediaOutputMuted:d=>{t.mediaOutputMuted=d;let p=d||t.bridgeMuted;pe.setMuted(p);let h=document.querySelectorAll("video, audio");for(let b of h)b instanceof HTMLMediaElement&&(b.muted=p)},onSetPlaybackRate:d=>{dn(d),t.transportClock&&t.transportClock.setRate(t.playbackRate),pe.setRate(t.playbackRate)},onTick:()=>{if(t.tornDown||!I.isPlaying())return;let d=I.now();if(t.currentTime=d,Ke(d),I.reachedEnd()){pe.stopAll(),I.detachAudioSource(),I.pause(),t.isPlaying=!1;let p=I.getDuration();Number.isFinite(p)&&(I.seek(p),t.currentTime=p,Ke(p)),De("pause"),We(),Me(!0)}},onEnablePickMode:()=>Pt.enablePickMode(),onDisablePickMode:()=>Pt.disablePickMode()}),me(),t.capturedTimeline&&(ce._timeline=t.capturedTimeline),window.__renderReady=!0,M&&setTimeout(()=>{let d=t.capturedTimeline;me()&&t.capturedTimeline!==d&&(ce._timeline=t.capturedTimeline),De("discover",t.currentTime),window.__renderReady=!0,Ge(),Me(!0)},0),t.deterministicAdapters=[Mi(),gi({resolveStartSeconds:d=>C(d,0)}),Si(),Ei(),wi(),Ni(),yi({getTimeline:()=>t.capturedTimeline})],Ci(),k(),$e(),De("discover");let I=new rn;t.transportClock=I;let pe=new on,di=!1;pe.init().then(d=>{di=d});let Wt=0,fn=!1,Zo=(d,p,h)=>{try{d.pause(),typeof d.totalTime=="function"?d.totalTime(p,!1):d.seek(p,!1)}catch(b){_(h,b)}},Xo=d=>{let p=window.__timelines??{},h=D()?.getAttribute("data-composition-id")??null;for(let[b,y]of Object.entries(p)){if(!y||b===h)continue;let T=document.querySelector(`[data-composition-id="${CSS.escape(b)}"]`);if(!T)continue;let te=C(T,0);if(!Number.isFinite(te))continue;let G=g(T,{includeAuthoredTimingAttrs:!0}),ie=L(y),xe=G!=null&&G>0?G:ie,Ie=Math.max(0,xe!=null&&xe>0?Math.min(xe,d-te):d-te);Zo(y,Ie,"runtime.init.transport.childTimeline")}},es=d=>{let p=window.__timelines??{};for(let h of Object.values(p))if(!(!h||h===d))try{h.play()}catch(b){_("runtime.init.activateSiblings",b)}},Ke=(d,p)=>{let h=t.capturedTimeline;if(h){p?.activateChildren&&es(h);try{typeof h.totalTime=="function"?h.totalTime(d,!1):h.seek(d,!1)}catch(b){_("runtime.init.transport.seek",b)}}else Xo(d);for(let b of t.deterministicAdapters)try{b.seek({time:d})}catch(y){_("runtime.init.transport.adapter",y)}},fi=()=>{if(!(t.tornDown||fn)){fn=!0;try{if(t.transportRafId=window.requestAnimationFrame(fi),Wt+=1,Wt%60===0&&!(I.isPlaying()&&t.capturedTimeline!=null&&I.now()<m)){let h=t.capturedTimeline;if(me()){t.capturedTimeline&&!ce._timeline&&(ce._timeline=t.capturedTimeline),t.capturedTimeline&&t.capturedTimeline!==h&&t.capturedTimeline.pause();let b=U(t.capturedTimeline,0);b>0&&I.setDuration(b),Ge()}}if(Wt%20===0&&Ge(),Wt%30===0&&$e(),t.capturedTimeline){let p=U(t.capturedTimeline,0);p>0&&I.setDuration(p)}if(I.isPlaying()&&!t.mediaOutputMuted)if(pe.isActive()&&pe.context){let p=pe.getTime();p>=0&&I.attachAudioSource({currentTimeSeconds:p})}else{let p=document.querySelectorAll("audio[data-start]"),h=!1;for(let b of p){if(!(b instanceof HTMLMediaElement)||!b.isConnected)continue;let y=Number.parseFloat(b.dataset.start??""),T=Number.parseFloat(b.dataset.duration??""),te=Number.isFinite(T)&&T>0?y+T:1/0,G=Number.parseFloat(b.dataset.playbackStart??b.dataset.mediaStart??"0")||0;if(Number.isFinite(y)&&t.currentTime>=y&&t.currentTime<te){b.paused?!b.error&&b.readyState<HTMLMediaElement.HAVE_FUTURE_DATA&&(I.attachAudioSource({currentTimeSeconds:t.currentTime}),h=!0):(I.attachAudioSource({el:b,compositionStart:y,mediaStart:G}),h=!0);break}}!h&&I.hasAudioSource()&&I.detachAudioSource()}else I.hasAudioSource()&&I.detachAudioSource();let d=I.now();if(t.currentTime=d,Ke(d),I.isPlaying()&&I.reachedEnd()){pe.stopAll(),I.detachAudioSource(),I.pause(),t.isPlaying=!1;let p=I.getDuration();Number.isFinite(p)&&(I.seek(p),t.currentTime=p,Ke(p)),De("pause"),We(),Me(!0);return}I.isPlaying()&&We(),Me(!1)}finally{fn=!1}}},mi=d=>{let p=document.querySelectorAll("video, audio");for(let h of p){if(!(h instanceof HTMLMediaElement)||!h.isConnected)continue;let b=Number.parseFloat(h.dataset.start??"");if(!Number.isFinite(b))continue;let y=Number.parseFloat(h.dataset.duration??""),T=Number.isFinite(y)&&y>0?b+y:1/0;if(d<b||d>=T)continue;let te=Number.parseFloat(h.dataset.playbackStart??h.dataset.mediaStart??"0")||0,G=d-b+te;if(G>=0)try{h.currentTime=G}catch{}}};if(ce.play=()=>{let d=t.capturedTimeline;if(I.isPlaying())return;let p=U(d,0);if(p>0)I.setDuration(p),I.reachedEnd()&&(I.seek(0),t.currentTime=0,Ke(0));else{let h=D(),b=Number(h?.getAttribute("data-duration")??0);b>0&&I.setDuration(b)}if(d&&d.pause(),!!I.play()){if(t.isPlaying=!0,t.mediaForceSyncNextTick=!0,mi(I.now()),di){let h=pe.startGeneration(),b=document.querySelectorAll("audio[data-start]");for(let y of b){if(!(y instanceof HTMLMediaElement)||!y.isConnected)continue;let T=Number.parseFloat(y.dataset.start??"");if(!Number.isFinite(T))continue;let te=Number.parseFloat(y.dataset.playbackStart??y.dataset.mediaStart??"0")||0,G=Number.parseFloat(y.dataset.volume??""),ie=Number.isFinite(G)?G:1;pe.decodeAudioElement(y).then(xe=>{!xe||!I.isPlaying()||pe.schedulePlayback(y,xe,T,te,I.now(),ie*t.bridgeVolume,h,t.playbackRate)})}}De("play"),We(),Me(!0)}},ce.pause=()=>{if(!I.isPlaying())return;pe.stopAll(),I.detachAudioSource(),I.pause(),t.isPlaying=!1,t.currentTime=I.now(),t.mediaForceSyncNextTick=!0,mi(t.currentTime);let d=t.capturedTimeline;d&&d.pause(),De("pause"),We(),Me(!0)},ce.seek=d=>{let p=tt(Math.max(0,Number(d)||0),t.canonicalFps);pe.stopAll(),I.detachAudioSource(),I.isPlaying()&&I.pause(),I.seek(p),t.currentTime=I.now(),t.isPlaying=!1,t.mediaForceSyncNextTick=!0;let b=t.capturedTimeline;b&&b.pause(),Ke(t.currentTime),De("pause"),We(),Me(!0)},ce.renderSeek=d=>{let p=tt(Math.max(0,Number(d)||0),t.canonicalFps);I.isPlaying()&&I.pause(),I.seek(p),t.currentTime=I.now(),t.isPlaying=!1,t.mediaForceSyncNextTick=!0,Ke(t.currentTime,{activateChildren:!0}),We(),Me(!0)},ce.getTime=()=>I.now(),ce.getDuration=()=>{let d=I.getDuration();return Number.isFinite(d)?d:0},ce.isPlaying=()=>I.isPlaying(),ce.setPlaybackRate=d=>{dn(d),I.setRate(t.playbackRate),pe.setRate(t.playbackRate)},t.capturedTimeline){let d=U(t.capturedTimeline,0);d>0&&I.setDuration(d),t.capturedTimeline.pause()}let pi=window.__player;if(pi){let d=["play","pause","seek","renderSeek","getTime","getDuration","isPlaying"];for(let p of d)Object.defineProperty(pi,p,{get:()=>ce[p],set:h=>{ce[p]=h},configurable:!0})}t.transportRafId=window.requestAnimationFrame(fi),Ge(),Me(!0);let mn=()=>{if(!t.tornDown){t.tornDown=!0,t.transportRafId!=null&&(window.cancelAnimationFrame(t.transportRafId),t.transportRafId=null),t.transportClock=null,pe.destroy(),ee!=null&&(window.clearTimeout(ee),ee=null),o!=null&&(window.cancelAnimationFrame(o),o=null),we(),t.controlBridgeHandler&&(window.removeEventListener("message",t.controlBridgeHandler),t.controlBridgeHandler=null),e&&(window.removeEventListener("error",e),e=null),n&&(window.removeEventListener("unhandledrejection",n),n=null),t.beforeUnloadHandler&&(window.removeEventListener("beforeunload",t.beforeUnloadHandler),t.beforeUnloadHandler=null),Pt.disablePickMode();for(let d of t.deterministicAdapters)if(!(!d||typeof d.revert!="function"))try{d.revert()}catch(p){_("runtime.init.site12",p)}t.deterministicAdapters=[];for(let d of i.splice(0))try{d()}catch(p){_("runtime.init.site13",p)}for(let d of t.injectedCompStyles)try{d.remove()}catch(p){_("runtime.init.site14",p)}t.injectedCompStyles=[];for(let d of t.injectedCompScripts)try{d.remove()}catch(p){_("runtime.init.site15",p)}t.injectedCompScripts=[],t.capturedTimeline=null,window.__hfRuntimeTeardown===mn&&(window.__hfRuntimeTeardown=null)}};window.__hfRuntimeTeardown=mn,t.beforeUnloadHandler=mn,window.addEventListener("beforeunload",t.beforeUnloadHandler)}var Co=["BN","BN","BN","BN","BN","BN","BN","BN","BN","S","B","S","WS","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","B","B","B","S","WS","ON","ON","ET","ET","ET","ON","ON","ON","ON","ON","ES","CS","ES","CS","CS","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","CS","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","BN","BN","BN","BN","BN","BN","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","CS","ON","ET","ET","ET","ET","ON","ON","ON","ON","L","ON","ON","BN","ON","ON","ET","ET","EN","EN","ON","L","ON","ON","ON","EN","L","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L"],ii=[[697,698,"ON"],[706,719,"ON"],[722,735,"ON"],[741,749,"ON"],[751,767,"ON"],[768,879,"NSM"],[884,885,"ON"],[894,894,"ON"],[900,901,"ON"],[903,903,"ON"],[1014,1014,"ON"],[1155,1161,"NSM"],[1418,1418,"ON"],[1421,1422,"ON"],[1423,1423,"ET"],[1424,1424,"R"],[1425,1469,"NSM"],[1470,1470,"R"],[1471,1471,"NSM"],[1472,1472,"R"],[1473,1474,"NSM"],[1475,1475,"R"],[1476,1477,"NSM"],[1478,1478,"R"],[1479,1479,"NSM"],[1480,1535,"R"],[1536,1541,"AN"],[1542,1543,"ON"],[1544,1544,"AL"],[1545,1546,"ET"],[1547,1547,"AL"],[1548,1548,"CS"],[1549,1549,"AL"],[1550,1551,"ON"],[1552,1562,"NSM"],[1563,1610,"AL"],[1611,1631,"NSM"],[1632,1641,"AN"],[1642,1642,"ET"],[1643,1644,"AN"],[1645,1647,"AL"],[1648,1648,"NSM"],[1649,1749,"AL"],[1750,1756,"NSM"],[1757,1757,"AN"],[1758,1758,"ON"],[1759,1764,"NSM"],[1765,1766,"AL"],[1767,1768,"NSM"],[1769,1769,"ON"],[1770,1773,"NSM"],[1774,1775,"AL"],[1776,1785,"EN"],[1786,1808,"AL"],[1809,1809,"NSM"],[1810,1839,"AL"],[1840,1866,"NSM"],[1867,1957,"AL"],[1958,1968,"NSM"],[1969,1983,"AL"],[1984,2026,"R"],[2027,2035,"NSM"],[2036,2037,"R"],[2038,2041,"ON"],[2042,2044,"R"],[2045,2045,"NSM"],[2046,2069,"R"],[2070,2073,"NSM"],[2074,2074,"R"],[2075,2083,"NSM"],[2084,2084,"R"],[2085,2087,"NSM"],[2088,2088,"R"],[2089,2093,"NSM"],[2094,2136,"R"],[2137,2139,"NSM"],[2140,2143,"R"],[2144,2191,"AL"],[2192,2193,"AN"],[2194,2198,"AL"],[2199,2207,"NSM"],[2208,2249,"AL"],[2250,2273,"NSM"],[2274,2274,"AN"],[2275,2306,"NSM"],[2362,2362,"NSM"],[2364,2364,"NSM"],[2369,2376,"NSM"],[2381,2381,"NSM"],[2385,2391,"NSM"],[2402,2403,"NSM"],[2433,2433,"NSM"],[2492,2492,"NSM"],[2497,2500,"NSM"],[2509,2509,"NSM"],[2530,2531,"NSM"],[2546,2547,"ET"],[2555,2555,"ET"],[2558,2558,"NSM"],[2561,2562,"NSM"],[2620,2620,"NSM"],[2625,2626,"NSM"],[2631,2632,"NSM"],[2635,2637,"NSM"],[2641,2641,"NSM"],[2672,2673,"NSM"],[2677,2677,"NSM"],[2689,2690,"NSM"],[2748,2748,"NSM"],[2753,2757,"NSM"],[2759,2760,"NSM"],[2765,2765,"NSM"],[2786,2787,"NSM"],[2801,2801,"ET"],[2810,2815,"NSM"],[2817,2817,"NSM"],[2876,2876,"NSM"],[2879,2879,"NSM"],[2881,2884,"NSM"],[2893,2893,"NSM"],[2901,2902,"NSM"],[2914,2915,"NSM"],[2946,2946,"NSM"],[3008,3008,"NSM"],[3021,3021,"NSM"],[3059,3064,"ON"],[3065,3065,"ET"],[3066,3066,"ON"],[3072,3072,"NSM"],[3076,3076,"NSM"],[3132,3132,"NSM"],[3134,3136,"NSM"],[3142,3144,"NSM"],[3146,3149,"NSM"],[3157,3158,"NSM"],[3170,3171,"NSM"],[3192,3198,"ON"],[3201,3201,"NSM"],[3260,3260,"NSM"],[3276,3277,"NSM"],[3298,3299,"NSM"],[3328,3329,"NSM"],[3387,3388,"NSM"],[3393,3396,"NSM"],[3405,3405,"NSM"],[3426,3427,"NSM"],[3457,3457,"NSM"],[3530,3530,"NSM"],[3538,3540,"NSM"],[3542,3542,"NSM"],[3633,3633,"NSM"],[3636,3642,"NSM"],[3647,3647,"ET"],[3655,3662,"NSM"],[3761,3761,"NSM"],[3764,3772,"NSM"],[3784,3790,"NSM"],[3864,3865,"NSM"],[3893,3893,"NSM"],[3895,3895,"NSM"],[3897,3897,"NSM"],[3898,3901,"ON"],[3953,3966,"NSM"],[3968,3972,"NSM"],[3974,3975,"NSM"],[3981,3991,"NSM"],[3993,4028,"NSM"],[4038,4038,"NSM"],[4141,4144,"NSM"],[4146,4151,"NSM"],[4153,4154,"NSM"],[4157,4158,"NSM"],[4184,4185,"NSM"],[4190,4192,"NSM"],[4209,4212,"NSM"],[4226,4226,"NSM"],[4229,4230,"NSM"],[4237,4237,"NSM"],[4253,4253,"NSM"],[4957,4959,"NSM"],[5008,5017,"ON"],[5120,5120,"ON"],[5760,5760,"WS"],[5787,5788,"ON"],[5906,5908,"NSM"],[5938,5939,"NSM"],[5970,5971,"NSM"],[6002,6003,"NSM"],[6068,6069,"NSM"],[6071,6077,"NSM"],[6086,6086,"NSM"],[6089,6099,"NSM"],[6107,6107,"ET"],[6109,6109,"NSM"],[6128,6137,"ON"],[6144,6154,"ON"],[6155,6157,"NSM"],[6158,6158,"BN"],[6159,6159,"NSM"],[6277,6278,"NSM"],[6313,6313,"NSM"],[6432,6434,"NSM"],[6439,6440,"NSM"],[6450,6450,"NSM"],[6457,6459,"NSM"],[6464,6464,"ON"],[6468,6469,"ON"],[6622,6655,"ON"],[6679,6680,"NSM"],[6683,6683,"NSM"],[6742,6742,"NSM"],[6744,6750,"NSM"],[6752,6752,"NSM"],[6754,6754,"NSM"],[6757,6764,"NSM"],[6771,6780,"NSM"],[6783,6783,"NSM"],[6832,6877,"NSM"],[6880,6891,"NSM"],[6912,6915,"NSM"],[6964,6964,"NSM"],[6966,6970,"NSM"],[6972,6972,"NSM"],[6978,6978,"NSM"],[7019,7027,"NSM"],[7040,7041,"NSM"],[7074,7077,"NSM"],[7080,7081,"NSM"],[7083,7085,"NSM"],[7142,7142,"NSM"],[7144,7145,"NSM"],[7149,7149,"NSM"],[7151,7153,"NSM"],[7212,7219,"NSM"],[7222,7223,"NSM"],[7376,7378,"NSM"],[7380,7392,"NSM"],[7394,7400,"NSM"],[7405,7405,"NSM"],[7412,7412,"NSM"],[7416,7417,"NSM"],[7616,7679,"NSM"],[8125,8125,"ON"],[8127,8129,"ON"],[8141,8143,"ON"],[8157,8159,"ON"],[8173,8175,"ON"],[8189,8190,"ON"],[8192,8202,"WS"],[8203,8205,"BN"],[8207,8207,"R"],[8208,8231,"ON"],[8232,8232,"WS"],[8233,8233,"B"],[8234,8238,"BN"],[8239,8239,"CS"],[8240,8244,"ET"],[8245,8259,"ON"],[8260,8260,"CS"],[8261,8286,"ON"],[8287,8287,"WS"],[8288,8303,"BN"],[8304,8304,"EN"],[8308,8313,"EN"],[8314,8315,"ES"],[8316,8318,"ON"],[8320,8329,"EN"],[8330,8331,"ES"],[8332,8334,"ON"],[8352,8399,"ET"],[8400,8432,"NSM"],[8448,8449,"ON"],[8451,8454,"ON"],[8456,8457,"ON"],[8468,8468,"ON"],[8470,8472,"ON"],[8478,8483,"ON"],[8485,8485,"ON"],[8487,8487,"ON"],[8489,8489,"ON"],[8494,8494,"ET"],[8506,8507,"ON"],[8512,8516,"ON"],[8522,8525,"ON"],[8528,8543,"ON"],[8585,8587,"ON"],[8592,8721,"ON"],[8722,8722,"ES"],[8723,8723,"ET"],[8724,9013,"ON"],[9083,9108,"ON"],[9110,9257,"ON"],[9280,9290,"ON"],[9312,9351,"ON"],[9352,9371,"EN"],[9450,9899,"ON"],[9901,10239,"ON"],[10496,11123,"ON"],[11126,11263,"ON"],[11493,11498,"ON"],[11503,11505,"NSM"],[11513,11519,"ON"],[11647,11647,"NSM"],[11744,11775,"NSM"],[11776,11869,"ON"],[11904,11929,"ON"],[11931,12019,"ON"],[12032,12245,"ON"],[12272,12287,"ON"],[12288,12288,"WS"],[12289,12292,"ON"],[12296,12320,"ON"],[12330,12333,"NSM"],[12336,12336,"ON"],[12342,12343,"ON"],[12349,12351,"ON"],[12441,12442,"NSM"],[12443,12444,"ON"],[12448,12448,"ON"],[12539,12539,"ON"],[12736,12773,"ON"],[12783,12783,"ON"],[12829,12830,"ON"],[12880,12895,"ON"],[12924,12926,"ON"],[12977,12991,"ON"],[13004,13007,"ON"],[13175,13178,"ON"],[13278,13279,"ON"],[13311,13311,"ON"],[19904,19967,"ON"],[42128,42182,"ON"],[42509,42511,"ON"],[42607,42610,"NSM"],[42611,42611,"ON"],[42612,42621,"NSM"],[42622,42623,"ON"],[42654,42655,"NSM"],[42736,42737,"NSM"],[42752,42785,"ON"],[42888,42888,"ON"],[43010,43010,"NSM"],[43014,43014,"NSM"],[43019,43019,"NSM"],[43045,43046,"NSM"],[43048,43051,"ON"],[43052,43052,"NSM"],[43064,43065,"ET"],[43124,43127,"ON"],[43204,43205,"NSM"],[43232,43249,"NSM"],[43263,43263,"NSM"],[43302,43309,"NSM"],[43335,43345,"NSM"],[43392,43394,"NSM"],[43443,43443,"NSM"],[43446,43449,"NSM"],[43452,43453,"NSM"],[43493,43493,"NSM"],[43561,43566,"NSM"],[43569,43570,"NSM"],[43573,43574,"NSM"],[43587,43587,"NSM"],[43596,43596,"NSM"],[43644,43644,"NSM"],[43696,43696,"NSM"],[43698,43700,"NSM"],[43703,43704,"NSM"],[43710,43711,"NSM"],[43713,43713,"NSM"],[43756,43757,"NSM"],[43766,43766,"NSM"],[43882,43883,"ON"],[44005,44005,"NSM"],[44008,44008,"NSM"],[44013,44013,"NSM"],[64285,64285,"R"],[64286,64286,"NSM"],[64287,64296,"R"],[64297,64297,"ES"],[64298,64335,"R"],[64336,64450,"AL"],[64451,64466,"ON"],[64467,64829,"AL"],[64830,64847,"ON"],[64848,64911,"AL"],[64912,64913,"ON"],[64914,64967,"AL"],[64968,64975,"ON"],[64976,65007,"BN"],[65008,65020,"AL"],[65021,65023,"ON"],[65024,65039,"NSM"],[65040,65049,"ON"],[65056,65071,"NSM"],[65072,65103,"ON"],[65104,65104,"CS"],[65105,65105,"ON"],[65106,65106,"CS"],[65108,65108,"ON"],[65109,65109,"CS"],[65110,65118,"ON"],[65119,65119,"ET"],[65120,65121,"ON"],[65122,65123,"ES"],[65124,65126,"ON"],[65128,65128,"ON"],[65129,65130,"ET"],[65131,65131,"ON"],[65136,65278,"AL"],[65279,65279,"BN"],[65281,65282,"ON"],[65283,65285,"ET"],[65286,65290,"ON"],[65291,65291,"ES"],[65292,65292,"CS"],[65293,65293,"ES"],[65294,65295,"CS"],[65296,65305,"EN"],[65306,65306,"CS"],[65307,65312,"ON"],[65339,65344,"ON"],[65371,65381,"ON"],[65504,65505,"ET"],[65506,65508,"ON"],[65509,65510,"ET"],[65512,65518,"ON"],[65520,65528,"BN"],[65529,65533,"ON"],[65534,65535,"BN"],[65793,65793,"ON"],[65856,65932,"ON"],[65936,65948,"ON"],[65952,65952,"ON"],[66045,66045,"NSM"],[66272,66272,"NSM"],[66273,66299,"EN"],[66422,66426,"NSM"],[67584,67870,"R"],[67871,67871,"ON"],[67872,68096,"R"],[68097,68099,"NSM"],[68100,68100,"R"],[68101,68102,"NSM"],[68103,68107,"R"],[68108,68111,"NSM"],[68112,68151,"R"],[68152,68154,"NSM"],[68155,68158,"R"],[68159,68159,"NSM"],[68160,68324,"R"],[68325,68326,"NSM"],[68327,68408,"R"],[68409,68415,"ON"],[68416,68863,"R"],[68864,68899,"AL"],[68900,68903,"NSM"],[68904,68911,"AL"],[68912,68921,"AN"],[68922,68927,"AL"],[68928,68937,"AN"],[68938,68968,"R"],[68969,68973,"NSM"],[68974,68974,"ON"],[68975,69215,"R"],[69216,69246,"AN"],[69247,69290,"R"],[69291,69292,"NSM"],[69293,69311,"R"],[69312,69327,"AL"],[69328,69336,"ON"],[69337,69369,"AL"],[69370,69375,"NSM"],[69376,69423,"R"],[69424,69445,"AL"],[69446,69456,"NSM"],[69457,69487,"AL"],[69488,69505,"R"],[69506,69509,"NSM"],[69510,69631,"R"],[69633,69633,"NSM"],[69688,69702,"NSM"],[69714,69733,"ON"],[69744,69744,"NSM"],[69747,69748,"NSM"],[69759,69761,"NSM"],[69811,69814,"NSM"],[69817,69818,"NSM"],[69826,69826,"NSM"],[69888,69890,"NSM"],[69927,69931,"NSM"],[69933,69940,"NSM"],[70003,70003,"NSM"],[70016,70017,"NSM"],[70070,70078,"NSM"],[70089,70092,"NSM"],[70095,70095,"NSM"],[70191,70193,"NSM"],[70196,70196,"NSM"],[70198,70199,"NSM"],[70206,70206,"NSM"],[70209,70209,"NSM"],[70367,70367,"NSM"],[70371,70378,"NSM"],[70400,70401,"NSM"],[70459,70460,"NSM"],[70464,70464,"NSM"],[70502,70508,"NSM"],[70512,70516,"NSM"],[70587,70592,"NSM"],[70606,70606,"NSM"],[70608,70608,"NSM"],[70610,70610,"NSM"],[70625,70626,"NSM"],[70712,70719,"NSM"],[70722,70724,"NSM"],[70726,70726,"NSM"],[70750,70750,"NSM"],[70835,70840,"NSM"],[70842,70842,"NSM"],[70847,70848,"NSM"],[70850,70851,"NSM"],[71090,71093,"NSM"],[71100,71101,"NSM"],[71103,71104,"NSM"],[71132,71133,"NSM"],[71219,71226,"NSM"],[71229,71229,"NSM"],[71231,71232,"NSM"],[71264,71276,"ON"],[71339,71339,"NSM"],[71341,71341,"NSM"],[71344,71349,"NSM"],[71351,71351,"NSM"],[71453,71453,"NSM"],[71455,71455,"NSM"],[71458,71461,"NSM"],[71463,71467,"NSM"],[71727,71735,"NSM"],[71737,71738,"NSM"],[71995,71996,"NSM"],[71998,71998,"NSM"],[72003,72003,"NSM"],[72148,72151,"NSM"],[72154,72155,"NSM"],[72160,72160,"NSM"],[72193,72198,"NSM"],[72201,72202,"NSM"],[72243,72248,"NSM"],[72251,72254,"NSM"],[72263,72263,"NSM"],[72273,72278,"NSM"],[72281,72283,"NSM"],[72330,72342,"NSM"],[72344,72345,"NSM"],[72544,72544,"NSM"],[72546,72548,"NSM"],[72550,72550,"NSM"],[72752,72758,"NSM"],[72760,72765,"NSM"],[72850,72871,"NSM"],[72874,72880,"NSM"],[72882,72883,"NSM"],[72885,72886,"NSM"],[73009,73014,"NSM"],[73018,73018,"NSM"],[73020,73021,"NSM"],[73023,73029,"NSM"],[73031,73031,"NSM"],[73104,73105,"NSM"],[73109,73109,"NSM"],[73111,73111,"NSM"],[73459,73460,"NSM"],[73472,73473,"NSM"],[73526,73530,"NSM"],[73536,73536,"NSM"],[73538,73538,"NSM"],[73562,73562,"NSM"],[73685,73692,"ON"],[73693,73696,"ET"],[73697,73713,"ON"],[78912,78912,"NSM"],[78919,78933,"NSM"],[90398,90409,"NSM"],[90413,90415,"NSM"],[92912,92916,"NSM"],[92976,92982,"NSM"],[94031,94031,"NSM"],[94095,94098,"NSM"],[94178,94178,"ON"],[94180,94180,"NSM"],[113821,113822,"NSM"],[113824,113827,"BN"],[117760,117973,"ON"],[118e3,118009,"EN"],[118010,118012,"ON"],[118016,118451,"ON"],[118458,118480,"ON"],[118496,118512,"ON"],[118528,118573,"NSM"],[118576,118598,"NSM"],[119143,119145,"NSM"],[119155,119162,"BN"],[119163,119170,"NSM"],[119173,119179,"NSM"],[119210,119213,"NSM"],[119273,119274,"ON"],[119296,119361,"ON"],[119362,119364,"NSM"],[119365,119365,"ON"],[119552,119638,"ON"],[120513,120513,"ON"],[120539,120539,"ON"],[120571,120571,"ON"],[120597,120597,"ON"],[120629,120629,"ON"],[120655,120655,"ON"],[120687,120687,"ON"],[120713,120713,"ON"],[120745,120745,"ON"],[120771,120771,"ON"],[120782,120831,"EN"],[121344,121398,"NSM"],[121403,121452,"NSM"],[121461,121461,"NSM"],[121476,121476,"NSM"],[121499,121503,"NSM"],[121505,121519,"NSM"],[122880,122886,"NSM"],[122888,122904,"NSM"],[122907,122913,"NSM"],[122915,122916,"NSM"],[122918,122922,"NSM"],[123023,123023,"NSM"],[123184,123190,"NSM"],[123566,123566,"NSM"],[123628,123631,"NSM"],[123647,123647,"ET"],[124140,124143,"NSM"],[124398,124399,"NSM"],[124643,124643,"NSM"],[124646,124646,"NSM"],[124654,124655,"NSM"],[124661,124661,"NSM"],[124928,125135,"R"],[125136,125142,"NSM"],[125143,125251,"R"],[125252,125258,"NSM"],[125259,126063,"R"],[126064,126143,"AL"],[126144,126207,"R"],[126208,126287,"AL"],[126288,126463,"R"],[126464,126703,"AL"],[126704,126705,"ON"],[126706,126719,"AL"],[126720,126975,"R"],[126976,127019,"ON"],[127024,127123,"ON"],[127136,127150,"ON"],[127153,127167,"ON"],[127169,127183,"ON"],[127185,127221,"ON"],[127232,127242,"EN"],[127243,127247,"ON"],[127279,127279,"ON"],[127338,127343,"ON"],[127405,127405,"ON"],[127584,127589,"ON"],[127744,128728,"ON"],[128732,128748,"ON"],[128752,128764,"ON"],[128768,128985,"ON"],[128992,129003,"ON"],[129008,129008,"ON"],[129024,129035,"ON"],[129040,129095,"ON"],[129104,129113,"ON"],[129120,129159,"ON"],[129168,129197,"ON"],[129200,129211,"ON"],[129216,129217,"ON"],[129232,129240,"ON"],[129280,129623,"ON"],[129632,129645,"ON"],[129648,129660,"ON"],[129664,129674,"ON"],[129678,129734,"ON"],[129736,129736,"ON"],[129741,129756,"ON"],[129759,129770,"ON"],[129775,129784,"ON"],[129792,129938,"ON"],[129940,130031,"ON"],[130032,130041,"EN"],[130042,130042,"ON"],[131070,131071,"BN"],[196606,196607,"BN"],[262142,262143,"BN"],[327678,327679,"BN"],[393214,393215,"BN"],[458750,458751,"BN"],[524286,524287,"BN"],[589822,589823,"BN"],[655358,655359,"BN"],[720894,720895,"BN"],[786430,786431,"BN"],[851966,851967,"BN"],[917502,917759,"BN"],[917760,917999,"NSM"],[918e3,921599,"BN"],[983038,983039,"BN"],[1048574,1048575,"BN"],[1114110,1114111,"BN"]];function Al(t){if(t<=255)return Co[t];let e=0,n=ii.length-1;for(;e<=n;){let i=e+n>>1,r=ii[i];if(t<r[0]){n=i-1;continue}if(t>r[1]){e=i+1;continue}return r[2]}return"L"}function El(t){let e=t.length;if(e===0)return null;let n=new Array(e),i=!1;for(let c=0;c<e;){let u=t.charCodeAt(c),m=u,f=1;if(u>=55296&&u<=56319&&c+1<e){let F=t.charCodeAt(c+1);F>=56320&&F<=57343&&(m=(u-55296<<10)+(F-56320)+65536,f=2)}let x=Al(m);(x==="R"||x==="AL"||x==="AN")&&(i=!0);for(let F=0;F<f;F++)n[c+F]=x;c+=f}if(!i)return null;let r=0;for(let c=0;c<e;c++){let u=n[c];if(u==="L"){r=0;break}if(u==="R"||u==="AL"){r=1;break}}let o=new Int8Array(e);for(let c=0;c<e;c++)o[c]=r;let s=r&1?"R":"L",l=s,a=l;for(let c=0;c<e;c++)n[c]==="NSM"?n[c]=a:a=n[c];a=l;for(let c=0;c<e;c++){let u=n[c];u==="EN"?n[c]=a==="AL"?"AN":"EN":(u==="R"||u==="L"||u==="AL")&&(a=u)}for(let c=0;c<e;c++)n[c]==="AL"&&(n[c]="R");for(let c=1;c<e-1;c++)n[c]==="ES"&&n[c-1]==="EN"&&n[c+1]==="EN"&&(n[c]="EN"),n[c]==="CS"&&(n[c-1]==="EN"||n[c-1]==="AN")&&n[c+1]===n[c-1]&&(n[c]=n[c-1]);for(let c=0;c<e;c++){if(n[c]!=="EN")continue;let u;for(u=c-1;u>=0&&n[u]==="ET";u--)n[u]="EN";for(u=c+1;u<e&&n[u]==="ET";u++)n[u]="EN"}for(let c=0;c<e;c++){let u=n[c];(u==="WS"||u==="ES"||u==="ET"||u==="CS")&&(n[c]="ON")}a=l;for(let c=0;c<e;c++){let u=n[c];u==="EN"?n[c]=a==="L"?"L":"EN":(u==="R"||u==="L")&&(a=u)}for(let c=0;c<e;c++){if(n[c]!=="ON")continue;let u=c+1;for(;u<e&&n[u]==="ON";)u++;let m=c>0?n[c-1]:l,f=u<e?n[u]:l,x=m!=="L"?"R":"L";if(x===(f!=="L"?"R":"L"))for(let E=c;E<u;E++)n[E]=x;c=u-1}for(let c=0;c<e;c++)n[c]==="ON"&&(n[c]=s);for(let c=0;c<e;c++){let u=n[c];(o[c]&1)===0?u==="R"?o[c]++:(u==="AN"||u==="EN")&&(o[c]+=2):(u==="L"||u==="AN"||u==="EN")&&o[c]++}return o}function Mo(t,e){let n=El(t);if(n===null)return null;let i=new Int8Array(e.length);for(let r=0;r<e.length;r++)i[r]=n[e[r]];return i}var Fl=/[ \\t\\n\\r\\f]+/g,wl=/[\\t\\n\\r\\f]| {2,}|^ | $/;function Nl(t){let e=t??"normal";return e==="pre-wrap"?{mode:e,preserveOrdinarySpaces:!0,preserveHardBreaks:!0}:{mode:e,preserveOrdinarySpaces:!1,preserveHardBreaks:!1}}function Cl(t){if(!wl.test(t))return t;let e=t.replace(Fl," ");return e.charCodeAt(0)===32&&(e=e.slice(1)),e.length>0&&e.charCodeAt(e.length-1)===32&&(e=e.slice(0,-1)),e}function Ml(t){return/[\\r\\f]/.test(t)?t.replace(/\\r\\n/g,`\n`).replace(/[\\r\\f]/g,`\n`):t.replace(/\\r\\n/g,`\n`)}var ri=null,kl;function Tl(){return ri===null&&(ri=new Intl.Segmenter(kl,{granularity:"word"})),ri}var vl=/\\p{Script=Arabic}/u,sn=/\\p{M}/u,Bo=/\\p{Nd}/u;function ko(t){return vl.test(t)}function To(t){return t>=19968&&t<=40959||t>=13312&&t<=19903||t>=131072&&t<=173791||t>=173824&&t<=177983||t>=177984&&t<=178207||t>=178208&&t<=183983||t>=183984&&t<=191471||t>=191472&&t<=192093||t>=194560&&t<=195103||t>=196608&&t<=201551||t>=201552&&t<=205743||t>=205744&&t<=210041||t>=63744&&t<=64255||t>=12288&&t<=12351||t>=12352&&t<=12447||t>=12448&&t<=12543||t>=44032&&t<=55215||t>=65280&&t<=65519}function Re(t){for(let e=0;e<t.length;e++){let n=t.charCodeAt(e);if(!(n<12288)){if(n>=55296&&n<=56319&&e+1<t.length){let i=t.charCodeAt(e+1);if(i>=56320&&i<=57343){let r=(n-55296<<10)+(i-56320)+65536;if(To(r))return!0;e++;continue}}if(To(n))return!0}}return!1}function _l(t){let e=un(t);return e!==null&&(ln.has(e)||ze.has(e))}var Rl=new Set(["\\xA0","\\u202F","\\u2060","\\uFEFF"]);function Ll(t){return Re(t)}function Dl(t){let e=un(t);return e!==null&&Rl.has(e)}function an(t){return!_l(t)&&!Dl(t)}var ln=new Set(["\\uFF0C","\\uFF0E","\\uFF01","\\uFF1A","\\uFF1B","\\uFF1F","\\u3001","\\u3002","\\u30FB","\\uFF09","\\u3015","\\u3009","\\u300B","\\u300D","\\u300F","\\u3011","\\u3017","\\u3019","\\u301B","\\u30FC","\\u3005","\\u303B","\\u309D","\\u309E","\\u30FD","\\u30FE"]),Ot=new Set([\'"\',"(","[","{","\\u201C","\\u2018","\\xAB","\\u2039","\\uFF08","\\u3014","\\u3008","\\u300A","\\u300C","\\u300E","\\u3010","\\u3016","\\u3018","\\u301A"]),si=new Set(["\'","\\u2019"]),ze=new Set([".",",","!","?",":",";","\\u060C","\\u061B","\\u061F","\\u0964","\\u0965","\\u104A","\\u104B","\\u104C","\\u104D","\\u104F",")","]","}","%",\'"\',"\\u201D","\\u2019","\\xBB","\\u203A","\\u2026"]),Bl=new Set([":",".","\\u060C","\\u061B"]),Il=new Set(["\\u104F"]),Ol=new Set(["\\u201D","\\u2019","\\xBB","\\u203A","\\u300D","\\u300F","\\u3011","\\u300B","\\u3009","\\u3015","\\uFF09"]);function Pl(t){if(ai(t))return!0;let e=!1;for(let n of t){if(ze.has(n)){e=!0;continue}if(!(e&&sn.test(n)))return!1}return e}function Wl(t){for(let e of t)if(!ln.has(e)&&!ze.has(e))return!1;return t.length>0}function Hl(t){if(ai(t))return!0;for(let e of t)if(!Ot.has(e)&&!si.has(e)&&!sn.test(e))return!1;return t.length>0}function ai(t){let e=!1;for(let n of t)if(!(n==="\\\\"||sn.test(n))){if(Ot.has(n)||ze.has(n)||si.has(n)){e=!0;continue}return!1}return e}function Io(t,e){let n=e-1;if(n<=0)return Math.max(n,0);let i=t.charCodeAt(n);if(i<56320||i>57343)return n;let r=n-1;if(r<0)return n;let o=t.charCodeAt(r);return o>=55296&&o<=56319?r:n}function un(t){if(t.length===0)return null;let e=Io(t,t.length);return t.slice(e)}function ql(t){let e=Array.from(t),n=e.length;for(;n>0;){let i=e[n-1];if(sn.test(i)){n--;continue}if(Ot.has(i)||si.has(i)){n--;continue}break}return n<=0||n===e.length?null:{head:e.slice(0,n).join(""),tail:e.slice(n).join("")}}function Vl(t,e,n){return n==="text"&&!e&&t.length===1&&t!=="-"&&t!=="\\u2014"?t:null}function vo(t,e,n,i){let r=e[i],o=t[i];if(r==null)return o;let s=n[i];if(o.length===s)return o;let l=r.repeat(s);return t[i]=l,l}function _o(t,e){return t&&e!==null&&Bl.has(e)}function Ul(t){let e=un(t);return e!==null&&Il.has(e)}function zl(t){if(t.length<2||t[0]!==" ")return null;let e=t.slice(1);return/^\\p{M}+$/u.test(e)?{space:" ",marks:e}:null}function cn(t){let e=t.length;for(;e>0;){let n=Io(t,e),i=t.slice(n,e);if(Ol.has(i))return!0;if(!ze.has(i))return!1;e=n}return!1}function jl(t,e){if(e.preserveOrdinarySpaces||e.preserveHardBreaks){if(t===" ")return"preserved-space";if(t===" ")return"tab";if(e.preserveHardBreaks&&t===`\n`)return"hard-break"}return t===" "?"space":t==="\\xA0"||t==="\\u202F"||t==="\\u2060"||t==="\\uFEFF"?"glue":t==="\\u200B"?"zero-width-break":t==="\\xAD"?"soft-hyphen":"text"}var $l=/[\\x20\\t\\n\\xA0\\xAD\\u200B\\u202F\\u2060\\uFEFF]/;function ke(t){return t.length===1?t[0]:t.join("")}function Gl(t,e){let n=[];for(let i=t.length-1;i>=0;i--)n.push(t[i]);return n.push(e),ke(n)}function Kl(t,e,n,i){if(!$l.test(t))return[{text:t,isWordLike:e,kind:"text",start:n}];let r=[],o=null,s=[],l=n,a=!1,c=0;for(let u of t){let m=jl(u,i),f=m==="text"&&e;if(o!==null&&m===o&&f===a){s.push(u),c+=u.length;continue}o!==null&&r.push({text:ke(s),isWordLike:a,kind:o,start:l}),o=m,s=[u],l=n+c,a=f,c+=u.length}return o!==null&&r.push({text:ke(s),isWordLike:a,kind:o,start:l}),r}function oi(t){return t==="space"||t==="preserved-space"||t==="zero-width-break"||t==="hard-break"}var Jl=/^[A-Za-z][A-Za-z0-9+.-]*:$/;function Ql(t,e){let n=t.texts[e];return n.startsWith("www.")?!0:Jl.test(n)&&e+1<t.len&&t.kinds[e+1]==="text"&&t.texts[e+1]==="//"}function Yl(t){return t.includes("?")&&(t.includes("://")||t.startsWith("www."))}function Zl(t){let e=t.texts.slice(),n=t.isWordLike.slice(),i=t.kinds.slice(),r=t.starts.slice();for(let s=0;s<t.len;s++){if(i[s]!=="text"||!Ql(t,s))continue;let l=[e[s]],a=s+1;for(;a<t.len&&!oi(i[a]);){l.push(e[a]),n[s]=!0;let c=e[a].includes("?");if(i[a]="text",e[a]="",a++,c)break}e[s]=ke(l)}let o=0;for(let s=0;s<e.length;s++){let l=e[s];l.length!==0&&(o!==s&&(e[o]=l,n[o]=n[s],i[o]=i[s],r[o]=r[s]),o++)}return e.length=o,n.length=o,i.length=o,r.length=o,{len:o,texts:e,isWordLike:n,kinds:i,starts:r}}function Xl(t){let e=[],n=[],i=[],r=[];for(let o=0;o<t.len;o++){let s=t.texts[o];if(e.push(s),n.push(t.isWordLike[o]),i.push(t.kinds[o]),r.push(t.starts[o]),!Yl(s))continue;let l=o+1;if(l>=t.len||oi(t.kinds[l]))continue;let a=[],c=t.starts[l],u=l;for(;u<t.len&&!oi(t.kinds[u]);)a.push(t.texts[u]),u++;a.length>0&&(e.push(ke(a)),n.push(!0),i.push("text"),r.push(c),o=u-1)}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}var eu=new Set([":","-","/","\\xD7",",",".","+","\\u2013","\\u2014"]),Ro=/^[A-Za-z0-9_]+[,:;]*$/,Lo=/[,:;]+$/;function Oo(t){for(let e of t)if(Bo.test(e))return!0;return!1}function It(t){if(t.length===0)return!1;for(let e of t)if(!(Bo.test(e)||eu.has(e)))return!1;return!0}function tu(t){let e=[],n=[],i=[],r=[];for(let o=0;o<t.len;o++){let s=t.texts[o],l=t.kinds[o];if(l==="text"&&It(s)&&Oo(s)){let a=[s],c=o+1;for(;c<t.len&&t.kinds[c]==="text"&&It(t.texts[c]);)a.push(t.texts[c]),c++;e.push(ke(a)),n.push(!0),i.push("text"),r.push(t.starts[o]),o=c-1;continue}e.push(s),n.push(t.isWordLike[o]),i.push(l),r.push(t.starts[o])}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function nu(t){let e=[],n=[],i=[],r=[];for(let o=0;o<t.len;o++){let s=t.texts[o],l=t.kinds[o],a=t.isWordLike[o];if(l==="text"&&a&&Ro.test(s)){let c=[s],u=Lo.test(s),m=o+1;for(;u&&m<t.len&&t.kinds[m]==="text"&&t.isWordLike[m]&&Ro.test(t.texts[m]);){let f=t.texts[m];c.push(f),u=Lo.test(f),m++}e.push(ke(c)),n.push(!0),i.push("text"),r.push(t.starts[o]),o=m-1;continue}e.push(s),n.push(a),i.push(l),r.push(t.starts[o])}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function iu(t){let e=[],n=[],i=[],r=[];for(let o=0;o<t.len;o++){let s=t.texts[o];if(t.kinds[o]==="text"&&s.includes("-")){let l=s.split("-"),a=l.length>1;for(let c=0;c<l.length;c++){let u=l[c];if(!a)break;(u.length===0||!Oo(u)||!It(u))&&(a=!1)}if(a){let c=0;for(let u=0;u<l.length;u++){let m=l[u],f=u<l.length-1?`${m}-`:m;e.push(f),n.push(!0),i.push("text"),r.push(t.starts[o]+c),c+=f.length}continue}}e.push(s),n.push(t.isWordLike[o]),i.push(t.kinds[o]),r.push(t.starts[o])}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function ru(t){let e=[],n=[],i=[],r=[],o=0;for(;o<t.len;){let s=[t.texts[o]],l=t.isWordLike[o],a=t.kinds[o],c=t.starts[o];if(a==="glue"){let u=[s[0]],m=c;for(o++;o<t.len&&t.kinds[o]==="glue";)u.push(t.texts[o]),o++;let f=ke(u);if(o<t.len&&t.kinds[o]==="text")s[0]=f,s.push(t.texts[o]),l=t.isWordLike[o],a="text",c=m,o++;else{e.push(f),n.push(!1),i.push("glue"),r.push(m);continue}}else o++;if(a==="text")for(;o<t.len&&t.kinds[o]==="glue";){let u=[];for(;o<t.len&&t.kinds[o]==="glue";)u.push(t.texts[o]),o++;let m=ke(u);if(o<t.len&&t.kinds[o]==="text"){s.push(m,t.texts[o]),l=l||t.isWordLike[o],o++;continue}s.push(m)}e.push(ke(s)),n.push(l),i.push(a),r.push(c)}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function ou(t){let e=t.texts.slice(),n=t.isWordLike.slice(),i=t.kinds.slice(),r=t.starts.slice();for(let o=0;o<e.length-1;o++){if(i[o]!=="text"||i[o+1]!=="text"||!Re(e[o])||!Re(e[o+1]))continue;let s=ql(e[o]);s!==null&&(e[o]=s.head,e[o+1]=s.tail+e[o+1],r[o+1]=r[o]+s.head.length)}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function Do(t,e,n){let i=Tl(),r=0,o=[],s=[],l=[],a=[],c=[],u=[],m=[],f=[],x=[],F=[],E=[],S=[];for(let C of i.segment(t))for(let g of Kl(C.segment,C.isWordLike??!1,C.index,n)){let le=function(){u[R]!==null&&(s[R]=[vo(o,u,m,R)],u[R]=null),s[R].push(g.text),l[R]=l[R]||g.isWordLike,f[R]=f[R]||w,x[R]=x[R]||M,F[R]=P,E[R]=J,S[R]=_o(x[R],L)},A=g.kind==="text",N=Vl(g.text,g.isWordLike,g.kind),w=Re(g.text),M=ko(g.text),L=un(g.text),P=cn(g.text),J=Ul(g.text),R=r-1;e.carryCJKAfterClosingQuote&&A&&r>0&&a[R]==="text"&&w&&f[R]&&F[R]||A&&r>0&&a[R]==="text"&&Wl(g.text)&&f[R]||A&&r>0&&a[R]==="text"&&E[R]?le():A&&r>0&&a[R]==="text"&&g.isWordLike&&M&&S[R]?(le(),l[R]=!0):N!==null&&r>0&&a[R]==="text"&&u[R]===N?m[R]=(m[R]??1)+1:A&&!g.isWordLike&&r>0&&a[R]==="text"&&(Pl(g.text)||g.text==="-"&&l[R])?le():(o[r]=g.text,s[r]=[g.text],l[r]=g.isWordLike,a[r]=g.kind,c[r]=g.start,u[r]=N,m[r]=N===null?0:1,f[r]=w,x[r]=M,F[r]=P,E[r]=J,S[r]=_o(M,L),r++)}for(let C=0;C<r;C++){if(u[C]!==null){o[C]=vo(o,u,m,C);continue}o[C]=ke(s[C])}for(let C=1;C<r;C++)a[C]==="text"&&!l[C]&&ai(o[C])&&a[C-1]==="text"&&(o[C-1]+=o[C],l[C-1]=l[C-1]||l[C],o[C]="");let B=Array.from({length:r},()=>null),D=-1;for(let C=r-1;C>=0;C--){let g=o[C];if(g.length!==0){if(a[C]==="text"&&!l[C]&&Hl(g)&&D>=0&&a[D]==="text"){let A=B[D]??[];A.push(g),B[D]=A,c[D]=c[C],o[C]="";continue}D=C}}for(let C=0;C<r;C++){let g=B[C];g!=null&&(o[C]=Gl(g,o[C]))}let v=0;for(let C=0;C<r;C++){let g=o[C];g.length!==0&&(v!==C&&(o[v]=g,l[v]=l[C],a[v]=a[C],c[v]=c[C]),v++)}o.length=v,l.length=v,a.length=v,c.length=v;let X=ru({len:v,texts:o,isWordLike:l,kinds:a,starts:c}),q=ou(nu(iu(tu(Xl(Zl(X))))));for(let C=0;C<q.len-1;C++){let g=zl(q.texts[C]);g!==null&&(q.kinds[C]!=="space"&&q.kinds[C]!=="preserved-space"||q.kinds[C+1]!=="text"||!ko(q.texts[C+1])||(q.texts[C]=g.space,q.isWordLike[C]=!1,q.kinds[C]=q.kinds[C]==="preserved-space"?"preserved-space":"space",q.texts[C+1]=g.marks+q.texts[C+1],q.starts[C+1]=q.starts[C]+g.space.length))}return q}function su(t,e){if(t.len===0)return[];if(!e.preserveHardBreaks)return[{startSegmentIndex:0,endSegmentIndex:t.len,consumedEndSegmentIndex:t.len}];let n=[],i=0;for(let r=0;r<t.len;r++)t.kinds[r]==="hard-break"&&(n.push({startSegmentIndex:i,endSegmentIndex:r,consumedEndSegmentIndex:r+1}),i=r+1);return i<t.len&&n.push({startSegmentIndex:i,endSegmentIndex:t.len,consumedEndSegmentIndex:t.len}),n}function au(t){if(t.len<=1)return t;let e=[],n=[],i=[],r=[],o=null,s=!1,l=0,a=!1,c=!1;function u(){o!==null&&(e.push(ke(o)),n.push(s),i.push("text"),r.push(l),o=null)}for(let m=0;m<t.len;m++){let f=t.texts[m],x=t.kinds[m],F=t.isWordLike[m],E=t.starts[m];if(x==="text"){let S=Ll(f),B=an(f);if(o!==null&&a&&c){o.push(f),s=s||F,a=a||S,c=B;continue}u(),o=[f],s=F,l=E,a=S,c=B;continue}u(),e.push(f),n.push(F),i.push(x),r.push(E)}return u(),{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function Po(t,e,n="normal",i="normal"){let r=Nl(n),o=r.mode==="pre-wrap"?Ml(t):Cl(t);if(o.length===0)return{normalized:o,chunks:[],len:0,texts:[],isWordLike:[],kinds:[],starts:[]};let s=i==="keep-all"?au(Do(o,e,r)):Do(o,e,r);return{normalized:o,chunks:su(s,r),...s}}var at=null,Wo=new Map,lt=null,lu=96,uu=/\\p{Emoji_Presentation}/u,cu=/[\\p{Emoji_Presentation}\\p{Extended_Pictographic}\\p{Regional_Indicator}\\uFE0F\\u20E3]/u,li=null,Ho=new Map;function ui(){if(at!==null)return at;if(typeof OffscreenCanvas<"u")return at=new OffscreenCanvas(1,1).getContext("2d"),at;if(typeof document<"u")return at=document.createElement("canvas").getContext("2d"),at;throw new Error("Text measurement requires OffscreenCanvas or a DOM canvas context.")}function du(t){let e=Wo.get(t);return e||(e=new Map,Wo.set(t,e)),e}function Pe(t,e){let n=e.get(t);return n===void 0&&(n={width:ui().measureText(t).width,containsCJK:Re(t)},e.set(t,n)),n}function ut(){if(lt!==null)return lt;if(typeof navigator>"u")return lt={lineFitEpsilon:.005,carryCJKAfterClosingQuote:!1,preferPrefixWidthsForBreakableRuns:!1,preferEarlySoftHyphenBreak:!1},lt;let t=navigator.userAgent,n=navigator.vendor==="Apple Computer, Inc."&&t.includes("Safari/")&&!t.includes("Chrome/")&&!t.includes("Chromium/")&&!t.includes("CriOS/")&&!t.includes("FxiOS/")&&!t.includes("EdgiOS/"),i=t.includes("Chrome/")||t.includes("Chromium/")||t.includes("CriOS/")||t.includes("Edg/");return lt={lineFitEpsilon:n?1/64:.005,carryCJKAfterClosingQuote:i,preferPrefixWidthsForBreakableRuns:n,preferEarlySoftHyphenBreak:n},lt}function fu(t){let e=t.match(/(\\d+(?:\\.\\d+)?)\\s*px/);return e?parseFloat(e[1]):16}function qo(){return li===null&&(li=new Intl.Segmenter(void 0,{granularity:"grapheme"})),li}function mu(t){return uu.test(t)||t.includes("\\uFE0F")}function Vo(t){return cu.test(t)}function pu(t,e){let n=Ho.get(t);if(n!==void 0)return n;let i=ui();i.font=t;let r=i.measureText("\\u{1F600}").width;if(n=0,r>e+.5&&typeof document<"u"&&document.body!==null){let o=document.createElement("span");o.style.font=t,o.style.display="inline-block",o.style.visibility="hidden",o.style.position="absolute",o.textContent="\\u{1F600}",document.body.appendChild(o);let s=o.getBoundingClientRect().width;document.body.removeChild(o),r-s>.5&&(n=r-s)}return Ho.set(t,n),n}function hu(t){let e=0,n=qo();for(let i of n.segment(t))mu(i.segment)&&e++;return e}function xu(t,e){return e.emojiCount===void 0&&(e.emojiCount=hu(t)),e.emojiCount}function je(t,e,n){return n===0?e.width:e.width-xu(t,e)*n}function Uo(t,e,n,i,r){if(e.breakableFitAdvances!==void 0)return e.breakableFitAdvances;let o=qo(),s=[];for(let u of o.segment(t))s.push(u.segment);if(s.length<=1)return e.breakableFitAdvances=null,e.breakableFitAdvances;if(r==="sum-graphemes"){let u=[];for(let m of s){let f=Pe(m,n);u.push(je(m,f,i))}return e.breakableFitAdvances=u,e.breakableFitAdvances}if(r==="pair-context"||s.length>lu){let u=[],m=null,f=0;for(let x of s){let F=Pe(x,n),E=je(x,F,i);if(m===null)u.push(E);else{let S=m+x,B=Pe(S,n);u.push(je(S,B,i)-f)}m=x,f=E}return e.breakableFitAdvances=u,e.breakableFitAdvances}let l=[],a="",c=0;for(let u of s){a+=u;let m=Pe(a,n),f=je(a,m,i);l.push(f-c),c=f}return e.breakableFitAdvances=l,e.breakableFitAdvances}function zo(t,e){let n=ui();n.font=t;let i=du(t),r=fu(t),o=e?pu(t,r):0;return{cache:i,fontSize:r,emojiCorrection:o}}function gu(t,e){for(;e<t.widths.length;){let n=t.kinds[e];if(n!=="space"&&n!=="zero-width-break"&&n!=="soft-hyphen")break;e++}return e}function yu(t,e){if(e<=0)return 0;let n=t%e;return Math.abs(n)<=1e-6?e:e-n}function Su(t,e,n,i,r){let o=0,s=e;for(;o<t.length;){let l=s+t[o];if((o+1<t.length?l+r:l)>n+i)break;s=l,o++}return{fitCount:o,fittedWidth:s}}function jo(t,e){return t.simpleLineWalkFastPath?$o(t,e):Go(t,e)}function $o(t,e,n){let{widths:i,kinds:r,breakableFitAdvances:o}=t;if(i.length===0)return 0;let l=ut().lineFitEpsilon,a=e+l,c=0,u=0,m=!1,f=0,x=0,F=0,E=0,S=-1,B=0;function D(){S=-1,B=0}function v(N=F,w=E,M=u){c++,n?.({startSegmentIndex:f,startGraphemeIndex:x,endSegmentIndex:N,endGraphemeIndex:w,width:M}),u=0,m=!1,D()}function X(N,w){m=!0,f=N,x=0,F=N+1,E=0,u=w}function q(N,w,M){m=!0,f=N,x=w,F=N,E=w+1,u=M}function C(N,w){if(!m){X(N,w);return}u+=w,F=N+1,E=0}function g(N,w){let M=o[N];for(let L=w;L<M.length;L++){let P=M[L];m?u+P>a?(v(),q(N,L,P)):(u+=P,F=N,E=L+1):q(N,L,P)}m&&F===N&&E===M.length&&(F=N+1,E=0)}let A=0;for(;A<i.length&&!(!m&&(A=gu(t,A),A>=i.length));){let N=i[A],w=r[A],M=w==="space"||w==="preserved-space"||w==="tab"||w==="zero-width-break"||w==="soft-hyphen";if(!m){N>e&&o[A]!==null?g(A,0):X(A,N),M&&(S=A+1,B=u-N),A++;continue}if(u+N>a){if(M){C(A,N),v(A+1,0,u-N),A++;continue}if(S>=0){if(F>S||F===S&&E>0){v();continue}v(S,0,B);continue}if(N>e&&o[A]!==null){v(),g(A,0),A++;continue}v();continue}C(A,N),M&&(S=A+1,B=u-N),A++}return m&&v(),c}function Go(t,e,n){if(t.simpleLineWalkFastPath)return $o(t,e,n);let{widths:i,lineEndFitAdvances:r,lineEndPaintAdvances:o,kinds:s,breakableFitAdvances:l,discretionaryHyphenWidth:a,tabStopAdvance:c,chunks:u}=t;if(i.length===0||u.length===0)return 0;let m=ut(),f=m.lineFitEpsilon,x=e+f,F=0,E=0,S=!1,B=0,D=0,v=0,X=0,q=-1,C=0,g=0,A=null;function N(){q=-1,C=0,g=0,A=null}function w($=v,U=X,W=E){F++,n?.({startSegmentIndex:B,startGraphemeIndex:D,endSegmentIndex:$,endGraphemeIndex:U,width:W}),E=0,S=!1,N()}function M($,U){S=!0,B=$,D=0,v=$+1,X=0,E=U}function L($,U,W){S=!0,B=$,D=U,v=$,X=U+1,E=W}function P($,U){if(!S){M($,U);return}E+=U,v=$+1,X=0}function J($,U,W,Y){if(!U)return;let me=$==="tab"?0:r[W],Fe=$==="tab"?Y:o[W];q=W+1,C=E-Y+me,g=E-Y+Fe,A=$}function R($,U){let W=l[$];for(let Y=U;Y<W.length;Y++){let me=W[Y];S?E+me>x?(w(),L($,Y,me)):(E+=me,v=$,X=Y+1):L($,Y,me)}S&&v===$&&X===W.length&&(v=$+1,X=0)}function le($){if(A!=="soft-hyphen")return!1;let U=l[$];if(U==null)return!1;let{fitCount:W,fittedWidth:Y}=Su(U,E,e,f,a);return W===0?!1:(E=Y,v=$,X=W,N(),W===U.length?(v=$+1,X=0,!0):(w($,W,Y+a),R($,W),!0))}function Se($){F++,n?.({startSegmentIndex:$.startSegmentIndex,startGraphemeIndex:0,endSegmentIndex:$.consumedEndSegmentIndex,endGraphemeIndex:0,width:0}),N()}for(let $=0;$<u.length;$++){let U=u[$];if(U.startSegmentIndex===U.endSegmentIndex){Se(U);continue}S=!1,E=0,B=U.startSegmentIndex,D=0,v=U.startSegmentIndex,X=0,N();let W=U.startSegmentIndex;for(;W<U.endSegmentIndex;){let Y=s[W],me=Y==="space"||Y==="preserved-space"||Y==="tab"||Y==="zero-width-break"||Y==="soft-hyphen",Fe=Y==="tab"?yu(E,c):i[W];if(Y==="soft-hyphen"){S&&(v=W+1,X=0,q=W+1,C=E+a,g=E+a,A=Y),W++;continue}if(!S){Fe>e&&l[W]!==null?R(W,0):M(W,Fe),J(Y,me,W,Fe),W++;continue}if(E+Fe>x){let k=E+(Y==="tab"?0:r[W]),O=E+(Y==="tab"?Fe:o[W]);if(A==="soft-hyphen"&&m.preferEarlySoftHyphenBreak&&C<=x){w(q,0,g);continue}if(A==="soft-hyphen"&&le(W)){W++;continue}if(me&&k<=x){P(W,Fe),w(W+1,0,O),W++;continue}if(q>=0&&C<=x){if(v>q||v===q&&X>0){w();continue}let ne=q;w(ne,0,g),W=ne;continue}if(Fe>e&&l[W]!==null){w(),R(W,0),W++;continue}w();continue}P(W,Fe),J(Y,me,W,Fe),W++}if(S){let Y=q===U.consumedEndSegmentIndex?g:E;w(U.consumedEndSegmentIndex,0,Y)}}return F}var ci=null;function bu(){return ci===null&&(ci=new Intl.Segmenter(void 0,{granularity:"grapheme"})),ci}function Au(t){return t?{widths:[],lineEndFitAdvances:[],lineEndPaintAdvances:[],kinds:[],simpleLineWalkFastPath:!0,segLevels:null,breakableFitAdvances:[],discretionaryHyphenWidth:0,tabStopAdvance:0,chunks:[],segments:[]}:{widths:[],lineEndFitAdvances:[],lineEndPaintAdvances:[],kinds:[],simpleLineWalkFastPath:!0,segLevels:null,breakableFitAdvances:[],discretionaryHyphenWidth:0,tabStopAdvance:0,chunks:[]}}function Eu(t,e){let n=[],i=[],r=0,o=!1,s=!1,l=!1;function a(){i.length!==0&&(n.push({text:i.length===1?i[0]:i.join(""),start:r}),i=[],o=!1,s=!1,l=!1)}function c(m,f,x){i=[m],r=f,o=x,s=cn(m),l=Ot.has(m)}function u(m,f){i.push(m),o=o||f;let x=cn(m);m.length===1&&ze.has(m)?s=s||x:s=x,l=!1}for(let m of bu().segment(t)){let f=m.segment,x=Re(f);if(i.length===0){c(f,m.index,x);continue}if(l||ln.has(f)||ze.has(f)||e.carryCJKAfterClosingQuote&&x&&s){u(f,x);continue}if(!o&&!x){u(f,x);continue}a(),c(f,m.index,x)}return a(),n}function Fu(t){if(t.length<=1)return t;let e=[],n=[t[0].text],i=t[0].start,r=Re(t[0].text),o=an(t[0].text);function s(){e.push({text:n.length===1?n[0]:n.join(""),start:i})}for(let l=1;l<t.length;l++){let a=t[l],c=Re(a.text),u=an(a.text);if(r&&o){n.push(a.text),r=r||c,o=u;continue}s(),n=[a.text],i=a.start,r=c,o=u}return s(),e}function wu(t,e,n,i){let r=ut(),{cache:o,emojiCorrection:s}=zo(e,Vo(t.normalized)),l=je("-",Pe("-",o),s),c=je(" ",Pe(" ",o),s)*8;if(t.len===0)return Au(n);let u=[],m=[],f=[],x=[],F=t.chunks.length<=1,E=n?[]:null,S=[],B=n?[]:null,D=Array.from({length:t.len});function v(g,A,N,w,M,L,P){M!=="text"&&M!=="space"&&M!=="zero-width-break"&&(F=!1),u.push(A),m.push(N),f.push(w),x.push(M),E?.push(L),S.push(P),B!==null&&B.push(g)}function X(g,A,N,w,M){let L=Pe(g,o),P=je(g,L,s),J=A==="space"||A==="preserved-space"||A==="zero-width-break"?0:P,R=A==="space"||A==="zero-width-break"?0:P;if(M&&w&&g.length>1){let le="sum-graphemes";It(g)?le="pair-context":r.preferPrefixWidthsForBreakableRuns&&(le="segment-prefixes");let Se=Uo(g,L,o,s,le);v(g,P,J,R,A,N,Se);return}v(g,P,J,R,A,N,null)}for(let g=0;g<t.len;g++){D[g]=u.length;let A=t.texts[g],N=t.isWordLike[g],w=t.kinds[g],M=t.starts[g];if(w==="soft-hyphen"){v(A,0,l,l,w,M,null);continue}if(w==="hard-break"){v(A,0,0,0,w,M,null);continue}if(w==="tab"){v(A,0,0,0,w,M,null);continue}let L=Pe(A,o);if(w==="text"&&L.containsCJK){let P=Eu(A,r),J=i==="keep-all"?Fu(P):P;for(let R=0;R<J.length;R++){let le=J[R];X(le.text,"text",M+le.start,N,i==="keep-all"||!Re(le.text))}continue}X(A,w,M,N,!0)}let q=Nu(t.chunks,D,u.length),C=E===null?null:Mo(t.normalized,E);return B!==null?{widths:u,lineEndFitAdvances:m,lineEndPaintAdvances:f,kinds:x,simpleLineWalkFastPath:F,segLevels:C,breakableFitAdvances:S,discretionaryHyphenWidth:l,tabStopAdvance:c,chunks:q,segments:B}:{widths:u,lineEndFitAdvances:m,lineEndPaintAdvances:f,kinds:x,simpleLineWalkFastPath:F,segLevels:C,breakableFitAdvances:S,discretionaryHyphenWidth:l,tabStopAdvance:c,chunks:q}}function Nu(t,e,n){let i=[];for(let r=0;r<t.length;r++){let o=t[r],s=o.startSegmentIndex<e.length?e[o.startSegmentIndex]:n,l=o.endSegmentIndex<e.length?e[o.endSegmentIndex]:n,a=o.consumedEndSegmentIndex<e.length?e[o.consumedEndSegmentIndex]:n;i.push({startSegmentIndex:s,endSegmentIndex:l,consumedEndSegmentIndex:a})}return i}function Cu(t,e,n,i){let r=i?.wordBreak??"normal",o=Po(t,ut(),i?.whiteSpace,r);return wu(o,e,n,r)}function Ko(t,e,n){return Cu(t,e,!1,n)}function Jo(t,e,n){let i=jo(t,e);return{lineCount:i,height:i*n}}var Mu={maxWidth:1600,baseFontSize:78,minFontSize:42,fontWeight:900,fontFamily:"Outfit",step:2};function Qo(t,e){let n={...Mu,...e},i=1.2;for(let r=n.baseFontSize;r>=n.minFontSize;r-=n.step){let o=`${n.fontWeight} ${r}px ${n.fontFamily}`,s=Ko(t,o),{lineCount:l}=Jo(s,n.maxWidth,r*i);if(l<=1)return{fontSize:r,fits:!0}}return{fontSize:n.minFontSize,fits:!1}}window.__timelines=window.__timelines||{};window.__hyperframes={fitTextFontSize:Qo,getVariables:ho};function Yo(){let t=window;t.__hyperframeRuntimeBootstrapped||(t.__hyperframeRuntimeBootstrapped=!0,No())}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Yo,{once:!0}):Yo();})();\n';
|
|
39236
|
+
RUNTIME_IIFE = '"use strict";(()=>{var ns=Object.create;var xn=Object.defineProperty;var is=Object.getOwnPropertyDescriptor;var rs=Object.getOwnPropertyNames;var os=Object.getPrototypeOf,ss=Object.prototype.hasOwnProperty;var as=(t,e,n)=>e in t?xn(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var Z=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var ls=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of rs(e))!ss.call(t,r)&&r!==n&&xn(t,r,{get:()=>e[r],enumerable:!(i=is(e,r))||i.enumerable});return t};var us=(t,e,n)=>(n=t!=null?ns(os(t)):{},ls(e||!t||!t.__esModule?xn(n,"default",{value:t,enumerable:!0}):n,t));var ye=(t,e,n)=>as(t,typeof e!="symbol"?e+"":e,n);var qi=Z((fc,Fn)=>{var K=String,Hi=function(){return{isColorSupported:!1,reset:K,bold:K,dim:K,italic:K,underline:K,inverse:K,hidden:K,strikethrough:K,black:K,red:K,green:K,yellow:K,blue:K,magenta:K,cyan:K,white:K,gray:K,bgBlack:K,bgRed:K,bgGreen:K,bgYellow:K,bgBlue:K,bgMagenta:K,bgCyan:K,bgWhite:K,blackBright:K,redBright:K,greenBright:K,yellowBright:K,blueBright:K,magentaBright:K,cyanBright:K,whiteBright:K,bgBlackBright:K,bgRedBright:K,bgGreenBright:K,bgYellowBright:K,bgBlueBright:K,bgMagentaBright:K,bgCyanBright:K,bgWhiteBright:K}};Fn.exports=Hi();Fn.exports.createColors=Hi});var wn=Z(()=>{});var qt=Z((hc,zi)=>{"use strict";var Vi=qi(),Ui=wn(),yt=class t extends Error{constructor(e,n,i,r,o,s){super(e),this.name="CssSyntaxError",this.reason=e,o&&(this.file=o),r&&(this.source=r),s&&(this.plugin=s),typeof n<"u"&&typeof i<"u"&&(typeof n=="number"?(this.line=n,this.column=i):(this.line=n.line,this.column=n.column,this.endLine=i.line,this.endColumn=i.column)),this.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(this,t)}setMessage(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"<css input>",typeof this.line<"u"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason}showSourceCode(e){if(!this.source)return"";let n=this.source;e==null&&(e=Vi.isColorSupported);let i=u=>u,r=u=>u,o=u=>u;if(e){let{bold:u,gray:m,red:f}=Vi.createColors(!0);r=x=>u(f(x)),i=x=>m(x),Ui&&(o=x=>Ui(x))}let s=n.split(/\\r?\\n/),l=Math.max(this.line-3,0),a=Math.min(this.line+2,s.length),c=String(a).length;return s.slice(l,a).map((u,m)=>{let f=l+1+m,x=" "+(" "+f).slice(-c)+" | ";if(f===this.line){if(u.length>160){let E=20,S=Math.max(0,this.column-E),B=Math.max(this.column+E,this.endColumn+E),D=u.slice(S,B),v=i(x.replace(/\\d/g," "))+u.slice(0,Math.min(this.column-1,E-1)).replace(/[^\\t]/g," ");return r(">")+i(x)+o(D)+`\n `+v+r("^")}let F=i(x.replace(/\\d/g," "))+u.slice(0,this.column-1).replace(/[^\\t]/g," ");return r(">")+i(x)+o(u)+`\n `+F+r("^")}return" "+i(x)+o(u)}).join(`\n`)}toString(){let e=this.showSourceCode();return e&&(e=`\n\n`+e+`\n`),this.name+": "+this.message+e}};zi.exports=yt;yt.default=yt});var Nn=Z((xc,$i)=>{"use strict";var _s=/(<)(\\/?style\\b)/gi,Rs=/(<)(!--)/g;function He(t){return typeof t!="string"||!t.includes("<")?t:t.replace(_s,"\\\\3c $2").replace(Rs,"\\\\3c $2")}var ji={after:`\n`,beforeClose:`\n`,beforeComment:`\n`,beforeDecl:`\n`,beforeOpen:" ",beforeRule:`\n`,colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function Ls(t){return t[0].toUpperCase()+t.slice(1)}var St=class{constructor(e){this.builder=e}atrule(e,n){let i=e.raws,r="@"+e.name,o=e.params?this.rawValue(e,"params"):"";if(typeof i.afterName<"u"?r+=i.afterName:o&&(r+=" "),e.nodes)this.block(e,r+o);else{let s=(i.between||"")+(n?";":"");this.builder(He(r+o+s),e)}}beforeAfter(e,n){let i;e.type==="decl"?i=this.raw(e,null,"beforeDecl"):e.type==="comment"?i=this.raw(e,null,"beforeComment"):n==="before"?i=this.raw(e,null,"beforeRule"):i=this.raw(e,null,"beforeClose");let r=e.parent,o=0;for(;r&&r.type!=="root";)o+=1,r=r.parent;if(i.includes(`\n`)){let s=this.raw(e,null,"indent");if(s.length)for(let l=0;l<o;l++)i+=s}return i}block(e,n){let i=this.raw(e,"between","beforeOpen");this.builder(He(n+i)+"{",e,"start");let r;e.nodes&&e.nodes.length?(this.body(e),r=this.raw(e,"after")):r=this.raw(e,"after","emptyBody"),r&&this.builder(He(r)),this.builder("}",e,"end")}body(e){let n=e.nodes,i=n.length-1;for(;i>0&&n[i].type==="comment";)i-=1;let r=this.raw(e,"semicolon"),o=e.type==="document";for(let s=0;s<n.length;s++){let l=n[s],a=this.raw(l,"before");a&&this.builder(o?a:He(a)),this.stringify(l,i!==s||r)}}comment(e){let n=this.raw(e,"left","commentLeft"),i=this.raw(e,"right","commentRight");this.builder(He("/*"+n+e.text+i+"*/"),e)}decl(e,n){let i=e.raws,r=this.raw(e,"between","colon"),o=e.prop+r+this.rawValue(e,"value");e.important&&(o+=i.important||" !important"),n&&(o+=";"),this.builder(He(o),e)}document(e){this.body(e)}raw(e,n,i){let r;if(i||(i=n),n&&(r=e.raws[n],typeof r<"u"))return r;let o=e.parent;if(i==="before"&&(!o||o.type==="root"&&o.first===e||o&&o.type==="document"))return"";if(!o)return ji[i];let s=e.root(),l=s.rawCache||(s.rawCache={});if(typeof l[i]<"u")return l[i];if(i==="before"||i==="after")return this.beforeAfter(e,i);{let a="raw"+Ls(i);this[a]?r=this[a](s,e):s.walk(c=>{if(r=c.raws[n],typeof r<"u")return!1})}return typeof r>"u"&&(r=ji[i]),l[i]=r,r}rawBeforeClose(e){let n;return e.walk(i=>{if(i.nodes&&i.nodes.length>0&&typeof i.raws.after<"u")return n=i.raws.after,n.includes(`\n`)&&(n=n.replace(/[^\\n]+$/,"")),!1}),n&&(n=n.replace(/\\S/g,"")),n}rawBeforeComment(e,n){let i;return e.walkComments(r=>{if(typeof r.raws.before<"u")return i=r.raws.before,i.includes(`\n`)&&(i=i.replace(/[^\\n]+$/,"")),!1}),typeof i>"u"?i=this.raw(n,null,"beforeDecl"):i&&(i=i.replace(/\\S/g,"")),i}rawBeforeDecl(e,n){let i;return e.walkDecls(r=>{if(typeof r.raws.before<"u")return i=r.raws.before,i.includes(`\n`)&&(i=i.replace(/[^\\n]+$/,"")),!1}),typeof i>"u"?i=this.raw(n,null,"beforeRule"):i&&(i=i.replace(/\\S/g,"")),i}rawBeforeOpen(e){let n;return e.walk(i=>{if(i.type!=="decl"&&(n=i.raws.between,typeof n<"u"))return!1}),n}rawBeforeRule(e){let n;return e.walk(i=>{if(i.nodes&&(i.parent!==e||e.first!==i)&&typeof i.raws.before<"u")return n=i.raws.before,n.includes(`\n`)&&(n=n.replace(/[^\\n]+$/,"")),!1}),n&&(n=n.replace(/\\S/g,"")),n}rawColon(e){let n;return e.walkDecls(i=>{if(typeof i.raws.between<"u")return n=i.raws.between.replace(/[^\\s:]/g,""),!1}),n}rawEmptyBody(e){let n;return e.walk(i=>{if(i.nodes&&i.nodes.length===0&&(n=i.raws.after,typeof n<"u"))return!1}),n}rawIndent(e){if(e.raws.indent)return e.raws.indent;let n;return e.walk(i=>{let r=i.parent;if(r&&r!==e&&r.parent&&r.parent===e&&typeof i.raws.before<"u"){let o=i.raws.before.split(`\n`);return n=o[o.length-1],n=n.replace(/\\S/g,""),!1}}),n}rawSemicolon(e){let n;return e.walk(i=>{if(i.nodes&&i.nodes.length&&i.last.type==="decl"&&(n=i.raws.semicolon,typeof n<"u"))return!1}),n}rawValue(e,n){let i=e[n],r=e.raws[n];return r&&r.value===i?r.raw:i}root(e){if(this.body(e),e.raws.after){let n=e.raws.after,i=e.parent&&e.parent.type==="document";this.builder(i?n:He(n))}}rule(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(He(e.raws.ownSemicolon),e,"end")}stringify(e,n){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,n)}};$i.exports=St;St.default=St});var bt=Z((gc,Gi)=>{"use strict";var Ds=Nn();function Cn(t,e){new Ds(e).stringify(t)}Gi.exports=Cn;Cn.default=Cn});var Vt=Z((yc,Mn)=>{"use strict";Mn.exports.isClean=Symbol("isClean");Mn.exports.my=Symbol("my")});var Ft=Z((Sc,Ki)=>{"use strict";var Bs=qt(),Is=Nn(),Os=bt(),{isClean:At,my:Ps}=Vt();function Tn(t,e){let n=new t.constructor;for(let i in t){if(!Object.prototype.hasOwnProperty.call(t,i)||i==="proxyCache")continue;let r=t[i],o=typeof r;i==="parent"&&o==="object"?e&&(n[i]=e):i==="source"?n[i]=r:Array.isArray(r)?n[i]=r.map(s=>Tn(s,n)):(o==="object"&&r!==null&&(r=Tn(r)),n[i]=r)}return n}function Oe(t,e){if(e&&typeof e.offset<"u")return e.offset;let n=1,i=1,r=0;for(let o=0;o<t.length;o++){if(i===e.line&&n===e.column){r=o;break}t[o]===`\n`?(n=1,i+=1):n+=1}return r}var Et=class{get proxyOf(){return this}constructor(e={}){this.raws={},this[At]=!1,this[Ps]=!0;for(let n in e)if(n==="nodes"){this.nodes=[];for(let i of e[n])typeof i.clone=="function"?this.append(i.clone()):this.append(i)}else this[n]=e[n]}addToError(e){if(e.postcssNode=this,e.stack&&this.source&&/\\n\\s{4}at /.test(e.stack)){let n=this.source;e.stack=e.stack.replace(/\\n\\s{4}at /,`$&${n.input.from}:${n.start.line}:${n.start.column}$&`)}return e}after(e){return this.parent.insertAfter(this,e),this}assign(e={}){for(let n in e)this[n]=e[n];return this}before(e){return this.parent.insertBefore(this,e),this}cleanRaws(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between}clone(e={}){let n=Tn(this);for(let i in e)n[i]=e[i];return n}cloneAfter(e={}){let n=this.clone(e);return this.parent.insertAfter(this,n),n}cloneBefore(e={}){let n=this.clone(e);return this.parent.insertBefore(this,n),n}error(e,n={}){if(this.source){let{end:i,start:r}=this.rangeBy(n);return this.source.input.error(e,{column:r.column,line:r.line},{column:i.column,line:i.line},n)}return new Bs(e)}getProxyProcessor(){return{get(e,n){return n==="proxyOf"?e:n==="root"?()=>e.root().toProxy():e[n]},set(e,n,i){return e[n]===i||(e[n]=i,(n==="prop"||n==="value"||n==="name"||n==="params"||n==="important"||n==="text")&&e.markDirty()),!0}}}markClean(){this[At]=!0}markDirty(){if(this[At]){this[At]=!1;let e=this;for(;e=e.parent;)e[At]=!1}}next(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e+1]}positionBy(e={}){let n=this.source.start;if(e.index)n=this.positionInside(e.index);else if(e.word){let i="document"in this.source.input?this.source.input.document:this.source.input.css,o=i.slice(Oe(i,this.source.start),Oe(i,this.source.end)).indexOf(e.word);o!==-1&&(n=this.positionInside(o))}return n}positionInside(e){let n=this.source.start.column,i=this.source.start.line,r="document"in this.source.input?this.source.input.document:this.source.input.css,o=Oe(r,this.source.start),s=o+e;for(let l=o;l<s;l++)r[l]===`\n`?(n=1,i+=1):n+=1;return{column:n,line:i,offset:s}}prev(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e-1]}rangeBy(e={}){let n="document"in this.source.input?this.source.input.document:this.source.input.css,i={column:this.source.start.column,line:this.source.start.line,offset:Oe(n,this.source.start)},r=this.source.end?{column:this.source.end.column+1,line:this.source.end.line,offset:typeof this.source.end.offset=="number"?this.source.end.offset:Oe(n,this.source.end)+1}:{column:i.column+1,line:i.line,offset:i.offset+1};if(e.word){let s=n.slice(Oe(n,this.source.start),Oe(n,this.source.end)).indexOf(e.word);s!==-1&&(i=this.positionInside(s),r=this.positionInside(s+e.word.length))}else e.start?i={column:e.start.column,line:e.start.line,offset:Oe(n,e.start)}:e.index&&(i=this.positionInside(e.index)),e.end?r={column:e.end.column,line:e.end.line,offset:Oe(n,e.end)}:typeof e.endIndex=="number"?r=this.positionInside(e.endIndex):e.index&&(r=this.positionInside(e.index+1));return(r.line<i.line||r.line===i.line&&r.column<=i.column)&&(r={column:i.column+1,line:i.line,offset:i.offset+1}),{end:r,start:i}}raw(e,n){return new Is().raw(this,e,n)}remove(){return this.parent&&this.parent.removeChild(this),this.parent=void 0,this}replaceWith(...e){if(this.parent){let n=this,i=!1;for(let r of e)r===this?i=!0:i?(this.parent.insertAfter(n,r),n=r):this.parent.insertBefore(n,r);i||this.remove()}return this}root(){let e=this;for(;e.parent&&e.parent.type!=="document";)e=e.parent;return e}toJSON(e,n){let i={},r=n==null;n=n||new Map;let o=0;for(let s in this){if(!Object.prototype.hasOwnProperty.call(this,s)||s==="parent"||s==="proxyCache")continue;let l=this[s];if(Array.isArray(l))i[s]=l.map(a=>typeof a=="object"&&a.toJSON?a.toJSON(null,n):a);else if(typeof l=="object"&&l.toJSON)i[s]=l.toJSON(null,n);else if(s==="source"){if(l==null)continue;let a=n.get(l.input);a==null&&(a=o,n.set(l.input,o),o++),i[s]={end:l.end,inputId:a,start:l.start}}else i[s]=l}return r&&(i.inputs=[...n.keys()].map(s=>s.toJSON())),i}toProxy(){return this.proxyCache||(this.proxyCache=new Proxy(this,this.getProxyProcessor())),this.proxyCache}toString(e=Os){e.stringify&&(e=e.stringify);let n="";return e(this,i=>{n+=i}),n}warn(e,n,i={}){let r={node:this};for(let o in i)r[o]=i[o];return e.warn(n,r)}};Ki.exports=Et;Et.default=Et});var Nt=Z((bc,Ji)=>{"use strict";var Ws=Ft(),wt=class extends Ws{constructor(e){super(e),this.type="comment"}};Ji.exports=wt;wt.default=wt});var Mt=Z((Ac,Qi)=>{"use strict";var Hs=Ft(),Ct=class extends Hs{get variable(){return this.prop.startsWith("--")||this.prop[0]==="$"}constructor(e){e&&typeof e.value<"u"&&typeof e.value!="string"&&(e={...e,value:String(e.value)}),super(e),this.type="decl"}};Qi.exports=Ct;Ct.default=Ct});var qe=Z((Ec,or)=>{"use strict";var Yi=Nt(),Zi=Mt(),qs=Ft(),{isClean:Xi,my:er}=Vt(),kn,tr,nr,vn;function ir(t){return t.map(e=>(e.nodes&&(e.nodes=ir(e.nodes)),delete e.source,e))}function rr(t){if(t[Xi]=!1,t.proxyOf.nodes)for(let e of t.proxyOf.nodes)rr(e)}var _e=class t extends qs{get first(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}get last(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}append(...e){for(let n of e){let i=this.normalize(n,this.last);for(let r of i)this.proxyOf.nodes.push(r)}return this.markDirty(),this}cleanRaws(e){if(super.cleanRaws(e),this.nodes)for(let n of this.nodes)n.cleanRaws(e)}each(e){if(!this.proxyOf.nodes)return;let n=this.getIterator(),i,r;for(;this.indexes[n]<this.proxyOf.nodes.length&&(i=this.indexes[n],r=e(this.proxyOf.nodes[i],i),r!==!1);)this.indexes[n]+=1;return delete this.indexes[n],r}every(e){return this.nodes.every(e)}getIterator(){this.lastEach||(this.lastEach=0),this.indexes||(this.indexes={}),this.lastEach+=1;let e=this.lastEach;return this.indexes[e]=0,e}getProxyProcessor(){return{get(e,n){return n==="proxyOf"?e:e[n]?n==="each"||typeof n=="string"&&n.startsWith("walk")?(...i)=>e[n](...i.map(r=>typeof r=="function"?(o,s)=>r(o.toProxy(),s):r)):n==="every"||n==="some"?i=>e[n]((r,...o)=>i(r.toProxy(),...o)):n==="root"?()=>e.root().toProxy():n==="nodes"?e.nodes.map(i=>i.toProxy()):n==="first"||n==="last"?e[n].toProxy():e[n]:e[n]},set(e,n,i){return e[n]===i||(e[n]=i,(n==="name"||n==="params"||n==="selector")&&e.markDirty()),!0}}}index(e){return typeof e=="number"?e:(e.proxyOf&&(e=e.proxyOf),this.proxyOf.nodes.indexOf(e))}insertAfter(e,n){let i=this.index(e),r=this.normalize(n,this.proxyOf.nodes[i]).reverse();i=this.index(e);for(let s of r)this.proxyOf.nodes.splice(i+1,0,s);let o;for(let s in this.indexes)o=this.indexes[s],i<o&&(this.indexes[s]=o+r.length);return this.markDirty(),this}insertBefore(e,n){let i=this.index(e),r=i===0?"prepend":!1,o=this.normalize(n,this.proxyOf.nodes[i],r).reverse();i=this.index(e);for(let l of o)this.proxyOf.nodes.splice(i,0,l);let s;for(let l in this.indexes)s=this.indexes[l],i<=s&&(this.indexes[l]=s+o.length);return this.markDirty(),this}normalize(e,n){if(typeof e=="string")e=ir(tr(e).nodes);else if(typeof e>"u")e=[];else if(Array.isArray(e)){e=e.slice(0);for(let r of e)r.parent&&r.parent.removeChild(r,"ignore")}else if(e.type==="root"&&this.type!=="document"){e=e.nodes.slice(0);for(let r of e)r.parent&&r.parent.removeChild(r,"ignore")}else if(e.type)e=[e];else if(e.prop){if(typeof e.value>"u")throw new Error("Value field is missed in node creation");typeof e.value!="string"&&(e.value=String(e.value)),e=[new Zi(e)]}else if(e.selector||e.selectors)e=[new vn(e)];else if(e.name)e=[new kn(e)];else if(e.text)e=[new Yi(e)];else throw new Error("Unknown node type in node creation");return e.map(r=>(r[er]||t.rebuild(r),r=r.proxyOf,r.parent&&r.parent.removeChild(r),r[Xi]&&rr(r),r.raws||(r.raws={}),typeof r.raws.before>"u"&&n&&typeof n.raws.before<"u"&&(r.raws.before=n.raws.before.replace(/\\S/g,"")),r.parent=this.proxyOf,r))}prepend(...e){e=e.reverse();for(let n of e){let i=this.normalize(n,this.first,"prepend").reverse();for(let r of i)this.proxyOf.nodes.unshift(r);for(let r in this.indexes)this.indexes[r]=this.indexes[r]+i.length}return this.markDirty(),this}push(e){return e.parent=this,this.proxyOf.nodes.push(e),this}removeAll(){for(let e of this.proxyOf.nodes)e.parent=void 0;return this.proxyOf.nodes=[],this.markDirty(),this}removeChild(e){e=this.index(e),this.proxyOf.nodes[e].parent=void 0,this.proxyOf.nodes.splice(e,1);let n;for(let i in this.indexes)n=this.indexes[i],n>=e&&(this.indexes[i]=n-1);return this.markDirty(),this}replaceValues(e,n,i){return i||(i=n,n={}),this.walkDecls(r=>{n.props&&!n.props.includes(r.prop)||n.fast&&!r.value.includes(n.fast)||(r.value=r.value.replace(e,i))}),this.markDirty(),this}some(e){return this.nodes.some(e)}walk(e){return this.each((n,i)=>{let r;try{r=e(n,i)}catch(o){throw n.addToError(o)}return r!==!1&&n.walk&&(r=n.walk(e)),r})}walkAtRules(e,n){return n?e instanceof RegExp?this.walk((i,r)=>{if(i.type==="atrule"&&e.test(i.name))return n(i,r)}):this.walk((i,r)=>{if(i.type==="atrule"&&i.name===e)return n(i,r)}):(n=e,this.walk((i,r)=>{if(i.type==="atrule")return n(i,r)}))}walkComments(e){return this.walk((n,i)=>{if(n.type==="comment")return e(n,i)})}walkDecls(e,n){return n?e instanceof RegExp?this.walk((i,r)=>{if(i.type==="decl"&&e.test(i.prop))return n(i,r)}):this.walk((i,r)=>{if(i.type==="decl"&&i.prop===e)return n(i,r)}):(n=e,this.walk((i,r)=>{if(i.type==="decl")return n(i,r)}))}walkRules(e,n){return n?e instanceof RegExp?this.walk((i,r)=>{if(i.type==="rule"&&e.test(i.selector))return n(i,r)}):this.walk((i,r)=>{if(i.type==="rule"&&i.selector===e)return n(i,r)}):(n=e,this.walk((i,r)=>{if(i.type==="rule")return n(i,r)}))}};_e.registerParse=t=>{tr=t};_e.registerRule=t=>{vn=t};_e.registerAtRule=t=>{kn=t};_e.registerRoot=t=>{nr=t};or.exports=_e;_e.default=_e;_e.rebuild=t=>{t.type==="atrule"?Object.setPrototypeOf(t,kn.prototype):t.type==="rule"?Object.setPrototypeOf(t,vn.prototype):t.type==="decl"?Object.setPrototypeOf(t,Zi.prototype):t.type==="comment"?Object.setPrototypeOf(t,Yi.prototype):t.type==="root"&&Object.setPrototypeOf(t,nr.prototype),t[er]=!0,t.nodes&&t.nodes.forEach(e=>{_e.rebuild(e)})}});var Ut=Z((Fc,ar)=>{"use strict";var sr=qe(),nt=class extends sr{constructor(e){super(e),this.type="atrule"}append(...e){return this.proxyOf.nodes||(this.nodes=[]),super.append(...e)}prepend(...e){return this.proxyOf.nodes||(this.nodes=[]),super.prepend(...e)}};ar.exports=nt;nt.default=nt;sr.registerAtRule(nt)});var zt=Z((wc,cr)=>{"use strict";var Vs=qe(),lr,ur,Ze=class extends Vs{constructor(e){super({type:"document",...e}),this.nodes||(this.nodes=[])}toResult(e={}){return new lr(new ur,this,e).stringify()}};Ze.registerLazyResult=t=>{lr=t};Ze.registerProcessor=t=>{ur=t};cr.exports=Ze;Ze.default=Ze});var fr=Z((Nc,dr)=>{var Us="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict",zs=(t,e=21)=>(n=e)=>{let i="",r=n|0;for(;r--;)i+=t[Math.random()*t.length|0];return i},js=(t=21)=>{let e="",n=t|0;for(;n--;)e+=Us[Math.random()*64|0];return e};dr.exports={nanoid:js,customAlphabet:zs}});var jt=Z(()=>{});var $t=Z(()=>{});var _n=Z(()=>{});var mr=Z(()=>{});var Ln=Z((Dc,xr)=>{"use strict";var{existsSync:$s,readFileSync:Gs}=mr(),{dirname:Rn,join:Ks}=jt(),{SourceMapConsumer:pr,SourceMapGenerator:hr}=$t();function Js(t){return Buffer?Buffer.from(t,"base64").toString():window.atob(t)}var Tt=class{constructor(e,n){if(n.map===!1)return;n.unsafeMap&&(this.unsafeMap=!0),this.loadAnnotation(e),this.inline=this.startWith(this.annotation,"data:");let i=n.map?n.map.prev:void 0,r=this.loadMap(n.from,i);!this.mapFile&&n.from&&(this.mapFile=n.from),this.mapFile&&(this.root=Rn(this.mapFile)),r&&(this.text=r)}consumer(){return this.consumerCache||(this.consumerCache=new pr(this.json||this.text)),this.consumerCache}decodeInline(e){let n=/^data:application\\/json;charset=utf-?8;base64,/,i=/^data:application\\/json;base64,/,r=/^data:application\\/json;charset=utf-?8,/,o=/^data:application\\/json,/,s=e.match(r)||e.match(o);if(s)return decodeURIComponent(e.substr(s[0].length));let l=e.match(n)||e.match(i);if(l)return Js(e.substr(l[0].length));let a=e.slice(22);throw a=a.slice(0,a.indexOf(",")),new Error("Unsupported source map encoding "+a)}getAnnotationURL(e){return e.replace(/^\\/\\*\\s*# sourceMappingURL=/,"").trim()}isMap(e){return typeof e!="object"?!1:typeof e.mappings=="string"||typeof e._mappings=="string"||Array.isArray(e.sections)}loadAnnotation(e){let n=e.match(/\\/\\*\\s*# sourceMappingURL=/g);if(!n)return;let i=e.lastIndexOf(n.pop()),r=e.indexOf("*/",i);i>-1&&r>-1&&(this.annotation=this.getAnnotationURL(e.substring(i,r)))}loadFile(e,n,i){if(!(!i&&!this.unsafeMap&&!/\\.map$/i.test(e))&&(this.root=Rn(e),$s(e)))return this.mapFile=e,Gs(e,"utf-8").toString().trim()}loadMap(e,n){if(n===!1)return!1;if(n){if(typeof n=="string")return n;if(typeof n=="function"){let i=n(e);if(i){let r=this.loadFile(i,e,!0);if(!r)throw new Error("Unable to load previous source map: "+i.toString());return r}}else{if(n instanceof pr)return hr.fromSourceMap(n).toString();if(n instanceof hr)return n.toString();if(this.isMap(n))return JSON.stringify(n);throw new Error("Unsupported previous source map format: "+n.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){let i=this.annotation;e&&(i=Ks(Rn(e),i));let r=this.loadFile(i,e,!1);if(r)try{this.json=JSON.parse(r.replace(/^\\)]}\'[^\\n]*\\n/,""))}catch{return}return r}}}startWith(e,n){return e?e.substr(0,n.length)===n:!1}withContent(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)}};xr.exports=Tt;Tt.default=Tt});var kt=Z((Bc,Ar)=>{"use strict";var{nanoid:Qs}=fr(),{isAbsolute:In,resolve:On}=jt(),{SourceMapConsumer:Ys,SourceMapGenerator:Zs}=$t(),{fileURLToPath:gr,pathToFileURL:Gt}=_n(),yr=qt(),Xs=Ln(),Dn=wn(),Bn=Symbol("lineToIndexCache"),ea=!!(Ys&&Zs),Sr=!!(On&&In);function br(t){if(t[Bn])return t[Bn];let e=t.css.split(`\n`),n=new Array(e.length),i=0;for(let r=0,o=e.length;r<o;r++)n[r]=i,i+=e[r].length+1;return t[Bn]=n,n}var it=class{get from(){return this.file||this.id}constructor(e,n={}){if(e===null||typeof e>"u"||typeof e=="object"&&!e.toString)throw new Error(`PostCSS received ${e} instead of CSS string`);if(this.css=e.toString(),this.css[0]==="\\uFEFF"||this.css[0]==="\\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,this.document=this.css,n.document&&(this.document=n.document.toString()),n.from&&(!Sr||/^\\w+:\\/\\//.test(n.from)||In(n.from)?this.file=n.from:this.file=On(n.from)),Sr&&ea){let i=new Xs(this.css,n);if(i.text){this.map=i;let r=i.consumer().file;!this.file&&r&&(this.file=this.mapResolve(r))}}this.file||(this.id="<input css "+Qs(6)+">"),this.map&&(this.map.file=this.from)}error(e,n,i,r={}){let o,s,l,a,c;if(n&&typeof n=="object"){let m=n,f=i;if(typeof m.offset=="number"){a=m.offset;let x=this.fromOffset(a);n=x.line,i=x.col}else n=m.line,i=m.column,a=this.fromLineAndColumn(n,i);if(typeof f.offset=="number"){l=f.offset;let x=this.fromOffset(l);s=x.line,o=x.col}else s=f.line,o=f.column,l=this.fromLineAndColumn(f.line,f.column)}else if(i)a=this.fromLineAndColumn(n,i);else{a=n;let m=this.fromOffset(a);n=m.line,i=m.col}let u=this.origin(n,i,s,o);return u?c=new yr(e,u.endLine===void 0?u.line:{column:u.column,line:u.line},u.endLine===void 0?u.column:{column:u.endColumn,line:u.endLine},u.source,u.file,r.plugin):c=new yr(e,s===void 0?n:{column:i,line:n},s===void 0?i:{column:o,line:s},this.css,this.file,r.plugin),c.input={column:i,endColumn:o,endLine:s,endOffset:l,line:n,offset:a,source:this.css},this.file&&(Gt&&(c.input.url=Gt(this.file).toString()),c.input.file=this.file),c}fromLineAndColumn(e,n){return br(this)[e-1]+n-1}fromOffset(e){let n=br(this),i=n[n.length-1],r=0;if(e>=i)r=n.length-1;else{let o=n.length-2,s;for(;r<o;)if(s=r+(o-r>>1),e<n[s])o=s-1;else if(e>=n[s+1])r=s+1;else{r=s;break}}return{col:e-n[r]+1,line:r+1}}mapResolve(e){return/^\\w+:\\/\\//.test(e)?e:On(this.map.consumer().sourceRoot||this.map.root||".",e)}origin(e,n,i,r){if(!this.map)return!1;let o=this.map.consumer(),s=o.originalPositionFor({column:n,line:e});if(!s.source)return!1;let l;typeof i=="number"&&(l=o.originalPositionFor({column:r,line:i}));let a;In(s.source)?a=Gt(s.source):a=new URL(s.source,this.map.consumer().sourceRoot||Gt(this.map.mapFile));let c={column:s.column,endColumn:l&&l.column,endLine:l&&l.line,line:s.line,url:a.toString()};if(a.protocol==="file:")if(gr)c.file=gr(a);else throw new Error("file: protocol is not available in this PostCSS build");let u=o.sourceContentFor(s.source);return u&&(c.source=u),c}toJSON(){let e={};for(let n of["hasBOM","css","file","id"])this[n]!=null&&(e[n]=this[n]);return this.map&&(e.map={...this.map},e.map.consumerCache&&(e.map.consumerCache=void 0)),e}};Ar.exports=it;it.default=it;Dn&&Dn.registerInput&&Dn.registerInput(it)});var rt=Z((Ic,Nr)=>{"use strict";var Er=qe(),Fr,wr,Ve=class extends Er{constructor(e){super(e),this.type="root",this.nodes||(this.nodes=[])}normalize(e,n,i){let r=super.normalize(e);if(n){if(i==="prepend")this.nodes.length>1?n.raws.before=this.nodes[1].raws.before:delete n.raws.before;else if(this.first!==n)for(let o of r)o.raws.before=n.raws.before}return r}removeChild(e,n){let i=this.index(e);return!n&&i===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[i].raws.before),super.removeChild(e)}toResult(e={}){return new Fr(new wr,this,e).stringify()}};Ve.registerLazyResult=t=>{Fr=t};Ve.registerProcessor=t=>{wr=t};Nr.exports=Ve;Ve.default=Ve;Er.registerRoot(Ve)});var Pn=Z((Oc,Cr)=>{"use strict";var vt={comma(t){return vt.split(t,[","],!0)},space(t){let e=[" ",`\n`," "];return vt.split(t,e)},split(t,e,n){let i=[],r="",o=!1,s=0,l=!1,a="",c=!1;for(let u of t)c?c=!1:u==="\\\\"?c=!0:l?u===a&&(l=!1):u===\'"\'||u==="\'"?(l=!0,a=u):u==="("?s+=1:u===")"?s>0&&(s-=1):s===0&&e.includes(u)&&(o=!0),o?(r!==""&&i.push(r.trim()),r="",o=!1):r+=u;return(n||r!=="")&&i.push(r.trim()),i}};Cr.exports=vt;vt.default=vt});var Kt=Z((Pc,Tr)=>{"use strict";var Mr=qe(),ta=Pn(),ot=class extends Mr{get selectors(){return ta.comma(this.selector)}set selectors(e){let n=this.selector?this.selector.match(/,\\s*/):null,i=n?n[0]:","+this.raw("between","beforeOpen");this.selector=e.join(i)}constructor(e){super(e),this.type="rule",this.nodes||(this.nodes=[])}};Tr.exports=ot;ot.default=ot;Mr.registerRule(ot)});var vr=Z((Wc,kr)=>{"use strict";var na=Ut(),ia=Nt(),ra=Mt(),oa=kt(),sa=Ln(),aa=rt(),la=Kt();function _t(t,e){if(Array.isArray(t))return t.map(r=>_t(r));let{inputs:n,...i}=t;if(n){e=[];for(let r of n){let o={...r,__proto__:oa.prototype};o.map&&(o.map={...o.map,__proto__:sa.prototype}),e.push(o)}}if(i.nodes&&(i.nodes=t.nodes.map(r=>_t(r,e))),i.source){let{inputId:r,...o}=i.source;i.source=o,r!=null&&(i.source.input=e[r])}if(i.type==="root")return new aa(i);if(i.type==="decl")return new ra(i);if(i.type==="rule")return new la(i);if(i.type==="comment")return new ia(i);if(i.type==="atrule")return new na(i);throw new Error("Unknown node type: "+t.type)}kr.exports=_t;_t.default=_t});var Hn=Z((Hc,Ir)=>{"use strict";var{dirname:Jt,relative:Rr,resolve:Lr,sep:Dr}=jt(),{SourceMapConsumer:Br,SourceMapGenerator:Qt}=$t(),{pathToFileURL:_r}=_n(),ua=kt(),ca=!!(Br&&Qt),da=!!(Jt&&Lr&&Rr&&Dr),Wn=class{constructor(e,n,i,r){this.stringify=e,this.mapOpts=i.map||{},this.root=n,this.opts=i,this.css=r,this.originalCSS=r,this.usesFileUrls=!this.mapOpts.from&&this.mapOpts.absolute,this.memoizedFileURLs=new Map,this.memoizedPaths=new Map,this.memoizedURLs=new Map}addAnnotation(){let e;this.isInline()?e="data:application/json;base64,"+this.toBase64(this.map.toString()):typeof this.mapOpts.annotation=="string"?e=this.mapOpts.annotation:typeof this.mapOpts.annotation=="function"?e=this.mapOpts.annotation(this.opts.to,this.root):e=this.outputFile()+".map";let n=`\n`;this.css.includes(`\\r\n`)&&(n=`\\r\n`),this.css+=n+"/*# sourceMappingURL="+e+" */"}applyPrevMaps(){for(let e of this.previous()){let n=this.toUrl(this.path(e.file)),i=e.root||Jt(e.file),r;this.mapOpts.sourcesContent===!1?(r=new Br(e.text),r.sourcesContent&&(r.sourcesContent=null)):r=e.consumer(),this.map.applySourceMap(r,n,this.toUrl(this.path(i)))}}clearAnnotation(){if(this.mapOpts.annotation!==!1){if(this.root){let e;for(let n=this.root.nodes.length-1;n>=0;n--)e=this.root.nodes[n],e.type==="comment"&&e.text.startsWith("# sourceMappingURL=")&&this.root.removeChild(n)}else if(this.css){let e;for(;(e=this.css.lastIndexOf("/*#"))!==-1;){let n=this.css.indexOf("*/",e+3);if(n===-1)break;for(;e>0&&this.css[e-1]===`\n`;)e--;this.css=this.css.slice(0,e)+this.css.slice(n+2)}}}}generate(){if(this.clearAnnotation(),da&&ca&&this.isMap())return this.generateMap();{let e="";return this.stringify(this.root,n=>{e+=n}),[e]}}generateMap(){if(this.root)this.generateString();else if(this.previous().length===1){let e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=Qt.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new Qt({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):"<no source>"});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]}generateString(){this.css="",this.map=new Qt({file:this.outputFile(),ignoreInvalidMapping:!0});let e=1,n=1,i="<no source>",r={generated:{column:0,line:0},original:{column:0,line:0},source:""},o,s;this.stringify(this.root,(l,a,c)=>{if(this.css+=l,a&&c!=="end"&&(r.generated.line=e,r.generated.column=n-1,a.source&&a.source.start?(r.source=this.sourcePath(a),r.original.line=a.source.start.line,r.original.column=a.source.start.column-1,this.map.addMapping(r)):(r.source=i,r.original.line=1,r.original.column=0,this.map.addMapping(r))),s=l.match(/\\n/g),s?(e+=s.length,o=l.lastIndexOf(`\n`),n=l.length-o):n+=l.length,a&&c!=="start"){let u=a.parent||{raws:{}};(!(a.type==="decl"||a.type==="atrule"&&!a.nodes)||a!==u.last||u.raws.semicolon)&&(a.source&&a.source.end?(r.source=this.sourcePath(a),r.original.line=a.source.end.line,r.original.column=a.source.end.column-1,r.generated.line=e,r.generated.column=n-2,this.map.addMapping(r)):(r.source=i,r.original.line=1,r.original.column=0,r.generated.line=e,r.generated.column=n-1,this.map.addMapping(r)))}})}isAnnotation(){return this.isInline()?!0:typeof this.mapOpts.annotation<"u"?this.mapOpts.annotation:this.previous().length?this.previous().some(e=>e.annotation):!0}isInline(){if(typeof this.mapOpts.inline<"u")return this.mapOpts.inline;let e=this.mapOpts.annotation;return typeof e<"u"&&e!==!0?!1:this.previous().length?this.previous().some(n=>n.inline):!0}isMap(){return typeof this.opts.map<"u"?!!this.opts.map:this.previous().length>0}isSourcesContent(){return typeof this.mapOpts.sourcesContent<"u"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(e=>e.withContent()):!0}outputFile(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"}path(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\\w+:\\/\\//.test(e))return e;let n=this.memoizedPaths.get(e);if(n)return n;let i=this.opts.to?Jt(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(i=Jt(Lr(i,this.mapOpts.annotation)));let r=Rr(i,e);return this.memoizedPaths.set(e,r),r}previous(){if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(e=>{if(e.source&&e.source.input.map){let n=e.source.input.map;this.previousMaps.includes(n)||this.previousMaps.push(n)}});else{let e=new ua(this.originalCSS,this.opts);e.map&&this.previousMaps.push(e.map)}return this.previousMaps}setSourcesContent(){let e={};if(this.root)this.root.walk(n=>{if(n.source){let i=n.source.input.from;if(i&&!e[i]){e[i]=!0;let r=this.usesFileUrls?this.toFileUrl(i):this.toUrl(this.path(i));this.map.setSourceContent(r,n.source.input.css)}}});else if(this.css){let n=this.opts.from?this.toUrl(this.path(this.opts.from)):"<no source>";this.map.setSourceContent(n,this.css)}}sourcePath(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))}toBase64(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))}toFileUrl(e){let n=this.memoizedFileURLs.get(e);if(n)return n;if(_r){let i=_r(e).toString();return this.memoizedFileURLs.set(e,i),i}else throw new Error("`map.absolute` option is not available in this PostCSS build")}toUrl(e){let n=this.memoizedURLs.get(e);if(n)return n;Dr==="\\\\"&&(e=e.replace(/\\\\/g,"/"));let i=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,i),i}};Ir.exports=Wn});var Wr=Z((qc,Pr)=>{"use strict";var Yt=/[\\t\\n\\f\\r "#\'()/;[\\\\\\]{}]/g,Zt=/[\\t\\n\\f\\r !"#\'():;@[\\\\\\]{}]|\\/(?=\\*)/g,fa=/.[\\r\\n"\'(/\\\\]/,Or=/[\\da-f]/i;Pr.exports=function(e,n={}){let i=e.css.valueOf(),r=n.ignoreErrors,o,s,l,a,c,u,m,f,x,F,E=i.length,S=0,B=[],D=[],v=-1;function X(){return S}function q(N){throw e.error("Unclosed "+N,S)}function C(){return D.length===0&&S>=E}function g(N){if(D.length)return D.pop();if(S>=E)return;let w=N?N.ignoreUnclosed:!1;switch(o=i.charCodeAt(S),o){case 10:case 32:case 9:case 13:case 12:{a=S;do a+=1,o=i.charCodeAt(a);while(o===32||o===10||o===9||o===13||o===12);u=["space",i.slice(S,a)],S=a-1;break}case 91:case 93:case 123:case 125:case 58:case 59:case 41:{let T=String.fromCharCode(o);u=[T,T,S];break}case 40:{if(F=B.length?B.pop()[1]:"",x=i.charCodeAt(S+1),F==="url"&&x!==39&&x!==34&&x!==32&&x!==10&&x!==9&&x!==12&&x!==13){a=S;do{if(m=!1,a=i.indexOf(")",a+1),a===-1)if(r||w){a=S;break}else q("bracket");for(f=a;i.charCodeAt(f-1)===92;)f-=1,m=!m}while(m);u=["brackets",i.slice(S,a+1),S,a],S=a}else S<=v?u=["(","(",S]:(a=i.indexOf(")",S+1),s=i.slice(S,a+1),a===-1||fa.test(s)?(v=a===-1?E:a,u=["(","(",S]):(u=["brackets",s,S,a],S=a));break}case 39:case 34:{c=o===39?"\'":\'"\',a=S;do{if(m=!1,a=i.indexOf(c,a+1),a===-1)if(r||w){a=S+1;break}else q("string");for(f=a;i.charCodeAt(f-1)===92;)f-=1,m=!m}while(m);u=["string",i.slice(S,a+1),S,a],S=a;break}case 64:{Yt.lastIndex=S+1,Yt.test(i),Yt.lastIndex===0?a=i.length-1:a=Yt.lastIndex-2,u=["at-word",i.slice(S,a+1),S,a],S=a;break}case 92:{for(a=S,l=!0;i.charCodeAt(a+1)===92;)a+=1,l=!l;if(o=i.charCodeAt(a+1),l&&o!==47&&o!==32&&o!==10&&o!==9&&o!==13&&o!==12&&(a+=1,Or.test(i.charAt(a)))){for(;Or.test(i.charAt(a+1));)a+=1;i.charCodeAt(a+1)===32&&(a+=1)}u=["word",i.slice(S,a+1),S,a],S=a;break}default:{o===47&&i.charCodeAt(S+1)===42?(a=i.indexOf("*/",S+2)+1,a===0&&(r||w?a=i.length:q("comment")),u=["comment",i.slice(S,a+1),S,a],S=a):(Zt.lastIndex=S+1,Zt.test(i),Zt.lastIndex===0?a=i.length-1:a=Zt.lastIndex-2,u=["word",i.slice(S,a+1),S,a],B.push(u),S=a);break}}return S++,u}function A(N){D.push(N)}return{back:A,endOfFile:C,nextToken:g,position:X}}});var Ur=Z((Vc,Vr)=>{"use strict";var ma=Ut(),pa=Nt(),ha=Mt(),xa=rt(),Hr=Kt(),ga=Wr(),qr={empty:!0,space:!0};function ya(t){for(let e=t.length-1;e>=0;e--){let n=t[e],i=n[3]||n[2];if(i)return i}}var qn=class{constructor(e){this.input=e,this.root=new xa,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:e,start:{column:1,line:1,offset:0}}}atrule(e){let n=new ma;n.name=e[1].slice(1),n.name===""&&this.unnamedAtrule(n,e),this.init(n,e[2]);let i,r,o,s=!1,l=!1,a=[],c=[];for(;!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),i=e[0],i==="("||i==="["?c.push(i==="("?")":"]"):i==="{"&&c.length>0?c.push("}"):i===c[c.length-1]&&c.pop(),c.length===0)if(i===";"){n.source.end=this.getPosition(e[2]),n.source.end.offset++,this.semicolon=!0;break}else if(i==="{"){l=!0;break}else if(i==="}"){if(a.length>0){for(o=a.length-1,r=a[o];r&&r[0]==="space";)r=a[--o];r&&(n.source.end=this.getPosition(r[3]||r[2]),n.source.end.offset++)}this.end(e);break}else a.push(e);else a.push(e);if(this.tokenizer.endOfFile()){s=!0;break}}n.raws.between=this.spacesAndCommentsFromEnd(a),a.length?(n.raws.afterName=this.spacesAndCommentsFromStart(a),this.raw(n,"params",a),s&&(e=a[a.length-1],n.source.end=this.getPosition(e[3]||e[2]),n.source.end.offset++,this.spaces=n.raws.between,n.raws.between="")):(n.raws.afterName="",n.params=""),l&&(n.nodes=[],this.current=n)}checkMissedSemicolon(e){let n=this.colon(e);if(n===!1)return;let i=0,r;for(let o=n-1;o>=0&&(r=e[o],!(r[0]!=="space"&&(i+=1,i===2)));o--);throw this.input.error("Missed semicolon",r[0]==="word"?r[3]+1:r[2])}colon(e){let n=0,i,r,o;for(let[s,l]of e.entries()){if(r=l,o=r[0],o==="("&&(n+=1),o===")"&&(n-=1),n===0&&o===":")if(!i)this.doubleColon(r);else{if(i[0]==="word"&&i[1]==="progid")continue;return s}i=r}return!1}comment(e){let n=new pa;this.init(n,e[2]),n.source.end=this.getPosition(e[3]||e[2]),n.source.end.offset++;let i=e[1].slice(2,-2);if(!i.trim())n.text="",n.raws.left=i,n.raws.right="";else{let r=i.match(/^(\\s*)([^]*\\S)(\\s*)$/);n.text=r[2],n.raws.left=r[1],n.raws.right=r[3]}}createTokenizer(){this.tokenizer=ga(this.input)}decl(e,n){let i=new ha;this.init(i,e[0][2]);let r=e[e.length-1];for(r[0]===";"&&(this.semicolon=!0,e.pop()),i.source.end=this.getPosition(r[3]||r[2]||ya(e)),i.source.end.offset++;e[0][0]!=="word";)e.length===1&&this.unknownWord(e),i.raws.before+=e.shift()[1];for(i.source.start=this.getPosition(e[0][2]),i.prop="";e.length;){let c=e[0][0];if(c===":"||c==="space"||c==="comment")break;i.prop+=e.shift()[1]}i.raws.between="";let o;for(;e.length;)if(o=e.shift(),o[0]===":"){i.raws.between+=o[1];break}else o[0]==="word"&&/\\w/.test(o[1])&&this.unknownWord([o]),i.raws.between+=o[1];(i.prop[0]==="_"||i.prop[0]==="*")&&(i.raws.before+=i.prop[0],i.prop=i.prop.slice(1));let s=[],l;for(;e.length&&(l=e[0][0],!(l!=="space"&&l!=="comment"));)s.push(e.shift());this.precheckMissedSemicolon(e);for(let c=e.length-1;c>=0;c--){if(o=e[c],o[1].toLowerCase()==="!important"){i.important=!0;let u=this.stringFrom(e,c);u=this.spacesFromEnd(e)+u,u!==" !important"&&(i.raws.important=u);break}else if(o[1].toLowerCase()==="important"){let u=e.slice(0),m="";for(let f=c;f>0;f--){let x=u[f][0];if(m.trim().startsWith("!")&&x!=="space")break;m=u.pop()[1]+m}m.trim().startsWith("!")&&(i.important=!0,i.raws.important=m,e=u)}if(o[0]!=="space"&&o[0]!=="comment")break}e.some(c=>c[0]!=="space"&&c[0]!=="comment")&&(i.raws.between+=s.map(c=>c[1]).join(""),s=[]),this.raw(i,"value",s.concat(e),n),i.value.includes(":")&&!n&&this.checkMissedSemicolon(e)}doubleColon(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})}emptyRule(e){let n=new Hr;this.init(n,e[2]),n.selector="",n.raws.between="",this.current=n}end(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)}endFile(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())}freeSemicolon(e){if(this.spaces+=e[1],this.current.nodes){let n=this.current.nodes[this.current.nodes.length-1];n&&n.type==="rule"&&!n.raws.ownSemicolon&&(n.raws.ownSemicolon=this.spaces,this.spaces="",n.source.end=this.getPosition(e[2]),n.source.end.offset+=n.raws.ownSemicolon.length)}}getPosition(e){let n=this.input.fromOffset(e);return{column:n.col,line:n.line,offset:e}}init(e,n){this.current.push(e),e.source={input:this.input,start:this.getPosition(n)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)}other(e){let n=!1,i=null,r=!1,o=null,s=[],l=e[1].startsWith("--"),a=[],c=e;for(;c;){if(i=c[0],a.push(c),i==="("||i==="[")o||(o=c),s.push(i==="("?")":"]");else if(l&&r&&i==="{")o||(o=c),s.push("}");else if(s.length===0)if(i===";")if(r){this.decl(a,l);return}else break;else if(i==="{"){this.rule(a);return}else if(i==="}"){this.tokenizer.back(a.pop()),n=!0;break}else i===":"&&(r=!0);else i===s[s.length-1]&&(s.pop(),s.length===0&&(o=null));c=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(n=!0),s.length>0&&this.unclosedBracket(o),n&&r){if(!l)for(;a.length&&(c=a[a.length-1][0],!(c!=="space"&&c!=="comment"));)this.tokenizer.back(a.pop());this.decl(a,l)}else this.unknownWord(a)}parse(){let e;for(;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()}precheckMissedSemicolon(){}raw(e,n,i,r){let o,s,l=i.length,a="",c=!0,u,m;for(let f=0;f<l;f+=1)o=i[f],s=o[0],s==="space"&&f===l-1&&!r?c=!1:s==="comment"?(m=i[f-1]?i[f-1][0]:"empty",u=i[f+1]?i[f+1][0]:"empty",!qr[m]&&!qr[u]?a.slice(-1)===","?c=!1:a+=o[1]:c=!1):a+=o[1];if(!c){let f=i.reduce((x,F)=>x+F[1],"");e.raws[n]={raw:f,value:a}}e[n]=a}rule(e){e.pop();let n=new Hr;this.init(n,e[0][2]),n.raws.between=this.spacesAndCommentsFromEnd(e),this.raw(n,"selector",e),this.current=n}spacesAndCommentsFromEnd(e){let n,i="";for(;e.length&&(n=e[e.length-1][0],!(n!=="space"&&n!=="comment"));)i=e.pop()[1]+i;return i}spacesAndCommentsFromStart(e){let n,i="";for(;e.length&&(n=e[0][0],!(n!=="space"&&n!=="comment"));)i+=e.shift()[1];return i}spacesFromEnd(e){let n,i="";for(;e.length&&(n=e[e.length-1][0],n==="space");)i=e.pop()[1]+i;return i}stringFrom(e,n){let i="";for(let r=n;r<e.length;r++)i+=e[r][1];return e.splice(n,e.length-n),i}unclosedBlock(){let e=this.current.source.start;throw this.input.error("Unclosed block",e.line,e.column)}unclosedBracket(e){throw this.input.error("Unclosed bracket",{offset:e[2]},{offset:e[2]+1})}unexpectedClose(e){throw this.input.error("Unexpected }",{offset:e[2]},{offset:e[2]+1})}unknownWord(e){throw this.input.error("Unknown word "+e[0][1],{offset:e[0][2]},{offset:e[0][2]+e[0][1].length})}unnamedAtrule(e,n){throw this.input.error("At-rule without name",{offset:n[2]},{offset:n[2]+n[1].length})}};Vr.exports=qn});var en=Z((Uc,zr)=>{"use strict";var Sa=qe(),ba=kt(),Aa=Ur();function Xt(t,e){let n=new ba(t,e),i=new Aa(n);try{i.parse()}catch(r){throw r}return i.root}zr.exports=Xt;Xt.default=Xt;Sa.registerParse(Xt)});var Vn=Z((zc,jr)=>{"use strict";var Rt=class{constructor(e,n={}){if(this.type="warning",this.text=e,n.node&&n.node.source){let i=n.node.rangeBy(n);this.line=i.start.line,this.column=i.start.column,this.endLine=i.end.line,this.endColumn=i.end.column}for(let i in n)this[i]=n[i]}toString(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text}};jr.exports=Rt;Rt.default=Rt});var tn=Z((jc,$r)=>{"use strict";var Ea=Vn(),Lt=class{get content(){return this.css}constructor(e,n,i){this.processor=e,this.messages=[],this.root=n,this.opts=i,this.css="",this.map=void 0}toString(){return this.css}warn(e,n={}){n.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(n.plugin=this.lastPlugin.postcssPlugin);let i=new Ea(e,n);return this.messages.push(i),i}warnings(){return this.messages.filter(e=>e.type==="warning")}};$r.exports=Lt;Lt.default=Lt});var Un=Z(($c,Kr)=>{"use strict";var Gr={};Kr.exports=function(e){Gr[e]||(Gr[e]=!0,typeof console<"u"&&console.warn&&console.warn(e))}});var $n=Z((Kc,Zr)=>{"use strict";var Fa=qe(),wa=zt(),Na=Hn(),Ca=en(),Jr=tn(),Ma=rt(),Ta=bt(),{isClean:Be,my:ka}=Vt(),Gc=Un(),va={atrule:"AtRule",comment:"Comment",decl:"Declaration",document:"Document",root:"Root",rule:"Rule"},_a={AtRule:!0,AtRuleExit:!0,Comment:!0,CommentExit:!0,Declaration:!0,DeclarationExit:!0,Document:!0,DocumentExit:!0,Once:!0,OnceExit:!0,postcssPlugin:!0,prepare:!0,Root:!0,RootExit:!0,Rule:!0,RuleExit:!0},Ra={Once:!0,postcssPlugin:!0,prepare:!0},st=0;function Dt(t){return typeof t=="object"&&typeof t.then=="function"}function Yr(t){let e=!1,n=va[t.type];return t.type==="decl"?e=t.prop.toLowerCase():t.type==="atrule"&&(e=t.name.toLowerCase()),e&&t.append?[n,n+"-"+e,st,n+"Exit",n+"Exit-"+e]:e?[n,n+"-"+e,n+"Exit",n+"Exit-"+e]:t.append?[n,st,n+"Exit"]:[n,n+"Exit"]}function Qr(t){let e;return t.type==="document"?e=["Document",st,"DocumentExit"]:t.type==="root"?e=["Root",st,"RootExit"]:e=Yr(t),{eventIndex:0,events:e,iterator:0,node:t,visitorIndex:0,visitors:[]}}function zn(t){return t[Be]=!1,t.nodes&&t.nodes.forEach(e=>zn(e)),t}var jn={},Ue=class t{get content(){return this.stringify().content}get css(){return this.stringify().css}get map(){return this.stringify().map}get messages(){return this.sync().messages}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){return this.sync().root}get[Symbol.toStringTag](){return"LazyResult"}constructor(e,n,i){this.stringified=!1,this.processed=!1;let r;if(typeof n=="object"&&n!==null&&(n.type==="root"||n.type==="document"))r=zn(n);else if(n instanceof t||n instanceof Jr)r=zn(n.root),n.map&&(typeof i.map>"u"&&(i.map={}),i.map.inline||(i.map.inline=!1),i.map.prev=n.map);else{let o=Ca;i.syntax&&(o=i.syntax.parse),i.parser&&(o=i.parser),o.parse&&(o=o.parse);try{r=o(n,i)}catch(s){this.processed=!0,this.error=s}r&&!r[ka]&&Fa.rebuild(r)}this.result=new Jr(e,r,i),this.helpers={...jn,postcss:jn,result:this.result},this.plugins=this.processor.plugins.map(o=>typeof o=="object"&&o.prepare?{...o,...o.prepare(this.result)}:o)}async(){return this.error?Promise.reject(this.error):this.processed?Promise.resolve(this.result):(this.processing||(this.processing=this.runAsync()),this.processing)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}getAsyncError(){throw new Error("Use process(css).then(cb) to work with async plugins")}handleError(e,n){let i=this.result.lastPlugin;try{n&&n.addToError(e),this.error=e,e.name==="CssSyntaxError"&&!e.plugin?(e.plugin=i.postcssPlugin,e.setMessage()):i.postcssVersion}catch(r){console&&console.error&&console.error(r)}return e}prepareVisitors(){this.listeners={};let e=(n,i,r)=>{this.listeners[i]||(this.listeners[i]=[]),this.listeners[i].push([n,r])};for(let n of this.plugins)if(typeof n=="object")for(let i in n){if(!_a[i]&&/^[A-Z]/.test(i))throw new Error(`Unknown event ${i} in ${n.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`);if(!Ra[i])if(typeof n[i]=="object")for(let r in n[i])r==="*"?e(n,i,n[i][r]):e(n,i+"-"+r.toLowerCase(),n[i][r]);else typeof n[i]=="function"&&e(n,i,n[i])}this.hasListener=Object.keys(this.listeners).length>0}async runAsync(){this.plugin=0;for(let e=0;e<this.plugins.length;e++){let n=this.plugins[e],i=this.runOnRoot(n);if(Dt(i))try{await i}catch(r){throw this.handleError(r)}}if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[Be];){e[Be]=!0;let n=[Qr(e)];for(;n.length>0;){let i=this.visitTick(n);if(Dt(i))try{await i}catch(r){let o=n[n.length-1].node;throw this.handleError(r,o)}}}if(this.listeners.OnceExit)for(let[n,i]of this.listeners.OnceExit){this.result.lastPlugin=n;try{if(e.type==="document"){let r=e.nodes.map(o=>i(o,this.helpers));await Promise.all(r)}else await i(e,this.helpers)}catch(r){throw this.handleError(r)}}}return this.processed=!0,this.stringify()}runOnRoot(e){this.result.lastPlugin=e;try{if(typeof e=="object"&&e.Once){if(this.result.root.type==="document"){let n=this.result.root.nodes.map(i=>e.Once(i,this.helpers));return Dt(n[0])?Promise.all(n):n}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(n){throw this.handleError(n)}}stringify(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();let e=this.result.opts,n=Ta;e.syntax&&(n=e.syntax.stringify),e.stringifier&&(n=e.stringifier),n.stringify&&(n=n.stringify);let i=this.result.root.source;if(e.map===void 0&&!(i&&i.input&&i.input.map)){let s="";return n(this.result.root,l=>{s+=l}),this.result.css=s,this.result}let o=new Na(n,this.result.root,this.result.opts).generate();return this.result.css=o[0],this.result.map=o[1],this.result}sync(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(let e of this.plugins){let n=this.runOnRoot(e);if(Dt(n))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[Be];)e[Be]=!0,this.walkSync(e);if(this.listeners.OnceExit)if(e.type==="document")for(let n of e.nodes)this.visitSync(this.listeners.OnceExit,n);else this.visitSync(this.listeners.OnceExit,e)}return this.result}then(e,n){return this.async().then(e,n)}toString(){return this.css}visitSync(e,n){for(let[i,r]of e){this.result.lastPlugin=i;let o;try{o=r(n,this.helpers)}catch(s){throw this.handleError(s,n.proxyOf)}if(n.type!=="root"&&n.type!=="document"&&!n.parent)return!0;if(Dt(o))throw this.getAsyncError()}}visitTick(e){let n=e[e.length-1],{node:i,visitors:r}=n;if(i.type!=="root"&&i.type!=="document"&&!i.parent){e.pop();return}if(r.length>0&&n.visitorIndex<r.length){let[s,l]=r[n.visitorIndex];n.visitorIndex+=1,n.visitorIndex===r.length&&(n.visitors=[],n.visitorIndex=0),this.result.lastPlugin=s;try{return l(i.toProxy(),this.helpers)}catch(a){throw this.handleError(a,i)}}if(n.iterator!==0){let s=n.iterator,l;for(;l=i.nodes[i.indexes[s]];)if(i.indexes[s]+=1,!l[Be]){l[Be]=!0,e.push(Qr(l));return}n.iterator=0,delete i.indexes[s]}let o=n.events;for(;n.eventIndex<o.length;){let s=o[n.eventIndex];if(n.eventIndex+=1,s===st){i.nodes&&i.nodes.length&&(i[Be]=!0,n.iterator=i.getIterator());return}else if(this.listeners[s]){n.visitors=this.listeners[s];return}}e.pop()}walkSync(e){e[Be]=!0;let n=Yr(e);for(let i of n)if(i===st)e.nodes&&e.each(r=>{r[Be]||this.walkSync(r)});else{let r=this.listeners[i];if(r&&this.visitSync(r,e.toProxy()))return}}warnings(){return this.sync().warnings()}};Ue.registerPostcss=t=>{jn=t};Zr.exports=Ue;Ue.default=Ue;Ma.registerLazyResult(Ue);wa.registerLazyResult(Ue)});var eo=Z((Qc,Xr)=>{"use strict";var La=Hn(),Da=en(),Ba=tn(),Ia=bt(),Jc=Un(),Bt=class{get content(){return this.result.css}get css(){return this.result.css}get map(){return this.result.map}get messages(){return[]}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){if(this._root)return this._root;let e,n=Da;try{e=n(this._css,this._opts)}catch(i){this.error=i}if(this.error)throw this.error;return this._root=e,e}get[Symbol.toStringTag](){return"NoWorkResult"}constructor(e,n,i){n=n.toString(),this.stringified=!1,this._processor=e,this._css=n,this._opts=i,this._map=void 0;let r=Ia;this.result=new Ba(this._processor,void 0,this._opts),this.result.css=n;let o=this;Object.defineProperty(this.result,"root",{get(){return o.root}});let s=new La(r,void 0,this._opts,n);if(s.isMap()){let[l,a]=s.generate();l&&(this.result.css=l),a&&(this.result.map=a)}else s.clearAnnotation(),this.result.css=s.css}async(){return this.error?Promise.reject(this.error):Promise.resolve(this.result)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}sync(){if(this.error)throw this.error;return this.result}then(e,n){return this.async().then(e,n)}toString(){return this._css}warnings(){return[]}};Xr.exports=Bt;Bt.default=Bt});var no=Z((Yc,to)=>{"use strict";var Oa=zt(),Pa=$n(),Wa=eo(),Ha=rt(),Xe=class{constructor(e=[]){this.version="8.5.14",this.plugins=this.normalize(e)}normalize(e){let n=[];for(let i of e)if(i.postcss===!0?i=i():i.postcss&&(i=i.postcss),typeof i=="object"&&Array.isArray(i.plugins))n=n.concat(i.plugins);else if(typeof i=="object"&&i.postcssPlugin)n.push(i);else if(typeof i=="function")n.push(i);else if(!(typeof i=="object"&&(i.parse||i.stringify)))throw new Error(i+" is not a PostCSS plugin");return n}process(e,n={}){return!this.plugins.length&&!n.parser&&!n.stringifier&&!n.syntax?new Wa(this,e,n):new Pa(this,e,n)}use(e){return this.plugins=this.plugins.concat(this.normalize([e])),this}};to.exports=Xe;Xe.default=Xe;Ha.registerProcessor(Xe);Oa.registerProcessor(Xe)});var co=Z((Zc,uo)=>{"use strict";var io=Ut(),ro=Nt(),qa=qe(),Va=qt(),oo=Mt(),so=zt(),Ua=vr(),za=kt(),ja=$n(),$a=Pn(),Ga=Ft(),Ka=en(),Gn=no(),Ja=tn(),ao=rt(),lo=Kt(),Qa=bt(),Ya=Vn();function re(...t){return t.length===1&&Array.isArray(t[0])&&(t=t[0]),new Gn(t)}re.plugin=function(e,n){let i=!1;function r(...s){console&&console.warn&&!i&&(i=!0,console.warn(e+`: postcss.plugin was deprecated. Migration guide:\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration`),process.env.LANG&&process.env.LANG.startsWith("cn")&&console.warn(e+`: \\u91CC\\u9762 postcss.plugin \\u88AB\\u5F03\\u7528. \\u8FC1\\u79FB\\u6307\\u5357:\nhttps://www.w3ctech.com/topic/2226`));let l=n(...s);return l.postcssPlugin=e,l.postcssVersion=new Gn().version,l}let o;return Object.defineProperty(r,"postcss",{get(){return o||(o=r()),o}}),r.process=function(s,l,a){return re([r(a)]).process(s,l)},r};re.stringify=Qa;re.parse=Ka;re.fromJSON=Ua;re.list=$a;re.comment=t=>new ro(t);re.atRule=t=>new io(t);re.decl=t=>new oo(t);re.rule=t=>new lo(t);re.root=t=>new ao(t);re.document=t=>new so(t);re.CssSyntaxError=Va;re.Declaration=oo;re.Container=qa;re.Processor=Gn;re.Document=so;re.Comment=ro;re.Warning=Ya;re.AtRule=io;re.Result=Ja;re.Input=za;re.Rule=lo;re.Root=ao;re.Node=Ga;ja.registerPostcss(re);uo.exports=re;re.default=re});function _(t,e){if(typeof window>"u")return;let n=window,i=n.__hf?.onSwallowed;if(i)try{i({label:t,error:e})}catch(r){}(n.__hfDebug||n.__HYPERFRAMES_DEBUG)&&console.debug(`[hyperframes] ${t} swallowed:`,e)}function Ae(t){try{window.parent.postMessage(t,"*")}catch(e){_("bridge.postMessage",e)}}function hi(t){let e=n=>{let i=n.data;if(!i||i.source!=="hf-parent"||i.type!=="control")return;let r=i.action;if(r==="play"){t.onPlay();return}if(r==="pause"){t.onPause();return}if(r==="seek"){t.onSeek(Number(i.frame??0),i.seekMode??"commit");return}if(r==="tick"){t.onTick();return}if(r==="set-muted"){t.onSetMuted(!!i.muted);return}if(r==="set-volume"){t.onSetVolume(Math.max(0,Math.min(1,Number(i.volume??1))));return}if(r==="set-media-output-muted"){t.onSetMediaOutputMuted(!!i.muted);return}if(r==="set-playback-rate"){t.onSetPlaybackRate(Number(i.playbackRate??1));return}if(r==="enable-pick-mode"){t.onEnablePickMode();return}if(r==="disable-pick-mode"){t.onDisablePickMode();return}if(r==="flash-elements"){let o=i.selectors,s=i.duration||800;o&&cs(o,s)}};return window.addEventListener("message",e),e}function cs(t,e){if(!document.getElementById("__hf-flash-styles")){let n=document.createElement("style");n.id="__hf-flash-styles",n.textContent=`\n .__hf-flash {\n outline: 2px solid rgba(59, 130, 246, 0.6) !important;\n outline-offset: 2px !important;\n animation: __hf-flash-pulse ${e}ms ease-out forwards !important;\n }\n @keyframes __hf-flash-pulse {\n 0% { outline-color: rgba(59, 130, 246, 0.8); }\n 100% { outline-color: transparent; }\n }\n `,document.head.appendChild(n)}for(let n of t)try{document.querySelectorAll(n).forEach(r=>{r.classList.add("__hf-flash"),setTimeout(()=>r.classList.remove("__hf-flash"),e)})}catch(i){_("bridge.flashElements.querySelector",i)}}var gn=null;function xi(t){gn=t}function dt(t,e){if(gn)try{gn({source:"hf-preview",type:"analytics",event:t,properties:e??{}})}catch(n){_("runtime.analytics.site1",n)}}function gi(t){let e=[],n=l=>{if(typeof l.getAnimations!="function")return[];try{return l.getAnimations()}catch{return[]}},i=(l,a)=>{for(let c of l){try{c.currentTime=a}catch(u){_("runtime.adapters.css.site1",u)}try{c.pause()}catch(u){_("runtime.adapters.css.site2",u)}}},r=l=>{for(let a of l)try{a.play()}catch(c){_("runtime.adapters.css.site3",c)}},o=l=>{for(let a of l)try{a.pause()}catch(c){_("runtime.adapters.css.site4",c)}},s=l=>{l.baseDelay?l.el.style.animationDelay=l.baseDelay:l.el.style.removeProperty("animation-delay"),l.basePlayState?l.el.style.animationPlayState=l.basePlayState:l.el.style.removeProperty("animation-play-state")};return{name:"css",discover:()=>{e=[];let l=document.querySelectorAll("*");for(let a of l){if(!(a instanceof HTMLElement))continue;let c=window.getComputedStyle(a);!c.animationName||c.animationName==="none"||e.push({el:a,baseDelay:a.style.animationDelay||"",basePlayState:a.style.animationPlayState||""})}},seek:l=>{let a=Number(l.time)||0;for(let c of e){if(!c.el.isConnected)continue;let u=t?.resolveStartSeconds?t.resolveStartSeconds(c.el):Number.parseFloat(c.el.getAttribute("data-start")??"0")||0,m=Math.max(0,a-u)*1e3,f=n(c.el);if(f.length>0){i(f,m);continue}c.el.style.animationPlayState="paused",c.el.style.animationDelay=`-${(m/1e3).toFixed(3)}s`}},pause:()=>{for(let l of e){if(!l.el.isConnected)continue;let a=n(l.el);a.length>0&&o(a),s(l)}},play:()=>{for(let l of e)l.el.isConnected&&(s(l),r(n(l.el)))},revert:()=>{e=[]}}}function yi(t){return{name:"gsap",discover:()=>{},seek:e=>{let n=t.getTimeline();if(!n)return;n.pause();let i=Math.max(0,Number(e.time)||0);typeof n.totalTime=="function"?n.totalTime(i,!1):n.seek(i,!1)},pause:()=>{let e=t.getTimeline();e&&e.pause()}}}function Si(){return{name:"animejs",discover:()=>{try{let t=window.anime;if(!t||typeof t.running>"u")return;let e=t.running;if(!Array.isArray(e)||e.length===0)return;let n=window.__hfAnime??[],i=new Set(n);for(let r of e)i.has(r)||n.push(r);window.__hfAnime=n}catch(t){_("runtime.adapters.animejs.site1",t)}},seek:t=>{let e=Math.max(0,(Number(t.time)||0)*1e3),n=window.__hfAnime;if(!(!n||n.length===0))for(let i of n)try{typeof i.seek=="function"&&i.seek(e)}catch(r){_("runtime.adapters.animejs.site2",r)}},pause:()=>{let t=window.__hfAnime;if(!(!t||t.length===0))for(let e of t)try{typeof e.pause=="function"&&e.pause()}catch(n){_("runtime.adapters.animejs.site3",n)}},play:()=>{let t=window.__hfAnime;if(!(!t||t.length===0))for(let e of t)try{typeof e.play=="function"&&e.play()}catch(n){_("runtime.adapters.animejs.site4",n)}},revert:()=>{}}}function Ei(){return{name:"lottie",discover:()=>{try{let t=window.lottie;if(t&&typeof t.getRegisteredAnimations=="function"){let e=t.getRegisteredAnimations();if(Array.isArray(e)&&e.length>0){let n=window.__hfLottie??[],i=new Set(n);for(let r of e)i.has(r)||n.push(r);window.__hfLottie=n}}}catch(t){_("runtime.adapters.lottie.site1",t)}},seek:t=>{let e=Math.max(0,Number(t.time)||0),n=window.__hfLottie;if(!(!n||n.length===0))for(let i of n)try{if(bi(i))i.goToAndStop(e*1e3,!1);else if(Ai(i)){if(typeof i.setCurrentRawFrameValue=="function"){let r=i.totalFrames??0,o=i.frameRate??30,s=e*o;r>0&&i.setCurrentRawFrameValue(Math.min(s,r-1))}else if(typeof i.seek=="function"){let r=i.duration??1,o=Math.min(100,e/r*100);i.seek(o)}}}catch(r){_("runtime.adapters.lottie.site2",r)}},pause:()=>{let t=window.__hfLottie;if(!(!t||t.length===0))for(let e of t)try{(bi(e)||Ai(e))&&e.pause()}catch(n){_("runtime.adapters.lottie.site3",n)}},revert:()=>{}}}function bi(t){return typeof t=="object"&&t!==null&&typeof t.goToAndStop=="function"}function Ai(t){return typeof t=="object"&&t!==null&&typeof t.pause=="function"&&("totalFrames"in t||"duration"in t)}var Fi=-1;function Ht(t){if(t!==Fi){Fi=t;try{window.dispatchEvent(new CustomEvent("hf-seek",{detail:{time:t}}))}catch(e){_("runtime.adapters.seek-dispatch.site1",e)}}}function wi(){let t=null,e=0;return{name:"three",discover:()=>{},seek:n=>{t=Math.max(0,Number(n.time)||0),e=t,window.__hfThreeTime=t,Ht(t)},pause:()=>{t==null&&(t=Math.max(0,e))},play:()=>{t=null},revert:()=>{t=null,e=0}}}function Ni(){let t=null,e=0;return{name:"typegpu",discover:()=>{},seek:n=>{t=Math.max(0,Number(n.time)||0),e=t,window.__hfTypegpuTime=t,Ht(t)},pause:()=>{t==null&&(t=Math.max(0,e))},play:()=>{t=null},revert:()=>{t=null,e=0}}}function Ci(){let t=globalThis.GPUQueue;if(!t?.prototype?.copyExternalImageToTexture)return;let e=t.prototype.copyExternalImageToTexture;t.prototype.copyExternalImageToTexture=function(n,i,r){if(n?.source instanceof HTMLVideoElement){let o=n.source.nextElementSibling;if(o instanceof HTMLImageElement&&o.classList.contains("__render_frame__")&&o.complete&&o.naturalWidth>0)return e.call(this,{...n,source:o},i,r)}return e.call(this,n,i,r)}}function Mi(){let t=!1,e=0,n=new WeakMap,i=()=>{if(!document.getAnimations)return[];try{return document.getAnimations()}catch{return[]}},r=l=>{let a=Number(l.currentTime);return Number.isFinite(a)&&a>0?a:0},o=(l,a)=>a<=0?l:l>=a?Math.max(0,l-a):l,s=(l,a)=>{let c=n.get(l);if(c)return c;let u={compositionTimeMs:a,animationTimeMs:t?o(r(l),a):r(l)};return n.set(l,u),u};return{name:"waapi",discover:()=>{t=!0;for(let l of i())s(l,e)},seek:l=>{let a=Math.max(0,(Number(l.time)||0)*1e3);e=a;for(let c of i()){let u=t?s(c,a):s(c,0),m=u.animationTimeMs+Math.max(0,a-u.compositionTimeMs);try{c.currentTime=m}catch(f){_("runtime.adapters.waapi.site1",f)}try{c.pause()}catch(f){_("runtime.adapters.waapi.site2",f)}}},pause:()=>{if(document.getAnimations)for(let l of document.getAnimations())try{l.pause()}catch(a){_("runtime.adapters.waapi.site3",a)}}}}function Ti(t,e){if(t.length===0)return 1;let n=0;for(;n<t.length-2&&e>=t[n+1].time;)n+=1;let i=t[n],r=t[n+1]??i,o=r.time-i.time,s=o<=0?0:Math.min(1,Math.max(0,(e-i.time)/o));return i.volume+(r.volume-i.volume)*s}function ds(t,e,n,i){let r=Number.parseFloat(t.dataset.start??"0")||0,o=Number.parseFloat(t.dataset.end??""),s=Number.parseFloat(t.dataset.duration??""),l=Number.isFinite(o)&&o>r?o:Number.isFinite(s)&&s>0?r+s:n,a=Number.parseFloat(t.dataset.volume??""),c=Number.isFinite(a)?Math.max(0,Math.min(1,a)):1;t.volume=c;let u=1/Math.min(60,Math.max(1,i)),m=Math.max(0,r),f=Math.min(n,l),x=[];for(let E=m;E<=f+1e-6;E+=u){let S=Math.min(f,E);e(S);let B=Number(t.volume);if(!Number.isFinite(B))continue;let D=Math.max(0,Math.min(1,B)),v=x.at(-1);if((!v||Math.abs(v.volume-D)>1e-4||S===f)&&x.push({time:Number(S.toFixed(6)),volume:Number(D.toFixed(6))}),S===f)break}return x.some(E=>Math.abs(E.volume-c)>1e-4)?x:null}function ki(t,e,n,i){if(!e||!(t instanceof HTMLAudioElement)&&!(t instanceof HTMLVideoElement)||n<=0)return;let o=ds(t,s=>{try{typeof e.totalTime=="function"?e.totalTime(s,!0):typeof e.seek=="function"&&e.seek(s,!0)}catch{}},n,60);o&&i.set(t,o)}function vi(t){let e=Array.from(document.querySelectorAll("video, audio")),n=t?.shouldIncludeElement?e.filter(s=>t.shouldIncludeElement?.(s)):e.filter(s=>s.hasAttribute("data-start")),i=[],r=[],o=0;for(let s of n){let l=t?.resolveStartSeconds?t.resolveStartSeconds(s):Number.parseFloat(s.dataset.start??"0");if(!Number.isFinite(l))continue;let a=Number.parseFloat(s.dataset.playbackStart??s.dataset.mediaStart??"0")||0,c=s.defaultPlaybackRate,u=Number.isFinite(c)&&c>0?Math.max(.1,Math.min(5,c)):1,m=s.loop,f=Number.isFinite(s.duration)&&s.duration>0?s.duration:null,x=t?.resolveDurationSeconds?.(s)??Number.parseFloat(s.dataset.duration??"");(!Number.isFinite(x)||x<=0)&&f!=null&&(x=Math.max(0,(f-a)/u));let F=Number.isFinite(x)&&x>0?l+x:Number.POSITIVE_INFINITY,E=Number.parseFloat(s.dataset.volume??""),S={el:s,start:l,mediaStart:a,duration:Number.isFinite(x)&&x>0?x:Number.POSITIVE_INFINITY,end:F,volume:Number.isFinite(E)?E:null,playbackRate:u,loop:m,sourceDuration:f};i.push(S),s.tagName==="VIDEO"&&r.push(S),Number.isFinite(F)&&(o=Math.max(o,F))}return{timedMediaEls:n,mediaClips:i,videoClips:r,maxMediaEnd:o}}var yn=new WeakMap,ft=new WeakMap,Sn=new WeakSet,et=new WeakSet;function fs(t){if(et.has(t))return;et.add(t);let e=()=>et.delete(t);t.addEventListener("playing",e,{once:!0}),t.addEventListener("pause",e,{once:!0}),t.addEventListener("error",e,{once:!0})}var bn=new WeakMap;function mt(t){return Number.isFinite(t)?Math.max(0,Math.min(1,t)):1}function _i(t){let e=!!(t.outputMuted||t.userMuted);for(let n of t.clips){let{el:i}=n;if(!i.isConnected)continue;let r=(t.timeSeconds-n.start)*n.playbackRate+n.mediaStart;if(t.timeSeconds>=n.start&&t.timeSeconds<n.end&&r>=0){if(n.loop&&n.sourceDuration!=null&&n.sourceDuration>0){let w=n.sourceDuration-n.mediaStart;w>0&&r>=n.sourceDuration&&(r=n.mediaStart+(r-n.mediaStart)%w)}let s=mt(t.userVolume??1),l=mt(n.volume??1),a=bn.get(i),c=mt(i.volume),u;n.volumeKeyframes&&n.volumeKeyframes.length>0?u=mt(Ti(n.volumeKeyframes,r)):a===void 0||Math.abs(c-a)>1e-4?u=c:u=l;let m=mt(u*s);i.volume=m,bn.set(i,m),t.onElementVolume?.(i,m),e&&(i.muted=!0),i.preload!=="auto"&&(i.preload="auto");try{i.playbackRate=n.playbackRate*t.playbackRate}catch(w){_("runtime.media.site1",w)}let f=.04,x=2,F=i.currentTime||0,E=Math.abs(F-r),S=r-F,B=yn.get(i);yn.set(i,S);let D=B===void 0,v=!D&&Math.abs(S-B)>.5,X=E>3,q=E>.5&&(D||v||X),C=i.tagName==="VIDEO"&&!i.paused,g=B!==void 0&&Math.abs(S-B)<.004,A=!1;if(!C&&!q&&!D&&g&&E>f){let w=(ft.get(i)??0)+1;ft.set(i,w),w>=x&&(A=!0,ft.set(i,0))}else E<=f&&ft.set(i,0);let N=!C&&t.forceSync&&E>.02;if(q||A||N){try{i.currentTime=r}catch(w){_("runtime.media.site2",w)}if(Math.abs(i.currentTime-r)>.5&&!Sn.has(i)){Sn.add(i),i.load();try{i.currentTime=r}catch(w){_("runtime.media.site3",w)}}et.delete(i)}t.playing&&i.paused&&!et.has(i)?(fs(i),i.play().catch(w=>{et.delete(i),(w&&typeof w=="object"&&"name"in w?String(w.name??""):"")==="NotAllowedError"&&t.onAutoplayBlocked?.()})):!t.playing&&!i.paused&&i.pause();continue}yn.delete(i),ft.delete(i),Sn.delete(i),bn.delete(i),i.paused||i.pause()}}var ms=["[data-hyperframes-ignore]","[data-hyperframes-picker-ignore]","[data-hf-ignore]","[data-no-inspect]","[data-no-pick]","[data-hyper-shader-loading]"].join(","),ps=["[data-hyperframes-picker-block]","[data-hyper-shader-loading]"].join(",");function Ri(t){let e=!1,n=null,i=null,r=null,o=null;function s(g,A){try{window.dispatchEvent(new CustomEvent(g,{detail:A}))}catch(N){_("runtime.picker.site1",N)}}function l(g){r=g,s("hyperframe:picker:hovered",{elementInfo:r,isPickMode:e,timestamp:Date.now()})}function a(g){o=g,s("hyperframe:picker:selected",{elementInfo:o,isPickMode:e,timestamp:Date.now()})}function c(g){let A=g.ownerDocument.defaultView;if(!A)return!1;let N=g;for(;N&&N!==document.body&&N!==document.documentElement;){let w=A.getComputedStyle(N);if(w.display==="none"||w.visibility==="hidden"||w.pointerEvents==="none")return!0;let T=Number.parseFloat(w.opacity);if(Number.isFinite(T)&&T<=.01)return!0;N=N.parentElement}return!1}function u(g){if(!g||g===document.body||g===document.documentElement)return!1;let A=g.tagName.toLowerCase();return!(A==="script"||A==="style"||A==="link"||A==="meta"||g.classList.contains("__hf-pick-highlight")||g.closest(ms)||c(g))}function m(g){return!!g?.closest(ps)}function f(g){let A=g;if(A.id)return`#${A.id}`;let N=g.getAttribute("data-composition-id");if(N)return`[data-composition-id="${N}"]`;let w=g.getAttribute("data-composition-src");if(w)return`[data-composition-src="${w}"]`;let T=g.getAttribute("data-track-index");if(T)return`[data-track-index="${T}"]`;let L=g.tagName.toLowerCase(),P=g.parentElement;if(!P)return L;let J=P.querySelectorAll(`:scope > ${L}`);if(J.length===1)return L;for(let R=0;R<J.length;R+=1)if(J[R]===g)return`${L}:nth-of-type(${R+1})`;return L}function x(g){let A=g.tagName.toLowerCase(),N=(g.textContent??"").trim().replace(/\\s+/g," "),w=(T,L)=>T.length>L?`${T.slice(0,L-1)}\\u2026`:T;return A==="h1"||A==="h2"||A==="h3"?"Heading":A==="p"||A==="span"||A==="div"?N.length>0?w(N,56):"Text":A==="img"?"Image":A==="video"?"Video":A==="audio"?"Audio":A==="svg"?"Shape":g.getAttribute("data-composition-src")?"Composition":A==="section"?"Section":`${A.charAt(0).toUpperCase()}${A.slice(1)}`}function F(g,A,N){let w=typeof N=="number"&&N>0?N:8,T=[];if(document.elementsFromPoint)T=document.elementsFromPoint(g,A);else if(document.elementFromPoint){let J=document.elementFromPoint(g,A);T=J?[J]:[]}if(m(T[0]??null))return[];let L={},P=[];for(let J=0;J<T.length;J+=1){let R=T[J];if(!u(R))continue;let le=`${R.tagName}::${R.id||""}::${J}`;if(!L[le]&&(L[le]=!0,P.push(R),P.length>=w))break}return P}function E(g){let A=g.getBoundingClientRect(),N={};for(let T=0;T<g.attributes.length;T+=1){let L=g.attributes[T];L.name.startsWith("data-")&&(N[L.name]=L.value)}return{id:g.id||null,tagName:g.tagName.toLowerCase(),selector:f(g),label:x(g),boundingBox:{x:A.left,y:A.top,width:A.width,height:A.height},textContent:g.textContent?g.textContent.trim().slice(0,200):null,src:g.getAttribute("src")||g.getAttribute("data-composition-src")||null,dataAttributes:N}}function S(g,A,N){return F(g,A,N).map(E)}function B(g){if(!e)return;let N=F(g.clientX,g.clientY,1)[0]??(g.target instanceof Element?g.target:null);if(!u(N)||n===N)return;n&&n.classList.remove("__hf-pick-highlight"),n=N,N.classList.add("__hf-pick-highlight");let w=E(N);l(w),t.postMessage({source:"hf-preview",type:"element-hovered",elementInfo:w})}function D(g){if(!e)return;g.preventDefault(),g.stopPropagation(),g.stopImmediatePropagation();let A=S(g.clientX,g.clientY,8);A.length!==0&&(l(A[0]??null),t.postMessage({source:"hf-preview",type:"element-pick-candidates",candidates:A,selectedIndex:0,point:{x:g.clientX,y:g.clientY}}))}function v(g){g.key==="Escape"&&(q(),t.postMessage({source:"hf-preview",type:"pick-mode-cancelled"}))}function X(){e||(e=!0,i=document.createElement("style"),i.textContent=[".__hf-pick-highlight { outline: 2px solid #4f8cf7 !important; outline-offset: 2px; cursor: crosshair !important; }",".__hf-pick-active * { cursor: crosshair !important; }"].join(`\n`),document.head.appendChild(i),document.body.classList.add("__hf-pick-active"),document.addEventListener("mousemove",B,!0),document.addEventListener("click",D,!0),document.addEventListener("keydown",v,!0),s("hyperframe:picker:mode",{isPickMode:!0,timestamp:Date.now()}))}function q(){e&&(e=!1,n&&(n.classList.remove("__hf-pick-highlight"),n=null),i&&(i.remove(),i=null),document.body.classList.remove("__hf-pick-active"),document.removeEventListener("mousemove",B,!0),document.removeEventListener("click",D,!0),document.removeEventListener("keydown",v,!0),s("hyperframe:picker:mode",{isPickMode:!1,timestamp:Date.now()}))}function C(){window.__HF_PICKER_API={enable:X,disable:q,isActive:()=>e,getHovered:()=>r,getSelected:()=>o,getCandidatesAtPoint:(g,A,N)=>Number.isFinite(g)&&Number.isFinite(A)?S(g,A,N):[],pickAtPoint:(g,A,N)=>{if(!Number.isFinite(g)||!Number.isFinite(A))return null;let w=S(g,A,8);if(!w.length)return null;let T=Math.max(0,Math.min(w.length-1,Number(N??0))),L=w[T]??null;return L?(a(L),t.postMessage({source:"hf-preview",type:"element-picked",elementInfo:L}),q(),L):null},pickManyAtPoint:(g,A,N)=>{if(!Number.isFinite(g)||!Number.isFinite(A))return[];let w=S(g,A,8);if(!w.length)return[];let T=[],L=Array.isArray(N)?N:[0];for(let P of L){let J=Math.max(0,Math.min(w.length-1,Math.floor(Number(P)))),R=w[J];if(!R)continue;T.some(Se=>Se.selector===R.selector&&Se.tagName===R.tagName)||T.push(R)}return T.length?(a(T[0]??null),t.postMessage({source:"hf-preview",type:"element-picked-many",elementInfos:T}),q(),T):[]}},s("hyperframe:picker:api-ready",{hasApi:!0,timestamp:Date.now()})}return{enablePickMode:X,disablePickMode:q,installPickerApi:C}}function tt(t,e){let n=Number.isFinite(e)&&e>0?e:30,i=Number.isFinite(t)&&t>0?t:0;return Math.floor(i*n+1e-9)/n}function pt(t,e,n){let i=t?.[e];return typeof i=="function"?Number(i.call(t))||n:typeof i=="number"&&Number.isFinite(i)?i:(i!=null&&_("runtime.player.nonConformantNum",{prop:e,actual:typeof i}),n)}function ve(t,e){let n=t?.[e];if(typeof n=="function"){n.call(t);return}n!==void 0&&_("runtime.player.nonConformantVoid",{method:e,actual:typeof n})}function ht(t,e,n){if(t){for(let i of Object.values(t))if(!(!i||i===e))try{n(i)}catch(r){_("runtime.player.site1",r)}}}function Li(t,e,n){let i=tt(e,n);return ve(t,"pause"),typeof t.totalTime=="function"?t.totalTime(i,!1):typeof t.seek=="function"&&t.seek(i,!1),i}function hs(t,e,n,i){let r=[];ht(t,e,o=>{ve(o,"play"),r.push(o)});try{return Li(e,n,i)}finally{for(let o of r)try{ve(o,"pause")}catch(s){_("runtime.player.site2",s)}}}function xs(t,e){ht(t,e,n=>{ve(n,"play")})}function Di(t){return{_timeline:null,play:()=>{let e=t.getTimeline();if(!e||t.getIsPlaying())return;let n=Math.max(0,Number(t.getSafeDuration?.()??pt(e,"duration",0))||0);n>0&&Math.max(0,pt(e,"time",0))>=n&&(ve(e,"pause"),typeof e.seek=="function"&&e.seek(0,!1),t.onDeterministicSeek(0),t.setIsPlaying(!1),t.onSyncMedia(0,!1),t.onRenderFrameSeek(0)),typeof e.timeScale=="function"&&e.timeScale(t.getPlaybackRate()),ve(e,"play"),ht(t.getTimelineRegistry?.(),e,i=>{typeof i.timeScale=="function"&&i.timeScale(t.getPlaybackRate()),ve(i,"play")}),t.onDeterministicPlay(),t.setIsPlaying(!0),t.onShowNativeVideos(),t.onStatePost(!0)},pause:()=>{let e=t.getTimeline();if(!e)return;ve(e,"pause"),ht(t.getTimelineRegistry?.(),e,i=>{ve(i,"pause")});let n=Math.max(0,pt(e,"time",0));t.onDeterministicSeek(n),t.onDeterministicPause(),t.setIsPlaying(!1),t.onSyncMedia(n,!1),t.onRenderFrameSeek(n),t.onStatePost(!0)},seek:(e,n)=>{let i=t.getTimeline();if(!i)return;let r=Math.max(0,Number(e)||0),o=t.getIsPlaying(),s=hs(t.getTimelineRegistry?.(),i,r,t.getCanonicalFps());t.onDeterministicSeek(s),n?.keepPlaying&&o?(typeof i.timeScale=="function"&&i.timeScale(t.getPlaybackRate()),ve(i,"play"),ht(t.getTimelineRegistry?.(),i,l=>{typeof l.timeScale=="function"&&l.timeScale(t.getPlaybackRate()),ve(l,"play")}),t.onDeterministicPlay(),t.onShowNativeVideos(),t.onSyncMedia(s,!0)):(t.setIsPlaying(!1),t.onSyncMedia(s,!1)),t.onRenderFrameSeek(s),t.onStatePost(!0)},renderSeek:e=>{let n=t.getTimeline(),i=t.getCanonicalFps(),r=n?(xs(t.getTimelineRegistry?.(),n),Li(n,e,i)):tt(Math.max(0,Number(e)||0),i);t.onDeterministicSeek(r),t.setIsPlaying(!1),t.onSyncMedia(r,!1),t.onRenderFrameSeek(r),t.onStatePost(!0)},getTime:()=>pt(t.getTimeline(),"time",0),getDuration:()=>pt(t.getTimeline(),"duration",0),isPlaying:()=>t.getIsPlaying(),setPlaybackRate:e=>t.setPlaybackRate(e),getPlaybackRate:()=>t.getPlaybackRate()}}function Bi(){return{capturedTimeline:null,isPlaying:!1,rafId:null,currentTime:0,deterministicAdapters:[],parityModeEnabled:!0,canonicalFps:30,bridgeMuted:!1,bridgeVolume:1,mediaOutputMuted:!1,mediaAutoplayBlockedPosted:!1,mediaForceSyncNextTick:!1,playbackRate:1,bridgeLastPostedFrame:-1,bridgeLastPostedAt:0,bridgeLastPostedPlaying:!1,bridgeLastPostedMuted:!1,bridgeMaxPostIntervalMs:80,controlBridgeHandler:null,clampDurationLoggedRaw:null,beforeUnloadHandler:null,domReadyHandler:null,injectedCompStyles:[],injectedCompScripts:[],cachedTimedMediaEls:[],cachedMediaClips:[],cachedVideoClips:[],cachedMediaTimelineDurationSeconds:0,tornDown:!1,nativeVisualWatchdogTick:0,transportClock:null,transportRafId:null}}var gs="data-hf-authored-duration",ys="data-hf-authored-end";function Qe(t){if(t==null||t==="")return null;let e=Number(t);return Number.isFinite(e)?e:null}function Ss(t){return Qe(t.getAttribute("data-duration"))}function bs(t){return Qe(t.getAttribute("data-end"))}function As(t){return Qe(t.getAttribute(gs))}function Es(t){return Qe(t.getAttribute(ys))}function Fs(t){let e=(t??"").trim();if(!e)return null;let n=Qe(e);if(n!=null)return{kind:"absolute",value:n};let i=e.match(/^([A-Za-z0-9_.:-]+)(?:\\s*([+-])\\s*([0-9]*\\.?[0-9]+))?$/);if(!i)return null;let r=(i[1]??"").trim();if(!r)return null;let o=i[2]??"+",s=i[3]??"0",l=Number.parseFloat(s),a=Number.isFinite(l)?Math.max(0,l):0,c=o==="-"?-a:a;return{kind:"reference",refId:r,offset:c}}function Ye(t){let e=t.timelineRegistry??{},n=t.includeAuthoredTimingAttrs??!1,i=new WeakMap,r=new WeakMap,o=new Set,s=u=>{let m=document.getElementById(u);return m||(document.querySelector(`[data-composition-id="${CSS.escape(u)}"]`)??null)},l=u=>{let m=r.get(u);if(m!==void 0)return m;let f=null,x=Ss(u)??(n?As(u):null);if(x!=null&&x>0&&(f=x),f==null||f<=0){let F=bs(u)??(n?Es(u):null);if(F!=null){let E=c(u,0),S=F-E;Number.isFinite(S)&&S>0&&(f=S)}}if((f==null||f<=0)&&u instanceof HTMLMediaElement){let F=Qe(u.getAttribute("data-playback-start"))??Qe(u.getAttribute("data-media-start"))??0;Number.isFinite(u.duration)&&u.duration>F&&(f=u.duration-F)}if(f==null||f<=0){let F=u.getAttribute("data-composition-id");if(F){let E=e[F]??null;if(E&&typeof E.duration=="function")try{let S=Number(E.duration());Number.isFinite(S)&&S>0&&(f=S)}catch(S){_("runtime.startResolver.site1",S)}}}return f!=null&&Number.isFinite(f)&&f>0?(r.set(u,f),f):(r.set(u,null),null)},a=(u,m)=>{if(u.hasAttribute("data-composition-id")){let x=u.parentElement?.closest("[data-composition-id]");return x?c(x,m):0}let f=u.closest("[data-composition-id]");return f?c(f,m):0},c=(u,m)=>{let f=i.get(u);if(f!==void 0)return f??m;if(o.has(u))return m;o.add(u);try{let x=Fs(u.getAttribute("data-start"));if(!x){if(u.hasAttribute("data-composition-id")){let D=u.parentElement;if(D&&(D.hasAttribute("data-composition-src")||D.hasAttribute("data-composition-id"))){let v=c(D,m);return i.set(u,v),v}}return i.set(u,m),m}if(x.kind==="absolute"){let D=Math.max(0,x.value),v=Math.max(0,a(u,m)+D);return i.set(u,v),v}let F=s(x.refId);if(!F)return i.set(u,m),m;let E=c(F,0),S=l(F);if(S==null||S<=0){let D=Math.max(0,E+x.offset);return i.set(u,D),D}let B=Math.max(0,E+S+x.offset);return i.set(u,B),B}finally{o.delete(u)}};return{resolveStartForElement:(u,m=0)=>c(u,Math.max(0,m)),resolveDurationForElement:u=>l(u)}}var ws="data-hf-authored-duration",Ns="data-hf-authored-end";function Ee(t){if(t==null||t==="")return null;let e=Number(t);return Number.isFinite(e)?e:null}function An(t){return Ee(t.getAttribute("data-duration"))??Ee(t.getAttribute(ws))}function Ii(t){return Ee(t.getAttribute("data-end"))??Ee(t.getAttribute(Ns))}function En(...t){let e=t.filter(n=>Number.isFinite(n??null));return e.length===0?null:Math.max(...e)}var Oi={composition:0,video:1,image:2,element:3,audio:4};function Cs(t){if(t.length===0)return;let e=new Map;for(let s of t){let l=e.get(s.track)??new Set;l.add(s.kind),e.set(s.track,l)}if(!Array.from(e.values()).some(s=>s.size>1))return;let i=0,r=new Map,o=[...e.keys()].sort((s,l)=>s-l);for(let s of o){let l=e.get(s);if(l.size===1)r.set(`${s}:${[...l][0]}`,i++);else{let a=[...l].sort((c,u)=>(Oi[c]??99)-(Oi[u]??99));for(let c of a)r.set(`${s}:${c}`,i++)}}for(let s of t){let l=`${s.track}:${s.kind}`,a=r.get(l);a!=null&&(s.track=a)}}function gt(t){let e=String(t??"").trim();if(!e)return null;let n=e.toLowerCase();if(n.startsWith("data:")||n.startsWith("javascript:"))return null;try{return new URL(e,document.baseURI).toString()}catch{return e}}function Pi(t){let e=t.getAttribute("src")??t.getAttribute("data-src");if(e)return gt(e);let n=t.getAttribute("data-composition-src");if(n)return gt(n);let i=t.querySelector("img[src], video[src], audio[src], source[src]");return i?gt(i.getAttribute("src")):null}function Ms(t){let e=t.className;return typeof e!="string"?null:e.split(/\\s+/).map(n=>n.trim()).find(n=>n&&n!=="clip"&&!n.startsWith("__hf-"))??null}function Ts(t){if(!t)return null;try{return new URL(t,document.baseURI).pathname.split("/").filter(Boolean).at(-1)??null}catch{return t.split(/[\\\\/]/).filter(Boolean).at(-1)??null}}function ks(t){let e=t.textContent?.replace(/\\s+/g," ").trim();return e?e.length>32?`${e.slice(0,31)}...`:e:null}function xt(t){let e=t.replace(/\\.[^.]+$/i,"").replace(/[-_]+/g," ").replace(/\\s+/g," ").trim();return e?e.replace(/\\b\\w/g,n=>n.toUpperCase()):t}function vs(t,e,n){let i=t.getAttribute("data-timeline-label")??t.getAttribute("data-label")??t.getAttribute("aria-label")??null;if(i?.trim())return i.trim();let r=t.getAttribute("data-composition-id");if(r)return xt(r);let o=t.id;if(o)return xt(o);let s=Ms(t);if(s)return xt(s);let l=Ts(Pi(t));if(l)return xt(l);let a=ks(t);return a||`${xt(e)} ${n+1}`}function Wi(t){let n=window.__timelines??{},i=Ye({timelineRegistry:n,includeAuthoredTimingAttrs:!0}),r=H=>{if(!H)return null;let k=n[H]??null;if(!k||typeof k.duration!="function")return null;try{let O=Number(k.duration());return Number.isFinite(O)&&O>0?O:null}catch{return null}},o=H=>{let k=Ee(H.getAttribute("data-duration"));if(k!=null&&k>0)return k;let O=Ee(H.getAttribute("data-playback-start"))??Ee(H.getAttribute("data-media-start"))??0;return Number.isFinite(H.duration)&&H.duration>O?Math.max(0,H.duration-O):null},s=()=>{let H=Array.from(document.querySelectorAll("video[data-start], audio[data-start]"));if(H.length===0)return null;let k=0;for(let O of H){let ne=O.hasAttribute("data-hf-auto-start")?i.resolveStartForElement(O,0):Math.max(0,Number(O.getAttribute("data-start")??0)||0);if(!Number.isFinite(ne))continue;let ee=o(O);ee==null||ee<=0||(k=Math.max(k,Math.max(0,ne)+ee))}return k>0?k:null},l=H=>{let k=H.trim().toLowerCase();return!(!k||k==="main"||k.includes("caption")||k.includes("ambient"))},a=(H,k)=>{let O=[],ne=null,ee=null,z=null,V=H.parentElement;for(;V;){let j=V.getAttribute("data-composition-id");j&&(O.push(j),!z&&V!==k&&(z=j),ne==null&&(ne=i.resolveStartForElement(V,0)),ee==null&&(ee=Ee(V.getAttribute("data-duration"))??r(j)??null)),V=V.parentElement}return{parentCompositionId:z,compositionAncestors:O.reverse(),inheritedStart:ne,inheritedDuration:ee}},c=document.querySelector("[data-composition-id]"),u=Array.from(document.querySelectorAll("[data-composition-id]")),m=c?.getAttribute("data-composition-id")??null,f=c?i.resolveStartForElement(c,0):0,x=s(),F=x!=null?Math.max(0,x-Math.max(0,f)):null,E=r(m),S=An(c??document.body),B=En(...u.filter(H=>H!==c).map(H=>{let k=i.resolveStartForElement(H,0),O=i.resolveDurationForElement(H)??r(H.getAttribute("data-composition-id"))??null;return!Number.isFinite(k)||O==null||O<=0?null:Math.max(0,k)+O})),D=B!=null?Math.max(0,B-Math.max(0,f)):null,v=typeof E=="number"&&Number.isFinite(E)&&E>0?E:null,X=typeof S=="number"&&Number.isFinite(S)&&S>0?S:null,q=typeof F=="number"&&Number.isFinite(F)&&F>0?F:null,C=typeof D=="number"&&Number.isFinite(D)&&D>0?D:null,g=En(q,C),A=v!=null&&g!=null&&v>g+1,w=X??(A?g:En(v,q,C))??null,L=(w!=null?f+w:null)??(typeof x=="number"&&Number.isFinite(x)&&x>0?x:null),P=(H,k)=>!Number.isFinite(k)||k<=0?0:L==null||!Number.isFinite(L)?k:!Number.isFinite(H)||H>=L?0:Math.max(0,Math.min(k,L-H)),J=[],R=[],le=Array.from(document.querySelectorAll("[data-start], [data-track-index], [data-composition-id], video, audio, img")),Se=0;for(let H=0;H<le.length;H+=1){let k=le[H];if(k===c||["SCRIPT","STYLE","LINK","META","TEMPLATE","NOSCRIPT"].includes(k.tagName))continue;let O=a(k,c),ne=i.resolveStartForElement(k,O.inheritedStart??0),ee=k.getAttribute("data-composition-id"),z=An(k);if((z==null||z<=0)&&ee&&ee!==m&&(z=r(ee)),(z==null||z<=0)&&k instanceof HTMLMediaElement){let we=Ee(k.getAttribute("data-playback-start"))??Ee(k.getAttribute("data-media-start"))??0;Number.isFinite(k.duration)&&k.duration>0&&(z=Math.max(0,k.duration-we))}if(z==null||z<=0){let we=O.inheritedDuration;if(we!=null&&we>0){let Le=(O.inheritedStart??0)+we;z=Math.max(0,Le-ne)}}if(z==null||z<=0||(z=P(ne,z),z<=0))continue;let V=ne+z;Se=Math.max(Se,V);let j=k.tagName.toLowerCase(),Ce=ee&&ee!==m?"composition":j==="video"?"video":j==="audio"?"audio":j==="img"?"image":"element";J.push({id:k.id||ee||null,label:vs(k,Ce,J.length),start:ne,duration:z,track:Number.parseInt(k.getAttribute("data-track-index")??k.getAttribute("data-track")??String(H),10)||0,kind:Ce,tagName:j,compositionId:k.getAttribute("data-composition-id"),compositionAncestors:O.compositionAncestors,parentCompositionId:O.parentCompositionId,nodePath:null,compositionSrc:gt(k.getAttribute("data-composition-src")),assetUrl:Pi(k),timelineRole:k.getAttribute("data-timeline-role"),timelineLabel:k.getAttribute("data-timeline-label"),timelineGroup:k.getAttribute("data-timeline-group"),timelinePriority:Ee(k.getAttribute("data-timeline-priority"))})}let $=new Set(J.map(H=>H.id)),U=c?.getAttribute("data-composition-id")??null,W=U?n[U]??null:null;if(W&&c){let H=W;if(typeof H.getChildren=="function")try{let k=H.getChildren(!0,!0,!1)??[],O=new Map;for(let z of c.children){let V=z;if(!V.id)continue;let j=V.tagName.toLowerCase();j==="script"||j==="style"||j==="link"||O.set(V,{id:V.id,start:1/0,end:-1/0})}let ne=z=>{let V=z;for(;V;){if(O.has(V))return V;if(V===c)return null;V=V.parentElement}return null};for(let z of k){if(typeof z.targets!="function"||typeof z.startTime!="function"||typeof z.duration!="function")continue;let V=z.startTime(),j=z.parent;for(;j&&j!==W&&typeof j.startTime=="function";)V+=j.startTime(),j=j.parent;let Ce=V+z.duration();if(!(!Number.isFinite(V)||!Number.isFinite(Ce)))for(let we of z.targets()){if(!(we instanceof Element))continue;let $e=ne(we);if(!$e)continue;let Le=O.get($e);Le&&(Le.start=Math.min(Le.start,V),Le.end=Math.max(Le.end,Ce))}}let ee=J.length>0?Math.max(...J.map(z=>z.track))+1:0;for(let[z,V]of O){if(V.start===1/0||V.end===-1/0)continue;let j=z;if($.has(j.id))continue;let Ce=Math.max(0,V.end-V.start);if(Ce<=0)continue;let we=P(V.start,Ce);we<=0||(Se=Math.max(Se,V.start+we),J.push({id:j.id,label:j.getAttribute("data-timeline-label")??j.getAttribute("data-label")??j.getAttribute("aria-label")??j.id,start:V.start,duration:we,track:Number.parseInt(j.getAttribute("data-track-index")??j.getAttribute("data-track")??"",10)||ee,kind:"element",tagName:j.tagName.toLowerCase(),compositionId:j.getAttribute("data-composition-id"),compositionAncestors:U?[U]:[],parentCompositionId:U,nodePath:null,compositionSrc:null,assetUrl:null,timelineRole:j.getAttribute("data-timeline-role"),timelineLabel:j.getAttribute("data-timeline-label"),timelineGroup:j.getAttribute("data-timeline-group"),timelinePriority:Ee(j.getAttribute("data-timeline-priority"))}),$.add(j.id))}}catch(k){_("runtime.timeline.site1",k)}}if(c&&w!=null&&w>0){let H=J.length>0?Math.max(...J.map(k=>k.track))+1:0;for(let k of c.children){let O=k;if(!O.id||$.has(O.id))continue;let ne=O.getAttribute("data-timeline-role");if(ne!=="overlay"&&ne!=="persistent-overlay")continue;let ee=O.tagName.toLowerCase();if(ee==="script"||ee==="style"||ee==="link"||ee==="meta"||window.getComputedStyle(O).display==="none")continue;let V=P(0,w);V<=0||(Se=Math.max(Se,V),J.push({id:O.id,label:O.getAttribute("data-timeline-label")??O.getAttribute("data-label")??O.getAttribute("aria-label")??O.id,start:0,duration:V,track:Number.parseInt(O.getAttribute("data-track-index")??O.getAttribute("data-track")??"",10)||H,kind:"element",tagName:ee,compositionId:O.getAttribute("data-composition-id"),compositionAncestors:U?[U]:[],parentCompositionId:U,nodePath:null,compositionSrc:null,assetUrl:null,timelineRole:ne,timelineLabel:O.getAttribute("data-timeline-label"),timelineGroup:O.getAttribute("data-timeline-group"),timelinePriority:Ee(O.getAttribute("data-timeline-priority"))}),$.add(O.id))}}Cs(J);for(let H of u){if(H===c)continue;let k=H.getAttribute("data-composition-id");if(!k||!l(k))continue;let O=i.resolveStartForElement(H,0),ne=An(H);if((ne==null||ne<=0)&&Ii(H)!=null){let j=Ii(H);ne=Math.max(0,j-O)}let ee=r(k),z=ne&&ne>0?ne:ee;if(z==null||z<=0)continue;let V=P(O,z);V<=0||R.push({id:k,label:H.getAttribute("data-label")??k,start:O,duration:V,thumbnailUrl:gt(H.getAttribute("data-thumbnail-url")),avatarName:null})}let Y=Math.max(1,Se||1,w??0);return{source:"hf-preview",type:"timeline",durationInFrames:A&&X==null?Number.POSITIVE_INFINITY:Math.max(1,Math.ceil(Y*Math.max(1,t.canonicalFps))),clips:J,scenes:R,compositionWidth:Ee(c?.getAttribute("data-width"))??1920,compositionHeight:Ee(c?.getAttribute("data-height"))??1080}}var ae=us(co(),1),fo=ae.default,Xc=ae.default.stringify,ed=ae.default.fromJSON,td=ae.default.plugin,nd=ae.default.parse,id=ae.default.list,rd=ae.default.document,od=ae.default.comment,sd=ae.default.atRule,ad=ae.default.rule,ld=ae.default.decl,ud=ae.default.root,cd=ae.default.CssSyntaxError,dd=ae.default.Declaration,fd=ae.default.Container,md=ae.default.Processor,pd=ae.default.Document,hd=ae.default.Comment,xd=ae.default.Warning,gd=ae.default.AtRule,yd=ae.default.Result,Sd=ae.default.Input,bd=ae.default.Rule,Ad=ae.default.Root,Ed=ae.default.Node;var Kn="data-hf-authored-id";function Jn(t){return t.replace(/[.*+?^${}()|[\\]\\\\]/g,"\\\\$&")}function Qn(t){return t.replace(/\\\\/g,"\\\\\\\\").replace(/"/g,\'\\\\"\')}function Za(t){return t&&t.replace(/[^a-zA-Z0-9_-]/g,n=>`\\\\${n}`).replace(/^-?\\d/,n=>`\\\\${n}`)}function mo(t){let e=t.trim();return e?Array.from(new Set([e,Za(e)])).filter(Boolean):[]}function Xa(t){return!!t&&/[\\w-]/.test(t)}function el(t,e,n){let i=mo(e).sort((l,a)=>a.length-l.length);if(i.length===0)return t;let r="",o=0,s=null;for(let l=0;l<t.length;l+=1){let a=t[l],c=l>0?t[l-1]:"";if(s){r+=a,a===s&&c!=="\\\\"&&(s=null);continue}if(a===\'"\'||a==="\'"){s=a,r+=a;continue}if(a==="["){o+=1,r+=a;continue}if(a==="]"){o=Math.max(0,o-1),r+=a;continue}if(a==="#"&&o===0){let u=i.find(m=>t.startsWith(m,l+1));if(u){let m=t[l+1+u.length];if(!Xa(m)){r+=n,l+=u.length;continue}}}r+=a}return r}function tl(t,e){let n=e?.trim();return n?el(t,n,`[${Kn}="${Qn(n)}"]`):t}function nl(t,e,n,i,r){let o=tl(t,i),s=il(o,e,n),l=s.trim();if(!l||/^(html|body|:root|\\*)$/i.test(l))return t;let a=new RegExp(`\\\\[\\\\s*data-composition-id\\\\s*=\\\\s*(["\'])${Jn(n)}\\\\1\\\\s*\\\\]`,"g");if(a.test(l))return s.replace(a,e);let c=s.match(/^\\s*/)?.[0]??"",u=s.match(/\\s*$/)?.[0]??"";if(r){let m=i?`[${Kn}="${Qn(i)}"]`:null;if(m&&l.startsWith(m)){let f=l.slice(m.length);return`${c}${e}${m}${f}${u}`}}return`${c}${e} ${l}${u}`}function il(t,e,n){let i=Jn(n),r=String.raw`\\[\\s*data-composition-id\\s*=\\s*(?:"${i}"|\'${i}\')\\s*\\]`,o=String.raw`\\s*\\[\\s*data-(?:start|duration)\\s*=\\s*(?:"[^"]*"|\'[^\']*\')\\s*\\]`;return t.replace(new RegExp(`${r}(?:${o})+`,"g"),e).replace(new RegExp(`(?:${o})+${r}`,"g"),e)}var rl=new Set(["keyframes","-webkit-keyframes","font-face"]);function ol(t){return t?.type==="atrule"}function sl(t){let e=t.parent;for(;e;){if(ol(e)&&rl.has(e.name.toLowerCase()))return!0;e=e.parent}return!1}function Yn(t,e,n,i,r){let o=e.trim();if(!t||!o)return t;let s=n||`[data-composition-id="${Qn(o)}"]`,l=fo.parse(t);return l.walkRules(a=>{sl(a)||(a.selectors=a.selectors.map(c=>nl(c,s,o,i,r?.compoundAuthoredRoot)))}),l.toResult({map:!1}).css}function po(t,e,n="[HyperFrames] composition script error:",i,r=e,o){let s=JSON.stringify(e),l=JSON.stringify(r),a=JSON.stringify(n),c=Jn(e),u=JSON.stringify(o?.trim()||null),m=JSON.stringify(i??null),f=JSON.stringify(String.raw`\\[\\s*data-composition-id\\s*=\\s*(?:"${c}"|\'${c}\')\\s*\\]`),x=JSON.stringify(String.raw`\\s*\\[\\s*data-(?:start|duration)\\s*=\\s*(?:"[^"]*"|\'[^\']*\')\\s*\\]`),F=JSON.stringify(mo(o?.trim()||""));return`(function(){\n var __hfCompId = ${s};\n var __hfTimelineCompId = ${l};\n var __hfErrorLabel = ${a};\n var __hfAuthoredRootId = ${u};\n var __hfAuthoredRootAttr = ${JSON.stringify(Kn)};\n var __hfEscapeAttr = function(value) {\n return (value + "").replace(/\\\\\\\\/g, "\\\\\\\\\\\\\\\\").replace(/"/g, "\\\\\\\\\\\\"");\n };\n var __hfRootSelector = ${m} || (__hfCompId\n ? \'[data-composition-id="\' + __hfEscapeAttr(__hfCompId) + \'"]\'\n : "");\n var __hfRoot = null;\n var __hfRootSelectorPattern = ${f};\n var __hfTimingSelectorPattern = ${x};\n var __hfAuthoredRootIdForms = ${F};\n var __hfAuthoredRootSelector = __hfAuthoredRootId\n ? "[" + __hfAuthoredRootAttr + \'="\' + __hfEscapeAttr(__hfAuthoredRootId) + \'"]\'\n : "";\n var __hfIsSelectorNameChar = function(char) {\n return !!char && /[\\\\w-]/.test(char);\n };\n var __hfReplaceAuthoredRootIdSelectors = function(selector) {\n if (!__hfAuthoredRootSelector || !__hfAuthoredRootIdForms.length || typeof selector !== "string") {\n return selector;\n }\n var result = "";\n var bracketDepth = 0;\n var quote = null;\n for (var index = 0; index < selector.length; index += 1) {\n var char = selector[index];\n var previousChar = index > 0 ? selector[index - 1] : "";\n if (quote) {\n result += char;\n if (char === quote && previousChar !== "\\\\\\\\") {\n quote = null;\n }\n continue;\n }\n if (char === \'"\' || char === "\'") {\n quote = char;\n result += char;\n continue;\n }\n if (char === "[") {\n bracketDepth += 1;\n result += char;\n continue;\n }\n if (char === "]") {\n bracketDepth = Math.max(0, bracketDepth - 1);\n result += char;\n continue;\n }\n if (char === "#" && bracketDepth === 0) {\n var matchedForm = null;\n for (var formIndex = 0; formIndex < __hfAuthoredRootIdForms.length; formIndex += 1) {\n var form = __hfAuthoredRootIdForms[formIndex];\n if (selector.slice(index + 1, index + 1 + form.length) === form) {\n matchedForm = form;\n break;\n }\n }\n if (matchedForm) {\n var nextChar = selector[index + 1 + matchedForm.length];\n if (!__hfIsSelectorNameChar(nextChar)) {\n result += __hfAuthoredRootSelector;\n index += matchedForm.length;\n continue;\n }\n }\n }\n result += char;\n }\n return result;\n };\n var __hfNormalizeSelector = function(selector) {\n if (!__hfCompId || typeof selector !== "string") return selector;\n var normalized = selector\n .replace(new RegExp(__hfRootSelectorPattern + \'(?:\' + __hfTimingSelectorPattern + \')+\', \'g\'), __hfRootSelector)\n .replace(new RegExp(\'(?:\' + __hfTimingSelectorPattern + \')+\' + __hfRootSelectorPattern, \'g\'), __hfRootSelector);\n if (__hfAuthoredRootSelector) {\n normalized = __hfReplaceAuthoredRootIdSelectors(normalized);\n }\n return normalized;\n };\n var __hfFindRoot = function() {\n if (!__hfRoot && __hfRootSelector) {\n __hfRoot = window.document.querySelector(__hfRootSelector);\n }\n return __hfRoot;\n };\n var __hfContains = function(node) {\n var root = __hfFindRoot();\n return !root || node === root || root.contains(node);\n };\n var __hfQueryAll = function(selector) {\n var root = __hfFindRoot();\n if (!root || typeof selector !== "string") {\n return window.document.querySelectorAll(selector);\n }\n return Array.prototype.filter.call(window.document.querySelectorAll(__hfNormalizeSelector(selector)), function(node) {\n return __hfContains(node);\n });\n };\n var __hfQueryOne = function(selector) {\n var matches = __hfQueryAll(selector);\n return matches[0] || null;\n };\n var __hfGetElementById = function(id) {\n var found = window.document.getElementById(id);\n if (found && __hfContains(found)) return found;\n var root = __hfFindRoot();\n if (!root) return found || null;\n var idValue = id + "";\n if (__hfAuthoredRootId && __hfAuthoredRootId === idValue && root.getAttribute && root.getAttribute(__hfAuthoredRootAttr) === idValue) {\n return root;\n }\n if (root.id === idValue) return root;\n if (typeof root.querySelector !== "function") return null;\n try {\n var authoredRootMatch = root.querySelector(\'[\' + __hfAuthoredRootAttr + \'="\' + __hfEscapeAttr(idValue) + \'"]\');\n if (authoredRootMatch) return authoredRootMatch;\n } catch {}\n if (typeof CSS !== "undefined" && CSS && typeof CSS.escape === "function") {\n try {\n return root.querySelector("#" + CSS.escape(idValue)) || null;\n } catch {}\n }\n try {\n return root.querySelector(\'[id="\' + __hfEscapeAttr(idValue) + \'"]\') || null;\n } catch {}\n return null;\n };\n var __hfScopedDocument = typeof Proxy === "function"\n ? new Proxy(window.document, {\n get: function(target, prop, receiver) {\n if (prop === "querySelector") return __hfQueryOne;\n if (prop === "querySelectorAll") return __hfQueryAll;\n if (prop === "getElementById") return __hfGetElementById;\n var value = Reflect.get(target, prop, target);\n return typeof value === "function" ? value.bind(target) : value;\n },\n })\n : window.document;\n var __hfTimelineRegistryProxy = null;\n var __hfGetTimelineRegistry = function() {\n window.__timelines = window.__timelines || {};\n if (!__hfCompId || __hfCompId === __hfTimelineCompId || typeof Proxy !== "function") {\n return window.__timelines;\n }\n if (!__hfTimelineRegistryProxy) {\n __hfTimelineRegistryProxy = new Proxy(window.__timelines, {\n get: function(target, prop, receiver) {\n return Reflect.get(target, prop === __hfCompId ? __hfTimelineCompId : prop, target);\n },\n set: function(target, prop, value, receiver) {\n return Reflect.set(target, prop === __hfCompId ? __hfTimelineCompId : prop, value, target);\n },\n });\n }\n return __hfTimelineRegistryProxy;\n };\n var __hfScopedWindow = typeof Proxy === "function"\n ? new Proxy(window, {\n get: function(target, prop, receiver) {\n if (prop === "__timelines") return __hfGetTimelineRegistry();\n return Reflect.get(target, prop, target);\n },\n set: function(target, prop, value, receiver) {\n if (prop === "__timelines") {\n target.__timelines = value || {};\n __hfTimelineRegistryProxy = null;\n return true;\n }\n return Reflect.set(target, prop, value, target);\n },\n })\n : window;\n var __hfResolveGsapTarget = function(target) {\n if (typeof target !== "string") return target;\n return __hfQueryAll(target);\n };\n var __hfScopeTimeline = function(timeline) {\n if (!timeline || timeline.__hfScopedCompositionRoot === __hfFindRoot()) return timeline;\n ["to", "from", "fromTo", "set"].forEach(function(method) {\n var original = timeline[method];\n if (typeof original !== "function") return;\n timeline[method] = function(target) {\n var args = Array.prototype.slice.call(arguments);\n args[0] = __hfResolveGsapTarget(target);\n return original.apply(timeline, args);\n };\n });\n try {\n Object.defineProperty(timeline, "__hfScopedCompositionRoot", {\n value: __hfFindRoot(),\n configurable: true,\n });\n } catch {\n // Best-effort: timelines coming from user code may have a frozen target\n // or a non-extensible defineProperty path. Swallow \\u2014 the scoped root\n // is an enrichment, not a correctness invariant for playback.\n }\n return timeline;\n };\n var __hfBaseGsap = typeof gsap === "undefined" ? window.gsap : gsap;\n var __hfScopedGsap = !__hfBaseGsap || typeof Proxy !== "function"\n ? __hfBaseGsap\n : new Proxy(__hfBaseGsap, {\n get: function(target, prop, receiver) {\n if (prop === "timeline") {\n return function() {\n return __hfScopeTimeline(target.timeline.apply(target, arguments));\n };\n }\n if (prop === "to" || prop === "from" || prop === "fromTo" || prop === "set") {\n return function(firstArg) {\n var args = Array.prototype.slice.call(arguments);\n args[0] = __hfResolveGsapTarget(firstArg);\n return target[prop].apply(target, args);\n };\n }\n if (prop === "utils" && target.utils && typeof Proxy === "function") {\n return new Proxy(target.utils, {\n get: function(utilsTarget, utilsProp, utilsReceiver) {\n if (utilsProp === "toArray") {\n return function(firstArg) {\n var args = Array.prototype.slice.call(arguments);\n args[0] = __hfResolveGsapTarget(firstArg);\n return utilsTarget.toArray.apply(utilsTarget, args);\n };\n }\n if (utilsProp === "selector") {\n return function(base) {\n var baseEl = typeof base === "string" ? __hfQueryOne(base) : base;\n var root = baseEl || __hfFindRoot();\n return function(selector) {\n if (!root || typeof selector !== "string") return [];\n return Array.prototype.filter.call(\n window.document.querySelectorAll(__hfNormalizeSelector(selector)),\n function(node) {\n return node === root || (typeof root.contains === "function" && root.contains(node));\n },\n );\n };\n };\n }\n var value = Reflect.get(utilsTarget, utilsProp, utilsTarget);\n return typeof value === "function" ? value.bind(utilsTarget) : value;\n },\n });\n }\n var value = Reflect.get(target, prop, target);\n return typeof value === "function" ? value.bind(target) : value;\n },\n });\n var __hfBaseHyperframes = window.__hyperframes;\n var __hfScopedHyperframes = !__hfBaseHyperframes\n ? __hfBaseHyperframes\n : Object.assign({}, __hfBaseHyperframes, {\n getVariables: function() {\n var byComp = window.__hfVariablesByComp;\n var scoped = byComp && __hfTimelineCompId ? byComp[__hfTimelineCompId] : null;\n return scoped ? Object.assign({}, scoped) : {};\n },\n });\n var __hfRun = function() {\n try {\n (function(document, gsap, window, __hyperframes) {\n${t.replace(/<\\/(script)/gi,"<\\\\/$1")}\n }).call(window, __hfScopedDocument, __hfScopedGsap, __hfScopedWindow, __hfScopedHyperframes);\n } catch (_err) {\n console.error(__hfErrorLabel, __hfCompId, _err);\n }\n };\n __hfFindRoot();\n __hfRun();\n})();`}function ho(){if(typeof document>"u")return{};let t=Zn(document.documentElement),e=al();return{...t,...e}}function Zn(t){if(!t)return{};let e=t.getAttribute("data-composition-variables");if(!e)return{};let n;try{n=JSON.parse(e)}catch{return{}}if(!Array.isArray(n))return{};let i={};for(let r of n){if(!r||typeof r!="object")continue;let o=r;typeof o.id!="string"||!("default"in o)||(i[o.id]=o.default)}return i}function al(){if(typeof window>"u")return{};let t=window.__hfVariables;return!t||typeof t!="object"||Array.isArray(t)?{}:t}var ll=8e3,ul=/^(?![a-zA-Z][a-zA-Z\\d+\\-.]*:)(?!\\/\\/)(?!\\/)(?!\\.\\.?\\/).+/;function cl(t,e){return`${t}__hf${e}`}var dl=t=>new Promise(e=>{let n=!1,i=Date.now(),r=null,o=s=>{n||(n=!0,r!=null&&window.clearTimeout(r),e({status:s,elapsedMs:Math.max(0,Date.now()-i)}))};t.addEventListener("load",()=>o("load"),{once:!0}),t.addEventListener("error",()=>o("error"),{once:!0}),r=window.setTimeout(()=>o("timeout"),ll)});function Xn(t){for(;t.firstChild;)t.removeChild(t.firstChild);t.textContent=""}var fl=["data-composition-id","data-composition-file","data-start","data-duration","data-end","data-track-index","data-track","data-composition-src","data-hf-authored-duration","data-hf-authored-end"];function ml(t){let e=document.importNode(t,!0),n=e.getAttribute("id")?.trim();for(let o of fl)e.removeAttribute(o);n&&(e.removeAttribute("id"),e.setAttribute("data-hf-authored-id",n)),e.setAttribute("data-hf-inner-root","true");let i=e.getAttribute("data-width"),r=e.getAttribute("data-height");return e.style.width=i?`${i}px`:"100%",e.style.height=r?`${r}px`:"100%",e}function xo(t,e){let n=t.trim();if(!n)return t;try{return ul.test(n)?new URL(n,document.baseURI).toString():e?new URL(n,e).toString():new URL(n,document.baseURI).toString()}catch{return t}}function pl(t){let e=t.getAttribute("data-variable-values");if(!e)return{};let n;try{n=JSON.parse(e)}catch{return{}}return!n||typeof n!="object"||Array.isArray(n)?{}:n}function nn(t){let e=(t.getAttribute("data-composition-id")||"").trim()||null;return{authoredCompositionId:(t.getAttribute("data-hf-original-composition-id")||e||"").trim()||null,runtimeCompositionId:e}}function hl(t){let e=new Map;for(let n of t){let i=nn(n).authoredCompositionId||"";i&&e.set(i,(e.get(i)||0)+1)}return e}function go(t){let e=nn(t).authoredCompositionId;return e?!!document.querySelector(`template#${CSS.escape(e)}-template`):!1}function xl(t){return!!t.querySelector(\'[data-hf-inner-root="true"]\')}function gl(t){return t.hasAttribute("data-composition-src")?!0:go(t)?t.children.length===0||t.hasAttribute("data-hf-original-composition-id")?!0:xl(t):!1}function ti(){return Array.from(document.querySelectorAll("[data-composition-src], [data-composition-id]")).filter(e=>e.hasAttribute("data-composition-src")?!0:go(e))}function yo(){let t=window.__hfVariablesByComp;if(!t)return;let e=new Set(ti().map(n=>nn(n).runtimeCompositionId).filter(n=>!!n));for(let n of Object.keys(t))e.has(n)||delete t[n]}function So(t,e=hl(t)){let n=new Map,i=new Map;for(let r of t){let{authoredCompositionId:o,runtimeCompositionId:s}=nn(r),l=gl(r);if(!o){i.set(r,{authoredCompositionId:null,runtimeCompositionId:s});continue}let a=(e.get(o)||0)>1,c=s||o;if(l){let u=a?(n.get(o)||0)+1:0;a&&n.set(o,u),c=a?cl(o,u):o,a?r.setAttribute("data-hf-original-composition-id",o):r.removeAttribute("data-hf-original-composition-id"),r.setAttribute("data-composition-id",c),s&&s!==c&&window.__hfVariablesByComp&&delete window.__hfVariablesByComp[s]}i.set(r,{authoredCompositionId:o,runtimeCompositionId:c})}return i}async function ei(t){let e=null;t.authoredCompositionId&&(e=Array.from(t.sourceNode.querySelectorAll("[data-composition-id]")).find(x=>x.getAttribute("data-composition-id")===t.authoredCompositionId)??null);let n=e??t.sourceNode,i=e?.getAttribute("data-composition-id")?.trim()||t.authoredCompositionId||null,r=t.runtimeCompositionId||i||null,o=e?.getAttribute("id")?.trim()||null,s=r?`[data-composition-id="${CSS.escape(r)}"]`:void 0;if(t.headLinks)for(let f of t.headLinks){let x=f.getAttribute("href")||"";x&&(document.head.querySelector(`link[href="${CSS.escape(x)}"]`)||document.head.appendChild(f.cloneNode(!0)))}if(t.headStyles)for(let f of t.headStyles){let x=f.cloneNode(!0);x instanceof HTMLStyleElement&&(i&&(x.textContent=Yn(x.textContent||"",i,s,o)),document.head.appendChild(x),t.injectedStyles.push(x))}let l=Array.from(n.querySelectorAll("style"));for(let f of l){let x=f.cloneNode(!0);x instanceof HTMLStyleElement&&(i&&(x.textContent=Yn(x.textContent||"",i,s,o)),document.head.appendChild(x),t.injectedStyles.push(x))}let a=[];if(t.headScripts)for(let f of t.headScripts){let x=f.getAttribute("type")?.trim()??"",F=f.getAttribute("src")?.trim()??"";if(F){let E=xo(F,t.compositionUrl);a.push({kind:"external",src:E,type:x})}else{let E=f.textContent?.trim()??"";E&&a.push({kind:"inline",content:E,type:x,scopeCompositionId:i})}}let c=Array.from(n.querySelectorAll("script")),u=[...a];for(let f of c){let x=f.getAttribute("type")?.trim()??"",F=f.getAttribute("src")?.trim()??"";if(F){let E=xo(F,t.compositionUrl);u.push({kind:"external",src:E,type:x})}else{let E=f.textContent?.trim()??"";E&&u.push({kind:"inline",content:E,type:x,scopeCompositionId:i})}f.parentNode?.removeChild(f)}let m=Array.from(n.querySelectorAll("style"));for(let f of m)f.parentNode?.removeChild(f);if(e){let f=e.getAttribute("data-width"),x=e.getAttribute("data-height"),F=t.parseDimensionPx(f),E=t.parseDimensionPx(x);f&&t.host.setAttribute("data-width",f),x&&t.host.setAttribute("data-height",x),F&&t.host instanceof HTMLElement&&(t.host.style.width=F),E&&t.host instanceof HTMLElement&&(t.host.style.height=E),e.hasAttribute("data-timeline-locked")&&t.host.setAttribute("data-timeline-locked",""),t.host.appendChild(ml(e))}else t.hasTemplate?t.host.appendChild(document.importNode(n,!0)):t.host.innerHTML=t.fallbackBodyInnerHtml;if(r){let f={...t.declaredVariableDefaults??{},...pl(t.host)};Object.keys(f).length>0?(window.__hfVariablesByComp||(window.__hfVariablesByComp={}),window.__hfVariablesByComp[r]=f):window.__hfVariablesByComp&&delete window.__hfVariablesByComp[r]}for(let f of u){let x=document.createElement("script");if(f.type&&(x.type=f.type),x.async=!1,f.kind==="external"?x.src=f.src:f.type.toLowerCase()==="module"?x.textContent=f.content:f.scopeCompositionId?x.textContent=po(f.content,f.scopeCompositionId,"[HyperFrames] composition script error:",s,r||f.scopeCompositionId,o):x.textContent=`(function(){${f.content}})();`,document.body.appendChild(x),t.injectedScripts.push(x),f.kind==="external"){let F=await dl(x);F.status!=="load"&&t.onDiagnostic?.({code:"external_composition_script_load_issue",details:{hostCompositionId:t.authoredCompositionId,runtimeCompositionId:t.runtimeCompositionId,hostCompositionSrc:t.hostCompositionSrc,resolvedScriptSrc:f.src,loadStatus:F.status,elapsedMs:F.elapsedMs}})}}}async function bo(t){let e=ti();if(yo(),e.length===0)return;let n=So(e),i=e.filter(r=>{if(r.hasAttribute("data-composition-src")||r.children.length>0)return!1;let o=n.get(r)?.authoredCompositionId;return o?!!document.querySelector(`template#${CSS.escape(o)}-template`):!1});if(i.length!==0)for(let r of i){let o=n.get(r),s=o?.authoredCompositionId;if(!s)continue;let l=document.querySelector(`template#${CSS.escape(s)}-template`);Xn(r),await ei({host:r,authoredCompositionId:s,runtimeCompositionId:o?.runtimeCompositionId||s,hostCompositionSrc:`template#${s}-template`,sourceNode:l.content,hasTemplate:!0,fallbackBodyInnerHtml:"",compositionUrl:null,injectedStyles:t.injectedStyles,injectedScripts:t.injectedScripts,parseDimensionPx:t.parseDimensionPx,onDiagnostic:t.onDiagnostic})}}async function Ao(t){let e=ti();if(yo(),e.length===0)return;let n=So(e),i=e.filter(r=>r.hasAttribute("data-composition-src"));i.length!==0&&await Promise.all(i.map(async r=>{let o=r.getAttribute("data-composition-src");if(!o)return;let s=n.get(r),l=s?.authoredCompositionId||null,a=s?.runtimeCompositionId||l||null,c=null;try{c=new URL(o,document.baseURI)}catch{c=null}Xn(r);try{let u=l!=null?document.querySelector(`template#${CSS.escape(l)}-template`):null;if(u){await ei({host:r,authoredCompositionId:l,runtimeCompositionId:a,hostCompositionSrc:o,sourceNode:u.content,hasTemplate:!0,fallbackBodyInnerHtml:"",compositionUrl:c,injectedStyles:t.injectedStyles,injectedScripts:t.injectedScripts,parseDimensionPx:t.parseDimensionPx,onDiagnostic:t.onDiagnostic});return}let m=await fetch(o);if(!m.ok)throw new Error(`HTTP ${m.status}`);let f=await m.text(),F=new DOMParser().parseFromString(f,"text/html"),E=(l?F.querySelector(`template#${CSS.escape(l)}-template`):null)??F.querySelector("template"),S=E?E.content:F.body,B=E?void 0:Array.from(F.head.querySelectorAll("style")),D=E?void 0:Array.from(F.head.querySelectorAll("script")),v=E?void 0:Array.from(F.head.querySelectorAll(\'link[rel="stylesheet"], link[rel="preconnect"]\'));await ei({host:r,authoredCompositionId:l,runtimeCompositionId:a,hostCompositionSrc:o,sourceNode:S,hasTemplate:!!E,fallbackBodyInnerHtml:F.body.innerHTML,compositionUrl:c,injectedStyles:t.injectedStyles,injectedScripts:t.injectedScripts,parseDimensionPx:t.parseDimensionPx,headStyles:B,headScripts:D,headLinks:v,declaredVariableDefaults:Zn(F.documentElement),onDiagnostic:t.onDiagnostic})}catch(u){t.onDiagnostic?.({code:"external_composition_load_failed",details:{hostCompositionId:l,runtimeCompositionId:a,hostCompositionSrc:o,errorMessage:u instanceof Error?u.message:"unknown_error"}}),Xn(r)}}))}function yl(t){return t instanceof HTMLElement?t.dataset.captionWrapper!=="true"?t:t.querySelector(":scope > span")??null:null}function Sl(){let t=[],e=document.querySelectorAll(".caption-group");for(let n of e)for(let i of n.children){if(!(i instanceof HTMLElement))continue;let r=i.dataset.captionWrapper==="true"?i.querySelector(":scope > span"):i.tagName==="SPAN"?i:null;r&&t.push(r)}return t}function bl(t){let e=t.parentElement;if(e?.dataset.captionWrapper==="true")return e;let n=document.createElement("span");return n.style.display="inline-block",n.dataset.captionWrapper="true",t.parentNode?.insertBefore(n,t),n.appendChild(t),n}function ni(){let t=window.gsap;t&&document.querySelectorAll(".caption-group").length!==0&&fetch("caption-overrides.json").then(e=>e.ok?e.json():null).then(e=>{if(!e||!Array.isArray(e)||e.length===0)return;let n=Sl();for(let i of e){let r=null;if(i.wordId&&(r=yl(document.getElementById(i.wordId))),!r&&i.wordIndex!==void 0&&(r=n[i.wordIndex]??null),!r)continue;let o={},s={};if(i.x!==void 0&&(o.x=i.x),i.y!==void 0&&(o.y=i.y),i.scale!==void 0&&(o.scale=i.scale),i.rotation!==void 0&&(o.rotation=i.rotation),i.opacity!==void 0&&(s.opacity=i.opacity),i.fontSize!==void 0&&(s.fontSize=`${i.fontSize}px`),i.fontWeight!==void 0&&(s.fontWeight=i.fontWeight),i.fontFamily!==void 0&&(s.fontFamily=i.fontFamily),i.activeColor||i.dimColor){let a=t.getTweensOf(r).filter(u=>u.vars.color!==void 0).sort((u,m)=>u.startTime()-m.startTime()),c=a.length>0?String(a[0].vars.color):"";for(let u of a)String(u.vars.color)===c?i.dimColor&&(u.vars.color=i.dimColor):i.activeColor&&(u.vars.color=i.activeColor);i.dimColor&&t.set(r,{color:i.dimColor})}if(Object.keys(s).length>0&&t.set(r,s),Object.keys(o).length>0){let l=bl(r);t.set(l,o)}}}).catch(()=>{})}var rn=class{constructor(e){ye(this,"_baseTime",0);ye(this,"_playStartMs",null);ye(this,"_rate",1);ye(this,"_duration",1/0);ye(this,"_nowMs");ye(this,"_audioSource",null);this._baseTime=e?.initialTime??0,this._rate=e?.rate??1,this._duration=e?.duration??1/0,this._nowMs=e?.nowMs??(()=>performance.now())}now(){if(this._playStartMs===null)return this._baseTime;if(this._audioSource){let i=null;if("currentTimeSeconds"in this._audioSource)i=this._audioSource.currentTimeSeconds;else{let{el:r,compositionStart:o,mediaStart:s}=this._audioSource;!r.paused&&Number.isFinite(r.currentTime)&&(i=(r.currentTime-s)/(r.playbackRate>0?r.playbackRate:1)*this._rate+o)}if(i!==null)return Number.isFinite(this._duration)&&i>=this._duration?this._duration:Math.max(0,i)}let e=(this._nowMs()-this._playStartMs)/1e3,n=this._baseTime+e*this._rate;return Number.isFinite(this._duration)&&n>=this._duration?this._duration:Math.max(0,n)}play(){return this._playStartMs!==null||Number.isFinite(this._duration)&&this._baseTime>=this._duration?!1:(this._playStartMs=this._nowMs(),!0)}pause(){return this._playStartMs===null?!1:(this._baseTime=this.now(),this._playStartMs=null,!0)}seek(e){let n=Number.isFinite(this._duration)?Math.max(0,Math.min(e,this._duration)):Math.max(0,e);this._baseTime=n,this._playStartMs!==null&&(this._playStartMs=this._nowMs())}isPlaying(){return this._playStartMs!==null}setRate(e){let n=Number.isFinite(e)&&e>0?Math.max(.1,Math.min(5,e)):1;this._playStartMs!==null&&(this._baseTime=this.now(),this._playStartMs=this._nowMs()),this._rate=n}getRate(){return this._rate}setDuration(e){this._duration=Number.isFinite(e)&&e>0?e:1/0,this._baseTime>this._duration&&(this._baseTime=this._duration)}getDuration(){return this._duration}attachAudioSource(e){this._audioSource=e}detachAudioSource(){this._audioSource&&this._playStartMs!==null&&(this._baseTime=this.now(),this._playStartMs=this._nowMs()),this._audioSource=null}hasAudioSource(){return this._audioSource!==null}getSource(){if(this._audioSource&&this._playStartMs!==null){if("currentTimeSeconds"in this._audioSource)return"audio";let{el:e}=this._audioSource;if(!e.paused&&Number.isFinite(e.currentTime))return"audio"}return"monotonic"}snapshot(){return{time:this.now(),playing:this.isPlaying(),rate:this._rate,duration:this._duration,source:this.getSource()}}reachedEnd(){return Number.isFinite(this._duration)&&this.now()>=this._duration}};function Eo(t){return!Number.isFinite(t)||t<=0?1:t}var on=class{constructor(){ye(this,"_ctx",null);ye(this,"_bufferCache",new Map);ye(this,"_failedSrcs",new Set);ye(this,"_activeSources",[]);ye(this,"_masterGain",null);ye(this,"_rateAnchorCtx",0);ye(this,"_rateAnchorComp",0);ye(this,"_rate",1);ye(this,"_paused",!0);ye(this,"_playGeneration",0)}async init(){try{return this._ctx=new AudioContext,this._masterGain=this._ctx.createGain(),this._masterGain.connect(this._ctx.destination),!0}catch{return!1}}get context(){return this._ctx}getTime(){return!this._ctx||this._paused?-1:this._rateAnchorComp+(this._ctx.currentTime-this._rateAnchorCtx)*this._rate}async decodeAudioElement(e){let n=e.currentSrc||e.getAttribute("src");if(!n)return null;if(this._bufferCache.has(n))return this._bufferCache.get(n);if(this._failedSrcs.has(n)||!this._ctx)return null;try{let i=await fetch(n);if(!i.ok)return this._failedSrcs.add(n),_("webAudioTransport.fetch",new Error(`${i.status} ${n}`)),null;let r=await i.arrayBuffer(),o=await this._ctx.decodeAudioData(r);return this._bufferCache.set(n,o),o}catch(i){return this._failedSrcs.add(n),_("webAudioTransport.decode",i),null}}startGeneration(){return this._playGeneration+=1,this._playGeneration}currentGeneration(){return this._playGeneration}async schedulePlayback(e,n,i,r,o,s,l,a=1){if(!this._ctx||!this._masterGain||l!==this._playGeneration)return null;try{if(this._ctx.state==="suspended"&&await this._ctx.resume(),l!==this._playGeneration)return null;let c=Eo(a),u=this._ctx.createBufferSource();u.buffer=n,u.playbackRate.value=c;let m=this._ctx.createGain();m.gain.value=s,u.connect(m),m.connect(this._masterGain);let f=o-i,x=this._ctx.currentTime;if(this._rate=c,this._rateAnchorCtx=x,this._rateAnchorComp=o,f>=0)u.start(0,f+r);else{let S=-f/c;u.start(x+S,r)}let F=e.muted;e.muted=!0;let E={el:e,sourceNode:u,gainNode:m,compositionStart:i,mediaStart:r,scheduledAt:x,priorMuted:F};return this._activeSources.push(E),this._paused=!1,E}catch(c){return _("webAudioTransport.schedule",c),null}}setRate(e){let n=Eo(e);if(n!==this._rate){this._ctx&&!this._paused&&(this._rateAnchorComp=this.getTime(),this._rateAnchorCtx=this._ctx.currentTime),this._rate=n;for(let i of this._activeSources)try{i.sourceNode.playbackRate.value=n}catch(r){_("webAudioTransport.setRate",r)}}}stopAll(){for(let e of this._activeSources){try{e.sourceNode.stop(),e.sourceNode.disconnect(),e.gainNode.disconnect()}catch{}e.el.muted=e.priorMuted}this._activeSources=[],this._paused=!0}setVolume(e){this._masterGain&&(this._masterGain.gain.value=Math.max(0,Math.min(1,e)))}setElementVolume(e,n){let i=Math.max(0,Math.min(1,n));for(let r of this._activeSources)if(r.el===e)try{r.gainNode.gain.value=i}catch(o){_("webAudioTransport.setElementVolume",o)}}setMuted(e){this._masterGain&&(this._masterGain.gain.value=e?0:1)}isActive(){return this._activeSources.length>0&&!this._paused}destroy(){if(this.stopAll(),this._bufferCache.clear(),this._ctx)try{this._ctx.close()}catch{}this._ctx=null,this._masterGain=null}};var Fo="data-hf-authored-duration",wo="data-hf-authored-end";function No(){let t=Bi(),e=null,n=null,i=[],r=new Set,o=null;if(typeof window.__hfRuntimeTeardown=="function")try{window.__hfRuntimeTeardown()}catch(d){_("runtime.init.site1",d)}document.documentElement&&(document.documentElement.style.margin="0",document.documentElement.style.padding="0",document.documentElement.style.overflow="hidden"),document.body&&(document.body.style.margin="0",document.body.style.padding="0",document.body.style.overflow="hidden"),window.__timelines=window.__timelines||{};let s=d=>{i.push(d)},l=(d,p,h)=>{let b=h??`${d}:${JSON.stringify(p)}`;r.has(b)||(r.add(b),Ae({source:"hf-preview",type:"diagnostic",code:d,details:p}))},a=d=>{let p={scale:1,focusX:960,focusY:540},h=[],b=[],y={time:d.getTime(),duration:d.getDuration(),isPlaying:d.isPlaying(),renderMode:!1,timelineDirty:!1};return{play:d.play,pause:d.pause,seek:d.seek,getTime:d.getTime,getDuration:d.getDuration,isPlaying:d.isPlaying,getMainTimeline:()=>null,getElementBounds:()=>{},getElementsAtPoint:()=>{},setElementPosition:()=>{},previewElementPosition:()=>{},setElementKeyframes:()=>{},setElementScale:()=>{},setElementFontSize:()=>{},setElementTextContent:()=>{},setElementTextColor:()=>{},setElementTextShadow:()=>{},setElementTextFontWeight:()=>{},setElementTextFontFamily:()=>{},setElementTextOutline:()=>{},setElementTextHighlight:()=>{},setElementVolume:()=>{},setStageZoom:()=>{},getStageZoom:()=>p,setStageZoomKeyframes:()=>{},getStageZoomKeyframes:()=>h,addElement:()=>!1,removeElement:()=>!1,updateElementTiming:()=>!1,setElementTiming:()=>{},updateElementSrc:()=>!1,updateElementLayer:()=>!1,updateElementBasePosition:()=>!1,markTimelineDirty:()=>{},isTimelineDirty:()=>!1,rebuildTimeline:()=>{},ensureTimeline:()=>{},enableRenderMode:()=>{},disableRenderMode:()=>{},renderSeek:d.renderSeek,getElementVisibility:()=>({visible:!1}),getVisibleElements:()=>b,getRenderState:()=>({...y,time:d.getTime(),duration:d.getDuration(),isPlaying:d.isPlaying()})}},c=1/60,u=.75,m=2,f=.05,x=100,F=240,E=d=>{if(d instanceof Error)return d.message||String(d);if(typeof d=="string")return d;try{return JSON.stringify(d)}catch{return String(d??"")}},S=d=>{let p=d.toLowerCase();return p.includes("cannot read properties of null")||p.includes("cannot set properties of null")?{code:"runtime_null_dom_access",category:"dom-null-access"}:p.includes("failed to execute \'queryselector\'")?{code:"runtime_invalid_selector",category:"selector-invalid"}:p.includes("is not defined")?{code:"runtime_reference_missing",category:"reference-missing"}:{code:"runtime_script_error",category:"script-error"}},B=d=>{if(d==null||d.trim()==="")return null;let p=Number.parseFloat(d);return!Number.isFinite(p)||p<=0?null:`${p}px`},D=()=>{let d=document.querySelector(\'[data-composition-id][data-root="true"]\');if(d instanceof HTMLElement)return d;let p=Array.from(document.querySelectorAll("[data-composition-id]"));return p.length===0?null:p.find(h=>!h.parentElement?.closest("[data-composition-id]"))??p[0]??null},v=()=>{let d=D();if(!d)return;let p=B(d.getAttribute("data-width")),h=B(d.getAttribute("data-height"));p&&(d.style.width=p),h&&(d.style.height=h),p&&d.style.setProperty("--comp-width",p),h&&d.style.setProperty("--comp-height",h)},X=()=>{let d=D(),p=Array.from(document.querySelectorAll("[data-composition-id]")).filter(h=>h.hasAttribute("data-duration")||h.hasAttribute("data-end"));for(let h of p){if(d&&h===d)continue;let b=h.getAttribute("data-duration"),y=h.getAttribute("data-end");b!=null&&!h.hasAttribute(Fo)&&h.setAttribute(Fo,b),y!=null&&!h.hasAttribute(wo)&&h.setAttribute(wo,y),h.removeAttribute("data-duration"),h.removeAttribute("data-end")}},q=()=>{let d=D();if(!d)return;d.style.position||(d.style.position="relative"),d.style.overflow="hidden";let p=B(d.getAttribute("data-width")),h=B(d.getAttribute("data-height"));p&&(d.style.width=p),h&&(d.style.height=h);let b=Array.from(d.children);for(let y of b){let M=y.tagName.toLowerCase();if(M==="script"||M==="style"||M==="link"||M==="meta"||!y.hasAttribute("data-start"))continue;let te=(y.style.top==="0px"||y.style.top==="0")&&(y.style.left==="0px"||y.style.left==="0")&&y.style.width==="100%"&&y.style.height==="100%",G=/translate\\(\\s*-50%\\s*,\\s*-50%\\s*\\)/.test(y.style.transform);if(te&&G&&!y.hasAttribute("data-width")&&!y.hasAttribute("data-height")){let Je=y.style.top,fe=y.style.left,ct=y.style.width,oe=y.style.height;y.style.top="",y.style.left="",y.style.width="",y.style.height="";let Q=window.getComputedStyle(y);Q.top!=="auto"||Q.bottom!=="auto"||Q.left!=="auto"||Q.right!=="auto"||Q.width!=="0px"||Q.height!=="0px"||(y.style.top=Je,y.style.left=fe,y.style.width=ct,y.style.height=oe)}let ie=window.getComputedStyle(y),xe=ie.position;if(xe!=="absolute"&&xe!=="fixed"&&(y.style.position="absolute"),!!y.style.top||!!y.style.bottom||ie.top!=="auto"||ie.bottom!=="auto"||(y.style.top="0"),!!y.style.left||!!y.style.right||ie.left!=="auto"||ie.right!=="auto"||(y.style.left="0"),M!=="audio"){let Je=B(y.getAttribute("data-width")),fe=B(y.getAttribute("data-height")),ct=ie.width!=="0px"&&ie.width!=="auto",oe=ie.height!=="0px"&&ie.height!=="auto";Je?!y.style.width&&!ct&&(y.style.width=Je):!y.style.width&&ie.width==="0px"&&(y.style.width="100%"),fe?!y.style.height&&!oe&&(y.style.height=fe):!y.style.height&&ie.height==="0px"&&(y.style.height="100%")}}},C=(d,p=0,h)=>Ye({timelineRegistry:window.__timelines??{},includeAuthoredTimingAttrs:h?.includeAuthoredTimingAttrs??!0}).resolveStartForElement(d,p),g=(d,p)=>Ye({timelineRegistry:window.__timelines??{},includeAuthoredTimingAttrs:p?.includeAuthoredTimingAttrs??!0}).resolveDurationForElement(d),A=(d,p=0)=>!d.hasAttribute("data-hf-auto-start")&&d.hasAttribute("data-start")?Math.max(0,Number(d.getAttribute("data-start")??0)||0):C(d,p),N=!!document.querySelector("[data-composition-src]"),w=!1;{let d=document.querySelectorAll("[data-composition-id]:not([data-composition-src])");for(let p of d){let h=p.getAttribute("data-composition-id");if(h&&p.children.length===0&&document.querySelector(`template#${CSS.escape(h)}-template`)){w=!0;break}}}let T=!N&&!w,L=d=>{if(!d||typeof d.duration!="function")return null;try{let p=Number(d.duration());return Number.isFinite(p)?Math.max(0,p):null}catch{return null}},P=d=>typeof d=="number"&&Number.isFinite(d)&&d>c,J=d=>{let p=Number(d.getAttribute("data-duration"));if(Number.isFinite(p)&&p>0)return p;let h=Number(d.getAttribute("data-playback-start")??d.getAttribute("data-media-start")??"0"),b=Number.isFinite(h)?Math.max(0,h):0;return Number.isFinite(d.duration)&&d.duration>b?Math.max(0,d.duration-b):null},R=()=>{let d=Array.from(document.querySelectorAll("video[data-start], audio[data-start]"));if(d.length===0)return null;let p=0;for(let h of d){let b=A(h,0);if(!Number.isFinite(b))continue;let y=J(h);y==null||y<=c||(p=Math.max(p,Math.max(0,b)+y))}return p>c?p:null},le=()=>{let d=D();if(!d)return null;let p=window.__timelines??{},h=Ye({timelineRegistry:p,includeAuthoredTimingAttrs:!0}),b=0,y=Array.from(d.querySelectorAll("[data-composition-id][data-start]"));for(let M of y){if(!(M instanceof Element)||M.parentElement?.closest("[data-composition-id]")!==d)continue;let G=h.resolveStartForElement(M,0),ie=h.resolveDurationForElement(M);!Number.isFinite(G)||ie==null||ie<=0||(b=Math.max(b,Math.max(0,G)+ie))}return b>c?b:null},Se=()=>{let d=R();return typeof d!="number"||!Number.isFinite(d)||d<=c?null:d},$=d=>P(d)?Math.max(c,d*u):c,U=(d,p=0)=>{let h=L(d),b=Se(),y=le(),M=Math.max(b??0,y??0),te=Number.isFinite(p)&&p>c?p:0,G=0;return P(h)?G=Math.max(h,M,te):P(M)?G=Math.max(M,te):G=te,G>0?Math.max(0,G):0},W=()=>{let d=window.__timelines??{},p=Ye({timelineRegistry:d,includeAuthoredTimingAttrs:!0}),h=Se(),b=le(),y=Math.max(h??0,b??0)||null,M=$(y),te=oe=>{let Q=document.querySelector(`[data-composition-id="${CSS.escape(oe)}"]`);return Q?p.resolveStartForElement(Q,0):0},G=oe=>{let Q=window.gsap;if(!Q||typeof Q.timeline!="function")return null;let ue=Q.timeline({paused:!0});for(let he of oe)ue.add(he.timeline,te(he.compositionId));return ue},ie=(oe,Q)=>{if(!P(oe))return null;let ue=window.gsap;if(!ue||typeof ue.timeline!="function")return null;let he=ue.timeline({paused:!0});if(Q)try{he.add(Q,0)}catch(se){_("runtime.init.site2",se)}let be=he;if(typeof be.to=="function")try{be.to({},{duration:oe})}catch(se){_("runtime.init.site3",se)}return he},xe=(oe,Q)=>{let ue=oe;if(typeof ue.getChildren!="function")return[];try{let he=ue.getChildren(!0,!0,!0)??[];if(!Array.isArray(he))return[];let be=[];for(let se of Q)if(!he.some(ke=>ke===se.timeline))try{let ke=te(se.compositionId);oe.add(se.timeline,ke),be.push(se.compositionId)}catch(ke){_("runtime.init.site4",ke)}return be}catch{return[]}},Ie=D(),de=Ie?.getAttribute("data-composition-id")??null;if(!de)return{timeline:null};let ge=d[de]??null,fe=(()=>{if(!Ie)return[];let oe=new Set,Q=Array.from(Ie.querySelectorAll("[data-composition-id]")),ue=[];for(let he of Q){let be=he.getAttribute("data-composition-id");if(!be||be===de||oe.has(be))continue;oe.add(be);let se=d[be]??null;if(!se||typeof se.play!="function"||typeof se.pause!="function")continue;let Ne=L(se);ue.push({compositionId:be,timeline:se,durationSeconds:Ne??0})}return ue})(),ct=oe=>{for(let Q of oe){let ue=Q.timeline;if(typeof ue.paused=="function")try{ue.paused(!1)}catch(he){_("runtime.init.site5",he)}}};if(fe.length>0&&ct(fe),ge){let oe=fe.length>0?xe(ge,fe):[];if((fe.length>0||!document.querySelector("[data-composition-id]:not([data-composition-id=\'"+de+"\'])"))&&(Y=!0),oe.length>0)try{let se=ge.time();ge.seek(se,!1)}catch{}let Q=L(ge);if(!P(Q)&&fe.length>0){let se=fe.map(ts=>ts.compositionId),Ne=G(fe),ke=L(Ne);if(Ne&&P(ke))return{timeline:Ne,selectedTimelineIds:se,selectedDurationSeconds:ke,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_unusable_fallback",details:{rootCompositionId:de,rootDurationSeconds:Q,fallbackKind:"composite_by_root_children",minCandidateDurationSeconds:M,selectedDurationSeconds:ke,mediaDurationFloorSeconds:h,authoredCompositionDurationFloorSeconds:b,selectedTimelineIds:se,autoNestedChildren:oe}}};let pn=ie(y??0,ge),hn=L(pn);if(pn&&P(hn))return{timeline:pn,selectedTimelineIds:[de],selectedDurationSeconds:hn,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_unusable_media_floor_fallback",details:{rootCompositionId:de,rootDurationSeconds:Q,fallbackKind:"media_duration_floor",mediaDurationFloorSeconds:h,authoredCompositionDurationFloorSeconds:b,selectedDurationSeconds:hn,selectedTimelineIds:[de],autoNestedChildren:oe}}}}if(!P(Q)&&fe.length===0){let se=ie(y??0,ge),Ne=L(se);if(se&&P(Ne))return{timeline:se,selectedTimelineIds:[de],selectedDurationSeconds:Ne,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_unusable_media_floor_fallback",details:{rootCompositionId:de,rootDurationSeconds:Q,fallbackKind:"media_duration_floor",mediaDurationFloorSeconds:h,authoredCompositionDurationFloorSeconds:b,selectedDurationSeconds:Ne,selectedTimelineIds:[de]}}}}let ue=Ie?.getAttribute("data-duration"),he=ue?parseFloat(ue):null,be=Math.max(P(he)?he:0,b??0);if(be>0&&P(be)&&P(Q)&&be>=Q+.5){let se=ge;if(typeof se.to=="function")try{se.to({},{duration:0},be)}catch(ke){_("runtime.init.site6",ke)}let Ne=L(ge);if(P(Ne))return{timeline:ge,selectedTimelineIds:[de],selectedDurationSeconds:Ne,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_padded_to_declared_duration",details:{rootCompositionId:de,rootDurationSeconds:Q,rootDeclaredDur:he,authoredCompositionDurationFloorSeconds:b,newDur:Ne}}}}return{timeline:ge,selectedTimelineIds:[de],selectedDurationSeconds:Q,mediaDurationFloorSeconds:h,diagnostics:oe.length>0?{code:"root_timeline_auto_nested_children",details:{rootCompositionId:de,selectedDurationSeconds:Q,autoNestedChildren:oe}}:void 0}}if(fe.length>0){let oe=fe.map(he=>he.compositionId),Q=G(fe),ue=L(Q);if(Q)return{timeline:Q,selectedTimelineIds:oe,selectedDurationSeconds:ue,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_missing_fallback",details:{rootCompositionId:de,fallbackKind:"composite_by_root_children",minCandidateDurationSeconds:M,selectedDurationSeconds:ue,mediaDurationFloorSeconds:h,selectedTimelineIds:oe}}}}return{timeline:null}},Y=!1,me=()=>{if(!T)return!1;let d=t.capturedTimeline,p=L(d),h=P(p);if(d&&h&&Y)return!1;let b=W();if(!b.timeline)return!1;if(d&&d===b.timeline)return typeof d.timeScale=="function"&&d.timeScale(t.playbackRate),!1;t.capturedTimeline=b.timeline,typeof t.capturedTimeline.timeScale=="function"&&t.capturedTimeline.timeScale(t.playbackRate);let y=U(t.capturedTimeline,0);if(y>0){try{I.setDuration(y)}catch{}t.capturedTimeline.pause();let M=Math.max(0,t.currentTime||0);typeof t.capturedTimeline.totalTime=="function"&&t.capturedTimeline.totalTime(M,!1)}b.diagnostics&&Ae({source:"hf-preview",type:"diagnostic",code:b.diagnostics.code,details:b.diagnostics.details}),Ae({source:"hf-preview",type:"diagnostic",code:"timeline_bound",details:{selectedTimelineIds:b.selectedTimelineIds??[],selectedDurationSeconds:b.selectedDurationSeconds??null,mediaDurationFloorSeconds:b.mediaDurationFloorSeconds??null}});for(let M of V)j.delete(M),Le(M);return!0};window.__hfForceTimelineRebind=()=>{Y=!1,me()};let Fe=()=>{let d=D();if(!(d instanceof HTMLElement))return;let p=d.getBoundingClientRect(),h=Number(d.getAttribute("data-width")),b=Number(d.getAttribute("data-height")),y=window.getComputedStyle(d),M=Number.isFinite(h)&&h>0&&Number.isFinite(b)&&b>0,te=p.width<=0||p.height<=0||d.clientWidth<=0||d.clientHeight<=0;!M||!te||l("root_stage_layout_zero",{compositionId:d.getAttribute("data-composition-id")??null,declaredWidth:h,declaredHeight:b,rectWidth:Math.round(p.width),rectHeight:Math.round(p.height),clientWidth:d.clientWidth,clientHeight:d.clientHeight,display:y.display,visibility:y.visibility,overflow:y.overflow},`root-stage-layout-zero:${d.getAttribute("data-composition-id")??"unknown"}`)},H=()=>{t.tornDown||(o!=null&&window.cancelAnimationFrame(o),o=window.requestAnimationFrame(()=>{o=null,Fe()}))},k=()=>{e=d=>{let p=E(d.error??d.message).slice(0,F);if(!p)return;let h=S(p);Ae({source:"hf-preview",type:"diagnostic",code:h.code,details:{category:h.category,message:p,filename:d.filename||null,line:Number.isFinite(d.lineno)?d.lineno:null,column:Number.isFinite(d.colno)?d.colno:null}})},n=d=>{let p=E(d.reason).slice(0,F);if(!p)return;let h=S(p);Ae({source:"hf-preview",type:"diagnostic",code:`${h.code}_unhandled_rejection`,details:{category:`${h.category}-unhandled-rejection`,message:p}})},window.addEventListener("error",e),window.addEventListener("unhandledrejection",n)},O=()=>{let d=Array.from(document.querySelectorAll("img, video, audio, source, link[rel=\'stylesheet\']"));for(let h of d){let b=()=>{if(!(h instanceof Element))return;let y=h.tagName.toLowerCase(),M=h.getAttribute("src")??h.getAttribute("href")??h.getAttribute("poster")??null,te=y==="link"?"runtime_stylesheet_load_failed":"runtime_asset_load_failed";l(te,{tagName:y,assetUrl:M,currentSrc:(h instanceof HTMLImageElement||h instanceof HTMLMediaElement)&&h.currentSrc||null,readyState:h instanceof HTMLMediaElement?h.readyState:null,networkState:h instanceof HTMLMediaElement?h.networkState:null},`${te}:${y}:${M??"unknown"}`)};h.addEventListener("error",b),s(()=>{h.removeEventListener("error",b)})}let p=document.fonts;p&&p.ready.then(()=>{if(t.tornDown)return;let h=Array.from(p).filter(b=>b.status==="error").map(b=>b.family).filter(b=>!!b).slice(0,10);h.length!==0&&l("runtime_font_load_issue",{failedFamilies:h,totalFaces:Array.from(p).length},`runtime-font-load-issue:${h.join("|")}`)}).catch(()=>{})},ne=(d,p)=>{if(!d.timeline)return!1;let h=t.capturedTimeline;if(h&&h===d.timeline)return!1;let b=Math.max(0,t.currentTime||0),y=t.isPlaying;t.capturedTimeline=d.timeline,typeof t.capturedTimeline.timeScale=="function"&&t.capturedTimeline.timeScale(t.playbackRate);try{t.capturedTimeline.pause(),t.capturedTimeline.seek(b,!1),y&&t.capturedTimeline.play()}catch(M){_("runtime.init.site7",M)}return Ae({source:"hf-preview",type:"diagnostic",code:"timeline_loop_guard_rebind",details:{reason:p,previousTime:b,selectedTimelineIds:d.selectedTimelineIds??[],selectedDurationSeconds:d.selectedDurationSeconds??null,mediaDurationFloorSeconds:d.mediaDurationFloorSeconds??null}}),!0},ee=null,z=!1,V=new Set,j=new WeakMap,Ce=()=>{t.tornDown||(ee!=null&&window.clearTimeout(ee),ee=window.setTimeout(()=>{if(t.tornDown)return;ee=null;let d=W();if(!d.timeline||!P(d.mediaDurationFloorSeconds??null))return;if(!t.capturedTimeline){me()&&(Ge(),Me(!0));return}if(z)return;let h=L(t.capturedTimeline),b=d.selectedDurationSeconds??L(d.timeline);P(b)&&(!P(h)||b>=h+f)&&ne(d,"manual")&&(z=!0,Ae({source:"hf-preview",type:"diagnostic",code:"timeline_rebind_after_media_metadata",details:{previousDurationSeconds:h??null,selectedDurationSeconds:b??null,selectedTimelineIds:d.selectedTimelineIds??[],mediaDurationFloorSeconds:d.mediaDurationFloorSeconds??null}}),Ge(),Me(!0))},x))},we=()=>{for(let d of V)d.removeEventListener("loadedmetadata",Ce),d.removeEventListener("durationchange",Ce);V.clear()},$e=()=>{if(t.tornDown)return;let d=Array.from(document.querySelectorAll("video, audio"));for(let p of d){if(V.has(p))continue;V.add(p);let h=Number.parseFloat(p.dataset.volume??"");Number.isFinite(h)&&(p.volume=Math.max(0,Math.min(1,h))),p.addEventListener("loadedmetadata",Ce),p.addEventListener("durationchange",Ce),p.preload!=="auto"&&(p.preload="auto"),p.readyState<HTMLMediaElement.HAVE_FUTURE_DATA&&p.load(),Le(p)}},Le=d=>{j.has(d)||ki(d,t.capturedTimeline,U(t.capturedTimeline,0),j)},We=()=>{let d=y=>{let M=y.closest("[data-composition-id]"),te=M?C(M,0):null,G=M?g(M,{includeAuthoredTimingAttrs:!0}):null;return{compositionRoot:M,inheritedStart:te,inheritedDuration:G}},p=vi({shouldIncludeElement:y=>y.hasAttribute("data-start")||!!d(y).compositionRoot,resolveStartSeconds:y=>{let M=d(y);return A(y,M.inheritedStart??0)},resolveDurationSeconds:y=>{let M=d(y),te=A(y,M.inheritedStart??0),G=Number.parseFloat(y.dataset.playbackStart??y.dataset.mediaStart??"0")||0,ie=M.inheritedStart!=null&&M.inheritedDuration!=null&&M.inheritedDuration>0?Math.max(0,M.inheritedStart+M.inheritedDuration-te):null,xe=Number.isFinite(y.duration)&&y.duration>G?Math.max(0,y.duration-G):null;return xe!=null&&ie!=null?Math.min(xe,ie):xe??ie}});for(let y of p.mediaClips){let M=j.get(y.el);M&&(y.volumeKeyframes=M)}let h=t.mediaForceSyncNextTick;h&&(t.mediaForceSyncNextTick=!1),_i({clips:p.mediaClips,timeSeconds:t.currentTime,playing:t.isPlaying,playbackRate:t.playbackRate,outputMuted:t.mediaOutputMuted||pe.isActive(),userMuted:t.bridgeMuted,userVolume:t.bridgeVolume,forceSync:h,onElementVolume:(y,M)=>pe.setElementVolume(y,M),onAutoplayBlocked:()=>{t.mediaAutoplayBlockedPosted||(t.mediaAutoplayBlockedPosted=!0,Ae({source:"hf-preview",type:"media-autoplay-blocked"}))}});let b=Array.from(document.querySelectorAll("[data-start]"));for(let y of b){if(!(y instanceof HTMLElement))continue;let M=y.tagName.toLowerCase();if(M==="script"||M==="style"||M==="link"||M==="meta")continue;let te=M==="video"||M==="audio"?A(y,0):C(y,0),G=g(y),ie=y.getAttribute("data-composition-id");if(ie){let de=(window.__timelines??{})[ie],ge=null;if(de&&typeof de.duration=="function"){let fe=Number(de.duration());Number.isFinite(fe)&&fe>0&&(ge=fe)}let Je=y.hasAttribute("data-composition-src")||y.hasAttribute("data-composition-file");G!=null&&G>0&&ge!=null&&!Je?G=Math.min(G,ge):(G==null||G<=0)&&ge!=null&&(G=ge)}let xe=G!=null&&G>0?te+G:Number.POSITIVE_INFINITY,Ie=t.currentTime>=te&&(Number.isFinite(xe)?t.currentTime<xe:!0);y.style.visibility=Ie?"visible":"hidden"}},Me=d=>{let p=Math.max(0,Math.round((t.currentTime||0)*t.canonicalFps)),h=Date.now();(d||p!==t.bridgeLastPostedFrame||t.isPlaying!==t.bridgeLastPostedPlaying||t.bridgeMuted!==t.bridgeLastPostedMuted||h-t.bridgeLastPostedAt>=t.bridgeMaxPostIntervalMs)&&(t.bridgeLastPostedFrame=p,t.bridgeLastPostedPlaying=t.isPlaying,t.bridgeLastPostedMuted=t.bridgeMuted,t.bridgeLastPostedAt=h,Ae({source:"hf-preview",type:"state",frame:p,isPlaying:t.isPlaying,muted:t.bridgeMuted,playbackRate:t.playbackRate}))},Ge=()=>{X(),v(),q();let d=D();if(d){let h=B(d.getAttribute("data-width")),b=B(d.getAttribute("data-height")),y=h?parseInt(h,10):0,M=b?parseInt(b,10):0;y>0&&M>0&&Ae({source:"hf-preview",type:"stage-size",width:y,height:M})}me();let p=Wi({canonicalFps:t.canonicalFps});window.__clipManifest=p,Ae(p),H()},De=(d,p=0)=>{for(let h of t.deterministicAdapters){try{d==="discover"&&h.discover(),d==="pause"&&h.pause(),d==="play"&&h.play&&h.play()}catch(b){_("runtime.init.site8",b)}if(d==="discover")try{h.seek({time:p})}catch(b){_("runtime.init.site9",b)}}};if(T)ni();else{let d={injectedStyles:t.injectedCompStyles,injectedScripts:t.injectedCompScripts,parseDimensionPx:B,onDiagnostic:({code:p,details:h})=>{Ae({source:"hf-preview",type:"diagnostic",code:p,details:h})}};Ao(d).then(()=>bo(d)).finally(()=>{T=!0,me(),window.__renderReady=!0,$e(),De("discover",t.currentTime),O(),ni(),Ge(),Me(!0)})}let Pt=Ri({postMessage:d=>Ae(d)});Pt.installPickerApi();let dn=d=>{let p=Number(d);!Number.isFinite(p)||p<=0?t.playbackRate=1:t.playbackRate=Math.max(.1,Math.min(5,p)),t.mediaForceSyncNextTick=!0,t.capturedTimeline&&typeof t.capturedTimeline.timeScale=="function"&&t.capturedTimeline.timeScale(t.playbackRate);let h=document.querySelectorAll("video, audio");for(let b of h)if(b instanceof HTMLMediaElement)try{b.playbackRate=t.playbackRate}catch(y){_("runtime.init.site10",y)}},ce=Di({getTimeline:()=>t.capturedTimeline,setTimeline:d=>{t.capturedTimeline=d},getTimelineRegistry:()=>window.__timelines??{},getIsPlaying:()=>t.isPlaying,setIsPlaying:d=>{t.isPlaying!==d&&(t.mediaForceSyncNextTick=!0),t.isPlaying=d},getPlaybackRate:()=>t.playbackRate,setPlaybackRate:dn,getCanonicalFps:()=>t.canonicalFps,onSyncMedia:(d,p)=>{t.currentTime=Math.max(0,Number(d)||0),t.isPlaying!==p&&(t.mediaForceSyncNextTick=!0),t.isPlaying=p,We()},onStatePost:Me,onDeterministicSeek:d=>{for(let p of t.deterministicAdapters)try{p.seek({time:Number(d)||0})}catch(h){_("runtime.init.site11",h)}},onDeterministicPause:()=>De("pause"),onDeterministicPlay:()=>De("play"),onRenderFrameSeek:()=>{},onShowNativeVideos:()=>{},getSafeDuration:()=>U(t.capturedTimeline,0)});window.__player=a(ce),window.__playerReady=!0,xi(Ae),dt("composition_loaded",{duration:ce.getDuration(),compositionId:document.querySelector("[data-composition-id]")?.getAttribute("data-composition-id")??null}),t.controlBridgeHandler=hi({onPlay:()=>{ce.play(),dt("composition_played",{time:ce.getTime()})},onPause:()=>{ce.pause(),dt("composition_paused",{time:ce.getTime()})},onSeek:(d,p)=>{let h=Math.max(0,d)/t.canonicalFps;ce.seek(h),dt("composition_seeked",{time:h})},onSetMuted:d=>{t.bridgeMuted=d;let p=d||t.mediaOutputMuted;pe.setMuted(p);let h=document.querySelectorAll("video, audio");for(let b of h)b instanceof HTMLMediaElement&&(b.muted=p)},onSetVolume:d=>{t.bridgeVolume=d,pe.setVolume(d);let p=document.querySelectorAll("video, audio");for(let h of p){if(!(h instanceof HTMLMediaElement))continue;let b=parseFloat(h.dataset.volume??""),y=Number.isFinite(b)?b:1;h.volume=y*d}},onSetMediaOutputMuted:d=>{t.mediaOutputMuted=d;let p=d||t.bridgeMuted;pe.setMuted(p);let h=document.querySelectorAll("video, audio");for(let b of h)b instanceof HTMLMediaElement&&(b.muted=p)},onSetPlaybackRate:d=>{dn(d),t.transportClock&&t.transportClock.setRate(t.playbackRate),pe.setRate(t.playbackRate)},onTick:()=>{if(t.tornDown||!I.isPlaying())return;let d=I.now();if(t.currentTime=d,Ke(d),I.reachedEnd()){pe.stopAll(),I.detachAudioSource(),I.pause(),t.isPlaying=!1;let p=I.getDuration();Number.isFinite(p)&&(I.seek(p),t.currentTime=p,Ke(p)),De("pause"),We(),Me(!0)}},onEnablePickMode:()=>Pt.enablePickMode(),onDisablePickMode:()=>Pt.disablePickMode()}),me(),t.capturedTimeline&&(ce._timeline=t.capturedTimeline),window.__renderReady=!0,T&&setTimeout(()=>{let d=t.capturedTimeline;me()&&t.capturedTimeline!==d&&(ce._timeline=t.capturedTimeline),De("discover",t.currentTime),window.__renderReady=!0,Ge(),Me(!0)},0),t.deterministicAdapters=[Mi(),gi({resolveStartSeconds:d=>C(d,0)}),Si(),Ei(),wi(),Ni(),yi({getTimeline:()=>t.capturedTimeline})],Ci(),k(),$e(),De("discover");let I=new rn;t.transportClock=I;let pe=new on,di=!1;pe.init().then(d=>{di=d});let Wt=0,fn=!1,Zo=(d,p,h)=>{try{d.pause(),typeof d.totalTime=="function"?d.totalTime(p,!1):d.seek(p,!1)}catch(b){_(h,b)}},Xo=d=>{let p=window.__timelines??{},h=D()?.getAttribute("data-composition-id")??null;for(let[b,y]of Object.entries(p)){if(!y||b===h)continue;let M=document.querySelector(`[data-composition-id="${CSS.escape(b)}"]`);if(!M)continue;let te=C(M,0);if(!Number.isFinite(te))continue;let G=g(M,{includeAuthoredTimingAttrs:!0}),ie=L(y),xe=G!=null&&G>0?G:ie,Ie=Math.max(0,xe!=null&&xe>0?Math.min(xe,d-te):d-te);Zo(y,Ie,"runtime.init.transport.childTimeline")}},es=d=>{let p=window.__timelines??{};for(let h of Object.values(p))if(!(!h||h===d))try{h.play()}catch(b){_("runtime.init.activateSiblings",b)}},Ke=(d,p)=>{let h=t.capturedTimeline;if(h){p?.activateChildren&&es(h);try{typeof h.totalTime=="function"?h.totalTime(d,!1):h.seek(d,!1)}catch(b){_("runtime.init.transport.seek",b)}}else Xo(d);for(let b of t.deterministicAdapters)try{b.seek({time:d})}catch(y){_("runtime.init.transport.adapter",y)}},fi=()=>{if(!(t.tornDown||fn)){fn=!0;try{if(t.transportRafId=window.requestAnimationFrame(fi),Wt+=1,Wt%60===0&&!(I.isPlaying()&&t.capturedTimeline!=null&&I.now()<m)){let h=t.capturedTimeline;if(me()){t.capturedTimeline&&!ce._timeline&&(ce._timeline=t.capturedTimeline),t.capturedTimeline&&t.capturedTimeline!==h&&t.capturedTimeline.pause();let b=U(t.capturedTimeline,0);b>0&&I.setDuration(b),Ge()}}if(Wt%20===0&&Ge(),Wt%30===0&&$e(),t.capturedTimeline){let p=U(t.capturedTimeline,0);p>0&&I.setDuration(p)}if(I.isPlaying()&&!t.mediaOutputMuted)if(pe.isActive()&&pe.context){let p=pe.getTime();p>=0&&I.attachAudioSource({currentTimeSeconds:p})}else{let p=document.querySelectorAll("audio[data-start]"),h=!1;for(let b of p){if(!(b instanceof HTMLMediaElement)||!b.isConnected)continue;let y=Number.parseFloat(b.dataset.start??""),M=Number.parseFloat(b.dataset.duration??""),te=Number.isFinite(M)&&M>0?y+M:1/0,G=Number.parseFloat(b.dataset.playbackStart??b.dataset.mediaStart??"0")||0;if(Number.isFinite(y)&&t.currentTime>=y&&t.currentTime<te){b.paused?!b.error&&b.readyState<HTMLMediaElement.HAVE_FUTURE_DATA&&(I.attachAudioSource({currentTimeSeconds:t.currentTime}),h=!0):(I.attachAudioSource({el:b,compositionStart:y,mediaStart:G}),h=!0);break}}!h&&I.hasAudioSource()&&I.detachAudioSource()}else I.hasAudioSource()&&I.detachAudioSource();let d=I.now();if(t.currentTime=d,Ke(d),I.isPlaying()&&I.reachedEnd()){pe.stopAll(),I.detachAudioSource(),I.pause(),t.isPlaying=!1;let p=I.getDuration();Number.isFinite(p)&&(I.seek(p),t.currentTime=p,Ke(p)),De("pause"),We(),Me(!0);return}I.isPlaying()&&We(),Me(!1)}finally{fn=!1}}},mi=d=>{let p=document.querySelectorAll("video, audio");for(let h of p){if(!(h instanceof HTMLMediaElement)||!h.isConnected)continue;let b=Number.parseFloat(h.dataset.start??"");if(!Number.isFinite(b))continue;let y=Number.parseFloat(h.dataset.duration??""),M=Number.isFinite(y)&&y>0?b+y:1/0;if(d<b||d>=M)continue;let te=Number.parseFloat(h.dataset.playbackStart??h.dataset.mediaStart??"0")||0,G=d-b+te;if(G>=0)try{h.currentTime=G}catch{}}};if(ce.play=()=>{let d=t.capturedTimeline;if(I.isPlaying())return;let p=U(d,0);if(p>0)I.setDuration(p),I.reachedEnd()&&(I.seek(0),t.currentTime=0,Ke(0));else{let h=D(),b=Number(h?.getAttribute("data-duration")??0);b>0&&I.setDuration(b)}if(d&&d.pause(),!!I.play()){if(t.isPlaying=!0,t.mediaForceSyncNextTick=!0,mi(I.now()),di){let h=pe.startGeneration(),b=document.querySelectorAll("audio[data-start]");for(let y of b){if(!(y instanceof HTMLMediaElement)||!y.isConnected)continue;let M=Number.parseFloat(y.dataset.start??"");if(!Number.isFinite(M))continue;let te=Number.parseFloat(y.dataset.playbackStart??y.dataset.mediaStart??"0")||0,G=Number.parseFloat(y.dataset.volume??""),ie=Number.isFinite(G)?G:1;pe.decodeAudioElement(y).then(xe=>{!xe||!I.isPlaying()||pe.schedulePlayback(y,xe,M,te,I.now(),ie*t.bridgeVolume,h,t.playbackRate)})}}De("play"),We(),Me(!0)}},ce.pause=()=>{if(!I.isPlaying())return;pe.stopAll(),I.detachAudioSource(),I.pause(),t.isPlaying=!1,t.currentTime=I.now(),t.mediaForceSyncNextTick=!0,mi(t.currentTime);let d=t.capturedTimeline;d&&d.pause(),De("pause"),We(),Me(!0)},ce.seek=d=>{let p=tt(Math.max(0,Number(d)||0),t.canonicalFps);pe.stopAll(),I.detachAudioSource(),I.isPlaying()&&I.pause(),I.seek(p),t.currentTime=I.now(),t.isPlaying=!1,t.mediaForceSyncNextTick=!0;let b=t.capturedTimeline;b&&b.pause(),Ke(t.currentTime),De("pause"),We(),Me(!0)},ce.renderSeek=d=>{let p=tt(Math.max(0,Number(d)||0),t.canonicalFps);I.isPlaying()&&I.pause(),I.seek(p),t.currentTime=I.now(),t.isPlaying=!1,t.mediaForceSyncNextTick=!0,Ke(t.currentTime,{activateChildren:!0}),We(),Me(!0)},ce.getTime=()=>I.now(),ce.getDuration=()=>{let d=I.getDuration();return Number.isFinite(d)?d:0},ce.isPlaying=()=>I.isPlaying(),ce.setPlaybackRate=d=>{dn(d),I.setRate(t.playbackRate),pe.setRate(t.playbackRate)},t.capturedTimeline){let d=U(t.capturedTimeline,0);d>0&&I.setDuration(d),t.capturedTimeline.pause()}let pi=window.__player;if(pi){let d=["play","pause","seek","renderSeek","getTime","getDuration","isPlaying"];for(let p of d)Object.defineProperty(pi,p,{get:()=>ce[p],set:h=>{ce[p]=h},configurable:!0})}t.transportRafId=window.requestAnimationFrame(fi),Ge(),Me(!0);let mn=()=>{if(!t.tornDown){t.tornDown=!0,t.transportRafId!=null&&(window.cancelAnimationFrame(t.transportRafId),t.transportRafId=null),t.transportClock=null,pe.destroy(),ee!=null&&(window.clearTimeout(ee),ee=null),o!=null&&(window.cancelAnimationFrame(o),o=null),we(),t.controlBridgeHandler&&(window.removeEventListener("message",t.controlBridgeHandler),t.controlBridgeHandler=null),e&&(window.removeEventListener("error",e),e=null),n&&(window.removeEventListener("unhandledrejection",n),n=null),t.beforeUnloadHandler&&(window.removeEventListener("beforeunload",t.beforeUnloadHandler),t.beforeUnloadHandler=null),Pt.disablePickMode();for(let d of t.deterministicAdapters)if(!(!d||typeof d.revert!="function"))try{d.revert()}catch(p){_("runtime.init.site12",p)}t.deterministicAdapters=[];for(let d of i.splice(0))try{d()}catch(p){_("runtime.init.site13",p)}for(let d of t.injectedCompStyles)try{d.remove()}catch(p){_("runtime.init.site14",p)}t.injectedCompStyles=[];for(let d of t.injectedCompScripts)try{d.remove()}catch(p){_("runtime.init.site15",p)}t.injectedCompScripts=[],t.capturedTimeline=null,window.__hfRuntimeTeardown===mn&&(window.__hfRuntimeTeardown=null)}};window.__hfRuntimeTeardown=mn,t.beforeUnloadHandler=mn,window.addEventListener("beforeunload",t.beforeUnloadHandler)}var Co=["BN","BN","BN","BN","BN","BN","BN","BN","BN","S","B","S","WS","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","B","B","B","S","WS","ON","ON","ET","ET","ET","ON","ON","ON","ON","ON","ES","CS","ES","CS","CS","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","CS","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","BN","BN","BN","BN","BN","BN","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","CS","ON","ET","ET","ET","ET","ON","ON","ON","ON","L","ON","ON","BN","ON","ON","ET","ET","EN","EN","ON","L","ON","ON","ON","EN","L","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L"],ii=[[697,698,"ON"],[706,719,"ON"],[722,735,"ON"],[741,749,"ON"],[751,767,"ON"],[768,879,"NSM"],[884,885,"ON"],[894,894,"ON"],[900,901,"ON"],[903,903,"ON"],[1014,1014,"ON"],[1155,1161,"NSM"],[1418,1418,"ON"],[1421,1422,"ON"],[1423,1423,"ET"],[1424,1424,"R"],[1425,1469,"NSM"],[1470,1470,"R"],[1471,1471,"NSM"],[1472,1472,"R"],[1473,1474,"NSM"],[1475,1475,"R"],[1476,1477,"NSM"],[1478,1478,"R"],[1479,1479,"NSM"],[1480,1535,"R"],[1536,1541,"AN"],[1542,1543,"ON"],[1544,1544,"AL"],[1545,1546,"ET"],[1547,1547,"AL"],[1548,1548,"CS"],[1549,1549,"AL"],[1550,1551,"ON"],[1552,1562,"NSM"],[1563,1610,"AL"],[1611,1631,"NSM"],[1632,1641,"AN"],[1642,1642,"ET"],[1643,1644,"AN"],[1645,1647,"AL"],[1648,1648,"NSM"],[1649,1749,"AL"],[1750,1756,"NSM"],[1757,1757,"AN"],[1758,1758,"ON"],[1759,1764,"NSM"],[1765,1766,"AL"],[1767,1768,"NSM"],[1769,1769,"ON"],[1770,1773,"NSM"],[1774,1775,"AL"],[1776,1785,"EN"],[1786,1808,"AL"],[1809,1809,"NSM"],[1810,1839,"AL"],[1840,1866,"NSM"],[1867,1957,"AL"],[1958,1968,"NSM"],[1969,1983,"AL"],[1984,2026,"R"],[2027,2035,"NSM"],[2036,2037,"R"],[2038,2041,"ON"],[2042,2044,"R"],[2045,2045,"NSM"],[2046,2069,"R"],[2070,2073,"NSM"],[2074,2074,"R"],[2075,2083,"NSM"],[2084,2084,"R"],[2085,2087,"NSM"],[2088,2088,"R"],[2089,2093,"NSM"],[2094,2136,"R"],[2137,2139,"NSM"],[2140,2143,"R"],[2144,2191,"AL"],[2192,2193,"AN"],[2194,2198,"AL"],[2199,2207,"NSM"],[2208,2249,"AL"],[2250,2273,"NSM"],[2274,2274,"AN"],[2275,2306,"NSM"],[2362,2362,"NSM"],[2364,2364,"NSM"],[2369,2376,"NSM"],[2381,2381,"NSM"],[2385,2391,"NSM"],[2402,2403,"NSM"],[2433,2433,"NSM"],[2492,2492,"NSM"],[2497,2500,"NSM"],[2509,2509,"NSM"],[2530,2531,"NSM"],[2546,2547,"ET"],[2555,2555,"ET"],[2558,2558,"NSM"],[2561,2562,"NSM"],[2620,2620,"NSM"],[2625,2626,"NSM"],[2631,2632,"NSM"],[2635,2637,"NSM"],[2641,2641,"NSM"],[2672,2673,"NSM"],[2677,2677,"NSM"],[2689,2690,"NSM"],[2748,2748,"NSM"],[2753,2757,"NSM"],[2759,2760,"NSM"],[2765,2765,"NSM"],[2786,2787,"NSM"],[2801,2801,"ET"],[2810,2815,"NSM"],[2817,2817,"NSM"],[2876,2876,"NSM"],[2879,2879,"NSM"],[2881,2884,"NSM"],[2893,2893,"NSM"],[2901,2902,"NSM"],[2914,2915,"NSM"],[2946,2946,"NSM"],[3008,3008,"NSM"],[3021,3021,"NSM"],[3059,3064,"ON"],[3065,3065,"ET"],[3066,3066,"ON"],[3072,3072,"NSM"],[3076,3076,"NSM"],[3132,3132,"NSM"],[3134,3136,"NSM"],[3142,3144,"NSM"],[3146,3149,"NSM"],[3157,3158,"NSM"],[3170,3171,"NSM"],[3192,3198,"ON"],[3201,3201,"NSM"],[3260,3260,"NSM"],[3276,3277,"NSM"],[3298,3299,"NSM"],[3328,3329,"NSM"],[3387,3388,"NSM"],[3393,3396,"NSM"],[3405,3405,"NSM"],[3426,3427,"NSM"],[3457,3457,"NSM"],[3530,3530,"NSM"],[3538,3540,"NSM"],[3542,3542,"NSM"],[3633,3633,"NSM"],[3636,3642,"NSM"],[3647,3647,"ET"],[3655,3662,"NSM"],[3761,3761,"NSM"],[3764,3772,"NSM"],[3784,3790,"NSM"],[3864,3865,"NSM"],[3893,3893,"NSM"],[3895,3895,"NSM"],[3897,3897,"NSM"],[3898,3901,"ON"],[3953,3966,"NSM"],[3968,3972,"NSM"],[3974,3975,"NSM"],[3981,3991,"NSM"],[3993,4028,"NSM"],[4038,4038,"NSM"],[4141,4144,"NSM"],[4146,4151,"NSM"],[4153,4154,"NSM"],[4157,4158,"NSM"],[4184,4185,"NSM"],[4190,4192,"NSM"],[4209,4212,"NSM"],[4226,4226,"NSM"],[4229,4230,"NSM"],[4237,4237,"NSM"],[4253,4253,"NSM"],[4957,4959,"NSM"],[5008,5017,"ON"],[5120,5120,"ON"],[5760,5760,"WS"],[5787,5788,"ON"],[5906,5908,"NSM"],[5938,5939,"NSM"],[5970,5971,"NSM"],[6002,6003,"NSM"],[6068,6069,"NSM"],[6071,6077,"NSM"],[6086,6086,"NSM"],[6089,6099,"NSM"],[6107,6107,"ET"],[6109,6109,"NSM"],[6128,6137,"ON"],[6144,6154,"ON"],[6155,6157,"NSM"],[6158,6158,"BN"],[6159,6159,"NSM"],[6277,6278,"NSM"],[6313,6313,"NSM"],[6432,6434,"NSM"],[6439,6440,"NSM"],[6450,6450,"NSM"],[6457,6459,"NSM"],[6464,6464,"ON"],[6468,6469,"ON"],[6622,6655,"ON"],[6679,6680,"NSM"],[6683,6683,"NSM"],[6742,6742,"NSM"],[6744,6750,"NSM"],[6752,6752,"NSM"],[6754,6754,"NSM"],[6757,6764,"NSM"],[6771,6780,"NSM"],[6783,6783,"NSM"],[6832,6877,"NSM"],[6880,6891,"NSM"],[6912,6915,"NSM"],[6964,6964,"NSM"],[6966,6970,"NSM"],[6972,6972,"NSM"],[6978,6978,"NSM"],[7019,7027,"NSM"],[7040,7041,"NSM"],[7074,7077,"NSM"],[7080,7081,"NSM"],[7083,7085,"NSM"],[7142,7142,"NSM"],[7144,7145,"NSM"],[7149,7149,"NSM"],[7151,7153,"NSM"],[7212,7219,"NSM"],[7222,7223,"NSM"],[7376,7378,"NSM"],[7380,7392,"NSM"],[7394,7400,"NSM"],[7405,7405,"NSM"],[7412,7412,"NSM"],[7416,7417,"NSM"],[7616,7679,"NSM"],[8125,8125,"ON"],[8127,8129,"ON"],[8141,8143,"ON"],[8157,8159,"ON"],[8173,8175,"ON"],[8189,8190,"ON"],[8192,8202,"WS"],[8203,8205,"BN"],[8207,8207,"R"],[8208,8231,"ON"],[8232,8232,"WS"],[8233,8233,"B"],[8234,8238,"BN"],[8239,8239,"CS"],[8240,8244,"ET"],[8245,8259,"ON"],[8260,8260,"CS"],[8261,8286,"ON"],[8287,8287,"WS"],[8288,8303,"BN"],[8304,8304,"EN"],[8308,8313,"EN"],[8314,8315,"ES"],[8316,8318,"ON"],[8320,8329,"EN"],[8330,8331,"ES"],[8332,8334,"ON"],[8352,8399,"ET"],[8400,8432,"NSM"],[8448,8449,"ON"],[8451,8454,"ON"],[8456,8457,"ON"],[8468,8468,"ON"],[8470,8472,"ON"],[8478,8483,"ON"],[8485,8485,"ON"],[8487,8487,"ON"],[8489,8489,"ON"],[8494,8494,"ET"],[8506,8507,"ON"],[8512,8516,"ON"],[8522,8525,"ON"],[8528,8543,"ON"],[8585,8587,"ON"],[8592,8721,"ON"],[8722,8722,"ES"],[8723,8723,"ET"],[8724,9013,"ON"],[9083,9108,"ON"],[9110,9257,"ON"],[9280,9290,"ON"],[9312,9351,"ON"],[9352,9371,"EN"],[9450,9899,"ON"],[9901,10239,"ON"],[10496,11123,"ON"],[11126,11263,"ON"],[11493,11498,"ON"],[11503,11505,"NSM"],[11513,11519,"ON"],[11647,11647,"NSM"],[11744,11775,"NSM"],[11776,11869,"ON"],[11904,11929,"ON"],[11931,12019,"ON"],[12032,12245,"ON"],[12272,12287,"ON"],[12288,12288,"WS"],[12289,12292,"ON"],[12296,12320,"ON"],[12330,12333,"NSM"],[12336,12336,"ON"],[12342,12343,"ON"],[12349,12351,"ON"],[12441,12442,"NSM"],[12443,12444,"ON"],[12448,12448,"ON"],[12539,12539,"ON"],[12736,12773,"ON"],[12783,12783,"ON"],[12829,12830,"ON"],[12880,12895,"ON"],[12924,12926,"ON"],[12977,12991,"ON"],[13004,13007,"ON"],[13175,13178,"ON"],[13278,13279,"ON"],[13311,13311,"ON"],[19904,19967,"ON"],[42128,42182,"ON"],[42509,42511,"ON"],[42607,42610,"NSM"],[42611,42611,"ON"],[42612,42621,"NSM"],[42622,42623,"ON"],[42654,42655,"NSM"],[42736,42737,"NSM"],[42752,42785,"ON"],[42888,42888,"ON"],[43010,43010,"NSM"],[43014,43014,"NSM"],[43019,43019,"NSM"],[43045,43046,"NSM"],[43048,43051,"ON"],[43052,43052,"NSM"],[43064,43065,"ET"],[43124,43127,"ON"],[43204,43205,"NSM"],[43232,43249,"NSM"],[43263,43263,"NSM"],[43302,43309,"NSM"],[43335,43345,"NSM"],[43392,43394,"NSM"],[43443,43443,"NSM"],[43446,43449,"NSM"],[43452,43453,"NSM"],[43493,43493,"NSM"],[43561,43566,"NSM"],[43569,43570,"NSM"],[43573,43574,"NSM"],[43587,43587,"NSM"],[43596,43596,"NSM"],[43644,43644,"NSM"],[43696,43696,"NSM"],[43698,43700,"NSM"],[43703,43704,"NSM"],[43710,43711,"NSM"],[43713,43713,"NSM"],[43756,43757,"NSM"],[43766,43766,"NSM"],[43882,43883,"ON"],[44005,44005,"NSM"],[44008,44008,"NSM"],[44013,44013,"NSM"],[64285,64285,"R"],[64286,64286,"NSM"],[64287,64296,"R"],[64297,64297,"ES"],[64298,64335,"R"],[64336,64450,"AL"],[64451,64466,"ON"],[64467,64829,"AL"],[64830,64847,"ON"],[64848,64911,"AL"],[64912,64913,"ON"],[64914,64967,"AL"],[64968,64975,"ON"],[64976,65007,"BN"],[65008,65020,"AL"],[65021,65023,"ON"],[65024,65039,"NSM"],[65040,65049,"ON"],[65056,65071,"NSM"],[65072,65103,"ON"],[65104,65104,"CS"],[65105,65105,"ON"],[65106,65106,"CS"],[65108,65108,"ON"],[65109,65109,"CS"],[65110,65118,"ON"],[65119,65119,"ET"],[65120,65121,"ON"],[65122,65123,"ES"],[65124,65126,"ON"],[65128,65128,"ON"],[65129,65130,"ET"],[65131,65131,"ON"],[65136,65278,"AL"],[65279,65279,"BN"],[65281,65282,"ON"],[65283,65285,"ET"],[65286,65290,"ON"],[65291,65291,"ES"],[65292,65292,"CS"],[65293,65293,"ES"],[65294,65295,"CS"],[65296,65305,"EN"],[65306,65306,"CS"],[65307,65312,"ON"],[65339,65344,"ON"],[65371,65381,"ON"],[65504,65505,"ET"],[65506,65508,"ON"],[65509,65510,"ET"],[65512,65518,"ON"],[65520,65528,"BN"],[65529,65533,"ON"],[65534,65535,"BN"],[65793,65793,"ON"],[65856,65932,"ON"],[65936,65948,"ON"],[65952,65952,"ON"],[66045,66045,"NSM"],[66272,66272,"NSM"],[66273,66299,"EN"],[66422,66426,"NSM"],[67584,67870,"R"],[67871,67871,"ON"],[67872,68096,"R"],[68097,68099,"NSM"],[68100,68100,"R"],[68101,68102,"NSM"],[68103,68107,"R"],[68108,68111,"NSM"],[68112,68151,"R"],[68152,68154,"NSM"],[68155,68158,"R"],[68159,68159,"NSM"],[68160,68324,"R"],[68325,68326,"NSM"],[68327,68408,"R"],[68409,68415,"ON"],[68416,68863,"R"],[68864,68899,"AL"],[68900,68903,"NSM"],[68904,68911,"AL"],[68912,68921,"AN"],[68922,68927,"AL"],[68928,68937,"AN"],[68938,68968,"R"],[68969,68973,"NSM"],[68974,68974,"ON"],[68975,69215,"R"],[69216,69246,"AN"],[69247,69290,"R"],[69291,69292,"NSM"],[69293,69311,"R"],[69312,69327,"AL"],[69328,69336,"ON"],[69337,69369,"AL"],[69370,69375,"NSM"],[69376,69423,"R"],[69424,69445,"AL"],[69446,69456,"NSM"],[69457,69487,"AL"],[69488,69505,"R"],[69506,69509,"NSM"],[69510,69631,"R"],[69633,69633,"NSM"],[69688,69702,"NSM"],[69714,69733,"ON"],[69744,69744,"NSM"],[69747,69748,"NSM"],[69759,69761,"NSM"],[69811,69814,"NSM"],[69817,69818,"NSM"],[69826,69826,"NSM"],[69888,69890,"NSM"],[69927,69931,"NSM"],[69933,69940,"NSM"],[70003,70003,"NSM"],[70016,70017,"NSM"],[70070,70078,"NSM"],[70089,70092,"NSM"],[70095,70095,"NSM"],[70191,70193,"NSM"],[70196,70196,"NSM"],[70198,70199,"NSM"],[70206,70206,"NSM"],[70209,70209,"NSM"],[70367,70367,"NSM"],[70371,70378,"NSM"],[70400,70401,"NSM"],[70459,70460,"NSM"],[70464,70464,"NSM"],[70502,70508,"NSM"],[70512,70516,"NSM"],[70587,70592,"NSM"],[70606,70606,"NSM"],[70608,70608,"NSM"],[70610,70610,"NSM"],[70625,70626,"NSM"],[70712,70719,"NSM"],[70722,70724,"NSM"],[70726,70726,"NSM"],[70750,70750,"NSM"],[70835,70840,"NSM"],[70842,70842,"NSM"],[70847,70848,"NSM"],[70850,70851,"NSM"],[71090,71093,"NSM"],[71100,71101,"NSM"],[71103,71104,"NSM"],[71132,71133,"NSM"],[71219,71226,"NSM"],[71229,71229,"NSM"],[71231,71232,"NSM"],[71264,71276,"ON"],[71339,71339,"NSM"],[71341,71341,"NSM"],[71344,71349,"NSM"],[71351,71351,"NSM"],[71453,71453,"NSM"],[71455,71455,"NSM"],[71458,71461,"NSM"],[71463,71467,"NSM"],[71727,71735,"NSM"],[71737,71738,"NSM"],[71995,71996,"NSM"],[71998,71998,"NSM"],[72003,72003,"NSM"],[72148,72151,"NSM"],[72154,72155,"NSM"],[72160,72160,"NSM"],[72193,72198,"NSM"],[72201,72202,"NSM"],[72243,72248,"NSM"],[72251,72254,"NSM"],[72263,72263,"NSM"],[72273,72278,"NSM"],[72281,72283,"NSM"],[72330,72342,"NSM"],[72344,72345,"NSM"],[72544,72544,"NSM"],[72546,72548,"NSM"],[72550,72550,"NSM"],[72752,72758,"NSM"],[72760,72765,"NSM"],[72850,72871,"NSM"],[72874,72880,"NSM"],[72882,72883,"NSM"],[72885,72886,"NSM"],[73009,73014,"NSM"],[73018,73018,"NSM"],[73020,73021,"NSM"],[73023,73029,"NSM"],[73031,73031,"NSM"],[73104,73105,"NSM"],[73109,73109,"NSM"],[73111,73111,"NSM"],[73459,73460,"NSM"],[73472,73473,"NSM"],[73526,73530,"NSM"],[73536,73536,"NSM"],[73538,73538,"NSM"],[73562,73562,"NSM"],[73685,73692,"ON"],[73693,73696,"ET"],[73697,73713,"ON"],[78912,78912,"NSM"],[78919,78933,"NSM"],[90398,90409,"NSM"],[90413,90415,"NSM"],[92912,92916,"NSM"],[92976,92982,"NSM"],[94031,94031,"NSM"],[94095,94098,"NSM"],[94178,94178,"ON"],[94180,94180,"NSM"],[113821,113822,"NSM"],[113824,113827,"BN"],[117760,117973,"ON"],[118e3,118009,"EN"],[118010,118012,"ON"],[118016,118451,"ON"],[118458,118480,"ON"],[118496,118512,"ON"],[118528,118573,"NSM"],[118576,118598,"NSM"],[119143,119145,"NSM"],[119155,119162,"BN"],[119163,119170,"NSM"],[119173,119179,"NSM"],[119210,119213,"NSM"],[119273,119274,"ON"],[119296,119361,"ON"],[119362,119364,"NSM"],[119365,119365,"ON"],[119552,119638,"ON"],[120513,120513,"ON"],[120539,120539,"ON"],[120571,120571,"ON"],[120597,120597,"ON"],[120629,120629,"ON"],[120655,120655,"ON"],[120687,120687,"ON"],[120713,120713,"ON"],[120745,120745,"ON"],[120771,120771,"ON"],[120782,120831,"EN"],[121344,121398,"NSM"],[121403,121452,"NSM"],[121461,121461,"NSM"],[121476,121476,"NSM"],[121499,121503,"NSM"],[121505,121519,"NSM"],[122880,122886,"NSM"],[122888,122904,"NSM"],[122907,122913,"NSM"],[122915,122916,"NSM"],[122918,122922,"NSM"],[123023,123023,"NSM"],[123184,123190,"NSM"],[123566,123566,"NSM"],[123628,123631,"NSM"],[123647,123647,"ET"],[124140,124143,"NSM"],[124398,124399,"NSM"],[124643,124643,"NSM"],[124646,124646,"NSM"],[124654,124655,"NSM"],[124661,124661,"NSM"],[124928,125135,"R"],[125136,125142,"NSM"],[125143,125251,"R"],[125252,125258,"NSM"],[125259,126063,"R"],[126064,126143,"AL"],[126144,126207,"R"],[126208,126287,"AL"],[126288,126463,"R"],[126464,126703,"AL"],[126704,126705,"ON"],[126706,126719,"AL"],[126720,126975,"R"],[126976,127019,"ON"],[127024,127123,"ON"],[127136,127150,"ON"],[127153,127167,"ON"],[127169,127183,"ON"],[127185,127221,"ON"],[127232,127242,"EN"],[127243,127247,"ON"],[127279,127279,"ON"],[127338,127343,"ON"],[127405,127405,"ON"],[127584,127589,"ON"],[127744,128728,"ON"],[128732,128748,"ON"],[128752,128764,"ON"],[128768,128985,"ON"],[128992,129003,"ON"],[129008,129008,"ON"],[129024,129035,"ON"],[129040,129095,"ON"],[129104,129113,"ON"],[129120,129159,"ON"],[129168,129197,"ON"],[129200,129211,"ON"],[129216,129217,"ON"],[129232,129240,"ON"],[129280,129623,"ON"],[129632,129645,"ON"],[129648,129660,"ON"],[129664,129674,"ON"],[129678,129734,"ON"],[129736,129736,"ON"],[129741,129756,"ON"],[129759,129770,"ON"],[129775,129784,"ON"],[129792,129938,"ON"],[129940,130031,"ON"],[130032,130041,"EN"],[130042,130042,"ON"],[131070,131071,"BN"],[196606,196607,"BN"],[262142,262143,"BN"],[327678,327679,"BN"],[393214,393215,"BN"],[458750,458751,"BN"],[524286,524287,"BN"],[589822,589823,"BN"],[655358,655359,"BN"],[720894,720895,"BN"],[786430,786431,"BN"],[851966,851967,"BN"],[917502,917759,"BN"],[917760,917999,"NSM"],[918e3,921599,"BN"],[983038,983039,"BN"],[1048574,1048575,"BN"],[1114110,1114111,"BN"]];function Al(t){if(t<=255)return Co[t];let e=0,n=ii.length-1;for(;e<=n;){let i=e+n>>1,r=ii[i];if(t<r[0]){n=i-1;continue}if(t>r[1]){e=i+1;continue}return r[2]}return"L"}function El(t){let e=t.length;if(e===0)return null;let n=new Array(e),i=!1;for(let c=0;c<e;){let u=t.charCodeAt(c),m=u,f=1;if(u>=55296&&u<=56319&&c+1<e){let F=t.charCodeAt(c+1);F>=56320&&F<=57343&&(m=(u-55296<<10)+(F-56320)+65536,f=2)}let x=Al(m);(x==="R"||x==="AL"||x==="AN")&&(i=!0);for(let F=0;F<f;F++)n[c+F]=x;c+=f}if(!i)return null;let r=0;for(let c=0;c<e;c++){let u=n[c];if(u==="L"){r=0;break}if(u==="R"||u==="AL"){r=1;break}}let o=new Int8Array(e);for(let c=0;c<e;c++)o[c]=r;let s=r&1?"R":"L",l=s,a=l;for(let c=0;c<e;c++)n[c]==="NSM"?n[c]=a:a=n[c];a=l;for(let c=0;c<e;c++){let u=n[c];u==="EN"?n[c]=a==="AL"?"AN":"EN":(u==="R"||u==="L"||u==="AL")&&(a=u)}for(let c=0;c<e;c++)n[c]==="AL"&&(n[c]="R");for(let c=1;c<e-1;c++)n[c]==="ES"&&n[c-1]==="EN"&&n[c+1]==="EN"&&(n[c]="EN"),n[c]==="CS"&&(n[c-1]==="EN"||n[c-1]==="AN")&&n[c+1]===n[c-1]&&(n[c]=n[c-1]);for(let c=0;c<e;c++){if(n[c]!=="EN")continue;let u;for(u=c-1;u>=0&&n[u]==="ET";u--)n[u]="EN";for(u=c+1;u<e&&n[u]==="ET";u++)n[u]="EN"}for(let c=0;c<e;c++){let u=n[c];(u==="WS"||u==="ES"||u==="ET"||u==="CS")&&(n[c]="ON")}a=l;for(let c=0;c<e;c++){let u=n[c];u==="EN"?n[c]=a==="L"?"L":"EN":(u==="R"||u==="L")&&(a=u)}for(let c=0;c<e;c++){if(n[c]!=="ON")continue;let u=c+1;for(;u<e&&n[u]==="ON";)u++;let m=c>0?n[c-1]:l,f=u<e?n[u]:l,x=m!=="L"?"R":"L";if(x===(f!=="L"?"R":"L"))for(let E=c;E<u;E++)n[E]=x;c=u-1}for(let c=0;c<e;c++)n[c]==="ON"&&(n[c]=s);for(let c=0;c<e;c++){let u=n[c];(o[c]&1)===0?u==="R"?o[c]++:(u==="AN"||u==="EN")&&(o[c]+=2):(u==="L"||u==="AN"||u==="EN")&&o[c]++}return o}function Mo(t,e){let n=El(t);if(n===null)return null;let i=new Int8Array(e.length);for(let r=0;r<e.length;r++)i[r]=n[e[r]];return i}var Fl=/[ \\t\\n\\r\\f]+/g,wl=/[\\t\\n\\r\\f]| {2,}|^ | $/;function Nl(t){let e=t??"normal";return e==="pre-wrap"?{mode:e,preserveOrdinarySpaces:!0,preserveHardBreaks:!0}:{mode:e,preserveOrdinarySpaces:!1,preserveHardBreaks:!1}}function Cl(t){if(!wl.test(t))return t;let e=t.replace(Fl," ");return e.charCodeAt(0)===32&&(e=e.slice(1)),e.length>0&&e.charCodeAt(e.length-1)===32&&(e=e.slice(0,-1)),e}function Ml(t){return/[\\r\\f]/.test(t)?t.replace(/\\r\\n/g,`\n`).replace(/[\\r\\f]/g,`\n`):t.replace(/\\r\\n/g,`\n`)}var ri=null,Tl;function kl(){return ri===null&&(ri=new Intl.Segmenter(Tl,{granularity:"word"})),ri}var vl=/\\p{Script=Arabic}/u,sn=/\\p{M}/u,Bo=/\\p{Nd}/u;function To(t){return vl.test(t)}function ko(t){return t>=19968&&t<=40959||t>=13312&&t<=19903||t>=131072&&t<=173791||t>=173824&&t<=177983||t>=177984&&t<=178207||t>=178208&&t<=183983||t>=183984&&t<=191471||t>=191472&&t<=192093||t>=194560&&t<=195103||t>=196608&&t<=201551||t>=201552&&t<=205743||t>=205744&&t<=210041||t>=63744&&t<=64255||t>=12288&&t<=12351||t>=12352&&t<=12447||t>=12448&&t<=12543||t>=44032&&t<=55215||t>=65280&&t<=65519}function Re(t){for(let e=0;e<t.length;e++){let n=t.charCodeAt(e);if(!(n<12288)){if(n>=55296&&n<=56319&&e+1<t.length){let i=t.charCodeAt(e+1);if(i>=56320&&i<=57343){let r=(n-55296<<10)+(i-56320)+65536;if(ko(r))return!0;e++;continue}}if(ko(n))return!0}}return!1}function _l(t){let e=un(t);return e!==null&&(ln.has(e)||ze.has(e))}var Rl=new Set(["\\xA0","\\u202F","\\u2060","\\uFEFF"]);function Ll(t){return Re(t)}function Dl(t){let e=un(t);return e!==null&&Rl.has(e)}function an(t){return!_l(t)&&!Dl(t)}var ln=new Set(["\\uFF0C","\\uFF0E","\\uFF01","\\uFF1A","\\uFF1B","\\uFF1F","\\u3001","\\u3002","\\u30FB","\\uFF09","\\u3015","\\u3009","\\u300B","\\u300D","\\u300F","\\u3011","\\u3017","\\u3019","\\u301B","\\u30FC","\\u3005","\\u303B","\\u309D","\\u309E","\\u30FD","\\u30FE"]),Ot=new Set([\'"\',"(","[","{","\\u201C","\\u2018","\\xAB","\\u2039","\\uFF08","\\u3014","\\u3008","\\u300A","\\u300C","\\u300E","\\u3010","\\u3016","\\u3018","\\u301A"]),si=new Set(["\'","\\u2019"]),ze=new Set([".",",","!","?",":",";","\\u060C","\\u061B","\\u061F","\\u0964","\\u0965","\\u104A","\\u104B","\\u104C","\\u104D","\\u104F",")","]","}","%",\'"\',"\\u201D","\\u2019","\\xBB","\\u203A","\\u2026"]),Bl=new Set([":",".","\\u060C","\\u061B"]),Il=new Set(["\\u104F"]),Ol=new Set(["\\u201D","\\u2019","\\xBB","\\u203A","\\u300D","\\u300F","\\u3011","\\u300B","\\u3009","\\u3015","\\uFF09"]);function Pl(t){if(ai(t))return!0;let e=!1;for(let n of t){if(ze.has(n)){e=!0;continue}if(!(e&&sn.test(n)))return!1}return e}function Wl(t){for(let e of t)if(!ln.has(e)&&!ze.has(e))return!1;return t.length>0}function Hl(t){if(ai(t))return!0;for(let e of t)if(!Ot.has(e)&&!si.has(e)&&!sn.test(e))return!1;return t.length>0}function ai(t){let e=!1;for(let n of t)if(!(n==="\\\\"||sn.test(n))){if(Ot.has(n)||ze.has(n)||si.has(n)){e=!0;continue}return!1}return e}function Io(t,e){let n=e-1;if(n<=0)return Math.max(n,0);let i=t.charCodeAt(n);if(i<56320||i>57343)return n;let r=n-1;if(r<0)return n;let o=t.charCodeAt(r);return o>=55296&&o<=56319?r:n}function un(t){if(t.length===0)return null;let e=Io(t,t.length);return t.slice(e)}function ql(t){let e=Array.from(t),n=e.length;for(;n>0;){let i=e[n-1];if(sn.test(i)){n--;continue}if(Ot.has(i)||si.has(i)){n--;continue}break}return n<=0||n===e.length?null:{head:e.slice(0,n).join(""),tail:e.slice(n).join("")}}function Vl(t,e,n){return n==="text"&&!e&&t.length===1&&t!=="-"&&t!=="\\u2014"?t:null}function vo(t,e,n,i){let r=e[i],o=t[i];if(r==null)return o;let s=n[i];if(o.length===s)return o;let l=r.repeat(s);return t[i]=l,l}function _o(t,e){return t&&e!==null&&Bl.has(e)}function Ul(t){let e=un(t);return e!==null&&Il.has(e)}function zl(t){if(t.length<2||t[0]!==" ")return null;let e=t.slice(1);return/^\\p{M}+$/u.test(e)?{space:" ",marks:e}:null}function cn(t){let e=t.length;for(;e>0;){let n=Io(t,e),i=t.slice(n,e);if(Ol.has(i))return!0;if(!ze.has(i))return!1;e=n}return!1}function jl(t,e){if(e.preserveOrdinarySpaces||e.preserveHardBreaks){if(t===" ")return"preserved-space";if(t===" ")return"tab";if(e.preserveHardBreaks&&t===`\n`)return"hard-break"}return t===" "?"space":t==="\\xA0"||t==="\\u202F"||t==="\\u2060"||t==="\\uFEFF"?"glue":t==="\\u200B"?"zero-width-break":t==="\\xAD"?"soft-hyphen":"text"}var $l=/[\\x20\\t\\n\\xA0\\xAD\\u200B\\u202F\\u2060\\uFEFF]/;function Te(t){return t.length===1?t[0]:t.join("")}function Gl(t,e){let n=[];for(let i=t.length-1;i>=0;i--)n.push(t[i]);return n.push(e),Te(n)}function Kl(t,e,n,i){if(!$l.test(t))return[{text:t,isWordLike:e,kind:"text",start:n}];let r=[],o=null,s=[],l=n,a=!1,c=0;for(let u of t){let m=jl(u,i),f=m==="text"&&e;if(o!==null&&m===o&&f===a){s.push(u),c+=u.length;continue}o!==null&&r.push({text:Te(s),isWordLike:a,kind:o,start:l}),o=m,s=[u],l=n+c,a=f,c+=u.length}return o!==null&&r.push({text:Te(s),isWordLike:a,kind:o,start:l}),r}function oi(t){return t==="space"||t==="preserved-space"||t==="zero-width-break"||t==="hard-break"}var Jl=/^[A-Za-z][A-Za-z0-9+.-]*:$/;function Ql(t,e){let n=t.texts[e];return n.startsWith("www.")?!0:Jl.test(n)&&e+1<t.len&&t.kinds[e+1]==="text"&&t.texts[e+1]==="//"}function Yl(t){return t.includes("?")&&(t.includes("://")||t.startsWith("www."))}function Zl(t){let e=t.texts.slice(),n=t.isWordLike.slice(),i=t.kinds.slice(),r=t.starts.slice();for(let s=0;s<t.len;s++){if(i[s]!=="text"||!Ql(t,s))continue;let l=[e[s]],a=s+1;for(;a<t.len&&!oi(i[a]);){l.push(e[a]),n[s]=!0;let c=e[a].includes("?");if(i[a]="text",e[a]="",a++,c)break}e[s]=Te(l)}let o=0;for(let s=0;s<e.length;s++){let l=e[s];l.length!==0&&(o!==s&&(e[o]=l,n[o]=n[s],i[o]=i[s],r[o]=r[s]),o++)}return e.length=o,n.length=o,i.length=o,r.length=o,{len:o,texts:e,isWordLike:n,kinds:i,starts:r}}function Xl(t){let e=[],n=[],i=[],r=[];for(let o=0;o<t.len;o++){let s=t.texts[o];if(e.push(s),n.push(t.isWordLike[o]),i.push(t.kinds[o]),r.push(t.starts[o]),!Yl(s))continue;let l=o+1;if(l>=t.len||oi(t.kinds[l]))continue;let a=[],c=t.starts[l],u=l;for(;u<t.len&&!oi(t.kinds[u]);)a.push(t.texts[u]),u++;a.length>0&&(e.push(Te(a)),n.push(!0),i.push("text"),r.push(c),o=u-1)}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}var eu=new Set([":","-","/","\\xD7",",",".","+","\\u2013","\\u2014"]),Ro=/^[A-Za-z0-9_]+[,:;]*$/,Lo=/[,:;]+$/;function Oo(t){for(let e of t)if(Bo.test(e))return!0;return!1}function It(t){if(t.length===0)return!1;for(let e of t)if(!(Bo.test(e)||eu.has(e)))return!1;return!0}function tu(t){let e=[],n=[],i=[],r=[];for(let o=0;o<t.len;o++){let s=t.texts[o],l=t.kinds[o];if(l==="text"&&It(s)&&Oo(s)){let a=[s],c=o+1;for(;c<t.len&&t.kinds[c]==="text"&&It(t.texts[c]);)a.push(t.texts[c]),c++;e.push(Te(a)),n.push(!0),i.push("text"),r.push(t.starts[o]),o=c-1;continue}e.push(s),n.push(t.isWordLike[o]),i.push(l),r.push(t.starts[o])}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function nu(t){let e=[],n=[],i=[],r=[];for(let o=0;o<t.len;o++){let s=t.texts[o],l=t.kinds[o],a=t.isWordLike[o];if(l==="text"&&a&&Ro.test(s)){let c=[s],u=Lo.test(s),m=o+1;for(;u&&m<t.len&&t.kinds[m]==="text"&&t.isWordLike[m]&&Ro.test(t.texts[m]);){let f=t.texts[m];c.push(f),u=Lo.test(f),m++}e.push(Te(c)),n.push(!0),i.push("text"),r.push(t.starts[o]),o=m-1;continue}e.push(s),n.push(a),i.push(l),r.push(t.starts[o])}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function iu(t){let e=[],n=[],i=[],r=[];for(let o=0;o<t.len;o++){let s=t.texts[o];if(t.kinds[o]==="text"&&s.includes("-")){let l=s.split("-"),a=l.length>1;for(let c=0;c<l.length;c++){let u=l[c];if(!a)break;(u.length===0||!Oo(u)||!It(u))&&(a=!1)}if(a){let c=0;for(let u=0;u<l.length;u++){let m=l[u],f=u<l.length-1?`${m}-`:m;e.push(f),n.push(!0),i.push("text"),r.push(t.starts[o]+c),c+=f.length}continue}}e.push(s),n.push(t.isWordLike[o]),i.push(t.kinds[o]),r.push(t.starts[o])}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function ru(t){let e=[],n=[],i=[],r=[],o=0;for(;o<t.len;){let s=[t.texts[o]],l=t.isWordLike[o],a=t.kinds[o],c=t.starts[o];if(a==="glue"){let u=[s[0]],m=c;for(o++;o<t.len&&t.kinds[o]==="glue";)u.push(t.texts[o]),o++;let f=Te(u);if(o<t.len&&t.kinds[o]==="text")s[0]=f,s.push(t.texts[o]),l=t.isWordLike[o],a="text",c=m,o++;else{e.push(f),n.push(!1),i.push("glue"),r.push(m);continue}}else o++;if(a==="text")for(;o<t.len&&t.kinds[o]==="glue";){let u=[];for(;o<t.len&&t.kinds[o]==="glue";)u.push(t.texts[o]),o++;let m=Te(u);if(o<t.len&&t.kinds[o]==="text"){s.push(m,t.texts[o]),l=l||t.isWordLike[o],o++;continue}s.push(m)}e.push(Te(s)),n.push(l),i.push(a),r.push(c)}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function ou(t){let e=t.texts.slice(),n=t.isWordLike.slice(),i=t.kinds.slice(),r=t.starts.slice();for(let o=0;o<e.length-1;o++){if(i[o]!=="text"||i[o+1]!=="text"||!Re(e[o])||!Re(e[o+1]))continue;let s=ql(e[o]);s!==null&&(e[o]=s.head,e[o+1]=s.tail+e[o+1],r[o+1]=r[o]+s.head.length)}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function Do(t,e,n){let i=kl(),r=0,o=[],s=[],l=[],a=[],c=[],u=[],m=[],f=[],x=[],F=[],E=[],S=[];for(let C of i.segment(t))for(let g of Kl(C.segment,C.isWordLike??!1,C.index,n)){let le=function(){u[R]!==null&&(s[R]=[vo(o,u,m,R)],u[R]=null),s[R].push(g.text),l[R]=l[R]||g.isWordLike,f[R]=f[R]||w,x[R]=x[R]||T,F[R]=P,E[R]=J,S[R]=_o(x[R],L)},A=g.kind==="text",N=Vl(g.text,g.isWordLike,g.kind),w=Re(g.text),T=To(g.text),L=un(g.text),P=cn(g.text),J=Ul(g.text),R=r-1;e.carryCJKAfterClosingQuote&&A&&r>0&&a[R]==="text"&&w&&f[R]&&F[R]||A&&r>0&&a[R]==="text"&&Wl(g.text)&&f[R]||A&&r>0&&a[R]==="text"&&E[R]?le():A&&r>0&&a[R]==="text"&&g.isWordLike&&T&&S[R]?(le(),l[R]=!0):N!==null&&r>0&&a[R]==="text"&&u[R]===N?m[R]=(m[R]??1)+1:A&&!g.isWordLike&&r>0&&a[R]==="text"&&(Pl(g.text)||g.text==="-"&&l[R])?le():(o[r]=g.text,s[r]=[g.text],l[r]=g.isWordLike,a[r]=g.kind,c[r]=g.start,u[r]=N,m[r]=N===null?0:1,f[r]=w,x[r]=T,F[r]=P,E[r]=J,S[r]=_o(T,L),r++)}for(let C=0;C<r;C++){if(u[C]!==null){o[C]=vo(o,u,m,C);continue}o[C]=Te(s[C])}for(let C=1;C<r;C++)a[C]==="text"&&!l[C]&&ai(o[C])&&a[C-1]==="text"&&(o[C-1]+=o[C],l[C-1]=l[C-1]||l[C],o[C]="");let B=Array.from({length:r},()=>null),D=-1;for(let C=r-1;C>=0;C--){let g=o[C];if(g.length!==0){if(a[C]==="text"&&!l[C]&&Hl(g)&&D>=0&&a[D]==="text"){let A=B[D]??[];A.push(g),B[D]=A,c[D]=c[C],o[C]="";continue}D=C}}for(let C=0;C<r;C++){let g=B[C];g!=null&&(o[C]=Gl(g,o[C]))}let v=0;for(let C=0;C<r;C++){let g=o[C];g.length!==0&&(v!==C&&(o[v]=g,l[v]=l[C],a[v]=a[C],c[v]=c[C]),v++)}o.length=v,l.length=v,a.length=v,c.length=v;let X=ru({len:v,texts:o,isWordLike:l,kinds:a,starts:c}),q=ou(nu(iu(tu(Xl(Zl(X))))));for(let C=0;C<q.len-1;C++){let g=zl(q.texts[C]);g!==null&&(q.kinds[C]!=="space"&&q.kinds[C]!=="preserved-space"||q.kinds[C+1]!=="text"||!To(q.texts[C+1])||(q.texts[C]=g.space,q.isWordLike[C]=!1,q.kinds[C]=q.kinds[C]==="preserved-space"?"preserved-space":"space",q.texts[C+1]=g.marks+q.texts[C+1],q.starts[C+1]=q.starts[C]+g.space.length))}return q}function su(t,e){if(t.len===0)return[];if(!e.preserveHardBreaks)return[{startSegmentIndex:0,endSegmentIndex:t.len,consumedEndSegmentIndex:t.len}];let n=[],i=0;for(let r=0;r<t.len;r++)t.kinds[r]==="hard-break"&&(n.push({startSegmentIndex:i,endSegmentIndex:r,consumedEndSegmentIndex:r+1}),i=r+1);return i<t.len&&n.push({startSegmentIndex:i,endSegmentIndex:t.len,consumedEndSegmentIndex:t.len}),n}function au(t){if(t.len<=1)return t;let e=[],n=[],i=[],r=[],o=null,s=!1,l=0,a=!1,c=!1;function u(){o!==null&&(e.push(Te(o)),n.push(s),i.push("text"),r.push(l),o=null)}for(let m=0;m<t.len;m++){let f=t.texts[m],x=t.kinds[m],F=t.isWordLike[m],E=t.starts[m];if(x==="text"){let S=Ll(f),B=an(f);if(o!==null&&a&&c){o.push(f),s=s||F,a=a||S,c=B;continue}u(),o=[f],s=F,l=E,a=S,c=B;continue}u(),e.push(f),n.push(F),i.push(x),r.push(E)}return u(),{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function Po(t,e,n="normal",i="normal"){let r=Nl(n),o=r.mode==="pre-wrap"?Ml(t):Cl(t);if(o.length===0)return{normalized:o,chunks:[],len:0,texts:[],isWordLike:[],kinds:[],starts:[]};let s=i==="keep-all"?au(Do(o,e,r)):Do(o,e,r);return{normalized:o,chunks:su(s,r),...s}}var at=null,Wo=new Map,lt=null,lu=96,uu=/\\p{Emoji_Presentation}/u,cu=/[\\p{Emoji_Presentation}\\p{Extended_Pictographic}\\p{Regional_Indicator}\\uFE0F\\u20E3]/u,li=null,Ho=new Map;function ui(){if(at!==null)return at;if(typeof OffscreenCanvas<"u")return at=new OffscreenCanvas(1,1).getContext("2d"),at;if(typeof document<"u")return at=document.createElement("canvas").getContext("2d"),at;throw new Error("Text measurement requires OffscreenCanvas or a DOM canvas context.")}function du(t){let e=Wo.get(t);return e||(e=new Map,Wo.set(t,e)),e}function Pe(t,e){let n=e.get(t);return n===void 0&&(n={width:ui().measureText(t).width,containsCJK:Re(t)},e.set(t,n)),n}function ut(){if(lt!==null)return lt;if(typeof navigator>"u")return lt={lineFitEpsilon:.005,carryCJKAfterClosingQuote:!1,preferPrefixWidthsForBreakableRuns:!1,preferEarlySoftHyphenBreak:!1},lt;let t=navigator.userAgent,n=navigator.vendor==="Apple Computer, Inc."&&t.includes("Safari/")&&!t.includes("Chrome/")&&!t.includes("Chromium/")&&!t.includes("CriOS/")&&!t.includes("FxiOS/")&&!t.includes("EdgiOS/"),i=t.includes("Chrome/")||t.includes("Chromium/")||t.includes("CriOS/")||t.includes("Edg/");return lt={lineFitEpsilon:n?1/64:.005,carryCJKAfterClosingQuote:i,preferPrefixWidthsForBreakableRuns:n,preferEarlySoftHyphenBreak:n},lt}function fu(t){let e=t.match(/(\\d+(?:\\.\\d+)?)\\s*px/);return e?parseFloat(e[1]):16}function qo(){return li===null&&(li=new Intl.Segmenter(void 0,{granularity:"grapheme"})),li}function mu(t){return uu.test(t)||t.includes("\\uFE0F")}function Vo(t){return cu.test(t)}function pu(t,e){let n=Ho.get(t);if(n!==void 0)return n;let i=ui();i.font=t;let r=i.measureText("\\u{1F600}").width;if(n=0,r>e+.5&&typeof document<"u"&&document.body!==null){let o=document.createElement("span");o.style.font=t,o.style.display="inline-block",o.style.visibility="hidden",o.style.position="absolute",o.textContent="\\u{1F600}",document.body.appendChild(o);let s=o.getBoundingClientRect().width;document.body.removeChild(o),r-s>.5&&(n=r-s)}return Ho.set(t,n),n}function hu(t){let e=0,n=qo();for(let i of n.segment(t))mu(i.segment)&&e++;return e}function xu(t,e){return e.emojiCount===void 0&&(e.emojiCount=hu(t)),e.emojiCount}function je(t,e,n){return n===0?e.width:e.width-xu(t,e)*n}function Uo(t,e,n,i,r){if(e.breakableFitAdvances!==void 0)return e.breakableFitAdvances;let o=qo(),s=[];for(let u of o.segment(t))s.push(u.segment);if(s.length<=1)return e.breakableFitAdvances=null,e.breakableFitAdvances;if(r==="sum-graphemes"){let u=[];for(let m of s){let f=Pe(m,n);u.push(je(m,f,i))}return e.breakableFitAdvances=u,e.breakableFitAdvances}if(r==="pair-context"||s.length>lu){let u=[],m=null,f=0;for(let x of s){let F=Pe(x,n),E=je(x,F,i);if(m===null)u.push(E);else{let S=m+x,B=Pe(S,n);u.push(je(S,B,i)-f)}m=x,f=E}return e.breakableFitAdvances=u,e.breakableFitAdvances}let l=[],a="",c=0;for(let u of s){a+=u;let m=Pe(a,n),f=je(a,m,i);l.push(f-c),c=f}return e.breakableFitAdvances=l,e.breakableFitAdvances}function zo(t,e){let n=ui();n.font=t;let i=du(t),r=fu(t),o=e?pu(t,r):0;return{cache:i,fontSize:r,emojiCorrection:o}}function gu(t,e){for(;e<t.widths.length;){let n=t.kinds[e];if(n!=="space"&&n!=="zero-width-break"&&n!=="soft-hyphen")break;e++}return e}function yu(t,e){if(e<=0)return 0;let n=t%e;return Math.abs(n)<=1e-6?e:e-n}function Su(t,e,n,i,r){let o=0,s=e;for(;o<t.length;){let l=s+t[o];if((o+1<t.length?l+r:l)>n+i)break;s=l,o++}return{fitCount:o,fittedWidth:s}}function jo(t,e){return t.simpleLineWalkFastPath?$o(t,e):Go(t,e)}function $o(t,e,n){let{widths:i,kinds:r,breakableFitAdvances:o}=t;if(i.length===0)return 0;let l=ut().lineFitEpsilon,a=e+l,c=0,u=0,m=!1,f=0,x=0,F=0,E=0,S=-1,B=0;function D(){S=-1,B=0}function v(N=F,w=E,T=u){c++,n?.({startSegmentIndex:f,startGraphemeIndex:x,endSegmentIndex:N,endGraphemeIndex:w,width:T}),u=0,m=!1,D()}function X(N,w){m=!0,f=N,x=0,F=N+1,E=0,u=w}function q(N,w,T){m=!0,f=N,x=w,F=N,E=w+1,u=T}function C(N,w){if(!m){X(N,w);return}u+=w,F=N+1,E=0}function g(N,w){let T=o[N];for(let L=w;L<T.length;L++){let P=T[L];m?u+P>a?(v(),q(N,L,P)):(u+=P,F=N,E=L+1):q(N,L,P)}m&&F===N&&E===T.length&&(F=N+1,E=0)}let A=0;for(;A<i.length&&!(!m&&(A=gu(t,A),A>=i.length));){let N=i[A],w=r[A],T=w==="space"||w==="preserved-space"||w==="tab"||w==="zero-width-break"||w==="soft-hyphen";if(!m){N>e&&o[A]!==null?g(A,0):X(A,N),T&&(S=A+1,B=u-N),A++;continue}if(u+N>a){if(T){C(A,N),v(A+1,0,u-N),A++;continue}if(S>=0){if(F>S||F===S&&E>0){v();continue}v(S,0,B);continue}if(N>e&&o[A]!==null){v(),g(A,0),A++;continue}v();continue}C(A,N),T&&(S=A+1,B=u-N),A++}return m&&v(),c}function Go(t,e,n){if(t.simpleLineWalkFastPath)return $o(t,e,n);let{widths:i,lineEndFitAdvances:r,lineEndPaintAdvances:o,kinds:s,breakableFitAdvances:l,discretionaryHyphenWidth:a,tabStopAdvance:c,chunks:u}=t;if(i.length===0||u.length===0)return 0;let m=ut(),f=m.lineFitEpsilon,x=e+f,F=0,E=0,S=!1,B=0,D=0,v=0,X=0,q=-1,C=0,g=0,A=null;function N(){q=-1,C=0,g=0,A=null}function w($=v,U=X,W=E){F++,n?.({startSegmentIndex:B,startGraphemeIndex:D,endSegmentIndex:$,endGraphemeIndex:U,width:W}),E=0,S=!1,N()}function T($,U){S=!0,B=$,D=0,v=$+1,X=0,E=U}function L($,U,W){S=!0,B=$,D=U,v=$,X=U+1,E=W}function P($,U){if(!S){T($,U);return}E+=U,v=$+1,X=0}function J($,U,W,Y){if(!U)return;let me=$==="tab"?0:r[W],Fe=$==="tab"?Y:o[W];q=W+1,C=E-Y+me,g=E-Y+Fe,A=$}function R($,U){let W=l[$];for(let Y=U;Y<W.length;Y++){let me=W[Y];S?E+me>x?(w(),L($,Y,me)):(E+=me,v=$,X=Y+1):L($,Y,me)}S&&v===$&&X===W.length&&(v=$+1,X=0)}function le($){if(A!=="soft-hyphen")return!1;let U=l[$];if(U==null)return!1;let{fitCount:W,fittedWidth:Y}=Su(U,E,e,f,a);return W===0?!1:(E=Y,v=$,X=W,N(),W===U.length?(v=$+1,X=0,!0):(w($,W,Y+a),R($,W),!0))}function Se($){F++,n?.({startSegmentIndex:$.startSegmentIndex,startGraphemeIndex:0,endSegmentIndex:$.consumedEndSegmentIndex,endGraphemeIndex:0,width:0}),N()}for(let $=0;$<u.length;$++){let U=u[$];if(U.startSegmentIndex===U.endSegmentIndex){Se(U);continue}S=!1,E=0,B=U.startSegmentIndex,D=0,v=U.startSegmentIndex,X=0,N();let W=U.startSegmentIndex;for(;W<U.endSegmentIndex;){let Y=s[W],me=Y==="space"||Y==="preserved-space"||Y==="tab"||Y==="zero-width-break"||Y==="soft-hyphen",Fe=Y==="tab"?yu(E,c):i[W];if(Y==="soft-hyphen"){S&&(v=W+1,X=0,q=W+1,C=E+a,g=E+a,A=Y),W++;continue}if(!S){Fe>e&&l[W]!==null?R(W,0):T(W,Fe),J(Y,me,W,Fe),W++;continue}if(E+Fe>x){let k=E+(Y==="tab"?0:r[W]),O=E+(Y==="tab"?Fe:o[W]);if(A==="soft-hyphen"&&m.preferEarlySoftHyphenBreak&&C<=x){w(q,0,g);continue}if(A==="soft-hyphen"&&le(W)){W++;continue}if(me&&k<=x){P(W,Fe),w(W+1,0,O),W++;continue}if(q>=0&&C<=x){if(v>q||v===q&&X>0){w();continue}let ne=q;w(ne,0,g),W=ne;continue}if(Fe>e&&l[W]!==null){w(),R(W,0),W++;continue}w();continue}P(W,Fe),J(Y,me,W,Fe),W++}if(S){let Y=q===U.consumedEndSegmentIndex?g:E;w(U.consumedEndSegmentIndex,0,Y)}}return F}var ci=null;function bu(){return ci===null&&(ci=new Intl.Segmenter(void 0,{granularity:"grapheme"})),ci}function Au(t){return t?{widths:[],lineEndFitAdvances:[],lineEndPaintAdvances:[],kinds:[],simpleLineWalkFastPath:!0,segLevels:null,breakableFitAdvances:[],discretionaryHyphenWidth:0,tabStopAdvance:0,chunks:[],segments:[]}:{widths:[],lineEndFitAdvances:[],lineEndPaintAdvances:[],kinds:[],simpleLineWalkFastPath:!0,segLevels:null,breakableFitAdvances:[],discretionaryHyphenWidth:0,tabStopAdvance:0,chunks:[]}}function Eu(t,e){let n=[],i=[],r=0,o=!1,s=!1,l=!1;function a(){i.length!==0&&(n.push({text:i.length===1?i[0]:i.join(""),start:r}),i=[],o=!1,s=!1,l=!1)}function c(m,f,x){i=[m],r=f,o=x,s=cn(m),l=Ot.has(m)}function u(m,f){i.push(m),o=o||f;let x=cn(m);m.length===1&&ze.has(m)?s=s||x:s=x,l=!1}for(let m of bu().segment(t)){let f=m.segment,x=Re(f);if(i.length===0){c(f,m.index,x);continue}if(l||ln.has(f)||ze.has(f)||e.carryCJKAfterClosingQuote&&x&&s){u(f,x);continue}if(!o&&!x){u(f,x);continue}a(),c(f,m.index,x)}return a(),n}function Fu(t){if(t.length<=1)return t;let e=[],n=[t[0].text],i=t[0].start,r=Re(t[0].text),o=an(t[0].text);function s(){e.push({text:n.length===1?n[0]:n.join(""),start:i})}for(let l=1;l<t.length;l++){let a=t[l],c=Re(a.text),u=an(a.text);if(r&&o){n.push(a.text),r=r||c,o=u;continue}s(),n=[a.text],i=a.start,r=c,o=u}return s(),e}function wu(t,e,n,i){let r=ut(),{cache:o,emojiCorrection:s}=zo(e,Vo(t.normalized)),l=je("-",Pe("-",o),s),c=je(" ",Pe(" ",o),s)*8;if(t.len===0)return Au(n);let u=[],m=[],f=[],x=[],F=t.chunks.length<=1,E=n?[]:null,S=[],B=n?[]:null,D=Array.from({length:t.len});function v(g,A,N,w,T,L,P){T!=="text"&&T!=="space"&&T!=="zero-width-break"&&(F=!1),u.push(A),m.push(N),f.push(w),x.push(T),E?.push(L),S.push(P),B!==null&&B.push(g)}function X(g,A,N,w,T){let L=Pe(g,o),P=je(g,L,s),J=A==="space"||A==="preserved-space"||A==="zero-width-break"?0:P,R=A==="space"||A==="zero-width-break"?0:P;if(T&&w&&g.length>1){let le="sum-graphemes";It(g)?le="pair-context":r.preferPrefixWidthsForBreakableRuns&&(le="segment-prefixes");let Se=Uo(g,L,o,s,le);v(g,P,J,R,A,N,Se);return}v(g,P,J,R,A,N,null)}for(let g=0;g<t.len;g++){D[g]=u.length;let A=t.texts[g],N=t.isWordLike[g],w=t.kinds[g],T=t.starts[g];if(w==="soft-hyphen"){v(A,0,l,l,w,T,null);continue}if(w==="hard-break"){v(A,0,0,0,w,T,null);continue}if(w==="tab"){v(A,0,0,0,w,T,null);continue}let L=Pe(A,o);if(w==="text"&&L.containsCJK){let P=Eu(A,r),J=i==="keep-all"?Fu(P):P;for(let R=0;R<J.length;R++){let le=J[R];X(le.text,"text",T+le.start,N,i==="keep-all"||!Re(le.text))}continue}X(A,w,T,N,!0)}let q=Nu(t.chunks,D,u.length),C=E===null?null:Mo(t.normalized,E);return B!==null?{widths:u,lineEndFitAdvances:m,lineEndPaintAdvances:f,kinds:x,simpleLineWalkFastPath:F,segLevels:C,breakableFitAdvances:S,discretionaryHyphenWidth:l,tabStopAdvance:c,chunks:q,segments:B}:{widths:u,lineEndFitAdvances:m,lineEndPaintAdvances:f,kinds:x,simpleLineWalkFastPath:F,segLevels:C,breakableFitAdvances:S,discretionaryHyphenWidth:l,tabStopAdvance:c,chunks:q}}function Nu(t,e,n){let i=[];for(let r=0;r<t.length;r++){let o=t[r],s=o.startSegmentIndex<e.length?e[o.startSegmentIndex]:n,l=o.endSegmentIndex<e.length?e[o.endSegmentIndex]:n,a=o.consumedEndSegmentIndex<e.length?e[o.consumedEndSegmentIndex]:n;i.push({startSegmentIndex:s,endSegmentIndex:l,consumedEndSegmentIndex:a})}return i}function Cu(t,e,n,i){let r=i?.wordBreak??"normal",o=Po(t,ut(),i?.whiteSpace,r);return wu(o,e,n,r)}function Ko(t,e,n){return Cu(t,e,!1,n)}function Jo(t,e,n){let i=jo(t,e);return{lineCount:i,height:i*n}}var Mu={maxWidth:1600,baseFontSize:78,minFontSize:42,fontWeight:900,fontFamily:"Outfit",step:2};function Qo(t,e){let n={...Mu,...e},i=1.2;for(let r=n.baseFontSize;r>=n.minFontSize;r-=n.step){let o=`${n.fontWeight} ${r}px ${n.fontFamily}`,s=Ko(t,o),{lineCount:l}=Jo(s,n.maxWidth,r*i);if(l<=1)return{fontSize:r,fits:!0}}return{fontSize:n.minFontSize,fits:!1}}window.__timelines=window.__timelines||{};window.__hyperframes={fitTextFontSize:Qo,getVariables:ho};function Yo(){let t=window;t.__hyperframeRuntimeBootstrapped||(t.__hyperframeRuntimeBootstrapped=!0,No())}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Yo,{once:!0}):Yo();})();\n';
|
|
39219
39237
|
}
|
|
39220
39238
|
});
|
|
39221
39239
|
|
|
@@ -45281,6 +45299,22 @@ var init_safePath = __esm({
|
|
|
45281
45299
|
});
|
|
45282
45300
|
|
|
45283
45301
|
// ../core/src/studio-api/routes/projects.ts
|
|
45302
|
+
import { readFile } from "fs/promises";
|
|
45303
|
+
import { join as join11 } from "path";
|
|
45304
|
+
async function filterCompositionFiles(projectDir, files) {
|
|
45305
|
+
const htmlFiles = files.filter((f3) => f3.endsWith(".html"));
|
|
45306
|
+
const checks = await Promise.all(
|
|
45307
|
+
htmlFiles.map(async (f3) => {
|
|
45308
|
+
try {
|
|
45309
|
+
const content = await readFile(join11(projectDir, f3), "utf-8");
|
|
45310
|
+
return COMPOSITION_ID_RE.test(content);
|
|
45311
|
+
} catch {
|
|
45312
|
+
return false;
|
|
45313
|
+
}
|
|
45314
|
+
})
|
|
45315
|
+
);
|
|
45316
|
+
return htmlFiles.filter((_, i2) => checks[i2]);
|
|
45317
|
+
}
|
|
45284
45318
|
function registerProjectRoutes(api, adapter2) {
|
|
45285
45319
|
api.get("/projects", async (c3) => {
|
|
45286
45320
|
const projects = await adapter2.listProjects();
|
|
@@ -45299,13 +45333,16 @@ function registerProjectRoutes(api, adapter2) {
|
|
|
45299
45333
|
const project = await adapter2.resolveProject(c3.req.param("id"));
|
|
45300
45334
|
if (!project) return c3.json({ error: "not found" }, 404);
|
|
45301
45335
|
const files = walkDir(project.dir);
|
|
45302
|
-
|
|
45336
|
+
const compositions = await filterCompositionFiles(project.dir, files);
|
|
45337
|
+
return c3.json({ id: project.id, dir: project.dir, title: project.title, files, compositions });
|
|
45303
45338
|
});
|
|
45304
45339
|
}
|
|
45340
|
+
var COMPOSITION_ID_RE;
|
|
45305
45341
|
var init_projects = __esm({
|
|
45306
45342
|
"../core/src/studio-api/routes/projects.ts"() {
|
|
45307
45343
|
"use strict";
|
|
45308
45344
|
init_safePath();
|
|
45345
|
+
COMPOSITION_ID_RE = /data-composition-id\s*=/;
|
|
45309
45346
|
}
|
|
45310
45347
|
});
|
|
45311
45348
|
|
|
@@ -45357,7 +45394,7 @@ var init_mime = __esm({
|
|
|
45357
45394
|
// ../core/src/studio-api/helpers/waveform.ts
|
|
45358
45395
|
import { spawn as spawn3 } from "child_process";
|
|
45359
45396
|
import { existsSync as existsSync10, writeFileSync as writeFileSync6, mkdirSync as mkdirSync5 } from "fs";
|
|
45360
|
-
import { join as
|
|
45397
|
+
import { join as join12 } from "path";
|
|
45361
45398
|
function buildWaveformCacheKey(assetPath) {
|
|
45362
45399
|
return `${WAVEFORM_CACHE_VERSION}_${assetPath.replace(/[/\\]/g, "_")}.json`;
|
|
45363
45400
|
}
|
|
@@ -45417,10 +45454,10 @@ function decodeAudioPeaks(audioPath) {
|
|
|
45417
45454
|
});
|
|
45418
45455
|
}
|
|
45419
45456
|
async function generateWaveformCache(projectDir, assetPath) {
|
|
45420
|
-
const audioPath =
|
|
45457
|
+
const audioPath = join12(projectDir, assetPath);
|
|
45421
45458
|
if (!existsSync10(audioPath)) return;
|
|
45422
|
-
const cacheDir =
|
|
45423
|
-
const cachePath2 =
|
|
45459
|
+
const cacheDir = join12(projectDir, ".waveform-cache");
|
|
45460
|
+
const cachePath2 = join12(cacheDir, buildWaveformCacheKey(assetPath));
|
|
45424
45461
|
if (existsSync10(cachePath2)) return;
|
|
45425
45462
|
const peaks = await decodeAudioPeaks(audioPath);
|
|
45426
45463
|
mkdirSync5(cacheDir, { recursive: true });
|
|
@@ -45440,7 +45477,7 @@ var init_waveform = __esm({
|
|
|
45440
45477
|
import { spawnSync } from "child_process";
|
|
45441
45478
|
import { mkdtempSync, rmSync as rmSync2, writeFileSync as writeFileSync7 } from "fs";
|
|
45442
45479
|
import { tmpdir as tmpdir2 } from "os";
|
|
45443
|
-
import { basename, join as
|
|
45480
|
+
import { basename, join as join13 } from "path";
|
|
45444
45481
|
function validateUploadedMedia(filePath, runner = spawnSync) {
|
|
45445
45482
|
const isVideo2 = VIDEO_EXT.test(filePath);
|
|
45446
45483
|
const isAudio = AUDIO_EXT.test(filePath);
|
|
@@ -45479,8 +45516,8 @@ function validateUploadedMedia(filePath, runner = spawnSync) {
|
|
|
45479
45516
|
}
|
|
45480
45517
|
}
|
|
45481
45518
|
function validateUploadedMediaBuffer(fileName, buffer, runner = spawnSync) {
|
|
45482
|
-
const tempDir = mkdtempSync(
|
|
45483
|
-
const tempPath =
|
|
45519
|
+
const tempDir = mkdtempSync(join13(tmpdir2(), "hyperframes-upload-"));
|
|
45520
|
+
const tempPath = join13(tempDir, basename(fileName));
|
|
45484
45521
|
try {
|
|
45485
45522
|
writeFileSync7(tempPath, buffer);
|
|
45486
45523
|
return validateUploadedMedia(tempPath, runner);
|
|
@@ -58295,7 +58332,7 @@ import {
|
|
|
58295
58332
|
renameSync as renameSync2,
|
|
58296
58333
|
readdirSync as readdirSync4
|
|
58297
58334
|
} from "fs";
|
|
58298
|
-
import { resolve as resolve9, dirname as dirname6, join as
|
|
58335
|
+
import { resolve as resolve9, dirname as dirname6, join as join14 } from "path";
|
|
58299
58336
|
async function resolveProjectPath(c3, adapter2, pathPrefix, opts) {
|
|
58300
58337
|
const id = c3.req.param("id");
|
|
58301
58338
|
const project = await adapter2.resolveProject(id);
|
|
@@ -58355,7 +58392,7 @@ function generateCopyPath(projectDir, originalPath) {
|
|
|
58355
58392
|
function walkFiles(dir, filter2) {
|
|
58356
58393
|
const results = [];
|
|
58357
58394
|
for (const entry of readdirSync4(dir, { withFileTypes: true })) {
|
|
58358
|
-
const full =
|
|
58395
|
+
const full = join14(dir, entry.name);
|
|
58359
58396
|
if (entry.isDirectory()) {
|
|
58360
58397
|
if (entry.name === "node_modules" || entry.name === ".thumbnails" || entry.name === "renders")
|
|
58361
58398
|
continue;
|
|
@@ -58592,7 +58629,7 @@ function registerFileRoutes(api, adapter2) {
|
|
|
58592
58629
|
continue;
|
|
58593
58630
|
}
|
|
58594
58631
|
writeFileSync8(finalPath, buffer);
|
|
58595
|
-
const relativePath = subDir ?
|
|
58632
|
+
const relativePath = subDir ? join14(subDir, finalName) : finalName;
|
|
58596
58633
|
uploaded.push(relativePath);
|
|
58597
58634
|
if (isAudioFile2(finalName)) {
|
|
58598
58635
|
generateWaveformCache(project.dir, relativePath).catch(() => {
|
|
@@ -58641,24 +58678,34 @@ function registerFileRoutes(api, adapter2) {
|
|
|
58641
58678
|
addAnimationToScript: addAnimationToScript2,
|
|
58642
58679
|
removeAnimationFromScript: removeAnimationFromScript2
|
|
58643
58680
|
} = await loadGsapParser();
|
|
58681
|
+
function requireAnimation(scriptText, animationId) {
|
|
58682
|
+
const parsed = parseGsapScript2(scriptText);
|
|
58683
|
+
const anim = parsed.animations.find((a) => a.id === animationId);
|
|
58684
|
+
if (!anim) return { err: c3.json({ error: "animation not found" }, 404) };
|
|
58685
|
+
return { anim };
|
|
58686
|
+
}
|
|
58687
|
+
function requireFromToAnimation(scriptText, animationId) {
|
|
58688
|
+
const result = requireAnimation(scriptText, animationId);
|
|
58689
|
+
if ("err" in result) return result;
|
|
58690
|
+
if (result.anim.method !== "fromTo")
|
|
58691
|
+
return { err: c3.json({ error: "animation is not a fromTo" }, 400) };
|
|
58692
|
+
return result;
|
|
58693
|
+
}
|
|
58644
58694
|
let newScript;
|
|
58645
58695
|
switch (body.type) {
|
|
58646
58696
|
case "update-property": {
|
|
58647
|
-
const
|
|
58648
|
-
|
|
58649
|
-
if (!anim) return c3.json({ error: "animation not found" }, 404);
|
|
58697
|
+
const r2 = requireAnimation(block.scriptText, body.animationId);
|
|
58698
|
+
if ("err" in r2) return r2.err;
|
|
58650
58699
|
newScript = updateAnimationInScript2(block.scriptText, body.animationId, {
|
|
58651
|
-
properties: { ...anim.properties, [body.property]: body.value }
|
|
58700
|
+
properties: { ...r2.anim.properties, [body.property]: body.value }
|
|
58652
58701
|
});
|
|
58653
58702
|
break;
|
|
58654
58703
|
}
|
|
58655
58704
|
case "update-from-property": {
|
|
58656
|
-
const
|
|
58657
|
-
|
|
58658
|
-
if (!anim) return c3.json({ error: "animation not found" }, 404);
|
|
58659
|
-
if (anim.method !== "fromTo") return c3.json({ error: "animation is not a fromTo" }, 400);
|
|
58705
|
+
const r2 = requireFromToAnimation(block.scriptText, body.animationId);
|
|
58706
|
+
if ("err" in r2) return r2.err;
|
|
58660
58707
|
newScript = updateAnimationInScript2(block.scriptText, body.animationId, {
|
|
58661
|
-
fromProperties: { ...anim.fromProperties ?? {}, [body.property]: body.value }
|
|
58708
|
+
fromProperties: { ...r2.anim.fromProperties ?? {}, [body.property]: body.value }
|
|
58662
58709
|
});
|
|
58663
58710
|
break;
|
|
58664
58711
|
}
|
|
@@ -58667,6 +58714,9 @@ function registerFileRoutes(api, adapter2) {
|
|
|
58667
58714
|
break;
|
|
58668
58715
|
}
|
|
58669
58716
|
case "add": {
|
|
58717
|
+
if (body.fromProperties && body.method !== "fromTo") {
|
|
58718
|
+
return c3.json({ error: "fromProperties is only valid for method=fromTo" }, 400);
|
|
58719
|
+
}
|
|
58670
58720
|
const result = addAnimationToScript2(block.scriptText, {
|
|
58671
58721
|
targetSelector: body.targetSelector,
|
|
58672
58722
|
method: body.method,
|
|
@@ -58684,29 +58734,25 @@ function registerFileRoutes(api, adapter2) {
|
|
|
58684
58734
|
break;
|
|
58685
58735
|
}
|
|
58686
58736
|
case "add-property": {
|
|
58687
|
-
const
|
|
58688
|
-
|
|
58689
|
-
if (!anim) return c3.json({ error: "animation not found" }, 404);
|
|
58737
|
+
const r2 = requireAnimation(block.scriptText, body.animationId);
|
|
58738
|
+
if ("err" in r2) return r2.err;
|
|
58690
58739
|
newScript = updateAnimationInScript2(block.scriptText, body.animationId, {
|
|
58691
|
-
properties: { ...anim.properties, [body.property]: body.defaultValue }
|
|
58740
|
+
properties: { ...r2.anim.properties, [body.property]: body.defaultValue }
|
|
58692
58741
|
});
|
|
58693
58742
|
break;
|
|
58694
58743
|
}
|
|
58695
58744
|
case "add-from-property": {
|
|
58696
|
-
const
|
|
58697
|
-
|
|
58698
|
-
if (!anim) return c3.json({ error: "animation not found" }, 404);
|
|
58699
|
-
if (anim.method !== "fromTo") return c3.json({ error: "animation is not a fromTo" }, 400);
|
|
58745
|
+
const r2 = requireFromToAnimation(block.scriptText, body.animationId);
|
|
58746
|
+
if ("err" in r2) return r2.err;
|
|
58700
58747
|
newScript = updateAnimationInScript2(block.scriptText, body.animationId, {
|
|
58701
|
-
fromProperties: { ...anim.fromProperties ?? {}, [body.property]: body.defaultValue }
|
|
58748
|
+
fromProperties: { ...r2.anim.fromProperties ?? {}, [body.property]: body.defaultValue }
|
|
58702
58749
|
});
|
|
58703
58750
|
break;
|
|
58704
58751
|
}
|
|
58705
58752
|
case "remove-property": {
|
|
58706
|
-
const
|
|
58707
|
-
|
|
58708
|
-
|
|
58709
|
-
const filtered = { ...anim.properties };
|
|
58753
|
+
const r2 = requireAnimation(block.scriptText, body.animationId);
|
|
58754
|
+
if ("err" in r2) return r2.err;
|
|
58755
|
+
const filtered = { ...r2.anim.properties };
|
|
58710
58756
|
delete filtered[body.property];
|
|
58711
58757
|
newScript = updateAnimationInScript2(block.scriptText, body.animationId, {
|
|
58712
58758
|
properties: filtered
|
|
@@ -58714,11 +58760,9 @@ function registerFileRoutes(api, adapter2) {
|
|
|
58714
58760
|
break;
|
|
58715
58761
|
}
|
|
58716
58762
|
case "remove-from-property": {
|
|
58717
|
-
const
|
|
58718
|
-
|
|
58719
|
-
|
|
58720
|
-
if (anim.method !== "fromTo") return c3.json({ error: "animation is not a fromTo" }, 400);
|
|
58721
|
-
const filtered = { ...anim.fromProperties ?? {} };
|
|
58763
|
+
const r2 = requireFromToAnimation(block.scriptText, body.animationId);
|
|
58764
|
+
if ("err" in r2) return r2.err;
|
|
58765
|
+
const filtered = { ...r2.anim.fromProperties ?? {} };
|
|
58722
58766
|
delete filtered[body.property];
|
|
58723
58767
|
newScript = updateAnimationInScript2(block.scriptText, body.animationId, {
|
|
58724
58768
|
fromProperties: filtered
|
|
@@ -58934,7 +58978,7 @@ var init_htmlDocument = __esm({
|
|
|
58934
58978
|
|
|
58935
58979
|
// ../core/src/studio-api/helpers/subComposition.ts
|
|
58936
58980
|
import { existsSync as existsSync12, readFileSync as readFileSync13 } from "fs";
|
|
58937
|
-
import { join as
|
|
58981
|
+
import { join as join15 } from "path";
|
|
58938
58982
|
function isFullHtmlDocument(html) {
|
|
58939
58983
|
return /^\s*(?:<!doctype\s|<html[\s>])/i.test(html);
|
|
58940
58984
|
}
|
|
@@ -58981,7 +59025,7 @@ function extractElementAttrs(el) {
|
|
|
58981
59025
|
return parts.join(" ");
|
|
58982
59026
|
}
|
|
58983
59027
|
function buildSubCompositionHtml(projectDir, compPath, runtimeUrl, baseHref) {
|
|
58984
|
-
const compFile =
|
|
59028
|
+
const compFile = join15(projectDir, compPath);
|
|
58985
59029
|
if (!existsSync12(compFile)) return null;
|
|
58986
59030
|
const rawComp = readFileSync13(compFile, "utf-8");
|
|
58987
59031
|
let compHeadContent = "";
|
|
@@ -59009,7 +59053,7 @@ function buildSubCompositionHtml(projectDir, compPath, runtimeUrl, baseHref) {
|
|
|
59009
59053
|
rewriteRelativePaths(contentDoc, compPath);
|
|
59010
59054
|
rewrittenContent = contentDoc.body.innerHTML || rawComp;
|
|
59011
59055
|
}
|
|
59012
|
-
const indexPath =
|
|
59056
|
+
const indexPath = join15(projectDir, "index.html");
|
|
59013
59057
|
let headContent = "";
|
|
59014
59058
|
if (existsSync12(indexPath)) {
|
|
59015
59059
|
const indexHtml = readFileSync13(indexPath, "utf-8");
|
|
@@ -59391,7 +59435,7 @@ var init_studioMotionRenderScript = __esm({
|
|
|
59391
59435
|
|
|
59392
59436
|
// ../core/src/studio-api/routes/preview.ts
|
|
59393
59437
|
import { existsSync as existsSync13, readFileSync as readFileSync15, statSync as statSync2 } from "fs";
|
|
59394
|
-
import { join as
|
|
59438
|
+
import { join as join16, resolve as resolve11 } from "path";
|
|
59395
59439
|
function resolveProjectSignature(adapter2, projectDir) {
|
|
59396
59440
|
return adapter2.getProjectSignature?.(projectDir) ?? createProjectSignature(projectDir);
|
|
59397
59441
|
}
|
|
@@ -59409,7 +59453,7 @@ function injectProjectSignature(html, signature) {
|
|
|
59409
59453
|
${html}`;
|
|
59410
59454
|
}
|
|
59411
59455
|
function readStudioMotionManifestContent(projectDir) {
|
|
59412
|
-
const manifestPath =
|
|
59456
|
+
const manifestPath = join16(projectDir, STUDIO_MOTION_PATH);
|
|
59413
59457
|
if (!existsSync13(manifestPath)) return "";
|
|
59414
59458
|
try {
|
|
59415
59459
|
return readFileSync15(manifestPath, "utf-8");
|
|
@@ -59492,11 +59536,11 @@ async function transformPreviewHtml(html, adapter2, project, activeCompositionPa
|
|
|
59492
59536
|
}
|
|
59493
59537
|
}
|
|
59494
59538
|
function resolveProjectMainHtml(projectDir, projectId) {
|
|
59495
|
-
const indexPath =
|
|
59539
|
+
const indexPath = join16(projectDir, "index.html");
|
|
59496
59540
|
if (existsSync13(indexPath)) {
|
|
59497
59541
|
return { html: readFileSync15(indexPath, "utf-8"), compositionPath: "index.html" };
|
|
59498
59542
|
}
|
|
59499
|
-
const blockHtmlPath =
|
|
59543
|
+
const blockHtmlPath = join16(projectDir, `${projectId}.html`);
|
|
59500
59544
|
if (existsSync13(blockHtmlPath)) {
|
|
59501
59545
|
return { html: readFileSync15(blockHtmlPath, "utf-8"), compositionPath: `${projectId}.html` };
|
|
59502
59546
|
}
|
|
@@ -59677,7 +59721,7 @@ var init_preview = __esm({
|
|
|
59677
59721
|
|
|
59678
59722
|
// ../core/src/studio-api/routes/lint.ts
|
|
59679
59723
|
import { readFileSync as readFileSync16 } from "fs";
|
|
59680
|
-
import { join as
|
|
59724
|
+
import { join as join17 } from "path";
|
|
59681
59725
|
function registerLintRoutes(api, adapter2) {
|
|
59682
59726
|
api.get("/projects/:id/lint", async (c3) => {
|
|
59683
59727
|
const project = await adapter2.resolveProject(c3.req.param("id"));
|
|
@@ -59686,7 +59730,7 @@ function registerLintRoutes(api, adapter2) {
|
|
|
59686
59730
|
const htmlFiles = walkDir(project.dir).filter((f3) => f3.endsWith(".html"));
|
|
59687
59731
|
const allFindings = [];
|
|
59688
59732
|
for (const file of htmlFiles) {
|
|
59689
|
-
const content = readFileSync16(
|
|
59733
|
+
const content = readFileSync16(join17(project.dir, file), "utf-8");
|
|
59690
59734
|
const result = await adapter2.lint(content, { filePath: file });
|
|
59691
59735
|
if (result?.findings) {
|
|
59692
59736
|
for (const f3 of result.findings) {
|
|
@@ -59711,7 +59755,7 @@ var init_lint2 = __esm({
|
|
|
59711
59755
|
// ../core/src/studio-api/routes/render.ts
|
|
59712
59756
|
import { streamSSE } from "hono/streaming";
|
|
59713
59757
|
import { existsSync as existsSync14, readFileSync as readFileSync17, mkdirSync as mkdirSync7, unlinkSync as unlinkSync4, readdirSync as readdirSync6, statSync as statSync3 } from "fs";
|
|
59714
|
-
import { join as
|
|
59758
|
+
import { join as join18, resolve as resolve12, sep as sep2 } from "path";
|
|
59715
59759
|
function registerRenderRoutes(api, adapter2) {
|
|
59716
59760
|
const renderJobs = /* @__PURE__ */ new Map();
|
|
59717
59761
|
const TTL_MS = 3e5;
|
|
@@ -59764,7 +59808,7 @@ function registerRenderRoutes(api, adapter2) {
|
|
|
59764
59808
|
const rendersDir = adapter2.rendersDir(project);
|
|
59765
59809
|
if (!existsSync14(rendersDir)) mkdirSync7(rendersDir, { recursive: true });
|
|
59766
59810
|
const ext = FORMAT_EXT3[format] ?? ".mp4";
|
|
59767
|
-
const outputPath =
|
|
59811
|
+
const outputPath = join18(rendersDir, `${jobId}${ext}`);
|
|
59768
59812
|
const jobState = adapter2.startRender({
|
|
59769
59813
|
project,
|
|
59770
59814
|
outputPath,
|
|
@@ -59852,7 +59896,7 @@ function registerRenderRoutes(api, adapter2) {
|
|
|
59852
59896
|
if (state.id === jobId && state.outputPath) {
|
|
59853
59897
|
const dir = state.outputPath.replace(/\/[^/]+$/, "");
|
|
59854
59898
|
for (const ext of [".mp4", ".webm", ".mov", ".meta.json"]) {
|
|
59855
|
-
const fp =
|
|
59899
|
+
const fp = join18(dir, `${jobId}${ext}`);
|
|
59856
59900
|
if (existsSync14(fp)) unlinkSync4(fp);
|
|
59857
59901
|
}
|
|
59858
59902
|
break;
|
|
@@ -59867,7 +59911,7 @@ function registerRenderRoutes(api, adapter2) {
|
|
|
59867
59911
|
const filename = c3.req.path.split("/renders/file/")[1];
|
|
59868
59912
|
if (!filename) return c3.json({ error: "missing filename" }, 400);
|
|
59869
59913
|
const rendersDir = adapter2.rendersDir(project);
|
|
59870
|
-
const fp =
|
|
59914
|
+
const fp = join18(rendersDir, filename);
|
|
59871
59915
|
if (!existsSync14(fp)) return c3.json({ error: "not found" }, 404);
|
|
59872
59916
|
const contentType = renderContentType(fp);
|
|
59873
59917
|
const content = readFileSync17(fp);
|
|
@@ -59886,10 +59930,10 @@ function registerRenderRoutes(api, adapter2) {
|
|
|
59886
59930
|
const rendersDir = adapter2.rendersDir(project);
|
|
59887
59931
|
if (!existsSync14(rendersDir)) return c3.json({ renders: [] });
|
|
59888
59932
|
const files = readdirSync6(rendersDir).filter((f3) => f3.endsWith(".mp4") || f3.endsWith(".webm") || f3.endsWith(".mov")).map((f3) => {
|
|
59889
|
-
const fp =
|
|
59933
|
+
const fp = join18(rendersDir, f3);
|
|
59890
59934
|
const stat3 = statSync3(fp);
|
|
59891
59935
|
const rid = f3.replace(/\.(mp4|webm|mov)$/, "");
|
|
59892
|
-
const metaPath =
|
|
59936
|
+
const metaPath = join18(rendersDir, `${rid}.meta.json`);
|
|
59893
59937
|
let status = "complete";
|
|
59894
59938
|
let durationMs;
|
|
59895
59939
|
if (existsSync14(metaPath)) {
|
|
@@ -59915,7 +59959,7 @@ function registerRenderRoutes(api, adapter2) {
|
|
|
59915
59959
|
id: file.id,
|
|
59916
59960
|
status: file.status,
|
|
59917
59961
|
progress: 100,
|
|
59918
|
-
outputPath:
|
|
59962
|
+
outputPath: join18(rendersDir, file.filename),
|
|
59919
59963
|
createdAt: file.createdAt
|
|
59920
59964
|
});
|
|
59921
59965
|
}
|
|
@@ -60518,7 +60562,7 @@ var init_manualEditsRenderScript = __esm({
|
|
|
60518
60562
|
|
|
60519
60563
|
// ../core/src/studio-api/routes/thumbnail.ts
|
|
60520
60564
|
import { existsSync as existsSync15, readFileSync as readFileSync18, writeFileSync as writeFileSync9, mkdirSync as mkdirSync8, statSync as statSync4 } from "fs";
|
|
60521
|
-
import { join as
|
|
60565
|
+
import { join as join19 } from "path";
|
|
60522
60566
|
import { createHash as createHash3 } from "crypto";
|
|
60523
60567
|
function registerThumbnailRoutes(api, adapter2) {
|
|
60524
60568
|
api.get("/projects/:id/thumbnail/*", async (c3) => {
|
|
@@ -60547,7 +60591,7 @@ function registerThumbnailRoutes(api, adapter2) {
|
|
|
60547
60591
|
let compH = vpHeight || 1080;
|
|
60548
60592
|
let sourceMtime = 0;
|
|
60549
60593
|
if (!vpWidth) {
|
|
60550
|
-
const htmlFile =
|
|
60594
|
+
const htmlFile = join19(project.dir, compPath);
|
|
60551
60595
|
if (existsSync15(htmlFile)) {
|
|
60552
60596
|
sourceMtime = Math.round(statSync4(htmlFile).mtimeMs);
|
|
60553
60597
|
const html = readFileSync18(htmlFile, "utf-8");
|
|
@@ -60557,14 +60601,14 @@ function registerThumbnailRoutes(api, adapter2) {
|
|
|
60557
60601
|
if (hMatch?.[1]) compH = parseInt(hMatch[1]);
|
|
60558
60602
|
}
|
|
60559
60603
|
}
|
|
60560
|
-
const manualEditsFile =
|
|
60604
|
+
const manualEditsFile = join19(project.dir, STUDIO_MANUAL_EDITS_PATH);
|
|
60561
60605
|
let manualEditsKey = "";
|
|
60562
60606
|
if (existsSync15(manualEditsFile)) {
|
|
60563
60607
|
const manualEditsContent = readFileSync18(manualEditsFile, "utf-8");
|
|
60564
60608
|
manualEditsKey = `_${createHash3("sha1").update(manualEditsContent).digest("hex").slice(0, 16)}`;
|
|
60565
60609
|
sourceMtime = Math.max(sourceMtime, Math.round(statSync4(manualEditsFile).mtimeMs));
|
|
60566
60610
|
}
|
|
60567
|
-
const motionFile =
|
|
60611
|
+
const motionFile = join19(project.dir, STUDIO_MOTION_PATH);
|
|
60568
60612
|
let motionKey = "";
|
|
60569
60613
|
if (existsSync15(motionFile)) {
|
|
60570
60614
|
const motionContent = readFileSync18(motionFile, "utf-8");
|
|
@@ -60572,11 +60616,11 @@ function registerThumbnailRoutes(api, adapter2) {
|
|
|
60572
60616
|
sourceMtime = Math.max(sourceMtime, Math.round(statSync4(motionFile).mtimeMs));
|
|
60573
60617
|
}
|
|
60574
60618
|
const previewUrl = compPath === "index.html" ? `http://${c3.req.header("host")}/api/projects/${project.id}/preview` : `http://${c3.req.header("host")}/api/projects/${project.id}/preview/comp/${compPath}`;
|
|
60575
|
-
const cacheDir =
|
|
60619
|
+
const cacheDir = join19(project.dir, ".thumbnails");
|
|
60576
60620
|
const selectorKey = selector ? `_${selector.replace(/[^a-zA-Z0-9_-]+/g, "_").slice(0, 80)}_${selectorIndex ?? 0}` : "";
|
|
60577
60621
|
const urlVersionKey = urlVersion ? `_${urlVersion.replace(/[^a-zA-Z0-9_-]+/g, "_").slice(0, 32)}` : "";
|
|
60578
60622
|
const cacheKey = `${THUMBNAIL_CACHE_VERSION}${urlVersionKey}${manualEditsKey}${motionKey}_${format}_${compPath.replace(/\//g, "_")}_${compW}x${compH}_${sourceMtime}_${seekTime.toFixed(2)}${selectorKey}.${format === "png" ? "png" : "jpg"}`;
|
|
60579
|
-
const cachePath2 =
|
|
60623
|
+
const cachePath2 = join19(cacheDir, cacheKey);
|
|
60580
60624
|
if (existsSync15(cachePath2)) {
|
|
60581
60625
|
return new Response(new Uint8Array(readFileSync18(cachePath2)), {
|
|
60582
60626
|
headers: { "Content-Type": contentType, "Cache-Control": "public, max-age=60" }
|
|
@@ -60623,7 +60667,7 @@ var init_thumbnail = __esm({
|
|
|
60623
60667
|
|
|
60624
60668
|
// ../core/src/studio-api/routes/waveform.ts
|
|
60625
60669
|
import { existsSync as existsSync16, readFileSync as readFileSync19, writeFileSync as writeFileSync10, mkdirSync as mkdirSync9 } from "fs";
|
|
60626
|
-
import { join as
|
|
60670
|
+
import { join as join20 } from "path";
|
|
60627
60671
|
function registerWaveformRoutes(api, adapter2) {
|
|
60628
60672
|
api.get("/projects/:id/waveform/*", async (c3) => {
|
|
60629
60673
|
const project = await adapter2.resolveProject(c3.req.param("id"));
|
|
@@ -60631,10 +60675,10 @@ function registerWaveformRoutes(api, adapter2) {
|
|
|
60631
60675
|
const assetPath = decodeURIComponent(
|
|
60632
60676
|
c3.req.path.replace(`/projects/${project.id}/waveform/`, "").split("?")[0] ?? ""
|
|
60633
60677
|
);
|
|
60634
|
-
const audioPath =
|
|
60678
|
+
const audioPath = join20(project.dir, assetPath);
|
|
60635
60679
|
if (!existsSync16(audioPath)) return c3.json({ error: "file not found" }, 404);
|
|
60636
|
-
const cacheDir =
|
|
60637
|
-
const cachePath2 =
|
|
60680
|
+
const cacheDir = join20(project.dir, ".waveform-cache");
|
|
60681
|
+
const cachePath2 = join20(cacheDir, buildWaveformCacheKey(assetPath));
|
|
60638
60682
|
if (existsSync16(cachePath2)) {
|
|
60639
60683
|
try {
|
|
60640
60684
|
const peaks2 = JSON.parse(readFileSync19(cachePath2, "utf-8"));
|
|
@@ -60667,7 +60711,7 @@ var init_waveform2 = __esm({
|
|
|
60667
60711
|
import { execFileSync as execFileSync4 } from "child_process";
|
|
60668
60712
|
import { existsSync as existsSync17, readdirSync as readdirSync7, statSync as statSync5 } from "fs";
|
|
60669
60713
|
import { homedir as homedir4, platform as platform5 } from "os";
|
|
60670
|
-
import { join as
|
|
60714
|
+
import { join as join21 } from "path";
|
|
60671
60715
|
function isRecord(value) {
|
|
60672
60716
|
return typeof value === "object" && value !== null;
|
|
60673
60717
|
}
|
|
@@ -60675,18 +60719,18 @@ function fontDirectories() {
|
|
|
60675
60719
|
const home = homedir4();
|
|
60676
60720
|
if (platform5() === "darwin") {
|
|
60677
60721
|
return [
|
|
60678
|
-
|
|
60722
|
+
join21(home, "Library", "Fonts"),
|
|
60679
60723
|
"/Library/Fonts",
|
|
60680
60724
|
"/System/Library/Fonts",
|
|
60681
60725
|
"/System/Library/Fonts/Supplemental"
|
|
60682
60726
|
];
|
|
60683
60727
|
}
|
|
60684
60728
|
if (platform5() === "win32") {
|
|
60685
|
-
return [
|
|
60729
|
+
return [join21(process.env.WINDIR || "C:\\Windows", "Fonts")];
|
|
60686
60730
|
}
|
|
60687
60731
|
return [
|
|
60688
|
-
|
|
60689
|
-
|
|
60732
|
+
join21(home, ".fonts"),
|
|
60733
|
+
join21(home, ".local", "share", "fonts"),
|
|
60690
60734
|
"/usr/local/share/fonts",
|
|
60691
60735
|
"/usr/share/fonts"
|
|
60692
60736
|
];
|
|
@@ -60741,7 +60785,7 @@ function collectFontsFromDir(dir, depth = 0) {
|
|
|
60741
60785
|
if (!existsSync17(dir) || depth > 2) return [];
|
|
60742
60786
|
const fonts = [];
|
|
60743
60787
|
for (const entry of readdirSync7(dir, { withFileTypes: true })) {
|
|
60744
|
-
const fullPath =
|
|
60788
|
+
const fullPath = join21(dir, entry.name);
|
|
60745
60789
|
if (entry.isDirectory()) {
|
|
60746
60790
|
fonts.push(...collectFontsFromDir(fullPath, depth + 1));
|
|
60747
60791
|
continue;
|
|
@@ -61013,7 +61057,7 @@ import { execSync as execSync2, spawnSync as spawnSync2 } from "child_process";
|
|
|
61013
61057
|
import { existsSync as existsSync18, readdirSync as readdirSync8, rmSync as rmSync4 } from "fs";
|
|
61014
61058
|
import { basename as basename2 } from "path";
|
|
61015
61059
|
import { homedir as homedir5 } from "os";
|
|
61016
|
-
import { join as
|
|
61060
|
+
import { join as join22 } from "path";
|
|
61017
61061
|
import { Browser, detectBrowserPlatform, getInstalledBrowsers, install } from "@puppeteer/browsers";
|
|
61018
61062
|
function whichBinary2(name) {
|
|
61019
61063
|
try {
|
|
@@ -61088,15 +61132,15 @@ function findFromPuppeteerCache() {
|
|
|
61088
61132
|
}
|
|
61089
61133
|
for (const version of versions) {
|
|
61090
61134
|
const candidates = [
|
|
61091
|
-
|
|
61092
|
-
|
|
61135
|
+
join22(PUPPETEER_CACHE_DIR, version, "chrome-headless-shell-linux64", "chrome-headless-shell"),
|
|
61136
|
+
join22(
|
|
61093
61137
|
PUPPETEER_CACHE_DIR,
|
|
61094
61138
|
version,
|
|
61095
61139
|
"chrome-headless-shell-mac-arm64",
|
|
61096
61140
|
"chrome-headless-shell"
|
|
61097
61141
|
),
|
|
61098
|
-
|
|
61099
|
-
|
|
61142
|
+
join22(PUPPETEER_CACHE_DIR, version, "chrome-headless-shell-mac-x64", "chrome-headless-shell"),
|
|
61143
|
+
join22(
|
|
61100
61144
|
PUPPETEER_CACHE_DIR,
|
|
61101
61145
|
version,
|
|
61102
61146
|
"chrome-headless-shell-win64",
|
|
@@ -61225,8 +61269,8 @@ var init_manager2 = __esm({
|
|
|
61225
61269
|
"src/browser/manager.ts"() {
|
|
61226
61270
|
"use strict";
|
|
61227
61271
|
CHROME_VERSION = "131.0.6778.85";
|
|
61228
|
-
CACHE_DIR2 =
|
|
61229
|
-
PUPPETEER_CACHE_DIR =
|
|
61272
|
+
CACHE_DIR2 = join22(homedir5(), ".cache", "hyperframes", "chrome");
|
|
61273
|
+
PUPPETEER_CACHE_DIR = join22(homedir5(), ".cache", "puppeteer", "chrome-headless-shell");
|
|
61230
61274
|
SYSTEM_CHROME_PATHS = process.platform === "darwin" ? ["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"] : [
|
|
61231
61275
|
"/usr/bin/google-chrome",
|
|
61232
61276
|
"/usr/bin/google-chrome-stable",
|
|
@@ -61397,7 +61441,7 @@ var init_config2 = __esm({
|
|
|
61397
61441
|
// ../engine/src/services/browserManager.ts
|
|
61398
61442
|
import { execSync as execSync3 } from "child_process";
|
|
61399
61443
|
import { existsSync as existsSync19, readdirSync as readdirSync9 } from "fs";
|
|
61400
|
-
import { join as
|
|
61444
|
+
import { join as join23 } from "path";
|
|
61401
61445
|
import { homedir as homedir6, totalmem as totalmem3 } from "os";
|
|
61402
61446
|
async function getPuppeteer() {
|
|
61403
61447
|
if (_puppeteer) return _puppeteer;
|
|
@@ -61418,16 +61462,16 @@ function resolveHeadlessShellPath(config) {
|
|
|
61418
61462
|
if (process.env.PRODUCER_HEADLESS_SHELL_PATH) {
|
|
61419
61463
|
return process.env.PRODUCER_HEADLESS_SHELL_PATH;
|
|
61420
61464
|
}
|
|
61421
|
-
const baseDir =
|
|
61465
|
+
const baseDir = join23(homedir6(), ".cache", "puppeteer", "chrome-headless-shell");
|
|
61422
61466
|
if (!existsSync19(baseDir)) return void 0;
|
|
61423
61467
|
try {
|
|
61424
61468
|
const versions = readdirSync9(baseDir).sort().reverse();
|
|
61425
61469
|
for (const version of versions) {
|
|
61426
61470
|
const candidates = [
|
|
61427
|
-
|
|
61428
|
-
|
|
61429
|
-
|
|
61430
|
-
|
|
61471
|
+
join23(baseDir, version, "chrome-headless-shell-linux64", "chrome-headless-shell"),
|
|
61472
|
+
join23(baseDir, version, "chrome-headless-shell-mac-arm64", "chrome-headless-shell"),
|
|
61473
|
+
join23(baseDir, version, "chrome-headless-shell-mac-x64", "chrome-headless-shell"),
|
|
61474
|
+
join23(baseDir, version, "chrome-headless-shell-win64", "chrome-headless-shell.exe")
|
|
61431
61475
|
];
|
|
61432
61476
|
for (const binary of candidates) {
|
|
61433
61477
|
if (existsSync19(binary)) return binary;
|
|
@@ -62139,7 +62183,7 @@ var init_screenshotService = __esm({
|
|
|
62139
62183
|
|
|
62140
62184
|
// ../engine/src/services/frameCapture.ts
|
|
62141
62185
|
import { existsSync as existsSync20, mkdirSync as mkdirSync10, writeFileSync as writeFileSync11 } from "fs";
|
|
62142
|
-
import { join as
|
|
62186
|
+
import { join as join24 } from "path";
|
|
62143
62187
|
async function driveWarmupTicks(options, state) {
|
|
62144
62188
|
const sleep3 = options.sleep ?? realSleep;
|
|
62145
62189
|
while (true) {
|
|
@@ -62520,9 +62564,9 @@ async function initializeSession(session) {
|
|
|
62520
62564
|
}
|
|
62521
62565
|
async function captureFrameErrorDiagnostics(session, frameIndex, time, error) {
|
|
62522
62566
|
try {
|
|
62523
|
-
const diagnosticsDir =
|
|
62567
|
+
const diagnosticsDir = join24(session.outputDir, "diagnostics");
|
|
62524
62568
|
if (!existsSync20(diagnosticsDir)) mkdirSync10(diagnosticsDir, { recursive: true });
|
|
62525
|
-
const base =
|
|
62569
|
+
const base = join24(diagnosticsDir, `frame-error-${frameIndex}`);
|
|
62526
62570
|
await session.page.screenshot({ path: `${base}.png`, type: "png", fullPage: true });
|
|
62527
62571
|
const html = await session.page.content();
|
|
62528
62572
|
writeFileSync11(`${base}.html`, html, "utf-8");
|
|
@@ -62641,7 +62685,7 @@ async function captureFrame(session, frameIndex, time) {
|
|
|
62641
62685
|
);
|
|
62642
62686
|
const ext = options.format === "png" ? "png" : "jpg";
|
|
62643
62687
|
const frameName = `frame_${String(frameIndex).padStart(6, "0")}.${ext}`;
|
|
62644
|
-
const framePath =
|
|
62688
|
+
const framePath = join24(outputDir, frameName);
|
|
62645
62689
|
writeFileSync11(framePath, buffer);
|
|
62646
62690
|
return { frameIndex, time: quantizedTime, path: framePath, captureTimeMs };
|
|
62647
62691
|
}
|
|
@@ -63075,7 +63119,7 @@ var init_runFfmpeg = __esm({
|
|
|
63075
63119
|
// ../engine/src/services/chunkEncoder.ts
|
|
63076
63120
|
import { spawn as spawn6 } from "child_process";
|
|
63077
63121
|
import { copyFileSync, existsSync as existsSync21, mkdirSync as mkdirSync11, readdirSync as readdirSync10, statSync as statSync6, writeFileSync as writeFileSync12 } from "fs";
|
|
63078
|
-
import { join as
|
|
63122
|
+
import { join as join25, dirname as dirname7 } from "path";
|
|
63079
63123
|
function getEncoderPreset(quality, format = "mp4", hdr) {
|
|
63080
63124
|
const base = ENCODER_PRESETS[quality];
|
|
63081
63125
|
if (format === "webm") {
|
|
@@ -63307,7 +63351,7 @@ async function encodeFramesFromDir(framesDir, framePattern, outputPath, options,
|
|
|
63307
63351
|
if (options.useGpu) {
|
|
63308
63352
|
gpuEncoder = await getCachedGpuEncoder();
|
|
63309
63353
|
}
|
|
63310
|
-
const inputPath =
|
|
63354
|
+
const inputPath = join25(framesDir, framePattern);
|
|
63311
63355
|
const inputArgs = ["-framerate", fpsToFfmpegArg(options.fps), "-i", inputPath];
|
|
63312
63356
|
const args = buildEncoderArgs(options, inputArgs, outputPath, gpuEncoder);
|
|
63313
63357
|
return new Promise((resolve46) => {
|
|
@@ -63389,7 +63433,7 @@ async function encodeFramesChunkedConcat(framesDir, framePattern, outputPath, op
|
|
|
63389
63433
|
}
|
|
63390
63434
|
const chunkSize = Math.max(30, Math.floor(chunkSizeFrames));
|
|
63391
63435
|
const chunkCount = Math.ceil(files.length / chunkSize);
|
|
63392
|
-
const chunkDir =
|
|
63436
|
+
const chunkDir = join25(dirname7(outputPath), "chunk-encode");
|
|
63393
63437
|
if (!existsSync21(chunkDir)) mkdirSync11(chunkDir, { recursive: true });
|
|
63394
63438
|
const chunkPaths = [];
|
|
63395
63439
|
for (let i2 = 0; i2 < chunkCount; i2++) {
|
|
@@ -63406,8 +63450,8 @@ async function encodeFramesChunkedConcat(framesDir, framePattern, outputPath, op
|
|
|
63406
63450
|
const startNumber = i2 * chunkSize;
|
|
63407
63451
|
const framesInChunk = Math.min(chunkSize, files.length - startNumber);
|
|
63408
63452
|
const ext = outputPath.endsWith(".webm") ? ".webm" : outputPath.endsWith(".mov") ? ".mov" : ".mp4";
|
|
63409
|
-
const chunkPath =
|
|
63410
|
-
const inputPath =
|
|
63453
|
+
const chunkPath = join25(chunkDir, `chunk_${String(i2).padStart(4, "0")}${ext}`);
|
|
63454
|
+
const inputPath = join25(framesDir, framePattern);
|
|
63411
63455
|
const inputArgs = [
|
|
63412
63456
|
"-framerate",
|
|
63413
63457
|
fpsToFfmpegArg(options.fps),
|
|
@@ -63448,7 +63492,7 @@ async function encodeFramesChunkedConcat(framesDir, framePattern, outputPath, op
|
|
|
63448
63492
|
}
|
|
63449
63493
|
chunkPaths.push(chunkPath);
|
|
63450
63494
|
}
|
|
63451
|
-
const concatListPath =
|
|
63495
|
+
const concatListPath = join25(chunkDir, "concat-list.txt");
|
|
63452
63496
|
const concatInput = chunkPaths.map((path2) => `file '${path2.replace(/'/g, "'\\''")}'`).join("\n");
|
|
63453
63497
|
writeFileSync12(concatListPath, concatInput, "utf-8");
|
|
63454
63498
|
const concatArgs = [
|
|
@@ -64187,7 +64231,7 @@ var init_ffprobe = __esm({
|
|
|
64187
64231
|
// ../engine/src/utils/urlDownloader.ts
|
|
64188
64232
|
import { createWriteStream as createWriteStream2, existsSync as existsSync23, mkdirSync as mkdirSync13 } from "fs";
|
|
64189
64233
|
import { createHash as createHash4 } from "crypto";
|
|
64190
|
-
import { join as
|
|
64234
|
+
import { join as join26, extname as extname6 } from "path";
|
|
64191
64235
|
import { Readable } from "stream";
|
|
64192
64236
|
import { finished } from "stream/promises";
|
|
64193
64237
|
function getFilenameFromUrl(url) {
|
|
@@ -64209,7 +64253,7 @@ async function downloadToTemp(url, destDir, timeoutMs = 3e5) {
|
|
|
64209
64253
|
mkdirSync13(destDir, { recursive: true });
|
|
64210
64254
|
}
|
|
64211
64255
|
const filename = getFilenameFromUrl(url);
|
|
64212
|
-
const localPath =
|
|
64256
|
+
const localPath = join26(destDir, filename);
|
|
64213
64257
|
if (existsSync23(localPath)) {
|
|
64214
64258
|
downloadPathCache.set(url, localPath);
|
|
64215
64259
|
return localPath;
|
|
@@ -64974,7 +65018,7 @@ var init_inlineSubCompositions = __esm({
|
|
|
64974
65018
|
|
|
64975
65019
|
// ../core/src/compiler/htmlBundler.ts
|
|
64976
65020
|
import { readFileSync as readFileSync21, existsSync as existsSync24 } from "fs";
|
|
64977
|
-
import { join as
|
|
65021
|
+
import { join as join27, resolve as resolve14, relative as relative4, dirname as dirname9, isAbsolute as isAbsolute4, sep as sep3 } from "path";
|
|
64978
65022
|
import { transformSync } from "esbuild";
|
|
64979
65023
|
function safePath(projectDir, relativePath) {
|
|
64980
65024
|
const resolved = resolve14(projectDir, relativePath);
|
|
@@ -65403,7 +65447,7 @@ function stripJsCommentsParserSafe(source) {
|
|
|
65403
65447
|
}
|
|
65404
65448
|
}
|
|
65405
65449
|
async function bundleToSingleHtml(projectDir, options) {
|
|
65406
|
-
const indexPath =
|
|
65450
|
+
const indexPath = join27(projectDir, "index.html");
|
|
65407
65451
|
if (!existsSync24(indexPath)) throw new Error("index.html not found in project directory");
|
|
65408
65452
|
const rawHtml = readFileSync21(indexPath, "utf-8");
|
|
65409
65453
|
const compiled = await compileHtml(rawHtml, projectDir, options?.probeMediaDuration);
|
|
@@ -65810,7 +65854,7 @@ var init_htmlTemplate = __esm({
|
|
|
65810
65854
|
import { createHash as createHash5 } from "crypto";
|
|
65811
65855
|
import { mkdirSync as mkdirSync14, readdirSync as readdirSync11, statSync as statSync8, writeFileSync as writeFileSync13 } from "fs";
|
|
65812
65856
|
import { existsSync as existsSync25 } from "fs";
|
|
65813
|
-
import { join as
|
|
65857
|
+
import { join as join28 } from "path";
|
|
65814
65858
|
function readKeyStat(videoPath) {
|
|
65815
65859
|
try {
|
|
65816
65860
|
const stat3 = statSync8(videoPath);
|
|
@@ -65839,15 +65883,15 @@ function cacheEntryDirName(keyHash) {
|
|
|
65839
65883
|
}
|
|
65840
65884
|
function lookupCacheEntry(rootDir, input2) {
|
|
65841
65885
|
const keyHash = computeCacheKey(input2);
|
|
65842
|
-
const dir =
|
|
65843
|
-
const complete = existsSync25(
|
|
65886
|
+
const dir = join28(rootDir, cacheEntryDirName(keyHash));
|
|
65887
|
+
const complete = existsSync25(join28(dir, COMPLETE_SENTINEL));
|
|
65844
65888
|
return { entry: { dir, keyHash }, hit: complete };
|
|
65845
65889
|
}
|
|
65846
65890
|
function ensureCacheEntryDir(entry) {
|
|
65847
65891
|
mkdirSync14(entry.dir, { recursive: true });
|
|
65848
65892
|
}
|
|
65849
65893
|
function markCacheEntryComplete(entry) {
|
|
65850
|
-
writeFileSync13(
|
|
65894
|
+
writeFileSync13(join28(entry.dir, COMPLETE_SENTINEL), "", "utf-8");
|
|
65851
65895
|
}
|
|
65852
65896
|
function rehydrateCacheEntry(entry, options) {
|
|
65853
65897
|
const framePattern = `${FRAME_FILENAME_PREFIX}%05d.${options.format}`;
|
|
@@ -65855,7 +65899,7 @@ function rehydrateCacheEntry(entry, options) {
|
|
|
65855
65899
|
const suffix = `.${options.format}`;
|
|
65856
65900
|
const files = readdirSync11(entry.dir).filter((f3) => f3.startsWith(FRAME_FILENAME_PREFIX) && f3.endsWith(suffix)).sort();
|
|
65857
65901
|
files.forEach((file, idx) => {
|
|
65858
|
-
framePaths.set(idx,
|
|
65902
|
+
framePaths.set(idx, join28(entry.dir, file));
|
|
65859
65903
|
});
|
|
65860
65904
|
return {
|
|
65861
65905
|
videoId: options.videoId,
|
|
@@ -65882,7 +65926,7 @@ var init_extractionCache = __esm({
|
|
|
65882
65926
|
// ../engine/src/services/videoFrameExtractor.ts
|
|
65883
65927
|
import { spawn as spawn9 } from "child_process";
|
|
65884
65928
|
import { existsSync as existsSync26, mkdirSync as mkdirSync15, readdirSync as readdirSync12, rmSync as rmSync5 } from "fs";
|
|
65885
|
-
import { isAbsolute as isAbsolute5, join as
|
|
65929
|
+
import { isAbsolute as isAbsolute5, join as join29, posix as posix3, resolve as resolve15, sep as sep4 } from "path";
|
|
65886
65930
|
function parseVideoElements(html) {
|
|
65887
65931
|
const videos = [];
|
|
65888
65932
|
const { document: document2 } = parseHTML(unwrapTemplate(html));
|
|
@@ -65952,12 +65996,12 @@ function parseImageElements(html) {
|
|
|
65952
65996
|
async function extractVideoFramesRange(videoPath, videoId, startTime, duration, options, signal, config, outputDirOverride) {
|
|
65953
65997
|
const ffmpegProcessTimeout = config?.ffmpegProcessTimeout ?? DEFAULT_CONFIG2.ffmpegProcessTimeout;
|
|
65954
65998
|
const { fps, outputDir, quality = 95 } = options;
|
|
65955
|
-
const videoOutputDir = outputDirOverride ??
|
|
65999
|
+
const videoOutputDir = outputDirOverride ?? join29(outputDir, videoId);
|
|
65956
66000
|
if (!existsSync26(videoOutputDir)) mkdirSync15(videoOutputDir, { recursive: true });
|
|
65957
66001
|
const metadata = await extractMediaMetadata(videoPath);
|
|
65958
66002
|
const format = resolveFrameFormat(metadata, options.format);
|
|
65959
66003
|
const framePattern = `${FRAME_FILENAME_PREFIX}%05d.${format}`;
|
|
65960
|
-
const outputPattern =
|
|
66004
|
+
const outputPattern = join29(videoOutputDir, framePattern);
|
|
65961
66005
|
const isHdr = isHdrColorSpace(metadata.colorSpace);
|
|
65962
66006
|
const isMacOS = process.platform === "darwin";
|
|
65963
66007
|
const args = [];
|
|
@@ -66011,7 +66055,7 @@ async function extractVideoFramesRange(videoPath, videoId, startTime, duration,
|
|
|
66011
66055
|
const framePaths = /* @__PURE__ */ new Map();
|
|
66012
66056
|
const files = readdirSync12(videoOutputDir).filter((f3) => f3.startsWith(FRAME_FILENAME_PREFIX) && f3.endsWith(`.${format}`)).sort();
|
|
66013
66057
|
files.forEach((file, index) => {
|
|
66014
|
-
framePaths.set(index,
|
|
66058
|
+
framePaths.set(index, join29(videoOutputDir, file));
|
|
66015
66059
|
});
|
|
66016
66060
|
resolve46({
|
|
66017
66061
|
videoId,
|
|
@@ -66132,22 +66176,22 @@ function resolveProjectRelativeSrc(src, baseDir, compiledDir) {
|
|
|
66132
66176
|
if (!candidates.includes(candidate)) candidates.push(candidate);
|
|
66133
66177
|
};
|
|
66134
66178
|
for (const variant of decodeUrlPathVariants(cleanSrc)) {
|
|
66135
|
-
const fromCompiled = compiledDir ?
|
|
66136
|
-
const fromBase =
|
|
66179
|
+
const fromCompiled = compiledDir ? join29(compiledDir, variant) : null;
|
|
66180
|
+
const fromBase = join29(baseDir, variant);
|
|
66137
66181
|
const baseAbs = resolve15(baseDir);
|
|
66138
66182
|
const fromBaseAbs = resolve15(fromBase);
|
|
66139
66183
|
if (!fromBaseAbs.startsWith(baseAbs + sep4) && fromBaseAbs !== baseAbs) {
|
|
66140
66184
|
const normalized = posix3.normalize(variant.replace(/\\/g, "/"));
|
|
66141
66185
|
const stripped = normalized.replace(/^(\.\.\/)+/, "");
|
|
66142
66186
|
if (stripped && stripped !== variant && !stripped.startsWith("..")) {
|
|
66143
|
-
if (compiledDir) addCandidate2(
|
|
66144
|
-
addCandidate2(
|
|
66187
|
+
if (compiledDir) addCandidate2(join29(compiledDir, stripped));
|
|
66188
|
+
addCandidate2(join29(baseDir, stripped));
|
|
66145
66189
|
}
|
|
66146
66190
|
}
|
|
66147
66191
|
if (fromCompiled) addCandidate2(fromCompiled);
|
|
66148
66192
|
addCandidate2(fromBase);
|
|
66149
66193
|
}
|
|
66150
|
-
return candidates.find(existsSync26) ??
|
|
66194
|
+
return candidates.find(existsSync26) ?? join29(baseDir, cleanSrc);
|
|
66151
66195
|
}
|
|
66152
66196
|
async function extractAllVideoFrames(videos, baseDir, options, signal, config, compiledDir) {
|
|
66153
66197
|
const startTime = Date.now();
|
|
@@ -66177,7 +66221,7 @@ async function extractAllVideoFrames(videos, baseDir, options, signal, config, c
|
|
|
66177
66221
|
videoPath = resolveProjectRelativeSrc(video.src, baseDir, compiledDir);
|
|
66178
66222
|
}
|
|
66179
66223
|
if (isHttpUrl(videoPath)) {
|
|
66180
|
-
const downloadDir =
|
|
66224
|
+
const downloadDir = join29(options.outputDir, "_downloads");
|
|
66181
66225
|
mkdirSync15(downloadDir, { recursive: true });
|
|
66182
66226
|
videoPath = await downloadToTemp(videoPath, downloadDir);
|
|
66183
66227
|
}
|
|
@@ -66221,7 +66265,7 @@ async function extractAllVideoFrames(videos, baseDir, options, signal, config, c
|
|
|
66221
66265
|
const hdrSkippedIndices = /* @__PURE__ */ new Set();
|
|
66222
66266
|
if (hdrInfo.hasHdr && hdrInfo.dominantTransfer) {
|
|
66223
66267
|
const targetTransfer = hdrInfo.dominantTransfer;
|
|
66224
|
-
const convertDir =
|
|
66268
|
+
const convertDir = join29(options.outputDir, "_hdr_normalized");
|
|
66225
66269
|
mkdirSync15(convertDir, { recursive: true });
|
|
66226
66270
|
for (let i2 = 0; i2 < resolvedVideos.length; i2++) {
|
|
66227
66271
|
if (signal?.aborted) break;
|
|
@@ -66243,7 +66287,7 @@ async function extractAllVideoFrames(videos, baseDir, options, signal, config, c
|
|
|
66243
66287
|
const sourceRemaining = metadata.durationSeconds - entry.video.mediaStart;
|
|
66244
66288
|
segDuration = sourceRemaining > 0 ? sourceRemaining : metadata.durationSeconds;
|
|
66245
66289
|
}
|
|
66246
|
-
const convertedPath =
|
|
66290
|
+
const convertedPath = join29(convertDir, `${entry.video.id}_hdr.mp4`);
|
|
66247
66291
|
try {
|
|
66248
66292
|
await convertSdrToHdr(
|
|
66249
66293
|
entry.videoPath,
|
|
@@ -66278,7 +66322,7 @@ async function extractAllVideoFrames(videos, baseDir, options, signal, config, c
|
|
|
66278
66322
|
}
|
|
66279
66323
|
}
|
|
66280
66324
|
const vfrPreflightStart = Date.now();
|
|
66281
|
-
const vfrNormDir =
|
|
66325
|
+
const vfrNormDir = join29(options.outputDir, "_vfr_normalized");
|
|
66282
66326
|
for (let i2 = 0; i2 < resolvedVideos.length; i2++) {
|
|
66283
66327
|
if (signal?.aborted) break;
|
|
66284
66328
|
const entry = resolvedVideos[i2];
|
|
@@ -66293,7 +66337,7 @@ async function extractAllVideoFrames(videos, baseDir, options, signal, config, c
|
|
|
66293
66337
|
segDuration = sourceRemaining > 0 ? sourceRemaining : metadata.durationSeconds;
|
|
66294
66338
|
}
|
|
66295
66339
|
mkdirSync15(vfrNormDir, { recursive: true });
|
|
66296
|
-
const normalizedPath =
|
|
66340
|
+
const normalizedPath = join29(vfrNormDir, `${entry.video.id}_cfr.mp4`);
|
|
66297
66341
|
try {
|
|
66298
66342
|
await convertVfrToCfr(
|
|
66299
66343
|
entry.videoPath,
|
|
@@ -67067,7 +67111,7 @@ var init_audioVolumeEnvelope = __esm({
|
|
|
67067
67111
|
|
|
67068
67112
|
// ../engine/src/services/audioMixer.ts
|
|
67069
67113
|
import { existsSync as existsSync27, mkdirSync as mkdirSync16, rmSync as rmSync6 } from "fs";
|
|
67070
|
-
import { isAbsolute as isAbsolute6, join as
|
|
67114
|
+
import { isAbsolute as isAbsolute6, join as join30, dirname as dirname10 } from "path";
|
|
67071
67115
|
function clampVolume(volume) {
|
|
67072
67116
|
if (!Number.isFinite(volume)) return 1;
|
|
67073
67117
|
return Math.max(0, Math.min(1, volume));
|
|
@@ -67416,7 +67460,7 @@ async function processCompositionAudio(elements, baseDir, workDir, outputPath, t
|
|
|
67416
67460
|
}
|
|
67417
67461
|
let audioSrcPath = srcPath;
|
|
67418
67462
|
if (element.type === "video") {
|
|
67419
|
-
const extractedPath =
|
|
67463
|
+
const extractedPath = join30(workDir, `${element.id}-extracted.wav`);
|
|
67420
67464
|
const extractResult = await extractAudioFromVideo(
|
|
67421
67465
|
srcPath,
|
|
67422
67466
|
extractedPath,
|
|
@@ -67433,7 +67477,7 @@ async function processCompositionAudio(elements, baseDir, workDir, outputPath, t
|
|
|
67433
67477
|
}
|
|
67434
67478
|
audioSrcPath = extractedPath;
|
|
67435
67479
|
} else {
|
|
67436
|
-
const trimmedPath =
|
|
67480
|
+
const trimmedPath = join30(workDir, `${element.id}-trimmed.wav`);
|
|
67437
67481
|
const prepResult = await prepareAudioTrack(
|
|
67438
67482
|
srcPath,
|
|
67439
67483
|
trimmedPath,
|
|
@@ -67586,7 +67630,7 @@ var init_readWebGlVendorInfoFromCanvas = __esm({
|
|
|
67586
67630
|
import { cpus as cpus2, freemem as freemem2, totalmem as totalmem4 } from "os";
|
|
67587
67631
|
import { existsSync as existsSync28, mkdirSync as mkdirSync17, readdirSync as readdirSync13 } from "fs";
|
|
67588
67632
|
import { copyFile, rename } from "fs/promises";
|
|
67589
|
-
import { join as
|
|
67633
|
+
import { join as join31 } from "path";
|
|
67590
67634
|
function defaultSafeMaxWorkers() {
|
|
67591
67635
|
return Math.max(6, Math.min(16, Math.floor(cpus2().length / 8)));
|
|
67592
67636
|
}
|
|
@@ -67639,7 +67683,7 @@ function distributeFrames(totalFrames, workerCount, workDir, rangeStart = 0) {
|
|
|
67639
67683
|
workerId: i2,
|
|
67640
67684
|
startFrame,
|
|
67641
67685
|
endFrame,
|
|
67642
|
-
outputDir:
|
|
67686
|
+
outputDir: join31(workDir, `worker-${i2}`),
|
|
67643
67687
|
outputFrameOffset: rangeStart
|
|
67644
67688
|
});
|
|
67645
67689
|
}
|
|
@@ -67770,8 +67814,8 @@ async function mergeWorkerFrames(workDir, tasks, outputDir) {
|
|
|
67770
67814
|
}
|
|
67771
67815
|
const files = readdirSync13(task.outputDir).filter((f3) => f3.startsWith("frame_") && (f3.endsWith(".jpg") || f3.endsWith(".png"))).sort();
|
|
67772
67816
|
const copyTasks = files.map(async (file) => {
|
|
67773
|
-
const sourcePath =
|
|
67774
|
-
const targetPath =
|
|
67817
|
+
const sourcePath = join31(task.outputDir, file);
|
|
67818
|
+
const targetPath = join31(outputDir, file);
|
|
67775
67819
|
try {
|
|
67776
67820
|
await rename(sourcePath, targetPath);
|
|
67777
67821
|
} catch {
|
|
@@ -67811,7 +67855,7 @@ var init_parallelCoordinator = __esm({
|
|
|
67811
67855
|
import { Hono as Hono2 } from "hono";
|
|
67812
67856
|
import { serve } from "@hono/node-server";
|
|
67813
67857
|
import { readFileSync as readFileSync23, existsSync as existsSync29, statSync as statSync9 } from "fs";
|
|
67814
|
-
import { join as
|
|
67858
|
+
import { join as join32, extname as extname7 } from "path";
|
|
67815
67859
|
function createFileServer(options) {
|
|
67816
67860
|
const { projectDir, compiledDir, port = 0, stripEmbeddedRuntime = true } = options;
|
|
67817
67861
|
const headScripts = options.headScripts ?? [];
|
|
@@ -67821,11 +67865,11 @@ function createFileServer(options) {
|
|
|
67821
67865
|
let requestPath = c3.req.path;
|
|
67822
67866
|
if (requestPath === "/") requestPath = "/index.html";
|
|
67823
67867
|
const relativePath = requestPath.replace(/^\//, "");
|
|
67824
|
-
const compiledPath = compiledDir ?
|
|
67868
|
+
const compiledPath = compiledDir ? join32(compiledDir, relativePath) : null;
|
|
67825
67869
|
const hasCompiledFile = Boolean(
|
|
67826
67870
|
compiledPath && existsSync29(compiledPath) && statSync9(compiledPath).isFile()
|
|
67827
67871
|
);
|
|
67828
|
-
const filePath = hasCompiledFile ? compiledPath :
|
|
67872
|
+
const filePath = hasCompiledFile ? compiledPath : join32(projectDir, relativePath);
|
|
67829
67873
|
if (!existsSync29(filePath) || !statSync9(filePath).isFile()) {
|
|
67830
67874
|
return c3.text("Not found", 404);
|
|
67831
67875
|
}
|
|
@@ -69140,7 +69184,7 @@ var init_shaderTransitions = __esm({
|
|
|
69140
69184
|
|
|
69141
69185
|
// ../engine/src/services/hdrCapture.ts
|
|
69142
69186
|
import { existsSync as existsSync30, readdirSync as readdirSync14 } from "fs";
|
|
69143
|
-
import { join as
|
|
69187
|
+
import { join as join33 } from "path";
|
|
69144
69188
|
import { homedir as homedir7 } from "os";
|
|
69145
69189
|
function linearToPQ(L2) {
|
|
69146
69190
|
const Lp = Math.max(0, L2 * SDR_NITS / PQ_MAX_NITS);
|
|
@@ -69256,12 +69300,12 @@ function float16ToPqRgb(rawBuffer, bytesPerRow, width, height) {
|
|
|
69256
69300
|
return output;
|
|
69257
69301
|
}
|
|
69258
69302
|
function resolveHeadedChromePath() {
|
|
69259
|
-
const baseDir =
|
|
69303
|
+
const baseDir = join33(homedir7(), ".cache", "puppeteer", "chrome");
|
|
69260
69304
|
if (!existsSync30(baseDir)) return void 0;
|
|
69261
69305
|
const versions = readdirSync14(baseDir).sort().reverse();
|
|
69262
69306
|
for (const version of versions) {
|
|
69263
69307
|
const candidates = [
|
|
69264
|
-
|
|
69308
|
+
join33(
|
|
69265
69309
|
baseDir,
|
|
69266
69310
|
version,
|
|
69267
69311
|
"chrome-mac-arm64",
|
|
@@ -69270,7 +69314,7 @@ function resolveHeadedChromePath() {
|
|
|
69270
69314
|
"MacOS",
|
|
69271
69315
|
"Google Chrome for Testing"
|
|
69272
69316
|
),
|
|
69273
|
-
|
|
69317
|
+
join33(
|
|
69274
69318
|
baseDir,
|
|
69275
69319
|
version,
|
|
69276
69320
|
"chrome-mac-x64",
|
|
@@ -69279,8 +69323,8 @@ function resolveHeadedChromePath() {
|
|
|
69279
69323
|
"MacOS",
|
|
69280
69324
|
"Google Chrome for Testing"
|
|
69281
69325
|
),
|
|
69282
|
-
|
|
69283
|
-
|
|
69326
|
+
join33(baseDir, version, "chrome-linux64", "chrome"),
|
|
69327
|
+
join33(baseDir, version, "chrome-win64", "chrome.exe")
|
|
69284
69328
|
];
|
|
69285
69329
|
for (const binary of candidates) {
|
|
69286
69330
|
if (existsSync30(binary)) return binary;
|
|
@@ -69555,9 +69599,10 @@ __export(deterministicFonts_exports, {
|
|
|
69555
69599
|
iterateFontFamilyDeclarations: () => iterateFontFamilyDeclarations,
|
|
69556
69600
|
parseFontFamilyValue: () => parseFontFamilyValue
|
|
69557
69601
|
});
|
|
69602
|
+
import { createHash as createHash6 } from "crypto";
|
|
69558
69603
|
import { existsSync as existsSync31, mkdirSync as mkdirSync18, readFileSync as readFileSync24, writeFileSync as writeFileSync15 } from "fs";
|
|
69559
69604
|
import { homedir as homedir8, tmpdir as tmpdir3 } from "os";
|
|
69560
|
-
import { join as
|
|
69605
|
+
import { join as join34 } from "path";
|
|
69561
69606
|
function parseFontFamilyValue(value) {
|
|
69562
69607
|
return value.split(",").map((piece) => piece.trim().replace(/^['"]/, "").replace(/['"]$/, "").trim()).filter((piece) => piece.length > 0);
|
|
69563
69608
|
}
|
|
@@ -69609,7 +69654,7 @@ function extractRequestedFontFamilies(html) {
|
|
|
69609
69654
|
}
|
|
69610
69655
|
return requested;
|
|
69611
69656
|
}
|
|
69612
|
-
function buildFontFaceRule(familyName, src, weight, style) {
|
|
69657
|
+
function buildFontFaceRule(familyName, src, weight, style, unicodeRange) {
|
|
69613
69658
|
return [
|
|
69614
69659
|
"@font-face {",
|
|
69615
69660
|
` font-family: "${familyName}";`,
|
|
@@ -69617,6 +69662,9 @@ function buildFontFaceRule(familyName, src, weight, style) {
|
|
|
69617
69662
|
` font-style: ${style};`,
|
|
69618
69663
|
` font-weight: ${weight};`,
|
|
69619
69664
|
" font-display: block;",
|
|
69665
|
+
// Preserve the subset's unicode-range so the browser selects the right
|
|
69666
|
+
// per-codepoint subset (matching Google Fonts' own CSS semantics).
|
|
69667
|
+
...unicodeRange ? [` unicode-range: ${unicodeRange};`] : [],
|
|
69620
69668
|
"}"
|
|
69621
69669
|
].join("\n");
|
|
69622
69670
|
}
|
|
@@ -69637,18 +69685,31 @@ async function buildFontFaceCss(requestedFamilies, options) {
|
|
|
69637
69685
|
}
|
|
69638
69686
|
const googleFaces2 = await fetchGoogleFont(originalCaseFamily, options);
|
|
69639
69687
|
for (const face of googleFaces2) {
|
|
69640
|
-
|
|
69641
|
-
|
|
69642
|
-
|
|
69643
|
-
|
|
69644
|
-
|
|
69688
|
+
if (coveredWeights.has(`${face.weight}:${face.style}`)) continue;
|
|
69689
|
+
rules.push(
|
|
69690
|
+
buildFontFaceRule(
|
|
69691
|
+
originalCaseFamily,
|
|
69692
|
+
face.dataUri,
|
|
69693
|
+
face.weight,
|
|
69694
|
+
face.style,
|
|
69695
|
+
face.unicodeRange
|
|
69696
|
+
)
|
|
69697
|
+
);
|
|
69645
69698
|
}
|
|
69646
69699
|
continue;
|
|
69647
69700
|
}
|
|
69648
69701
|
const googleFaces = await fetchGoogleFont(originalCaseFamily, options);
|
|
69649
69702
|
if (googleFaces.length > 0) {
|
|
69650
69703
|
for (const face of googleFaces) {
|
|
69651
|
-
rules.push(
|
|
69704
|
+
rules.push(
|
|
69705
|
+
buildFontFaceRule(
|
|
69706
|
+
originalCaseFamily,
|
|
69707
|
+
face.dataUri,
|
|
69708
|
+
face.weight,
|
|
69709
|
+
face.style,
|
|
69710
|
+
face.unicodeRange
|
|
69711
|
+
)
|
|
69712
|
+
);
|
|
69652
69713
|
}
|
|
69653
69714
|
continue;
|
|
69654
69715
|
}
|
|
@@ -69677,26 +69738,55 @@ function warnUnresolvedFonts(unresolved) {
|
|
|
69677
69738
|
);
|
|
69678
69739
|
}
|
|
69679
69740
|
function resolveFontCacheRoot() {
|
|
69680
|
-
return process.env.HYPERFRAMES_FONT_CACHE_DIR ?? (process.env.AWS_LAMBDA_FUNCTION_NAME ?
|
|
69741
|
+
return process.env.HYPERFRAMES_FONT_CACHE_DIR ?? (process.env.AWS_LAMBDA_FUNCTION_NAME ? join34(tmpdir3(), "hyperframes", "fonts") : join34(homedir8(), ".cache", "hyperframes", "fonts"));
|
|
69681
69742
|
}
|
|
69682
69743
|
function fontSlug(familyName) {
|
|
69683
69744
|
return familyName.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
69684
69745
|
}
|
|
69685
69746
|
function fontCacheDir(slug) {
|
|
69686
|
-
const dir =
|
|
69747
|
+
const dir = join34(GOOGLE_FONTS_CACHE_DIR, slug);
|
|
69687
69748
|
if (!existsSync31(dir)) {
|
|
69688
69749
|
mkdirSync18(dir, { recursive: true });
|
|
69689
69750
|
}
|
|
69690
69751
|
return dir;
|
|
69691
69752
|
}
|
|
69692
|
-
function
|
|
69693
|
-
return
|
|
69753
|
+
function subsetToken(woff2Url) {
|
|
69754
|
+
return createHash6("sha1").update(woff2Url).digest("hex").slice(0, 12);
|
|
69755
|
+
}
|
|
69756
|
+
function cachedWoff2Path(slug, weight, style, subset) {
|
|
69757
|
+
return join34(fontCacheDir(slug), `${weight}-${style}-${subset}.woff2`);
|
|
69694
69758
|
}
|
|
69695
69759
|
function fontFetchError(familyName, url, what, cause) {
|
|
69696
69760
|
const reason = "status" in cause ? `returned HTTP ${cause.status}` : `failed: ${cause.error.message}`;
|
|
69697
69761
|
const message = `[deterministicFonts] ${what} fetch for ${JSON.stringify(familyName)} ${reason}. Distributed renders require deterministic fonts; system-font fallback would produce non-byte-identical output.`;
|
|
69698
69762
|
return new FontFetchError(familyName, url, message, "error" in cause ? cause.error : void 0);
|
|
69699
69763
|
}
|
|
69764
|
+
async function ensureWoff2DataUri(cachePath2, woff2Url, familyName, weight, style, options) {
|
|
69765
|
+
try {
|
|
69766
|
+
return `data:font/woff2;base64,${readFileSync24(cachePath2).toString("base64")}`;
|
|
69767
|
+
} catch {
|
|
69768
|
+
}
|
|
69769
|
+
const woff2What = `Google Fonts woff2 (${weight}/${style})`;
|
|
69770
|
+
try {
|
|
69771
|
+
const fontRes = await options.fetchImpl(woff2Url);
|
|
69772
|
+
if (!fontRes.ok) {
|
|
69773
|
+
if (fontRes.status >= 500 && options.failClosedFontFetch) {
|
|
69774
|
+
throw fontFetchError(familyName, woff2Url, woff2What, { status: fontRes.status });
|
|
69775
|
+
}
|
|
69776
|
+
return null;
|
|
69777
|
+
}
|
|
69778
|
+
writeFileSync15(cachePath2, Buffer.from(await fontRes.arrayBuffer()), { flag: "wx", mode: 420 });
|
|
69779
|
+
} catch (err) {
|
|
69780
|
+
if (err instanceof FontFetchError) throw err;
|
|
69781
|
+
if (err.code === "EEXIST") {
|
|
69782
|
+
} else if (options.failClosedFontFetch) {
|
|
69783
|
+
throw fontFetchError(familyName, woff2Url, woff2What, { error: err });
|
|
69784
|
+
} else {
|
|
69785
|
+
return null;
|
|
69786
|
+
}
|
|
69787
|
+
}
|
|
69788
|
+
return `data:font/woff2;base64,${readFileSync24(cachePath2).toString("base64")}`;
|
|
69789
|
+
}
|
|
69700
69790
|
async function fetchGoogleFont(familyName, options) {
|
|
69701
69791
|
const slug = fontSlug(familyName);
|
|
69702
69792
|
const encodedFamily = encodeURIComponent(familyName);
|
|
@@ -69720,37 +69810,24 @@ async function fetchGoogleFont(familyName, options) {
|
|
|
69720
69810
|
}
|
|
69721
69811
|
return [];
|
|
69722
69812
|
}
|
|
69723
|
-
const faceRegex = /@font-face\s*\{[^}]*font-style:\s*(normal|italic)[^}]*font-weight:\s*(\d+)[^}]*src:\s*url\(([^)]+)\)\s*format\(['"]woff2['"]\)[^}]*\}/gi;
|
|
69813
|
+
const faceRegex = /@font-face\s*\{[^}]*font-style:\s*(normal|italic)[^}]*font-weight:\s*(\d+)[^}]*src:\s*url\(([^)]+)\)\s*format\(['"]woff2['"]\)(?:[^}]*?unicode-range:\s*([^;}]+))?[^}]*\}/gi;
|
|
69724
69814
|
const faces = [];
|
|
69725
69815
|
for (const match of cssText.matchAll(faceRegex)) {
|
|
69726
69816
|
const style = match[1] || "normal";
|
|
69727
69817
|
const weight = match[2] || "400";
|
|
69728
69818
|
const woff2Url = match[3] || "";
|
|
69819
|
+
const unicodeRange = match[4]?.trim() || void 0;
|
|
69729
69820
|
if (!woff2Url) continue;
|
|
69730
|
-
const cachePath2 = cachedWoff2Path(slug, weight, style);
|
|
69731
|
-
|
|
69732
|
-
|
|
69733
|
-
|
|
69734
|
-
|
|
69735
|
-
|
|
69736
|
-
|
|
69737
|
-
|
|
69738
|
-
|
|
69739
|
-
|
|
69740
|
-
}
|
|
69741
|
-
const buffer = Buffer.from(await fontRes.arrayBuffer());
|
|
69742
|
-
writeFileSync15(cachePath2, buffer);
|
|
69743
|
-
} catch (err) {
|
|
69744
|
-
if (err instanceof FontFetchError) throw err;
|
|
69745
|
-
if (options.failClosedFontFetch) {
|
|
69746
|
-
throw fontFetchError(familyName, woff2Url, woff2What, { error: err });
|
|
69747
|
-
}
|
|
69748
|
-
continue;
|
|
69749
|
-
}
|
|
69750
|
-
}
|
|
69751
|
-
const fontBytes = readFileSync24(cachePath2);
|
|
69752
|
-
const dataUri = `data:font/woff2;base64,${fontBytes.toString("base64")}`;
|
|
69753
|
-
faces.push({ weight, style, dataUri });
|
|
69821
|
+
const cachePath2 = cachedWoff2Path(slug, weight, style, subsetToken(woff2Url));
|
|
69822
|
+
const dataUri = await ensureWoff2DataUri(
|
|
69823
|
+
cachePath2,
|
|
69824
|
+
woff2Url,
|
|
69825
|
+
familyName,
|
|
69826
|
+
weight,
|
|
69827
|
+
style,
|
|
69828
|
+
options
|
|
69829
|
+
);
|
|
69830
|
+
if (dataUri) faces.push({ weight, style, dataUri, unicodeRange });
|
|
69754
69831
|
}
|
|
69755
69832
|
if (faces.length > 0) {
|
|
69756
69833
|
console.log(
|
|
@@ -69947,7 +70024,7 @@ var init_deterministicFonts = __esm({
|
|
|
69947
70024
|
});
|
|
69948
70025
|
|
|
69949
70026
|
// ../producer/src/services/hyperframeRuntimeLoader.ts
|
|
69950
|
-
import { createHash as
|
|
70027
|
+
import { createHash as createHash7 } from "crypto";
|
|
69951
70028
|
import { existsSync as existsSync32, readFileSync as readFileSync25 } from "fs";
|
|
69952
70029
|
import { dirname as dirname11, resolve as resolve16 } from "path";
|
|
69953
70030
|
import { fileURLToPath as fileURLToPath2 } from "url";
|
|
@@ -69990,7 +70067,7 @@ function resolveVerifiedHyperframeRuntime() {
|
|
|
69990
70067
|
throw new Error(`[HyperframeRuntimeLoader] Missing runtime artifact at ${runtimePath}.`);
|
|
69991
70068
|
}
|
|
69992
70069
|
const runtimeSource = readFileSync25(runtimePath, "utf8");
|
|
69993
|
-
const runtimeSha =
|
|
70070
|
+
const runtimeSha = createHash7("sha256").update(runtimeSource, "utf8").digest("hex");
|
|
69994
70071
|
if (runtimeSha !== manifest.sha256) {
|
|
69995
70072
|
throw new Error(
|
|
69996
70073
|
`[HyperframeRuntimeLoader] Runtime checksum mismatch. expected=${manifest.sha256} actual=${runtimeSha}`
|
|
@@ -70029,7 +70106,7 @@ var init_hyperframeRuntimeLoader = __esm({
|
|
|
70029
70106
|
import { Hono as Hono3 } from "hono";
|
|
70030
70107
|
import { serve as serve2 } from "@hono/node-server";
|
|
70031
70108
|
import { readFileSync as readFileSync26, existsSync as existsSync33, realpathSync, statSync as statSync10 } from "fs";
|
|
70032
|
-
import { join as
|
|
70109
|
+
import { join as join35, extname as extname8, resolve as resolve17, sep as sep5 } from "path";
|
|
70033
70110
|
function isPathInside(child, parent, options = {}) {
|
|
70034
70111
|
const { resolveSymlinks = false, pathModule } = options;
|
|
70035
70112
|
const resolveFn = pathModule?.resolve ?? resolve17;
|
|
@@ -70203,13 +70280,13 @@ function createFileServer2(options) {
|
|
|
70203
70280
|
}).join("/");
|
|
70204
70281
|
let filePath = null;
|
|
70205
70282
|
if (compiledDir) {
|
|
70206
|
-
const candidate =
|
|
70283
|
+
const candidate = join35(compiledDir, relativePath);
|
|
70207
70284
|
if (existsSync33(candidate) && isPathInside(candidate, compiledDir) && statSync10(candidate).isFile()) {
|
|
70208
70285
|
filePath = candidate;
|
|
70209
70286
|
}
|
|
70210
70287
|
}
|
|
70211
70288
|
if (!filePath) {
|
|
70212
|
-
const candidate =
|
|
70289
|
+
const candidate = join35(projectDir, relativePath);
|
|
70213
70290
|
if (existsSync33(candidate) && isPathInside(candidate, projectDir) && statSync10(candidate).isFile()) {
|
|
70214
70291
|
filePath = candidate;
|
|
70215
70292
|
}
|
|
@@ -70538,7 +70615,7 @@ var init_logger = __esm({
|
|
|
70538
70615
|
// ../producer/src/utils/paths.ts
|
|
70539
70616
|
import {
|
|
70540
70617
|
basename as basename3,
|
|
70541
|
-
join as
|
|
70618
|
+
join as join36,
|
|
70542
70619
|
resolve as nodeResolve,
|
|
70543
70620
|
relative as nodeRelative,
|
|
70544
70621
|
isAbsolute as nodeIsAbsolute
|
|
@@ -70566,7 +70643,7 @@ function toExternalAssetKey(absPath) {
|
|
|
70566
70643
|
function resolveRenderPaths(projectDir, outputPath, rendersDir = DEFAULT_RENDERS_DIR) {
|
|
70567
70644
|
const absoluteProjectDir = nodeResolve(projectDir);
|
|
70568
70645
|
const projectName = basename3(absoluteProjectDir);
|
|
70569
|
-
const resolvedOutputPath = outputPath ??
|
|
70646
|
+
const resolvedOutputPath = outputPath ?? join36(rendersDir, `${projectName}.mp4`);
|
|
70570
70647
|
const absoluteOutputPath = nodeResolve(resolvedOutputPath);
|
|
70571
70648
|
return { absoluteProjectDir, absoluteOutputPath };
|
|
70572
70649
|
}
|
|
@@ -70580,7 +70657,7 @@ var init_paths = __esm({
|
|
|
70580
70657
|
|
|
70581
70658
|
// ../producer/src/services/render/shared.ts
|
|
70582
70659
|
import { copyFileSync as copyFileSync2, cpSync, existsSync as existsSync34, mkdirSync as mkdirSync19, symlinkSync, writeFileSync as writeFileSync16 } from "fs";
|
|
70583
|
-
import { basename as basename4, dirname as dirname12, isAbsolute as isAbsolute7, join as
|
|
70660
|
+
import { basename as basename4, dirname as dirname12, isAbsolute as isAbsolute7, join as join37, relative as relative5, resolve as resolve18 } from "path";
|
|
70584
70661
|
function projectBrowserEndToCompositionTimeline(existingStart, browserStart, browserEnd) {
|
|
70585
70662
|
return browserEnd + (existingStart - browserStart);
|
|
70586
70663
|
}
|
|
@@ -70616,16 +70693,16 @@ function resolveDeviceScaleFactor(input2) {
|
|
|
70616
70693
|
return widthRatio;
|
|
70617
70694
|
}
|
|
70618
70695
|
function writeCompiledArtifacts(compiled, workDir, includeSummary) {
|
|
70619
|
-
const compileDir =
|
|
70696
|
+
const compileDir = join37(workDir, "compiled");
|
|
70620
70697
|
mkdirSync19(compileDir, { recursive: true });
|
|
70621
|
-
writeFileSync16(
|
|
70698
|
+
writeFileSync16(join37(compileDir, "index.html"), compiled.html, "utf-8");
|
|
70622
70699
|
for (const [srcPath, html] of compiled.subCompositions) {
|
|
70623
|
-
const outPath =
|
|
70700
|
+
const outPath = join37(compileDir, srcPath);
|
|
70624
70701
|
mkdirSync19(dirname12(outPath), { recursive: true });
|
|
70625
70702
|
writeFileSync16(outPath, html, "utf-8");
|
|
70626
70703
|
}
|
|
70627
70704
|
for (const [relativePath, absolutePath] of compiled.externalAssets) {
|
|
70628
|
-
const outPath = resolve18(
|
|
70705
|
+
const outPath = resolve18(join37(compileDir, relativePath));
|
|
70629
70706
|
if (!isPathInside2(outPath, compileDir)) {
|
|
70630
70707
|
console.warn(`[Render] Skipping external asset with unsafe path: ${relativePath}`);
|
|
70631
70708
|
continue;
|
|
@@ -70656,7 +70733,7 @@ function writeCompiledArtifacts(compiled, workDir, includeSummary) {
|
|
|
70656
70733
|
renderModeHints: compiled.renderModeHints,
|
|
70657
70734
|
hasShaderTransitions: compiled.hasShaderTransitions
|
|
70658
70735
|
};
|
|
70659
|
-
writeFileSync16(
|
|
70736
|
+
writeFileSync16(join37(compileDir, "summary.json"), JSON.stringify(summary, null, 2), "utf-8");
|
|
70660
70737
|
}
|
|
70661
70738
|
}
|
|
70662
70739
|
function applyRenderModeHints(alreadyForced, compiled, log2 = defaultLogger) {
|
|
@@ -70759,7 +70836,7 @@ var init_shared = __esm({
|
|
|
70759
70836
|
BROWSER_MEDIA_EPSILON = 1e-4;
|
|
70760
70837
|
materializePathModule = {
|
|
70761
70838
|
resolve: resolve18,
|
|
70762
|
-
join:
|
|
70839
|
+
join: join37,
|
|
70763
70840
|
dirname: dirname12,
|
|
70764
70841
|
basename: basename4,
|
|
70765
70842
|
relative: relative5,
|
|
@@ -71054,7 +71131,7 @@ var init_perfSummary = __esm({
|
|
|
71054
71131
|
});
|
|
71055
71132
|
|
|
71056
71133
|
// ../producer/src/services/render/captureCost.ts
|
|
71057
|
-
import { join as
|
|
71134
|
+
import { join as join38 } from "path";
|
|
71058
71135
|
function estimateCaptureCostMultiplier(compiled) {
|
|
71059
71136
|
let multiplier = 1;
|
|
71060
71137
|
const reasons = [];
|
|
@@ -71243,7 +71320,7 @@ async function runCaptureCalibration(input2) {
|
|
|
71243
71320
|
const calibrationCfg = createCaptureCalibrationConfig({ ...cfg, forceScreenshot });
|
|
71244
71321
|
let calibration;
|
|
71245
71322
|
try {
|
|
71246
|
-
calibration = await runOneCalibration(
|
|
71323
|
+
calibration = await runOneCalibration(join38(workDir, "capture-calibration"), calibrationCfg);
|
|
71247
71324
|
} catch (error) {
|
|
71248
71325
|
const shouldFallback = !forceScreenshot && shouldFallbackToScreenshotAfterCalibrationError(error);
|
|
71249
71326
|
if (!shouldFallback) {
|
|
@@ -71276,7 +71353,7 @@ async function runCaptureCalibration(input2) {
|
|
|
71276
71353
|
const screenshotCfg = createCaptureCalibrationConfig({ ...cfg, forceScreenshot: true });
|
|
71277
71354
|
try {
|
|
71278
71355
|
calibration = await runOneCalibration(
|
|
71279
|
-
|
|
71356
|
+
join38(workDir, "capture-calibration-screenshot"),
|
|
71280
71357
|
screenshotCfg
|
|
71281
71358
|
);
|
|
71282
71359
|
} catch (fallbackError) {
|
|
@@ -71337,7 +71414,7 @@ var init_urlDownloader2 = __esm({
|
|
|
71337
71414
|
|
|
71338
71415
|
// ../producer/src/services/htmlCompiler.ts
|
|
71339
71416
|
import { readFileSync as readFileSync27, existsSync as existsSync35, mkdirSync as mkdirSync20 } from "fs";
|
|
71340
|
-
import { join as
|
|
71417
|
+
import { join as join39, dirname as dirname13, resolve as resolve19 } from "path";
|
|
71341
71418
|
function dedupeElementsById(elements) {
|
|
71342
71419
|
const deduped = /* @__PURE__ */ new Map();
|
|
71343
71420
|
for (const element of elements) {
|
|
@@ -71411,7 +71488,7 @@ async function resolveMediaDuration(src, mediaStart, baseDir, downloadDir, tagNa
|
|
|
71411
71488
|
return { duration: 0, resolvedPath: src };
|
|
71412
71489
|
}
|
|
71413
71490
|
} else if (!filePath.startsWith("/")) {
|
|
71414
|
-
filePath =
|
|
71491
|
+
filePath = join39(baseDir, filePath);
|
|
71415
71492
|
}
|
|
71416
71493
|
if (!existsSync35(filePath)) {
|
|
71417
71494
|
return { duration: 0, resolvedPath: filePath };
|
|
@@ -72237,7 +72314,7 @@ var init_htmlCompiler2 = __esm({
|
|
|
72237
72314
|
});
|
|
72238
72315
|
|
|
72239
72316
|
// ../producer/src/services/render/stages/compileStage.ts
|
|
72240
|
-
import { join as
|
|
72317
|
+
import { join as join40 } from "path";
|
|
72241
72318
|
async function runCompileStage(input2) {
|
|
72242
72319
|
const {
|
|
72243
72320
|
projectDir,
|
|
@@ -72252,7 +72329,7 @@ async function runCompileStage(input2) {
|
|
|
72252
72329
|
failClosedFontFetch
|
|
72253
72330
|
} = input2;
|
|
72254
72331
|
const compileStart = Date.now();
|
|
72255
|
-
const compiled = await compileForRender(projectDir, htmlPath,
|
|
72332
|
+
const compiled = await compileForRender(projectDir, htmlPath, join40(workDir, "downloads"), {
|
|
72256
72333
|
failClosedFontFetch: failClosedFontFetch === true
|
|
72257
72334
|
});
|
|
72258
72335
|
assertNotAborted();
|
|
@@ -72317,7 +72394,7 @@ var init_compileStage = __esm({
|
|
|
72317
72394
|
});
|
|
72318
72395
|
|
|
72319
72396
|
// ../producer/src/services/render/stages/probeStage.ts
|
|
72320
|
-
import { join as
|
|
72397
|
+
import { join as join41 } from "path";
|
|
72321
72398
|
function hasScriptedAudioVolumeAutomation(html, audioCount) {
|
|
72322
72399
|
if (audioCount <= 0) return false;
|
|
72323
72400
|
const { document: document2 } = parseHTML(html);
|
|
@@ -72360,7 +72437,7 @@ async function runProbeStage(input2) {
|
|
|
72360
72437
|
if (hasScriptedAudio) reasons.push("scripted audio volume");
|
|
72361
72438
|
fileServer = await createFileServer2({
|
|
72362
72439
|
projectDir,
|
|
72363
|
-
compiledDir:
|
|
72440
|
+
compiledDir: join41(workDir, "compiled"),
|
|
72364
72441
|
port: 0,
|
|
72365
72442
|
preHeadScripts: [VIRTUAL_TIME_SHIM]
|
|
72366
72443
|
});
|
|
@@ -72375,7 +72452,7 @@ async function runProbeStage(input2) {
|
|
|
72375
72452
|
};
|
|
72376
72453
|
probeSession = await createCaptureSession(
|
|
72377
72454
|
fileServer.url,
|
|
72378
|
-
|
|
72455
|
+
join41(workDir, "probe"),
|
|
72379
72456
|
captureOpts,
|
|
72380
72457
|
null,
|
|
72381
72458
|
cfg
|
|
@@ -72407,7 +72484,7 @@ async function runProbeStage(input2) {
|
|
|
72407
72484
|
compiled,
|
|
72408
72485
|
resolutions,
|
|
72409
72486
|
projectDir,
|
|
72410
|
-
|
|
72487
|
+
join41(workDir, "downloads")
|
|
72411
72488
|
);
|
|
72412
72489
|
assertNotAborted();
|
|
72413
72490
|
composition.videos = compiled.videos;
|
|
@@ -72618,7 +72695,7 @@ var init_probeStage = __esm({
|
|
|
72618
72695
|
|
|
72619
72696
|
// ../producer/src/services/render/stages/extractVideosStage.ts
|
|
72620
72697
|
import { existsSync as existsSync36 } from "fs";
|
|
72621
|
-
import { isAbsolute as isAbsolute8, join as
|
|
72698
|
+
import { isAbsolute as isAbsolute8, join as join42 } from "path";
|
|
72622
72699
|
async function runExtractVideosStage(input2) {
|
|
72623
72700
|
const {
|
|
72624
72701
|
projectDir,
|
|
@@ -72659,7 +72736,7 @@ async function runExtractVideosStage(input2) {
|
|
|
72659
72736
|
composition.images.map(async (img) => {
|
|
72660
72737
|
let imgPath = img.src;
|
|
72661
72738
|
if (!imgPath.startsWith("/")) {
|
|
72662
|
-
const fromCompiled = existsSync36(
|
|
72739
|
+
const fromCompiled = existsSync36(join42(compiledDir, imgPath)) ? join42(compiledDir, imgPath) : join42(projectDir, imgPath);
|
|
72663
72740
|
imgPath = fromCompiled;
|
|
72664
72741
|
}
|
|
72665
72742
|
if (!existsSync36(imgPath)) return null;
|
|
@@ -72684,7 +72761,7 @@ async function runExtractVideosStage(input2) {
|
|
|
72684
72761
|
// output framerate exact.
|
|
72685
72762
|
{
|
|
72686
72763
|
fps: fpsToNumber(job.config.fps),
|
|
72687
|
-
outputDir:
|
|
72764
|
+
outputDir: join42(compiledDir, "__hyperframes_video_frames")
|
|
72688
72765
|
},
|
|
72689
72766
|
abortSignal,
|
|
72690
72767
|
{ extractCacheDir: cfg.extractCacheDir },
|
|
@@ -72747,17 +72824,17 @@ var init_extractVideosStage = __esm({
|
|
|
72747
72824
|
});
|
|
72748
72825
|
|
|
72749
72826
|
// ../producer/src/services/render/stages/audioStage.ts
|
|
72750
|
-
import { join as
|
|
72827
|
+
import { join as join43 } from "path";
|
|
72751
72828
|
async function runAudioStage(input2) {
|
|
72752
72829
|
const { projectDir, workDir, compiledDir, duration, audios, abortSignal, assertNotAborted } = input2;
|
|
72753
72830
|
const stage3Start = Date.now();
|
|
72754
|
-
const audioOutputPath =
|
|
72831
|
+
const audioOutputPath = join43(workDir, "audio.aac");
|
|
72755
72832
|
let hasAudio = false;
|
|
72756
72833
|
if (audios.length > 0) {
|
|
72757
72834
|
const audioResult = await processCompositionAudio(
|
|
72758
72835
|
audios,
|
|
72759
72836
|
projectDir,
|
|
72760
|
-
|
|
72837
|
+
join43(workDir, "audio-work"),
|
|
72761
72838
|
audioOutputPath,
|
|
72762
72839
|
duration,
|
|
72763
72840
|
abortSignal,
|
|
@@ -73138,7 +73215,7 @@ var init_hdrImageTransferCache = __esm({
|
|
|
73138
73215
|
|
|
73139
73216
|
// ../producer/src/services/render/stages/captureHdrResources.ts
|
|
73140
73217
|
import { mkdirSync as mkdirSync21, openSync, readFileSync as readFileSync28, statSync as statSync11 } from "fs";
|
|
73141
|
-
import { join as
|
|
73218
|
+
import { join as join44 } from "path";
|
|
73142
73219
|
function planHdrResources(args) {
|
|
73143
73220
|
const { composition, nativeHdrVideoIds, nativeHdrImageIds, projectDir, compiledDir } = args;
|
|
73144
73221
|
const hdrVideoIds = composition.videos.filter((v2) => nativeHdrVideoIds.has(v2.id)).map((v2) => v2.id);
|
|
@@ -73147,8 +73224,8 @@ function planHdrResources(args) {
|
|
|
73147
73224
|
if (!hdrVideoIds.includes(v2.id)) continue;
|
|
73148
73225
|
let srcPath = v2.src;
|
|
73149
73226
|
if (!srcPath.startsWith("/")) {
|
|
73150
|
-
const fromCompiled =
|
|
73151
|
-
srcPath = args.existsSync(fromCompiled) ? fromCompiled :
|
|
73227
|
+
const fromCompiled = join44(compiledDir, srcPath);
|
|
73228
|
+
srcPath = args.existsSync(fromCompiled) ? fromCompiled : join44(projectDir, srcPath);
|
|
73152
73229
|
}
|
|
73153
73230
|
hdrVideoSrcPaths.set(v2.id, srcPath);
|
|
73154
73231
|
}
|
|
@@ -73221,11 +73298,11 @@ async function extractHdrVideoFrames(args) {
|
|
|
73221
73298
|
for (const [videoId, srcPath] of prep.hdrVideoSrcPaths) {
|
|
73222
73299
|
const video = composition.videos.find((v2) => v2.id === videoId);
|
|
73223
73300
|
if (!video) continue;
|
|
73224
|
-
const frameDir =
|
|
73301
|
+
const frameDir = join44(framesDir, `hdr_${videoId}`);
|
|
73225
73302
|
mkdirSync21(frameDir, { recursive: true });
|
|
73226
73303
|
const duration = video.end - video.start;
|
|
73227
73304
|
const dims = prep.hdrExtractionDims.get(videoId) ?? { width, height };
|
|
73228
|
-
const rawPath =
|
|
73305
|
+
const rawPath = join44(frameDir, "frames.rgb48le");
|
|
73229
73306
|
const ffmpegArgs = [
|
|
73230
73307
|
"-ss",
|
|
73231
73308
|
String(video.mediaStart),
|
|
@@ -73554,7 +73631,7 @@ var init_captureHdrFrameShared = __esm({
|
|
|
73554
73631
|
|
|
73555
73632
|
// ../producer/src/services/render/stages/captureHdrSequentialLoop.ts
|
|
73556
73633
|
import { writeFileSync as writeFileSync17 } from "fs";
|
|
73557
|
-
import { join as
|
|
73634
|
+
import { join as join45 } from "path";
|
|
73558
73635
|
async function runSequentialLayeredFrameLoop(input2) {
|
|
73559
73636
|
const {
|
|
73560
73637
|
job,
|
|
@@ -73675,7 +73752,7 @@ async function runSequentialLayeredFrameLoop(input2) {
|
|
|
73675
73752
|
addHdrTiming(hdrPerf, "normalCompositeMs", timingStart);
|
|
73676
73753
|
if (debugDumpEnabled && debugDumpDir && i2 % 30 === 0) {
|
|
73677
73754
|
writeFileSync17(
|
|
73678
|
-
|
|
73755
|
+
join45(debugDumpDir, `frame_${String(i2).padStart(4, "0")}_final_rgb48le.bin`),
|
|
73679
73756
|
normalCanvas
|
|
73680
73757
|
);
|
|
73681
73758
|
}
|
|
@@ -73718,7 +73795,7 @@ var init_captureHdrSequentialLoop = __esm({
|
|
|
73718
73795
|
// ../producer/src/services/shaderTransitionWorkerPool.ts
|
|
73719
73796
|
import { Worker } from "worker_threads";
|
|
73720
73797
|
import { fileURLToPath as fileURLToPath3, pathToFileURL } from "url";
|
|
73721
|
-
import { dirname as dirname14, join as
|
|
73798
|
+
import { dirname as dirname14, join as join46 } from "path";
|
|
73722
73799
|
import { createRequire } from "module";
|
|
73723
73800
|
import { existsSync as existsSync37 } from "fs";
|
|
73724
73801
|
import { cpus as cpus3 } from "os";
|
|
@@ -73732,9 +73809,9 @@ function resolveWorkerEntry(explicit) {
|
|
|
73732
73809
|
return { path: override, isTs };
|
|
73733
73810
|
}
|
|
73734
73811
|
const moduleDir = dirname14(fileURLToPath3(import.meta.url));
|
|
73735
|
-
const jsPath =
|
|
73812
|
+
const jsPath = join46(moduleDir, "shaderTransitionWorker.js");
|
|
73736
73813
|
if (existsSync37(jsPath)) return { path: jsPath, isTs: false };
|
|
73737
|
-
const tsPath =
|
|
73814
|
+
const tsPath = join46(moduleDir, "shaderTransitionWorker.ts");
|
|
73738
73815
|
return { path: tsPath, isTs: true };
|
|
73739
73816
|
}
|
|
73740
73817
|
function buildExecArgv(entryIsTs) {
|
|
@@ -73905,7 +73982,7 @@ var init_shaderTransitionWorkerPool = __esm({
|
|
|
73905
73982
|
|
|
73906
73983
|
// ../producer/src/services/render/stages/captureHdrHybridLoop.ts
|
|
73907
73984
|
import { writeFileSync as writeFileSync18 } from "fs";
|
|
73908
|
-
import { join as
|
|
73985
|
+
import { join as join47 } from "path";
|
|
73909
73986
|
async function runHybridLayeredFrameLoop(input2) {
|
|
73910
73987
|
const {
|
|
73911
73988
|
job,
|
|
@@ -74100,7 +74177,7 @@ async function runHybridLayeredFrameLoop(input2) {
|
|
|
74100
74177
|
addHdrTiming(hdrPerf, "normalCompositeMs", timingStart);
|
|
74101
74178
|
if (debugDumpEnabled && debugDumpDir && i2 % 30 === 0) {
|
|
74102
74179
|
writeFileSync18(
|
|
74103
|
-
|
|
74180
|
+
join47(debugDumpDir, `frame_${String(i2).padStart(4, "0")}_final_rgb48le.bin`),
|
|
74104
74181
|
canvas
|
|
74105
74182
|
);
|
|
74106
74183
|
}
|
|
@@ -74143,7 +74220,7 @@ var init_captureHdrHybridLoop = __esm({
|
|
|
74143
74220
|
|
|
74144
74221
|
// ../producer/src/services/render/stages/captureHdrStage.ts
|
|
74145
74222
|
import { existsSync as existsSync38, mkdirSync as mkdirSync22 } from "fs";
|
|
74146
|
-
import { join as
|
|
74223
|
+
import { join as join48 } from "path";
|
|
74147
74224
|
async function runCaptureHdrStage(input2) {
|
|
74148
74225
|
const {
|
|
74149
74226
|
job,
|
|
@@ -74302,7 +74379,7 @@ async function runCaptureHdrStage(input2) {
|
|
|
74302
74379
|
if (hdrVideoFrameSources.has(v2.id)) hdrVideoEndTimes.set(v2.id, v2.end);
|
|
74303
74380
|
}
|
|
74304
74381
|
const debugDumpEnabled = process.env.KEEP_TEMP === "1";
|
|
74305
|
-
const debugDumpDir = debugDumpEnabled ?
|
|
74382
|
+
const debugDumpDir = debugDumpEnabled ? join48(framesDir, "debug-composite") : null;
|
|
74306
74383
|
if (debugDumpDir && !existsSync38(debugDumpDir)) {
|
|
74307
74384
|
mkdirSync22(debugDumpDir, { recursive: true });
|
|
74308
74385
|
}
|
|
@@ -74460,7 +74537,7 @@ var init_captureHdrStage = __esm({
|
|
|
74460
74537
|
|
|
74461
74538
|
// ../producer/src/services/render/stages/encodeStage.ts
|
|
74462
74539
|
import { copyFileSync as copyFileSync3, existsSync as existsSync39, mkdirSync as mkdirSync23, readdirSync as readdirSync15 } from "fs";
|
|
74463
|
-
import { join as
|
|
74540
|
+
import { join as join49 } from "path";
|
|
74464
74541
|
async function runEncodeStage(input2) {
|
|
74465
74542
|
const {
|
|
74466
74543
|
job,
|
|
@@ -74494,11 +74571,11 @@ async function runEncodeStage(input2) {
|
|
|
74494
74571
|
);
|
|
74495
74572
|
}
|
|
74496
74573
|
captured.forEach((name, i2) => {
|
|
74497
|
-
const dst =
|
|
74498
|
-
copyFileSync3(
|
|
74574
|
+
const dst = join49(outputPath, `frame_${String(i2 + 1).padStart(6, "0")}.png`);
|
|
74575
|
+
copyFileSync3(join49(framesDir, name), dst);
|
|
74499
74576
|
});
|
|
74500
74577
|
if (hasAudio && audioOutputPath && existsSync39(audioOutputPath)) {
|
|
74501
|
-
copyFileSync3(audioOutputPath,
|
|
74578
|
+
copyFileSync3(audioOutputPath, join49(outputPath, "audio.aac"));
|
|
74502
74579
|
log2.info(`[Render] png-sequence: audio.aac sidecar written to ${outputPath}/audio.aac`);
|
|
74503
74580
|
}
|
|
74504
74581
|
return { encodeMs: Date.now() - stage5Start };
|
|
@@ -74609,7 +74686,7 @@ import {
|
|
|
74609
74686
|
copyFileSync as copyFileSync4,
|
|
74610
74687
|
appendFileSync
|
|
74611
74688
|
} from "fs";
|
|
74612
|
-
import { join as
|
|
74689
|
+
import { join as join50, dirname as dirname15, resolve as resolve20 } from "path";
|
|
74613
74690
|
import { randomUUID as randomUUID2 } from "crypto";
|
|
74614
74691
|
import { fileURLToPath as fileURLToPath4 } from "url";
|
|
74615
74692
|
function sampleDirectoryBytes(dir) {
|
|
@@ -74625,7 +74702,7 @@ function sampleDirectoryBytes(dir) {
|
|
|
74625
74702
|
continue;
|
|
74626
74703
|
}
|
|
74627
74704
|
for (const name of entries2) {
|
|
74628
|
-
const full =
|
|
74705
|
+
const full = join50(current, name);
|
|
74629
74706
|
try {
|
|
74630
74707
|
const st3 = statSync12(full);
|
|
74631
74708
|
if (st3.isDirectory()) {
|
|
@@ -74711,7 +74788,7 @@ function findMissingFrameRanges(totalFrames, framesDir, frameExt) {
|
|
|
74711
74788
|
const ranges = [];
|
|
74712
74789
|
let rangeStart = null;
|
|
74713
74790
|
for (let frameIndex = 0; frameIndex < totalFrames; frameIndex++) {
|
|
74714
|
-
const framePath =
|
|
74791
|
+
const framePath = join50(framesDir, `frame_${String(frameIndex).padStart(6, "0")}.${frameExt}`);
|
|
74715
74792
|
const missing = !existsSync40(framePath);
|
|
74716
74793
|
if (missing && rangeStart === null) {
|
|
74717
74794
|
rangeStart = frameIndex;
|
|
@@ -74734,7 +74811,7 @@ function buildMissingFrameRetryBatches(ranges, maxWorkers, workDir, attempt, ran
|
|
|
74734
74811
|
workerId,
|
|
74735
74812
|
startFrame: rangeStart + range.startFrame,
|
|
74736
74813
|
endFrame: rangeStart + range.endFrame,
|
|
74737
|
-
outputDir:
|
|
74814
|
+
outputDir: join50(workDir, `retry-${attempt}-batch-${batchIndex}-worker-${workerId}`),
|
|
74738
74815
|
outputFrameOffset: rangeStart
|
|
74739
74816
|
}));
|
|
74740
74817
|
batches.push(batch);
|
|
@@ -74753,7 +74830,7 @@ function isRecoverableParallelCaptureError(error) {
|
|
|
74753
74830
|
function countCapturedFrames(totalFrames, framesDir, frameExt) {
|
|
74754
74831
|
let captured = 0;
|
|
74755
74832
|
for (let frameIndex = 0; frameIndex < totalFrames; frameIndex++) {
|
|
74756
|
-
const framePath =
|
|
74833
|
+
const framePath = join50(framesDir, `frame_${String(frameIndex).padStart(6, "0")}.${frameExt}`);
|
|
74757
74834
|
if (existsSync40(framePath)) captured++;
|
|
74758
74835
|
}
|
|
74759
74836
|
return captured;
|
|
@@ -74775,7 +74852,7 @@ async function executeDiskCaptureWithAdaptiveRetry(options) {
|
|
|
74775
74852
|
frameCount,
|
|
74776
74853
|
reason: attempt === 0 ? "initial" : "retry"
|
|
74777
74854
|
});
|
|
74778
|
-
const attemptWorkDir =
|
|
74855
|
+
const attemptWorkDir = join50(options.workDir, `capture-attempt-${attempt}`);
|
|
74779
74856
|
const batches = missingRanges ? buildMissingFrameRetryBatches(
|
|
74780
74857
|
missingRanges,
|
|
74781
74858
|
currentWorkers,
|
|
@@ -75205,7 +75282,7 @@ async function compositeHdrFrame(ctx, canvas, time, fullStacking, elementFilter,
|
|
|
75205
75282
|
if (shouldLog && debugDumpDir) {
|
|
75206
75283
|
const after2 = countNonZeroRgb48(canvas);
|
|
75207
75284
|
const dumpName = `frame_${String(debugFrameIndex).padStart(4, "0")}_layer_${String(layerIdx).padStart(2, "0")}_dom.png`;
|
|
75208
|
-
const dumpPath =
|
|
75285
|
+
const dumpPath = join50(debugDumpDir, dumpName);
|
|
75209
75286
|
writeFileSync19(dumpPath, domPng);
|
|
75210
75287
|
log2.info("[diag] dom layer blit", {
|
|
75211
75288
|
frame: debugFrameIndex,
|
|
@@ -75292,8 +75369,8 @@ function extractStandaloneEntryFromIndex(indexHtml, entryFile) {
|
|
|
75292
75369
|
async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSignal) {
|
|
75293
75370
|
const moduleDir = dirname15(fileURLToPath4(import.meta.url));
|
|
75294
75371
|
const producerRoot = process.env.PRODUCER_RENDERS_DIR ? resolve20(process.env.PRODUCER_RENDERS_DIR, "..") : resolve20(moduleDir, "../..");
|
|
75295
|
-
const debugDir =
|
|
75296
|
-
const workDir = job.config.debug ?
|
|
75372
|
+
const debugDir = join50(producerRoot, ".debug");
|
|
75373
|
+
const workDir = job.config.debug ? join50(debugDir, job.id) : join50(dirname15(outputPath), `work-${job.id}`);
|
|
75297
75374
|
const pipelineStart = Date.now();
|
|
75298
75375
|
const log2 = job.config.logger ?? defaultLogger;
|
|
75299
75376
|
let fileServer = null;
|
|
@@ -75306,7 +75383,7 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
75306
75383
|
imageDecodeFailures: 0
|
|
75307
75384
|
};
|
|
75308
75385
|
let hdrPerf;
|
|
75309
|
-
const perfOutputPath =
|
|
75386
|
+
const perfOutputPath = join50(workDir, "perf-summary.json");
|
|
75310
75387
|
const cfg = { ...job.config.producerConfig ?? resolveConfig() };
|
|
75311
75388
|
const outputFormat = job.config.format ?? "mp4";
|
|
75312
75389
|
const isWebm = outputFormat === "webm";
|
|
@@ -75327,19 +75404,19 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
75327
75404
|
assertNotAborted();
|
|
75328
75405
|
if (!existsSync40(workDir)) mkdirSync24(workDir, { recursive: true });
|
|
75329
75406
|
if (job.config.debug) {
|
|
75330
|
-
const logPath =
|
|
75407
|
+
const logPath = join50(workDir, "render.log");
|
|
75331
75408
|
restoreLogger = installDebugLogger(logPath, log2);
|
|
75332
75409
|
}
|
|
75333
75410
|
const entryFile = job.config.entryFile || "index.html";
|
|
75334
|
-
let htmlPath =
|
|
75411
|
+
let htmlPath = join50(projectDir, entryFile);
|
|
75335
75412
|
if (!existsSync40(htmlPath)) {
|
|
75336
75413
|
throw new Error(`Entry file not found: ${htmlPath}`);
|
|
75337
75414
|
}
|
|
75338
75415
|
assertNotAborted();
|
|
75339
75416
|
const rawEntry = readFileSync29(htmlPath, "utf-8");
|
|
75340
75417
|
if (entryFile !== "index.html" && rawEntry.trimStart().startsWith("<template")) {
|
|
75341
|
-
const wrapperPath =
|
|
75342
|
-
const projectIndexPath =
|
|
75418
|
+
const wrapperPath = join50(workDir, "standalone-entry.html");
|
|
75419
|
+
const projectIndexPath = join50(projectDir, "index.html");
|
|
75343
75420
|
if (!existsSync40(projectIndexPath)) {
|
|
75344
75421
|
throw new Error(
|
|
75345
75422
|
`Template entry file "${entryFile}" requires a project index.html to extract its render shell.`
|
|
@@ -75403,7 +75480,7 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
75403
75480
|
perfStages.browserProbeMs = probeResult.browserProbeMs;
|
|
75404
75481
|
perfStages.compileMs = Date.now() - stage1Start;
|
|
75405
75482
|
updateJobStatus(job, "preprocessing", "Extracting video frames", 10, onProgress);
|
|
75406
|
-
const compiledDir =
|
|
75483
|
+
const compiledDir = join50(workDir, "compiled");
|
|
75407
75484
|
const extractResult = await runExtractVideosStage({
|
|
75408
75485
|
projectDir,
|
|
75409
75486
|
compiledDir,
|
|
@@ -75450,13 +75527,13 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
75450
75527
|
if (!fileServer) {
|
|
75451
75528
|
fileServer = await createFileServer2({
|
|
75452
75529
|
projectDir,
|
|
75453
|
-
compiledDir:
|
|
75530
|
+
compiledDir: join50(workDir, "compiled"),
|
|
75454
75531
|
port: 0,
|
|
75455
75532
|
preHeadScripts: [VIRTUAL_TIME_SHIM]
|
|
75456
75533
|
});
|
|
75457
75534
|
assertNotAborted();
|
|
75458
75535
|
}
|
|
75459
|
-
const framesDir =
|
|
75536
|
+
const framesDir = join50(workDir, "captured-frames");
|
|
75460
75537
|
if (!existsSync40(framesDir)) mkdirSync24(framesDir, { recursive: true });
|
|
75461
75538
|
const captureOptions = {
|
|
75462
75539
|
width,
|
|
@@ -75533,7 +75610,7 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
75533
75610
|
"png-sequence": ""
|
|
75534
75611
|
};
|
|
75535
75612
|
const videoExt = FORMAT_EXT3[outputFormat] ?? ".mp4";
|
|
75536
|
-
const videoOnlyPath =
|
|
75613
|
+
const videoOnlyPath = join50(workDir, `video-only${videoExt}`);
|
|
75537
75614
|
const nativeHdrIds = /* @__PURE__ */ new Set([...nativeHdrVideoIds, ...nativeHdrImageIds]);
|
|
75538
75615
|
const hasHdrContent = Boolean(effectiveHdr && nativeHdrIds.size > 0);
|
|
75539
75616
|
const usePageSideCompositingForTransitions = cfg.enablePageSideCompositing && compiled.hasShaderTransitions && !hasHdrContent && !isPngSequence && !needsAlpha;
|
|
@@ -75751,7 +75828,7 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
75751
75828
|
}
|
|
75752
75829
|
if (job.config.debug) {
|
|
75753
75830
|
if (!isPngSequence && existsSync40(outputPath)) {
|
|
75754
|
-
const debugOutput =
|
|
75831
|
+
const debugOutput = join50(workDir, `output${videoExt}`);
|
|
75755
75832
|
copyFileSync4(outputPath, debugOutput);
|
|
75756
75833
|
}
|
|
75757
75834
|
} else if (process.env.KEEP_TEMP === "1") {
|
|
@@ -75879,7 +75956,7 @@ var init_config3 = __esm({
|
|
|
75879
75956
|
|
|
75880
75957
|
// ../producer/src/services/hyperframeLint.ts
|
|
75881
75958
|
import { existsSync as existsSync41, readFileSync as readFileSync30, statSync as statSync13 } from "fs";
|
|
75882
|
-
import { resolve as resolve21, join as
|
|
75959
|
+
import { resolve as resolve21, join as join51 } from "path";
|
|
75883
75960
|
function isStringRecord(value) {
|
|
75884
75961
|
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
75885
75962
|
return false;
|
|
@@ -75927,7 +76004,7 @@ function readProjectEntryFile(projectDir, preferredEntryFile) {
|
|
|
75927
76004
|
}
|
|
75928
76005
|
}
|
|
75929
76006
|
return {
|
|
75930
|
-
error: `No HTML entry file found in project directory: ${
|
|
76007
|
+
error: `No HTML entry file found in project directory: ${join51(absProjectDir, preferredEntryFile || "index.html")}`
|
|
75931
76008
|
};
|
|
75932
76009
|
}
|
|
75933
76010
|
function prepareHyperframeLintBody(body) {
|
|
@@ -76024,7 +76101,7 @@ import {
|
|
|
76024
76101
|
rmSync as rmSync10,
|
|
76025
76102
|
createReadStream
|
|
76026
76103
|
} from "fs";
|
|
76027
|
-
import { resolve as resolve22, dirname as dirname16, join as
|
|
76104
|
+
import { resolve as resolve22, dirname as dirname16, join as join52 } from "path";
|
|
76028
76105
|
import { tmpdir as tmpdir4 } from "os";
|
|
76029
76106
|
import { parseArgs as parseArgs2 } from "util";
|
|
76030
76107
|
import crypto2 from "crypto";
|
|
@@ -76078,8 +76155,8 @@ async function prepareRenderBody(body) {
|
|
|
76078
76155
|
}
|
|
76079
76156
|
}
|
|
76080
76157
|
const tempRoot = process.env.PRODUCER_TMP_PROJECT_DIR || tmpdir4();
|
|
76081
|
-
const tempProjectDir = mkdtempSync2(
|
|
76082
|
-
writeFileSync20(
|
|
76158
|
+
const tempProjectDir = mkdtempSync2(join52(tempRoot, "producer-project-"));
|
|
76159
|
+
writeFileSync20(join52(tempProjectDir, "index.html"), htmlContent, "utf-8");
|
|
76083
76160
|
return {
|
|
76084
76161
|
prepared: {
|
|
76085
76162
|
input: {
|
|
@@ -76508,9 +76585,9 @@ var init_parityContract2 = __esm({
|
|
|
76508
76585
|
});
|
|
76509
76586
|
|
|
76510
76587
|
// ../producer/src/services/render/stages/planHash.ts
|
|
76511
|
-
import { createHash as
|
|
76588
|
+
import { createHash as createHash8 } from "crypto";
|
|
76512
76589
|
function computePlanHash(input2) {
|
|
76513
|
-
const hash2 =
|
|
76590
|
+
const hash2 = createHash8("sha256");
|
|
76514
76591
|
hash2.update(PLAN_HASH_SCHEMA_PREFIX, "utf8");
|
|
76515
76592
|
hash2.update(input2.compositionHtml);
|
|
76516
76593
|
hash2.update(FIELD_DELIMITER);
|
|
@@ -76557,7 +76634,7 @@ function canonicalJsonStringify(value) {
|
|
|
76557
76634
|
throw new TypeError(`canonicalJsonStringify: unsupported value type ${typeof value}`);
|
|
76558
76635
|
}
|
|
76559
76636
|
function sha256Hex(bytes) {
|
|
76560
|
-
const h3 =
|
|
76637
|
+
const h3 = createHash8("sha256");
|
|
76561
76638
|
h3.update(bytes);
|
|
76562
76639
|
return h3.digest("hex");
|
|
76563
76640
|
}
|
|
@@ -76572,7 +76649,7 @@ var init_planHash = __esm({
|
|
|
76572
76649
|
|
|
76573
76650
|
// ../producer/src/services/render/stages/freezePlan.ts
|
|
76574
76651
|
import { existsSync as existsSync43, mkdirSync as mkdirSync26, readFileSync as readFileSync31, readdirSync as readdirSync17, writeFileSync as writeFileSync21 } from "fs";
|
|
76575
|
-
import { join as
|
|
76652
|
+
import { join as join53, relative as relative6, resolve as resolve23 } from "path";
|
|
76576
76653
|
function stripUndefined(value) {
|
|
76577
76654
|
if (Array.isArray(value)) return value.map(stripUndefined);
|
|
76578
76655
|
if (value !== null && typeof value === "object") {
|
|
@@ -76593,7 +76670,7 @@ function listPlanFiles(planDir) {
|
|
|
76593
76670
|
function walk(dir) {
|
|
76594
76671
|
const entries2 = readdirSync17(dir, { withFileTypes: true });
|
|
76595
76672
|
for (const entry of entries2) {
|
|
76596
|
-
const full =
|
|
76673
|
+
const full = join53(dir, entry.name);
|
|
76597
76674
|
if (entry.isDirectory()) {
|
|
76598
76675
|
walk(full);
|
|
76599
76676
|
} else if (entry.isFile()) {
|
|
@@ -76629,8 +76706,8 @@ function collectPlanAssetShas(planDir) {
|
|
|
76629
76706
|
return { compositionHtml, assets };
|
|
76630
76707
|
}
|
|
76631
76708
|
function recomputePlanHashFromPlanDir(planDir) {
|
|
76632
|
-
const planJsonPath =
|
|
76633
|
-
const encoderJsonPath =
|
|
76709
|
+
const planJsonPath = join53(planDir, "plan.json");
|
|
76710
|
+
const encoderJsonPath = join53(planDir, "meta", "encoder.json");
|
|
76634
76711
|
if (!existsSync43(planJsonPath)) {
|
|
76635
76712
|
throw new Error(`[freezePlan] plan.json missing: ${planJsonPath}`);
|
|
76636
76713
|
}
|
|
@@ -76666,18 +76743,18 @@ async function freezePlan(input2) {
|
|
|
76666
76743
|
if (!existsSync43(planDir)) {
|
|
76667
76744
|
throw new Error(`[freezePlan] planDir does not exist: ${planDir}`);
|
|
76668
76745
|
}
|
|
76669
|
-
const metaDir =
|
|
76746
|
+
const metaDir = join53(planDir, "meta");
|
|
76670
76747
|
if (!existsSync43(metaDir)) mkdirSync26(metaDir, { recursive: true });
|
|
76671
76748
|
writeFileSync21(
|
|
76672
|
-
|
|
76749
|
+
join53(metaDir, "composition.json"),
|
|
76673
76750
|
`${JSON.stringify(composition, null, 2)}
|
|
76674
76751
|
`,
|
|
76675
76752
|
"utf-8"
|
|
76676
76753
|
);
|
|
76677
76754
|
const encoderForCanonical = stripUndefined(encoder);
|
|
76678
76755
|
const encoderConfigCanonicalJson = canonicalJsonStringify(encoderForCanonical);
|
|
76679
|
-
writeFileSync21(
|
|
76680
|
-
writeFileSync21(
|
|
76756
|
+
writeFileSync21(join53(metaDir, "encoder.json"), encoderConfigCanonicalJson, "utf-8");
|
|
76757
|
+
writeFileSync21(join53(metaDir, "chunks.json"), `${JSON.stringify(chunks, null, 2)}
|
|
76681
76758
|
`, "utf-8");
|
|
76682
76759
|
const { compositionHtml, assets } = collectPlanAssetShas(planDir);
|
|
76683
76760
|
const planHash = computePlanHash({
|
|
@@ -76700,7 +76777,7 @@ async function freezePlan(input2) {
|
|
|
76700
76777
|
duration: durationSeconds,
|
|
76701
76778
|
hasAudio
|
|
76702
76779
|
};
|
|
76703
|
-
const planJsonPath =
|
|
76780
|
+
const planJsonPath = join53(planDir, "plan.json");
|
|
76704
76781
|
writeFileSync21(planJsonPath, `${JSON.stringify(planJson, null, 2)}
|
|
76705
76782
|
`, "utf-8");
|
|
76706
76783
|
return { planJsonPath, planHash };
|
|
@@ -76808,7 +76885,7 @@ var init_runtimeEnvSnapshot = __esm({
|
|
|
76808
76885
|
|
|
76809
76886
|
// ../producer/src/services/distributed/shared.ts
|
|
76810
76887
|
import { execFile as execFileCallback } from "child_process";
|
|
76811
|
-
import { dirname as dirname17, join as
|
|
76888
|
+
import { dirname as dirname17, join as join54 } from "path";
|
|
76812
76889
|
import { existsSync as existsSync44, readFileSync as readFileSync32 } from "fs";
|
|
76813
76890
|
import { fileURLToPath as fileURLToPath5 } from "url";
|
|
76814
76891
|
import { promisify as promisify2 } from "util";
|
|
@@ -76846,7 +76923,7 @@ function readProducerVersion() {
|
|
|
76846
76923
|
const startDir = dirname17(fileURLToPath5(import.meta.url));
|
|
76847
76924
|
let current = startDir;
|
|
76848
76925
|
for (let i2 = 0; i2 < 10; i2++) {
|
|
76849
|
-
const candidate =
|
|
76926
|
+
const candidate = join54(current, "package.json");
|
|
76850
76927
|
if (existsSync44(candidate)) {
|
|
76851
76928
|
try {
|
|
76852
76929
|
const pkg = JSON.parse(readFileSync32(candidate, "utf-8"));
|
|
@@ -76888,7 +76965,7 @@ import {
|
|
|
76888
76965
|
statSync as statSync15,
|
|
76889
76966
|
writeFileSync as writeFileSync22
|
|
76890
76967
|
} from "fs";
|
|
76891
|
-
import { join as
|
|
76968
|
+
import { join as join55, relative as relative7, sep as sep6 } from "path";
|
|
76892
76969
|
function formatBytes(bytes) {
|
|
76893
76970
|
if (bytes < 1024) return `${bytes} B`;
|
|
76894
76971
|
if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KiB`;
|
|
@@ -76913,7 +76990,7 @@ function measurePlanDirBytes(planDir) {
|
|
|
76913
76990
|
return;
|
|
76914
76991
|
}
|
|
76915
76992
|
for (const entry of entries2) {
|
|
76916
|
-
const full =
|
|
76993
|
+
const full = join55(dir, entry.name);
|
|
76917
76994
|
if (entry.isDirectory()) {
|
|
76918
76995
|
walk(full);
|
|
76919
76996
|
} else if (entry.isFile()) {
|
|
@@ -77073,13 +77150,13 @@ async function plan(projectDir, config, planDir) {
|
|
|
77073
77150
|
producerConfig: config.producerConfig
|
|
77074
77151
|
});
|
|
77075
77152
|
const entryFile = config.entryFile ?? "index.html";
|
|
77076
|
-
const htmlPath =
|
|
77153
|
+
const htmlPath = join55(projectDir, entryFile);
|
|
77077
77154
|
if (!existsSync45(htmlPath)) {
|
|
77078
77155
|
throw new Error(`[plan] entry file not found: ${htmlPath}`);
|
|
77079
77156
|
}
|
|
77080
|
-
const workDir =
|
|
77157
|
+
const workDir = join55(planDir, ".plan-work");
|
|
77081
77158
|
if (!existsSync45(workDir)) mkdirSync27(workDir, { recursive: true });
|
|
77082
|
-
const compiledDir =
|
|
77159
|
+
const compiledDir = join55(workDir, "compiled");
|
|
77083
77160
|
mkdirSync27(compiledDir, { recursive: true });
|
|
77084
77161
|
cpSync2(projectDir, compiledDir, {
|
|
77085
77162
|
recursive: true,
|
|
@@ -77091,7 +77168,7 @@ async function plan(projectDir, config, planDir) {
|
|
|
77091
77168
|
return firstSegment === void 0 || !PLAN_PROJECT_DIR_SKIP_SEGMENTS.has(firstSegment);
|
|
77092
77169
|
}
|
|
77093
77170
|
});
|
|
77094
|
-
const finalCompiledDir =
|
|
77171
|
+
const finalCompiledDir = join55(planDir, "compiled");
|
|
77095
77172
|
const needsAlpha = config.format === "png-sequence" || config.format === "mov" || config.format === "webm";
|
|
77096
77173
|
const compileResult = await runCompileStage({
|
|
77097
77174
|
projectDir,
|
|
@@ -77162,8 +77239,8 @@ async function plan(projectDir, config, planDir) {
|
|
|
77162
77239
|
abortSignal,
|
|
77163
77240
|
assertNotAborted
|
|
77164
77241
|
});
|
|
77165
|
-
const stagedVideoFrames =
|
|
77166
|
-
const videoFramesDst =
|
|
77242
|
+
const stagedVideoFrames = join55(compiledDir, "__hyperframes_video_frames");
|
|
77243
|
+
const videoFramesDst = join55(planDir, "video-frames");
|
|
77167
77244
|
if (existsSync45(videoFramesDst)) rmSync11(videoFramesDst, { recursive: true, force: true });
|
|
77168
77245
|
if (existsSync45(stagedVideoFrames)) {
|
|
77169
77246
|
renameSync4(stagedVideoFrames, videoFramesDst);
|
|
@@ -77183,13 +77260,13 @@ async function plan(projectDir, config, planDir) {
|
|
|
77183
77260
|
metadata: ext.metadata
|
|
77184
77261
|
}))
|
|
77185
77262
|
};
|
|
77186
|
-
mkdirSync27(
|
|
77263
|
+
mkdirSync27(join55(planDir, "meta"), { recursive: true });
|
|
77187
77264
|
writeFileSync22(
|
|
77188
|
-
|
|
77265
|
+
join55(planDir, PLAN_VIDEOS_META_RELATIVE_PATH),
|
|
77189
77266
|
JSON.stringify(planVideosJson, null, 2),
|
|
77190
77267
|
"utf-8"
|
|
77191
77268
|
);
|
|
77192
|
-
const planAudioPath =
|
|
77269
|
+
const planAudioPath = join55(planDir, "audio.aac");
|
|
77193
77270
|
if (audioResult.hasAudio && existsSync45(audioResult.audioOutputPath)) {
|
|
77194
77271
|
renameSync4(audioResult.audioOutputPath, planAudioPath);
|
|
77195
77272
|
}
|
|
@@ -77330,11 +77407,11 @@ var init_plan = __esm({
|
|
|
77330
77407
|
// ../producer/src/services/distributed/renderChunk.ts
|
|
77331
77408
|
import { randomBytes as randomBytes2 } from "crypto";
|
|
77332
77409
|
import { existsSync as existsSync46, mkdirSync as mkdirSync28, readFileSync as readFileSync33, readdirSync as readdirSync19, rmSync as rmSync12, writeFileSync as writeFileSync23 } from "fs";
|
|
77333
|
-
import { extname as extname9, join as
|
|
77410
|
+
import { extname as extname9, join as join56 } from "path";
|
|
77334
77411
|
function rebuildExtractedFramesFromPlanDir(planDir, videos) {
|
|
77335
77412
|
const result = [];
|
|
77336
77413
|
for (const v2 of videos) {
|
|
77337
|
-
const outputDir =
|
|
77414
|
+
const outputDir = join56(planDir, "video-frames", v2.videoId);
|
|
77338
77415
|
if (!existsSync46(outputDir)) {
|
|
77339
77416
|
throw new Error(
|
|
77340
77417
|
`[renderChunk] planDir missing extracted video frames for ${JSON.stringify(v2.videoId)}: ${outputDir} not present. plan() should have written frames here; the planDir is malformed.`
|
|
@@ -77346,7 +77423,7 @@ function rebuildExtractedFramesFromPlanDir(planDir, videos) {
|
|
|
77346
77423
|
for (let i2 = 0; i2 < frames.length; i2++) {
|
|
77347
77424
|
const frameName = frames[i2];
|
|
77348
77425
|
if (!frameName) continue;
|
|
77349
|
-
framePaths.set(i2 + 1,
|
|
77426
|
+
framePaths.set(i2 + 1, join56(outputDir, frameName));
|
|
77350
77427
|
}
|
|
77351
77428
|
result.push({
|
|
77352
77429
|
videoId: v2.videoId,
|
|
@@ -77371,7 +77448,7 @@ function hashChunkOutput(outputPath, kind) {
|
|
|
77371
77448
|
if (kind === "file") return sha256Hex(readFileSync33(outputPath));
|
|
77372
77449
|
const entries2 = readdirSync19(outputPath).filter((name) => /\.(png|jpg|jpeg)$/i.test(name)).sort();
|
|
77373
77450
|
const lines = entries2.map(
|
|
77374
|
-
(name) => `${name}\0${sha256Hex(readFileSync33(
|
|
77451
|
+
(name) => `${name}\0${sha256Hex(readFileSync33(join56(outputPath, name)))}`
|
|
77375
77452
|
);
|
|
77376
77453
|
return sha256Hex(lines.join("\0"));
|
|
77377
77454
|
}
|
|
@@ -77384,9 +77461,9 @@ function resolvePresetForLockedEncoder(basePreset, lockedEncoder) {
|
|
|
77384
77461
|
async function renderChunk(planDir, chunkIndex, outputChunkPath) {
|
|
77385
77462
|
const start = Date.now();
|
|
77386
77463
|
const log2 = defaultLogger;
|
|
77387
|
-
const planJsonPath =
|
|
77388
|
-
const encoderJsonPath =
|
|
77389
|
-
const chunksJsonPath =
|
|
77464
|
+
const planJsonPath = join56(planDir, "plan.json");
|
|
77465
|
+
const encoderJsonPath = join56(planDir, "meta", "encoder.json");
|
|
77466
|
+
const chunksJsonPath = join56(planDir, "meta", "chunks.json");
|
|
77390
77467
|
for (const required of [planJsonPath, encoderJsonPath, chunksJsonPath]) {
|
|
77391
77468
|
if (!existsSync46(required)) {
|
|
77392
77469
|
throw new RenderChunkValidationError(
|
|
@@ -77398,7 +77475,7 @@ async function renderChunk(planDir, chunkIndex, outputChunkPath) {
|
|
|
77398
77475
|
const plan2 = JSON.parse(readFileSync33(planJsonPath, "utf-8"));
|
|
77399
77476
|
const encoder = JSON.parse(readFileSync33(encoderJsonPath, "utf-8"));
|
|
77400
77477
|
const chunks = JSON.parse(readFileSync33(chunksJsonPath, "utf-8"));
|
|
77401
|
-
const videosJsonPath =
|
|
77478
|
+
const videosJsonPath = join56(planDir, PLAN_VIDEOS_META_RELATIVE_PATH);
|
|
77402
77479
|
let planVideos = null;
|
|
77403
77480
|
if (existsSync46(videosJsonPath)) {
|
|
77404
77481
|
try {
|
|
@@ -77427,7 +77504,7 @@ async function renderChunk(planDir, chunkIndex, outputChunkPath) {
|
|
|
77427
77504
|
`[renderChunk] chunk ${chunkIndex} has non-positive frame count: ${framesInChunk}`
|
|
77428
77505
|
);
|
|
77429
77506
|
}
|
|
77430
|
-
const compiledDir =
|
|
77507
|
+
const compiledDir = join56(planDir, "compiled");
|
|
77431
77508
|
if (!existsSync46(compiledDir)) {
|
|
77432
77509
|
throw new RenderChunkValidationError(
|
|
77433
77510
|
MISSING_PLAN_ARTIFACT,
|
|
@@ -77486,7 +77563,7 @@ async function renderChunk(planDir, chunkIndex, outputChunkPath) {
|
|
|
77486
77563
|
) : null;
|
|
77487
77564
|
const workDir = `${outputChunkPath}.work.${process.pid}.${randomBytes2(4).toString("hex")}`;
|
|
77488
77565
|
mkdirSync28(workDir, { recursive: true });
|
|
77489
|
-
const framesDir =
|
|
77566
|
+
const framesDir = join56(workDir, "captured-frames");
|
|
77490
77567
|
mkdirSync28(framesDir, { recursive: true });
|
|
77491
77568
|
const fileServer = await createFileServer2({
|
|
77492
77569
|
projectDir: compiledDir,
|
|
@@ -77554,7 +77631,7 @@ async function renderChunk(planDir, chunkIndex, outputChunkPath) {
|
|
|
77554
77631
|
if (isPngSequence) {
|
|
77555
77632
|
if (!existsSync46(outputChunkPath)) mkdirSync28(outputChunkPath, { recursive: true });
|
|
77556
77633
|
} else {
|
|
77557
|
-
const outDir =
|
|
77634
|
+
const outDir = join56(outputChunkPath, "..");
|
|
77558
77635
|
if (!existsSync46(outDir)) mkdirSync28(outDir, { recursive: true });
|
|
77559
77636
|
}
|
|
77560
77637
|
await runEncodeStage({
|
|
@@ -77884,14 +77961,14 @@ import {
|
|
|
77884
77961
|
statSync as statSync16,
|
|
77885
77962
|
writeFileSync as writeFileSync24
|
|
77886
77963
|
} from "fs";
|
|
77887
|
-
import { dirname as dirname18, join as
|
|
77964
|
+
import { dirname as dirname18, join as join57 } from "path";
|
|
77888
77965
|
async function assemble(planDir, chunkPaths, audioPath, outputPath, options) {
|
|
77889
77966
|
const start = Date.now();
|
|
77890
77967
|
const log2 = options?.logger ?? defaultLogger;
|
|
77891
77968
|
const abortSignal = options?.abortSignal;
|
|
77892
77969
|
const cfr = options?.cfr === true;
|
|
77893
|
-
const planJsonPath =
|
|
77894
|
-
const chunksJsonPath =
|
|
77970
|
+
const planJsonPath = join57(planDir, "plan.json");
|
|
77971
|
+
const chunksJsonPath = join57(planDir, "meta", "chunks.json");
|
|
77895
77972
|
if (!existsSync47(planJsonPath)) {
|
|
77896
77973
|
throw new Error(`[assemble] planDir missing plan.json: ${planJsonPath}`);
|
|
77897
77974
|
}
|
|
@@ -77920,7 +77997,7 @@ async function assemble(planDir, chunkPaths, audioPath, outputPath, options) {
|
|
|
77920
77997
|
if (existsSync47(workDir)) rmSync13(workDir, { recursive: true, force: true });
|
|
77921
77998
|
mkdirSync29(workDir, { recursive: true });
|
|
77922
77999
|
try {
|
|
77923
|
-
const concatOutputPath =
|
|
78000
|
+
const concatOutputPath = join57(workDir, `concat.${plan2.dimensions.format}`);
|
|
77924
78001
|
const fpsArg = fpsToFfmpegArg({
|
|
77925
78002
|
num: plan2.dimensions.fpsNum,
|
|
77926
78003
|
den: plan2.dimensions.fpsDen
|
|
@@ -77934,7 +78011,7 @@ async function assemble(planDir, chunkPaths, audioPath, outputPath, options) {
|
|
|
77934
78011
|
);
|
|
77935
78012
|
}
|
|
77936
78013
|
} else {
|
|
77937
|
-
const concatListPath =
|
|
78014
|
+
const concatListPath = join57(workDir, "concat-list.txt");
|
|
77938
78015
|
const concatBody = chunkPaths.map((path2) => `file '${path2.replace(/'/g, "'\\''")}'`).join("\n");
|
|
77939
78016
|
writeFileSync24(concatListPath, `${concatBody}
|
|
77940
78017
|
`, "utf-8");
|
|
@@ -77966,7 +78043,7 @@ async function assemble(planDir, chunkPaths, audioPath, outputPath, options) {
|
|
|
77966
78043
|
`[assemble] cfr=true is only supported for format="mp4" (got "${plan2.dimensions.format}"). Stream-copy paths for webm and mov already produce exact avg_frame_rate; cfr re-encode is not needed.`
|
|
77967
78044
|
);
|
|
77968
78045
|
}
|
|
77969
|
-
const encoderJsonPath =
|
|
78046
|
+
const encoderJsonPath = join57(planDir, "meta", "encoder.json");
|
|
77970
78047
|
if (!existsSync47(encoderJsonPath)) {
|
|
77971
78048
|
throw new Error(`[assemble] planDir missing meta/encoder.json: ${encoderJsonPath}`);
|
|
77972
78049
|
}
|
|
@@ -77976,7 +78053,7 @@ async function assemble(planDir, chunkPaths, audioPath, outputPath, options) {
|
|
|
77976
78053
|
`[assemble] cfr=true is not yet supported with codec: "h265". The cfr re-encode pass uses libx264 and would silently transcode the h265 chunks. Either disable cfr or render with codec: "h264".`
|
|
77977
78054
|
);
|
|
77978
78055
|
}
|
|
77979
|
-
const cfrOutputPath =
|
|
78056
|
+
const cfrOutputPath = join57(workDir, `cfr.${plan2.dimensions.format}`);
|
|
77980
78057
|
const cfrArgs = [
|
|
77981
78058
|
"-i",
|
|
77982
78059
|
concatOutputPath,
|
|
@@ -78010,7 +78087,7 @@ async function assemble(planDir, chunkPaths, audioPath, outputPath, options) {
|
|
|
78010
78087
|
}
|
|
78011
78088
|
let audioForMux = null;
|
|
78012
78089
|
if (audioPath !== null && existsSync47(audioPath)) {
|
|
78013
|
-
const paddedAudioPath =
|
|
78090
|
+
const paddedAudioPath = join57(workDir, "audio-padded.aac");
|
|
78014
78091
|
const padTrimResult = await padOrTrimAudioToVideoFrameCount({
|
|
78015
78092
|
videoPath: postConcatPath,
|
|
78016
78093
|
audioPath,
|
|
@@ -78026,7 +78103,7 @@ async function assemble(planDir, chunkPaths, audioPath, outputPath, options) {
|
|
|
78026
78103
|
sourceDurationSeconds: padTrimResult.sourceDurationSeconds
|
|
78027
78104
|
});
|
|
78028
78105
|
}
|
|
78029
|
-
const muxOutputPath = audioForMux !== null ?
|
|
78106
|
+
const muxOutputPath = audioForMux !== null ? join57(workDir, `mux.${plan2.dimensions.format}`) : postConcatPath;
|
|
78030
78107
|
if (audioForMux !== null) {
|
|
78031
78108
|
const muxResult = await muxVideoWithAudio(
|
|
78032
78109
|
postConcatPath,
|
|
@@ -78086,8 +78163,8 @@ function mergePngFrameDirs(chunkPaths, outputPath, totalFrames, audioPath, start
|
|
|
78086
78163
|
throw new Error(`[assemble] png-sequence chunk has no frames: ${chunkDir}`);
|
|
78087
78164
|
}
|
|
78088
78165
|
for (const frame of frames) {
|
|
78089
|
-
const dst =
|
|
78090
|
-
cpSync3(
|
|
78166
|
+
const dst = join57(outputPath, `frame_${String(globalIdx + 1).padStart(6, "0")}.png`);
|
|
78167
|
+
cpSync3(join57(chunkDir, frame), dst);
|
|
78091
78168
|
globalIdx += 1;
|
|
78092
78169
|
}
|
|
78093
78170
|
}
|
|
@@ -78097,13 +78174,13 @@ function mergePngFrameDirs(chunkPaths, outputPath, totalFrames, audioPath, start
|
|
|
78097
78174
|
);
|
|
78098
78175
|
}
|
|
78099
78176
|
if (audioPath !== null && existsSync47(audioPath)) {
|
|
78100
|
-
const sidecar =
|
|
78177
|
+
const sidecar = join57(outputPath, "audio.aac");
|
|
78101
78178
|
cpSync3(audioPath, sidecar);
|
|
78102
78179
|
}
|
|
78103
78180
|
let fileSize = 0;
|
|
78104
78181
|
for (const name of readdirSync20(outputPath)) {
|
|
78105
78182
|
try {
|
|
78106
|
-
fileSize += statSync16(
|
|
78183
|
+
fileSize += statSync16(join57(outputPath, name)).size;
|
|
78107
78184
|
} catch {
|
|
78108
78185
|
}
|
|
78109
78186
|
}
|
|
@@ -78232,7 +78309,7 @@ __export(studioServer_exports, {
|
|
|
78232
78309
|
import { Hono as Hono5 } from "hono";
|
|
78233
78310
|
import { streamSSE as streamSSE3 } from "hono/streaming";
|
|
78234
78311
|
import { existsSync as existsSync48, readFileSync as readFileSync35, writeFileSync as writeFileSync25, statSync as statSync17 } from "fs";
|
|
78235
|
-
import { resolve as resolve24, join as
|
|
78312
|
+
import { resolve as resolve24, join as join58, basename as basename5 } from "path";
|
|
78236
78313
|
function resolveDistDir() {
|
|
78237
78314
|
return resolveStudioBundle().dir;
|
|
78238
78315
|
}
|
|
@@ -78277,7 +78354,7 @@ function resolveRuntimePath() {
|
|
|
78277
78354
|
return builtPath;
|
|
78278
78355
|
}
|
|
78279
78356
|
function readStudioManualEditManifestContent(projectDir) {
|
|
78280
|
-
const manifestPath =
|
|
78357
|
+
const manifestPath = join58(projectDir, STUDIO_MANUAL_EDITS_PATH2);
|
|
78281
78358
|
if (!existsSync48(manifestPath)) return "";
|
|
78282
78359
|
try {
|
|
78283
78360
|
return readFileSync35(manifestPath, "utf-8");
|
|
@@ -78399,7 +78476,7 @@ function createStudioServer(options) {
|
|
|
78399
78476
|
return await lintHyperframeHtml2(html, opts);
|
|
78400
78477
|
},
|
|
78401
78478
|
runtimeUrl: "/api/runtime.js",
|
|
78402
|
-
rendersDir: () =>
|
|
78479
|
+
rendersDir: () => join58(projectDir, "renders"),
|
|
78403
78480
|
startRender(opts) {
|
|
78404
78481
|
const state = {
|
|
78405
78482
|
id: opts.jobId,
|
|
@@ -78536,10 +78613,10 @@ function createStudioServer(options) {
|
|
|
78536
78613
|
const { resolveItem: resolveItem2 } = await Promise.resolve().then(() => (init_resolver(), resolver_exports));
|
|
78537
78614
|
const { installItem: installItem2 } = await Promise.resolve().then(() => (init_installer(), installer_exports));
|
|
78538
78615
|
const { readFileSync: readFileSync58, writeFileSync: writeFileSync40, existsSync: existsSync81 } = await import("fs");
|
|
78539
|
-
const { join:
|
|
78616
|
+
const { join: join92 } = await import("path");
|
|
78540
78617
|
const item = await resolveItem2(opts.blockName);
|
|
78541
78618
|
const { written } = await installItem2(item, { destDir: opts.project.dir });
|
|
78542
|
-
const indexPath =
|
|
78619
|
+
const indexPath = join92(opts.project.dir, "index.html");
|
|
78543
78620
|
if (existsSync81(indexPath)) {
|
|
78544
78621
|
const indexHtml = readFileSync58(indexPath, "utf-8");
|
|
78545
78622
|
const hostW = indexHtml.match(/data-width="(\d+)"/)?.[1];
|
|
@@ -78745,15 +78822,15 @@ __export(preview_exports, {
|
|
|
78745
78822
|
});
|
|
78746
78823
|
import { spawn as spawn11 } from "child_process";
|
|
78747
78824
|
import { existsSync as existsSync49, lstatSync as lstatSync2, symlinkSync as symlinkSync2, unlinkSync as unlinkSync5, readlinkSync, mkdirSync as mkdirSync30 } from "fs";
|
|
78748
|
-
import { resolve as resolve25, dirname as dirname19, basename as basename6, join as
|
|
78825
|
+
import { resolve as resolve25, dirname as dirname19, basename as basename6, join as join59 } from "path";
|
|
78749
78826
|
import { fileURLToPath as fileURLToPath6 } from "url";
|
|
78750
78827
|
import { createRequire as createRequire2 } from "module";
|
|
78751
78828
|
async function runDevMode(dir, options) {
|
|
78752
78829
|
const thisFile = fileURLToPath6(import.meta.url);
|
|
78753
78830
|
const repoRoot2 = resolve25(dirname19(thisFile), "..", "..", "..", "..");
|
|
78754
|
-
const projectsDir =
|
|
78831
|
+
const projectsDir = join59(repoRoot2, "packages", "studio", "data", "projects");
|
|
78755
78832
|
const pName = options?.projectName ?? basename6(dir);
|
|
78756
|
-
const symlinkPath =
|
|
78833
|
+
const symlinkPath = join59(projectsDir, pName);
|
|
78757
78834
|
mkdirSync30(projectsDir, { recursive: true });
|
|
78758
78835
|
let createdSymlink = false;
|
|
78759
78836
|
if (dir !== symlinkPath) {
|
|
@@ -78777,7 +78854,7 @@ async function runDevMode(dir, options) {
|
|
|
78777
78854
|
ge(c2.bold("hyperframes preview"));
|
|
78778
78855
|
const s2 = ft();
|
|
78779
78856
|
s2.start("Starting studio...");
|
|
78780
|
-
const studioPkgDir =
|
|
78857
|
+
const studioPkgDir = join59(repoRoot2, "packages", "studio");
|
|
78781
78858
|
const child = spawn11("bun", ["run", "dev"], {
|
|
78782
78859
|
cwd: studioPkgDir,
|
|
78783
78860
|
stdio: ["ignore", "pipe", "pipe"]
|
|
@@ -78832,7 +78909,7 @@ async function runDevMode(dir, options) {
|
|
|
78832
78909
|
}
|
|
78833
78910
|
function hasLocalStudio(dir) {
|
|
78834
78911
|
try {
|
|
78835
|
-
const req = createRequire2(
|
|
78912
|
+
const req = createRequire2(join59(dir, "package.json"));
|
|
78836
78913
|
req.resolve("@hyperframes/studio/package.json");
|
|
78837
78914
|
return true;
|
|
78838
78915
|
} catch {
|
|
@@ -78840,11 +78917,11 @@ function hasLocalStudio(dir) {
|
|
|
78840
78917
|
}
|
|
78841
78918
|
}
|
|
78842
78919
|
async function runLocalStudioMode(dir, options) {
|
|
78843
|
-
const req = createRequire2(
|
|
78920
|
+
const req = createRequire2(join59(dir, "package.json"));
|
|
78844
78921
|
const studioPkgPath = dirname19(req.resolve("@hyperframes/studio/package.json"));
|
|
78845
78922
|
const pName = options?.projectName ?? basename6(dir);
|
|
78846
|
-
const projectsDir =
|
|
78847
|
-
const symlinkPath =
|
|
78923
|
+
const projectsDir = join59(studioPkgPath, "data", "projects");
|
|
78924
|
+
const symlinkPath = join59(projectsDir, pName);
|
|
78848
78925
|
mkdirSync30(projectsDir, { recursive: true });
|
|
78849
78926
|
let createdSymlink = false;
|
|
78850
78927
|
if (dir !== symlinkPath) {
|
|
@@ -79144,7 +79221,7 @@ var init_preview2 = __esm({
|
|
|
79144
79221
|
const dir = resolve25(rawArg ?? ".");
|
|
79145
79222
|
const isImplicitCwd = !rawArg || rawArg === "." || rawArg === "./";
|
|
79146
79223
|
const projectName = isImplicitCwd ? basename6(process.env.PWD ?? dir) : basename6(dir);
|
|
79147
|
-
const indexPath =
|
|
79224
|
+
const indexPath = join59(dir, "index.html");
|
|
79148
79225
|
if (existsSync49(indexPath)) {
|
|
79149
79226
|
const project = { dir, name: projectName, indexPath };
|
|
79150
79227
|
const lintResult = await lintProject(project);
|
|
@@ -79231,7 +79308,7 @@ import {
|
|
|
79231
79308
|
readFileSync as readFileSync36,
|
|
79232
79309
|
readdirSync as readdirSync21
|
|
79233
79310
|
} from "fs";
|
|
79234
|
-
import { resolve as resolve26, basename as basename7, join as
|
|
79311
|
+
import { resolve as resolve26, basename as basename7, join as join60, dirname as dirname20 } from "path";
|
|
79235
79312
|
import { fileURLToPath as fileURLToPath7 } from "url";
|
|
79236
79313
|
import { execFileSync as execFileSync5, spawn as spawn12 } from "child_process";
|
|
79237
79314
|
function probeVideo(filePath) {
|
|
@@ -79353,7 +79430,7 @@ function listHtmlFiles(dir) {
|
|
|
79353
79430
|
const ignoredDirs = /* @__PURE__ */ new Set([".git", "dist", "node_modules"]);
|
|
79354
79431
|
function walk(currentDir) {
|
|
79355
79432
|
for (const entry of readdirSync21(currentDir, { withFileTypes: true })) {
|
|
79356
|
-
const entryPath =
|
|
79433
|
+
const entryPath = join60(currentDir, entry.name);
|
|
79357
79434
|
if (entry.isDirectory()) {
|
|
79358
79435
|
if (!ignoredDirs.has(entry.name)) walk(entryPath);
|
|
79359
79436
|
continue;
|
|
@@ -79398,7 +79475,7 @@ function writeTailwindSupport(destDir) {
|
|
|
79398
79475
|
}
|
|
79399
79476
|
}
|
|
79400
79477
|
function patchVideoSrc(dir, videoFilename, durationSeconds) {
|
|
79401
|
-
const htmlFiles = readdirSync21(dir, { withFileTypes: true, recursive: true }).filter((e3) => e3.isFile() && e3.name.endsWith(".html")).map((e3) =>
|
|
79478
|
+
const htmlFiles = readdirSync21(dir, { withFileTypes: true, recursive: true }).filter((e3) => e3.isFile() && e3.name.endsWith(".html")).map((e3) => join60(e3.parentPath, e3.name));
|
|
79402
79479
|
for (const file of htmlFiles) {
|
|
79403
79480
|
let content = readFileSync36(file, "utf-8");
|
|
79404
79481
|
if (videoFilename) {
|
|
@@ -79553,7 +79630,7 @@ function applyResolutionPreset(destDir, resolution) {
|
|
|
79553
79630
|
async function scaffoldProject(destDir, name, templateId, localVideoName, durationSeconds, tailwind = false, resolution) {
|
|
79554
79631
|
mkdirSync31(destDir, { recursive: true });
|
|
79555
79632
|
const templateDir = getStaticTemplateDir(templateId);
|
|
79556
|
-
if (existsSync50(
|
|
79633
|
+
if (existsSync50(join60(templateDir, "index.html"))) {
|
|
79557
79634
|
cpSync4(templateDir, destDir, { recursive: true });
|
|
79558
79635
|
} else {
|
|
79559
79636
|
await fetchRemoteTemplate(templateId, destDir);
|
|
@@ -79582,7 +79659,7 @@ async function scaffoldProject(destDir, name, templateId, localVideoName, durati
|
|
|
79582
79659
|
const sharedDir = getSharedTemplateDir();
|
|
79583
79660
|
if (existsSync50(sharedDir)) {
|
|
79584
79661
|
for (const entry of readdirSync21(sharedDir, { withFileTypes: true })) {
|
|
79585
|
-
const src =
|
|
79662
|
+
const src = join60(sharedDir, entry.name);
|
|
79586
79663
|
const dest = resolve26(destDir, entry.name);
|
|
79587
79664
|
if (entry.isFile() || entry.isSymbolicLink()) {
|
|
79588
79665
|
copyFileSync5(src, dest);
|
|
@@ -80763,7 +80840,7 @@ var init_play = __esm({
|
|
|
80763
80840
|
});
|
|
80764
80841
|
|
|
80765
80842
|
// src/utils/publishProject.ts
|
|
80766
|
-
import { basename as basename9, join as
|
|
80843
|
+
import { basename as basename9, join as join61, relative as relative9 } from "path";
|
|
80767
80844
|
import { readdirSync as readdirSync22, readFileSync as readFileSync38, statSync as statSync19 } from "fs";
|
|
80768
80845
|
import AdmZip from "adm-zip";
|
|
80769
80846
|
function isRecord2(value) {
|
|
@@ -80864,7 +80941,7 @@ function shouldIgnoreSegment(segment) {
|
|
|
80864
80941
|
function collectProjectFiles(rootDir, currentDir, paths) {
|
|
80865
80942
|
for (const entry of readdirSync22(currentDir, { withFileTypes: true })) {
|
|
80866
80943
|
if (shouldIgnoreSegment(entry.name)) continue;
|
|
80867
|
-
const absolutePath =
|
|
80944
|
+
const absolutePath = join61(currentDir, entry.name);
|
|
80868
80945
|
const relativePath = relative9(rootDir, absolutePath).replaceAll("\\", "/");
|
|
80869
80946
|
if (!relativePath) continue;
|
|
80870
80947
|
if (entry.isDirectory()) {
|
|
@@ -80883,7 +80960,7 @@ function createPublishArchive(projectDir) {
|
|
|
80883
80960
|
}
|
|
80884
80961
|
const archive = new AdmZip();
|
|
80885
80962
|
for (const filePath of filePaths) {
|
|
80886
|
-
archive.addFile(filePath, readFileSync38(
|
|
80963
|
+
archive.addFile(filePath, readFileSync38(join61(projectDir, filePath)));
|
|
80887
80964
|
}
|
|
80888
80965
|
return {
|
|
80889
80966
|
buffer: archive.toBuffer(),
|
|
@@ -81005,7 +81082,7 @@ __export(publish_exports, {
|
|
|
81005
81082
|
});
|
|
81006
81083
|
import { basename as basename10, resolve as resolve31 } from "path";
|
|
81007
81084
|
import { existsSync as existsSync54 } from "fs";
|
|
81008
|
-
import { join as
|
|
81085
|
+
import { join as join62 } from "path";
|
|
81009
81086
|
var examples6, publish_default;
|
|
81010
81087
|
var init_publish = __esm({
|
|
81011
81088
|
"src/commands/publish.ts"() {
|
|
@@ -81040,7 +81117,7 @@ var init_publish = __esm({
|
|
|
81040
81117
|
const dir = resolve31(rawArg ?? ".");
|
|
81041
81118
|
const isImplicitCwd = !rawArg || rawArg === "." || rawArg === "./";
|
|
81042
81119
|
const projectName = isImplicitCwd ? basename10(process.env["PWD"] ?? dir) : basename10(dir);
|
|
81043
|
-
const indexPath =
|
|
81120
|
+
const indexPath = join62(dir, "index.html");
|
|
81044
81121
|
if (existsSync54(indexPath)) {
|
|
81045
81122
|
const lintResult = await lintProject({ dir, name: projectName, indexPath });
|
|
81046
81123
|
if (lintResult.totalErrors > 0 || lintResult.totalWarnings > 0) {
|
|
@@ -81113,7 +81190,7 @@ var init_dom = __esm({
|
|
|
81113
81190
|
// src/utils/variables.ts
|
|
81114
81191
|
import { readFileSync as readFileSync39 } from "fs";
|
|
81115
81192
|
import { resolve as resolve32 } from "path";
|
|
81116
|
-
function parseVariablesArg(inline, filePath,
|
|
81193
|
+
function parseVariablesArg(inline, filePath, readFile2 = (p2) => readFileSync39(resolve32(p2), "utf8")) {
|
|
81117
81194
|
if (inline != null && filePath != null) {
|
|
81118
81195
|
return { ok: false, error: { kind: "conflict" } };
|
|
81119
81196
|
}
|
|
@@ -81124,7 +81201,7 @@ function parseVariablesArg(inline, filePath, readFile = (p2) => readFileSync39(r
|
|
|
81124
81201
|
source = "inline";
|
|
81125
81202
|
} else if (filePath != null) {
|
|
81126
81203
|
try {
|
|
81127
|
-
raw =
|
|
81204
|
+
raw = readFile2(filePath);
|
|
81128
81205
|
source = "file";
|
|
81129
81206
|
} catch (error) {
|
|
81130
81207
|
return {
|
|
@@ -81462,7 +81539,7 @@ __export(render_exports, {
|
|
|
81462
81539
|
});
|
|
81463
81540
|
import { mkdirSync as mkdirSync32, readdirSync as readdirSync23, readFileSync as readFileSync40, statSync as statSync20, writeFileSync as writeFileSync27, rmSync as rmSync14 } from "fs";
|
|
81464
81541
|
import { cpus as cpus4, freemem as freemem4, tmpdir as tmpdir5 } from "os";
|
|
81465
|
-
import { resolve as resolve33, dirname as dirname22, join as
|
|
81542
|
+
import { resolve as resolve33, dirname as dirname22, join as join63, basename as basename11 } from "path";
|
|
81466
81543
|
import { execFileSync as execFileSync6, spawn as spawn13 } from "child_process";
|
|
81467
81544
|
function formatFpsParseError(input2, reason) {
|
|
81468
81545
|
switch (reason) {
|
|
@@ -81519,9 +81596,9 @@ function ensureDockerImage(version, quiet) {
|
|
|
81519
81596
|
}
|
|
81520
81597
|
if (!quiet) console.log(c2.dim(` Building Docker image: ${tag}...`));
|
|
81521
81598
|
const dockerfilePath = resolveDockerfilePath();
|
|
81522
|
-
const tmpDir =
|
|
81599
|
+
const tmpDir = join63(tmpdir5(), `hyperframes-docker-${Date.now()}`);
|
|
81523
81600
|
mkdirSync32(tmpDir, { recursive: true });
|
|
81524
|
-
writeFileSync27(
|
|
81601
|
+
writeFileSync27(join63(tmpDir, "Dockerfile"), readFileSync40(dockerfilePath));
|
|
81525
81602
|
try {
|
|
81526
81603
|
execFileSync6(
|
|
81527
81604
|
"docker",
|
|
@@ -81738,7 +81815,7 @@ function printRenderComplete(outputPath, elapsedMs, quiet) {
|
|
|
81738
81815
|
for (const entry of readdirSync23(outputPath, { withFileTypes: true })) {
|
|
81739
81816
|
if (!entry.isFile()) continue;
|
|
81740
81817
|
try {
|
|
81741
|
-
total += statSync20(
|
|
81818
|
+
total += statSync20(join63(outputPath, entry.name)).size;
|
|
81742
81819
|
} catch {
|
|
81743
81820
|
}
|
|
81744
81821
|
}
|
|
@@ -81990,7 +82067,7 @@ var init_render2 = __esm({
|
|
|
81990
82067
|
const now = /* @__PURE__ */ new Date();
|
|
81991
82068
|
const datePart = now.toISOString().slice(0, 10);
|
|
81992
82069
|
const timePart = now.toTimeString().slice(0, 8).replace(/:/g, "-");
|
|
81993
|
-
const outputPath = args.output ? resolve33(args.output) :
|
|
82070
|
+
const outputPath = args.output ? resolve33(args.output) : join63(rendersDir, `${project.name}_${datePart}_${timePart}${ext}`);
|
|
81994
82071
|
mkdirSync32(dirname22(outputPath), { recursive: true });
|
|
81995
82072
|
const useDocker = args.docker ?? false;
|
|
81996
82073
|
const useGpu = args.gpu ?? false;
|
|
@@ -82582,7 +82659,7 @@ __export(layout_exports, {
|
|
|
82582
82659
|
examples: () => examples9
|
|
82583
82660
|
});
|
|
82584
82661
|
import { existsSync as existsSync56, readFileSync as readFileSync42 } from "fs";
|
|
82585
|
-
import { dirname as dirname23, join as
|
|
82662
|
+
import { dirname as dirname23, join as join64 } from "path";
|
|
82586
82663
|
import { fileURLToPath as fileURLToPath8 } from "url";
|
|
82587
82664
|
async function getCompositionDuration2(page) {
|
|
82588
82665
|
return page.evaluate(() => {
|
|
@@ -82728,8 +82805,8 @@ async function runLayoutAudit(projectDir, opts) {
|
|
|
82728
82805
|
}
|
|
82729
82806
|
function loadLayoutAuditScript() {
|
|
82730
82807
|
const candidates = [
|
|
82731
|
-
|
|
82732
|
-
|
|
82808
|
+
join64(__dirname2, "layout-audit.browser.js"),
|
|
82809
|
+
join64(__dirname2, "commands", "layout-audit.browser.js")
|
|
82733
82810
|
];
|
|
82734
82811
|
for (const candidate of candidates) {
|
|
82735
82812
|
if (existsSync56(candidate)) return readFileSync42(candidate, "utf-8");
|
|
@@ -82941,11 +83018,11 @@ __export(info_exports, {
|
|
|
82941
83018
|
examples: () => examples11
|
|
82942
83019
|
});
|
|
82943
83020
|
import { readFileSync as readFileSync43, readdirSync as readdirSync24, statSync as statSync21 } from "fs";
|
|
82944
|
-
import { join as
|
|
83021
|
+
import { join as join65 } from "path";
|
|
82945
83022
|
function totalSize(dir) {
|
|
82946
83023
|
let total = 0;
|
|
82947
83024
|
for (const entry of readdirSync24(dir, { withFileTypes: true })) {
|
|
82948
|
-
const path2 =
|
|
83025
|
+
const path2 = join65(dir, entry.name);
|
|
82949
83026
|
if (entry.isDirectory()) {
|
|
82950
83027
|
total += totalSize(path2);
|
|
82951
83028
|
} else {
|
|
@@ -83212,7 +83289,7 @@ __export(benchmark_exports, {
|
|
|
83212
83289
|
examples: () => examples13
|
|
83213
83290
|
});
|
|
83214
83291
|
import { existsSync as existsSync58, statSync as statSync22 } from "fs";
|
|
83215
|
-
import { resolve as resolve36, join as
|
|
83292
|
+
import { resolve as resolve36, join as join66 } from "path";
|
|
83216
83293
|
var examples13, FPS_30, FPS_60, DEFAULT_CONFIGS, benchmark_default;
|
|
83217
83294
|
var init_benchmark = __esm({
|
|
83218
83295
|
"src/commands/benchmark.ts"() {
|
|
@@ -83290,7 +83367,7 @@ var init_benchmark = __esm({
|
|
|
83290
83367
|
s2?.start(`Benchmarking ${config.label}...`);
|
|
83291
83368
|
for (let i2 = 0; i2 < runsPerConfig; i2++) {
|
|
83292
83369
|
s2?.message(`${config.label} \u2014 run ${i2 + 1}/${runsPerConfig}`);
|
|
83293
|
-
const outputPath =
|
|
83370
|
+
const outputPath = join66(
|
|
83294
83371
|
benchDir,
|
|
83295
83372
|
`${config.label.replace(/[^a-zA-Z0-9]/g, "_")}_run${i2}.mp4`
|
|
83296
83373
|
);
|
|
@@ -83560,7 +83637,7 @@ __export(manager_exports3, {
|
|
|
83560
83637
|
});
|
|
83561
83638
|
import { existsSync as existsSync59, mkdirSync as mkdirSync33 } from "fs";
|
|
83562
83639
|
import { homedir as homedir9, platform as platform7, arch } from "os";
|
|
83563
|
-
import { join as
|
|
83640
|
+
import { join as join67 } from "path";
|
|
83564
83641
|
function isDevice(value) {
|
|
83565
83642
|
return typeof value === "string" && DEVICES.includes(value);
|
|
83566
83643
|
}
|
|
@@ -83600,7 +83677,7 @@ function listAvailableProviders() {
|
|
|
83600
83677
|
return out;
|
|
83601
83678
|
}
|
|
83602
83679
|
function modelPath(model = DEFAULT_MODEL2) {
|
|
83603
|
-
return
|
|
83680
|
+
return join67(MODELS_DIR2, `${model}.onnx`);
|
|
83604
83681
|
}
|
|
83605
83682
|
async function ensureModel2(model = DEFAULT_MODEL2, options) {
|
|
83606
83683
|
const dest = modelPath(model);
|
|
@@ -83618,7 +83695,7 @@ var init_manager3 = __esm({
|
|
|
83618
83695
|
"src/background-removal/manager.ts"() {
|
|
83619
83696
|
"use strict";
|
|
83620
83697
|
init_download();
|
|
83621
|
-
MODELS_DIR2 =
|
|
83698
|
+
MODELS_DIR2 = join67(homedir9(), ".cache", "hyperframes", "background-removal", "models");
|
|
83622
83699
|
DEFAULT_MODEL2 = "u2net_human_seg";
|
|
83623
83700
|
MODEL_URLS = {
|
|
83624
83701
|
u2net_human_seg: "https://github.com/danielgatis/rembg/releases/download/v0.0.0/u2net_human_seg.onnx"
|
|
@@ -84302,7 +84379,7 @@ __export(transcribe_exports2, {
|
|
|
84302
84379
|
examples: () => examples16
|
|
84303
84380
|
});
|
|
84304
84381
|
import { existsSync as existsSync61, writeFileSync as writeFileSync28 } from "fs";
|
|
84305
|
-
import { resolve as resolve38, join as
|
|
84382
|
+
import { resolve as resolve38, join as join68, extname as extname11, dirname as dirname25 } from "path";
|
|
84306
84383
|
async function importTranscript(inputPath, dir, json) {
|
|
84307
84384
|
const { loadTranscript: loadTranscript2, patchCaptionHtml: patchCaptionHtml2 } = await Promise.resolve().then(() => (init_normalize(), normalize_exports));
|
|
84308
84385
|
const { words, format } = loadTranscript2(inputPath);
|
|
@@ -84310,7 +84387,7 @@ async function importTranscript(inputPath, dir, json) {
|
|
|
84310
84387
|
console.error(c2.error("No words found in transcript."));
|
|
84311
84388
|
process.exit(1);
|
|
84312
84389
|
}
|
|
84313
|
-
const outPath =
|
|
84390
|
+
const outPath = join68(dir, "transcript.json");
|
|
84314
84391
|
writeFileSync28(outPath, JSON.stringify(words, null, 2));
|
|
84315
84392
|
patchCaptionHtml2(dir, words);
|
|
84316
84393
|
if (json) {
|
|
@@ -84450,7 +84527,7 @@ var init_transcribe2 = __esm({
|
|
|
84450
84527
|
// src/tts/manager.ts
|
|
84451
84528
|
import { existsSync as existsSync62, mkdirSync as mkdirSync34 } from "fs";
|
|
84452
84529
|
import { homedir as homedir10 } from "os";
|
|
84453
|
-
import { join as
|
|
84530
|
+
import { join as join69 } from "path";
|
|
84454
84531
|
function inferLangFromVoiceId(voiceId) {
|
|
84455
84532
|
const first = voiceId.charAt(0).toLowerCase();
|
|
84456
84533
|
return VOICE_PREFIX_LANG[first] ?? "en-us";
|
|
@@ -84459,7 +84536,7 @@ function isSupportedLang(value) {
|
|
|
84459
84536
|
return SUPPORTED_LANGS.includes(value);
|
|
84460
84537
|
}
|
|
84461
84538
|
async function ensureModel3(model = DEFAULT_MODEL3, options) {
|
|
84462
|
-
const modelPath2 =
|
|
84539
|
+
const modelPath2 = join69(MODELS_DIR3, `${model}.onnx`);
|
|
84463
84540
|
if (existsSync62(modelPath2)) return modelPath2;
|
|
84464
84541
|
const url = MODEL_URLS2[model];
|
|
84465
84542
|
if (!url) {
|
|
@@ -84476,7 +84553,7 @@ async function ensureModel3(model = DEFAULT_MODEL3, options) {
|
|
|
84476
84553
|
return modelPath2;
|
|
84477
84554
|
}
|
|
84478
84555
|
async function ensureVoices(options) {
|
|
84479
|
-
const voicesPath =
|
|
84556
|
+
const voicesPath = join69(VOICES_DIR, "voices-v1.0.bin");
|
|
84480
84557
|
if (existsSync62(voicesPath)) return voicesPath;
|
|
84481
84558
|
mkdirSync34(VOICES_DIR, { recursive: true });
|
|
84482
84559
|
options?.onProgress?.("Downloading voice data (~27 MB)...");
|
|
@@ -84491,9 +84568,9 @@ var init_manager4 = __esm({
|
|
|
84491
84568
|
"src/tts/manager.ts"() {
|
|
84492
84569
|
"use strict";
|
|
84493
84570
|
init_download();
|
|
84494
|
-
CACHE_DIR3 =
|
|
84495
|
-
MODELS_DIR3 =
|
|
84496
|
-
VOICES_DIR =
|
|
84571
|
+
CACHE_DIR3 = join69(homedir10(), ".cache", "hyperframes", "tts");
|
|
84572
|
+
MODELS_DIR3 = join69(CACHE_DIR3, "models");
|
|
84573
|
+
VOICES_DIR = join69(CACHE_DIR3, "voices");
|
|
84497
84574
|
DEFAULT_MODEL3 = "kokoro-v1.0";
|
|
84498
84575
|
MODEL_URLS2 = {
|
|
84499
84576
|
"kokoro-v1.0": "https://github.com/thewh1teagle/kokoro-onnx/releases/download/model-files-v1.0/kokoro-v1.0.onnx"
|
|
@@ -84555,7 +84632,7 @@ __export(synthesize_exports, {
|
|
|
84555
84632
|
});
|
|
84556
84633
|
import { execFileSync as execFileSync7 } from "child_process";
|
|
84557
84634
|
import { existsSync as existsSync63, writeFileSync as writeFileSync29, mkdirSync as mkdirSync35, readdirSync as readdirSync25, unlinkSync as unlinkSync6 } from "fs";
|
|
84558
|
-
import { join as
|
|
84635
|
+
import { join as join70, dirname as dirname26, basename as basename12 } from "path";
|
|
84559
84636
|
import { homedir as homedir11 } from "os";
|
|
84560
84637
|
function findPython() {
|
|
84561
84638
|
for (const name of ["python3", "python"]) {
|
|
@@ -84599,7 +84676,7 @@ function ensureSynthScript() {
|
|
|
84599
84676
|
for (const entry of readdirSync25(SCRIPT_DIR)) {
|
|
84600
84677
|
if (entry !== currentName && /^synth(-v\d+)?\.py$/.test(entry)) {
|
|
84601
84678
|
try {
|
|
84602
|
-
unlinkSync6(
|
|
84679
|
+
unlinkSync6(join70(SCRIPT_DIR, entry));
|
|
84603
84680
|
} catch {
|
|
84604
84681
|
}
|
|
84605
84682
|
}
|
|
@@ -84709,8 +84786,8 @@ print(json.dumps({
|
|
|
84709
84786
|
"langApplied": bool(lang and supports_lang),
|
|
84710
84787
|
}))
|
|
84711
84788
|
`;
|
|
84712
|
-
SCRIPT_DIR =
|
|
84713
|
-
SCRIPT_PATH =
|
|
84789
|
+
SCRIPT_DIR = join70(homedir11(), ".cache", "hyperframes", "tts");
|
|
84790
|
+
SCRIPT_PATH = join70(SCRIPT_DIR, "synth-v2.py");
|
|
84714
84791
|
}
|
|
84715
84792
|
});
|
|
84716
84793
|
|
|
@@ -84924,7 +85001,7 @@ __export(docs_exports, {
|
|
|
84924
85001
|
examples: () => examples18
|
|
84925
85002
|
});
|
|
84926
85003
|
import { readFileSync as readFileSync46, existsSync as existsSync65 } from "fs";
|
|
84927
|
-
import { resolve as resolve40, dirname as dirname27, join as
|
|
85004
|
+
import { resolve as resolve40, dirname as dirname27, join as join71 } from "path";
|
|
84928
85005
|
import { fileURLToPath as fileURLToPath9 } from "url";
|
|
84929
85006
|
function docsDir() {
|
|
84930
85007
|
const thisFile = fileURLToPath9(import.meta.url);
|
|
@@ -85028,7 +85105,7 @@ var init_docs = __esm({
|
|
|
85028
85105
|
}
|
|
85029
85106
|
process.exit(1);
|
|
85030
85107
|
}
|
|
85031
|
-
const filePath =
|
|
85108
|
+
const filePath = join71(docsDir(), entry.file);
|
|
85032
85109
|
if (!existsSync65(filePath)) {
|
|
85033
85110
|
console.error(c2.error(`Doc file not found: ${filePath}`));
|
|
85034
85111
|
process.exit(1);
|
|
@@ -85587,7 +85664,7 @@ __export(validate_exports, {
|
|
|
85587
85664
|
shouldIgnoreRequestFailure: () => shouldIgnoreRequestFailure
|
|
85588
85665
|
});
|
|
85589
85666
|
import { existsSync as existsSync66, readFileSync as readFileSync47 } from "fs";
|
|
85590
|
-
import { join as
|
|
85667
|
+
import { join as join72, dirname as dirname28 } from "path";
|
|
85591
85668
|
import { fileURLToPath as fileURLToPath10 } from "url";
|
|
85592
85669
|
function shouldIgnoreRequestFailure(url, errorText) {
|
|
85593
85670
|
if (errorText !== "net::ERR_ABORTED") return false;
|
|
@@ -85639,8 +85716,8 @@ async function runContrastAudit(page) {
|
|
|
85639
85716
|
}
|
|
85640
85717
|
function loadContrastAuditScript() {
|
|
85641
85718
|
const candidates = [
|
|
85642
|
-
|
|
85643
|
-
|
|
85719
|
+
join72(__dirname3, "contrast-audit.browser.js"),
|
|
85720
|
+
join72(__dirname3, "commands", "contrast-audit.browser.js")
|
|
85644
85721
|
];
|
|
85645
85722
|
for (const candidate of candidates) {
|
|
85646
85723
|
if (existsSync66(candidate)) return readFileSync47(candidate, "utf-8");
|
|
@@ -85660,7 +85737,7 @@ async function validateInBrowser(projectDir, opts) {
|
|
|
85660
85737
|
res.end(html);
|
|
85661
85738
|
return;
|
|
85662
85739
|
}
|
|
85663
|
-
const filePath =
|
|
85740
|
+
const filePath = join72(projectDir, decodeURIComponent(url));
|
|
85664
85741
|
if (existsSync66(filePath)) {
|
|
85665
85742
|
res.writeHead(200, { "Content-Type": getMimeType2(filePath) });
|
|
85666
85743
|
res.end(readFileSync47(filePath));
|
|
@@ -85866,7 +85943,7 @@ __export(contactSheet_exports, {
|
|
|
85866
85943
|
});
|
|
85867
85944
|
import sharp from "sharp";
|
|
85868
85945
|
import { readdirSync as readdirSync26, readFileSync as readFileSync48, writeFileSync as writeFileSync30, unlinkSync as unlinkSync7, existsSync as existsSync67 } from "fs";
|
|
85869
|
-
import { join as
|
|
85946
|
+
import { join as join73, extname as extname13, basename as basename13, dirname as dirname29 } from "path";
|
|
85870
85947
|
async function createContactSheet(imagePaths, outputPath, opts = {}) {
|
|
85871
85948
|
const {
|
|
85872
85949
|
cols = 3,
|
|
@@ -85948,7 +86025,7 @@ async function createScrollContactSheet(screenshotsDir, outputPath) {
|
|
|
85948
86025
|
if (!existsSync67(screenshotsDir)) return [];
|
|
85949
86026
|
const scrollFiles = readdirSync26(screenshotsDir).filter((f3) => f3.startsWith("scroll-") && f3.endsWith(".png")).sort();
|
|
85950
86027
|
if (scrollFiles.length === 0) return [];
|
|
85951
|
-
const paths = scrollFiles.map((f3) =>
|
|
86028
|
+
const paths = scrollFiles.map((f3) => join73(screenshotsDir, f3));
|
|
85952
86029
|
const labels = scrollFiles.map((f3) => {
|
|
85953
86030
|
const m2 = f3.match(/scroll-(\d+)\.png/);
|
|
85954
86031
|
return m2 ? `${m2[1]}% scroll` : f3;
|
|
@@ -85965,7 +86042,7 @@ async function createSnapshotContactSheet(snapshotsDir, outputPath) {
|
|
|
85965
86042
|
if (!existsSync67(snapshotsDir)) return [];
|
|
85966
86043
|
const snapshotFiles = readdirSync26(snapshotsDir).filter((f3) => f3.startsWith("frame-") && f3.endsWith(".png")).sort();
|
|
85967
86044
|
if (snapshotFiles.length === 0) return [];
|
|
85968
|
-
const paths = snapshotFiles.map((f3) =>
|
|
86045
|
+
const paths = snapshotFiles.map((f3) => join73(snapshotsDir, f3));
|
|
85969
86046
|
const labels = snapshotFiles.map((f3) => {
|
|
85970
86047
|
const m2 = f3.match(/at-([\d.]+)s/);
|
|
85971
86048
|
return m2 ? `${m2[1]}s` : f3;
|
|
@@ -85983,7 +86060,7 @@ async function createAssetContactSheet(assetsDir, outputPath) {
|
|
|
85983
86060
|
const imageExts = /* @__PURE__ */ new Set([".png", ".jpg", ".jpeg", ".webp"]);
|
|
85984
86061
|
const assetFiles = readdirSync26(assetsDir).filter((f3) => imageExts.has(extname13(f3).toLowerCase()) && !f3.includes("contact-sheet")).sort();
|
|
85985
86062
|
if (assetFiles.length === 0) return [];
|
|
85986
|
-
const paths = assetFiles.map((f3) =>
|
|
86063
|
+
const paths = assetFiles.map((f3) => join73(assetsDir, f3));
|
|
85987
86064
|
return createContactSheetPages(paths, outputPath, {
|
|
85988
86065
|
cols: 4,
|
|
85989
86066
|
cellWidth: 480,
|
|
@@ -86002,7 +86079,7 @@ async function createSvgContactSheet(svgsDir, outputPath, assetsRootDir) {
|
|
|
86002
86079
|
for (const f3 of readdirSync26(dir).filter((f4) => f4.endsWith(".svg")).sort()) {
|
|
86003
86080
|
if (!seen.has(f3)) {
|
|
86004
86081
|
seen.add(f3);
|
|
86005
|
-
svgPaths.push(
|
|
86082
|
+
svgPaths.push(join73(dir, f3));
|
|
86006
86083
|
}
|
|
86007
86084
|
}
|
|
86008
86085
|
}
|
|
@@ -86014,7 +86091,7 @@ async function createSvgContactSheet(svgsDir, outputPath, assetsRootDir) {
|
|
|
86014
86091
|
const labels = [];
|
|
86015
86092
|
for (let i2 = 0; i2 < svgPaths.length; i2++) {
|
|
86016
86093
|
const svgPath = svgPaths[i2];
|
|
86017
|
-
const tmpPath =
|
|
86094
|
+
const tmpPath = join73(tmpDir, `.thumb-${i2}.png`);
|
|
86018
86095
|
try {
|
|
86019
86096
|
const svgBuf = readFileSync48(svgPath);
|
|
86020
86097
|
const thumb = await sharp(svgBuf).resize(thumbSize, thumbSize, {
|
|
@@ -100269,7 +100346,7 @@ var require_getCredentials = __commonJS({
|
|
|
100269
100346
|
var fs5 = __require("fs");
|
|
100270
100347
|
var util_1 = __require("util");
|
|
100271
100348
|
var errorWithCode_1 = require_errorWithCode();
|
|
100272
|
-
var
|
|
100349
|
+
var readFile2 = fs5.readFile ? (0, util_1.promisify)(fs5.readFile) : async () => {
|
|
100273
100350
|
throw new errorWithCode_1.ErrorWithCode("use key rather than keyFile.", "MISSING_CREDENTIALS");
|
|
100274
100351
|
};
|
|
100275
100352
|
var ExtensionFiles;
|
|
@@ -100291,7 +100368,7 @@ var require_getCredentials = __commonJS({
|
|
|
100291
100368
|
* @returns A promise that resolves with the credentials.
|
|
100292
100369
|
*/
|
|
100293
100370
|
async getCredentials() {
|
|
100294
|
-
const key2 = await
|
|
100371
|
+
const key2 = await readFile2(this.keyFilePath, "utf8");
|
|
100295
100372
|
let body;
|
|
100296
100373
|
try {
|
|
100297
100374
|
body = JSON.parse(key2);
|
|
@@ -100317,7 +100394,7 @@ var require_getCredentials = __commonJS({
|
|
|
100317
100394
|
* @returns A promise that resolves with the private key.
|
|
100318
100395
|
*/
|
|
100319
100396
|
async getCredentials() {
|
|
100320
|
-
const privateKey = await
|
|
100397
|
+
const privateKey = await readFile2(this.keyFilePath, "utf8");
|
|
100321
100398
|
return { privateKey };
|
|
100322
100399
|
}
|
|
100323
100400
|
};
|
|
@@ -101947,7 +102024,7 @@ var require_filesubjecttokensupplier = __commonJS({
|
|
|
101947
102024
|
exports.FileSubjectTokenSupplier = void 0;
|
|
101948
102025
|
var util_1 = __require("util");
|
|
101949
102026
|
var fs5 = __require("fs");
|
|
101950
|
-
var
|
|
102027
|
+
var readFile2 = (0, util_1.promisify)(fs5.readFile ?? (() => {
|
|
101951
102028
|
}));
|
|
101952
102029
|
var realpath = (0, util_1.promisify)(fs5.realpath ?? (() => {
|
|
101953
102030
|
}));
|
|
@@ -101987,7 +102064,7 @@ var require_filesubjecttokensupplier = __commonJS({
|
|
|
101987
102064
|
throw err;
|
|
101988
102065
|
}
|
|
101989
102066
|
let subjectToken;
|
|
101990
|
-
const rawText = await
|
|
102067
|
+
const rawText = await readFile2(parsedFilePath, { encoding: "utf8" });
|
|
101991
102068
|
if (this.formatType === "text") {
|
|
101992
102069
|
subjectToken = rawText;
|
|
101993
102070
|
} else if (this.formatType === "json" && this.subjectTokenFieldName) {
|
|
@@ -106800,7 +106877,7 @@ var require_websocket = __commonJS({
|
|
|
106800
106877
|
var http4 = __require("http");
|
|
106801
106878
|
var net2 = __require("net");
|
|
106802
106879
|
var tls = __require("tls");
|
|
106803
|
-
var { randomBytes: randomBytes4, createHash:
|
|
106880
|
+
var { randomBytes: randomBytes4, createHash: createHash10 } = __require("crypto");
|
|
106804
106881
|
var { Duplex, Readable: Readable3 } = __require("stream");
|
|
106805
106882
|
var { URL: URL2 } = __require("url");
|
|
106806
106883
|
var PerMessageDeflate2 = require_permessage_deflate();
|
|
@@ -107460,7 +107537,7 @@ var require_websocket = __commonJS({
|
|
|
107460
107537
|
abortHandshake(websocket, socket, "Invalid Upgrade header");
|
|
107461
107538
|
return;
|
|
107462
107539
|
}
|
|
107463
|
-
const digest =
|
|
107540
|
+
const digest = createHash10("sha1").update(key2 + GUID).digest("base64");
|
|
107464
107541
|
if (res.headers["sec-websocket-accept"] !== digest) {
|
|
107465
107542
|
abortHandshake(websocket, socket, "Invalid Sec-WebSocket-Accept header");
|
|
107466
107543
|
return;
|
|
@@ -107827,7 +107904,7 @@ var require_websocket_server = __commonJS({
|
|
|
107827
107904
|
var EventEmitter = __require("events");
|
|
107828
107905
|
var http4 = __require("http");
|
|
107829
107906
|
var { Duplex } = __require("stream");
|
|
107830
|
-
var { createHash:
|
|
107907
|
+
var { createHash: createHash10 } = __require("crypto");
|
|
107831
107908
|
var extension2 = require_extension();
|
|
107832
107909
|
var PerMessageDeflate2 = require_permessage_deflate();
|
|
107833
107910
|
var subprotocol2 = require_subprotocol();
|
|
@@ -108128,7 +108205,7 @@ var require_websocket_server = __commonJS({
|
|
|
108128
108205
|
);
|
|
108129
108206
|
}
|
|
108130
108207
|
if (this._state > RUNNING) return abortHandshake(socket, 503);
|
|
108131
|
-
const digest =
|
|
108208
|
+
const digest = createHash10("sha1").update(key2 + GUID).digest("base64");
|
|
108132
108209
|
const headers = [
|
|
108133
108210
|
"HTTP/1.1 101 Switching Protocols",
|
|
108134
108211
|
"Upgrade: websocket",
|
|
@@ -126576,10 +126653,10 @@ __export(snapshot_exports, {
|
|
|
126576
126653
|
import { spawn as spawn15 } from "child_process";
|
|
126577
126654
|
import { existsSync as existsSync68, mkdtempSync as mkdtempSync3, readFileSync as readFileSync49, mkdirSync as mkdirSync36, rmSync as rmSync15, writeFileSync as writeFileSync31 } from "fs";
|
|
126578
126655
|
import { tmpdir as tmpdir6 } from "os";
|
|
126579
|
-
import { resolve as resolve41, join as
|
|
126656
|
+
import { resolve as resolve41, join as join74, relative as relative11, isAbsolute as isAbsolute10 } from "path";
|
|
126580
126657
|
async function extractVideoFrameToBuffer(videoPath, timeSeconds, useVp9AlphaDecoder = false) {
|
|
126581
|
-
const tmp = mkdtempSync3(
|
|
126582
|
-
const outPath =
|
|
126658
|
+
const tmp = mkdtempSync3(join74(tmpdir6(), "hf-snapshot-frame-"));
|
|
126659
|
+
const outPath = join74(tmp, "frame.png");
|
|
126583
126660
|
try {
|
|
126584
126661
|
const result = await new Promise(
|
|
126585
126662
|
(resolvePromise) => {
|
|
@@ -126718,13 +126795,13 @@ async function captureSnapshots(projectDir, opts) {
|
|
|
126718
126795
|
return [];
|
|
126719
126796
|
}
|
|
126720
126797
|
const positions = opts.at?.length ? opts.at : numFrames === 1 ? [duration / 2] : Array.from({ length: numFrames }, (_, i2) => i2 / (numFrames - 1) * duration);
|
|
126721
|
-
const snapshotDir =
|
|
126798
|
+
const snapshotDir = join74(projectDir, "snapshots");
|
|
126722
126799
|
mkdirSync36(snapshotDir, { recursive: true });
|
|
126723
126800
|
try {
|
|
126724
126801
|
const { readdirSync: readdirSync32 } = await import("fs");
|
|
126725
126802
|
for (const file of readdirSync32(snapshotDir)) {
|
|
126726
126803
|
if (/\.(png|jpg|jpeg)$/i.test(file)) {
|
|
126727
|
-
rmSync15(
|
|
126804
|
+
rmSync15(join74(snapshotDir, file), { force: true });
|
|
126728
126805
|
}
|
|
126729
126806
|
}
|
|
126730
126807
|
} catch {
|
|
@@ -126835,7 +126912,7 @@ async function captureSnapshots(projectDir, opts) {
|
|
|
126835
126912
|
}
|
|
126836
126913
|
const timeLabel = `${time.toFixed(1)}s`;
|
|
126837
126914
|
const filename = `frame-${String(i2).padStart(2, "0")}-at-${timeLabel}.png`;
|
|
126838
|
-
const framePath =
|
|
126915
|
+
const framePath = join74(snapshotDir, filename);
|
|
126839
126916
|
await page.screenshot({ path: framePath, type: "png" });
|
|
126840
126917
|
savedPaths.push(`snapshots/${filename}`);
|
|
126841
126918
|
}
|
|
@@ -126915,10 +126992,10 @@ ${c2.success("\u25C7")} ${paths.length} snapshots saved to snapshots/`);
|
|
|
126915
126992
|
}
|
|
126916
126993
|
try {
|
|
126917
126994
|
const { createSnapshotContactSheet: createSnapshotContactSheet2 } = await Promise.resolve().then(() => (init_contactSheet(), contactSheet_exports));
|
|
126918
|
-
const snapshotDir =
|
|
126995
|
+
const snapshotDir = join74(project.dir, "snapshots");
|
|
126919
126996
|
const sheets = await createSnapshotContactSheet2(
|
|
126920
126997
|
snapshotDir,
|
|
126921
|
-
|
|
126998
|
+
join74(snapshotDir, "contact-sheet.jpg")
|
|
126922
126999
|
);
|
|
126923
127000
|
if (sheets.length > 0) {
|
|
126924
127001
|
const label3 = sheets.length === 1 ? "contact-sheet.jpg" : `contact-sheet-1..${sheets.length}.jpg`;
|
|
@@ -126936,7 +127013,7 @@ ${c2.success("\u25C7")} ${paths.length} snapshots saved to snapshots/`);
|
|
|
126936
127013
|
const { GoogleGenAI: GoogleGenAI2 } = await Promise.resolve().then(() => (init_node4(), node_exports));
|
|
126937
127014
|
const ai = new GoogleGenAI2({ apiKey: geminiKey });
|
|
126938
127015
|
const model = process.env.HYPERFRAMES_GEMINI_MODEL || "gemini-3.1-flash-lite-preview";
|
|
126939
|
-
const snapshotDir =
|
|
127016
|
+
const snapshotDir = join74(project.dir, "snapshots");
|
|
126940
127017
|
const customQuestion = describeArg === "true" ? "Describe this video composition frame in 1-2 sentences. Be specific and factual: what elements are visible, what text appears, is the frame blank/black/loading, what is the composition. Flag any obvious problems." : describeArg;
|
|
126941
127018
|
const descriptions = [
|
|
126942
127019
|
`# Snapshot Frame Descriptions`,
|
|
@@ -126955,7 +127032,7 @@ ${c2.success("\u25C7")} ${paths.length} snapshots saved to snapshots/`);
|
|
|
126955
127032
|
const results = await Promise.allSettled(
|
|
126956
127033
|
paths.map(async (p2) => {
|
|
126957
127034
|
const filename = p2.replace("snapshots/", "");
|
|
126958
|
-
const filePath =
|
|
127035
|
+
const filePath = join74(snapshotDir, filename);
|
|
126959
127036
|
if (!existsSync68(filePath)) return { filename, desc: "file not found" };
|
|
126960
127037
|
const raw = readFileSync49(filePath);
|
|
126961
127038
|
let imageData;
|
|
@@ -126993,7 +127070,7 @@ ${c2.success("\u25C7")} ${paths.length} snapshots saved to snapshots/`);
|
|
|
126993
127070
|
descriptions.push(`## (error)`, `Gemini call failed: ${errMsg.slice(0, 120)}`, ``);
|
|
126994
127071
|
}
|
|
126995
127072
|
}
|
|
126996
|
-
const descPath =
|
|
127073
|
+
const descPath = join74(snapshotDir, "descriptions.md");
|
|
126997
127074
|
writeFileSync31(descPath, descriptions.join("\n"));
|
|
126998
127075
|
console.log(` ${c2.dim("descriptions.md")} (Gemini frame analysis)`);
|
|
126999
127076
|
}
|
|
@@ -127015,13 +127092,13 @@ ${c2.error("\u2717")} Snapshot failed: ${msg}`);
|
|
|
127015
127092
|
|
|
127016
127093
|
// src/capture/assetDownloader.ts
|
|
127017
127094
|
import { writeFileSync as writeFileSync32, mkdirSync as mkdirSync37 } from "fs";
|
|
127018
|
-
import { join as
|
|
127095
|
+
import { join as join75, extname as extname14 } from "path";
|
|
127019
127096
|
async function downloadAssets(tokens, outputDir, catalogedAssets, faviconLinks) {
|
|
127020
|
-
const assetsDir =
|
|
127097
|
+
const assetsDir = join75(outputDir, "assets");
|
|
127021
127098
|
mkdirSync37(assetsDir, { recursive: true });
|
|
127022
127099
|
const assets = [];
|
|
127023
127100
|
const downloadedUrls = /* @__PURE__ */ new Set();
|
|
127024
|
-
mkdirSync37(
|
|
127101
|
+
mkdirSync37(join75(outputDir, "assets", "svgs"), { recursive: true });
|
|
127025
127102
|
const usedSvgNames = /* @__PURE__ */ new Set();
|
|
127026
127103
|
for (let i2 = 0; i2 < tokens.svgs.length && i2 < 30; i2++) {
|
|
127027
127104
|
const svg = tokens.svgs[i2];
|
|
@@ -127038,7 +127115,7 @@ async function downloadAssets(tokens, outputDir, catalogedAssets, faviconLinks)
|
|
|
127038
127115
|
const name = `${finalSlug}.svg`;
|
|
127039
127116
|
const localPath = `assets/svgs/${name}`;
|
|
127040
127117
|
try {
|
|
127041
|
-
writeFileSync32(
|
|
127118
|
+
writeFileSync32(join75(outputDir, localPath), svg.outerHTML, "utf-8");
|
|
127042
127119
|
assets.push({ url: "", localPath, type: "svg" });
|
|
127043
127120
|
} catch {
|
|
127044
127121
|
}
|
|
@@ -127051,7 +127128,7 @@ async function downloadAssets(tokens, outputDir, catalogedAssets, faviconLinks)
|
|
|
127051
127128
|
const localPath = `assets/${name}`;
|
|
127052
127129
|
const buffer = await fetchBuffer(icon.href);
|
|
127053
127130
|
if (buffer) {
|
|
127054
|
-
writeFileSync32(
|
|
127131
|
+
writeFileSync32(join75(outputDir, localPath), buffer);
|
|
127055
127132
|
assets.push({ url: icon.href, localPath, type: "favicon" });
|
|
127056
127133
|
break;
|
|
127057
127134
|
}
|
|
@@ -127108,7 +127185,7 @@ async function downloadAssets(tokens, outputDir, catalogedAssets, faviconLinks)
|
|
|
127108
127185
|
const name = `${slug}${ext}`;
|
|
127109
127186
|
usedNames.add(slug);
|
|
127110
127187
|
const localPath = `assets/${name}`;
|
|
127111
|
-
writeFileSync32(
|
|
127188
|
+
writeFileSync32(join75(outputDir, localPath), buffer);
|
|
127112
127189
|
assets.push({ url, localPath, type: "image" });
|
|
127113
127190
|
imgIdx++;
|
|
127114
127191
|
} catch {
|
|
@@ -127121,7 +127198,7 @@ async function downloadAssets(tokens, outputDir, catalogedAssets, faviconLinks)
|
|
|
127121
127198
|
const localPath = `assets/og-image${ext}`;
|
|
127122
127199
|
const buffer = await fetchBuffer(tokens.ogImage);
|
|
127123
127200
|
if (buffer && buffer.length > 5e3) {
|
|
127124
|
-
writeFileSync32(
|
|
127201
|
+
writeFileSync32(join75(outputDir, localPath), buffer);
|
|
127125
127202
|
assets.push({ url: tokens.ogImage, localPath, type: "image" });
|
|
127126
127203
|
}
|
|
127127
127204
|
} catch {
|
|
@@ -127144,7 +127221,7 @@ function normalizeUrl(u) {
|
|
|
127144
127221
|
}
|
|
127145
127222
|
}
|
|
127146
127223
|
async function downloadAndRewriteFonts(css, outputDir) {
|
|
127147
|
-
const assetsDir =
|
|
127224
|
+
const assetsDir = join75(outputDir, "assets", "fonts");
|
|
127148
127225
|
mkdirSync37(assetsDir, { recursive: true });
|
|
127149
127226
|
const fontUrlRegex = /url\(['"]?(https?:\/\/[^'")\s]+\.(?:woff2?|ttf|otf)[^'")\s]*?)['"]?\)/g;
|
|
127150
127227
|
const fontUrls = /* @__PURE__ */ new Set();
|
|
@@ -127180,7 +127257,7 @@ async function downloadAndRewriteFonts(css, outputDir) {
|
|
|
127180
127257
|
try {
|
|
127181
127258
|
const urlObj = new URL(fontUrl);
|
|
127182
127259
|
const filename = urlObj.pathname.split("/").pop() || `font-${count}.woff2`;
|
|
127183
|
-
const localPath =
|
|
127260
|
+
const localPath = join75(assetsDir, filename);
|
|
127184
127261
|
const relativePath = `assets/fonts/${filename}`;
|
|
127185
127262
|
const buffer = await fetchBuffer(fontUrl);
|
|
127186
127263
|
if (buffer) {
|
|
@@ -128152,7 +128229,7 @@ var init_designStyleExtractor = __esm({
|
|
|
128152
128229
|
|
|
128153
128230
|
// src/capture/fontMetadataExtractor.ts
|
|
128154
128231
|
import { readdirSync as readdirSync27, readFileSync as readFileSync50, writeFileSync as writeFileSync33, existsSync as existsSync69 } from "fs";
|
|
128155
|
-
import { join as
|
|
128232
|
+
import { join as join76 } from "path";
|
|
128156
128233
|
import * as fontkit from "fontkit";
|
|
128157
128234
|
function isFontCollection(value) {
|
|
128158
128235
|
return value.type === "TTC" || value.type === "DFont";
|
|
@@ -128163,7 +128240,7 @@ function extractFontMetadata(fontsDir, outputPath) {
|
|
|
128163
128240
|
if (existsSync69(fontsDir)) {
|
|
128164
128241
|
const fontFiles = readdirSync27(fontsDir).filter((f3) => /\.(woff2?|ttf|otf)$/i.test(f3));
|
|
128165
128242
|
for (const filename of fontFiles) {
|
|
128166
|
-
const fullPath =
|
|
128243
|
+
const fullPath = join76(fontsDir, filename);
|
|
128167
128244
|
const meta = readSingleFont(fullPath, filename);
|
|
128168
128245
|
if (meta.identified) {
|
|
128169
128246
|
files.push(meta);
|
|
@@ -128458,7 +128535,7 @@ var init_animationCataloger = __esm({
|
|
|
128458
128535
|
|
|
128459
128536
|
// src/capture/mediaCapture.ts
|
|
128460
128537
|
import { mkdirSync as mkdirSync38, writeFileSync as writeFileSync34, readdirSync as readdirSync28, readFileSync as readFileSync51, statSync as statSync24 } from "fs";
|
|
128461
|
-
import { join as
|
|
128538
|
+
import { join as join77 } from "path";
|
|
128462
128539
|
async function saveLottieAnimations(discoveredLotties, lottieDir) {
|
|
128463
128540
|
let savedCount = 0;
|
|
128464
128541
|
const savedHashes = /* @__PURE__ */ new Set();
|
|
@@ -128491,7 +128568,7 @@ async function saveLottieAnimations(discoveredLotties, lottieDir) {
|
|
|
128491
128568
|
const hash2 = buf.toString("base64").slice(0, 100);
|
|
128492
128569
|
if (savedHashes.has(hash2)) continue;
|
|
128493
128570
|
savedHashes.add(hash2);
|
|
128494
|
-
writeFileSync34(
|
|
128571
|
+
writeFileSync34(join77(lottieDir, `animation-${savedCount}.lottie`), buf);
|
|
128495
128572
|
savedCount++;
|
|
128496
128573
|
continue;
|
|
128497
128574
|
}
|
|
@@ -128509,7 +128586,7 @@ async function saveLottieAnimations(discoveredLotties, lottieDir) {
|
|
|
128509
128586
|
} catch {
|
|
128510
128587
|
continue;
|
|
128511
128588
|
}
|
|
128512
|
-
writeFileSync34(
|
|
128589
|
+
writeFileSync34(join77(lottieDir, `animation-${savedCount}.json`), jsonData, "utf-8");
|
|
128513
128590
|
savedCount++;
|
|
128514
128591
|
}
|
|
128515
128592
|
} catch {
|
|
@@ -128519,22 +128596,22 @@ async function saveLottieAnimations(discoveredLotties, lottieDir) {
|
|
|
128519
128596
|
}
|
|
128520
128597
|
async function renderLottiePreviews(chromeBrowser, lottieDir, outputDir) {
|
|
128521
128598
|
const manifest = [];
|
|
128522
|
-
const previewDir =
|
|
128599
|
+
const previewDir = join77(lottieDir, "previews");
|
|
128523
128600
|
mkdirSync38(previewDir, { recursive: true });
|
|
128524
128601
|
for (const file of readdirSync28(lottieDir)) {
|
|
128525
128602
|
if (!file.endsWith(".json")) continue;
|
|
128526
128603
|
try {
|
|
128527
|
-
const raw = JSON.parse(readFileSync51(
|
|
128604
|
+
const raw = JSON.parse(readFileSync51(join77(lottieDir, file), "utf-8"));
|
|
128528
128605
|
const fr = raw.fr || 30;
|
|
128529
128606
|
const dur = ((raw.op || 0) - (raw.ip || 0)) / fr;
|
|
128530
128607
|
const previewName = file.replace(".json", "-preview.png");
|
|
128531
|
-
const fileSize = statSync24(
|
|
128608
|
+
const fileSize = statSync24(join77(lottieDir, file)).size;
|
|
128532
128609
|
if (fileSize > 2e6) continue;
|
|
128533
128610
|
let previewPage;
|
|
128534
128611
|
try {
|
|
128535
128612
|
previewPage = await chromeBrowser.newPage();
|
|
128536
128613
|
await previewPage.setViewport({ width: 400, height: 400 });
|
|
128537
|
-
const animData = JSON.parse(readFileSync51(
|
|
128614
|
+
const animData = JSON.parse(readFileSync51(join77(lottieDir, file), "utf-8"));
|
|
128538
128615
|
const midFrame = Math.floor(((raw.op || 0) - (raw.ip || 0)) * 0.3);
|
|
128539
128616
|
await previewPage.setContent(
|
|
128540
128617
|
`<!DOCTYPE html>
|
|
@@ -128564,7 +128641,7 @@ async function renderLottiePreviews(chromeBrowser, lottieDir, outputDir) {
|
|
|
128564
128641
|
await previewPage.waitForFunction(() => window.__READY === true, { timeout: 5e3 }).catch(() => {
|
|
128565
128642
|
});
|
|
128566
128643
|
await previewPage.screenshot({
|
|
128567
|
-
path:
|
|
128644
|
+
path: join77(previewDir, previewName),
|
|
128568
128645
|
type: "png",
|
|
128569
128646
|
omitBackground: true
|
|
128570
128647
|
});
|
|
@@ -128588,7 +128665,7 @@ async function renderLottiePreviews(chromeBrowser, lottieDir, outputDir) {
|
|
|
128588
128665
|
}
|
|
128589
128666
|
if (manifest.length > 0) {
|
|
128590
128667
|
writeFileSync34(
|
|
128591
|
-
|
|
128668
|
+
join77(outputDir, "extracted", "lottie-manifest.json"),
|
|
128592
128669
|
JSON.stringify(manifest, null, 2),
|
|
128593
128670
|
"utf-8"
|
|
128594
128671
|
);
|
|
@@ -128650,15 +128727,15 @@ async function captureVideoManifest(page, outputDir, progress) {
|
|
|
128650
128727
|
return true;
|
|
128651
128728
|
});
|
|
128652
128729
|
if (uniqueVideos.length > 0) {
|
|
128653
|
-
const videoManifestDir =
|
|
128730
|
+
const videoManifestDir = join77(outputDir, "assets", "videos");
|
|
128654
128731
|
mkdirSync38(videoManifestDir, { recursive: true });
|
|
128655
|
-
const previewDir =
|
|
128732
|
+
const previewDir = join77(videoManifestDir, "previews");
|
|
128656
128733
|
mkdirSync38(previewDir, { recursive: true });
|
|
128657
128734
|
const videoManifest = [];
|
|
128658
128735
|
for (let vi = 0; vi < uniqueVideos.length && vi < 20; vi++) {
|
|
128659
128736
|
const v2 = uniqueVideos[vi];
|
|
128660
128737
|
const previewName = `video-${vi}-preview.png`;
|
|
128661
|
-
const previewPath =
|
|
128738
|
+
const previewPath = join77(previewDir, previewName);
|
|
128662
128739
|
try {
|
|
128663
128740
|
await page.evaluate(`window.scrollTo(0, ${Math.max(0, v2.top - 100)})`);
|
|
128664
128741
|
await new Promise((r2) => setTimeout(r2, 300));
|
|
@@ -128697,7 +128774,7 @@ async function captureVideoManifest(page, outputDir, progress) {
|
|
|
128697
128774
|
}
|
|
128698
128775
|
if (videoManifest.length > 0) {
|
|
128699
128776
|
writeFileSync34(
|
|
128700
|
-
|
|
128777
|
+
join77(outputDir, "extracted", "video-manifest.json"),
|
|
128701
128778
|
JSON.stringify(videoManifest, null, 2),
|
|
128702
128779
|
"utf-8"
|
|
128703
128780
|
);
|
|
@@ -128714,7 +128791,7 @@ var init_mediaCapture = __esm({
|
|
|
128714
128791
|
|
|
128715
128792
|
// src/capture/contentExtractor.ts
|
|
128716
128793
|
import { existsSync as existsSync70, readdirSync as readdirSync29, statSync as statSync25, readFileSync as readFileSync52 } from "fs";
|
|
128717
|
-
import { join as
|
|
128794
|
+
import { join as join78 } from "path";
|
|
128718
128795
|
async function detectLibraries(page, capturedShaders) {
|
|
128719
128796
|
let detectedLibraries = [];
|
|
128720
128797
|
try {
|
|
@@ -128834,7 +128911,7 @@ async function captionImagesWithGemini(outputDir, progress, warnings) {
|
|
|
128834
128911
|
try {
|
|
128835
128912
|
const { GoogleGenAI: GoogleGenAI2 } = await Promise.resolve().then(() => (init_node4(), node_exports));
|
|
128836
128913
|
const ai = new GoogleGenAI2({ apiKey: geminiKey });
|
|
128837
|
-
const imageFiles = readdirSync29(
|
|
128914
|
+
const imageFiles = readdirSync29(join78(outputDir, "assets")).filter(
|
|
128838
128915
|
(f3) => /\.(png|jpg|jpeg|webp|gif)$/i.test(f3)
|
|
128839
128916
|
);
|
|
128840
128917
|
const model = process.env.HYPERFRAMES_GEMINI_MODEL || "gemini-3.1-flash-lite-preview";
|
|
@@ -128843,7 +128920,7 @@ async function captionImagesWithGemini(outputDir, progress, warnings) {
|
|
|
128843
128920
|
const batch = imageFiles.slice(i2, i2 + BATCH_SIZE);
|
|
128844
128921
|
const results = await Promise.allSettled(
|
|
128845
128922
|
batch.map(async (file) => {
|
|
128846
|
-
const filePath =
|
|
128923
|
+
const filePath = join78(outputDir, "assets", file);
|
|
128847
128924
|
const stat3 = statSync25(filePath);
|
|
128848
128925
|
if (stat3.size > 4e6) return { file, caption: "" };
|
|
128849
128926
|
const buffer = readFileSync52(filePath);
|
|
@@ -128883,11 +128960,11 @@ async function captionImagesWithGemini(outputDir, progress, warnings) {
|
|
|
128883
128960
|
}
|
|
128884
128961
|
progress("design", `${Object.keys(geminiCaptions).length} images captioned with Gemini`);
|
|
128885
128962
|
const svgFiles = [];
|
|
128886
|
-
const assetsDir =
|
|
128963
|
+
const assetsDir = join78(outputDir, "assets");
|
|
128887
128964
|
for (const f3 of readdirSync29(assetsDir)) {
|
|
128888
128965
|
if (/\.svg$/i.test(f3)) svgFiles.push({ file: f3, relPath: f3 });
|
|
128889
128966
|
}
|
|
128890
|
-
const svgsSubdir =
|
|
128967
|
+
const svgsSubdir = join78(assetsDir, "svgs");
|
|
128891
128968
|
if (existsSync70(svgsSubdir)) {
|
|
128892
128969
|
for (const f3 of readdirSync29(svgsSubdir)) {
|
|
128893
128970
|
if (/\.svg$/i.test(f3)) svgFiles.push({ file: f3, relPath: `svgs/${f3}` });
|
|
@@ -128901,7 +128978,7 @@ async function captionImagesWithGemini(outputDir, progress, warnings) {
|
|
|
128901
128978
|
const batch = svgFiles.slice(i2, i2 + SVG_BATCH);
|
|
128902
128979
|
const results = await Promise.allSettled(
|
|
128903
128980
|
batch.map(async ({ relPath }) => {
|
|
128904
|
-
const filePath =
|
|
128981
|
+
const filePath = join78(assetsDir, relPath);
|
|
128905
128982
|
let svgText = readFileSync52(filePath, "utf-8");
|
|
128906
128983
|
if (svgText.length > MAX_SVG_CHARS) {
|
|
128907
128984
|
svgText = svgText.slice(0, MAX_SVG_CHARS) + "\n<!-- truncated -->";
|
|
@@ -128948,11 +129025,11 @@ function generateAssetDescriptions(outputDir, tokens, catalogedAssets, geminiCap
|
|
|
128948
129025
|
const uncaptionedLines = [];
|
|
128949
129026
|
const svgLines = [];
|
|
128950
129027
|
const fontLines = [];
|
|
128951
|
-
const assetsPath =
|
|
129028
|
+
const assetsPath = join78(outputDir, "assets");
|
|
128952
129029
|
try {
|
|
128953
129030
|
for (const file of readdirSync29(assetsPath)) {
|
|
128954
129031
|
if (file === "svgs" || file === "fonts" || file === "lottie" || file === "videos") continue;
|
|
128955
|
-
const filePath =
|
|
129032
|
+
const filePath = join78(assetsPath, file);
|
|
128956
129033
|
const stat3 = statSync25(filePath);
|
|
128957
129034
|
if (!stat3.isFile()) continue;
|
|
128958
129035
|
const sizeKb = Math.round(stat3.size / 1024);
|
|
@@ -128981,7 +129058,7 @@ function generateAssetDescriptions(outputDir, tokens, catalogedAssets, geminiCap
|
|
|
128981
129058
|
} catch {
|
|
128982
129059
|
}
|
|
128983
129060
|
try {
|
|
128984
|
-
const svgsPath =
|
|
129061
|
+
const svgsPath = join78(assetsPath, "svgs");
|
|
128985
129062
|
for (const file of readdirSync29(svgsPath)) {
|
|
128986
129063
|
if (!file.endsWith(".svg")) continue;
|
|
128987
129064
|
const geminiCaption = geminiCaptions[`svgs/${file}`];
|
|
@@ -129001,7 +129078,7 @@ function generateAssetDescriptions(outputDir, tokens, catalogedAssets, geminiCap
|
|
|
129001
129078
|
} catch {
|
|
129002
129079
|
}
|
|
129003
129080
|
try {
|
|
129004
|
-
const fontsPath =
|
|
129081
|
+
const fontsPath = join78(assetsPath, "fonts");
|
|
129005
129082
|
for (const file of readdirSync29(fontsPath)) {
|
|
129006
129083
|
fontLines.push(`fonts/${file} \u2014 font file`);
|
|
129007
129084
|
}
|
|
@@ -129021,7 +129098,7 @@ __export(agentPromptGenerator_exports, {
|
|
|
129021
129098
|
generateAgentPrompt: () => generateAgentPrompt
|
|
129022
129099
|
});
|
|
129023
129100
|
import { writeFileSync as writeFileSync35, readdirSync as readdirSync30, existsSync as existsSync71 } from "fs";
|
|
129024
|
-
import { join as
|
|
129101
|
+
import { join as join79 } from "path";
|
|
129025
129102
|
function inferColorRole(hex) {
|
|
129026
129103
|
const r2 = parseInt(hex.slice(1, 3), 16) / 255;
|
|
129027
129104
|
const g = parseInt(hex.slice(3, 5), 16) / 255;
|
|
@@ -129040,9 +129117,9 @@ function inferColorRole(hex) {
|
|
|
129040
129117
|
}
|
|
129041
129118
|
function generateAgentPrompt(outputDir, url, tokens, _animations, hasScreenshot, hasLottie, hasShaders, _catalogedAssets, _detectedLibraries) {
|
|
129042
129119
|
const prompt = buildPrompt(outputDir, url, tokens, hasScreenshot, hasLottie, hasShaders);
|
|
129043
|
-
writeFileSync35(
|
|
129044
|
-
writeFileSync35(
|
|
129045
|
-
writeFileSync35(
|
|
129120
|
+
writeFileSync35(join79(outputDir, "AGENTS.md"), prompt, "utf-8");
|
|
129121
|
+
writeFileSync35(join79(outputDir, "CLAUDE.md"), prompt, "utf-8");
|
|
129122
|
+
writeFileSync35(join79(outputDir, ".cursorrules"), prompt, "utf-8");
|
|
129046
129123
|
}
|
|
129047
129124
|
function buildPrompt(outputDir, url, tokens, hasScreenshot, hasLottie, hasShaders) {
|
|
129048
129125
|
const title = tokens.title || new URL(url).hostname.replace(/^www\./, "");
|
|
@@ -129051,7 +129128,7 @@ function buildPrompt(outputDir, url, tokens, hasScreenshot, hasLottie, hasShader
|
|
|
129051
129128
|
(f3) => f3.family + (f3.variable && f3.weightRange ? ` (${f3.weightRange[0]}-${f3.weightRange[1]} variable)` : f3.weights.length > 0 ? ` (${f3.weights.join(",")})` : "")
|
|
129052
129129
|
).join(", ") || "none detected";
|
|
129053
129130
|
function contactSheetRows(dir, baseFile, label2) {
|
|
129054
|
-
const fullDir =
|
|
129131
|
+
const fullDir = join79(outputDir, dir);
|
|
129055
129132
|
if (!existsSync71(fullDir)) return [];
|
|
129056
129133
|
const baseName = baseFile.replace(/\.jpg$/, "");
|
|
129057
129134
|
const escapedBase = baseName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
@@ -129084,7 +129161,7 @@ function buildPrompt(outputDir, url, tokens, hasScreenshot, hasLottie, hasShader
|
|
|
129084
129161
|
tableRows.push(
|
|
129085
129162
|
`| \`extracted/tokens.json\` | Design tokens: ${tokens.colors.length} colors, ${tokens.fonts.length} fonts, ${tokens.headings?.length ?? 0} headings, ${tokens.ctas?.length ?? 0} CTAs |`
|
|
129086
129163
|
);
|
|
129087
|
-
if (existsSync71(
|
|
129164
|
+
if (existsSync71(join79(outputDir, "extracted", "design-styles.json"))) {
|
|
129088
129165
|
tableRows.push(
|
|
129089
129166
|
"| `extracted/design-styles.json` | Computed styles from live DOM: typography hierarchy, button/card/nav styles, spacing scale, border-radius, box shadows. Primary data source for DESIGN.md. |"
|
|
129090
129167
|
);
|
|
@@ -129156,7 +129233,7 @@ var init_agentPromptGenerator = __esm({
|
|
|
129156
129233
|
|
|
129157
129234
|
// src/capture/scaffolding.ts
|
|
129158
129235
|
import { existsSync as existsSync72, writeFileSync as writeFileSync36, readFileSync as readFileSync53 } from "fs";
|
|
129159
|
-
import { join as
|
|
129236
|
+
import { join as join80, resolve as resolve42 } from "path";
|
|
129160
129237
|
function loadEnvFile(startDir) {
|
|
129161
129238
|
try {
|
|
129162
129239
|
let dir = resolve42(startDir);
|
|
@@ -129182,7 +129259,7 @@ function loadEnvFile(startDir) {
|
|
|
129182
129259
|
}
|
|
129183
129260
|
}
|
|
129184
129261
|
async function generateProjectScaffold(outputDir, url, tokens, animationCatalog, hasScreenshots, hasLotties, hasShaders, catalogedAssets, progress, warnings, detectedLibraries) {
|
|
129185
|
-
const metaPath =
|
|
129262
|
+
const metaPath = join80(outputDir, "meta.json");
|
|
129186
129263
|
if (!existsSync72(metaPath)) {
|
|
129187
129264
|
const hostname = new URL(url).hostname.replace(/^www\./, "");
|
|
129188
129265
|
writeFileSync36(
|
|
@@ -129221,9 +129298,9 @@ __export(screenshotCapture_exports, {
|
|
|
129221
129298
|
captureScrollScreenshots: () => captureScrollScreenshots
|
|
129222
129299
|
});
|
|
129223
129300
|
import { writeFileSync as writeFileSync37, mkdirSync as mkdirSync39 } from "fs";
|
|
129224
|
-
import { join as
|
|
129301
|
+
import { join as join81 } from "path";
|
|
129225
129302
|
async function captureScrollScreenshots(page, outputDir) {
|
|
129226
|
-
const screenshotsDir =
|
|
129303
|
+
const screenshotsDir = join81(outputDir, "screenshots");
|
|
129227
129304
|
mkdirSync39(screenshotsDir, { recursive: true });
|
|
129228
129305
|
const MAX_SCREENSHOTS = 20;
|
|
129229
129306
|
const filePaths = [];
|
|
@@ -129315,7 +129392,7 @@ async function captureScrollScreenshots(page, outputDir) {
|
|
|
129315
129392
|
finalPositions[i2] / Math.max(1, scrollHeight - viewportHeight) * 100
|
|
129316
129393
|
);
|
|
129317
129394
|
const filename = `scroll-${String(Math.min(pct, 100)).padStart(3, "0")}.png`;
|
|
129318
|
-
const filePath =
|
|
129395
|
+
const filePath = join81(screenshotsDir, filename);
|
|
129319
129396
|
const buffer = await page.screenshot({ type: "png" });
|
|
129320
129397
|
writeFileSync37(filePath, buffer);
|
|
129321
129398
|
filePaths.push(`screenshots/${filename}`);
|
|
@@ -129591,7 +129668,7 @@ __export(capture_exports, {
|
|
|
129591
129668
|
captureWebsite: () => captureWebsite
|
|
129592
129669
|
});
|
|
129593
129670
|
import { mkdirSync as mkdirSync40, writeFileSync as writeFileSync38, existsSync as existsSync73 } from "fs";
|
|
129594
|
-
import { join as
|
|
129671
|
+
import { join as join82 } from "path";
|
|
129595
129672
|
async function captureWebsite(opts, onProgress) {
|
|
129596
129673
|
const {
|
|
129597
129674
|
url,
|
|
@@ -129608,9 +129685,9 @@ async function captureWebsite(opts, onProgress) {
|
|
|
129608
129685
|
onProgress?.(stage, detail);
|
|
129609
129686
|
};
|
|
129610
129687
|
loadEnvFile(outputDir);
|
|
129611
|
-
mkdirSync40(
|
|
129612
|
-
mkdirSync40(
|
|
129613
|
-
mkdirSync40(
|
|
129688
|
+
mkdirSync40(join82(outputDir, "extracted"), { recursive: true });
|
|
129689
|
+
mkdirSync40(join82(outputDir, "screenshots"), { recursive: true });
|
|
129690
|
+
mkdirSync40(join82(outputDir, "assets"), { recursive: true });
|
|
129614
129691
|
progress("browser", "Launching headless Chrome...");
|
|
129615
129692
|
const { ensureBrowser: ensureBrowser2 } = await Promise.resolve().then(() => (init_manager2(), manager_exports2));
|
|
129616
129693
|
const browser = await ensureBrowser2();
|
|
@@ -129766,7 +129843,7 @@ async function captureWebsite(opts, onProgress) {
|
|
|
129766
129843
|
} catch {
|
|
129767
129844
|
}
|
|
129768
129845
|
if (discoveredLotties.length > 0) {
|
|
129769
|
-
const lottieDir =
|
|
129846
|
+
const lottieDir = join82(outputDir, "assets", "lottie");
|
|
129770
129847
|
mkdirSync40(lottieDir, { recursive: true });
|
|
129771
129848
|
const savedCount = await saveLottieAnimations(discoveredLotties, lottieDir);
|
|
129772
129849
|
if (savedCount > 0) {
|
|
@@ -129786,7 +129863,7 @@ async function captureWebsite(opts, onProgress) {
|
|
|
129786
129863
|
});
|
|
129787
129864
|
capturedShaders = unique;
|
|
129788
129865
|
writeFileSync38(
|
|
129789
|
-
|
|
129866
|
+
join82(outputDir, "extracted", "shaders.json"),
|
|
129790
129867
|
JSON.stringify(unique, null, 2),
|
|
129791
129868
|
"utf-8"
|
|
129792
129869
|
);
|
|
@@ -129801,7 +129878,7 @@ async function captureWebsite(opts, onProgress) {
|
|
|
129801
129878
|
svgs: tokens.svgs.map(({ outerHTML: _, ...rest }) => rest)
|
|
129802
129879
|
};
|
|
129803
129880
|
writeFileSync38(
|
|
129804
|
-
|
|
129881
|
+
join82(outputDir, "extracted", "tokens.json"),
|
|
129805
129882
|
JSON.stringify(tokensForDisk, null, 2),
|
|
129806
129883
|
"utf-8"
|
|
129807
129884
|
);
|
|
@@ -129809,7 +129886,7 @@ async function captureWebsite(opts, onProgress) {
|
|
|
129809
129886
|
try {
|
|
129810
129887
|
const designStyles = await extractDesignStyles(page1);
|
|
129811
129888
|
writeFileSync38(
|
|
129812
|
-
|
|
129889
|
+
join82(outputDir, "extracted", "design-styles.json"),
|
|
129813
129890
|
JSON.stringify(designStyles, null, 2),
|
|
129814
129891
|
"utf-8"
|
|
129815
129892
|
);
|
|
@@ -129882,8 +129959,8 @@ ${err.stack}` : String(err);
|
|
|
129882
129959
|
extracted.headHtml = await downloadAndRewriteFonts(extracted.headHtml, outputDir);
|
|
129883
129960
|
try {
|
|
129884
129961
|
const fontsManifest = extractFontMetadata(
|
|
129885
|
-
|
|
129886
|
-
|
|
129962
|
+
join82(outputDir, "assets", "fonts"),
|
|
129963
|
+
join82(outputDir, "extracted", "fonts-manifest.json")
|
|
129887
129964
|
);
|
|
129888
129965
|
if (fontsManifest.families.length > 0) {
|
|
129889
129966
|
const summary = fontsManifest.families.map((f3) => `${f3.family}${f3.variable ? " (variable)" : ""} \xD7 ${f3.fileCount}`).join(", ");
|
|
@@ -129913,7 +129990,7 @@ ${err.stack}` : String(err);
|
|
|
129913
129990
|
representativeAnimations: representativeAnims
|
|
129914
129991
|
};
|
|
129915
129992
|
writeFileSync38(
|
|
129916
|
-
|
|
129993
|
+
join82(outputDir, "extracted", "animations.json"),
|
|
129917
129994
|
JSON.stringify(leanCatalog, null, 2),
|
|
129918
129995
|
"utf-8"
|
|
129919
129996
|
);
|
|
@@ -129924,7 +130001,7 @@ ${err.stack}` : String(err);
|
|
|
129924
130001
|
assets = await downloadAssets(tokens, outputDir, catalogedAssets, faviconLinks);
|
|
129925
130002
|
}
|
|
129926
130003
|
if (visibleTextContent) {
|
|
129927
|
-
writeFileSync38(
|
|
130004
|
+
writeFileSync38(join82(outputDir, "extracted", "visible-text.txt"), visibleTextContent, "utf-8");
|
|
129928
130005
|
}
|
|
129929
130006
|
const geminiCaptions = await captionImagesWithGemini(outputDir, progress, warnings);
|
|
129930
130007
|
progress("design", "Generating asset descriptions...");
|
|
@@ -129932,7 +130009,7 @@ ${err.stack}` : String(err);
|
|
|
129932
130009
|
const lines = generateAssetDescriptions(outputDir, tokens, catalogedAssets, geminiCaptions);
|
|
129933
130010
|
if (lines.length > 0) {
|
|
129934
130011
|
writeFileSync38(
|
|
129935
|
-
|
|
130012
|
+
join82(outputDir, "extracted", "asset-descriptions.md"),
|
|
129936
130013
|
"# Asset Descriptions\n\nOne line per file. Read this instead of opening every image individually.\n\n" + lines.map((l) => "- " + l).join("\n") + "\n",
|
|
129937
130014
|
"utf-8"
|
|
129938
130015
|
);
|
|
@@ -129944,19 +130021,19 @@ ${err.stack}` : String(err);
|
|
|
129944
130021
|
try {
|
|
129945
130022
|
const { createScrollContactSheet: createScrollContactSheet2, createAssetContactSheet: createAssetContactSheet2, createSvgContactSheet: createSvgContactSheet2 } = await Promise.resolve().then(() => (init_contactSheet(), contactSheet_exports));
|
|
129946
130023
|
const scrollSheets = await createScrollContactSheet2(
|
|
129947
|
-
|
|
129948
|
-
|
|
130024
|
+
join82(outputDir, "screenshots"),
|
|
130025
|
+
join82(outputDir, "screenshots", "contact-sheet.jpg")
|
|
129949
130026
|
);
|
|
129950
130027
|
if (scrollSheets.length > 0)
|
|
129951
130028
|
progress(
|
|
129952
130029
|
"design",
|
|
129953
130030
|
`Screenshot contact sheet generated (${scrollSheets.length} page${scrollSheets.length > 1 ? "s" : ""})`
|
|
129954
130031
|
);
|
|
129955
|
-
const assetsImgDir =
|
|
130032
|
+
const assetsImgDir = join82(outputDir, "assets");
|
|
129956
130033
|
if (existsSync73(assetsImgDir)) {
|
|
129957
130034
|
const assetSheets = await createAssetContactSheet2(
|
|
129958
130035
|
assetsImgDir,
|
|
129959
|
-
|
|
130036
|
+
join82(outputDir, "assets", "contact-sheet.jpg")
|
|
129960
130037
|
);
|
|
129961
130038
|
if (assetSheets.length > 0)
|
|
129962
130039
|
progress(
|
|
@@ -129964,9 +130041,9 @@ ${err.stack}` : String(err);
|
|
|
129964
130041
|
`Asset contact sheet generated (${assetSheets.length} page${assetSheets.length > 1 ? "s" : ""})`
|
|
129965
130042
|
);
|
|
129966
130043
|
}
|
|
129967
|
-
const svgsDir =
|
|
129968
|
-
const assetsRootDir =
|
|
129969
|
-
const svgOutputPath = existsSync73(svgsDir) ?
|
|
130044
|
+
const svgsDir = join82(outputDir, "assets", "svgs");
|
|
130045
|
+
const assetsRootDir = join82(outputDir, "assets");
|
|
130046
|
+
const svgOutputPath = existsSync73(svgsDir) ? join82(outputDir, "assets", "svgs", "contact-sheet.jpg") : join82(outputDir, "assets", "contact-sheet-svgs.jpg");
|
|
129970
130047
|
const svgSheets = await createSvgContactSheet2(svgsDir, svgOutputPath, assetsRootDir);
|
|
129971
130048
|
if (svgSheets.length > 0)
|
|
129972
130049
|
progress(
|
|
@@ -129982,7 +130059,7 @@ ${err.stack}` : String(err);
|
|
|
129982
130059
|
animationCatalog,
|
|
129983
130060
|
screenshots.length > 0,
|
|
129984
130061
|
discoveredLotties.length > 0,
|
|
129985
|
-
existsSync73(
|
|
130062
|
+
existsSync73(join82(outputDir, "extracted", "shaders.json")),
|
|
129986
130063
|
catalogedAssets,
|
|
129987
130064
|
progress,
|
|
129988
130065
|
warnings,
|
|
@@ -130211,9 +130288,9 @@ __export(state_exports, {
|
|
|
130211
130288
|
writeStackOutputs: () => writeStackOutputs
|
|
130212
130289
|
});
|
|
130213
130290
|
import { existsSync as existsSync74, mkdirSync as mkdirSync41, readdirSync as readdirSync31, readFileSync as readFileSync54, rmSync as rmSync16, writeFileSync as writeFileSync39 } from "fs";
|
|
130214
|
-
import { dirname as dirname30, join as
|
|
130291
|
+
import { dirname as dirname30, join as join83 } from "path";
|
|
130215
130292
|
function stateFilePath(stackName = DEFAULT_STACK_NAME, cwd = process.cwd()) {
|
|
130216
|
-
return
|
|
130293
|
+
return join83(cwd, STATE_DIR_NAME, `${STATE_FILE_PREFIX}${stackName}.json`);
|
|
130217
130294
|
}
|
|
130218
130295
|
function writeStackOutputs(outputs, cwd = process.cwd()) {
|
|
130219
130296
|
const path2 = stateFilePath(outputs.stackName, cwd);
|
|
@@ -130235,7 +130312,7 @@ function deleteStackOutputs(stackName = DEFAULT_STACK_NAME, cwd = process.cwd())
|
|
|
130235
130312
|
if (existsSync74(path2)) rmSync16(path2);
|
|
130236
130313
|
}
|
|
130237
130314
|
function listStackNames(cwd = process.cwd()) {
|
|
130238
|
-
const dir =
|
|
130315
|
+
const dir = join83(cwd, STATE_DIR_NAME);
|
|
130239
130316
|
if (!existsSync74(dir)) return [];
|
|
130240
130317
|
return readdirSync31(dir).filter((f3) => f3.startsWith(STATE_FILE_PREFIX) && f3.endsWith(".json")).map((f3) => f3.slice(STATE_FILE_PREFIX.length, -".json".length));
|
|
130241
130318
|
}
|
|
@@ -130267,7 +130344,7 @@ var init_state = __esm({
|
|
|
130267
130344
|
// src/commands/lambda/sam.ts
|
|
130268
130345
|
import { execFileSync as execFileSync9, spawnSync as spawnSync4 } from "child_process";
|
|
130269
130346
|
import { existsSync as existsSync75 } from "fs";
|
|
130270
|
-
import { join as
|
|
130347
|
+
import { join as join84 } from "path";
|
|
130271
130348
|
function assertSamAvailable() {
|
|
130272
130349
|
try {
|
|
130273
130350
|
execFileSync9("sam", ["--version"], { stdio: "ignore" });
|
|
@@ -130287,7 +130364,7 @@ function assertAwsCliAvailable() {
|
|
|
130287
130364
|
}
|
|
130288
130365
|
}
|
|
130289
130366
|
function locateSamTemplate(repoRoot2) {
|
|
130290
|
-
const candidate =
|
|
130367
|
+
const candidate = join84(repoRoot2, "examples", "aws-lambda", "template.yaml");
|
|
130291
130368
|
if (!existsSync75(candidate)) {
|
|
130292
130369
|
throw new Error(
|
|
130293
130370
|
`[lambda] SAM template not found at ${candidate}. If you're running from an installed package, point --sam-template at your local copy of examples/aws-lambda/template.yaml.`
|
|
@@ -130321,7 +130398,7 @@ function samDeploy(opts) {
|
|
|
130321
130398
|
if (opts.awsProfile) {
|
|
130322
130399
|
args.push("--profile", opts.awsProfile);
|
|
130323
130400
|
}
|
|
130324
|
-
const samDir =
|
|
130401
|
+
const samDir = join84(opts.repoRoot, "examples", "aws-lambda");
|
|
130325
130402
|
const result = spawnSync4("sam", args, { cwd: samDir, stdio: opts.stdio ?? "inherit" });
|
|
130326
130403
|
if (result.status !== 0) {
|
|
130327
130404
|
throw new Error(`[lambda] sam deploy exited with code ${result.status ?? "unknown"}`);
|
|
@@ -130333,7 +130410,7 @@ function samDelete(opts) {
|
|
|
130333
130410
|
if (opts.awsProfile) {
|
|
130334
130411
|
args.push("--profile", opts.awsProfile);
|
|
130335
130412
|
}
|
|
130336
|
-
const samDir =
|
|
130413
|
+
const samDir = join84(opts.repoRoot, "examples", "aws-lambda");
|
|
130337
130414
|
const result = spawnSync4("sam", args, { cwd: samDir, stdio: opts.stdio ?? "inherit" });
|
|
130338
130415
|
if (result.status !== 0) {
|
|
130339
130416
|
throw new Error(`[lambda] sam delete exited with code ${result.status ?? "unknown"}`);
|
|
@@ -130417,7 +130494,7 @@ __export(deploy_exports, {
|
|
|
130417
130494
|
});
|
|
130418
130495
|
import { spawnSync as spawnSync5 } from "child_process";
|
|
130419
130496
|
import { existsSync as existsSync77 } from "fs";
|
|
130420
|
-
import { join as
|
|
130497
|
+
import { join as join85, resolve as resolve45 } from "path";
|
|
130421
130498
|
async function runDeploy(args = {}) {
|
|
130422
130499
|
const resolved = {
|
|
130423
130500
|
stackName: args.stackName ?? DEFAULT_STACK_NAME,
|
|
@@ -130434,7 +130511,7 @@ async function runDeploy(args = {}) {
|
|
|
130434
130511
|
console.log(c2.dim("\u2192 Building handler ZIP"));
|
|
130435
130512
|
buildHandlerZip(root);
|
|
130436
130513
|
} else {
|
|
130437
|
-
const zip =
|
|
130514
|
+
const zip = join85(root, "packages", "aws-lambda", "dist", "handler.zip");
|
|
130438
130515
|
if (!existsSync77(zip)) {
|
|
130439
130516
|
throw new Error(
|
|
130440
130517
|
`--skip-build set but ${zip} does not exist. Run \`bun run --cwd packages/aws-lambda build:zip\` first or drop --skip-build.`
|
|
@@ -130478,7 +130555,7 @@ async function runDeploy(args = {}) {
|
|
|
130478
130555
|
function buildHandlerZip(root) {
|
|
130479
130556
|
const result = spawnSync5(
|
|
130480
130557
|
"bun",
|
|
130481
|
-
["run", "--cwd",
|
|
130558
|
+
["run", "--cwd", join85(root, "packages", "aws-lambda"), "build:zip"],
|
|
130482
130559
|
{ stdio: "inherit" }
|
|
130483
130560
|
);
|
|
130484
130561
|
if (result.status !== 0) {
|
|
@@ -130548,13 +130625,13 @@ var init_sites = __esm({
|
|
|
130548
130625
|
|
|
130549
130626
|
// src/commands/lambda/_dimensions.ts
|
|
130550
130627
|
import { readFileSync as readFileSync55 } from "fs";
|
|
130551
|
-
import { join as
|
|
130628
|
+
import { join as join86 } from "path";
|
|
130552
130629
|
function warnOnDimensionMismatch(args) {
|
|
130553
130630
|
if (args.quiet) return;
|
|
130554
130631
|
if (args.outputResolution) return;
|
|
130555
130632
|
let html;
|
|
130556
130633
|
try {
|
|
130557
|
-
html = readFileSync55(
|
|
130634
|
+
html = readFileSync55(join86(args.projectDir, "index.html"), "utf-8");
|
|
130558
130635
|
} catch {
|
|
130559
130636
|
return;
|
|
130560
130637
|
}
|
|
@@ -130583,7 +130660,7 @@ __export(render_exports2, {
|
|
|
130583
130660
|
runRender: () => runRender
|
|
130584
130661
|
});
|
|
130585
130662
|
import { existsSync as existsSync78 } from "fs";
|
|
130586
|
-
import { join as
|
|
130663
|
+
import { join as join87, resolve as resolvePath2 } from "path";
|
|
130587
130664
|
async function loadSDK2() {
|
|
130588
130665
|
return import("@hyperframes/aws-lambda/sdk");
|
|
130589
130666
|
}
|
|
@@ -130599,7 +130676,7 @@ async function runRender(args) {
|
|
|
130599
130676
|
});
|
|
130600
130677
|
const variables = resolveVariablesArg(args.variables, args.variablesFile);
|
|
130601
130678
|
if (variables && Object.keys(variables).length > 0) {
|
|
130602
|
-
const indexPath =
|
|
130679
|
+
const indexPath = join87(projectDir, "index.html");
|
|
130603
130680
|
if (existsSync78(indexPath)) {
|
|
130604
130681
|
const issues = validateVariablesAgainstProject(indexPath, variables);
|
|
130605
130682
|
reportVariableIssues(issues, { strict: args.strictVariables ?? false, quiet: args.json });
|
|
@@ -130724,7 +130801,7 @@ __export(render_batch_exports, {
|
|
|
130724
130801
|
runWithConcurrencyLimit: () => runWithConcurrencyLimit
|
|
130725
130802
|
});
|
|
130726
130803
|
import { existsSync as existsSync79, readFileSync as readFileSync56 } from "fs";
|
|
130727
|
-
import { join as
|
|
130804
|
+
import { join as join88, resolve as resolvePath3 } from "path";
|
|
130728
130805
|
async function loadSDK3() {
|
|
130729
130806
|
return import("@hyperframes/aws-lambda/sdk");
|
|
130730
130807
|
}
|
|
@@ -130748,7 +130825,7 @@ async function runRenderBatch(args) {
|
|
|
130748
130825
|
outputResolution: args.outputResolution,
|
|
130749
130826
|
quiet: args.json
|
|
130750
130827
|
});
|
|
130751
|
-
const schema = loadProjectVariableSchema(
|
|
130828
|
+
const schema = loadProjectVariableSchema(join88(projectDir, "index.html"));
|
|
130752
130829
|
const strict = args.strictVariables ?? false;
|
|
130753
130830
|
let hadStrictIssue = false;
|
|
130754
130831
|
for (const { entry, lineNumber } of entries2) {
|
|
@@ -132285,10 +132362,10 @@ var init_client3 = __esm({
|
|
|
132285
132362
|
});
|
|
132286
132363
|
|
|
132287
132364
|
// src/auth/pkce.ts
|
|
132288
|
-
import { createHash as
|
|
132365
|
+
import { createHash as createHash9, randomBytes as randomBytes3 } from "crypto";
|
|
132289
132366
|
function generatePkcePair() {
|
|
132290
132367
|
const verifier = base64UrlEncode(randomBytes3(VERIFIER_BYTES));
|
|
132291
|
-
const challenge = base64UrlEncode(
|
|
132368
|
+
const challenge = base64UrlEncode(createHash9("sha256").update(verifier).digest());
|
|
132292
132369
|
return { verifier, challenge, method: "S256" };
|
|
132293
132370
|
}
|
|
132294
132371
|
function generateState() {
|
|
@@ -132460,14 +132537,14 @@ var init_browser2 = __esm({
|
|
|
132460
132537
|
|
|
132461
132538
|
// src/auth/paths.ts
|
|
132462
132539
|
import { homedir as homedir12 } from "os";
|
|
132463
|
-
import { join as
|
|
132540
|
+
import { join as join89 } from "path";
|
|
132464
132541
|
function configDir() {
|
|
132465
132542
|
const override = process.env["HEYGEN_CONFIG_DIR"];
|
|
132466
132543
|
if (override && override.length > 0) return override;
|
|
132467
|
-
return
|
|
132544
|
+
return join89(homedir12(), ".heygen");
|
|
132468
132545
|
}
|
|
132469
132546
|
function credentialPath() {
|
|
132470
|
-
return
|
|
132547
|
+
return join89(configDir(), CREDENTIAL_FILENAME);
|
|
132471
132548
|
}
|
|
132472
132549
|
var CREDENTIAL_FILENAME;
|
|
132473
132550
|
var init_paths2 = __esm({
|
|
@@ -133087,7 +133164,6 @@ var init_errors2 = __esm({
|
|
|
133087
133164
|
init_format();
|
|
133088
133165
|
init_client2();
|
|
133089
133166
|
ERROR_CODE_HINTS = {
|
|
133090
|
-
hyperframes_project_invalid: "The uploaded zip didn't validate. Confirm it contains index.html at the root (or matches --composition), and that all referenced assets are present.",
|
|
133091
133167
|
hyperframes_project_too_large: "The zip exceeded the 32 MB limit. Trim large media (or pre-host them and reference by URL), then try again.",
|
|
133092
133168
|
hyperframes_render_not_found: "The render_id no longer exists \u2014 either soft-deleted or never created.",
|
|
133093
133169
|
invalid_parameter: "Check the listed parameter against `hyperframes cloud render --help` for the accepted values.",
|
|
@@ -134644,7 +134720,7 @@ __export(autoUpdate_exports, {
|
|
|
134644
134720
|
import { spawn as spawn16 } from "child_process";
|
|
134645
134721
|
import { appendFileSync as appendFileSync2, mkdirSync as mkdirSync43, openSync as openSync2 } from "fs";
|
|
134646
134722
|
import { homedir as homedir13 } from "os";
|
|
134647
|
-
import { join as
|
|
134723
|
+
import { join as join90 } from "path";
|
|
134648
134724
|
import { compareVersions as compareVersions2 } from "compare-versions";
|
|
134649
134725
|
function isAutoInstallDisabled() {
|
|
134650
134726
|
if (isDevMode()) return true;
|
|
@@ -134667,7 +134743,7 @@ function log(line) {
|
|
|
134667
134743
|
}
|
|
134668
134744
|
function launchDetachedInstall(installCommand, version) {
|
|
134669
134745
|
mkdirSync43(CONFIG_DIR2, { recursive: true, mode: 448 });
|
|
134670
|
-
const configFile =
|
|
134746
|
+
const configFile = join90(CONFIG_DIR2, "config.json");
|
|
134671
134747
|
const nodeScript = `
|
|
134672
134748
|
const { exec } = require("node:child_process");
|
|
134673
134749
|
const { readFileSync, renameSync, writeFileSync } = require("node:fs");
|
|
@@ -134786,8 +134862,8 @@ var init_autoUpdate = __esm({
|
|
|
134786
134862
|
init_config();
|
|
134787
134863
|
init_env();
|
|
134788
134864
|
init_installerDetection();
|
|
134789
|
-
CONFIG_DIR2 =
|
|
134790
|
-
LOG_FILE =
|
|
134865
|
+
CONFIG_DIR2 = join90(homedir13(), ".hyperframes");
|
|
134866
|
+
LOG_FILE = join90(CONFIG_DIR2, "auto-update.log");
|
|
134791
134867
|
PENDING_TIMEOUT_MS = 10 * 60 * 1e3;
|
|
134792
134868
|
}
|
|
134793
134869
|
});
|
|
@@ -134959,13 +135035,13 @@ var init_help = __esm({
|
|
|
134959
135035
|
// src/cli.ts
|
|
134960
135036
|
init_version();
|
|
134961
135037
|
init_dist();
|
|
134962
|
-
import { dirname as dirname34, join as
|
|
135038
|
+
import { dirname as dirname34, join as join91 } from "path";
|
|
134963
135039
|
import { fileURLToPath as fileURLToPath12 } from "url";
|
|
134964
135040
|
import { existsSync as existsSync80 } from "fs";
|
|
134965
135041
|
(() => {
|
|
134966
135042
|
const here = dirname34(fileURLToPath12(import.meta.url));
|
|
134967
|
-
const shader =
|
|
134968
|
-
const png =
|
|
135043
|
+
const shader = join91(here, "shaderTransitionWorker.js");
|
|
135044
|
+
const png = join91(here, "pngDecodeBlitWorker.js");
|
|
134969
135045
|
if (!process.env.HF_SHADER_WORKER_ENTRY && existsSync80(shader)) {
|
|
134970
135046
|
process.env.HF_SHADER_WORKER_ENTRY = shader;
|
|
134971
135047
|
}
|