hyperframes 0.6.0 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +1096 -867
- package/dist/hyperframe-runtime.js +18 -18
- package/dist/hyperframe.manifest.json +1 -1
- package/dist/hyperframe.runtime.iife.js +18 -18
- package/dist/studio/assets/hyperframes-player-CzwFysqv.js +418 -0
- package/dist/studio/assets/index-hYc4aP7M.js +117 -0
- package/dist/studio/index.html +1 -1
- package/package.json +1 -1
- package/dist/studio/assets/hyperframes-player-DOFETgjy.js +0 -418
- package/dist/studio/assets/index-DUqUmaoH.js +0 -117
package/dist/cli.js
CHANGED
|
@@ -54,7 +54,7 @@ var VERSION;
|
|
|
54
54
|
var init_version = __esm({
|
|
55
55
|
"src/version.ts"() {
|
|
56
56
|
"use strict";
|
|
57
|
-
VERSION = true ? "0.6.
|
|
57
|
+
VERSION = true ? "0.6.2" : "0.0.0-dev";
|
|
58
58
|
}
|
|
59
59
|
});
|
|
60
60
|
|
|
@@ -7357,7 +7357,7 @@ var RUNTIME_IIFE;
|
|
|
7357
7357
|
var init_runtime_inline = __esm({
|
|
7358
7358
|
"../core/src/generated/runtime-inline.ts"() {
|
|
7359
7359
|
"use strict";
|
|
7360
|
-
RUNTIME_IIFE = '"use strict";(()=>{var Bo=Object.create;var un=Object.defineProperty;var Oo=Object.getOwnPropertyDescriptor;var Po=Object.getOwnPropertyNames;var Io=Object.getPrototypeOf,Wo=Object.prototype.hasOwnProperty;var Ho=(t,e,n)=>e in t?un(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var Y=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var qo=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Po(e))!Wo.call(t,r)&&r!==n&&un(t,r,{get:()=>e[r],enumerable:!(i=Oo(e,r))||i.enumerable});return t};var Uo=(t,e,n)=>(n=t!=null?Bo(Io(t)):{},qo(e||!t||!t.__esModule?un(n,"default",{value:t,enumerable:!0}):n,t));var Se=(t,e,n)=>Ho(t,typeof e!="symbol"?e+"":e,n);var Ni=Y((Du,hn)=>{var K=String,wi=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}};hn.exports=wi();hn.exports.createColors=wi});var xn=Y(()=>{});var Bt=Y((Ru,Ti)=>{"use strict";var Ci=Ni(),Mi=xn(),ft=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=Ci.isColorSupported);let i=a=>a,r=a=>a,o=a=>a;if(e){let{bold:a,gray:f,red:p}=Ci.createColors(!0);r=g=>a(p(g)),i=g=>f(g),Mi&&(o=g=>Mi(g))}let s=n.split(/\\r?\\n/),c=Math.max(this.line-3,0),u=Math.min(this.line+2,s.length),l=String(u).length;return s.slice(c,u).map((a,f)=>{let p=c+1+f,g=" "+(" "+p).slice(-l)+" | ";if(p===this.line){if(a.length>160){let w=20,S=Math.max(0,this.column-w),U=Math.max(this.column+w,this.endColumn+w),B=a.slice(S,U),M=i(g.replace(/\\d/g," "))+a.slice(0,Math.min(this.column-1,w-1)).replace(/[^\\t]/g," ");return r(">")+i(g)+o(B)+`\n `+M+r("^")}let C=i(g.replace(/\\d/g," "))+a.slice(0,this.column-1).replace(/[^\\t]/g," ");return r(">")+i(g)+o(a)+`\n `+C+r("^")}return" "+i(g)+o(a)}).join(`\n`)}toString(){let e=this.showSourceCode();return e&&(e=`\n\n`+e+`\n`),this.name+": "+this.message+e}};Ti.exports=ft;ft.default=ft});var gn=Y((Bu,vi)=>{"use strict";var us=/(<)(\\/?style\\b)/gi,cs=/(<)(!--)/g;function He(t){return typeof t!="string"||!t.includes("<")?t:t.replace(us,"\\\\3c $2").replace(cs,"\\\\3c $2")}var ki={after:`\n`,beforeClose:`\n`,beforeComment:`\n`,beforeDecl:`\n`,beforeOpen:" ",beforeRule:`\n`,colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function ds(t){return t[0].toUpperCase()+t.slice(1)}var mt=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 c=0;c<o;c++)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 c=n[s],u=this.raw(c,"before");u&&this.builder(o?u:He(u)),this.stringify(c,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 ki[i];let s=e.root(),c=s.rawCache||(s.rawCache={});if(typeof c[i]<"u")return c[i];if(i==="before"||i==="after")return this.beforeAfter(e,i);{let u="raw"+ds(i);this[u]?r=this[u](s,e):s.walk(l=>{if(r=l.raws[n],typeof r<"u")return!1})}return typeof r>"u"&&(r=ki[i]),c[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)}};vi.exports=mt;mt.default=mt});var pt=Y((Ou,Di)=>{"use strict";var fs=gn();function yn(t,e){new fs(e).stringify(t)}Di.exports=yn;yn.default=yn});var Ot=Y((Pu,Sn)=>{"use strict";Sn.exports.isClean=Symbol("isClean");Sn.exports.my=Symbol("my")});var gt=Y((Iu,Li)=>{"use strict";var ms=Bt(),ps=gn(),hs=pt(),{isClean:ht,my:xs}=Ot();function bn(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=>bn(s,n)):(o==="object"&&r!==null&&(r=bn(r)),n[i]=r)}return n}function Ie(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 xt=class{get proxyOf(){return this}constructor(e={}){this.raws={},this[ht]=!1,this[xs]=!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=bn(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 ms(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[ht]=!0}markDirty(){if(this[ht]){this[ht]=!1;let e=this;for(;e=e.parent;)e[ht]=!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(Ie(i,this.source.start),Ie(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=Ie(r,this.source.start),s=o+e;for(let c=o;c<s;c++)r[c]===`\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:Ie(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:Ie(n,this.source.end)+1}:{column:i.column+1,line:i.line,offset:i.offset+1};if(e.word){let s=n.slice(Ie(n,this.source.start),Ie(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:Ie(n,e.start)}:e.index&&(i=this.positionInside(e.index)),e.end?r={column:e.end.column,line:e.end.line,offset:Ie(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 ps().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 c=this[s];if(Array.isArray(c))i[s]=c.map(u=>typeof u=="object"&&u.toJSON?u.toJSON(null,n):u);else if(typeof c=="object"&&c.toJSON)i[s]=c.toJSON(null,n);else if(s==="source"){if(c==null)continue;let u=n.get(c.input);u==null&&(u=o,n.set(c.input,o),o++),i[s]={end:c.end,inputId:u,start:c.start}}else i[s]=c}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=hs){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)}};Li.exports=xt;xt.default=xt});var St=Y((Wu,_i)=>{"use strict";var gs=gt(),yt=class extends gs{constructor(e){super(e),this.type="comment"}};_i.exports=yt;yt.default=yt});var At=Y((Hu,Ri)=>{"use strict";var ys=gt(),bt=class extends ys{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"}};Ri.exports=bt;bt.default=bt});var qe=Y((qu,zi)=>{"use strict";var Bi=St(),Oi=At(),Ss=gt(),{isClean:Pi,my:Ii}=Ot(),An,Wi,Hi,En;function qi(t){return t.map(e=>(e.nodes&&(e.nodes=qi(e.nodes)),delete e.source,e))}function Ui(t){if(t[Pi]=!1,t.proxyOf.nodes)for(let e of t.proxyOf.nodes)Ui(e)}var De=class t extends Ss{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 c of o)this.proxyOf.nodes.splice(i,0,c);let s;for(let c in this.indexes)s=this.indexes[c],i<=s&&(this.indexes[c]=s+o.length);return this.markDirty(),this}normalize(e,n){if(typeof e=="string")e=qi(Wi(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 Oi(e)]}else if(e.selector||e.selectors)e=[new En(e)];else if(e.name)e=[new An(e)];else if(e.text)e=[new Bi(e)];else throw new Error("Unknown node type in node creation");return e.map(r=>(r[Ii]||t.rebuild(r),r=r.proxyOf,r.parent&&r.parent.removeChild(r),r[Pi]&&Ui(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)}))}};De.registerParse=t=>{Wi=t};De.registerRule=t=>{En=t};De.registerAtRule=t=>{An=t};De.registerRoot=t=>{Hi=t};zi.exports=De;De.default=De;De.rebuild=t=>{t.type==="atrule"?Object.setPrototypeOf(t,An.prototype):t.type==="rule"?Object.setPrototypeOf(t,En.prototype):t.type==="decl"?Object.setPrototypeOf(t,Oi.prototype):t.type==="comment"?Object.setPrototypeOf(t,Bi.prototype):t.type==="root"&&Object.setPrototypeOf(t,Hi.prototype),t[Ii]=!0,t.nodes&&t.nodes.forEach(e=>{De.rebuild(e)})}});var Pt=Y((Uu,Gi)=>{"use strict";var ji=qe(),Xe=class extends ji{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)}};Gi.exports=Xe;Xe.default=Xe;ji.registerAtRule(Xe)});var It=Y((zu,Ki)=>{"use strict";var bs=qe(),Vi,$i,Je=class extends bs{constructor(e){super({type:"document",...e}),this.nodes||(this.nodes=[])}toResult(e={}){return new Vi(new $i,this,e).stringify()}};Je.registerLazyResult=t=>{Vi=t};Je.registerProcessor=t=>{$i=t};Ki.exports=Je;Je.default=Je});var Qi=Y((ju,Ji)=>{var As="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict",Es=(t,e=21)=>(n=e)=>{let i="",r=n|0;for(;r--;)i+=t[Math.random()*t.length|0];return i},Fs=(t=21)=>{let e="",n=t|0;for(;n--;)e+=As[Math.random()*64|0];return e};Ji.exports={nanoid:Fs,customAlphabet:Es}});var Wt=Y(()=>{});var Ht=Y(()=>{});var Fn=Y(()=>{});var Yi=Y(()=>{});var Nn=Y((Xu,er)=>{"use strict";var{existsSync:ws,readFileSync:Ns}=Yi(),{dirname:wn,join:Cs}=Wt(),{SourceMapConsumer:Zi,SourceMapGenerator:Xi}=Ht();function Ms(t){return Buffer?Buffer.from(t,"base64").toString():window.atob(t)}var Et=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=wn(this.mapFile)),r&&(this.text=r)}consumer(){return this.consumerCache||(this.consumerCache=new Zi(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 c=e.match(n)||e.match(i);if(c)return Ms(e.substr(c[0].length));let u=e.slice(22);throw u=u.slice(0,u.indexOf(",")),new Error("Unsupported source map encoding "+u)}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=wn(e),ws(e)))return this.mapFile=e,Ns(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 Zi)return Xi.fromSourceMap(n).toString();if(n instanceof Xi)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=Cs(wn(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)}};er.exports=Et;Et.default=Et});var Ft=Y((ec,or)=>{"use strict";var{nanoid:Ts}=Qi(),{isAbsolute:Tn,resolve:kn}=Wt(),{SourceMapConsumer:ks,SourceMapGenerator:vs}=Ht(),{fileURLToPath:tr,pathToFileURL:qt}=Fn(),nr=Bt(),Ds=Nn(),Cn=xn(),Mn=Symbol("lineToIndexCache"),Ls=!!(ks&&vs),ir=!!(kn&&Tn);function rr(t){if(t[Mn])return t[Mn];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[Mn]=n,n}var et=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&&(!ir||/^\\w+:\\/\\//.test(n.from)||Tn(n.from)?this.file=n.from:this.file=kn(n.from)),ir&&Ls){let i=new Ds(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 "+Ts(6)+">"),this.map&&(this.map.file=this.from)}error(e,n,i,r={}){let o,s,c,u,l;if(n&&typeof n=="object"){let f=n,p=i;if(typeof f.offset=="number"){u=f.offset;let g=this.fromOffset(u);n=g.line,i=g.col}else n=f.line,i=f.column,u=this.fromLineAndColumn(n,i);if(typeof p.offset=="number"){c=p.offset;let g=this.fromOffset(c);s=g.line,o=g.col}else s=p.line,o=p.column,c=this.fromLineAndColumn(p.line,p.column)}else if(i)u=this.fromLineAndColumn(n,i);else{u=n;let f=this.fromOffset(u);n=f.line,i=f.col}let a=this.origin(n,i,s,o);return a?l=new nr(e,a.endLine===void 0?a.line:{column:a.column,line:a.line},a.endLine===void 0?a.column:{column:a.endColumn,line:a.endLine},a.source,a.file,r.plugin):l=new nr(e,s===void 0?n:{column:i,line:n},s===void 0?i:{column:o,line:s},this.css,this.file,r.plugin),l.input={column:i,endColumn:o,endLine:s,endOffset:c,line:n,offset:u,source:this.css},this.file&&(qt&&(l.input.url=qt(this.file).toString()),l.input.file=this.file),l}fromLineAndColumn(e,n){return rr(this)[e-1]+n-1}fromOffset(e){let n=rr(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:kn(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 c;typeof i=="number"&&(c=o.originalPositionFor({column:r,line:i}));let u;Tn(s.source)?u=qt(s.source):u=new URL(s.source,this.map.consumer().sourceRoot||qt(this.map.mapFile));let l={column:s.column,endColumn:c&&c.column,endLine:c&&c.line,line:s.line,url:u.toString()};if(u.protocol==="file:")if(tr)l.file=tr(u);else throw new Error("file: protocol is not available in this PostCSS build");let a=o.sourceContentFor(s.source);return a&&(l.source=a),l}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}};or.exports=et;et.default=et;Cn&&Cn.registerInput&&Cn.registerInput(et)});var tt=Y((tc,ur)=>{"use strict";var sr=qe(),ar,lr,Ue=class extends sr{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 ar(new lr,this,e).stringify()}};Ue.registerLazyResult=t=>{ar=t};Ue.registerProcessor=t=>{lr=t};ur.exports=Ue;Ue.default=Ue;sr.registerRoot(Ue)});var vn=Y((nc,cr)=>{"use strict";var wt={comma(t){return wt.split(t,[","],!0)},space(t){let e=[" ",`\n`," "];return wt.split(t,e)},split(t,e,n){let i=[],r="",o=!1,s=0,c=!1,u="",l=!1;for(let a of t)l?l=!1:a==="\\\\"?l=!0:c?a===u&&(c=!1):a===\'"\'||a==="\'"?(c=!0,u=a):a==="("?s+=1:a===")"?s>0&&(s-=1):s===0&&e.includes(a)&&(o=!0),o?(r!==""&&i.push(r.trim()),r="",o=!1):r+=a;return(n||r!=="")&&i.push(r.trim()),i}};cr.exports=wt;wt.default=wt});var Ut=Y((ic,fr)=>{"use strict";var dr=qe(),_s=vn(),nt=class extends dr{get selectors(){return _s.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=[])}};fr.exports=nt;nt.default=nt;dr.registerRule(nt)});var pr=Y((rc,mr)=>{"use strict";var Rs=Pt(),Bs=St(),Os=At(),Ps=Ft(),Is=Nn(),Ws=tt(),Hs=Ut();function Nt(t,e){if(Array.isArray(t))return t.map(r=>Nt(r));let{inputs:n,...i}=t;if(n){e=[];for(let r of n){let o={...r,__proto__:Ps.prototype};o.map&&(o.map={...o.map,__proto__:Is.prototype}),e.push(o)}}if(i.nodes&&(i.nodes=t.nodes.map(r=>Nt(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 Ws(i);if(i.type==="decl")return new Os(i);if(i.type==="rule")return new Hs(i);if(i.type==="comment")return new Bs(i);if(i.type==="atrule")return new Rs(i);throw new Error("Unknown node type: "+t.type)}mr.exports=Nt;Nt.default=Nt});var Ln=Y((oc,br)=>{"use strict";var{dirname:zt,relative:xr,resolve:gr,sep:yr}=Wt(),{SourceMapConsumer:Sr,SourceMapGenerator:jt}=Ht(),{pathToFileURL:hr}=Fn(),qs=Ft(),Us=!!(Sr&&jt),zs=!!(zt&&gr&&xr&&yr),Dn=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||zt(e.file),r;this.mapOpts.sourcesContent===!1?(r=new Sr(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(),zs&&Us&&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=jt.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new jt({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 jt({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,(c,u,l)=>{if(this.css+=c,u&&l!=="end"&&(r.generated.line=e,r.generated.column=n-1,u.source&&u.source.start?(r.source=this.sourcePath(u),r.original.line=u.source.start.line,r.original.column=u.source.start.column-1,this.map.addMapping(r)):(r.source=i,r.original.line=1,r.original.column=0,this.map.addMapping(r))),s=c.match(/\\n/g),s?(e+=s.length,o=c.lastIndexOf(`\n`),n=c.length-o):n+=c.length,u&&l!=="start"){let a=u.parent||{raws:{}};(!(u.type==="decl"||u.type==="atrule"&&!u.nodes)||u!==a.last||a.raws.semicolon)&&(u.source&&u.source.end?(r.source=this.sourcePath(u),r.original.line=u.source.end.line,r.original.column=u.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?zt(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(i=zt(gr(i,this.mapOpts.annotation)));let r=xr(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 qs(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(hr){let i=hr(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;yr==="\\\\"&&(e=e.replace(/\\\\/g,"/"));let i=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,i),i}};br.exports=Dn});var Fr=Y((sc,Er)=>{"use strict";var Gt=/[\\t\\n\\f\\r "#\'()/;[\\\\\\]{}]/g,Vt=/[\\t\\n\\f\\r !"#\'():;@[\\\\\\]{}]|\\/(?=\\*)/g,js=/.[\\r\\n"\'(/\\\\]/,Ar=/[\\da-f]/i;Er.exports=function(e,n={}){let i=e.css.valueOf(),r=n.ignoreErrors,o,s,c,u,l,a,f,p,g,C,w=i.length,S=0,U=[],B=[],M=-1;function X(){return S}function D(E){throw e.error("Unclosed "+E,S)}function F(){return B.length===0&&S>=w}function x(E){if(B.length)return B.pop();if(S>=w)return;let N=E?E.ignoreUnclosed:!1;switch(o=i.charCodeAt(S),o){case 10:case 32:case 9:case 13:case 12:{u=S;do u+=1,o=i.charCodeAt(u);while(o===32||o===10||o===9||o===13||o===12);a=["space",i.slice(S,u)],S=u-1;break}case 91:case 93:case 123:case 125:case 58:case 59:case 41:{let T=String.fromCharCode(o);a=[T,T,S];break}case 40:{if(C=U.length?U.pop()[1]:"",g=i.charCodeAt(S+1),C==="url"&&g!==39&&g!==34&&g!==32&&g!==10&&g!==9&&g!==12&&g!==13){u=S;do{if(f=!1,u=i.indexOf(")",u+1),u===-1)if(r||N){u=S;break}else D("bracket");for(p=u;i.charCodeAt(p-1)===92;)p-=1,f=!f}while(f);a=["brackets",i.slice(S,u+1),S,u],S=u}else S<=M?a=["(","(",S]:(u=i.indexOf(")",S+1),s=i.slice(S,u+1),u===-1||js.test(s)?(M=u===-1?w:u,a=["(","(",S]):(a=["brackets",s,S,u],S=u));break}case 39:case 34:{l=o===39?"\'":\'"\',u=S;do{if(f=!1,u=i.indexOf(l,u+1),u===-1)if(r||N){u=S+1;break}else D("string");for(p=u;i.charCodeAt(p-1)===92;)p-=1,f=!f}while(f);a=["string",i.slice(S,u+1),S,u],S=u;break}case 64:{Gt.lastIndex=S+1,Gt.test(i),Gt.lastIndex===0?u=i.length-1:u=Gt.lastIndex-2,a=["at-word",i.slice(S,u+1),S,u],S=u;break}case 92:{for(u=S,c=!0;i.charCodeAt(u+1)===92;)u+=1,c=!c;if(o=i.charCodeAt(u+1),c&&o!==47&&o!==32&&o!==10&&o!==9&&o!==13&&o!==12&&(u+=1,Ar.test(i.charAt(u)))){for(;Ar.test(i.charAt(u+1));)u+=1;i.charCodeAt(u+1)===32&&(u+=1)}a=["word",i.slice(S,u+1),S,u],S=u;break}default:{o===47&&i.charCodeAt(S+1)===42?(u=i.indexOf("*/",S+2)+1,u===0&&(r||N?u=i.length:D("comment")),a=["comment",i.slice(S,u+1),S,u],S=u):(Vt.lastIndex=S+1,Vt.test(i),Vt.lastIndex===0?u=i.length-1:u=Vt.lastIndex-2,a=["word",i.slice(S,u+1),S,u],U.push(a),S=u);break}}return S++,a}function b(E){B.push(E)}return{back:b,endOfFile:F,nextToken:x,position:X}}});var Mr=Y((ac,Cr)=>{"use strict";var Gs=Pt(),Vs=St(),$s=At(),Ks=tt(),wr=Ut(),Js=Fr(),Nr={empty:!0,space:!0};function Qs(t){for(let e=t.length-1;e>=0;e--){let n=t[e],i=n[3]||n[2];if(i)return i}}var _n=class{constructor(e){this.input=e,this.root=new Ks,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 Gs;n.name=e[1].slice(1),n.name===""&&this.unnamedAtrule(n,e),this.init(n,e[2]);let i,r,o,s=!1,c=!1,u=[],l=[];for(;!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),i=e[0],i==="("||i==="["?l.push(i==="("?")":"]"):i==="{"&&l.length>0?l.push("}"):i===l[l.length-1]&&l.pop(),l.length===0)if(i===";"){n.source.end=this.getPosition(e[2]),n.source.end.offset++,this.semicolon=!0;break}else if(i==="{"){c=!0;break}else if(i==="}"){if(u.length>0){for(o=u.length-1,r=u[o];r&&r[0]==="space";)r=u[--o];r&&(n.source.end=this.getPosition(r[3]||r[2]),n.source.end.offset++)}this.end(e);break}else u.push(e);else u.push(e);if(this.tokenizer.endOfFile()){s=!0;break}}n.raws.between=this.spacesAndCommentsFromEnd(u),u.length?(n.raws.afterName=this.spacesAndCommentsFromStart(u),this.raw(n,"params",u),s&&(e=u[u.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=""),c&&(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,c]of e.entries()){if(r=c,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 Vs;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=Js(this.input)}decl(e,n){let i=new $s;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]||Qs(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 l=e[0][0];if(l===":"||l==="space"||l==="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=[],c;for(;e.length&&(c=e[0][0],!(c!=="space"&&c!=="comment"));)s.push(e.shift());this.precheckMissedSemicolon(e);for(let l=e.length-1;l>=0;l--){if(o=e[l],o[1].toLowerCase()==="!important"){i.important=!0;let a=this.stringFrom(e,l);a=this.spacesFromEnd(e)+a,a!==" !important"&&(i.raws.important=a);break}else if(o[1].toLowerCase()==="important"){let a=e.slice(0),f="";for(let p=l;p>0;p--){let g=a[p][0];if(f.trim().startsWith("!")&&g!=="space")break;f=a.pop()[1]+f}f.trim().startsWith("!")&&(i.important=!0,i.raws.important=f,e=a)}if(o[0]!=="space"&&o[0]!=="comment")break}e.some(l=>l[0]!=="space"&&l[0]!=="comment")&&(i.raws.between+=s.map(l=>l[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 wr;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=[],c=e[1].startsWith("--"),u=[],l=e;for(;l;){if(i=l[0],u.push(l),i==="("||i==="[")o||(o=l),s.push(i==="("?")":"]");else if(c&&r&&i==="{")o||(o=l),s.push("}");else if(s.length===0)if(i===";")if(r){this.decl(u,c);return}else break;else if(i==="{"){this.rule(u);return}else if(i==="}"){this.tokenizer.back(u.pop()),n=!0;break}else i===":"&&(r=!0);else i===s[s.length-1]&&(s.pop(),s.length===0&&(o=null));l=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(n=!0),s.length>0&&this.unclosedBracket(o),n&&r){if(!c)for(;u.length&&(l=u[u.length-1][0],!(l!=="space"&&l!=="comment"));)this.tokenizer.back(u.pop());this.decl(u,c)}else this.unknownWord(u)}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,c=i.length,u="",l=!0,a,f;for(let p=0;p<c;p+=1)o=i[p],s=o[0],s==="space"&&p===c-1&&!r?l=!1:s==="comment"?(f=i[p-1]?i[p-1][0]:"empty",a=i[p+1]?i[p+1][0]:"empty",!Nr[f]&&!Nr[a]?u.slice(-1)===","?l=!1:u+=o[1]:l=!1):u+=o[1];if(!l){let p=i.reduce((g,C)=>g+C[1],"");e.raws[n]={raw:p,value:u}}e[n]=u}rule(e){e.pop();let n=new wr;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})}};Cr.exports=_n});var Kt=Y((lc,Tr)=>{"use strict";var Ys=qe(),Zs=Ft(),Xs=Mr();function $t(t,e){let n=new Zs(t,e),i=new Xs(n);try{i.parse()}catch(r){throw r}return i.root}Tr.exports=$t;$t.default=$t;Ys.registerParse($t)});var Rn=Y((uc,kr)=>{"use strict";var Ct=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}};kr.exports=Ct;Ct.default=Ct});var Jt=Y((cc,vr)=>{"use strict";var ea=Rn(),Mt=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")}};vr.exports=Mt;Mt.default=Mt});var Bn=Y((dc,Lr)=>{"use strict";var Dr={};Lr.exports=function(e){Dr[e]||(Dr[e]=!0,typeof console<"u"&&console.warn&&console.warn(e))}});var In=Y((mc,Or)=>{"use strict";var ta=qe(),na=It(),ia=Ln(),ra=Kt(),_r=Jt(),oa=tt(),sa=pt(),{isClean:Be,my:aa}=Ot(),fc=Bn(),la={atrule:"AtRule",comment:"Comment",decl:"Declaration",document:"Document",root:"Root",rule:"Rule"},ua={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},ca={Once:!0,postcssPlugin:!0,prepare:!0},it=0;function Tt(t){return typeof t=="object"&&typeof t.then=="function"}function Br(t){let e=!1,n=la[t.type];return t.type==="decl"?e=t.prop.toLowerCase():t.type==="atrule"&&(e=t.name.toLowerCase()),e&&t.append?[n,n+"-"+e,it,n+"Exit",n+"Exit-"+e]:e?[n,n+"-"+e,n+"Exit",n+"Exit-"+e]:t.append?[n,it,n+"Exit"]:[n,n+"Exit"]}function Rr(t){let e;return t.type==="document"?e=["Document",it,"DocumentExit"]:t.type==="root"?e=["Root",it,"RootExit"]:e=Br(t),{eventIndex:0,events:e,iterator:0,node:t,visitorIndex:0,visitors:[]}}function On(t){return t[Be]=!1,t.nodes&&t.nodes.forEach(e=>On(e)),t}var Pn={},ze=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=On(n);else if(n instanceof t||n instanceof _r)r=On(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=ra;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[aa]&&ta.rebuild(r)}this.result=new _r(e,r,i),this.helpers={...Pn,postcss:Pn,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(!ua[i]&&/^[A-Z]/.test(i))throw new Error(`Unknown event ${i} in ${n.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`);if(!ca[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(Tt(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=[Rr(e)];for(;n.length>0;){let i=this.visitTick(n);if(Tt(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 Tt(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=sa;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,c=>{s+=c}),this.result.css=s,this.result}let o=new ia(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(Tt(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(Tt(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,c]=r[n.visitorIndex];n.visitorIndex+=1,n.visitorIndex===r.length&&(n.visitors=[],n.visitorIndex=0),this.result.lastPlugin=s;try{return c(i.toProxy(),this.helpers)}catch(u){throw this.handleError(u,i)}}if(n.iterator!==0){let s=n.iterator,c;for(;c=i.nodes[i.indexes[s]];)if(i.indexes[s]+=1,!c[Be]){c[Be]=!0,e.push(Rr(c));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===it){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=Br(e);for(let i of n)if(i===it)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()}};ze.registerPostcss=t=>{Pn=t};Or.exports=ze;ze.default=ze;oa.registerLazyResult(ze);na.registerLazyResult(ze)});var Ir=Y((hc,Pr)=>{"use strict";var da=Ln(),fa=Kt(),ma=Jt(),pa=pt(),pc=Bn(),kt=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=fa;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=pa;this.result=new ma(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 da(r,void 0,this._opts,n);if(s.isMap()){let[c,u]=s.generate();c&&(this.result.css=c),u&&(this.result.map=u)}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[]}};Pr.exports=kt;kt.default=kt});var Hr=Y((xc,Wr)=>{"use strict";var ha=It(),xa=In(),ga=Ir(),ya=tt(),Qe=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 ga(this,e,n):new xa(this,e,n)}use(e){return this.plugins=this.plugins.concat(this.normalize([e])),this}};Wr.exports=Qe;Qe.default=Qe;ya.registerProcessor(Qe);ha.registerProcessor(Qe)});var Kr=Y((gc,$r)=>{"use strict";var qr=Pt(),Ur=St(),Sa=qe(),ba=Bt(),zr=At(),jr=It(),Aa=pr(),Ea=Ft(),Fa=In(),wa=vn(),Na=gt(),Ca=Kt(),Wn=Hr(),Ma=Jt(),Gr=tt(),Vr=Ut(),Ta=pt(),ka=Rn();function re(...t){return t.length===1&&Array.isArray(t[0])&&(t=t[0]),new Wn(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 c=n(...s);return c.postcssPlugin=e,c.postcssVersion=new Wn().version,c}let o;return Object.defineProperty(r,"postcss",{get(){return o||(o=r()),o}}),r.process=function(s,c,u){return re([r(u)]).process(s,c)},r};re.stringify=Ta;re.parse=Ca;re.fromJSON=Aa;re.list=wa;re.comment=t=>new Ur(t);re.atRule=t=>new qr(t);re.decl=t=>new zr(t);re.rule=t=>new Vr(t);re.root=t=>new Gr(t);re.document=t=>new jr(t);re.CssSyntaxError=ba;re.Declaration=zr;re.Container=Sa;re.Processor=Wn;re.Document=jr;re.Comment=Ur;re.Warning=ka;re.AtRule=qr;re.Result=Ma;re.Input=Ea;re.Rule=Vr;re.Root=Gr;re.Node=Na;Fa.registerPostcss(re);$r.exports=re;re.default=re});function R(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 Ee(t){try{window.parent.postMessage(t,"*")}catch(e){R("bridge.postMessage",e)}}function ri(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==="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&&zo(o,s)}};return window.addEventListener("message",e),e}function zo(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){R("bridge.flashElements.querySelector",i)}}var cn=null;function oi(t){cn=t}function lt(t,e){if(cn)try{cn({source:"hf-preview",type:"analytics",event:t,properties:e??{}})}catch(n){R("runtime.analytics.site1",n)}}function si(t){let e=[],n=c=>{if(typeof c.getAnimations!="function")return[];try{return c.getAnimations()}catch{return[]}},i=(c,u)=>{for(let l of c){try{l.currentTime=u}catch(a){R("runtime.adapters.css.site1",a)}try{l.pause()}catch(a){R("runtime.adapters.css.site2",a)}}},r=c=>{for(let u of c)try{u.play()}catch(l){R("runtime.adapters.css.site3",l)}},o=c=>{for(let u of c)try{u.pause()}catch(l){R("runtime.adapters.css.site4",l)}},s=c=>{c.baseDelay?c.el.style.animationDelay=c.baseDelay:c.el.style.removeProperty("animation-delay"),c.basePlayState?c.el.style.animationPlayState=c.basePlayState:c.el.style.removeProperty("animation-play-state")};return{name:"css",discover:()=>{e=[];let c=document.querySelectorAll("*");for(let u of c){if(!(u instanceof HTMLElement))continue;let l=window.getComputedStyle(u);!l.animationName||l.animationName==="none"||e.push({el:u,baseDelay:u.style.animationDelay||"",basePlayState:u.style.animationPlayState||""})}},seek:c=>{let u=Number(c.time)||0;for(let l of e){if(!l.el.isConnected)continue;let a=t?.resolveStartSeconds?t.resolveStartSeconds(l.el):Number.parseFloat(l.el.getAttribute("data-start")??"0")||0,f=Math.max(0,u-a)*1e3,p=n(l.el);if(p.length>0){i(p,f);continue}l.el.style.animationPlayState="paused",l.el.style.animationDelay=`-${(f/1e3).toFixed(3)}s`}},pause:()=>{for(let c of e){if(!c.el.isConnected)continue;let u=n(c.el);u.length>0&&o(u),s(c)}},play:()=>{for(let c of e)c.el.isConnected&&(s(c),r(n(c.el)))},revert:()=>{e=[]}}}function ai(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 li(){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){R("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){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){R("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){R("runtime.adapters.animejs.site4",n)}},revert:()=>{}}}function di(){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){R("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(ui(i))i.goToAndStop(e*1e3,!1);else if(ci(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){R("runtime.adapters.lottie.site2",r)}},pause:()=>{let t=window.__hfLottie;if(!(!t||t.length===0))for(let e of t)try{(ui(e)||ci(e))&&e.pause()}catch(n){R("runtime.adapters.lottie.site3",n)}},revert:()=>{}}}function ui(t){return typeof t=="object"&&t!==null&&typeof t.goToAndStop=="function"}function ci(t){return typeof t=="object"&&t!==null&&typeof t.pause=="function"&&("totalFrames"in t||"duration"in t)}function fi(){let t=null,e=0;return{name:"three",discover:()=>{},seek:n=>{t=Math.max(0,Number(n.time)||0),e=t,window.__hfThreeTime=t;try{window.dispatchEvent(new CustomEvent("hf-seek",{detail:{time:t}}))}catch(i){R("runtime.adapters.three.site1",i)}},pause:()=>{t==null&&(t=Math.max(0,e))},play:()=>{t=null},revert:()=>{t=null,e=0}}}function mi(){return{name:"waapi",discover:()=>{},seek:t=>{if(!document.getAnimations)return;let e=Math.max(0,(Number(t.time)||0)*1e3);for(let n of document.getAnimations()){try{n.currentTime=e}catch(i){R("runtime.adapters.waapi.site1",i)}try{n.pause()}catch(i){R("runtime.adapters.waapi.site2",i)}}},pause:()=>{if(document.getAnimations)for(let t of document.getAnimations())try{t.pause()}catch(e){R("runtime.adapters.waapi.site3",e)}}}}function pi(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 c=t?.resolveStartSeconds?t.resolveStartSeconds(s):Number.parseFloat(s.dataset.start??"0");if(!Number.isFinite(c))continue;let u=Number.parseFloat(s.dataset.playbackStart??s.dataset.mediaStart??"0")||0,l=s.defaultPlaybackRate,a=Number.isFinite(l)&&l>0?Math.max(.1,Math.min(5,l)):1,f=s.loop,p=Number.isFinite(s.duration)&&s.duration>0?s.duration:null,g=t?.resolveDurationSeconds?.(s)??Number.parseFloat(s.dataset.duration??"");(!Number.isFinite(g)||g<=0)&&p!=null&&(g=Math.max(0,(p-u)/a));let C=Number.isFinite(g)&&g>0?c+g:Number.POSITIVE_INFINITY,w=Number.parseFloat(s.dataset.volume??""),S={el:s,start:c,mediaStart:u,duration:Number.isFinite(g)&&g>0?g:Number.POSITIVE_INFINITY,end:C,volume:Number.isFinite(w)?w:null,playbackRate:a,loop:f,sourceDuration:p};i.push(S),s.tagName==="VIDEO"&&r.push(S),Number.isFinite(C)&&(o=Math.max(o,C))}return{timedMediaEls:n,mediaClips:i,videoClips:r,maxMediaEnd:o}}var dn=new WeakMap,ut=new WeakMap,fn=new WeakSet,Ye=new WeakSet;function jo(t){if(Ye.has(t))return;Ye.add(t);let e=()=>Ye.delete(t);t.addEventListener("playing",e,{once:!0}),t.addEventListener("pause",e,{once:!0}),t.addEventListener("error",e,{once:!0})}function hi(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 D=n.sourceDuration-n.mediaStart;D>0&&r>=n.sourceDuration&&(r=n.mediaStart+(r-n.mediaStart)%D)}let s=t.userVolume??1;i.volume=(n.volume??1)*s,e&&(i.muted=!0),i.preload!=="auto"&&(i.preload="auto");try{i.playbackRate=n.playbackRate*t.playbackRate}catch(D){R("runtime.media.site1",D)}let c=.04,u=2,l=i.currentTime||0,a=Math.abs(l-r),f=r-l,p=dn.get(i);dn.set(i,f);let g=p===void 0,C=!g&&Math.abs(f-p)>.5,w=a>3,S=a>.5&&(g||C||w),U=i.tagName==="VIDEO"&&!i.paused,B=p!==void 0&&Math.abs(f-p)<.004,M=!1;if(!U&&!S&&!g&&B&&a>c){let D=(ut.get(i)??0)+1;ut.set(i,D),D>=u&&(M=!0,ut.set(i,0))}else a<=c&&ut.set(i,0);let X=!U&&t.forceSync&&a>.02;if(S||M||X){try{i.currentTime=r}catch(D){R("runtime.media.site2",D)}if(Math.abs(i.currentTime-r)>.5&&!fn.has(i)){fn.add(i),i.load();try{i.currentTime=r}catch(D){R("runtime.media.site3",D)}}Ye.delete(i)}t.playing&&i.paused&&!Ye.has(i)?(jo(i),i.play().catch(D=>{Ye.delete(i),(D&&typeof D=="object"&&"name"in D?String(D.name??""):"")==="NotAllowedError"&&t.onAutoplayBlocked?.()})):!t.playing&&!i.paused&&i.pause();continue}dn.delete(i),ut.delete(i),fn.delete(i),i.paused||i.pause()}}var Go=["[data-hyperframes-ignore]","[data-hyperframes-picker-ignore]","[data-hf-ignore]","[data-no-inspect]","[data-no-pick]","[data-hyper-shader-loading]"].join(","),Vo=["[data-hyperframes-picker-block]","[data-hyper-shader-loading]"].join(",");function xi(t){let e=!1,n=null,i=null,r=null,o=null;function s(x,b){try{window.dispatchEvent(new CustomEvent(x,{detail:b}))}catch(E){R("runtime.picker.site1",E)}}function c(x){r=x,s("hyperframe:picker:hovered",{elementInfo:r,isPickMode:e,timestamp:Date.now()})}function u(x){o=x,s("hyperframe:picker:selected",{elementInfo:o,isPickMode:e,timestamp:Date.now()})}function l(x){let b=x.ownerDocument.defaultView;if(!b)return!1;let E=x;for(;E&&E!==document.body&&E!==document.documentElement;){let N=b.getComputedStyle(E);if(N.display==="none"||N.visibility==="hidden"||N.pointerEvents==="none")return!0;let T=Number.parseFloat(N.opacity);if(Number.isFinite(T)&&T<=.01)return!0;E=E.parentElement}return!1}function a(x){if(!x||x===document.body||x===document.documentElement)return!1;let b=x.tagName.toLowerCase();return!(b==="script"||b==="style"||b==="link"||b==="meta"||x.classList.contains("__hf-pick-highlight")||x.closest(Go)||l(x))}function f(x){return!!x?.closest(Vo)}function p(x){let b=x;if(b.id)return`#${b.id}`;let E=x.getAttribute("data-composition-id");if(E)return`[data-composition-id="${E}"]`;let N=x.getAttribute("data-composition-src");if(N)return`[data-composition-src="${N}"]`;let T=x.getAttribute("data-track-index");if(T)return`[data-track-index="${T}"]`;let _=x.tagName.toLowerCase(),P=x.parentElement;if(!P)return _;let J=P.querySelectorAll(`:scope > ${_}`);if(J.length===1)return _;for(let L=0;L<J.length;L+=1)if(J[L]===x)return`${_}:nth-of-type(${L+1})`;return _}function g(x){let b=x.tagName.toLowerCase(),E=(x.textContent??"").trim().replace(/\\s+/g," "),N=(T,_)=>T.length>_?`${T.slice(0,_-1)}\\u2026`:T;return b==="h1"||b==="h2"||b==="h3"?"Heading":b==="p"||b==="span"||b==="div"?E.length>0?N(E,56):"Text":b==="img"?"Image":b==="video"?"Video":b==="audio"?"Audio":b==="svg"?"Shape":x.getAttribute("data-composition-src")?"Composition":b==="section"?"Section":`${b.charAt(0).toUpperCase()}${b.slice(1)}`}function C(x,b,E){let N=typeof E=="number"&&E>0?E:8,T=[];if(document.elementsFromPoint)T=document.elementsFromPoint(x,b);else if(document.elementFromPoint){let J=document.elementFromPoint(x,b);T=J?[J]:[]}if(f(T[0]??null))return[];let _={},P=[];for(let J=0;J<T.length;J+=1){let L=T[J];if(!a(L))continue;let ce=`${L.tagName}::${L.id||""}::${J}`;if(!_[ce]&&(_[ce]=!0,P.push(L),P.length>=N))break}return P}function w(x){let b=x.getBoundingClientRect(),E={};for(let T=0;T<x.attributes.length;T+=1){let _=x.attributes[T];_.name.startsWith("data-")&&(E[_.name]=_.value)}return{id:x.id||null,tagName:x.tagName.toLowerCase(),selector:p(x),label:g(x),boundingBox:{x:b.left,y:b.top,width:b.width,height:b.height},textContent:x.textContent?x.textContent.trim().slice(0,200):null,src:x.getAttribute("src")||x.getAttribute("data-composition-src")||null,dataAttributes:E}}function S(x,b,E){return C(x,b,E).map(w)}function U(x){if(!e)return;let E=C(x.clientX,x.clientY,1)[0]??(x.target instanceof Element?x.target:null);if(!a(E)||n===E)return;n&&n.classList.remove("__hf-pick-highlight"),n=E,E.classList.add("__hf-pick-highlight");let N=w(E);c(N),t.postMessage({source:"hf-preview",type:"element-hovered",elementInfo:N})}function B(x){if(!e)return;x.preventDefault(),x.stopPropagation(),x.stopImmediatePropagation();let b=S(x.clientX,x.clientY,8);b.length!==0&&(c(b[0]??null),t.postMessage({source:"hf-preview",type:"element-pick-candidates",candidates:b,selectedIndex:0,point:{x:x.clientX,y:x.clientY}}))}function M(x){x.key==="Escape"&&(D(),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",U,!0),document.addEventListener("click",B,!0),document.addEventListener("keydown",M,!0),s("hyperframe:picker:mode",{isPickMode:!0,timestamp:Date.now()}))}function D(){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",U,!0),document.removeEventListener("click",B,!0),document.removeEventListener("keydown",M,!0),s("hyperframe:picker:mode",{isPickMode:!1,timestamp:Date.now()}))}function F(){window.__HF_PICKER_API={enable:X,disable:D,isActive:()=>e,getHovered:()=>r,getSelected:()=>o,getCandidatesAtPoint:(x,b,E)=>Number.isFinite(x)&&Number.isFinite(b)?S(x,b,E):[],pickAtPoint:(x,b,E)=>{if(!Number.isFinite(x)||!Number.isFinite(b))return null;let N=S(x,b,8);if(!N.length)return null;let T=Math.max(0,Math.min(N.length-1,Number(E??0))),_=N[T]??null;return _?(u(_),t.postMessage({source:"hf-preview",type:"element-picked",elementInfo:_}),D(),_):null},pickManyAtPoint:(x,b,E)=>{if(!Number.isFinite(x)||!Number.isFinite(b))return[];let N=S(x,b,8);if(!N.length)return[];let T=[],_=Array.isArray(E)?E:[0];for(let P of _){let J=Math.max(0,Math.min(N.length-1,Math.floor(Number(P)))),L=N[J];if(!L)continue;T.some(ge=>ge.selector===L.selector&&ge.tagName===L.tagName)||T.push(L)}return T.length?(u(T[0]??null),t.postMessage({source:"hf-preview",type:"element-picked-many",elementInfos:T}),D(),T):[]}},s("hyperframe:picker:api-ready",{hasApi:!0,timestamp:Date.now()})}return{enablePickMode:X,disablePickMode:D,installPickerApi:F}}function Ze(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 Rt(t,e,n){if(t){for(let i of Object.values(t))if(!(!i||i===e))try{n(i)}catch(r){R("runtime.player.site1",r)}}}function gi(t,e,n){let i=Ze(e,n);return t.pause(),typeof t.totalTime=="function"?t.totalTime(i,!1):t.seek(i,!1),i}function $o(t,e,n,i){let r=[];Rt(t,e,o=>{o.play(),r.push(o)});try{return gi(e,n,i)}finally{for(let o of r)try{o.pause()}catch(s){R("runtime.player.site2",s)}}}function Ko(t,e){Rt(t,e,n=>{n.play()})}function yi(t){return{_timeline:null,play:()=>{let e=t.getTimeline();if(!e||t.getIsPlaying())return;let n=Math.max(0,Number(t.getSafeDuration?.()??e.duration()??0)||0);n>0&&Math.max(0,Number(e.time())||0)>=n&&(e.pause(),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()),e.play(),Rt(t.getTimelineRegistry?.(),e,i=>{typeof i.timeScale=="function"&&i.timeScale(t.getPlaybackRate()),i.play()}),t.onDeterministicPlay(),t.setIsPlaying(!0),t.onShowNativeVideos(),t.onStatePost(!0)},pause:()=>{let e=t.getTimeline();if(!e)return;e.pause(),Rt(t.getTimelineRegistry?.(),e,i=>{i.pause()});let n=Math.max(0,Number(e.time())||0);t.onDeterministicSeek(n),t.onDeterministicPause(),t.setIsPlaying(!1),t.onSyncMedia(n,!1),t.onRenderFrameSeek(n),t.onStatePost(!0)},seek:e=>{let n=t.getTimeline();if(!n)return;let i=Math.max(0,Number(e)||0),r=$o(t.getTimelineRegistry?.(),n,i,t.getCanonicalFps());t.onDeterministicSeek(r),t.setIsPlaying(!1),t.onSyncMedia(r,!1),t.onRenderFrameSeek(r),t.onStatePost(!0)},renderSeek:e=>{let n=t.getTimeline(),i=t.getCanonicalFps(),r=n?(Ko(t.getTimelineRegistry?.(),n),gi(n,e,i)):Ze(Math.max(0,Number(e)||0),i);t.onDeterministicSeek(r),t.setIsPlaying(!1),t.onSyncMedia(r,!1),t.onRenderFrameSeek(r),t.onStatePost(!0)},getTime:()=>Number(t.getTimeline()?.time()??0),getDuration:()=>Number(t.getTimeline()?.duration()??0),isPlaying:()=>t.getIsPlaying(),setPlaybackRate:e=>t.setPlaybackRate(e),getPlaybackRate:()=>t.getPlaybackRate()}}function Si(){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,maxTimelineDurationSeconds:1800,nativeVisualWatchdogTick:0,transportClock:null,transportRafId:null}}var Jo="data-hf-authored-duration",Qo="data-hf-authored-end";function $e(t){if(t==null||t==="")return null;let e=Number(t);return Number.isFinite(e)?e:null}function Yo(t){return $e(t.getAttribute("data-duration"))}function Zo(t){return $e(t.getAttribute("data-end"))}function Xo(t){return $e(t.getAttribute(Jo))}function es(t){return $e(t.getAttribute(Qo))}function ts(t){let e=(t??"").trim();if(!e)return null;let n=$e(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",c=Number.parseFloat(s),u=Number.isFinite(c)?Math.max(0,c):0,l=o==="-"?-u:u;return{kind:"reference",refId:r,offset:l}}function Ke(t){let e=t.timelineRegistry??{},n=t.includeAuthoredTimingAttrs??!1,i=new WeakMap,r=new WeakMap,o=new Set,s=a=>{let f=document.getElementById(a);return f||(document.querySelector(`[data-composition-id="${CSS.escape(a)}"]`)??null)},c=a=>{let f=r.get(a);if(f!==void 0)return f;let p=null,g=Yo(a)??(n?Xo(a):null);if(g!=null&&g>0&&(p=g),p==null||p<=0){let C=Zo(a)??(n?es(a):null);if(C!=null){let w=l(a,0),S=C-w;Number.isFinite(S)&&S>0&&(p=S)}}if((p==null||p<=0)&&a instanceof HTMLMediaElement){let C=$e(a.getAttribute("data-playback-start"))??$e(a.getAttribute("data-media-start"))??0;Number.isFinite(a.duration)&&a.duration>C&&(p=a.duration-C)}if(p==null||p<=0){let C=a.getAttribute("data-composition-id");if(C){let w=e[C]??null;if(w&&typeof w.duration=="function")try{let S=Number(w.duration());Number.isFinite(S)&&S>0&&(p=S)}catch(S){R("runtime.startResolver.site1",S)}}}return p!=null&&Number.isFinite(p)&&p>0?(r.set(a,p),p):(r.set(a,null),null)},u=(a,f)=>{if(a.hasAttribute("data-composition-id")){let g=a.parentElement?.closest("[data-composition-id]");return g?l(g,f):0}let p=a.closest("[data-composition-id]");return p?l(p,f):0},l=(a,f)=>{let p=i.get(a);if(p!==void 0)return p??f;if(o.has(a))return f;o.add(a);try{let g=ts(a.getAttribute("data-start"));if(!g){if(a.hasAttribute("data-composition-id")){let B=a.parentElement;if(B&&(B.hasAttribute("data-composition-src")||B.hasAttribute("data-composition-id"))){let M=l(B,f);return i.set(a,M),M}}return i.set(a,f),f}if(g.kind==="absolute"){let B=Math.max(0,g.value),M=Math.max(0,u(a,f)+B);return i.set(a,M),M}let C=s(g.refId);if(!C)return i.set(a,f),f;let w=l(C,0),S=c(C);if(S==null||S<=0){let B=Math.max(0,w+g.offset);return i.set(a,B),B}let U=Math.max(0,w+S+g.offset);return i.set(a,U),U}finally{o.delete(a)}};return{resolveStartForElement:(a,f=0)=>l(a,Math.max(0,f)),resolveDurationForElement:a=>c(a)}}var ns="data-hf-authored-duration",is="data-hf-authored-end";function Fe(t){if(t==null||t==="")return null;let e=Number(t);return Number.isFinite(e)?e:null}function mn(t){return Fe(t.getAttribute("data-duration"))??Fe(t.getAttribute(ns))}function bi(t){return Fe(t.getAttribute("data-end"))??Fe(t.getAttribute(is))}function pn(...t){let e=t.filter(n=>Number.isFinite(n??null));return e.length===0?null:Math.max(...e)}var Ai={composition:0,video:1,image:2,element:3,audio:4};function rs(t){if(t.length===0)return;let e=new Map;for(let s of t){let c=e.get(s.track)??new Set;c.add(s.kind),e.set(s.track,c)}if(!Array.from(e.values()).some(s=>s.size>1))return;let i=0,r=new Map,o=[...e.keys()].sort((s,c)=>s-c);for(let s of o){let c=e.get(s);if(c.size===1)r.set(`${s}:${[...c][0]}`,i++);else{let u=[...c].sort((l,a)=>(Ai[l]??99)-(Ai[a]??99));for(let l of u)r.set(`${s}:${l}`,i++)}}for(let s of t){let c=`${s.track}:${s.kind}`,u=r.get(c);u!=null&&(s.track=u)}}function dt(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 Ei(t){let e=t.getAttribute("src")??t.getAttribute("data-src");if(e)return dt(e);let n=t.getAttribute("data-composition-src");if(n)return dt(n);let i=t.querySelector("img[src], video[src], audio[src], source[src]");return i?dt(i.getAttribute("src")):null}function os(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 ss(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 as(t){let e=t.textContent?.replace(/\\s+/g," ").trim();return e?e.length>32?`${e.slice(0,31)}...`:e:null}function ct(t){let e=t.replace(/\\.[^.]+$/i,"").replace(/[-_]+/g," ").replace(/\\s+/g," ").trim();return e?e.replace(/\\b\\w/g,n=>n.toUpperCase()):t}function ls(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 ct(r);let o=t.id;if(o)return ct(o);let s=os(t);if(s)return ct(s);let c=ss(Ei(t));if(c)return ct(c);let u=as(t);return u||`${ct(e)} ${n+1}`}function Fi(t){let n=window.__timelines??{},i=Ke({timelineRegistry:n,includeAuthoredTimingAttrs:!0}),r=W=>{if(!W)return null;let k=n[W]??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=W=>{let k=Fe(W.getAttribute("data-duration"));if(k!=null&&k>0)return k;let O=Fe(W.getAttribute("data-playback-start"))??Fe(W.getAttribute("data-media-start"))??0;return Number.isFinite(W.duration)&&W.duration>O?Math.max(0,W.duration-O):null},s=()=>{let W=Array.from(document.querySelectorAll("video[data-start], audio[data-start]"));if(W.length===0)return null;let k=0;for(let O of W){let ie=i.resolveStartForElement(O,0);if(!Number.isFinite(ie))continue;let ee=o(O);ee==null||ee<=0||(k=Math.max(k,Math.max(0,ie)+ee))}return k>0?k:null},c=W=>{let k=W.trim().toLowerCase();return!(!k||k==="main"||k.includes("caption")||k.includes("ambient"))},u=(W,k)=>{let O=[],ie=null,ee=null,z=null,q=W.parentElement;for(;q;){let V=q.getAttribute("data-composition-id");V&&(O.push(V),!z&&q!==k&&(z=V),ie==null&&(ie=i.resolveStartForElement(q,0)),ee==null&&(ee=Fe(q.getAttribute("data-duration"))??r(V)??null)),q=q.parentElement}return{parentCompositionId:z,compositionAncestors:O.reverse(),inheritedStart:ie,inheritedDuration:ee}},l=document.querySelector("[data-composition-id]"),a=Array.from(document.querySelectorAll("[data-composition-id]")),f=l?.getAttribute("data-composition-id")??null,p=l?i.resolveStartForElement(l,0):0,g=s(),C=g!=null?Math.max(0,g-Math.max(0,p)):null,w=r(f),S=mn(l??document.body),U=pn(...a.filter(W=>W!==l).map(W=>{let k=i.resolveStartForElement(W,0),O=i.resolveDurationForElement(W)??r(W.getAttribute("data-composition-id"))??null;return!Number.isFinite(k)||O==null||O<=0?null:Math.max(0,k)+O})),B=U!=null?Math.max(0,U-Math.max(0,p)):null,M=typeof w=="number"&&Number.isFinite(w)&&w>0?w:null,X=typeof S=="number"&&Number.isFinite(S)&&S>0?S:null,D=typeof C=="number"&&Number.isFinite(C)&&C>0?C:null,F=typeof B=="number"&&Number.isFinite(B)&&B>0?B:null,x=pn(D,F),b=M!=null&&x!=null&&M>x+1,E=X??(b?x:pn(M,D,F)),N=E!=null?Math.min(E,t.maxTimelineDurationSeconds):null,_=(N!=null?p+N:null)??(typeof g=="number"&&Number.isFinite(g)&&g>0?g:null),P=(W,k)=>!Number.isFinite(k)||k<=0?0:_==null||!Number.isFinite(_)?k:!Number.isFinite(W)||W>=_?0:Math.max(0,Math.min(k,_-W)),J=[],L=[],ce=Array.from(document.querySelectorAll("[data-start], [data-track-index], [data-composition-id], video, audio, img")),ge=0;for(let W=0;W<ce.length;W+=1){let k=ce[W];if(k===l||["SCRIPT","STYLE","LINK","META","TEMPLATE","NOSCRIPT"].includes(k.tagName))continue;let O=u(k,l),ie=i.resolveStartForElement(k,O.inheritedStart??0),ee=k.getAttribute("data-composition-id"),z=mn(k);if((z==null||z<=0)&&ee&&ee!==f&&(z=r(ee)),(z==null||z<=0)&&k instanceof HTMLMediaElement){let be=Fe(k.getAttribute("data-playback-start"))??Fe(k.getAttribute("data-media-start"))??0;Number.isFinite(k.duration)&&k.duration>0&&(z=Math.max(0,k.duration-be))}if(z==null||z<=0){let be=O.inheritedDuration;if(be!=null&&be>0){let me=(O.inheritedStart??0)+be;z=Math.max(0,me-ie)}}if(z==null||z<=0||(z=P(ie,z),z<=0))continue;let q=ie+z;ge=Math.max(ge,q);let V=k.tagName.toLowerCase(),_e=ee&&ee!==f?"composition":V==="video"?"video":V==="audio"?"audio":V==="img"?"image":"element";J.push({id:k.id||ee||null,label:ls(k,_e,J.length),start:ie,duration:z,track:Number.parseInt(k.getAttribute("data-track-index")??k.getAttribute("data-track")??String(W),10)||0,kind:_e,tagName:V,compositionId:k.getAttribute("data-composition-id"),compositionAncestors:O.compositionAncestors,parentCompositionId:O.parentCompositionId,nodePath:null,compositionSrc:dt(k.getAttribute("data-composition-src")),assetUrl:Ei(k),timelineRole:k.getAttribute("data-timeline-role"),timelineLabel:k.getAttribute("data-timeline-label"),timelineGroup:k.getAttribute("data-timeline-group"),timelinePriority:Fe(k.getAttribute("data-timeline-priority"))})}let $=new Set(J.map(W=>W.id)),G=l?.getAttribute("data-composition-id")??null,I=G?n[G]??null:null;if(I&&l){let W=I;if(typeof W.getChildren=="function")try{let k=W.getChildren(!0,!0,!1)??[],O=new Map;for(let z of l.children){let q=z;if(!q.id)continue;let V=q.tagName.toLowerCase();V==="script"||V==="style"||V==="link"||O.set(q,{id:q.id,start:1/0,end:-1/0})}let ie=z=>{let q=z;for(;q;){if(O.has(q))return q;if(q===l)return null;q=q.parentElement}return null};for(let z of k){if(typeof z.targets!="function"||typeof z.startTime!="function"||typeof z.duration!="function")continue;let q=z.startTime(),V=z.parent;for(;V&&V!==I&&typeof V.startTime=="function";)q+=V.startTime(),V=V.parent;let _e=q+z.duration();if(!(!Number.isFinite(q)||!Number.isFinite(_e)))for(let be of z.targets()){if(!(be instanceof Element))continue;let ke=ie(be);if(!ke)continue;let me=O.get(ke);me&&(me.start=Math.min(me.start,q),me.end=Math.max(me.end,_e))}}let ee=J.length>0?Math.max(...J.map(z=>z.track))+1:0;for(let[z,q]of O){if(q.start===1/0||q.end===-1/0)continue;let V=z;if($.has(V.id))continue;let _e=Math.max(0,q.end-q.start);if(_e<=0)continue;let be=P(q.start,_e);be<=0||(ge=Math.max(ge,q.start+be),J.push({id:V.id,label:V.getAttribute("data-timeline-label")??V.getAttribute("data-label")??V.getAttribute("aria-label")??V.id,start:q.start,duration:be,track:Number.parseInt(V.getAttribute("data-track-index")??V.getAttribute("data-track")??"",10)||ee,kind:"element",tagName:V.tagName.toLowerCase(),compositionId:V.getAttribute("data-composition-id"),compositionAncestors:G?[G]:[],parentCompositionId:G,nodePath:null,compositionSrc:null,assetUrl:null,timelineRole:V.getAttribute("data-timeline-role"),timelineLabel:V.getAttribute("data-timeline-label"),timelineGroup:V.getAttribute("data-timeline-group"),timelinePriority:Fe(V.getAttribute("data-timeline-priority"))}),$.add(V.id))}}catch(k){R("runtime.timeline.site1",k)}}if(l&&N!=null&&N>0){let W=J.length>0?Math.max(...J.map(k=>k.track))+1:0;for(let k of l.children){let O=k;if(!O.id||$.has(O.id))continue;let ie=O.getAttribute("data-timeline-role");if(ie!=="overlay"&&ie!=="persistent-overlay")continue;let ee=O.tagName.toLowerCase();if(ee==="script"||ee==="style"||ee==="link"||ee==="meta"||window.getComputedStyle(O).display==="none")continue;let q=P(0,N);q<=0||(ge=Math.max(ge,q),J.push({id:O.id,label:O.getAttribute("data-timeline-label")??O.getAttribute("data-label")??O.getAttribute("aria-label")??O.id,start:0,duration:q,track:Number.parseInt(O.getAttribute("data-track-index")??O.getAttribute("data-track")??"",10)||W,kind:"element",tagName:ee,compositionId:O.getAttribute("data-composition-id"),compositionAncestors:G?[G]:[],parentCompositionId:G,nodePath:null,compositionSrc:null,assetUrl:null,timelineRole:ie,timelineLabel:O.getAttribute("data-timeline-label"),timelineGroup:O.getAttribute("data-timeline-group"),timelinePriority:Fe(O.getAttribute("data-timeline-priority"))}),$.add(O.id))}}rs(J);for(let W of a){if(W===l)continue;let k=W.getAttribute("data-composition-id");if(!k||!c(k))continue;let O=i.resolveStartForElement(W,0),ie=mn(W);if((ie==null||ie<=0)&&bi(W)!=null){let V=bi(W);ie=Math.max(0,V-O)}let ee=r(k),z=ie&&ie>0?ie:ee;if(z==null||z<=0)continue;let q=P(O,z);q<=0||L.push({id:k,label:W.getAttribute("data-label")??k,start:O,duration:q,thumbnailUrl:dt(W.getAttribute("data-thumbnail-url")),avatarName:null})}let Z=Math.max(1,Math.min(Math.max(ge||1,N??0),t.maxTimelineDurationSeconds));return{source:"hf-preview",type:"timeline",durationInFrames:b&&X==null?Number.POSITIVE_INFINITY:Math.max(1,Math.round(Z*Math.max(1,t.canonicalFps))),clips:J,scenes:L,compositionWidth:Fe(l?.getAttribute("data-width"))??1920,compositionHeight:Fe(l?.getAttribute("data-height"))??1080}}var ue=Uo(Kr(),1),Jr=ue.default,yc=ue.default.stringify,Sc=ue.default.fromJSON,bc=ue.default.plugin,Ac=ue.default.parse,Ec=ue.default.list,Fc=ue.default.document,wc=ue.default.comment,Nc=ue.default.atRule,Cc=ue.default.rule,Mc=ue.default.decl,Tc=ue.default.root,kc=ue.default.CssSyntaxError,vc=ue.default.Declaration,Dc=ue.default.Container,Lc=ue.default.Processor,_c=ue.default.Document,Rc=ue.default.Comment,Bc=ue.default.Warning,Oc=ue.default.AtRule,Pc=ue.default.Result,Ic=ue.default.Input,Wc=ue.default.Rule,Hc=ue.default.Root,qc=ue.default.Node;function Hn(t){return t.replace(/[.*+?^${}()|[\\]\\\\]/g,"\\\\$&")}function va(t){return t.replace(/\\\\/g,"\\\\\\\\").replace(/"/g,\'\\\\"\')}function Da(t,e,n){let i=La(t,e,n),r=i.trim();if(!r||/^(html|body|:root|\\*)$/i.test(r))return t;let o=new RegExp(`\\\\[\\\\s*data-composition-id\\\\s*=\\\\s*(["\'])${Hn(n)}\\\\1\\\\s*\\\\]`,"g");if(o.test(r))return i.replace(o,e);let s=i.match(/^\\s*/)?.[0]??"",c=i.match(/\\s*$/)?.[0]??"";return`${s}${e} ${r}${c}`}function La(t,e,n){let i=Hn(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 _a=new Set(["keyframes","-webkit-keyframes","font-face"]);function Ra(t){return t?.type==="atrule"}function Ba(t){let e=t.parent;for(;e;){if(Ra(e)&&_a.has(e.name.toLowerCase()))return!0;e=e.parent}return!1}function qn(t,e,n){let i=e.trim();if(!t||!i)return t;let r=n||`[data-composition-id="${va(i)}"]`,o=Jr.parse(t);return o.walkRules(s=>{Ba(s)||(s.selectors=s.selectors.map(c=>Da(c,r,i)))}),o.toResult({map:!1}).css}function Qr(t,e,n="[HyperFrames] composition script error:",i,r=e){let o=JSON.stringify(e),s=JSON.stringify(r),c=JSON.stringify(n),u=Hn(e),l=JSON.stringify(i??null),a=JSON.stringify(String.raw`\\[\\s*data-composition-id\\s*=\\s*(?:"${u}"|\'${u}\')\\s*\\]`),f=JSON.stringify(String.raw`\\s*\\[\\s*data-(?:start|duration)\\s*=\\s*(?:"[^"]*"|\'[^\']*\')\\s*\\]`);return`(function(){\n var __hfCompId = ${o};\n var __hfTimelineCompId = ${s};\n var __hfErrorLabel = ${c};\n var __hfEscapeAttr = function(value) {\n return (value + "").replace(/\\\\\\\\/g, "\\\\\\\\\\\\\\\\").replace(/"/g, "\\\\\\\\\\\\"");\n };\n var __hfRootSelector = ${l} || (__hfCompId\n ? \'[data-composition-id="\' + __hfEscapeAttr(__hfCompId) + \'"]\'\n : "");\n var __hfRoot = null;\n var __hfRootSelectorPattern = ${a};\n var __hfTimingSelectorPattern = ${f};\n var __hfNormalizeSelector = function(selector) {\n if (!__hfCompId || typeof selector !== "string") return selector;\n return selector\n .replace(new RegExp(__hfRootSelectorPattern + \'(?:\' + __hfTimingSelectorPattern + \')+\', \'g\'), __hfRootSelector)\n .replace(new RegExp(\'(?:\' + __hfTimingSelectorPattern + \')+\' + __hfRootSelectorPattern, \'g\'), __hfRootSelector);\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 (root.id === idValue) return root;\n if (typeof root.querySelector !== "function") return null;\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 var value = Reflect.get(target, prop, target);\n return typeof value === "function" ? value.bind(target) : value;\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.slice.call(root.querySelectorAll(selector));\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 && __hfCompId ? byComp[__hfCompId] : null;\n return scoped ? Object.assign({}, scoped) : {};\n },\n });\n var __hfRun = function() {\n try {\n (function(document, gsap, window, __hyperframes) {\n${t}\n }).call(window, __hfScopedDocument, __hfScopedGsap, __hfScopedWindow, __hfScopedHyperframes);\n } catch (_err) {\n console.error(__hfErrorLabel, __hfCompId, _err);\n }\n };\n __hfFindRoot();\n __hfRun();\n})();`}function Yr(){if(typeof document>"u")return{};let t=Un(document.documentElement),e=Oa();return{...t,...e}}function Un(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 Oa(){if(typeof window>"u")return{};let t=window.__hfVariables;return!t||typeof t!="object"||Array.isArray(t)?{}:t}var Pa=8e3,Ia=/^(?![a-zA-Z][a-zA-Z\\d+\\-.]*:)(?!\\/\\/)(?!\\/)(?!\\.\\.?\\/).+/,Wa=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"),Pa)});function zn(t){for(;t.firstChild;)t.removeChild(t.firstChild);t.textContent=""}function Zr(t,e){let n=t.trim();if(!n)return t;try{return Ia.test(n)?new URL(n,document.baseURI).toString():e?new URL(n,e).toString():new URL(n,document.baseURI).toString()}catch{return t}}function Ha(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}async function jn(t){let e=null;t.hostCompositionId&&(e=Array.from(t.sourceNode.querySelectorAll("[data-composition-id]")).find(a=>a.getAttribute("data-composition-id")===t.hostCompositionId)??null);let n=e??t.sourceNode,i=e?.getAttribute("data-composition-id")?.trim()||t.hostCompositionId||null;if(t.headStyles)for(let l of t.headStyles){let a=l.cloneNode(!0);a instanceof HTMLStyleElement&&(i&&(a.textContent=qn(a.textContent||"",i)),document.head.appendChild(a),t.injectedStyles.push(a))}let r=Array.from(n.querySelectorAll("style"));for(let l of r){let a=l.cloneNode(!0);a instanceof HTMLStyleElement&&(i&&(a.textContent=qn(a.textContent||"",i)),document.head.appendChild(a),t.injectedStyles.push(a))}let o=[];if(t.headScripts)for(let l of t.headScripts){let a=l.getAttribute("type")?.trim()??"",f=l.getAttribute("src")?.trim()??"";if(f){let p=Zr(f,t.compositionUrl);o.push({kind:"external",src:p,type:a})}else{let p=l.textContent?.trim()??"";p&&o.push({kind:"inline",content:p,type:a,scopeCompositionId:i})}}let s=Array.from(n.querySelectorAll("script")),c=[...o];for(let l of s){let a=l.getAttribute("type")?.trim()??"",f=l.getAttribute("src")?.trim()??"";if(f){let p=Zr(f,t.compositionUrl);c.push({kind:"external",src:p,type:a})}else{let p=l.textContent?.trim()??"";p&&c.push({kind:"inline",content:p,type:a,scopeCompositionId:i})}l.parentNode?.removeChild(l)}let u=Array.from(n.querySelectorAll("style"));for(let l of u)l.parentNode?.removeChild(l);if(e){let l=document.importNode(e,!0),a=e.getAttribute("data-width"),f=e.getAttribute("data-height"),p=t.parseDimensionPx(a),g=t.parseDimensionPx(f);for(a&&t.host.setAttribute("data-width",a),f&&t.host.setAttribute("data-height",f),p&&t.host instanceof HTMLElement&&(t.host.style.width=p),g&&t.host instanceof HTMLElement&&(t.host.style.height=g);l.firstChild;)t.host.appendChild(l.firstChild)}else t.hasTemplate?t.host.appendChild(document.importNode(n,!0)):t.host.innerHTML=t.fallbackBodyInnerHtml;if(i){let l={...t.declaredVariableDefaults??{},...Ha(t.host)};Object.keys(l).length>0&&(window.__hfVariablesByComp||(window.__hfVariablesByComp={}),window.__hfVariablesByComp[i]=l)}for(let l of c){let a=document.createElement("script");if(l.type&&(a.type=l.type),a.async=!1,l.kind==="external"?a.src=l.src:l.type.toLowerCase()==="module"?a.textContent=l.content:l.scopeCompositionId?a.textContent=Qr(l.content,l.scopeCompositionId):a.textContent=`(function(){${l.content}})();`,document.body.appendChild(a),t.injectedScripts.push(a),l.kind==="external"){let f=await Wa(a);f.status!=="load"&&t.onDiagnostic?.({code:"external_composition_script_load_issue",details:{hostCompositionId:t.hostCompositionId,hostCompositionSrc:t.hostCompositionSrc,resolvedScriptSrc:l.src,loadStatus:f.status,elapsedMs:f.elapsedMs}})}}}async function Xr(t){let e=Array.from(document.querySelectorAll("[data-composition-id]:not([data-composition-src])")).filter(n=>{if(n.children.length>0)return!1;let i=n.getAttribute("data-composition-id");return i?!!document.querySelector(`template#${CSS.escape(i)}-template`):!1});if(e.length!==0)for(let n of e){let i=n.getAttribute("data-composition-id"),r=document.querySelector(`template#${CSS.escape(i)}-template`);zn(n),await jn({host:n,hostCompositionId:i,hostCompositionSrc:`template#${i}-template`,sourceNode:r.content,hasTemplate:!0,fallbackBodyInnerHtml:"",compositionUrl:null,injectedStyles:t.injectedStyles,injectedScripts:t.injectedScripts,parseDimensionPx:t.parseDimensionPx,onDiagnostic:t.onDiagnostic})}}async function eo(t){let e=Array.from(document.querySelectorAll("[data-composition-src]"));e.length!==0&&await Promise.all(e.map(async n=>{let i=n.getAttribute("data-composition-src");if(!i)return;let r=null;try{r=new URL(i,document.baseURI)}catch{r=null}zn(n);try{let o=n.getAttribute("data-composition-id"),s=o!=null?document.querySelector(`template#${CSS.escape(o)}-template`):null;if(s){await jn({host:n,hostCompositionId:o,hostCompositionSrc:i,sourceNode:s.content,hasTemplate:!0,fallbackBodyInnerHtml:"",compositionUrl:r,injectedStyles:t.injectedStyles,injectedScripts:t.injectedScripts,parseDimensionPx:t.parseDimensionPx,onDiagnostic:t.onDiagnostic});return}let c=await fetch(i);if(!c.ok)throw new Error(`HTTP ${c.status}`);let u=await c.text(),a=new DOMParser().parseFromString(u,"text/html"),f=(o?a.querySelector(`template#${CSS.escape(o)}-template`):null)??a.querySelector("template"),p=f?f.content:a.body,g=f?void 0:Array.from(a.head.querySelectorAll("style")),C=f?void 0:Array.from(a.head.querySelectorAll("script"));await jn({host:n,hostCompositionId:o,hostCompositionSrc:i,sourceNode:p,hasTemplate:!!f,fallbackBodyInnerHtml:a.body.innerHTML,compositionUrl:r,injectedStyles:t.injectedStyles,injectedScripts:t.injectedScripts,parseDimensionPx:t.parseDimensionPx,headStyles:g,headScripts:C,declaredVariableDefaults:Un(a.documentElement),onDiagnostic:t.onDiagnostic})}catch(o){t.onDiagnostic?.({code:"external_composition_load_failed",details:{hostCompositionId:n.getAttribute("data-composition-id"),hostCompositionSrc:i,errorMessage:o instanceof Error?o.message:"unknown_error"}}),zn(n)}}))}function qa(t){return t instanceof HTMLElement?t.dataset.captionWrapper!=="true"?t:t.querySelector(":scope > span")??null:null}function Ua(){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 za(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 Gn(){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=Ua();for(let i of e){let r=null;if(i.wordId&&(r=qa(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 u=t.getTweensOf(r).filter(a=>a.vars.color!==void 0).sort((a,f)=>a.startTime()-f.startTime()),l=u.length>0?String(u[0].vars.color):"";for(let a of u)String(a.vars.color)===l?i.dimColor&&(a.vars.color=i.dimColor):i.activeColor&&(a.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 c=za(r);t.set(c,o)}}}).catch(()=>{})}var Qt=class{constructor(e){Se(this,"_baseTime",0);Se(this,"_playStartMs",null);Se(this,"_rate",1);Se(this,"_duration",1/0);Se(this,"_nowMs");Se(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)/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 to(t){return!Number.isFinite(t)||t<=0?1:t}var Yt=class{constructor(){Se(this,"_ctx",null);Se(this,"_bufferCache",new Map);Se(this,"_activeSources",[]);Se(this,"_masterGain",null);Se(this,"_rateAnchorCtx",0);Se(this,"_rateAnchorComp",0);Se(this,"_rate",1);Se(this,"_paused",!0);Se(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._ctx)return null;try{let r=await(await fetch(n)).arrayBuffer(),o=await this._ctx.decodeAudioData(r);return this._bufferCache.set(n,o),o}catch(i){return R("webAudioTransport.decode",i),null}}startGeneration(){return this._playGeneration+=1,this._playGeneration}currentGeneration(){return this._playGeneration}async schedulePlayback(e,n,i,r,o,s,c,u=1){if(!this._ctx||!this._masterGain||c!==this._playGeneration)return null;try{if(this._ctx.state==="suspended"&&await this._ctx.resume(),c!==this._playGeneration)return null;let l=to(u),a=this._ctx.createBufferSource();a.buffer=n,a.playbackRate.value=l;let f=this._ctx.createGain();f.gain.value=s,a.connect(f),f.connect(this._masterGain);let p=o-i,g=this._ctx.currentTime;if(this._rate=l,this._rateAnchorCtx=g,this._rateAnchorComp=o,p>=0)a.start(0,p+r);else{let S=-p/l;a.start(g+S,r)}let C=e.muted;e.muted=!0;let w={el:e,sourceNode:a,gainNode:f,compositionStart:i,mediaStart:r,scheduledAt:g,priorMuted:C};return this._activeSources.push(w),this._paused=!1,w}catch(l){return R("webAudioTransport.schedule",l),null}}setRate(e){let n=to(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){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)))}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 no="data-hf-authored-duration",io="data-hf-authored-end";function ro(){let t=Si(),e=window,n=null,i=null,r=[],o=new Set,s=null;if(typeof e.__hfRuntimeTeardown=="function")try{e.__hfRuntimeTeardown()}catch(d){R("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 c=d=>{r.push(d)},u=(d,m,h)=>{let y=h??`${d}:${JSON.stringify(m)}`;o.has(y)||(o.add(y),Ee({source:"hf-preview",type:"diagnostic",code:d,details:m}))},l=d=>{let m={scale:1,focusX:960,focusY:540},h=[],y=[],A={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:()=>m,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:()=>y,getRenderState:()=>({...A,time:d.getTime(),duration:d.getDuration(),isPlaying:d.isPlaying()})}},a=1/60,f=.75,p=2,g=.05,C=100,w=240,S=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??"")}},U=d=>{let m=d.toLowerCase();return m.includes("cannot read properties of null")||m.includes("cannot set properties of null")?{code:"runtime_null_dom_access",category:"dom-null-access"}:m.includes("failed to execute \'queryselector\'")?{code:"runtime_invalid_selector",category:"selector-invalid"}:m.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 m=Number.parseFloat(d);return!Number.isFinite(m)||m<=0?null:`${m}px`},M=()=>{let d=document.querySelector(\'[data-composition-id][data-root="true"]\');if(d instanceof HTMLElement)return d;let m=Array.from(document.querySelectorAll("[data-composition-id]"));return m.length===0?null:m.find(h=>!h.parentElement?.closest("[data-composition-id]"))??m[0]??null},X=()=>{let d=M();if(!d)return;let m=B(d.getAttribute("data-width")),h=B(d.getAttribute("data-height"));m&&(d.style.width=m),h&&(d.style.height=h),m&&d.style.setProperty("--comp-width",m),h&&d.style.setProperty("--comp-height",h)},D=()=>{let d=M(),m=Array.from(document.querySelectorAll("[data-composition-id]")).filter(h=>h.hasAttribute("data-duration")||h.hasAttribute("data-end"));for(let h of m){if(d&&h===d)continue;let y=h.getAttribute("data-duration"),A=h.getAttribute("data-end");y!=null&&!h.hasAttribute(no)&&h.setAttribute(no,y),A!=null&&!h.hasAttribute(io)&&h.setAttribute(io,A),h.removeAttribute("data-duration"),h.removeAttribute("data-end")}},F=()=>{let d=M();if(!d)return;d.style.position||(d.style.position="relative"),d.style.overflow="hidden";let m=B(d.getAttribute("data-width")),h=B(d.getAttribute("data-height"));m&&(d.style.width=m),h&&(d.style.height=h);let y=Array.from(d.children);for(let A of y){let v=A.tagName.toLowerCase();if(v==="script"||v==="style"||v==="link"||v==="meta"||!A.hasAttribute("data-start"))continue;let j=(A.style.top==="0px"||A.style.top==="0")&&(A.style.left==="0px"||A.style.left==="0")&&A.style.width==="100%"&&A.style.height==="100%",ne=/translate\\(\\s*-50%\\s*,\\s*-50%\\s*\\)/.test(A.style.transform);if(j&&ne&&!A.hasAttribute("data-width")&&!A.hasAttribute("data-height")){let Re=A.style.top,ae=A.style.left,Pe=A.style.width,oe=A.style.height;A.style.top="",A.style.left="",A.style.width="",A.style.height="";let Q=window.getComputedStyle(A);Q.top!=="auto"||Q.bottom!=="auto"||Q.left!=="auto"||Q.right!=="auto"||Q.width!=="0px"||Q.height!=="0px"||(A.style.top=Re,A.style.left=ae,A.style.width=Pe,A.style.height=oe)}let te=window.getComputedStyle(A),se=te.position;if(se!=="absolute"&&se!=="fixed"&&(A.style.position="absolute"),!!A.style.top||!!A.style.bottom||te.top!=="auto"||te.bottom!=="auto"||(A.style.top="0"),!!A.style.left||!!A.style.right||te.left!=="auto"||te.right!=="auto"||(A.style.left="0"),v!=="audio"){let Re=B(A.getAttribute("data-width")),ae=B(A.getAttribute("data-height")),Pe=te.width!=="0px"&&te.width!=="auto",oe=te.height!=="0px"&&te.height!=="auto";Re?!A.style.width&&!Pe&&(A.style.width=Re):!A.style.width&&te.width==="0px"&&(A.style.width="100%"),ae?!A.style.height&&!oe&&(A.style.height=ae):!A.style.height&&te.height==="0px"&&(A.style.height="100%")}}},x=(d,m=0,h)=>Ke({timelineRegistry:window.__timelines??{},includeAuthoredTimingAttrs:h?.includeAuthoredTimingAttrs??!0}).resolveStartForElement(d,m),b=(d,m)=>Ke({timelineRegistry:window.__timelines??{},includeAuthoredTimingAttrs:m?.includeAuthoredTimingAttrs??!0}).resolveDurationForElement(d),E=!!document.querySelector("[data-composition-src]"),N=!1;{let d=document.querySelectorAll("[data-composition-id]:not([data-composition-src])");for(let m of d){let h=m.getAttribute("data-composition-id");if(h&&m.children.length===0&&document.querySelector(`template#${CSS.escape(h)}-template`)){N=!0;break}}}let T=!E&&!N,_=d=>{if(!d||typeof d.duration!="function")return null;try{let m=Number(d.duration());return Number.isFinite(m)?Math.max(0,m):null}catch{return null}},P=d=>typeof d=="number"&&Number.isFinite(d)&&d>a,J=d=>{let m=Number(d.getAttribute("data-duration"));if(Number.isFinite(m)&&m>0)return m;let h=Number(d.getAttribute("data-playback-start")??d.getAttribute("data-media-start")??"0"),y=Number.isFinite(h)?Math.max(0,h):0;return Number.isFinite(d.duration)&&d.duration>y?Math.max(0,d.duration-y):null},L=()=>{let d=Array.from(document.querySelectorAll("video[data-start], audio[data-start]"));if(d.length===0)return null;let m=0;for(let h of d){let y=x(h,0);if(!Number.isFinite(y))continue;let A=J(h);A==null||A<=a||(m=Math.max(m,Math.max(0,y)+A))}return m>a?m:null},ce=()=>{let d=M();if(!d)return null;let m=window.__timelines??{},h=Ke({timelineRegistry:m,includeAuthoredTimingAttrs:!0}),y=0,A=Array.from(d.querySelectorAll("[data-composition-id][data-start]"));for(let v of A){if(!(v instanceof Element)||v.parentElement?.closest("[data-composition-id]")!==d)continue;let ne=h.resolveStartForElement(v,0),te=h.resolveDurationForElement(v);!Number.isFinite(ne)||te==null||te<=0||(y=Math.max(y,Math.max(0,ne)+te))}return y>a?y:null},ge=()=>{let d=L();return typeof d!="number"||!Number.isFinite(d)||d<=a?null:d},$=d=>P(d)?Math.max(a,d*f):a,G=(d,m=0)=>{let h=_(d),y=ge(),A=ce(),v=Math.max(y??0,A??0),j=Number.isFinite(m)&&m>a?m:0,ne=0;P(h)?ne=Math.max(h,v,j):P(v)?ne=Math.max(v,j):ne=j;let te=Math.max(1,Number(t.maxTimelineDurationSeconds)||1800);return ne>0?Math.max(0,Math.min(ne,te)):0},I=()=>{let d=window.__timelines??{},m=Ke({timelineRegistry:d,includeAuthoredTimingAttrs:!0}),h=ge(),y=ce(),A=Math.max(h??0,y??0)||null,v=$(A),j=oe=>{let Q=document.querySelector(`[data-composition-id="${CSS.escape(oe)}"]`);return Q?m.resolveStartForElement(Q,0):0},ne=oe=>{let Q=window.gsap;if(!Q||typeof Q.timeline!="function")return null;let de=Q.timeline({paused:!0});for(let he of oe)de.add(he.timeline,j(he.compositionId));return de},te=(oe,Q)=>{if(!P(oe))return null;let de=window.gsap;if(!de||typeof de.timeline!="function")return null;let he=de.timeline({paused:!0});if(Q)try{he.add(Q,0)}catch(le){R("runtime.init.site2",le)}let ye=he;if(typeof ye.to=="function")try{ye.to({},{duration:oe})}catch(le){R("runtime.init.site3",le)}return he},se=(oe,Q)=>{let de=oe;if(typeof de.getChildren!="function")return[];try{let he=de.getChildren(!0,!0,!0)??[];if(!Array.isArray(he))return[];let ye=[];for(let le of Q)if(!he.some(ve=>ve===le.timeline))try{let ve=j(le.compositionId);oe.add(le.timeline,ve),ye.push(le.compositionId)}catch(ve){R("runtime.init.site4",ve)}return ye}catch{return[]}},Ne=M(),pe=Ne?.getAttribute("data-composition-id")??null;if(!pe)return{timeline:null};let Ce=d[pe]??null,ae=(()=>{if(!Ne)return[];let oe=new Set,Q=Array.from(Ne.querySelectorAll("[data-composition-id]")),de=[];for(let he of Q){let ye=he.getAttribute("data-composition-id");if(!ye||ye===pe||oe.has(ye))continue;oe.add(ye);let le=d[ye]??null;if(!le||typeof le.play!="function"||typeof le.pause!="function")continue;let Me=_(le);de.push({compositionId:ye,timeline:le,durationSeconds:Me??0})}return de})(),Pe=oe=>{for(let Q of oe){let de=Q.timeline;if(typeof de.paused=="function")try{de.paused(!1)}catch(he){R("runtime.init.site5",he)}}};if(ae.length>0&&Pe(ae),Ce){let oe=ae.length>0?se(Ce,ae):[];if((ae.length>0||!document.querySelector("[data-composition-id]:not([data-composition-id=\'"+pe+"\'])"))&&(Z=!0),oe.length>0)try{let le=Ce.time();Ce.seek(le,!1)}catch{}let Q=_(Ce);if(!P(Q)&&ae.length>0){let le=ae.map(Ro=>Ro.compositionId),Me=ne(ae),ve=_(Me);if(Me&&P(ve))return{timeline:Me,selectedTimelineIds:le,selectedDurationSeconds:ve,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_unusable_fallback",details:{rootCompositionId:pe,rootDurationSeconds:Q,fallbackKind:"composite_by_root_children",minCandidateDurationSeconds:v,selectedDurationSeconds:ve,mediaDurationFloorSeconds:h,authoredCompositionDurationFloorSeconds:y,selectedTimelineIds:le,autoNestedChildren:oe}}};let an=te(A??0,Ce),ln=_(an);if(an&&P(ln))return{timeline:an,selectedTimelineIds:[pe],selectedDurationSeconds:ln,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_unusable_media_floor_fallback",details:{rootCompositionId:pe,rootDurationSeconds:Q,fallbackKind:"media_duration_floor",mediaDurationFloorSeconds:h,authoredCompositionDurationFloorSeconds:y,selectedDurationSeconds:ln,selectedTimelineIds:[pe],autoNestedChildren:oe}}}}if(!P(Q)&&ae.length===0){let le=te(A??0,Ce),Me=_(le);if(le&&P(Me))return{timeline:le,selectedTimelineIds:[pe],selectedDurationSeconds:Me,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_unusable_media_floor_fallback",details:{rootCompositionId:pe,rootDurationSeconds:Q,fallbackKind:"media_duration_floor",mediaDurationFloorSeconds:h,authoredCompositionDurationFloorSeconds:y,selectedDurationSeconds:Me,selectedTimelineIds:[pe]}}}}let de=Ne?.getAttribute("data-duration"),he=de?parseFloat(de):null,ye=Math.max(P(he)?he:0,y??0);if(ye>0&&P(ye)&&P(Q)&&ye>=Q+.5){let le=Ce;if(typeof le.to=="function")try{le.to({},{duration:0},ye)}catch(ve){R("runtime.init.site6",ve)}let Me=_(Ce);if(P(Me))return{timeline:Ce,selectedTimelineIds:[pe],selectedDurationSeconds:Me,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_padded_to_declared_duration",details:{rootCompositionId:pe,rootDurationSeconds:Q,rootDeclaredDur:he,authoredCompositionDurationFloorSeconds:y,newDur:Me}}}}return{timeline:Ce,selectedTimelineIds:[pe],selectedDurationSeconds:Q,mediaDurationFloorSeconds:h,diagnostics:oe.length>0?{code:"root_timeline_auto_nested_children",details:{rootCompositionId:pe,selectedDurationSeconds:Q,autoNestedChildren:oe}}:void 0}}if(ae.length>0){let oe=ae.map(he=>he.compositionId),Q=ne(ae),de=_(Q);if(Q)return{timeline:Q,selectedTimelineIds:oe,selectedDurationSeconds:de,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_missing_fallback",details:{rootCompositionId:pe,fallbackKind:"composite_by_root_children",minCandidateDurationSeconds:v,selectedDurationSeconds:de,mediaDurationFloorSeconds:h,selectedTimelineIds:oe}}}}return{timeline:null}},Z=!1,xe=()=>{if(!T)return!1;let d=t.capturedTimeline,m=_(d),h=P(m);if(d&&h&&Z)return!1;let y=I();if(!y.timeline)return!1;if(d&&d===y.timeline)return typeof d.timeScale=="function"&&d.timeScale(t.playbackRate),!1;t.capturedTimeline=y.timeline,typeof t.capturedTimeline.timeScale=="function"&&t.capturedTimeline.timeScale(t.playbackRate);let A=G(t.capturedTimeline,0);if(A>0){try{H.setDuration(A)}catch{}t.capturedTimeline.pause()}return y.diagnostics&&Ee({source:"hf-preview",type:"diagnostic",code:y.diagnostics.code,details:y.diagnostics.details}),Ee({source:"hf-preview",type:"diagnostic",code:"timeline_bound",details:{selectedTimelineIds:y.selectedTimelineIds??[],selectedDurationSeconds:y.selectedDurationSeconds??null,mediaDurationFloorSeconds:y.mediaDurationFloorSeconds??null}}),!0},we=()=>{let d=M();if(!(d instanceof HTMLElement))return;let m=d.getBoundingClientRect(),h=Number(d.getAttribute("data-width")),y=Number(d.getAttribute("data-height")),A=window.getComputedStyle(d),v=Number.isFinite(h)&&h>0&&Number.isFinite(y)&&y>0,j=m.width<=0||m.height<=0||d.clientWidth<=0||d.clientHeight<=0;!v||!j||u("root_stage_layout_zero",{compositionId:d.getAttribute("data-composition-id")??null,declaredWidth:h,declaredHeight:y,rectWidth:Math.round(m.width),rectHeight:Math.round(m.height),clientWidth:d.clientWidth,clientHeight:d.clientHeight,display:A.display,visibility:A.visibility,overflow:A.overflow},`root-stage-layout-zero:${d.getAttribute("data-composition-id")??"unknown"}`)},W=()=>{t.tornDown||(s!=null&&window.cancelAnimationFrame(s),s=window.requestAnimationFrame(()=>{s=null,we()}))},k=()=>{n=d=>{let m=S(d.error??d.message).slice(0,w);if(!m)return;let h=U(m);Ee({source:"hf-preview",type:"diagnostic",code:h.code,details:{category:h.category,message:m,filename:d.filename||null,line:Number.isFinite(d.lineno)?d.lineno:null,column:Number.isFinite(d.colno)?d.colno:null}})},i=d=>{let m=S(d.reason).slice(0,w);if(!m)return;let h=U(m);Ee({source:"hf-preview",type:"diagnostic",code:`${h.code}_unhandled_rejection`,details:{category:`${h.category}-unhandled-rejection`,message:m}})},window.addEventListener("error",n),window.addEventListener("unhandledrejection",i)},O=()=>{let d=Array.from(document.querySelectorAll("img, video, audio, source, link[rel=\'stylesheet\']"));for(let h of d){let y=()=>{if(!(h instanceof Element))return;let A=h.tagName.toLowerCase(),v=h.getAttribute("src")??h.getAttribute("href")??h.getAttribute("poster")??null,j=A==="link"?"runtime_stylesheet_load_failed":"runtime_asset_load_failed";u(j,{tagName:A,assetUrl:v,currentSrc:(h instanceof HTMLImageElement||h instanceof HTMLMediaElement)&&h.currentSrc||null,readyState:h instanceof HTMLMediaElement?h.readyState:null,networkState:h instanceof HTMLMediaElement?h.networkState:null},`${j}:${A}:${v??"unknown"}`)};h.addEventListener("error",y),c(()=>{h.removeEventListener("error",y)})}let m=document.fonts;m&&m.ready.then(()=>{if(t.tornDown)return;let h=Array.from(m).filter(y=>y.status==="error").map(y=>y.family).filter(y=>!!y).slice(0,10);h.length!==0&&u("runtime_font_load_issue",{failedFamilies:h,totalFaces:Array.from(m).length},`runtime-font-load-issue:${h.join("|")}`)}).catch(()=>{})},ie=(d,m)=>{if(!d.timeline)return!1;let h=t.capturedTimeline;if(h&&h===d.timeline)return!1;let y=Math.max(0,t.currentTime||0),A=t.isPlaying;t.capturedTimeline=d.timeline,typeof t.capturedTimeline.timeScale=="function"&&t.capturedTimeline.timeScale(t.playbackRate);try{t.capturedTimeline.pause(),t.capturedTimeline.seek(y,!1),A&&t.capturedTimeline.play()}catch(v){R("runtime.init.site7",v)}return Ee({source:"hf-preview",type:"diagnostic",code:"timeline_loop_guard_rebind",details:{reason:m,previousTime:y,selectedTimelineIds:d.selectedTimelineIds??[],selectedDurationSeconds:d.selectedDurationSeconds??null,mediaDurationFloorSeconds:d.mediaDurationFloorSeconds??null}}),!0},ee=null,z=!1,q=new Set,V=()=>{t.tornDown||(ee!=null&&window.clearTimeout(ee),ee=window.setTimeout(()=>{if(t.tornDown)return;ee=null;let d=I();if(!d.timeline||!P(d.mediaDurationFloorSeconds??null))return;if(!t.capturedTimeline){xe()&&(Ve(),me(!0));return}if(z)return;let h=_(t.capturedTimeline),y=d.selectedDurationSeconds??_(d.timeline);P(y)&&(!P(h)||y>=h+g)&&ie(d,"manual")&&(z=!0,Ee({source:"hf-preview",type:"diagnostic",code:"timeline_rebind_after_media_metadata",details:{previousDurationSeconds:h??null,selectedDurationSeconds:y??null,selectedTimelineIds:d.selectedTimelineIds??[],mediaDurationFloorSeconds:d.mediaDurationFloorSeconds??null}}),Ve(),me(!0))},C))},_e=()=>{for(let d of q)d.removeEventListener("loadedmetadata",V),d.removeEventListener("durationchange",V);q.clear()},be=()=>{if(t.tornDown)return;let d=Array.from(document.querySelectorAll("video, audio"));for(let m of d)q.has(m)||(q.add(m),m.addEventListener("loadedmetadata",V),m.addEventListener("durationchange",V),m.preload!=="auto"&&(m.preload="auto"),m.readyState<HTMLMediaElement.HAVE_FUTURE_DATA&&m.load())},ke=()=>{let d=v=>{let j=v.closest("[data-composition-id]"),ne=j?x(j,0):null,te=j?b(j,{includeAuthoredTimingAttrs:!0}):null;return{compositionRoot:j,inheritedStart:ne,inheritedDuration:te}},m=pi({shouldIncludeElement:v=>v.hasAttribute("data-start")||!!d(v).compositionRoot,resolveStartSeconds:v=>{let j=d(v);return x(v,j.inheritedStart??0)},resolveDurationSeconds:v=>{let j=d(v),ne=x(v,j.inheritedStart??0),te=Number.parseFloat(v.dataset.playbackStart??v.dataset.mediaStart??"0")||0,se=j.inheritedStart!=null&&j.inheritedDuration!=null&&j.inheritedDuration>0?Math.max(0,j.inheritedStart+j.inheritedDuration-ne):null,Ne=Number.isFinite(v.duration)&&v.duration>te?Math.max(0,v.duration-te):null;return Ne!=null&&se!=null?Math.min(Ne,se):Ne??se}}),h=t.mediaForceSyncNextTick;h&&(t.mediaForceSyncNextTick=!1),hi({clips:m.mediaClips,timeSeconds:t.currentTime,playing:t.isPlaying,playbackRate:t.playbackRate,outputMuted:t.mediaOutputMuted||Ae.isActive(),userMuted:t.bridgeMuted,userVolume:t.bridgeVolume,forceSync:h,onAutoplayBlocked:()=>{t.mediaAutoplayBlockedPosted||(t.mediaAutoplayBlockedPosted=!0,Ee({source:"hf-preview",type:"media-autoplay-blocked"}))}});let y=document.querySelector("[data-composition-id]")?.getAttribute("data-composition-id")??null,A=Array.from(document.querySelectorAll("[data-start]"));for(let v of A){if(!(v instanceof HTMLElement))continue;let j=v.tagName.toLowerCase();if(j==="script"||j==="style"||j==="link"||j==="meta")continue;if(!v.getAttribute("data-composition-id")){let ae=v.closest("[data-composition-id]")?.getAttribute("data-composition-id")??null;if(ae&&ae!==y)continue}let te=x(v,0),se=b(v),Ne=v.getAttribute("data-composition-id");if(Ne){let Re=(window.__timelines??{})[Ne],ae=null;if(Re&&typeof Re.duration=="function"){let Pe=Number(Re.duration());Number.isFinite(Pe)&&Pe>0&&(ae=Pe)}se!=null&&se>0&&ae!=null?se=Math.min(se,ae):(se==null||se<=0)&&ae!=null&&(se=ae)}let pe=se!=null&&se>0?te+se:Number.POSITIVE_INFINITY,Ce=t.currentTime>=te&&(Number.isFinite(pe)?t.currentTime<pe:!0);v.style.visibility=Ce?"visible":"hidden"}},me=d=>{let m=Math.max(0,Math.round((t.currentTime||0)*t.canonicalFps)),h=Date.now();(d||m!==t.bridgeLastPostedFrame||t.isPlaying!==t.bridgeLastPostedPlaying||t.bridgeMuted!==t.bridgeLastPostedMuted||h-t.bridgeLastPostedAt>=t.bridgeMaxPostIntervalMs)&&(t.bridgeLastPostedFrame=m,t.bridgeLastPostedPlaying=t.isPlaying,t.bridgeLastPostedMuted=t.bridgeMuted,t.bridgeLastPostedAt=h,Ee({source:"hf-preview",type:"state",frame:m,isPlaying:t.isPlaying,muted:t.bridgeMuted,playbackRate:t.playbackRate}))},Ve=()=>{D(),X(),F();let d=M();if(d){let h=B(d.getAttribute("data-width")),y=B(d.getAttribute("data-height")),A=h?parseInt(h,10):0,v=y?parseInt(y,10):0;A>0&&v>0&&Ee({source:"hf-preview",type:"stage-size",width:A,height:v})}xe();let m=Fi({canonicalFps:t.canonicalFps,maxTimelineDurationSeconds:t.maxTimelineDurationSeconds});window.__clipManifest=m,Ee(m),W()},Oe=(d,m=0)=>{for(let h of t.deterministicAdapters){try{d==="discover"&&h.discover(),d==="pause"&&h.pause(),d==="play"&&h.play&&h.play()}catch(y){R("runtime.init.site8",y)}if(d==="discover")try{h.seek({time:m})}catch(y){R("runtime.init.site9",y)}}};if(T)Gn();else{let d={injectedStyles:t.injectedCompStyles,injectedScripts:t.injectedCompScripts,parseDimensionPx:B,onDiagnostic:({code:m,details:h})=>{Ee({source:"hf-preview",type:"diagnostic",code:m,details:h})}};eo(d).then(()=>Xr(d)).finally(()=>{T=!0,xe(),Oe("discover",t.currentTime),be(),O(),Gn(),Ve(),me(!0)})}let Lt=xi({postMessage:d=>Ee(d)});Lt.installPickerApi();let rn=d=>{let m=Number(d);!Number.isFinite(m)||m<=0?t.playbackRate=1:t.playbackRate=Math.max(.1,Math.min(5,m)),t.mediaForceSyncNextTick=!0,t.capturedTimeline&&typeof t.capturedTimeline.timeScale=="function"&&t.capturedTimeline.timeScale(t.playbackRate);let h=document.querySelectorAll("video, audio");for(let y of h)if(y instanceof HTMLMediaElement)try{y.playbackRate=t.playbackRate}catch(A){R("runtime.init.site10",A)}},fe=yi({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:rn,getCanonicalFps:()=>t.canonicalFps,onSyncMedia:(d,m)=>{t.currentTime=Math.max(0,Number(d)||0),t.isPlaying!==m&&(t.mediaForceSyncNextTick=!0),t.isPlaying=m,ke()},onStatePost:me,onDeterministicSeek:d=>{for(let m of t.deterministicAdapters)try{m.seek({time:Number(d)||0})}catch(h){R("runtime.init.site11",h)}},onDeterministicPause:()=>Oe("pause"),onDeterministicPlay:()=>Oe("play"),onRenderFrameSeek:()=>{},onShowNativeVideos:()=>{},getSafeDuration:()=>G(t.capturedTimeline,0)});window.__player=l(fe),window.__playerReady=!0,window.__renderReady=!0,oi(Ee),lt("composition_loaded",{duration:fe.getDuration(),compositionId:document.querySelector("[data-composition-id]")?.getAttribute("data-composition-id")??null}),t.controlBridgeHandler=ri({onPlay:()=>{fe.play(),lt("composition_played",{time:fe.getTime()})},onPause:()=>{fe.pause(),lt("composition_paused",{time:fe.getTime()})},onSeek:(d,m)=>{let h=Math.max(0,d)/t.canonicalFps;fe.seek(h),lt("composition_seeked",{time:h})},onSetMuted:d=>{t.bridgeMuted=d;let m=d||t.mediaOutputMuted;Ae.setMuted(m);let h=document.querySelectorAll("video, audio");for(let y of h)y instanceof HTMLMediaElement&&(y.muted=m)},onSetVolume:d=>{t.bridgeVolume=d,Ae.setVolume(d);let m=document.querySelectorAll("video, audio");for(let h of m){if(!(h instanceof HTMLMediaElement))continue;let y=parseFloat(h.dataset.volume??""),A=Number.isFinite(y)?y:1;h.volume=A*d}},onSetMediaOutputMuted:d=>{t.mediaOutputMuted=d;let m=d||t.bridgeMuted;Ae.setMuted(m);let h=document.querySelectorAll("video, audio");for(let y of h)y instanceof HTMLMediaElement&&(y.muted=m)},onSetPlaybackRate:d=>{rn(d),t.transportClock&&t.transportClock.setRate(t.playbackRate)},onEnablePickMode:()=>Lt.enablePickMode(),onDisablePickMode:()=>Lt.disablePickMode()}),xe(),t.capturedTimeline&&(fe._timeline=t.capturedTimeline),T&&setTimeout(()=>{let d=t.capturedTimeline;xe()&&t.capturedTimeline!==d&&(fe._timeline=t.capturedTimeline),Oe("discover",t.currentTime),Ve(),me(!0)},0),t.deterministicAdapters=[mi(),si({resolveStartSeconds:d=>x(d,0)}),li(),di(),fi(),ai({getTimeline:()=>t.capturedTimeline})],k(),Oe("discover"),be();let H=new Qt;t.transportClock=H;let Ae=new Yt,ei=!1;Ae.init().then(d=>{ei=d});let _t=0,on=!1,Lo=(d,m,h)=>{try{d.pause(),typeof d.totalTime=="function"?d.totalTime(m,!1):d.seek(m,!1)}catch(y){R(h,y)}},_o=d=>{let m=window.__timelines??{},h=M()?.getAttribute("data-composition-id")??null;for(let[y,A]of Object.entries(m)){if(!A||y===h)continue;let v=document.querySelector(`[data-composition-id="${CSS.escape(y)}"]`);if(!v)continue;let j=x(v,0);if(!Number.isFinite(j))continue;let ne=b(v,{includeAuthoredTimingAttrs:!0}),te=_(A),se=ne!=null&&ne>0?ne:te,Ne=Math.max(0,se!=null&&se>0?Math.min(se,d-j):d-j);Lo(A,Ne,"runtime.init.transport.childTimeline")}},at=d=>{let m=t.capturedTimeline;if(m)try{typeof m.totalTime=="function"?m.totalTime(d,!1):m.seek(d,!1)}catch(h){R("runtime.init.transport.seek",h)}else _o(d);for(let h of t.deterministicAdapters)try{h.seek({time:d})}catch(y){R("runtime.init.transport.adapter",y)}},ti=()=>{if(!(t.tornDown||on)){on=!0;try{if(t.transportRafId=window.requestAnimationFrame(ti),_t+=1,_t%60===0&&!(H.isPlaying()&&t.capturedTimeline!=null&&H.now()<p)){let h=t.capturedTimeline;if(xe()){t.capturedTimeline&&!fe._timeline&&(fe._timeline=t.capturedTimeline),t.capturedTimeline&&t.capturedTimeline!==h&&t.capturedTimeline.pause();let y=G(t.capturedTimeline,0);y>0&&H.setDuration(y),Ve()}}if(_t%20===0&&Ve(),_t%30===0&&be(),t.capturedTimeline){let m=G(t.capturedTimeline,0);m>0&&H.setDuration(m)}if(H.isPlaying()&&!t.mediaOutputMuted)if(Ae.isActive()&&Ae.context){let m=Ae.getTime();m>=0&&H.attachAudioSource({currentTimeSeconds:m})}else{let m=document.querySelectorAll("audio[data-start]"),h=!1;for(let y of m){if(!(y instanceof HTMLMediaElement)||!y.isConnected)continue;let A=Number.parseFloat(y.dataset.start??""),v=Number.parseFloat(y.dataset.duration??""),j=Number.isFinite(v)&&v>0?A+v:1/0,ne=Number.parseFloat(y.dataset.playbackStart??y.dataset.mediaStart??"0")||0;if(Number.isFinite(A)&&t.currentTime>=A&&t.currentTime<j){y.paused?!y.error&&y.readyState<HTMLMediaElement.HAVE_FUTURE_DATA&&(H.attachAudioSource({currentTimeSeconds:t.currentTime}),h=!0):(H.attachAudioSource({el:y,compositionStart:A,mediaStart:ne}),h=!0);break}}!h&&H.hasAudioSource()&&H.detachAudioSource()}else H.hasAudioSource()&&H.detachAudioSource();let d=H.now();if(t.currentTime=d,at(d),H.isPlaying()&&H.reachedEnd()){Ae.stopAll(),H.detachAudioSource(),H.pause(),t.isPlaying=!1;let m=H.getDuration();Number.isFinite(m)&&(H.seek(m),t.currentTime=m,at(m)),Oe("pause"),ke(),me(!0);return}H.isPlaying()&&ke(),me(!1)}finally{on=!1}}},ni=d=>{let m=document.querySelectorAll("video, audio");for(let h of m){if(!(h instanceof HTMLMediaElement)||!h.isConnected)continue;let y=Number.parseFloat(h.dataset.start??"");if(!Number.isFinite(y))continue;let A=Number.parseFloat(h.dataset.duration??""),v=Number.isFinite(A)&&A>0?y+A:1/0;if(d<y||d>=v)continue;let j=Number.parseFloat(h.dataset.playbackStart??h.dataset.mediaStart??"0")||0,ne=d-y+j;if(ne>=0)try{h.currentTime=ne}catch{}}};if(fe.play=()=>{let d=t.capturedTimeline;if(H.isPlaying())return;let m=G(d,0);if(m>0)H.setDuration(m),H.reachedEnd()&&(H.seek(0),t.currentTime=0,at(0));else{let h=M(),y=Number(h?.getAttribute("data-duration")??0);y>0&&H.setDuration(y)}if(d&&d.pause(),!!H.play()){if(t.isPlaying=!0,t.mediaForceSyncNextTick=!0,ni(H.now()),ei){let h=Ae.startGeneration(),y=document.querySelectorAll("audio[data-start]");for(let A of y){if(!(A instanceof HTMLMediaElement)||!A.isConnected)continue;let v=Number.parseFloat(A.dataset.start??"");if(!Number.isFinite(v))continue;let j=Number.parseFloat(A.dataset.playbackStart??A.dataset.mediaStart??"0")||0,ne=Number.parseFloat(A.dataset.volume??""),te=Number.isFinite(ne)?ne:1;Ae.decodeAudioElement(A).then(se=>{!se||!H.isPlaying()||Ae.schedulePlayback(A,se,v,j,H.now(),te*t.bridgeVolume,h)})}}Oe("play"),ke(),me(!0)}},fe.pause=()=>{if(!H.isPlaying())return;Ae.stopAll(),H.detachAudioSource(),H.pause(),t.isPlaying=!1,t.currentTime=H.now(),t.mediaForceSyncNextTick=!0,ni(t.currentTime);let d=t.capturedTimeline;d&&d.pause(),Oe("pause"),ke(),me(!0)},fe.seek=d=>{let m=Ze(Math.max(0,Number(d)||0),t.canonicalFps);Ae.stopAll(),H.detachAudioSource(),H.isPlaying()&&H.pause(),H.seek(m),t.currentTime=H.now(),t.isPlaying=!1,t.mediaForceSyncNextTick=!0;let y=t.capturedTimeline;y&&y.pause(),at(t.currentTime),Oe("pause"),ke(),me(!0)},fe.renderSeek=d=>{let m=Ze(Math.max(0,Number(d)||0),t.canonicalFps);H.isPlaying()&&H.pause(),H.seek(m),t.currentTime=H.now(),t.isPlaying=!1,t.mediaForceSyncNextTick=!0,at(t.currentTime),ke(),me(!0)},fe.getTime=()=>H.now(),fe.getDuration=()=>{let d=H.getDuration();return Number.isFinite(d)?d:0},fe.isPlaying=()=>H.isPlaying(),fe.setPlaybackRate=d=>{rn(d),H.setRate(t.playbackRate)},t.capturedTimeline){let d=G(t.capturedTimeline,0);d>0&&H.setDuration(d),t.capturedTimeline.pause()}let ii=window.__player;if(ii){let d=["play","pause","seek","renderSeek","getTime","getDuration","isPlaying"];for(let m of d)Object.defineProperty(ii,m,{get:()=>fe[m],set:h=>{fe[m]=h},configurable:!0})}t.transportRafId=window.requestAnimationFrame(ti),Ve(),me(!0);let sn=()=>{if(!t.tornDown){t.tornDown=!0,t.transportRafId!=null&&(window.cancelAnimationFrame(t.transportRafId),t.transportRafId=null),t.transportClock=null,Ae.destroy(),ee!=null&&(window.clearTimeout(ee),ee=null),s!=null&&(window.cancelAnimationFrame(s),s=null),_e(),t.controlBridgeHandler&&(window.removeEventListener("message",t.controlBridgeHandler),t.controlBridgeHandler=null),n&&(window.removeEventListener("error",n),n=null),i&&(window.removeEventListener("unhandledrejection",i),i=null),t.beforeUnloadHandler&&(window.removeEventListener("beforeunload",t.beforeUnloadHandler),t.beforeUnloadHandler=null),Lt.disablePickMode();for(let d of t.deterministicAdapters)if(!(!d||typeof d.revert!="function"))try{d.revert()}catch(m){R("runtime.init.site12",m)}t.deterministicAdapters=[];for(let d of r.splice(0))try{d()}catch(m){R("runtime.init.site13",m)}for(let d of t.injectedCompStyles)try{d.remove()}catch(m){R("runtime.init.site14",m)}t.injectedCompStyles=[];for(let d of t.injectedCompScripts)try{d.remove()}catch(m){R("runtime.init.site15",m)}t.injectedCompScripts=[],t.capturedTimeline=null,e.__hfRuntimeTeardown===sn&&(e.__hfRuntimeTeardown=null)}};e.__hfRuntimeTeardown=sn,t.beforeUnloadHandler=sn,window.addEventListener("beforeunload",t.beforeUnloadHandler)}var oo=["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"],Vn=[[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 ja(t){if(t<=255)return oo[t];let e=0,n=Vn.length-1;for(;e<=n;){let i=e+n>>1,r=Vn[i];if(t<r[0]){n=i-1;continue}if(t>r[1]){e=i+1;continue}return r[2]}return"L"}function Ga(t){let e=t.length;if(e===0)return null;let n=new Array(e),i=!1;for(let l=0;l<e;){let a=t.charCodeAt(l),f=a,p=1;if(a>=55296&&a<=56319&&l+1<e){let C=t.charCodeAt(l+1);C>=56320&&C<=57343&&(f=(a-55296<<10)+(C-56320)+65536,p=2)}let g=ja(f);(g==="R"||g==="AL"||g==="AN")&&(i=!0);for(let C=0;C<p;C++)n[l+C]=g;l+=p}if(!i)return null;let r=0;for(let l=0;l<e;l++){let a=n[l];if(a==="L"){r=0;break}if(a==="R"||a==="AL"){r=1;break}}let o=new Int8Array(e);for(let l=0;l<e;l++)o[l]=r;let s=r&1?"R":"L",c=s,u=c;for(let l=0;l<e;l++)n[l]==="NSM"?n[l]=u:u=n[l];u=c;for(let l=0;l<e;l++){let a=n[l];a==="EN"?n[l]=u==="AL"?"AN":"EN":(a==="R"||a==="L"||a==="AL")&&(u=a)}for(let l=0;l<e;l++)n[l]==="AL"&&(n[l]="R");for(let l=1;l<e-1;l++)n[l]==="ES"&&n[l-1]==="EN"&&n[l+1]==="EN"&&(n[l]="EN"),n[l]==="CS"&&(n[l-1]==="EN"||n[l-1]==="AN")&&n[l+1]===n[l-1]&&(n[l]=n[l-1]);for(let l=0;l<e;l++){if(n[l]!=="EN")continue;let a;for(a=l-1;a>=0&&n[a]==="ET";a--)n[a]="EN";for(a=l+1;a<e&&n[a]==="ET";a++)n[a]="EN"}for(let l=0;l<e;l++){let a=n[l];(a==="WS"||a==="ES"||a==="ET"||a==="CS")&&(n[l]="ON")}u=c;for(let l=0;l<e;l++){let a=n[l];a==="EN"?n[l]=u==="L"?"L":"EN":(a==="R"||a==="L")&&(u=a)}for(let l=0;l<e;l++){if(n[l]!=="ON")continue;let a=l+1;for(;a<e&&n[a]==="ON";)a++;let f=l>0?n[l-1]:c,p=a<e?n[a]:c,g=f!=="L"?"R":"L";if(g===(p!=="L"?"R":"L"))for(let w=l;w<a;w++)n[w]=g;l=a-1}for(let l=0;l<e;l++)n[l]==="ON"&&(n[l]=s);for(let l=0;l<e;l++){let a=n[l];(o[l]&1)===0?a==="R"?o[l]++:(a==="AN"||a==="EN")&&(o[l]+=2):(a==="L"||a==="AN"||a==="EN")&&o[l]++}return o}function so(t,e){let n=Ga(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 Va=/[ \\t\\n\\r\\f]+/g,$a=/[\\t\\n\\r\\f]| {2,}|^ | $/;function Ka(t){let e=t??"normal";return e==="pre-wrap"?{mode:e,preserveOrdinarySpaces:!0,preserveHardBreaks:!0}:{mode:e,preserveOrdinarySpaces:!1,preserveHardBreaks:!1}}function Ja(t){if(!$a.test(t))return t;let e=t.replace(Va," ");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 Qa(t){return/[\\r\\f]/.test(t)?t.replace(/\\r\\n/g,`\n`).replace(/[\\r\\f]/g,`\n`):t.replace(/\\r\\n/g,`\n`)}var $n=null,Ya;function Za(){return $n===null&&($n=new Intl.Segmenter(Ya,{granularity:"word"})),$n}var Xa=/\\p{Script=Arabic}/u,Zt=/\\p{M}/u,ho=/\\p{Nd}/u;function ao(t){return Xa.test(t)}function lo(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 Le(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(lo(r))return!0;e++;continue}}if(lo(n))return!0}}return!1}function el(t){let e=tn(t);return e!==null&&(en.has(e)||je.has(e))}var tl=new Set(["\\xA0","\\u202F","\\u2060","\\uFEFF"]);function nl(t){return Le(t)}function il(t){let e=tn(t);return e!==null&&tl.has(e)}function Xt(t){return!el(t)&&!il(t)}var en=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"]),Dt=new Set([\'"\',"(","[","{","\\u201C","\\u2018","\\xAB","\\u2039","\\uFF08","\\u3014","\\u3008","\\u300A","\\u300C","\\u300E","\\u3010","\\u3016","\\u3018","\\u301A"]),Jn=new Set(["\'","\\u2019"]),je=new Set([".",",","!","?",":",";","\\u060C","\\u061B","\\u061F","\\u0964","\\u0965","\\u104A","\\u104B","\\u104C","\\u104D","\\u104F",")","]","}","%",\'"\',"\\u201D","\\u2019","\\xBB","\\u203A","\\u2026"]),rl=new Set([":",".","\\u060C","\\u061B"]),ol=new Set(["\\u104F"]),sl=new Set(["\\u201D","\\u2019","\\xBB","\\u203A","\\u300D","\\u300F","\\u3011","\\u300B","\\u3009","\\u3015","\\uFF09"]);function al(t){if(Qn(t))return!0;let e=!1;for(let n of t){if(je.has(n)){e=!0;continue}if(!(e&&Zt.test(n)))return!1}return e}function ll(t){for(let e of t)if(!en.has(e)&&!je.has(e))return!1;return t.length>0}function ul(t){if(Qn(t))return!0;for(let e of t)if(!Dt.has(e)&&!Jn.has(e)&&!Zt.test(e))return!1;return t.length>0}function Qn(t){let e=!1;for(let n of t)if(!(n==="\\\\"||Zt.test(n))){if(Dt.has(n)||je.has(n)||Jn.has(n)){e=!0;continue}return!1}return e}function xo(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 tn(t){if(t.length===0)return null;let e=xo(t,t.length);return t.slice(e)}function cl(t){let e=Array.from(t),n=e.length;for(;n>0;){let i=e[n-1];if(Zt.test(i)){n--;continue}if(Dt.has(i)||Jn.has(i)){n--;continue}break}return n<=0||n===e.length?null:{head:e.slice(0,n).join(""),tail:e.slice(n).join("")}}function dl(t,e,n){return n==="text"&&!e&&t.length===1&&t!=="-"&&t!=="\\u2014"?t:null}function uo(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 c=r.repeat(s);return t[i]=c,c}function co(t,e){return t&&e!==null&&rl.has(e)}function fl(t){let e=tn(t);return e!==null&&ol.has(e)}function ml(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 nn(t){let e=t.length;for(;e>0;){let n=xo(t,e),i=t.slice(n,e);if(sl.has(i))return!0;if(!je.has(i))return!1;e=n}return!1}function pl(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 hl=/[\\x20\\t\\n\\xA0\\xAD\\u200B\\u202F\\u2060\\uFEFF]/;function Te(t){return t.length===1?t[0]:t.join("")}function xl(t,e){let n=[];for(let i=t.length-1;i>=0;i--)n.push(t[i]);return n.push(e),Te(n)}function gl(t,e,n,i){if(!hl.test(t))return[{text:t,isWordLike:e,kind:"text",start:n}];let r=[],o=null,s=[],c=n,u=!1,l=0;for(let a of t){let f=pl(a,i),p=f==="text"&&e;if(o!==null&&f===o&&p===u){s.push(a),l+=a.length;continue}o!==null&&r.push({text:Te(s),isWordLike:u,kind:o,start:c}),o=f,s=[a],c=n+l,u=p,l+=a.length}return o!==null&&r.push({text:Te(s),isWordLike:u,kind:o,start:c}),r}function Kn(t){return t==="space"||t==="preserved-space"||t==="zero-width-break"||t==="hard-break"}var yl=/^[A-Za-z][A-Za-z0-9+.-]*:$/;function Sl(t,e){let n=t.texts[e];return n.startsWith("www.")?!0:yl.test(n)&&e+1<t.len&&t.kinds[e+1]==="text"&&t.texts[e+1]==="//"}function bl(t){return t.includes("?")&&(t.includes("://")||t.startsWith("www."))}function Al(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"||!Sl(t,s))continue;let c=[e[s]],u=s+1;for(;u<t.len&&!Kn(i[u]);){c.push(e[u]),n[s]=!0;let l=e[u].includes("?");if(i[u]="text",e[u]="",u++,l)break}e[s]=Te(c)}let o=0;for(let s=0;s<e.length;s++){let c=e[s];c.length!==0&&(o!==s&&(e[o]=c,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 El(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]),!bl(s))continue;let c=o+1;if(c>=t.len||Kn(t.kinds[c]))continue;let u=[],l=t.starts[c],a=c;for(;a<t.len&&!Kn(t.kinds[a]);)u.push(t.texts[a]),a++;u.length>0&&(e.push(Te(u)),n.push(!0),i.push("text"),r.push(l),o=a-1)}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}var Fl=new Set([":","-","/","\\xD7",",",".","+","\\u2013","\\u2014"]),fo=/^[A-Za-z0-9_]+[,:;]*$/,mo=/[,:;]+$/;function go(t){for(let e of t)if(ho.test(e))return!0;return!1}function vt(t){if(t.length===0)return!1;for(let e of t)if(!(ho.test(e)||Fl.has(e)))return!1;return!0}function wl(t){let e=[],n=[],i=[],r=[];for(let o=0;o<t.len;o++){let s=t.texts[o],c=t.kinds[o];if(c==="text"&&vt(s)&&go(s)){let u=[s],l=o+1;for(;l<t.len&&t.kinds[l]==="text"&&vt(t.texts[l]);)u.push(t.texts[l]),l++;e.push(Te(u)),n.push(!0),i.push("text"),r.push(t.starts[o]),o=l-1;continue}e.push(s),n.push(t.isWordLike[o]),i.push(c),r.push(t.starts[o])}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function Nl(t){let e=[],n=[],i=[],r=[];for(let o=0;o<t.len;o++){let s=t.texts[o],c=t.kinds[o],u=t.isWordLike[o];if(c==="text"&&u&&fo.test(s)){let l=[s],a=mo.test(s),f=o+1;for(;a&&f<t.len&&t.kinds[f]==="text"&&t.isWordLike[f]&&fo.test(t.texts[f]);){let p=t.texts[f];l.push(p),a=mo.test(p),f++}e.push(Te(l)),n.push(!0),i.push("text"),r.push(t.starts[o]),o=f-1;continue}e.push(s),n.push(u),i.push(c),r.push(t.starts[o])}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function Cl(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 c=s.split("-"),u=c.length>1;for(let l=0;l<c.length;l++){let a=c[l];if(!u)break;(a.length===0||!go(a)||!vt(a))&&(u=!1)}if(u){let l=0;for(let a=0;a<c.length;a++){let f=c[a],p=a<c.length-1?`${f}-`:f;e.push(p),n.push(!0),i.push("text"),r.push(t.starts[o]+l),l+=p.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 Ml(t){let e=[],n=[],i=[],r=[],o=0;for(;o<t.len;){let s=[t.texts[o]],c=t.isWordLike[o],u=t.kinds[o],l=t.starts[o];if(u==="glue"){let a=[s[0]],f=l;for(o++;o<t.len&&t.kinds[o]==="glue";)a.push(t.texts[o]),o++;let p=Te(a);if(o<t.len&&t.kinds[o]==="text")s[0]=p,s.push(t.texts[o]),c=t.isWordLike[o],u="text",l=f,o++;else{e.push(p),n.push(!1),i.push("glue"),r.push(f);continue}}else o++;if(u==="text")for(;o<t.len&&t.kinds[o]==="glue";){let a=[];for(;o<t.len&&t.kinds[o]==="glue";)a.push(t.texts[o]),o++;let f=Te(a);if(o<t.len&&t.kinds[o]==="text"){s.push(f,t.texts[o]),c=c||t.isWordLike[o],o++;continue}s.push(f)}e.push(Te(s)),n.push(c),i.push(u),r.push(l)}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function Tl(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"||!Le(e[o])||!Le(e[o+1]))continue;let s=cl(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 po(t,e,n){let i=Za(),r=0,o=[],s=[],c=[],u=[],l=[],a=[],f=[],p=[],g=[],C=[],w=[],S=[];for(let F of i.segment(t))for(let x of gl(F.segment,F.isWordLike??!1,F.index,n)){let ce=function(){a[L]!==null&&(s[L]=[uo(o,a,f,L)],a[L]=null),s[L].push(x.text),c[L]=c[L]||x.isWordLike,p[L]=p[L]||N,g[L]=g[L]||T,C[L]=P,w[L]=J,S[L]=co(g[L],_)},b=x.kind==="text",E=dl(x.text,x.isWordLike,x.kind),N=Le(x.text),T=ao(x.text),_=tn(x.text),P=nn(x.text),J=fl(x.text),L=r-1;e.carryCJKAfterClosingQuote&&b&&r>0&&u[L]==="text"&&N&&p[L]&&C[L]||b&&r>0&&u[L]==="text"&&ll(x.text)&&p[L]||b&&r>0&&u[L]==="text"&&w[L]?ce():b&&r>0&&u[L]==="text"&&x.isWordLike&&T&&S[L]?(ce(),c[L]=!0):E!==null&&r>0&&u[L]==="text"&&a[L]===E?f[L]=(f[L]??1)+1:b&&!x.isWordLike&&r>0&&u[L]==="text"&&(al(x.text)||x.text==="-"&&c[L])?ce():(o[r]=x.text,s[r]=[x.text],c[r]=x.isWordLike,u[r]=x.kind,l[r]=x.start,a[r]=E,f[r]=E===null?0:1,p[r]=N,g[r]=T,C[r]=P,w[r]=J,S[r]=co(T,_),r++)}for(let F=0;F<r;F++){if(a[F]!==null){o[F]=uo(o,a,f,F);continue}o[F]=Te(s[F])}for(let F=1;F<r;F++)u[F]==="text"&&!c[F]&&Qn(o[F])&&u[F-1]==="text"&&(o[F-1]+=o[F],c[F-1]=c[F-1]||c[F],o[F]="");let U=Array.from({length:r},()=>null),B=-1;for(let F=r-1;F>=0;F--){let x=o[F];if(x.length!==0){if(u[F]==="text"&&!c[F]&&ul(x)&&B>=0&&u[B]==="text"){let b=U[B]??[];b.push(x),U[B]=b,l[B]=l[F],o[F]="";continue}B=F}}for(let F=0;F<r;F++){let x=U[F];x!=null&&(o[F]=xl(x,o[F]))}let M=0;for(let F=0;F<r;F++){let x=o[F];x.length!==0&&(M!==F&&(o[M]=x,c[M]=c[F],u[M]=u[F],l[M]=l[F]),M++)}o.length=M,c.length=M,u.length=M,l.length=M;let X=Ml({len:M,texts:o,isWordLike:c,kinds:u,starts:l}),D=Tl(Nl(Cl(wl(El(Al(X))))));for(let F=0;F<D.len-1;F++){let x=ml(D.texts[F]);x!==null&&(D.kinds[F]!=="space"&&D.kinds[F]!=="preserved-space"||D.kinds[F+1]!=="text"||!ao(D.texts[F+1])||(D.texts[F]=x.space,D.isWordLike[F]=!1,D.kinds[F]=D.kinds[F]==="preserved-space"?"preserved-space":"space",D.texts[F+1]=x.marks+D.texts[F+1],D.starts[F+1]=D.starts[F]+x.space.length))}return D}function kl(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 vl(t){if(t.len<=1)return t;let e=[],n=[],i=[],r=[],o=null,s=!1,c=0,u=!1,l=!1;function a(){o!==null&&(e.push(Te(o)),n.push(s),i.push("text"),r.push(c),o=null)}for(let f=0;f<t.len;f++){let p=t.texts[f],g=t.kinds[f],C=t.isWordLike[f],w=t.starts[f];if(g==="text"){let S=nl(p),U=Xt(p);if(o!==null&&u&&l){o.push(p),s=s||C,u=u||S,l=U;continue}a(),o=[p],s=C,c=w,u=S,l=U;continue}a(),e.push(p),n.push(C),i.push(g),r.push(w)}return a(),{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function yo(t,e,n="normal",i="normal"){let r=Ka(n),o=r.mode==="pre-wrap"?Qa(t):Ja(t);if(o.length===0)return{normalized:o,chunks:[],len:0,texts:[],isWordLike:[],kinds:[],starts:[]};let s=i==="keep-all"?vl(po(o,e,r)):po(o,e,r);return{normalized:o,chunks:kl(s,r),...s}}var rt=null,So=new Map,ot=null,Dl=96,Ll=/\\p{Emoji_Presentation}/u,_l=/[\\p{Emoji_Presentation}\\p{Extended_Pictographic}\\p{Regional_Indicator}\\uFE0F\\u20E3]/u,Yn=null,bo=new Map;function Zn(){if(rt!==null)return rt;if(typeof OffscreenCanvas<"u")return rt=new OffscreenCanvas(1,1).getContext("2d"),rt;if(typeof document<"u")return rt=document.createElement("canvas").getContext("2d"),rt;throw new Error("Text measurement requires OffscreenCanvas or a DOM canvas context.")}function Rl(t){let e=So.get(t);return e||(e=new Map,So.set(t,e)),e}function We(t,e){let n=e.get(t);return n===void 0&&(n={width:Zn().measureText(t).width,containsCJK:Le(t)},e.set(t,n)),n}function st(){if(ot!==null)return ot;if(typeof navigator>"u")return ot={lineFitEpsilon:.005,carryCJKAfterClosingQuote:!1,preferPrefixWidthsForBreakableRuns:!1,preferEarlySoftHyphenBreak:!1},ot;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 ot={lineFitEpsilon:n?1/64:.005,carryCJKAfterClosingQuote:i,preferPrefixWidthsForBreakableRuns:n,preferEarlySoftHyphenBreak:n},ot}function Bl(t){let e=t.match(/(\\d+(?:\\.\\d+)?)\\s*px/);return e?parseFloat(e[1]):16}function Ao(){return Yn===null&&(Yn=new Intl.Segmenter(void 0,{granularity:"grapheme"})),Yn}function Ol(t){return Ll.test(t)||t.includes("\\uFE0F")}function Eo(t){return _l.test(t)}function Pl(t,e){let n=bo.get(t);if(n!==void 0)return n;let i=Zn();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 bo.set(t,n),n}function Il(t){let e=0,n=Ao();for(let i of n.segment(t))Ol(i.segment)&&e++;return e}function Wl(t,e){return e.emojiCount===void 0&&(e.emojiCount=Il(t)),e.emojiCount}function Ge(t,e,n){return n===0?e.width:e.width-Wl(t,e)*n}function Fo(t,e,n,i,r){if(e.breakableFitAdvances!==void 0)return e.breakableFitAdvances;let o=Ao(),s=[];for(let a of o.segment(t))s.push(a.segment);if(s.length<=1)return e.breakableFitAdvances=null,e.breakableFitAdvances;if(r==="sum-graphemes"){let a=[];for(let f of s){let p=We(f,n);a.push(Ge(f,p,i))}return e.breakableFitAdvances=a,e.breakableFitAdvances}if(r==="pair-context"||s.length>Dl){let a=[],f=null,p=0;for(let g of s){let C=We(g,n),w=Ge(g,C,i);if(f===null)a.push(w);else{let S=f+g,U=We(S,n);a.push(Ge(S,U,i)-p)}f=g,p=w}return e.breakableFitAdvances=a,e.breakableFitAdvances}let c=[],u="",l=0;for(let a of s){u+=a;let f=We(u,n),p=Ge(u,f,i);c.push(p-l),l=p}return e.breakableFitAdvances=c,e.breakableFitAdvances}function wo(t,e){let n=Zn();n.font=t;let i=Rl(t),r=Bl(t),o=e?Pl(t,r):0;return{cache:i,fontSize:r,emojiCorrection:o}}function Hl(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 ql(t,e){if(e<=0)return 0;let n=t%e;return Math.abs(n)<=1e-6?e:e-n}function Ul(t,e,n,i,r){let o=0,s=e;for(;o<t.length;){let c=s+t[o];if((o+1<t.length?c+r:c)>n+i)break;s=c,o++}return{fitCount:o,fittedWidth:s}}function No(t,e){return t.simpleLineWalkFastPath?Co(t,e):Mo(t,e)}function Co(t,e,n){let{widths:i,kinds:r,breakableFitAdvances:o}=t;if(i.length===0)return 0;let c=st().lineFitEpsilon,u=e+c,l=0,a=0,f=!1,p=0,g=0,C=0,w=0,S=-1,U=0;function B(){S=-1,U=0}function M(E=C,N=w,T=a){l++,n?.({startSegmentIndex:p,startGraphemeIndex:g,endSegmentIndex:E,endGraphemeIndex:N,width:T}),a=0,f=!1,B()}function X(E,N){f=!0,p=E,g=0,C=E+1,w=0,a=N}function D(E,N,T){f=!0,p=E,g=N,C=E,w=N+1,a=T}function F(E,N){if(!f){X(E,N);return}a+=N,C=E+1,w=0}function x(E,N){let T=o[E];for(let _=N;_<T.length;_++){let P=T[_];f?a+P>u?(M(),D(E,_,P)):(a+=P,C=E,w=_+1):D(E,_,P)}f&&C===E&&w===T.length&&(C=E+1,w=0)}let b=0;for(;b<i.length&&!(!f&&(b=Hl(t,b),b>=i.length));){let E=i[b],N=r[b],T=N==="space"||N==="preserved-space"||N==="tab"||N==="zero-width-break"||N==="soft-hyphen";if(!f){E>e&&o[b]!==null?x(b,0):X(b,E),T&&(S=b+1,U=a-E),b++;continue}if(a+E>u){if(T){F(b,E),M(b+1,0,a-E),b++;continue}if(S>=0){if(C>S||C===S&&w>0){M();continue}M(S,0,U);continue}if(E>e&&o[b]!==null){M(),x(b,0),b++;continue}M();continue}F(b,E),T&&(S=b+1,U=a-E),b++}return f&&M(),l}function Mo(t,e,n){if(t.simpleLineWalkFastPath)return Co(t,e,n);let{widths:i,lineEndFitAdvances:r,lineEndPaintAdvances:o,kinds:s,breakableFitAdvances:c,discretionaryHyphenWidth:u,tabStopAdvance:l,chunks:a}=t;if(i.length===0||a.length===0)return 0;let f=st(),p=f.lineFitEpsilon,g=e+p,C=0,w=0,S=!1,U=0,B=0,M=0,X=0,D=-1,F=0,x=0,b=null;function E(){D=-1,F=0,x=0,b=null}function N($=M,G=X,I=w){C++,n?.({startSegmentIndex:U,startGraphemeIndex:B,endSegmentIndex:$,endGraphemeIndex:G,width:I}),w=0,S=!1,E()}function T($,G){S=!0,U=$,B=0,M=$+1,X=0,w=G}function _($,G,I){S=!0,U=$,B=G,M=$,X=G+1,w=I}function P($,G){if(!S){T($,G);return}w+=G,M=$+1,X=0}function J($,G,I,Z){if(!G)return;let xe=$==="tab"?0:r[I],we=$==="tab"?Z:o[I];D=I+1,F=w-Z+xe,x=w-Z+we,b=$}function L($,G){let I=c[$];for(let Z=G;Z<I.length;Z++){let xe=I[Z];S?w+xe>g?(N(),_($,Z,xe)):(w+=xe,M=$,X=Z+1):_($,Z,xe)}S&&M===$&&X===I.length&&(M=$+1,X=0)}function ce($){if(b!=="soft-hyphen")return!1;let G=c[$];if(G==null)return!1;let{fitCount:I,fittedWidth:Z}=Ul(G,w,e,p,u);return I===0?!1:(w=Z,M=$,X=I,E(),I===G.length?(M=$+1,X=0,!0):(N($,I,Z+u),L($,I),!0))}function ge($){C++,n?.({startSegmentIndex:$.startSegmentIndex,startGraphemeIndex:0,endSegmentIndex:$.consumedEndSegmentIndex,endGraphemeIndex:0,width:0}),E()}for(let $=0;$<a.length;$++){let G=a[$];if(G.startSegmentIndex===G.endSegmentIndex){ge(G);continue}S=!1,w=0,U=G.startSegmentIndex,B=0,M=G.startSegmentIndex,X=0,E();let I=G.startSegmentIndex;for(;I<G.endSegmentIndex;){let Z=s[I],xe=Z==="space"||Z==="preserved-space"||Z==="tab"||Z==="zero-width-break"||Z==="soft-hyphen",we=Z==="tab"?ql(w,l):i[I];if(Z==="soft-hyphen"){S&&(M=I+1,X=0,D=I+1,F=w+u,x=w+u,b=Z),I++;continue}if(!S){we>e&&c[I]!==null?L(I,0):T(I,we),J(Z,xe,I,we),I++;continue}if(w+we>g){let k=w+(Z==="tab"?0:r[I]),O=w+(Z==="tab"?we:o[I]);if(b==="soft-hyphen"&&f.preferEarlySoftHyphenBreak&&F<=g){N(D,0,x);continue}if(b==="soft-hyphen"&&ce(I)){I++;continue}if(xe&&k<=g){P(I,we),N(I+1,0,O),I++;continue}if(D>=0&&F<=g){if(M>D||M===D&&X>0){N();continue}let ie=D;N(ie,0,x),I=ie;continue}if(we>e&&c[I]!==null){N(),L(I,0),I++;continue}N();continue}P(I,we),J(Z,xe,I,we),I++}if(S){let Z=D===G.consumedEndSegmentIndex?x:w;N(G.consumedEndSegmentIndex,0,Z)}}return C}var Xn=null;function zl(){return Xn===null&&(Xn=new Intl.Segmenter(void 0,{granularity:"grapheme"})),Xn}function jl(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 Gl(t,e){let n=[],i=[],r=0,o=!1,s=!1,c=!1;function u(){i.length!==0&&(n.push({text:i.length===1?i[0]:i.join(""),start:r}),i=[],o=!1,s=!1,c=!1)}function l(f,p,g){i=[f],r=p,o=g,s=nn(f),c=Dt.has(f)}function a(f,p){i.push(f),o=o||p;let g=nn(f);f.length===1&&je.has(f)?s=s||g:s=g,c=!1}for(let f of zl().segment(t)){let p=f.segment,g=Le(p);if(i.length===0){l(p,f.index,g);continue}if(c||en.has(p)||je.has(p)||e.carryCJKAfterClosingQuote&&g&&s){a(p,g);continue}if(!o&&!g){a(p,g);continue}u(),l(p,f.index,g)}return u(),n}function Vl(t){if(t.length<=1)return t;let e=[],n=[t[0].text],i=t[0].start,r=Le(t[0].text),o=Xt(t[0].text);function s(){e.push({text:n.length===1?n[0]:n.join(""),start:i})}for(let c=1;c<t.length;c++){let u=t[c],l=Le(u.text),a=Xt(u.text);if(r&&o){n.push(u.text),r=r||l,o=a;continue}s(),n=[u.text],i=u.start,r=l,o=a}return s(),e}function $l(t,e,n,i){let r=st(),{cache:o,emojiCorrection:s}=wo(e,Eo(t.normalized)),c=Ge("-",We("-",o),s),l=Ge(" ",We(" ",o),s)*8;if(t.len===0)return jl(n);let a=[],f=[],p=[],g=[],C=t.chunks.length<=1,w=n?[]:null,S=[],U=n?[]:null,B=Array.from({length:t.len});function M(x,b,E,N,T,_,P){T!=="text"&&T!=="space"&&T!=="zero-width-break"&&(C=!1),a.push(b),f.push(E),p.push(N),g.push(T),w?.push(_),S.push(P),U!==null&&U.push(x)}function X(x,b,E,N,T){let _=We(x,o),P=Ge(x,_,s),J=b==="space"||b==="preserved-space"||b==="zero-width-break"?0:P,L=b==="space"||b==="zero-width-break"?0:P;if(T&&N&&x.length>1){let ce="sum-graphemes";vt(x)?ce="pair-context":r.preferPrefixWidthsForBreakableRuns&&(ce="segment-prefixes");let ge=Fo(x,_,o,s,ce);M(x,P,J,L,b,E,ge);return}M(x,P,J,L,b,E,null)}for(let x=0;x<t.len;x++){B[x]=a.length;let b=t.texts[x],E=t.isWordLike[x],N=t.kinds[x],T=t.starts[x];if(N==="soft-hyphen"){M(b,0,c,c,N,T,null);continue}if(N==="hard-break"){M(b,0,0,0,N,T,null);continue}if(N==="tab"){M(b,0,0,0,N,T,null);continue}let _=We(b,o);if(N==="text"&&_.containsCJK){let P=Gl(b,r),J=i==="keep-all"?Vl(P):P;for(let L=0;L<J.length;L++){let ce=J[L];X(ce.text,"text",T+ce.start,E,i==="keep-all"||!Le(ce.text))}continue}X(b,N,T,E,!0)}let D=Kl(t.chunks,B,a.length),F=w===null?null:so(t.normalized,w);return U!==null?{widths:a,lineEndFitAdvances:f,lineEndPaintAdvances:p,kinds:g,simpleLineWalkFastPath:C,segLevels:F,breakableFitAdvances:S,discretionaryHyphenWidth:c,tabStopAdvance:l,chunks:D,segments:U}:{widths:a,lineEndFitAdvances:f,lineEndPaintAdvances:p,kinds:g,simpleLineWalkFastPath:C,segLevels:F,breakableFitAdvances:S,discretionaryHyphenWidth:c,tabStopAdvance:l,chunks:D}}function Kl(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,c=o.endSegmentIndex<e.length?e[o.endSegmentIndex]:n,u=o.consumedEndSegmentIndex<e.length?e[o.consumedEndSegmentIndex]:n;i.push({startSegmentIndex:s,endSegmentIndex:c,consumedEndSegmentIndex:u})}return i}function Jl(t,e,n,i){let r=i?.wordBreak??"normal",o=yo(t,st(),i?.whiteSpace,r);return $l(o,e,n,r)}function To(t,e,n){return Jl(t,e,!1,n)}function ko(t,e,n){let i=No(t,e);return{lineCount:i,height:i*n}}var Ql={maxWidth:1600,baseFontSize:78,minFontSize:42,fontWeight:900,fontFamily:"Outfit",step:2};function vo(t,e){let n={...Ql,...e},i=1.2;for(let r=n.baseFontSize;r>=n.minFontSize;r-=n.step){let o=`${n.fontWeight} ${r}px ${n.fontFamily}`,s=To(t,o),{lineCount:c}=ko(s,n.maxWidth,r*i);if(c<=1)return{fontSize:r,fits:!0}}return{fontSize:n.minFontSize,fits:!1}}window.__timelines=window.__timelines||{};window.__hyperframes={fitTextFontSize:vo,getVariables:Yr};function Do(){let t=window;t.__hyperframeRuntimeBootstrapped||(t.__hyperframeRuntimeBootstrapped=!0,ro())}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Do,{once:!0}):Do();})();\n';
|
|
7360
|
+
RUNTIME_IIFE = '"use strict";(()=>{var Wo=Object.create;var cn=Object.defineProperty;var Ho=Object.getOwnPropertyDescriptor;var qo=Object.getOwnPropertyNames;var Uo=Object.getPrototypeOf,zo=Object.prototype.hasOwnProperty;var jo=(t,e,n)=>e in t?cn(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var Y=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Go=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of qo(e))!zo.call(t,r)&&r!==n&&cn(t,r,{get:()=>e[r],enumerable:!(i=Ho(e,r))||i.enumerable});return t};var Vo=(t,e,n)=>(n=t!=null?Wo(Uo(t)):{},Go(e||!t||!t.__esModule?cn(n,"default",{value:t,enumerable:!0}):n,t));var Se=(t,e,n)=>jo(t,typeof e!="symbol"?e+"":e,n);var ki=Y((Hu,xn)=>{var K=String,Ti=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}};xn.exports=Ti();xn.exports.createColors=Ti});var gn=Y(()=>{});var Ot=Y((zu,_i)=>{"use strict";var vi=ki(),Di=gn(),ft=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=a=>a,r=a=>a,o=a=>a;if(e){let{bold:a,gray:f,red:p}=vi.createColors(!0);r=g=>a(p(g)),i=g=>f(g),Di&&(o=g=>Di(g))}let s=n.split(/\\r?\\n/),c=Math.max(this.line-3,0),u=Math.min(this.line+2,s.length),l=String(u).length;return s.slice(c,u).map((a,f)=>{let p=c+1+f,g=" "+(" "+p).slice(-l)+" | ";if(p===this.line){if(a.length>160){let w=20,S=Math.max(0,this.column-w),U=Math.max(this.column+w,this.endColumn+w),B=a.slice(S,U),M=i(g.replace(/\\d/g," "))+a.slice(0,Math.min(this.column-1,w-1)).replace(/[^\\t]/g," ");return r(">")+i(g)+o(B)+`\n `+M+r("^")}let C=i(g.replace(/\\d/g," "))+a.slice(0,this.column-1).replace(/[^\\t]/g," ");return r(">")+i(g)+o(a)+`\n `+C+r("^")}return" "+i(g)+o(a)}).join(`\n`)}toString(){let e=this.showSourceCode();return e&&(e=`\n\n`+e+`\n`),this.name+": "+this.message+e}};_i.exports=ft;ft.default=ft});var yn=Y((ju,Li)=>{"use strict";var ms=/(<)(\\/?style\\b)/gi,ps=/(<)(!--)/g;function He(t){return typeof t!="string"||!t.includes("<")?t:t.replace(ms,"\\\\3c $2").replace(ps,"\\\\3c $2")}var Ri={after:`\n`,beforeClose:`\n`,beforeComment:`\n`,beforeDecl:`\n`,beforeOpen:" ",beforeRule:`\n`,colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function hs(t){return t[0].toUpperCase()+t.slice(1)}var mt=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 c=0;c<o;c++)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 c=n[s],u=this.raw(c,"before");u&&this.builder(o?u:He(u)),this.stringify(c,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 Ri[i];let s=e.root(),c=s.rawCache||(s.rawCache={});if(typeof c[i]<"u")return c[i];if(i==="before"||i==="after")return this.beforeAfter(e,i);{let u="raw"+hs(i);this[u]?r=this[u](s,e):s.walk(l=>{if(r=l.raws[n],typeof r<"u")return!1})}return typeof r>"u"&&(r=Ri[i]),c[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)}};Li.exports=mt;mt.default=mt});var pt=Y((Gu,Bi)=>{"use strict";var xs=yn();function Sn(t,e){new xs(e).stringify(t)}Bi.exports=Sn;Sn.default=Sn});var Pt=Y((Vu,bn)=>{"use strict";bn.exports.isClean=Symbol("isClean");bn.exports.my=Symbol("my")});var gt=Y(($u,Oi)=>{"use strict";var gs=Ot(),ys=yn(),Ss=pt(),{isClean:ht,my:bs}=Pt();function An(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=>An(s,n)):(o==="object"&&r!==null&&(r=An(r)),n[i]=r)}return n}function Ie(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 xt=class{get proxyOf(){return this}constructor(e={}){this.raws={},this[ht]=!1,this[bs]=!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=An(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 gs(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[ht]=!0}markDirty(){if(this[ht]){this[ht]=!1;let e=this;for(;e=e.parent;)e[ht]=!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(Ie(i,this.source.start),Ie(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=Ie(r,this.source.start),s=o+e;for(let c=o;c<s;c++)r[c]===`\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:Ie(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:Ie(n,this.source.end)+1}:{column:i.column+1,line:i.line,offset:i.offset+1};if(e.word){let s=n.slice(Ie(n,this.source.start),Ie(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:Ie(n,e.start)}:e.index&&(i=this.positionInside(e.index)),e.end?r={column:e.end.column,line:e.end.line,offset:Ie(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 ys().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 c=this[s];if(Array.isArray(c))i[s]=c.map(u=>typeof u=="object"&&u.toJSON?u.toJSON(null,n):u);else if(typeof c=="object"&&c.toJSON)i[s]=c.toJSON(null,n);else if(s==="source"){if(c==null)continue;let u=n.get(c.input);u==null&&(u=o,n.set(c.input,o),o++),i[s]={end:c.end,inputId:u,start:c.start}}else i[s]=c}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=Ss){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)}};Oi.exports=xt;xt.default=xt});var St=Y((Ku,Pi)=>{"use strict";var As=gt(),yt=class extends As{constructor(e){super(e),this.type="comment"}};Pi.exports=yt;yt.default=yt});var At=Y((Ju,Ii)=>{"use strict";var Es=gt(),bt=class extends Es{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"}};Ii.exports=bt;bt.default=bt});var qe=Y((Qu,$i)=>{"use strict";var Wi=St(),Hi=At(),Fs=gt(),{isClean:qi,my:Ui}=Pt(),En,zi,ji,Fn;function Gi(t){return t.map(e=>(e.nodes&&(e.nodes=Gi(e.nodes)),delete e.source,e))}function Vi(t){if(t[qi]=!1,t.proxyOf.nodes)for(let e of t.proxyOf.nodes)Vi(e)}var De=class t extends Fs{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 c of o)this.proxyOf.nodes.splice(i,0,c);let s;for(let c in this.indexes)s=this.indexes[c],i<=s&&(this.indexes[c]=s+o.length);return this.markDirty(),this}normalize(e,n){if(typeof e=="string")e=Gi(zi(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 Hi(e)]}else if(e.selector||e.selectors)e=[new Fn(e)];else if(e.name)e=[new En(e)];else if(e.text)e=[new Wi(e)];else throw new Error("Unknown node type in node creation");return e.map(r=>(r[Ui]||t.rebuild(r),r=r.proxyOf,r.parent&&r.parent.removeChild(r),r[qi]&&Vi(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)}))}};De.registerParse=t=>{zi=t};De.registerRule=t=>{Fn=t};De.registerAtRule=t=>{En=t};De.registerRoot=t=>{ji=t};$i.exports=De;De.default=De;De.rebuild=t=>{t.type==="atrule"?Object.setPrototypeOf(t,En.prototype):t.type==="rule"?Object.setPrototypeOf(t,Fn.prototype):t.type==="decl"?Object.setPrototypeOf(t,Hi.prototype):t.type==="comment"?Object.setPrototypeOf(t,Wi.prototype):t.type==="root"&&Object.setPrototypeOf(t,ji.prototype),t[Ui]=!0,t.nodes&&t.nodes.forEach(e=>{De.rebuild(e)})}});var It=Y((Yu,Ji)=>{"use strict";var Ki=qe(),Xe=class extends Ki{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)}};Ji.exports=Xe;Xe.default=Xe;Ki.registerAtRule(Xe)});var Wt=Y((Zu,Zi)=>{"use strict";var ws=qe(),Qi,Yi,Je=class extends ws{constructor(e){super({type:"document",...e}),this.nodes||(this.nodes=[])}toResult(e={}){return new Qi(new Yi,this,e).stringify()}};Je.registerLazyResult=t=>{Qi=t};Je.registerProcessor=t=>{Yi=t};Zi.exports=Je;Je.default=Je});var er=Y((Xu,Xi)=>{var Ns="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict",Cs=(t,e=21)=>(n=e)=>{let i="",r=n|0;for(;r--;)i+=t[Math.random()*t.length|0];return i},Ms=(t=21)=>{let e="",n=t|0;for(;n--;)e+=Ns[Math.random()*64|0];return e};Xi.exports={nanoid:Ms,customAlphabet:Cs}});var Ht=Y(()=>{});var qt=Y(()=>{});var wn=Y(()=>{});var tr=Y(()=>{});var Cn=Y((lc,rr)=>{"use strict";var{existsSync:Ts,readFileSync:ks}=tr(),{dirname:Nn,join:vs}=Ht(),{SourceMapConsumer:nr,SourceMapGenerator:ir}=qt();function Ds(t){return Buffer?Buffer.from(t,"base64").toString():window.atob(t)}var Et=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=Nn(this.mapFile)),r&&(this.text=r)}consumer(){return this.consumerCache||(this.consumerCache=new nr(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 c=e.match(n)||e.match(i);if(c)return Ds(e.substr(c[0].length));let u=e.slice(22);throw u=u.slice(0,u.indexOf(",")),new Error("Unsupported source map encoding "+u)}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=Nn(e),Ts(e)))return this.mapFile=e,ks(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 nr)return ir.fromSourceMap(n).toString();if(n instanceof ir)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=vs(Nn(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)}};rr.exports=Et;Et.default=Et});var Ft=Y((uc,ur)=>{"use strict";var{nanoid:_s}=er(),{isAbsolute:kn,resolve:vn}=Ht(),{SourceMapConsumer:Rs,SourceMapGenerator:Ls}=qt(),{fileURLToPath:or,pathToFileURL:Ut}=wn(),sr=Ot(),Bs=Cn(),Mn=gn(),Tn=Symbol("lineToIndexCache"),Os=!!(Rs&&Ls),ar=!!(vn&&kn);function lr(t){if(t[Tn])return t[Tn];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[Tn]=n,n}var et=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&&(!ar||/^\\w+:\\/\\//.test(n.from)||kn(n.from)?this.file=n.from:this.file=vn(n.from)),ar&&Os){let i=new Bs(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 "+_s(6)+">"),this.map&&(this.map.file=this.from)}error(e,n,i,r={}){let o,s,c,u,l;if(n&&typeof n=="object"){let f=n,p=i;if(typeof f.offset=="number"){u=f.offset;let g=this.fromOffset(u);n=g.line,i=g.col}else n=f.line,i=f.column,u=this.fromLineAndColumn(n,i);if(typeof p.offset=="number"){c=p.offset;let g=this.fromOffset(c);s=g.line,o=g.col}else s=p.line,o=p.column,c=this.fromLineAndColumn(p.line,p.column)}else if(i)u=this.fromLineAndColumn(n,i);else{u=n;let f=this.fromOffset(u);n=f.line,i=f.col}let a=this.origin(n,i,s,o);return a?l=new sr(e,a.endLine===void 0?a.line:{column:a.column,line:a.line},a.endLine===void 0?a.column:{column:a.endColumn,line:a.endLine},a.source,a.file,r.plugin):l=new sr(e,s===void 0?n:{column:i,line:n},s===void 0?i:{column:o,line:s},this.css,this.file,r.plugin),l.input={column:i,endColumn:o,endLine:s,endOffset:c,line:n,offset:u,source:this.css},this.file&&(Ut&&(l.input.url=Ut(this.file).toString()),l.input.file=this.file),l}fromLineAndColumn(e,n){return lr(this)[e-1]+n-1}fromOffset(e){let n=lr(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:vn(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 c;typeof i=="number"&&(c=o.originalPositionFor({column:r,line:i}));let u;kn(s.source)?u=Ut(s.source):u=new URL(s.source,this.map.consumer().sourceRoot||Ut(this.map.mapFile));let l={column:s.column,endColumn:c&&c.column,endLine:c&&c.line,line:s.line,url:u.toString()};if(u.protocol==="file:")if(or)l.file=or(u);else throw new Error("file: protocol is not available in this PostCSS build");let a=o.sourceContentFor(s.source);return a&&(l.source=a),l}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}};ur.exports=et;et.default=et;Mn&&Mn.registerInput&&Mn.registerInput(et)});var tt=Y((cc,mr)=>{"use strict";var cr=qe(),dr,fr,Ue=class extends cr{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 dr(new fr,this,e).stringify()}};Ue.registerLazyResult=t=>{dr=t};Ue.registerProcessor=t=>{fr=t};mr.exports=Ue;Ue.default=Ue;cr.registerRoot(Ue)});var Dn=Y((dc,pr)=>{"use strict";var wt={comma(t){return wt.split(t,[","],!0)},space(t){let e=[" ",`\n`," "];return wt.split(t,e)},split(t,e,n){let i=[],r="",o=!1,s=0,c=!1,u="",l=!1;for(let a of t)l?l=!1:a==="\\\\"?l=!0:c?a===u&&(c=!1):a===\'"\'||a==="\'"?(c=!0,u=a):a==="("?s+=1:a===")"?s>0&&(s-=1):s===0&&e.includes(a)&&(o=!0),o?(r!==""&&i.push(r.trim()),r="",o=!1):r+=a;return(n||r!=="")&&i.push(r.trim()),i}};pr.exports=wt;wt.default=wt});var zt=Y((fc,xr)=>{"use strict";var hr=qe(),Ps=Dn(),nt=class extends hr{get selectors(){return Ps.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=[])}};xr.exports=nt;nt.default=nt;hr.registerRule(nt)});var yr=Y((mc,gr)=>{"use strict";var Is=It(),Ws=St(),Hs=At(),qs=Ft(),Us=Cn(),zs=tt(),js=zt();function Nt(t,e){if(Array.isArray(t))return t.map(r=>Nt(r));let{inputs:n,...i}=t;if(n){e=[];for(let r of n){let o={...r,__proto__:qs.prototype};o.map&&(o.map={...o.map,__proto__:Us.prototype}),e.push(o)}}if(i.nodes&&(i.nodes=t.nodes.map(r=>Nt(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 zs(i);if(i.type==="decl")return new Hs(i);if(i.type==="rule")return new js(i);if(i.type==="comment")return new Ws(i);if(i.type==="atrule")return new Is(i);throw new Error("Unknown node type: "+t.type)}gr.exports=Nt;Nt.default=Nt});var Rn=Y((pc,wr)=>{"use strict";var{dirname:jt,relative:br,resolve:Ar,sep:Er}=Ht(),{SourceMapConsumer:Fr,SourceMapGenerator:Gt}=qt(),{pathToFileURL:Sr}=wn(),Gs=Ft(),Vs=!!(Fr&&Gt),$s=!!(jt&&Ar&&br&&Er),_n=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 Fr(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(),$s&&Vs&&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=Gt.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new Gt({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 Gt({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,(c,u,l)=>{if(this.css+=c,u&&l!=="end"&&(r.generated.line=e,r.generated.column=n-1,u.source&&u.source.start?(r.source=this.sourcePath(u),r.original.line=u.source.start.line,r.original.column=u.source.start.column-1,this.map.addMapping(r)):(r.source=i,r.original.line=1,r.original.column=0,this.map.addMapping(r))),s=c.match(/\\n/g),s?(e+=s.length,o=c.lastIndexOf(`\n`),n=c.length-o):n+=c.length,u&&l!=="start"){let a=u.parent||{raws:{}};(!(u.type==="decl"||u.type==="atrule"&&!u.nodes)||u!==a.last||a.raws.semicolon)&&(u.source&&u.source.end?(r.source=this.sourcePath(u),r.original.line=u.source.end.line,r.original.column=u.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(Ar(i,this.mapOpts.annotation)));let r=br(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 Gs(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(Sr){let i=Sr(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;Er==="\\\\"&&(e=e.replace(/\\\\/g,"/"));let i=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,i),i}};wr.exports=_n});var Mr=Y((hc,Cr)=>{"use strict";var Vt=/[\\t\\n\\f\\r "#\'()/;[\\\\\\]{}]/g,$t=/[\\t\\n\\f\\r !"#\'():;@[\\\\\\]{}]|\\/(?=\\*)/g,Ks=/.[\\r\\n"\'(/\\\\]/,Nr=/[\\da-f]/i;Cr.exports=function(e,n={}){let i=e.css.valueOf(),r=n.ignoreErrors,o,s,c,u,l,a,f,p,g,C,w=i.length,S=0,U=[],B=[],M=-1;function X(){return S}function D(E){throw e.error("Unclosed "+E,S)}function F(){return B.length===0&&S>=w}function x(E){if(B.length)return B.pop();if(S>=w)return;let N=E?E.ignoreUnclosed:!1;switch(o=i.charCodeAt(S),o){case 10:case 32:case 9:case 13:case 12:{u=S;do u+=1,o=i.charCodeAt(u);while(o===32||o===10||o===9||o===13||o===12);a=["space",i.slice(S,u)],S=u-1;break}case 91:case 93:case 123:case 125:case 58:case 59:case 41:{let T=String.fromCharCode(o);a=[T,T,S];break}case 40:{if(C=U.length?U.pop()[1]:"",g=i.charCodeAt(S+1),C==="url"&&g!==39&&g!==34&&g!==32&&g!==10&&g!==9&&g!==12&&g!==13){u=S;do{if(f=!1,u=i.indexOf(")",u+1),u===-1)if(r||N){u=S;break}else D("bracket");for(p=u;i.charCodeAt(p-1)===92;)p-=1,f=!f}while(f);a=["brackets",i.slice(S,u+1),S,u],S=u}else S<=M?a=["(","(",S]:(u=i.indexOf(")",S+1),s=i.slice(S,u+1),u===-1||Ks.test(s)?(M=u===-1?w:u,a=["(","(",S]):(a=["brackets",s,S,u],S=u));break}case 39:case 34:{l=o===39?"\'":\'"\',u=S;do{if(f=!1,u=i.indexOf(l,u+1),u===-1)if(r||N){u=S+1;break}else D("string");for(p=u;i.charCodeAt(p-1)===92;)p-=1,f=!f}while(f);a=["string",i.slice(S,u+1),S,u],S=u;break}case 64:{Vt.lastIndex=S+1,Vt.test(i),Vt.lastIndex===0?u=i.length-1:u=Vt.lastIndex-2,a=["at-word",i.slice(S,u+1),S,u],S=u;break}case 92:{for(u=S,c=!0;i.charCodeAt(u+1)===92;)u+=1,c=!c;if(o=i.charCodeAt(u+1),c&&o!==47&&o!==32&&o!==10&&o!==9&&o!==13&&o!==12&&(u+=1,Nr.test(i.charAt(u)))){for(;Nr.test(i.charAt(u+1));)u+=1;i.charCodeAt(u+1)===32&&(u+=1)}a=["word",i.slice(S,u+1),S,u],S=u;break}default:{o===47&&i.charCodeAt(S+1)===42?(u=i.indexOf("*/",S+2)+1,u===0&&(r||N?u=i.length:D("comment")),a=["comment",i.slice(S,u+1),S,u],S=u):($t.lastIndex=S+1,$t.test(i),$t.lastIndex===0?u=i.length-1:u=$t.lastIndex-2,a=["word",i.slice(S,u+1),S,u],U.push(a),S=u);break}}return S++,a}function b(E){B.push(E)}return{back:b,endOfFile:F,nextToken:x,position:X}}});var Dr=Y((xc,vr)=>{"use strict";var Js=It(),Qs=St(),Ys=At(),Zs=tt(),Tr=zt(),Xs=Mr(),kr={empty:!0,space:!0};function ea(t){for(let e=t.length-1;e>=0;e--){let n=t[e],i=n[3]||n[2];if(i)return i}}var Ln=class{constructor(e){this.input=e,this.root=new Zs,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 Js;n.name=e[1].slice(1),n.name===""&&this.unnamedAtrule(n,e),this.init(n,e[2]);let i,r,o,s=!1,c=!1,u=[],l=[];for(;!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),i=e[0],i==="("||i==="["?l.push(i==="("?")":"]"):i==="{"&&l.length>0?l.push("}"):i===l[l.length-1]&&l.pop(),l.length===0)if(i===";"){n.source.end=this.getPosition(e[2]),n.source.end.offset++,this.semicolon=!0;break}else if(i==="{"){c=!0;break}else if(i==="}"){if(u.length>0){for(o=u.length-1,r=u[o];r&&r[0]==="space";)r=u[--o];r&&(n.source.end=this.getPosition(r[3]||r[2]),n.source.end.offset++)}this.end(e);break}else u.push(e);else u.push(e);if(this.tokenizer.endOfFile()){s=!0;break}}n.raws.between=this.spacesAndCommentsFromEnd(u),u.length?(n.raws.afterName=this.spacesAndCommentsFromStart(u),this.raw(n,"params",u),s&&(e=u[u.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=""),c&&(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,c]of e.entries()){if(r=c,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 Qs;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=Xs(this.input)}decl(e,n){let i=new Ys;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]||ea(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 l=e[0][0];if(l===":"||l==="space"||l==="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=[],c;for(;e.length&&(c=e[0][0],!(c!=="space"&&c!=="comment"));)s.push(e.shift());this.precheckMissedSemicolon(e);for(let l=e.length-1;l>=0;l--){if(o=e[l],o[1].toLowerCase()==="!important"){i.important=!0;let a=this.stringFrom(e,l);a=this.spacesFromEnd(e)+a,a!==" !important"&&(i.raws.important=a);break}else if(o[1].toLowerCase()==="important"){let a=e.slice(0),f="";for(let p=l;p>0;p--){let g=a[p][0];if(f.trim().startsWith("!")&&g!=="space")break;f=a.pop()[1]+f}f.trim().startsWith("!")&&(i.important=!0,i.raws.important=f,e=a)}if(o[0]!=="space"&&o[0]!=="comment")break}e.some(l=>l[0]!=="space"&&l[0]!=="comment")&&(i.raws.between+=s.map(l=>l[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 Tr;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=[],c=e[1].startsWith("--"),u=[],l=e;for(;l;){if(i=l[0],u.push(l),i==="("||i==="[")o||(o=l),s.push(i==="("?")":"]");else if(c&&r&&i==="{")o||(o=l),s.push("}");else if(s.length===0)if(i===";")if(r){this.decl(u,c);return}else break;else if(i==="{"){this.rule(u);return}else if(i==="}"){this.tokenizer.back(u.pop()),n=!0;break}else i===":"&&(r=!0);else i===s[s.length-1]&&(s.pop(),s.length===0&&(o=null));l=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(n=!0),s.length>0&&this.unclosedBracket(o),n&&r){if(!c)for(;u.length&&(l=u[u.length-1][0],!(l!=="space"&&l!=="comment"));)this.tokenizer.back(u.pop());this.decl(u,c)}else this.unknownWord(u)}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,c=i.length,u="",l=!0,a,f;for(let p=0;p<c;p+=1)o=i[p],s=o[0],s==="space"&&p===c-1&&!r?l=!1:s==="comment"?(f=i[p-1]?i[p-1][0]:"empty",a=i[p+1]?i[p+1][0]:"empty",!kr[f]&&!kr[a]?u.slice(-1)===","?l=!1:u+=o[1]:l=!1):u+=o[1];if(!l){let p=i.reduce((g,C)=>g+C[1],"");e.raws[n]={raw:p,value:u}}e[n]=u}rule(e){e.pop();let n=new Tr;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=Ln});var Jt=Y((gc,_r)=>{"use strict";var ta=qe(),na=Ft(),ia=Dr();function Kt(t,e){let n=new na(t,e),i=new ia(n);try{i.parse()}catch(r){throw r}return i.root}_r.exports=Kt;Kt.default=Kt;ta.registerParse(Kt)});var Bn=Y((yc,Rr)=>{"use strict";var Ct=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}};Rr.exports=Ct;Ct.default=Ct});var Qt=Y((Sc,Lr)=>{"use strict";var ra=Bn(),Mt=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 ra(e,n);return this.messages.push(i),i}warnings(){return this.messages.filter(e=>e.type==="warning")}};Lr.exports=Mt;Mt.default=Mt});var On=Y((bc,Or)=>{"use strict";var Br={};Or.exports=function(e){Br[e]||(Br[e]=!0,typeof console<"u"&&console.warn&&console.warn(e))}});var Wn=Y((Ec,Hr)=>{"use strict";var oa=qe(),sa=Wt(),aa=Rn(),la=Jt(),Pr=Qt(),ua=tt(),ca=pt(),{isClean:Be,my:da}=Pt(),Ac=On(),fa={atrule:"AtRule",comment:"Comment",decl:"Declaration",document:"Document",root:"Root",rule:"Rule"},ma={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},pa={Once:!0,postcssPlugin:!0,prepare:!0},it=0;function Tt(t){return typeof t=="object"&&typeof t.then=="function"}function Wr(t){let e=!1,n=fa[t.type];return t.type==="decl"?e=t.prop.toLowerCase():t.type==="atrule"&&(e=t.name.toLowerCase()),e&&t.append?[n,n+"-"+e,it,n+"Exit",n+"Exit-"+e]:e?[n,n+"-"+e,n+"Exit",n+"Exit-"+e]:t.append?[n,it,n+"Exit"]:[n,n+"Exit"]}function Ir(t){let e;return t.type==="document"?e=["Document",it,"DocumentExit"]:t.type==="root"?e=["Root",it,"RootExit"]:e=Wr(t),{eventIndex:0,events:e,iterator:0,node:t,visitorIndex:0,visitors:[]}}function Pn(t){return t[Be]=!1,t.nodes&&t.nodes.forEach(e=>Pn(e)),t}var In={},ze=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=Pn(n);else if(n instanceof t||n instanceof Pr)r=Pn(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=la;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[da]&&oa.rebuild(r)}this.result=new Pr(e,r,i),this.helpers={...In,postcss:In,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(!ma[i]&&/^[A-Z]/.test(i))throw new Error(`Unknown event ${i} in ${n.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`);if(!pa[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(Tt(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=[Ir(e)];for(;n.length>0;){let i=this.visitTick(n);if(Tt(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 Tt(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=ca;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,c=>{s+=c}),this.result.css=s,this.result}let o=new aa(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(Tt(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(Tt(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,c]=r[n.visitorIndex];n.visitorIndex+=1,n.visitorIndex===r.length&&(n.visitors=[],n.visitorIndex=0),this.result.lastPlugin=s;try{return c(i.toProxy(),this.helpers)}catch(u){throw this.handleError(u,i)}}if(n.iterator!==0){let s=n.iterator,c;for(;c=i.nodes[i.indexes[s]];)if(i.indexes[s]+=1,!c[Be]){c[Be]=!0,e.push(Ir(c));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===it){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=Wr(e);for(let i of n)if(i===it)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()}};ze.registerPostcss=t=>{In=t};Hr.exports=ze;ze.default=ze;ua.registerLazyResult(ze);sa.registerLazyResult(ze)});var Ur=Y((wc,qr)=>{"use strict";var ha=Rn(),xa=Jt(),ga=Qt(),ya=pt(),Fc=On(),kt=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=xa;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=ya;this.result=new ga(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 ha(r,void 0,this._opts,n);if(s.isMap()){let[c,u]=s.generate();c&&(this.result.css=c),u&&(this.result.map=u)}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[]}};qr.exports=kt;kt.default=kt});var jr=Y((Nc,zr)=>{"use strict";var Sa=Wt(),ba=Wn(),Aa=Ur(),Ea=tt(),Qe=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 Aa(this,e,n):new ba(this,e,n)}use(e){return this.plugins=this.plugins.concat(this.normalize([e])),this}};zr.exports=Qe;Qe.default=Qe;Ea.registerProcessor(Qe);Sa.registerProcessor(Qe)});var Zr=Y((Cc,Yr)=>{"use strict";var Gr=It(),Vr=St(),Fa=qe(),wa=Ot(),$r=At(),Kr=Wt(),Na=yr(),Ca=Ft(),Ma=Wn(),Ta=Dn(),ka=gt(),va=Jt(),Hn=jr(),Da=Qt(),Jr=tt(),Qr=zt(),_a=pt(),Ra=Bn();function re(...t){return t.length===1&&Array.isArray(t[0])&&(t=t[0]),new Hn(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 c=n(...s);return c.postcssPlugin=e,c.postcssVersion=new Hn().version,c}let o;return Object.defineProperty(r,"postcss",{get(){return o||(o=r()),o}}),r.process=function(s,c,u){return re([r(u)]).process(s,c)},r};re.stringify=_a;re.parse=va;re.fromJSON=Na;re.list=Ta;re.comment=t=>new Vr(t);re.atRule=t=>new Gr(t);re.decl=t=>new $r(t);re.rule=t=>new Qr(t);re.root=t=>new Jr(t);re.document=t=>new Kr(t);re.CssSyntaxError=wa;re.Declaration=$r;re.Container=Fa;re.Processor=Hn;re.Document=Kr;re.Comment=Vr;re.Warning=Ra;re.AtRule=Gr;re.Result=Da;re.Input=Ca;re.Rule=Qr;re.Root=Jr;re.Node=ka;Ma.registerPostcss(re);Yr.exports=re;re.default=re});function L(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 Ee(t){try{window.parent.postMessage(t,"*")}catch(e){L("bridge.postMessage",e)}}function oi(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==="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&&$o(o,s)}};return window.addEventListener("message",e),e}function $o(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){L("bridge.flashElements.querySelector",i)}}var dn=null;function si(t){dn=t}function lt(t,e){if(dn)try{dn({source:"hf-preview",type:"analytics",event:t,properties:e??{}})}catch(n){L("runtime.analytics.site1",n)}}function ai(t){let e=[],n=c=>{if(typeof c.getAnimations!="function")return[];try{return c.getAnimations()}catch{return[]}},i=(c,u)=>{for(let l of c){try{l.currentTime=u}catch(a){L("runtime.adapters.css.site1",a)}try{l.pause()}catch(a){L("runtime.adapters.css.site2",a)}}},r=c=>{for(let u of c)try{u.play()}catch(l){L("runtime.adapters.css.site3",l)}},o=c=>{for(let u of c)try{u.pause()}catch(l){L("runtime.adapters.css.site4",l)}},s=c=>{c.baseDelay?c.el.style.animationDelay=c.baseDelay:c.el.style.removeProperty("animation-delay"),c.basePlayState?c.el.style.animationPlayState=c.basePlayState:c.el.style.removeProperty("animation-play-state")};return{name:"css",discover:()=>{e=[];let c=document.querySelectorAll("*");for(let u of c){if(!(u instanceof HTMLElement))continue;let l=window.getComputedStyle(u);!l.animationName||l.animationName==="none"||e.push({el:u,baseDelay:u.style.animationDelay||"",basePlayState:u.style.animationPlayState||""})}},seek:c=>{let u=Number(c.time)||0;for(let l of e){if(!l.el.isConnected)continue;let a=t?.resolveStartSeconds?t.resolveStartSeconds(l.el):Number.parseFloat(l.el.getAttribute("data-start")??"0")||0,f=Math.max(0,u-a)*1e3,p=n(l.el);if(p.length>0){i(p,f);continue}l.el.style.animationPlayState="paused",l.el.style.animationDelay=`-${(f/1e3).toFixed(3)}s`}},pause:()=>{for(let c of e){if(!c.el.isConnected)continue;let u=n(c.el);u.length>0&&o(u),s(c)}},play:()=>{for(let c of e)c.el.isConnected&&(s(c),r(n(c.el)))},revert:()=>{e=[]}}}function li(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 ui(){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){L("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){L("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){L("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){L("runtime.adapters.animejs.site4",n)}},revert:()=>{}}}function fi(){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){L("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(ci(i))i.goToAndStop(e*1e3,!1);else if(di(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){L("runtime.adapters.lottie.site2",r)}},pause:()=>{let t=window.__hfLottie;if(!(!t||t.length===0))for(let e of t)try{(ci(e)||di(e))&&e.pause()}catch(n){L("runtime.adapters.lottie.site3",n)}},revert:()=>{}}}function ci(t){return typeof t=="object"&&t!==null&&typeof t.goToAndStop=="function"}function di(t){return typeof t=="object"&&t!==null&&typeof t.pause=="function"&&("totalFrames"in t||"duration"in t)}var mi=-1;function Lt(t){if(t!==mi){mi=t;try{window.dispatchEvent(new CustomEvent("hf-seek",{detail:{time:t}}))}catch(e){L("runtime.adapters.seek-dispatch.site1",e)}}}function pi(){let t=null,e=0;return{name:"three",discover:()=>{},seek:n=>{t=Math.max(0,Number(n.time)||0),e=t,window.__hfThreeTime=t,Lt(t)},pause:()=>{t==null&&(t=Math.max(0,e))},play:()=>{t=null},revert:()=>{t=null,e=0}}}function hi(){let t=null,e=0;return{name:"typegpu",discover:()=>{},seek:n=>{t=Math.max(0,Number(n.time)||0),e=t,window.__hfTypegpuTime=t,Lt(t)},pause:()=>{t==null&&(t=Math.max(0,e))},play:()=>{t=null},revert:()=>{t=null,e=0}}}function xi(){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 gi(){return{name:"waapi",discover:()=>{},seek:t=>{if(!document.getAnimations)return;let e=Math.max(0,(Number(t.time)||0)*1e3);for(let n of document.getAnimations()){try{n.currentTime=e}catch(i){L("runtime.adapters.waapi.site1",i)}try{n.pause()}catch(i){L("runtime.adapters.waapi.site2",i)}}},pause:()=>{if(document.getAnimations)for(let t of document.getAnimations())try{t.pause()}catch(e){L("runtime.adapters.waapi.site3",e)}}}}function yi(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 c=t?.resolveStartSeconds?t.resolveStartSeconds(s):Number.parseFloat(s.dataset.start??"0");if(!Number.isFinite(c))continue;let u=Number.parseFloat(s.dataset.playbackStart??s.dataset.mediaStart??"0")||0,l=s.defaultPlaybackRate,a=Number.isFinite(l)&&l>0?Math.max(.1,Math.min(5,l)):1,f=s.loop,p=Number.isFinite(s.duration)&&s.duration>0?s.duration:null,g=t?.resolveDurationSeconds?.(s)??Number.parseFloat(s.dataset.duration??"");(!Number.isFinite(g)||g<=0)&&p!=null&&(g=Math.max(0,(p-u)/a));let C=Number.isFinite(g)&&g>0?c+g:Number.POSITIVE_INFINITY,w=Number.parseFloat(s.dataset.volume??""),S={el:s,start:c,mediaStart:u,duration:Number.isFinite(g)&&g>0?g:Number.POSITIVE_INFINITY,end:C,volume:Number.isFinite(w)?w:null,playbackRate:a,loop:f,sourceDuration:p};i.push(S),s.tagName==="VIDEO"&&r.push(S),Number.isFinite(C)&&(o=Math.max(o,C))}return{timedMediaEls:n,mediaClips:i,videoClips:r,maxMediaEnd:o}}var fn=new WeakMap,ut=new WeakMap,mn=new WeakSet,Ye=new WeakSet;function Ko(t){if(Ye.has(t))return;Ye.add(t);let e=()=>Ye.delete(t);t.addEventListener("playing",e,{once:!0}),t.addEventListener("pause",e,{once:!0}),t.addEventListener("error",e,{once:!0})}function Si(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 D=n.sourceDuration-n.mediaStart;D>0&&r>=n.sourceDuration&&(r=n.mediaStart+(r-n.mediaStart)%D)}let s=t.userVolume??1;i.volume=(n.volume??1)*s,e&&(i.muted=!0),i.preload!=="auto"&&(i.preload="auto");try{i.playbackRate=n.playbackRate*t.playbackRate}catch(D){L("runtime.media.site1",D)}let c=.04,u=2,l=i.currentTime||0,a=Math.abs(l-r),f=r-l,p=fn.get(i);fn.set(i,f);let g=p===void 0,C=!g&&Math.abs(f-p)>.5,w=a>3,S=a>.5&&(g||C||w),U=i.tagName==="VIDEO"&&!i.paused,B=p!==void 0&&Math.abs(f-p)<.004,M=!1;if(!U&&!S&&!g&&B&&a>c){let D=(ut.get(i)??0)+1;ut.set(i,D),D>=u&&(M=!0,ut.set(i,0))}else a<=c&&ut.set(i,0);let X=!U&&t.forceSync&&a>.02;if(S||M||X){try{i.currentTime=r}catch(D){L("runtime.media.site2",D)}if(Math.abs(i.currentTime-r)>.5&&!mn.has(i)){mn.add(i),i.load();try{i.currentTime=r}catch(D){L("runtime.media.site3",D)}}Ye.delete(i)}t.playing&&i.paused&&!Ye.has(i)?(Ko(i),i.play().catch(D=>{Ye.delete(i),(D&&typeof D=="object"&&"name"in D?String(D.name??""):"")==="NotAllowedError"&&t.onAutoplayBlocked?.()})):!t.playing&&!i.paused&&i.pause();continue}fn.delete(i),ut.delete(i),mn.delete(i),i.paused||i.pause()}}var Jo=["[data-hyperframes-ignore]","[data-hyperframes-picker-ignore]","[data-hf-ignore]","[data-no-inspect]","[data-no-pick]","[data-hyper-shader-loading]"].join(","),Qo=["[data-hyperframes-picker-block]","[data-hyper-shader-loading]"].join(",");function bi(t){let e=!1,n=null,i=null,r=null,o=null;function s(x,b){try{window.dispatchEvent(new CustomEvent(x,{detail:b}))}catch(E){L("runtime.picker.site1",E)}}function c(x){r=x,s("hyperframe:picker:hovered",{elementInfo:r,isPickMode:e,timestamp:Date.now()})}function u(x){o=x,s("hyperframe:picker:selected",{elementInfo:o,isPickMode:e,timestamp:Date.now()})}function l(x){let b=x.ownerDocument.defaultView;if(!b)return!1;let E=x;for(;E&&E!==document.body&&E!==document.documentElement;){let N=b.getComputedStyle(E);if(N.display==="none"||N.visibility==="hidden"||N.pointerEvents==="none")return!0;let T=Number.parseFloat(N.opacity);if(Number.isFinite(T)&&T<=.01)return!0;E=E.parentElement}return!1}function a(x){if(!x||x===document.body||x===document.documentElement)return!1;let b=x.tagName.toLowerCase();return!(b==="script"||b==="style"||b==="link"||b==="meta"||x.classList.contains("__hf-pick-highlight")||x.closest(Jo)||l(x))}function f(x){return!!x?.closest(Qo)}function p(x){let b=x;if(b.id)return`#${b.id}`;let E=x.getAttribute("data-composition-id");if(E)return`[data-composition-id="${E}"]`;let N=x.getAttribute("data-composition-src");if(N)return`[data-composition-src="${N}"]`;let T=x.getAttribute("data-track-index");if(T)return`[data-track-index="${T}"]`;let R=x.tagName.toLowerCase(),P=x.parentElement;if(!P)return R;let J=P.querySelectorAll(`:scope > ${R}`);if(J.length===1)return R;for(let _=0;_<J.length;_+=1)if(J[_]===x)return`${R}:nth-of-type(${_+1})`;return R}function g(x){let b=x.tagName.toLowerCase(),E=(x.textContent??"").trim().replace(/\\s+/g," "),N=(T,R)=>T.length>R?`${T.slice(0,R-1)}\\u2026`:T;return b==="h1"||b==="h2"||b==="h3"?"Heading":b==="p"||b==="span"||b==="div"?E.length>0?N(E,56):"Text":b==="img"?"Image":b==="video"?"Video":b==="audio"?"Audio":b==="svg"?"Shape":x.getAttribute("data-composition-src")?"Composition":b==="section"?"Section":`${b.charAt(0).toUpperCase()}${b.slice(1)}`}function C(x,b,E){let N=typeof E=="number"&&E>0?E:8,T=[];if(document.elementsFromPoint)T=document.elementsFromPoint(x,b);else if(document.elementFromPoint){let J=document.elementFromPoint(x,b);T=J?[J]:[]}if(f(T[0]??null))return[];let R={},P=[];for(let J=0;J<T.length;J+=1){let _=T[J];if(!a(_))continue;let ce=`${_.tagName}::${_.id||""}::${J}`;if(!R[ce]&&(R[ce]=!0,P.push(_),P.length>=N))break}return P}function w(x){let b=x.getBoundingClientRect(),E={};for(let T=0;T<x.attributes.length;T+=1){let R=x.attributes[T];R.name.startsWith("data-")&&(E[R.name]=R.value)}return{id:x.id||null,tagName:x.tagName.toLowerCase(),selector:p(x),label:g(x),boundingBox:{x:b.left,y:b.top,width:b.width,height:b.height},textContent:x.textContent?x.textContent.trim().slice(0,200):null,src:x.getAttribute("src")||x.getAttribute("data-composition-src")||null,dataAttributes:E}}function S(x,b,E){return C(x,b,E).map(w)}function U(x){if(!e)return;let E=C(x.clientX,x.clientY,1)[0]??(x.target instanceof Element?x.target:null);if(!a(E)||n===E)return;n&&n.classList.remove("__hf-pick-highlight"),n=E,E.classList.add("__hf-pick-highlight");let N=w(E);c(N),t.postMessage({source:"hf-preview",type:"element-hovered",elementInfo:N})}function B(x){if(!e)return;x.preventDefault(),x.stopPropagation(),x.stopImmediatePropagation();let b=S(x.clientX,x.clientY,8);b.length!==0&&(c(b[0]??null),t.postMessage({source:"hf-preview",type:"element-pick-candidates",candidates:b,selectedIndex:0,point:{x:x.clientX,y:x.clientY}}))}function M(x){x.key==="Escape"&&(D(),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",U,!0),document.addEventListener("click",B,!0),document.addEventListener("keydown",M,!0),s("hyperframe:picker:mode",{isPickMode:!0,timestamp:Date.now()}))}function D(){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",U,!0),document.removeEventListener("click",B,!0),document.removeEventListener("keydown",M,!0),s("hyperframe:picker:mode",{isPickMode:!1,timestamp:Date.now()}))}function F(){window.__HF_PICKER_API={enable:X,disable:D,isActive:()=>e,getHovered:()=>r,getSelected:()=>o,getCandidatesAtPoint:(x,b,E)=>Number.isFinite(x)&&Number.isFinite(b)?S(x,b,E):[],pickAtPoint:(x,b,E)=>{if(!Number.isFinite(x)||!Number.isFinite(b))return null;let N=S(x,b,8);if(!N.length)return null;let T=Math.max(0,Math.min(N.length-1,Number(E??0))),R=N[T]??null;return R?(u(R),t.postMessage({source:"hf-preview",type:"element-picked",elementInfo:R}),D(),R):null},pickManyAtPoint:(x,b,E)=>{if(!Number.isFinite(x)||!Number.isFinite(b))return[];let N=S(x,b,8);if(!N.length)return[];let T=[],R=Array.isArray(E)?E:[0];for(let P of R){let J=Math.max(0,Math.min(N.length-1,Math.floor(Number(P)))),_=N[J];if(!_)continue;T.some(ge=>ge.selector===_.selector&&ge.tagName===_.tagName)||T.push(_)}return T.length?(u(T[0]??null),t.postMessage({source:"hf-preview",type:"element-picked-many",elementInfos:T}),D(),T):[]}},s("hyperframe:picker:api-ready",{hasApi:!0,timestamp:Date.now()})}return{enablePickMode:X,disablePickMode:D,installPickerApi:F}}function Ze(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 Bt(t,e,n){if(t){for(let i of Object.values(t))if(!(!i||i===e))try{n(i)}catch(r){L("runtime.player.site1",r)}}}function Ai(t,e,n){let i=Ze(e,n);return t.pause(),typeof t.totalTime=="function"?t.totalTime(i,!1):t.seek(i,!1),i}function Yo(t,e,n,i){let r=[];Bt(t,e,o=>{o.play(),r.push(o)});try{return Ai(e,n,i)}finally{for(let o of r)try{o.pause()}catch(s){L("runtime.player.site2",s)}}}function Zo(t,e){Bt(t,e,n=>{n.play()})}function Ei(t){return{_timeline:null,play:()=>{let e=t.getTimeline();if(!e||t.getIsPlaying())return;let n=Math.max(0,Number(t.getSafeDuration?.()??e.duration()??0)||0);n>0&&Math.max(0,Number(e.time())||0)>=n&&(e.pause(),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()),e.play(),Bt(t.getTimelineRegistry?.(),e,i=>{typeof i.timeScale=="function"&&i.timeScale(t.getPlaybackRate()),i.play()}),t.onDeterministicPlay(),t.setIsPlaying(!0),t.onShowNativeVideos(),t.onStatePost(!0)},pause:()=>{let e=t.getTimeline();if(!e)return;e.pause(),Bt(t.getTimelineRegistry?.(),e,i=>{i.pause()});let n=Math.max(0,Number(e.time())||0);t.onDeterministicSeek(n),t.onDeterministicPause(),t.setIsPlaying(!1),t.onSyncMedia(n,!1),t.onRenderFrameSeek(n),t.onStatePost(!0)},seek:e=>{let n=t.getTimeline();if(!n)return;let i=Math.max(0,Number(e)||0),r=Yo(t.getTimelineRegistry?.(),n,i,t.getCanonicalFps());t.onDeterministicSeek(r),t.setIsPlaying(!1),t.onSyncMedia(r,!1),t.onRenderFrameSeek(r),t.onStatePost(!0)},renderSeek:e=>{let n=t.getTimeline(),i=t.getCanonicalFps(),r=n?(Zo(t.getTimelineRegistry?.(),n),Ai(n,e,i)):Ze(Math.max(0,Number(e)||0),i);t.onDeterministicSeek(r),t.setIsPlaying(!1),t.onSyncMedia(r,!1),t.onRenderFrameSeek(r),t.onStatePost(!0)},getTime:()=>Number(t.getTimeline()?.time()??0),getDuration:()=>Number(t.getTimeline()?.duration()??0),isPlaying:()=>t.getIsPlaying(),setPlaybackRate:e=>t.setPlaybackRate(e),getPlaybackRate:()=>t.getPlaybackRate()}}function Fi(){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,maxTimelineDurationSeconds:1800,nativeVisualWatchdogTick:0,transportClock:null,transportRafId:null}}var Xo="data-hf-authored-duration",es="data-hf-authored-end";function $e(t){if(t==null||t==="")return null;let e=Number(t);return Number.isFinite(e)?e:null}function ts(t){return $e(t.getAttribute("data-duration"))}function ns(t){return $e(t.getAttribute("data-end"))}function is(t){return $e(t.getAttribute(Xo))}function rs(t){return $e(t.getAttribute(es))}function os(t){let e=(t??"").trim();if(!e)return null;let n=$e(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",c=Number.parseFloat(s),u=Number.isFinite(c)?Math.max(0,c):0,l=o==="-"?-u:u;return{kind:"reference",refId:r,offset:l}}function Ke(t){let e=t.timelineRegistry??{},n=t.includeAuthoredTimingAttrs??!1,i=new WeakMap,r=new WeakMap,o=new Set,s=a=>{let f=document.getElementById(a);return f||(document.querySelector(`[data-composition-id="${CSS.escape(a)}"]`)??null)},c=a=>{let f=r.get(a);if(f!==void 0)return f;let p=null,g=ts(a)??(n?is(a):null);if(g!=null&&g>0&&(p=g),p==null||p<=0){let C=ns(a)??(n?rs(a):null);if(C!=null){let w=l(a,0),S=C-w;Number.isFinite(S)&&S>0&&(p=S)}}if((p==null||p<=0)&&a instanceof HTMLMediaElement){let C=$e(a.getAttribute("data-playback-start"))??$e(a.getAttribute("data-media-start"))??0;Number.isFinite(a.duration)&&a.duration>C&&(p=a.duration-C)}if(p==null||p<=0){let C=a.getAttribute("data-composition-id");if(C){let w=e[C]??null;if(w&&typeof w.duration=="function")try{let S=Number(w.duration());Number.isFinite(S)&&S>0&&(p=S)}catch(S){L("runtime.startResolver.site1",S)}}}return p!=null&&Number.isFinite(p)&&p>0?(r.set(a,p),p):(r.set(a,null),null)},u=(a,f)=>{if(a.hasAttribute("data-composition-id")){let g=a.parentElement?.closest("[data-composition-id]");return g?l(g,f):0}let p=a.closest("[data-composition-id]");return p?l(p,f):0},l=(a,f)=>{let p=i.get(a);if(p!==void 0)return p??f;if(o.has(a))return f;o.add(a);try{let g=os(a.getAttribute("data-start"));if(!g){if(a.hasAttribute("data-composition-id")){let B=a.parentElement;if(B&&(B.hasAttribute("data-composition-src")||B.hasAttribute("data-composition-id"))){let M=l(B,f);return i.set(a,M),M}}return i.set(a,f),f}if(g.kind==="absolute"){let B=Math.max(0,g.value),M=Math.max(0,u(a,f)+B);return i.set(a,M),M}let C=s(g.refId);if(!C)return i.set(a,f),f;let w=l(C,0),S=c(C);if(S==null||S<=0){let B=Math.max(0,w+g.offset);return i.set(a,B),B}let U=Math.max(0,w+S+g.offset);return i.set(a,U),U}finally{o.delete(a)}};return{resolveStartForElement:(a,f=0)=>l(a,Math.max(0,f)),resolveDurationForElement:a=>c(a)}}var ss="data-hf-authored-duration",as="data-hf-authored-end";function Fe(t){if(t==null||t==="")return null;let e=Number(t);return Number.isFinite(e)?e:null}function pn(t){return Fe(t.getAttribute("data-duration"))??Fe(t.getAttribute(ss))}function wi(t){return Fe(t.getAttribute("data-end"))??Fe(t.getAttribute(as))}function hn(...t){let e=t.filter(n=>Number.isFinite(n??null));return e.length===0?null:Math.max(...e)}var Ni={composition:0,video:1,image:2,element:3,audio:4};function ls(t){if(t.length===0)return;let e=new Map;for(let s of t){let c=e.get(s.track)??new Set;c.add(s.kind),e.set(s.track,c)}if(!Array.from(e.values()).some(s=>s.size>1))return;let i=0,r=new Map,o=[...e.keys()].sort((s,c)=>s-c);for(let s of o){let c=e.get(s);if(c.size===1)r.set(`${s}:${[...c][0]}`,i++);else{let u=[...c].sort((l,a)=>(Ni[l]??99)-(Ni[a]??99));for(let l of u)r.set(`${s}:${l}`,i++)}}for(let s of t){let c=`${s.track}:${s.kind}`,u=r.get(c);u!=null&&(s.track=u)}}function dt(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 Ci(t){let e=t.getAttribute("src")??t.getAttribute("data-src");if(e)return dt(e);let n=t.getAttribute("data-composition-src");if(n)return dt(n);let i=t.querySelector("img[src], video[src], audio[src], source[src]");return i?dt(i.getAttribute("src")):null}function us(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 cs(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 ds(t){let e=t.textContent?.replace(/\\s+/g," ").trim();return e?e.length>32?`${e.slice(0,31)}...`:e:null}function ct(t){let e=t.replace(/\\.[^.]+$/i,"").replace(/[-_]+/g," ").replace(/\\s+/g," ").trim();return e?e.replace(/\\b\\w/g,n=>n.toUpperCase()):t}function fs(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 ct(r);let o=t.id;if(o)return ct(o);let s=us(t);if(s)return ct(s);let c=cs(Ci(t));if(c)return ct(c);let u=ds(t);return u||`${ct(e)} ${n+1}`}function Mi(t){let n=window.__timelines??{},i=Ke({timelineRegistry:n,includeAuthoredTimingAttrs:!0}),r=W=>{if(!W)return null;let k=n[W]??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=W=>{let k=Fe(W.getAttribute("data-duration"));if(k!=null&&k>0)return k;let O=Fe(W.getAttribute("data-playback-start"))??Fe(W.getAttribute("data-media-start"))??0;return Number.isFinite(W.duration)&&W.duration>O?Math.max(0,W.duration-O):null},s=()=>{let W=Array.from(document.querySelectorAll("video[data-start], audio[data-start]"));if(W.length===0)return null;let k=0;for(let O of W){let ie=i.resolveStartForElement(O,0);if(!Number.isFinite(ie))continue;let ee=o(O);ee==null||ee<=0||(k=Math.max(k,Math.max(0,ie)+ee))}return k>0?k:null},c=W=>{let k=W.trim().toLowerCase();return!(!k||k==="main"||k.includes("caption")||k.includes("ambient"))},u=(W,k)=>{let O=[],ie=null,ee=null,z=null,q=W.parentElement;for(;q;){let V=q.getAttribute("data-composition-id");V&&(O.push(V),!z&&q!==k&&(z=V),ie==null&&(ie=i.resolveStartForElement(q,0)),ee==null&&(ee=Fe(q.getAttribute("data-duration"))??r(V)??null)),q=q.parentElement}return{parentCompositionId:z,compositionAncestors:O.reverse(),inheritedStart:ie,inheritedDuration:ee}},l=document.querySelector("[data-composition-id]"),a=Array.from(document.querySelectorAll("[data-composition-id]")),f=l?.getAttribute("data-composition-id")??null,p=l?i.resolveStartForElement(l,0):0,g=s(),C=g!=null?Math.max(0,g-Math.max(0,p)):null,w=r(f),S=pn(l??document.body),U=hn(...a.filter(W=>W!==l).map(W=>{let k=i.resolveStartForElement(W,0),O=i.resolveDurationForElement(W)??r(W.getAttribute("data-composition-id"))??null;return!Number.isFinite(k)||O==null||O<=0?null:Math.max(0,k)+O})),B=U!=null?Math.max(0,U-Math.max(0,p)):null,M=typeof w=="number"&&Number.isFinite(w)&&w>0?w:null,X=typeof S=="number"&&Number.isFinite(S)&&S>0?S:null,D=typeof C=="number"&&Number.isFinite(C)&&C>0?C:null,F=typeof B=="number"&&Number.isFinite(B)&&B>0?B:null,x=hn(D,F),b=M!=null&&x!=null&&M>x+1,E=X??(b?x:hn(M,D,F)),N=E!=null?Math.min(E,t.maxTimelineDurationSeconds):null,R=(N!=null?p+N:null)??(typeof g=="number"&&Number.isFinite(g)&&g>0?g:null),P=(W,k)=>!Number.isFinite(k)||k<=0?0:R==null||!Number.isFinite(R)?k:!Number.isFinite(W)||W>=R?0:Math.max(0,Math.min(k,R-W)),J=[],_=[],ce=Array.from(document.querySelectorAll("[data-start], [data-track-index], [data-composition-id], video, audio, img")),ge=0;for(let W=0;W<ce.length;W+=1){let k=ce[W];if(k===l||["SCRIPT","STYLE","LINK","META","TEMPLATE","NOSCRIPT"].includes(k.tagName))continue;let O=u(k,l),ie=i.resolveStartForElement(k,O.inheritedStart??0),ee=k.getAttribute("data-composition-id"),z=pn(k);if((z==null||z<=0)&&ee&&ee!==f&&(z=r(ee)),(z==null||z<=0)&&k instanceof HTMLMediaElement){let be=Fe(k.getAttribute("data-playback-start"))??Fe(k.getAttribute("data-media-start"))??0;Number.isFinite(k.duration)&&k.duration>0&&(z=Math.max(0,k.duration-be))}if(z==null||z<=0){let be=O.inheritedDuration;if(be!=null&&be>0){let me=(O.inheritedStart??0)+be;z=Math.max(0,me-ie)}}if(z==null||z<=0||(z=P(ie,z),z<=0))continue;let q=ie+z;ge=Math.max(ge,q);let V=k.tagName.toLowerCase(),Re=ee&&ee!==f?"composition":V==="video"?"video":V==="audio"?"audio":V==="img"?"image":"element";J.push({id:k.id||ee||null,label:fs(k,Re,J.length),start:ie,duration:z,track:Number.parseInt(k.getAttribute("data-track-index")??k.getAttribute("data-track")??String(W),10)||0,kind:Re,tagName:V,compositionId:k.getAttribute("data-composition-id"),compositionAncestors:O.compositionAncestors,parentCompositionId:O.parentCompositionId,nodePath:null,compositionSrc:dt(k.getAttribute("data-composition-src")),assetUrl:Ci(k),timelineRole:k.getAttribute("data-timeline-role"),timelineLabel:k.getAttribute("data-timeline-label"),timelineGroup:k.getAttribute("data-timeline-group"),timelinePriority:Fe(k.getAttribute("data-timeline-priority"))})}let $=new Set(J.map(W=>W.id)),G=l?.getAttribute("data-composition-id")??null,I=G?n[G]??null:null;if(I&&l){let W=I;if(typeof W.getChildren=="function")try{let k=W.getChildren(!0,!0,!1)??[],O=new Map;for(let z of l.children){let q=z;if(!q.id)continue;let V=q.tagName.toLowerCase();V==="script"||V==="style"||V==="link"||O.set(q,{id:q.id,start:1/0,end:-1/0})}let ie=z=>{let q=z;for(;q;){if(O.has(q))return q;if(q===l)return null;q=q.parentElement}return null};for(let z of k){if(typeof z.targets!="function"||typeof z.startTime!="function"||typeof z.duration!="function")continue;let q=z.startTime(),V=z.parent;for(;V&&V!==I&&typeof V.startTime=="function";)q+=V.startTime(),V=V.parent;let Re=q+z.duration();if(!(!Number.isFinite(q)||!Number.isFinite(Re)))for(let be of z.targets()){if(!(be instanceof Element))continue;let ke=ie(be);if(!ke)continue;let me=O.get(ke);me&&(me.start=Math.min(me.start,q),me.end=Math.max(me.end,Re))}}let ee=J.length>0?Math.max(...J.map(z=>z.track))+1:0;for(let[z,q]of O){if(q.start===1/0||q.end===-1/0)continue;let V=z;if($.has(V.id))continue;let Re=Math.max(0,q.end-q.start);if(Re<=0)continue;let be=P(q.start,Re);be<=0||(ge=Math.max(ge,q.start+be),J.push({id:V.id,label:V.getAttribute("data-timeline-label")??V.getAttribute("data-label")??V.getAttribute("aria-label")??V.id,start:q.start,duration:be,track:Number.parseInt(V.getAttribute("data-track-index")??V.getAttribute("data-track")??"",10)||ee,kind:"element",tagName:V.tagName.toLowerCase(),compositionId:V.getAttribute("data-composition-id"),compositionAncestors:G?[G]:[],parentCompositionId:G,nodePath:null,compositionSrc:null,assetUrl:null,timelineRole:V.getAttribute("data-timeline-role"),timelineLabel:V.getAttribute("data-timeline-label"),timelineGroup:V.getAttribute("data-timeline-group"),timelinePriority:Fe(V.getAttribute("data-timeline-priority"))}),$.add(V.id))}}catch(k){L("runtime.timeline.site1",k)}}if(l&&N!=null&&N>0){let W=J.length>0?Math.max(...J.map(k=>k.track))+1:0;for(let k of l.children){let O=k;if(!O.id||$.has(O.id))continue;let ie=O.getAttribute("data-timeline-role");if(ie!=="overlay"&&ie!=="persistent-overlay")continue;let ee=O.tagName.toLowerCase();if(ee==="script"||ee==="style"||ee==="link"||ee==="meta"||window.getComputedStyle(O).display==="none")continue;let q=P(0,N);q<=0||(ge=Math.max(ge,q),J.push({id:O.id,label:O.getAttribute("data-timeline-label")??O.getAttribute("data-label")??O.getAttribute("aria-label")??O.id,start:0,duration:q,track:Number.parseInt(O.getAttribute("data-track-index")??O.getAttribute("data-track")??"",10)||W,kind:"element",tagName:ee,compositionId:O.getAttribute("data-composition-id"),compositionAncestors:G?[G]:[],parentCompositionId:G,nodePath:null,compositionSrc:null,assetUrl:null,timelineRole:ie,timelineLabel:O.getAttribute("data-timeline-label"),timelineGroup:O.getAttribute("data-timeline-group"),timelinePriority:Fe(O.getAttribute("data-timeline-priority"))}),$.add(O.id))}}ls(J);for(let W of a){if(W===l)continue;let k=W.getAttribute("data-composition-id");if(!k||!c(k))continue;let O=i.resolveStartForElement(W,0),ie=pn(W);if((ie==null||ie<=0)&&wi(W)!=null){let V=wi(W);ie=Math.max(0,V-O)}let ee=r(k),z=ie&&ie>0?ie:ee;if(z==null||z<=0)continue;let q=P(O,z);q<=0||_.push({id:k,label:W.getAttribute("data-label")??k,start:O,duration:q,thumbnailUrl:dt(W.getAttribute("data-thumbnail-url")),avatarName:null})}let Z=Math.max(1,Math.min(Math.max(ge||1,N??0),t.maxTimelineDurationSeconds));return{source:"hf-preview",type:"timeline",durationInFrames:b&&X==null?Number.POSITIVE_INFINITY:Math.max(1,Math.round(Z*Math.max(1,t.canonicalFps))),clips:J,scenes:_,compositionWidth:Fe(l?.getAttribute("data-width"))??1920,compositionHeight:Fe(l?.getAttribute("data-height"))??1080}}var ue=Vo(Zr(),1),Xr=ue.default,Mc=ue.default.stringify,Tc=ue.default.fromJSON,kc=ue.default.plugin,vc=ue.default.parse,Dc=ue.default.list,_c=ue.default.document,Rc=ue.default.comment,Lc=ue.default.atRule,Bc=ue.default.rule,Oc=ue.default.decl,Pc=ue.default.root,Ic=ue.default.CssSyntaxError,Wc=ue.default.Declaration,Hc=ue.default.Container,qc=ue.default.Processor,Uc=ue.default.Document,zc=ue.default.Comment,jc=ue.default.Warning,Gc=ue.default.AtRule,Vc=ue.default.Result,$c=ue.default.Input,Kc=ue.default.Rule,Jc=ue.default.Root,Qc=ue.default.Node;function qn(t){return t.replace(/[.*+?^${}()|[\\]\\\\]/g,"\\\\$&")}function La(t){return t.replace(/\\\\/g,"\\\\\\\\").replace(/"/g,\'\\\\"\')}function Ba(t,e,n){let i=Oa(t,e,n),r=i.trim();if(!r||/^(html|body|:root|\\*)$/i.test(r))return t;let o=new RegExp(`\\\\[\\\\s*data-composition-id\\\\s*=\\\\s*(["\'])${qn(n)}\\\\1\\\\s*\\\\]`,"g");if(o.test(r))return i.replace(o,e);let s=i.match(/^\\s*/)?.[0]??"",c=i.match(/\\s*$/)?.[0]??"";return`${s}${e} ${r}${c}`}function Oa(t,e,n){let i=qn(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 Pa=new Set(["keyframes","-webkit-keyframes","font-face"]);function Ia(t){return t?.type==="atrule"}function Wa(t){let e=t.parent;for(;e;){if(Ia(e)&&Pa.has(e.name.toLowerCase()))return!0;e=e.parent}return!1}function Un(t,e,n){let i=e.trim();if(!t||!i)return t;let r=n||`[data-composition-id="${La(i)}"]`,o=Xr.parse(t);return o.walkRules(s=>{Wa(s)||(s.selectors=s.selectors.map(c=>Ba(c,r,i)))}),o.toResult({map:!1}).css}function eo(t,e,n="[HyperFrames] composition script error:",i,r=e){let o=JSON.stringify(e),s=JSON.stringify(r),c=JSON.stringify(n),u=qn(e),l=JSON.stringify(i??null),a=JSON.stringify(String.raw`\\[\\s*data-composition-id\\s*=\\s*(?:"${u}"|\'${u}\')\\s*\\]`),f=JSON.stringify(String.raw`\\s*\\[\\s*data-(?:start|duration)\\s*=\\s*(?:"[^"]*"|\'[^\']*\')\\s*\\]`);return`(function(){\n var __hfCompId = ${o};\n var __hfTimelineCompId = ${s};\n var __hfErrorLabel = ${c};\n var __hfEscapeAttr = function(value) {\n return (value + "").replace(/\\\\\\\\/g, "\\\\\\\\\\\\\\\\").replace(/"/g, "\\\\\\\\\\\\"");\n };\n var __hfRootSelector = ${l} || (__hfCompId\n ? \'[data-composition-id="\' + __hfEscapeAttr(__hfCompId) + \'"]\'\n : "");\n var __hfRoot = null;\n var __hfRootSelectorPattern = ${a};\n var __hfTimingSelectorPattern = ${f};\n var __hfNormalizeSelector = function(selector) {\n if (!__hfCompId || typeof selector !== "string") return selector;\n return selector\n .replace(new RegExp(__hfRootSelectorPattern + \'(?:\' + __hfTimingSelectorPattern + \')+\', \'g\'), __hfRootSelector)\n .replace(new RegExp(\'(?:\' + __hfTimingSelectorPattern + \')+\' + __hfRootSelectorPattern, \'g\'), __hfRootSelector);\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 (root.id === idValue) return root;\n if (typeof root.querySelector !== "function") return null;\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 var value = Reflect.get(target, prop, target);\n return typeof value === "function" ? value.bind(target) : value;\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.slice.call(root.querySelectorAll(selector));\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 && __hfCompId ? byComp[__hfCompId] : null;\n return scoped ? Object.assign({}, scoped) : {};\n },\n });\n var __hfRun = function() {\n try {\n (function(document, gsap, window, __hyperframes) {\n${t}\n }).call(window, __hfScopedDocument, __hfScopedGsap, __hfScopedWindow, __hfScopedHyperframes);\n } catch (_err) {\n console.error(__hfErrorLabel, __hfCompId, _err);\n }\n };\n __hfFindRoot();\n __hfRun();\n})();`}function to(){if(typeof document>"u")return{};let t=zn(document.documentElement),e=Ha();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 Ha(){if(typeof window>"u")return{};let t=window.__hfVariables;return!t||typeof t!="object"||Array.isArray(t)?{}:t}var qa=8e3,Ua=/^(?![a-zA-Z][a-zA-Z\\d+\\-.]*:)(?!\\/\\/)(?!\\/)(?!\\.\\.?\\/).+/,za=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"),qa)});function jn(t){for(;t.firstChild;)t.removeChild(t.firstChild);t.textContent=""}function no(t,e){let n=t.trim();if(!n)return t;try{return Ua.test(n)?new URL(n,document.baseURI).toString():e?new URL(n,e).toString():new URL(n,document.baseURI).toString()}catch{return t}}function ja(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}async function Gn(t){let e=null;t.hostCompositionId&&(e=Array.from(t.sourceNode.querySelectorAll("[data-composition-id]")).find(a=>a.getAttribute("data-composition-id")===t.hostCompositionId)??null);let n=e??t.sourceNode,i=e?.getAttribute("data-composition-id")?.trim()||t.hostCompositionId||null;if(t.headStyles)for(let l of t.headStyles){let a=l.cloneNode(!0);a instanceof HTMLStyleElement&&(i&&(a.textContent=Un(a.textContent||"",i)),document.head.appendChild(a),t.injectedStyles.push(a))}let r=Array.from(n.querySelectorAll("style"));for(let l of r){let a=l.cloneNode(!0);a instanceof HTMLStyleElement&&(i&&(a.textContent=Un(a.textContent||"",i)),document.head.appendChild(a),t.injectedStyles.push(a))}let o=[];if(t.headScripts)for(let l of t.headScripts){let a=l.getAttribute("type")?.trim()??"",f=l.getAttribute("src")?.trim()??"";if(f){let p=no(f,t.compositionUrl);o.push({kind:"external",src:p,type:a})}else{let p=l.textContent?.trim()??"";p&&o.push({kind:"inline",content:p,type:a,scopeCompositionId:i})}}let s=Array.from(n.querySelectorAll("script")),c=[...o];for(let l of s){let a=l.getAttribute("type")?.trim()??"",f=l.getAttribute("src")?.trim()??"";if(f){let p=no(f,t.compositionUrl);c.push({kind:"external",src:p,type:a})}else{let p=l.textContent?.trim()??"";p&&c.push({kind:"inline",content:p,type:a,scopeCompositionId:i})}l.parentNode?.removeChild(l)}let u=Array.from(n.querySelectorAll("style"));for(let l of u)l.parentNode?.removeChild(l);if(e){let l=document.importNode(e,!0),a=e.getAttribute("data-width"),f=e.getAttribute("data-height"),p=t.parseDimensionPx(a),g=t.parseDimensionPx(f);for(a&&t.host.setAttribute("data-width",a),f&&t.host.setAttribute("data-height",f),p&&t.host instanceof HTMLElement&&(t.host.style.width=p),g&&t.host instanceof HTMLElement&&(t.host.style.height=g);l.firstChild;)t.host.appendChild(l.firstChild)}else t.hasTemplate?t.host.appendChild(document.importNode(n,!0)):t.host.innerHTML=t.fallbackBodyInnerHtml;if(i){let l={...t.declaredVariableDefaults??{},...ja(t.host)};Object.keys(l).length>0&&(window.__hfVariablesByComp||(window.__hfVariablesByComp={}),window.__hfVariablesByComp[i]=l)}for(let l of c){let a=document.createElement("script");if(l.type&&(a.type=l.type),a.async=!1,l.kind==="external"?a.src=l.src:l.type.toLowerCase()==="module"?a.textContent=l.content:l.scopeCompositionId?a.textContent=eo(l.content,l.scopeCompositionId):a.textContent=`(function(){${l.content}})();`,document.body.appendChild(a),t.injectedScripts.push(a),l.kind==="external"){let f=await za(a);f.status!=="load"&&t.onDiagnostic?.({code:"external_composition_script_load_issue",details:{hostCompositionId:t.hostCompositionId,hostCompositionSrc:t.hostCompositionSrc,resolvedScriptSrc:l.src,loadStatus:f.status,elapsedMs:f.elapsedMs}})}}}async function io(t){let e=Array.from(document.querySelectorAll("[data-composition-id]:not([data-composition-src])")).filter(n=>{if(n.children.length>0)return!1;let i=n.getAttribute("data-composition-id");return i?!!document.querySelector(`template#${CSS.escape(i)}-template`):!1});if(e.length!==0)for(let n of e){let i=n.getAttribute("data-composition-id"),r=document.querySelector(`template#${CSS.escape(i)}-template`);jn(n),await Gn({host:n,hostCompositionId:i,hostCompositionSrc:`template#${i}-template`,sourceNode:r.content,hasTemplate:!0,fallbackBodyInnerHtml:"",compositionUrl:null,injectedStyles:t.injectedStyles,injectedScripts:t.injectedScripts,parseDimensionPx:t.parseDimensionPx,onDiagnostic:t.onDiagnostic})}}async function ro(t){let e=Array.from(document.querySelectorAll("[data-composition-src]"));e.length!==0&&await Promise.all(e.map(async n=>{let i=n.getAttribute("data-composition-src");if(!i)return;let r=null;try{r=new URL(i,document.baseURI)}catch{r=null}jn(n);try{let o=n.getAttribute("data-composition-id"),s=o!=null?document.querySelector(`template#${CSS.escape(o)}-template`):null;if(s){await Gn({host:n,hostCompositionId:o,hostCompositionSrc:i,sourceNode:s.content,hasTemplate:!0,fallbackBodyInnerHtml:"",compositionUrl:r,injectedStyles:t.injectedStyles,injectedScripts:t.injectedScripts,parseDimensionPx:t.parseDimensionPx,onDiagnostic:t.onDiagnostic});return}let c=await fetch(i);if(!c.ok)throw new Error(`HTTP ${c.status}`);let u=await c.text(),a=new DOMParser().parseFromString(u,"text/html"),f=(o?a.querySelector(`template#${CSS.escape(o)}-template`):null)??a.querySelector("template"),p=f?f.content:a.body,g=f?void 0:Array.from(a.head.querySelectorAll("style")),C=f?void 0:Array.from(a.head.querySelectorAll("script"));await Gn({host:n,hostCompositionId:o,hostCompositionSrc:i,sourceNode:p,hasTemplate:!!f,fallbackBodyInnerHtml:a.body.innerHTML,compositionUrl:r,injectedStyles:t.injectedStyles,injectedScripts:t.injectedScripts,parseDimensionPx:t.parseDimensionPx,headStyles:g,headScripts:C,declaredVariableDefaults:zn(a.documentElement),onDiagnostic:t.onDiagnostic})}catch(o){t.onDiagnostic?.({code:"external_composition_load_failed",details:{hostCompositionId:n.getAttribute("data-composition-id"),hostCompositionSrc:i,errorMessage:o instanceof Error?o.message:"unknown_error"}}),jn(n)}}))}function Ga(t){return t instanceof HTMLElement?t.dataset.captionWrapper!=="true"?t:t.querySelector(":scope > span")??null:null}function Va(){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 $a(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 Vn(){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=Va();for(let i of e){let r=null;if(i.wordId&&(r=Ga(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 u=t.getTweensOf(r).filter(a=>a.vars.color!==void 0).sort((a,f)=>a.startTime()-f.startTime()),l=u.length>0?String(u[0].vars.color):"";for(let a of u)String(a.vars.color)===l?i.dimColor&&(a.vars.color=i.dimColor):i.activeColor&&(a.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 c=$a(r);t.set(c,o)}}}).catch(()=>{})}var Yt=class{constructor(e){Se(this,"_baseTime",0);Se(this,"_playStartMs",null);Se(this,"_rate",1);Se(this,"_duration",1/0);Se(this,"_nowMs");Se(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)/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 oo(t){return!Number.isFinite(t)||t<=0?1:t}var Zt=class{constructor(){Se(this,"_ctx",null);Se(this,"_bufferCache",new Map);Se(this,"_activeSources",[]);Se(this,"_masterGain",null);Se(this,"_rateAnchorCtx",0);Se(this,"_rateAnchorComp",0);Se(this,"_rate",1);Se(this,"_paused",!0);Se(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._ctx)return null;try{let r=await(await fetch(n)).arrayBuffer(),o=await this._ctx.decodeAudioData(r);return this._bufferCache.set(n,o),o}catch(i){return L("webAudioTransport.decode",i),null}}startGeneration(){return this._playGeneration+=1,this._playGeneration}currentGeneration(){return this._playGeneration}async schedulePlayback(e,n,i,r,o,s,c,u=1){if(!this._ctx||!this._masterGain||c!==this._playGeneration)return null;try{if(this._ctx.state==="suspended"&&await this._ctx.resume(),c!==this._playGeneration)return null;let l=oo(u),a=this._ctx.createBufferSource();a.buffer=n,a.playbackRate.value=l;let f=this._ctx.createGain();f.gain.value=s,a.connect(f),f.connect(this._masterGain);let p=o-i,g=this._ctx.currentTime;if(this._rate=l,this._rateAnchorCtx=g,this._rateAnchorComp=o,p>=0)a.start(0,p+r);else{let S=-p/l;a.start(g+S,r)}let C=e.muted;e.muted=!0;let w={el:e,sourceNode:a,gainNode:f,compositionStart:i,mediaStart:r,scheduledAt:g,priorMuted:C};return this._activeSources.push(w),this._paused=!1,w}catch(l){return L("webAudioTransport.schedule",l),null}}setRate(e){let n=oo(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){L("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)))}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 so="data-hf-authored-duration",ao="data-hf-authored-end";function lo(){let t=Fi(),e=window,n=null,i=null,r=[],o=new Set,s=null;if(typeof e.__hfRuntimeTeardown=="function")try{e.__hfRuntimeTeardown()}catch(d){L("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 c=d=>{r.push(d)},u=(d,m,h)=>{let y=h??`${d}:${JSON.stringify(m)}`;o.has(y)||(o.add(y),Ee({source:"hf-preview",type:"diagnostic",code:d,details:m}))},l=d=>{let m={scale:1,focusX:960,focusY:540},h=[],y=[],A={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:()=>m,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:()=>y,getRenderState:()=>({...A,time:d.getTime(),duration:d.getDuration(),isPlaying:d.isPlaying()})}},a=1/60,f=.75,p=2,g=.05,C=100,w=240,S=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??"")}},U=d=>{let m=d.toLowerCase();return m.includes("cannot read properties of null")||m.includes("cannot set properties of null")?{code:"runtime_null_dom_access",category:"dom-null-access"}:m.includes("failed to execute \'queryselector\'")?{code:"runtime_invalid_selector",category:"selector-invalid"}:m.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 m=Number.parseFloat(d);return!Number.isFinite(m)||m<=0?null:`${m}px`},M=()=>{let d=document.querySelector(\'[data-composition-id][data-root="true"]\');if(d instanceof HTMLElement)return d;let m=Array.from(document.querySelectorAll("[data-composition-id]"));return m.length===0?null:m.find(h=>!h.parentElement?.closest("[data-composition-id]"))??m[0]??null},X=()=>{let d=M();if(!d)return;let m=B(d.getAttribute("data-width")),h=B(d.getAttribute("data-height"));m&&(d.style.width=m),h&&(d.style.height=h),m&&d.style.setProperty("--comp-width",m),h&&d.style.setProperty("--comp-height",h)},D=()=>{let d=M(),m=Array.from(document.querySelectorAll("[data-composition-id]")).filter(h=>h.hasAttribute("data-duration")||h.hasAttribute("data-end"));for(let h of m){if(d&&h===d)continue;let y=h.getAttribute("data-duration"),A=h.getAttribute("data-end");y!=null&&!h.hasAttribute(so)&&h.setAttribute(so,y),A!=null&&!h.hasAttribute(ao)&&h.setAttribute(ao,A),h.removeAttribute("data-duration"),h.removeAttribute("data-end")}},F=()=>{let d=M();if(!d)return;d.style.position||(d.style.position="relative"),d.style.overflow="hidden";let m=B(d.getAttribute("data-width")),h=B(d.getAttribute("data-height"));m&&(d.style.width=m),h&&(d.style.height=h);let y=Array.from(d.children);for(let A of y){let v=A.tagName.toLowerCase();if(v==="script"||v==="style"||v==="link"||v==="meta"||!A.hasAttribute("data-start"))continue;let j=(A.style.top==="0px"||A.style.top==="0")&&(A.style.left==="0px"||A.style.left==="0")&&A.style.width==="100%"&&A.style.height==="100%",ne=/translate\\(\\s*-50%\\s*,\\s*-50%\\s*\\)/.test(A.style.transform);if(j&&ne&&!A.hasAttribute("data-width")&&!A.hasAttribute("data-height")){let Le=A.style.top,ae=A.style.left,Pe=A.style.width,oe=A.style.height;A.style.top="",A.style.left="",A.style.width="",A.style.height="";let Q=window.getComputedStyle(A);Q.top!=="auto"||Q.bottom!=="auto"||Q.left!=="auto"||Q.right!=="auto"||Q.width!=="0px"||Q.height!=="0px"||(A.style.top=Le,A.style.left=ae,A.style.width=Pe,A.style.height=oe)}let te=window.getComputedStyle(A),se=te.position;if(se!=="absolute"&&se!=="fixed"&&(A.style.position="absolute"),!!A.style.top||!!A.style.bottom||te.top!=="auto"||te.bottom!=="auto"||(A.style.top="0"),!!A.style.left||!!A.style.right||te.left!=="auto"||te.right!=="auto"||(A.style.left="0"),v!=="audio"){let Le=B(A.getAttribute("data-width")),ae=B(A.getAttribute("data-height")),Pe=te.width!=="0px"&&te.width!=="auto",oe=te.height!=="0px"&&te.height!=="auto";Le?!A.style.width&&!Pe&&(A.style.width=Le):!A.style.width&&te.width==="0px"&&(A.style.width="100%"),ae?!A.style.height&&!oe&&(A.style.height=ae):!A.style.height&&te.height==="0px"&&(A.style.height="100%")}}},x=(d,m=0,h)=>Ke({timelineRegistry:window.__timelines??{},includeAuthoredTimingAttrs:h?.includeAuthoredTimingAttrs??!0}).resolveStartForElement(d,m),b=(d,m)=>Ke({timelineRegistry:window.__timelines??{},includeAuthoredTimingAttrs:m?.includeAuthoredTimingAttrs??!0}).resolveDurationForElement(d),E=!!document.querySelector("[data-composition-src]"),N=!1;{let d=document.querySelectorAll("[data-composition-id]:not([data-composition-src])");for(let m of d){let h=m.getAttribute("data-composition-id");if(h&&m.children.length===0&&document.querySelector(`template#${CSS.escape(h)}-template`)){N=!0;break}}}let T=!E&&!N,R=d=>{if(!d||typeof d.duration!="function")return null;try{let m=Number(d.duration());return Number.isFinite(m)?Math.max(0,m):null}catch{return null}},P=d=>typeof d=="number"&&Number.isFinite(d)&&d>a,J=d=>{let m=Number(d.getAttribute("data-duration"));if(Number.isFinite(m)&&m>0)return m;let h=Number(d.getAttribute("data-playback-start")??d.getAttribute("data-media-start")??"0"),y=Number.isFinite(h)?Math.max(0,h):0;return Number.isFinite(d.duration)&&d.duration>y?Math.max(0,d.duration-y):null},_=()=>{let d=Array.from(document.querySelectorAll("video[data-start], audio[data-start]"));if(d.length===0)return null;let m=0;for(let h of d){let y=x(h,0);if(!Number.isFinite(y))continue;let A=J(h);A==null||A<=a||(m=Math.max(m,Math.max(0,y)+A))}return m>a?m:null},ce=()=>{let d=M();if(!d)return null;let m=window.__timelines??{},h=Ke({timelineRegistry:m,includeAuthoredTimingAttrs:!0}),y=0,A=Array.from(d.querySelectorAll("[data-composition-id][data-start]"));for(let v of A){if(!(v instanceof Element)||v.parentElement?.closest("[data-composition-id]")!==d)continue;let ne=h.resolveStartForElement(v,0),te=h.resolveDurationForElement(v);!Number.isFinite(ne)||te==null||te<=0||(y=Math.max(y,Math.max(0,ne)+te))}return y>a?y:null},ge=()=>{let d=_();return typeof d!="number"||!Number.isFinite(d)||d<=a?null:d},$=d=>P(d)?Math.max(a,d*f):a,G=(d,m=0)=>{let h=R(d),y=ge(),A=ce(),v=Math.max(y??0,A??0),j=Number.isFinite(m)&&m>a?m:0,ne=0;P(h)?ne=Math.max(h,v,j):P(v)?ne=Math.max(v,j):ne=j;let te=Math.max(1,Number(t.maxTimelineDurationSeconds)||1800);return ne>0?Math.max(0,Math.min(ne,te)):0},I=()=>{let d=window.__timelines??{},m=Ke({timelineRegistry:d,includeAuthoredTimingAttrs:!0}),h=ge(),y=ce(),A=Math.max(h??0,y??0)||null,v=$(A),j=oe=>{let Q=document.querySelector(`[data-composition-id="${CSS.escape(oe)}"]`);return Q?m.resolveStartForElement(Q,0):0},ne=oe=>{let Q=window.gsap;if(!Q||typeof Q.timeline!="function")return null;let de=Q.timeline({paused:!0});for(let he of oe)de.add(he.timeline,j(he.compositionId));return de},te=(oe,Q)=>{if(!P(oe))return null;let de=window.gsap;if(!de||typeof de.timeline!="function")return null;let he=de.timeline({paused:!0});if(Q)try{he.add(Q,0)}catch(le){L("runtime.init.site2",le)}let ye=he;if(typeof ye.to=="function")try{ye.to({},{duration:oe})}catch(le){L("runtime.init.site3",le)}return he},se=(oe,Q)=>{let de=oe;if(typeof de.getChildren!="function")return[];try{let he=de.getChildren(!0,!0,!0)??[];if(!Array.isArray(he))return[];let ye=[];for(let le of Q)if(!he.some(ve=>ve===le.timeline))try{let ve=j(le.compositionId);oe.add(le.timeline,ve),ye.push(le.compositionId)}catch(ve){L("runtime.init.site4",ve)}return ye}catch{return[]}},Ne=M(),pe=Ne?.getAttribute("data-composition-id")??null;if(!pe)return{timeline:null};let Ce=d[pe]??null,ae=(()=>{if(!Ne)return[];let oe=new Set,Q=Array.from(Ne.querySelectorAll("[data-composition-id]")),de=[];for(let he of Q){let ye=he.getAttribute("data-composition-id");if(!ye||ye===pe||oe.has(ye))continue;oe.add(ye);let le=d[ye]??null;if(!le||typeof le.play!="function"||typeof le.pause!="function")continue;let Me=R(le);de.push({compositionId:ye,timeline:le,durationSeconds:Me??0})}return de})(),Pe=oe=>{for(let Q of oe){let de=Q.timeline;if(typeof de.paused=="function")try{de.paused(!1)}catch(he){L("runtime.init.site5",he)}}};if(ae.length>0&&Pe(ae),Ce){let oe=ae.length>0?se(Ce,ae):[];if((ae.length>0||!document.querySelector("[data-composition-id]:not([data-composition-id=\'"+pe+"\'])"))&&(Z=!0),oe.length>0)try{let le=Ce.time();Ce.seek(le,!1)}catch{}let Q=R(Ce);if(!P(Q)&&ae.length>0){let le=ae.map(Io=>Io.compositionId),Me=ne(ae),ve=R(Me);if(Me&&P(ve))return{timeline:Me,selectedTimelineIds:le,selectedDurationSeconds:ve,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_unusable_fallback",details:{rootCompositionId:pe,rootDurationSeconds:Q,fallbackKind:"composite_by_root_children",minCandidateDurationSeconds:v,selectedDurationSeconds:ve,mediaDurationFloorSeconds:h,authoredCompositionDurationFloorSeconds:y,selectedTimelineIds:le,autoNestedChildren:oe}}};let ln=te(A??0,Ce),un=R(ln);if(ln&&P(un))return{timeline:ln,selectedTimelineIds:[pe],selectedDurationSeconds:un,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_unusable_media_floor_fallback",details:{rootCompositionId:pe,rootDurationSeconds:Q,fallbackKind:"media_duration_floor",mediaDurationFloorSeconds:h,authoredCompositionDurationFloorSeconds:y,selectedDurationSeconds:un,selectedTimelineIds:[pe],autoNestedChildren:oe}}}}if(!P(Q)&&ae.length===0){let le=te(A??0,Ce),Me=R(le);if(le&&P(Me))return{timeline:le,selectedTimelineIds:[pe],selectedDurationSeconds:Me,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_unusable_media_floor_fallback",details:{rootCompositionId:pe,rootDurationSeconds:Q,fallbackKind:"media_duration_floor",mediaDurationFloorSeconds:h,authoredCompositionDurationFloorSeconds:y,selectedDurationSeconds:Me,selectedTimelineIds:[pe]}}}}let de=Ne?.getAttribute("data-duration"),he=de?parseFloat(de):null,ye=Math.max(P(he)?he:0,y??0);if(ye>0&&P(ye)&&P(Q)&&ye>=Q+.5){let le=Ce;if(typeof le.to=="function")try{le.to({},{duration:0},ye)}catch(ve){L("runtime.init.site6",ve)}let Me=R(Ce);if(P(Me))return{timeline:Ce,selectedTimelineIds:[pe],selectedDurationSeconds:Me,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_padded_to_declared_duration",details:{rootCompositionId:pe,rootDurationSeconds:Q,rootDeclaredDur:he,authoredCompositionDurationFloorSeconds:y,newDur:Me}}}}return{timeline:Ce,selectedTimelineIds:[pe],selectedDurationSeconds:Q,mediaDurationFloorSeconds:h,diagnostics:oe.length>0?{code:"root_timeline_auto_nested_children",details:{rootCompositionId:pe,selectedDurationSeconds:Q,autoNestedChildren:oe}}:void 0}}if(ae.length>0){let oe=ae.map(he=>he.compositionId),Q=ne(ae),de=R(Q);if(Q)return{timeline:Q,selectedTimelineIds:oe,selectedDurationSeconds:de,mediaDurationFloorSeconds:h,diagnostics:{code:"root_timeline_missing_fallback",details:{rootCompositionId:pe,fallbackKind:"composite_by_root_children",minCandidateDurationSeconds:v,selectedDurationSeconds:de,mediaDurationFloorSeconds:h,selectedTimelineIds:oe}}}}return{timeline:null}},Z=!1,xe=()=>{if(!T)return!1;let d=t.capturedTimeline,m=R(d),h=P(m);if(d&&h&&Z)return!1;let y=I();if(!y.timeline)return!1;if(d&&d===y.timeline)return typeof d.timeScale=="function"&&d.timeScale(t.playbackRate),!1;t.capturedTimeline=y.timeline,typeof t.capturedTimeline.timeScale=="function"&&t.capturedTimeline.timeScale(t.playbackRate);let A=G(t.capturedTimeline,0);if(A>0){try{H.setDuration(A)}catch{}t.capturedTimeline.pause()}return y.diagnostics&&Ee({source:"hf-preview",type:"diagnostic",code:y.diagnostics.code,details:y.diagnostics.details}),Ee({source:"hf-preview",type:"diagnostic",code:"timeline_bound",details:{selectedTimelineIds:y.selectedTimelineIds??[],selectedDurationSeconds:y.selectedDurationSeconds??null,mediaDurationFloorSeconds:y.mediaDurationFloorSeconds??null}}),!0},we=()=>{let d=M();if(!(d instanceof HTMLElement))return;let m=d.getBoundingClientRect(),h=Number(d.getAttribute("data-width")),y=Number(d.getAttribute("data-height")),A=window.getComputedStyle(d),v=Number.isFinite(h)&&h>0&&Number.isFinite(y)&&y>0,j=m.width<=0||m.height<=0||d.clientWidth<=0||d.clientHeight<=0;!v||!j||u("root_stage_layout_zero",{compositionId:d.getAttribute("data-composition-id")??null,declaredWidth:h,declaredHeight:y,rectWidth:Math.round(m.width),rectHeight:Math.round(m.height),clientWidth:d.clientWidth,clientHeight:d.clientHeight,display:A.display,visibility:A.visibility,overflow:A.overflow},`root-stage-layout-zero:${d.getAttribute("data-composition-id")??"unknown"}`)},W=()=>{t.tornDown||(s!=null&&window.cancelAnimationFrame(s),s=window.requestAnimationFrame(()=>{s=null,we()}))},k=()=>{n=d=>{let m=S(d.error??d.message).slice(0,w);if(!m)return;let h=U(m);Ee({source:"hf-preview",type:"diagnostic",code:h.code,details:{category:h.category,message:m,filename:d.filename||null,line:Number.isFinite(d.lineno)?d.lineno:null,column:Number.isFinite(d.colno)?d.colno:null}})},i=d=>{let m=S(d.reason).slice(0,w);if(!m)return;let h=U(m);Ee({source:"hf-preview",type:"diagnostic",code:`${h.code}_unhandled_rejection`,details:{category:`${h.category}-unhandled-rejection`,message:m}})},window.addEventListener("error",n),window.addEventListener("unhandledrejection",i)},O=()=>{let d=Array.from(document.querySelectorAll("img, video, audio, source, link[rel=\'stylesheet\']"));for(let h of d){let y=()=>{if(!(h instanceof Element))return;let A=h.tagName.toLowerCase(),v=h.getAttribute("src")??h.getAttribute("href")??h.getAttribute("poster")??null,j=A==="link"?"runtime_stylesheet_load_failed":"runtime_asset_load_failed";u(j,{tagName:A,assetUrl:v,currentSrc:(h instanceof HTMLImageElement||h instanceof HTMLMediaElement)&&h.currentSrc||null,readyState:h instanceof HTMLMediaElement?h.readyState:null,networkState:h instanceof HTMLMediaElement?h.networkState:null},`${j}:${A}:${v??"unknown"}`)};h.addEventListener("error",y),c(()=>{h.removeEventListener("error",y)})}let m=document.fonts;m&&m.ready.then(()=>{if(t.tornDown)return;let h=Array.from(m).filter(y=>y.status==="error").map(y=>y.family).filter(y=>!!y).slice(0,10);h.length!==0&&u("runtime_font_load_issue",{failedFamilies:h,totalFaces:Array.from(m).length},`runtime-font-load-issue:${h.join("|")}`)}).catch(()=>{})},ie=(d,m)=>{if(!d.timeline)return!1;let h=t.capturedTimeline;if(h&&h===d.timeline)return!1;let y=Math.max(0,t.currentTime||0),A=t.isPlaying;t.capturedTimeline=d.timeline,typeof t.capturedTimeline.timeScale=="function"&&t.capturedTimeline.timeScale(t.playbackRate);try{t.capturedTimeline.pause(),t.capturedTimeline.seek(y,!1),A&&t.capturedTimeline.play()}catch(v){L("runtime.init.site7",v)}return Ee({source:"hf-preview",type:"diagnostic",code:"timeline_loop_guard_rebind",details:{reason:m,previousTime:y,selectedTimelineIds:d.selectedTimelineIds??[],selectedDurationSeconds:d.selectedDurationSeconds??null,mediaDurationFloorSeconds:d.mediaDurationFloorSeconds??null}}),!0},ee=null,z=!1,q=new Set,V=()=>{t.tornDown||(ee!=null&&window.clearTimeout(ee),ee=window.setTimeout(()=>{if(t.tornDown)return;ee=null;let d=I();if(!d.timeline||!P(d.mediaDurationFloorSeconds??null))return;if(!t.capturedTimeline){xe()&&(Ve(),me(!0));return}if(z)return;let h=R(t.capturedTimeline),y=d.selectedDurationSeconds??R(d.timeline);P(y)&&(!P(h)||y>=h+g)&&ie(d,"manual")&&(z=!0,Ee({source:"hf-preview",type:"diagnostic",code:"timeline_rebind_after_media_metadata",details:{previousDurationSeconds:h??null,selectedDurationSeconds:y??null,selectedTimelineIds:d.selectedTimelineIds??[],mediaDurationFloorSeconds:d.mediaDurationFloorSeconds??null}}),Ve(),me(!0))},C))},Re=()=>{for(let d of q)d.removeEventListener("loadedmetadata",V),d.removeEventListener("durationchange",V);q.clear()},be=()=>{if(t.tornDown)return;let d=Array.from(document.querySelectorAll("video, audio"));for(let m of d)q.has(m)||(q.add(m),m.addEventListener("loadedmetadata",V),m.addEventListener("durationchange",V),m.preload!=="auto"&&(m.preload="auto"),m.readyState<HTMLMediaElement.HAVE_FUTURE_DATA&&m.load())},ke=()=>{let d=v=>{let j=v.closest("[data-composition-id]"),ne=j?x(j,0):null,te=j?b(j,{includeAuthoredTimingAttrs:!0}):null;return{compositionRoot:j,inheritedStart:ne,inheritedDuration:te}},m=yi({shouldIncludeElement:v=>v.hasAttribute("data-start")||!!d(v).compositionRoot,resolveStartSeconds:v=>{let j=d(v);return x(v,j.inheritedStart??0)},resolveDurationSeconds:v=>{let j=d(v),ne=x(v,j.inheritedStart??0),te=Number.parseFloat(v.dataset.playbackStart??v.dataset.mediaStart??"0")||0,se=j.inheritedStart!=null&&j.inheritedDuration!=null&&j.inheritedDuration>0?Math.max(0,j.inheritedStart+j.inheritedDuration-ne):null,Ne=Number.isFinite(v.duration)&&v.duration>te?Math.max(0,v.duration-te):null;return Ne!=null&&se!=null?Math.min(Ne,se):Ne??se}}),h=t.mediaForceSyncNextTick;h&&(t.mediaForceSyncNextTick=!1),Si({clips:m.mediaClips,timeSeconds:t.currentTime,playing:t.isPlaying,playbackRate:t.playbackRate,outputMuted:t.mediaOutputMuted||Ae.isActive(),userMuted:t.bridgeMuted,userVolume:t.bridgeVolume,forceSync:h,onAutoplayBlocked:()=>{t.mediaAutoplayBlockedPosted||(t.mediaAutoplayBlockedPosted=!0,Ee({source:"hf-preview",type:"media-autoplay-blocked"}))}});let y=document.querySelector("[data-composition-id]")?.getAttribute("data-composition-id")??null,A=Array.from(document.querySelectorAll("[data-start]"));for(let v of A){if(!(v instanceof HTMLElement))continue;let j=v.tagName.toLowerCase();if(j==="script"||j==="style"||j==="link"||j==="meta")continue;if(!v.getAttribute("data-composition-id")){let ae=v.closest("[data-composition-id]")?.getAttribute("data-composition-id")??null;if(ae&&ae!==y)continue}let te=x(v,0),se=b(v),Ne=v.getAttribute("data-composition-id");if(Ne){let Le=(window.__timelines??{})[Ne],ae=null;if(Le&&typeof Le.duration=="function"){let Pe=Number(Le.duration());Number.isFinite(Pe)&&Pe>0&&(ae=Pe)}se!=null&&se>0&&ae!=null?se=Math.min(se,ae):(se==null||se<=0)&&ae!=null&&(se=ae)}let pe=se!=null&&se>0?te+se:Number.POSITIVE_INFINITY,Ce=t.currentTime>=te&&(Number.isFinite(pe)?t.currentTime<pe:!0);v.style.visibility=Ce?"visible":"hidden"}},me=d=>{let m=Math.max(0,Math.round((t.currentTime||0)*t.canonicalFps)),h=Date.now();(d||m!==t.bridgeLastPostedFrame||t.isPlaying!==t.bridgeLastPostedPlaying||t.bridgeMuted!==t.bridgeLastPostedMuted||h-t.bridgeLastPostedAt>=t.bridgeMaxPostIntervalMs)&&(t.bridgeLastPostedFrame=m,t.bridgeLastPostedPlaying=t.isPlaying,t.bridgeLastPostedMuted=t.bridgeMuted,t.bridgeLastPostedAt=h,Ee({source:"hf-preview",type:"state",frame:m,isPlaying:t.isPlaying,muted:t.bridgeMuted,playbackRate:t.playbackRate}))},Ve=()=>{D(),X(),F();let d=M();if(d){let h=B(d.getAttribute("data-width")),y=B(d.getAttribute("data-height")),A=h?parseInt(h,10):0,v=y?parseInt(y,10):0;A>0&&v>0&&Ee({source:"hf-preview",type:"stage-size",width:A,height:v})}xe();let m=Mi({canonicalFps:t.canonicalFps,maxTimelineDurationSeconds:t.maxTimelineDurationSeconds});window.__clipManifest=m,Ee(m),W()},Oe=(d,m=0)=>{for(let h of t.deterministicAdapters){try{d==="discover"&&h.discover(),d==="pause"&&h.pause(),d==="play"&&h.play&&h.play()}catch(y){L("runtime.init.site8",y)}if(d==="discover")try{h.seek({time:m})}catch(y){L("runtime.init.site9",y)}}};if(T)Vn();else{let d={injectedStyles:t.injectedCompStyles,injectedScripts:t.injectedCompScripts,parseDimensionPx:B,onDiagnostic:({code:m,details:h})=>{Ee({source:"hf-preview",type:"diagnostic",code:m,details:h})}};ro(d).then(()=>io(d)).finally(()=>{T=!0,xe(),Oe("discover",t.currentTime),be(),O(),Vn(),Ve(),me(!0)})}let _t=bi({postMessage:d=>Ee(d)});_t.installPickerApi();let on=d=>{let m=Number(d);!Number.isFinite(m)||m<=0?t.playbackRate=1:t.playbackRate=Math.max(.1,Math.min(5,m)),t.mediaForceSyncNextTick=!0,t.capturedTimeline&&typeof t.capturedTimeline.timeScale=="function"&&t.capturedTimeline.timeScale(t.playbackRate);let h=document.querySelectorAll("video, audio");for(let y of h)if(y instanceof HTMLMediaElement)try{y.playbackRate=t.playbackRate}catch(A){L("runtime.init.site10",A)}},fe=Ei({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:on,getCanonicalFps:()=>t.canonicalFps,onSyncMedia:(d,m)=>{t.currentTime=Math.max(0,Number(d)||0),t.isPlaying!==m&&(t.mediaForceSyncNextTick=!0),t.isPlaying=m,ke()},onStatePost:me,onDeterministicSeek:d=>{for(let m of t.deterministicAdapters)try{m.seek({time:Number(d)||0})}catch(h){L("runtime.init.site11",h)}},onDeterministicPause:()=>Oe("pause"),onDeterministicPlay:()=>Oe("play"),onRenderFrameSeek:()=>{},onShowNativeVideos:()=>{},getSafeDuration:()=>G(t.capturedTimeline,0)});window.__player=l(fe),window.__playerReady=!0,window.__renderReady=!0,si(Ee),lt("composition_loaded",{duration:fe.getDuration(),compositionId:document.querySelector("[data-composition-id]")?.getAttribute("data-composition-id")??null}),t.controlBridgeHandler=oi({onPlay:()=>{fe.play(),lt("composition_played",{time:fe.getTime()})},onPause:()=>{fe.pause(),lt("composition_paused",{time:fe.getTime()})},onSeek:(d,m)=>{let h=Math.max(0,d)/t.canonicalFps;fe.seek(h),lt("composition_seeked",{time:h})},onSetMuted:d=>{t.bridgeMuted=d;let m=d||t.mediaOutputMuted;Ae.setMuted(m);let h=document.querySelectorAll("video, audio");for(let y of h)y instanceof HTMLMediaElement&&(y.muted=m)},onSetVolume:d=>{t.bridgeVolume=d,Ae.setVolume(d);let m=document.querySelectorAll("video, audio");for(let h of m){if(!(h instanceof HTMLMediaElement))continue;let y=parseFloat(h.dataset.volume??""),A=Number.isFinite(y)?y:1;h.volume=A*d}},onSetMediaOutputMuted:d=>{t.mediaOutputMuted=d;let m=d||t.bridgeMuted;Ae.setMuted(m);let h=document.querySelectorAll("video, audio");for(let y of h)y instanceof HTMLMediaElement&&(y.muted=m)},onSetPlaybackRate:d=>{on(d),t.transportClock&&t.transportClock.setRate(t.playbackRate)},onEnablePickMode:()=>_t.enablePickMode(),onDisablePickMode:()=>_t.disablePickMode()}),xe(),t.capturedTimeline&&(fe._timeline=t.capturedTimeline),T&&setTimeout(()=>{let d=t.capturedTimeline;xe()&&t.capturedTimeline!==d&&(fe._timeline=t.capturedTimeline),Oe("discover",t.currentTime),Ve(),me(!0)},0),t.deterministicAdapters=[gi(),ai({resolveStartSeconds:d=>x(d,0)}),ui(),fi(),pi(),hi(),li({getTimeline:()=>t.capturedTimeline})],xi(),k(),Oe("discover"),be();let H=new Yt;t.transportClock=H;let Ae=new Zt,ti=!1;Ae.init().then(d=>{ti=d});let Rt=0,sn=!1,Oo=(d,m,h)=>{try{d.pause(),typeof d.totalTime=="function"?d.totalTime(m,!1):d.seek(m,!1)}catch(y){L(h,y)}},Po=d=>{let m=window.__timelines??{},h=M()?.getAttribute("data-composition-id")??null;for(let[y,A]of Object.entries(m)){if(!A||y===h)continue;let v=document.querySelector(`[data-composition-id="${CSS.escape(y)}"]`);if(!v)continue;let j=x(v,0);if(!Number.isFinite(j))continue;let ne=b(v,{includeAuthoredTimingAttrs:!0}),te=R(A),se=ne!=null&&ne>0?ne:te,Ne=Math.max(0,se!=null&&se>0?Math.min(se,d-j):d-j);Oo(A,Ne,"runtime.init.transport.childTimeline")}},at=d=>{let m=t.capturedTimeline;if(m)try{typeof m.totalTime=="function"?m.totalTime(d,!1):m.seek(d,!1)}catch(h){L("runtime.init.transport.seek",h)}else Po(d);for(let h of t.deterministicAdapters)try{h.seek({time:d})}catch(y){L("runtime.init.transport.adapter",y)}},ni=()=>{if(!(t.tornDown||sn)){sn=!0;try{if(t.transportRafId=window.requestAnimationFrame(ni),Rt+=1,Rt%60===0&&!(H.isPlaying()&&t.capturedTimeline!=null&&H.now()<p)){let h=t.capturedTimeline;if(xe()){t.capturedTimeline&&!fe._timeline&&(fe._timeline=t.capturedTimeline),t.capturedTimeline&&t.capturedTimeline!==h&&t.capturedTimeline.pause();let y=G(t.capturedTimeline,0);y>0&&H.setDuration(y),Ve()}}if(Rt%20===0&&Ve(),Rt%30===0&&be(),t.capturedTimeline){let m=G(t.capturedTimeline,0);m>0&&H.setDuration(m)}if(H.isPlaying()&&!t.mediaOutputMuted)if(Ae.isActive()&&Ae.context){let m=Ae.getTime();m>=0&&H.attachAudioSource({currentTimeSeconds:m})}else{let m=document.querySelectorAll("audio[data-start]"),h=!1;for(let y of m){if(!(y instanceof HTMLMediaElement)||!y.isConnected)continue;let A=Number.parseFloat(y.dataset.start??""),v=Number.parseFloat(y.dataset.duration??""),j=Number.isFinite(v)&&v>0?A+v:1/0,ne=Number.parseFloat(y.dataset.playbackStart??y.dataset.mediaStart??"0")||0;if(Number.isFinite(A)&&t.currentTime>=A&&t.currentTime<j){y.paused?!y.error&&y.readyState<HTMLMediaElement.HAVE_FUTURE_DATA&&(H.attachAudioSource({currentTimeSeconds:t.currentTime}),h=!0):(H.attachAudioSource({el:y,compositionStart:A,mediaStart:ne}),h=!0);break}}!h&&H.hasAudioSource()&&H.detachAudioSource()}else H.hasAudioSource()&&H.detachAudioSource();let d=H.now();if(t.currentTime=d,at(d),H.isPlaying()&&H.reachedEnd()){Ae.stopAll(),H.detachAudioSource(),H.pause(),t.isPlaying=!1;let m=H.getDuration();Number.isFinite(m)&&(H.seek(m),t.currentTime=m,at(m)),Oe("pause"),ke(),me(!0);return}H.isPlaying()&&ke(),me(!1)}finally{sn=!1}}},ii=d=>{let m=document.querySelectorAll("video, audio");for(let h of m){if(!(h instanceof HTMLMediaElement)||!h.isConnected)continue;let y=Number.parseFloat(h.dataset.start??"");if(!Number.isFinite(y))continue;let A=Number.parseFloat(h.dataset.duration??""),v=Number.isFinite(A)&&A>0?y+A:1/0;if(d<y||d>=v)continue;let j=Number.parseFloat(h.dataset.playbackStart??h.dataset.mediaStart??"0")||0,ne=d-y+j;if(ne>=0)try{h.currentTime=ne}catch{}}};if(fe.play=()=>{let d=t.capturedTimeline;if(H.isPlaying())return;let m=G(d,0);if(m>0)H.setDuration(m),H.reachedEnd()&&(H.seek(0),t.currentTime=0,at(0));else{let h=M(),y=Number(h?.getAttribute("data-duration")??0);y>0&&H.setDuration(y)}if(d&&d.pause(),!!H.play()){if(t.isPlaying=!0,t.mediaForceSyncNextTick=!0,ii(H.now()),ti){let h=Ae.startGeneration(),y=document.querySelectorAll("audio[data-start]");for(let A of y){if(!(A instanceof HTMLMediaElement)||!A.isConnected)continue;let v=Number.parseFloat(A.dataset.start??"");if(!Number.isFinite(v))continue;let j=Number.parseFloat(A.dataset.playbackStart??A.dataset.mediaStart??"0")||0,ne=Number.parseFloat(A.dataset.volume??""),te=Number.isFinite(ne)?ne:1;Ae.decodeAudioElement(A).then(se=>{!se||!H.isPlaying()||Ae.schedulePlayback(A,se,v,j,H.now(),te*t.bridgeVolume,h)})}}Oe("play"),ke(),me(!0)}},fe.pause=()=>{if(!H.isPlaying())return;Ae.stopAll(),H.detachAudioSource(),H.pause(),t.isPlaying=!1,t.currentTime=H.now(),t.mediaForceSyncNextTick=!0,ii(t.currentTime);let d=t.capturedTimeline;d&&d.pause(),Oe("pause"),ke(),me(!0)},fe.seek=d=>{let m=Ze(Math.max(0,Number(d)||0),t.canonicalFps);Ae.stopAll(),H.detachAudioSource(),H.isPlaying()&&H.pause(),H.seek(m),t.currentTime=H.now(),t.isPlaying=!1,t.mediaForceSyncNextTick=!0;let y=t.capturedTimeline;y&&y.pause(),at(t.currentTime),Oe("pause"),ke(),me(!0)},fe.renderSeek=d=>{let m=Ze(Math.max(0,Number(d)||0),t.canonicalFps);H.isPlaying()&&H.pause(),H.seek(m),t.currentTime=H.now(),t.isPlaying=!1,t.mediaForceSyncNextTick=!0,at(t.currentTime),ke(),me(!0)},fe.getTime=()=>H.now(),fe.getDuration=()=>{let d=H.getDuration();return Number.isFinite(d)?d:0},fe.isPlaying=()=>H.isPlaying(),fe.setPlaybackRate=d=>{on(d),H.setRate(t.playbackRate)},t.capturedTimeline){let d=G(t.capturedTimeline,0);d>0&&H.setDuration(d),t.capturedTimeline.pause()}let ri=window.__player;if(ri){let d=["play","pause","seek","renderSeek","getTime","getDuration","isPlaying"];for(let m of d)Object.defineProperty(ri,m,{get:()=>fe[m],set:h=>{fe[m]=h},configurable:!0})}t.transportRafId=window.requestAnimationFrame(ni),Ve(),me(!0);let an=()=>{if(!t.tornDown){t.tornDown=!0,t.transportRafId!=null&&(window.cancelAnimationFrame(t.transportRafId),t.transportRafId=null),t.transportClock=null,Ae.destroy(),ee!=null&&(window.clearTimeout(ee),ee=null),s!=null&&(window.cancelAnimationFrame(s),s=null),Re(),t.controlBridgeHandler&&(window.removeEventListener("message",t.controlBridgeHandler),t.controlBridgeHandler=null),n&&(window.removeEventListener("error",n),n=null),i&&(window.removeEventListener("unhandledrejection",i),i=null),t.beforeUnloadHandler&&(window.removeEventListener("beforeunload",t.beforeUnloadHandler),t.beforeUnloadHandler=null),_t.disablePickMode();for(let d of t.deterministicAdapters)if(!(!d||typeof d.revert!="function"))try{d.revert()}catch(m){L("runtime.init.site12",m)}t.deterministicAdapters=[];for(let d of r.splice(0))try{d()}catch(m){L("runtime.init.site13",m)}for(let d of t.injectedCompStyles)try{d.remove()}catch(m){L("runtime.init.site14",m)}t.injectedCompStyles=[];for(let d of t.injectedCompScripts)try{d.remove()}catch(m){L("runtime.init.site15",m)}t.injectedCompScripts=[],t.capturedTimeline=null,e.__hfRuntimeTeardown===an&&(e.__hfRuntimeTeardown=null)}};e.__hfRuntimeTeardown=an,t.beforeUnloadHandler=an,window.addEventListener("beforeunload",t.beforeUnloadHandler)}var uo=["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"],$n=[[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 Ka(t){if(t<=255)return uo[t];let e=0,n=$n.length-1;for(;e<=n;){let i=e+n>>1,r=$n[i];if(t<r[0]){n=i-1;continue}if(t>r[1]){e=i+1;continue}return r[2]}return"L"}function Ja(t){let e=t.length;if(e===0)return null;let n=new Array(e),i=!1;for(let l=0;l<e;){let a=t.charCodeAt(l),f=a,p=1;if(a>=55296&&a<=56319&&l+1<e){let C=t.charCodeAt(l+1);C>=56320&&C<=57343&&(f=(a-55296<<10)+(C-56320)+65536,p=2)}let g=Ka(f);(g==="R"||g==="AL"||g==="AN")&&(i=!0);for(let C=0;C<p;C++)n[l+C]=g;l+=p}if(!i)return null;let r=0;for(let l=0;l<e;l++){let a=n[l];if(a==="L"){r=0;break}if(a==="R"||a==="AL"){r=1;break}}let o=new Int8Array(e);for(let l=0;l<e;l++)o[l]=r;let s=r&1?"R":"L",c=s,u=c;for(let l=0;l<e;l++)n[l]==="NSM"?n[l]=u:u=n[l];u=c;for(let l=0;l<e;l++){let a=n[l];a==="EN"?n[l]=u==="AL"?"AN":"EN":(a==="R"||a==="L"||a==="AL")&&(u=a)}for(let l=0;l<e;l++)n[l]==="AL"&&(n[l]="R");for(let l=1;l<e-1;l++)n[l]==="ES"&&n[l-1]==="EN"&&n[l+1]==="EN"&&(n[l]="EN"),n[l]==="CS"&&(n[l-1]==="EN"||n[l-1]==="AN")&&n[l+1]===n[l-1]&&(n[l]=n[l-1]);for(let l=0;l<e;l++){if(n[l]!=="EN")continue;let a;for(a=l-1;a>=0&&n[a]==="ET";a--)n[a]="EN";for(a=l+1;a<e&&n[a]==="ET";a++)n[a]="EN"}for(let l=0;l<e;l++){let a=n[l];(a==="WS"||a==="ES"||a==="ET"||a==="CS")&&(n[l]="ON")}u=c;for(let l=0;l<e;l++){let a=n[l];a==="EN"?n[l]=u==="L"?"L":"EN":(a==="R"||a==="L")&&(u=a)}for(let l=0;l<e;l++){if(n[l]!=="ON")continue;let a=l+1;for(;a<e&&n[a]==="ON";)a++;let f=l>0?n[l-1]:c,p=a<e?n[a]:c,g=f!=="L"?"R":"L";if(g===(p!=="L"?"R":"L"))for(let w=l;w<a;w++)n[w]=g;l=a-1}for(let l=0;l<e;l++)n[l]==="ON"&&(n[l]=s);for(let l=0;l<e;l++){let a=n[l];(o[l]&1)===0?a==="R"?o[l]++:(a==="AN"||a==="EN")&&(o[l]+=2):(a==="L"||a==="AN"||a==="EN")&&o[l]++}return o}function co(t,e){let n=Ja(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 Qa=/[ \\t\\n\\r\\f]+/g,Ya=/[\\t\\n\\r\\f]| {2,}|^ | $/;function Za(t){let e=t??"normal";return e==="pre-wrap"?{mode:e,preserveOrdinarySpaces:!0,preserveHardBreaks:!0}:{mode:e,preserveOrdinarySpaces:!1,preserveHardBreaks:!1}}function Xa(t){if(!Ya.test(t))return t;let e=t.replace(Qa," ");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 el(t){return/[\\r\\f]/.test(t)?t.replace(/\\r\\n/g,`\n`).replace(/[\\r\\f]/g,`\n`):t.replace(/\\r\\n/g,`\n`)}var Kn=null,tl;function nl(){return Kn===null&&(Kn=new Intl.Segmenter(tl,{granularity:"word"})),Kn}var il=/\\p{Script=Arabic}/u,Xt=/\\p{M}/u,So=/\\p{Nd}/u;function fo(t){return il.test(t)}function mo(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 _e(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(mo(r))return!0;e++;continue}}if(mo(n))return!0}}return!1}function rl(t){let e=nn(t);return e!==null&&(tn.has(e)||je.has(e))}var ol=new Set(["\\xA0","\\u202F","\\u2060","\\uFEFF"]);function sl(t){return _e(t)}function al(t){let e=nn(t);return e!==null&&ol.has(e)}function en(t){return!rl(t)&&!al(t)}var tn=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"]),Dt=new Set([\'"\',"(","[","{","\\u201C","\\u2018","\\xAB","\\u2039","\\uFF08","\\u3014","\\u3008","\\u300A","\\u300C","\\u300E","\\u3010","\\u3016","\\u3018","\\u301A"]),Qn=new Set(["\'","\\u2019"]),je=new Set([".",",","!","?",":",";","\\u060C","\\u061B","\\u061F","\\u0964","\\u0965","\\u104A","\\u104B","\\u104C","\\u104D","\\u104F",")","]","}","%",\'"\',"\\u201D","\\u2019","\\xBB","\\u203A","\\u2026"]),ll=new Set([":",".","\\u060C","\\u061B"]),ul=new Set(["\\u104F"]),cl=new Set(["\\u201D","\\u2019","\\xBB","\\u203A","\\u300D","\\u300F","\\u3011","\\u300B","\\u3009","\\u3015","\\uFF09"]);function dl(t){if(Yn(t))return!0;let e=!1;for(let n of t){if(je.has(n)){e=!0;continue}if(!(e&&Xt.test(n)))return!1}return e}function fl(t){for(let e of t)if(!tn.has(e)&&!je.has(e))return!1;return t.length>0}function ml(t){if(Yn(t))return!0;for(let e of t)if(!Dt.has(e)&&!Qn.has(e)&&!Xt.test(e))return!1;return t.length>0}function Yn(t){let e=!1;for(let n of t)if(!(n==="\\\\"||Xt.test(n))){if(Dt.has(n)||je.has(n)||Qn.has(n)){e=!0;continue}return!1}return e}function bo(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 nn(t){if(t.length===0)return null;let e=bo(t,t.length);return t.slice(e)}function pl(t){let e=Array.from(t),n=e.length;for(;n>0;){let i=e[n-1];if(Xt.test(i)){n--;continue}if(Dt.has(i)||Qn.has(i)){n--;continue}break}return n<=0||n===e.length?null:{head:e.slice(0,n).join(""),tail:e.slice(n).join("")}}function hl(t,e,n){return n==="text"&&!e&&t.length===1&&t!=="-"&&t!=="\\u2014"?t:null}function po(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 c=r.repeat(s);return t[i]=c,c}function ho(t,e){return t&&e!==null&&ll.has(e)}function xl(t){let e=nn(t);return e!==null&&ul.has(e)}function gl(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 rn(t){let e=t.length;for(;e>0;){let n=bo(t,e),i=t.slice(n,e);if(cl.has(i))return!0;if(!je.has(i))return!1;e=n}return!1}function yl(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 Sl=/[\\x20\\t\\n\\xA0\\xAD\\u200B\\u202F\\u2060\\uFEFF]/;function Te(t){return t.length===1?t[0]:t.join("")}function bl(t,e){let n=[];for(let i=t.length-1;i>=0;i--)n.push(t[i]);return n.push(e),Te(n)}function Al(t,e,n,i){if(!Sl.test(t))return[{text:t,isWordLike:e,kind:"text",start:n}];let r=[],o=null,s=[],c=n,u=!1,l=0;for(let a of t){let f=yl(a,i),p=f==="text"&&e;if(o!==null&&f===o&&p===u){s.push(a),l+=a.length;continue}o!==null&&r.push({text:Te(s),isWordLike:u,kind:o,start:c}),o=f,s=[a],c=n+l,u=p,l+=a.length}return o!==null&&r.push({text:Te(s),isWordLike:u,kind:o,start:c}),r}function Jn(t){return t==="space"||t==="preserved-space"||t==="zero-width-break"||t==="hard-break"}var El=/^[A-Za-z][A-Za-z0-9+.-]*:$/;function Fl(t,e){let n=t.texts[e];return n.startsWith("www.")?!0:El.test(n)&&e+1<t.len&&t.kinds[e+1]==="text"&&t.texts[e+1]==="//"}function wl(t){return t.includes("?")&&(t.includes("://")||t.startsWith("www."))}function Nl(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"||!Fl(t,s))continue;let c=[e[s]],u=s+1;for(;u<t.len&&!Jn(i[u]);){c.push(e[u]),n[s]=!0;let l=e[u].includes("?");if(i[u]="text",e[u]="",u++,l)break}e[s]=Te(c)}let o=0;for(let s=0;s<e.length;s++){let c=e[s];c.length!==0&&(o!==s&&(e[o]=c,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 Cl(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]),!wl(s))continue;let c=o+1;if(c>=t.len||Jn(t.kinds[c]))continue;let u=[],l=t.starts[c],a=c;for(;a<t.len&&!Jn(t.kinds[a]);)u.push(t.texts[a]),a++;u.length>0&&(e.push(Te(u)),n.push(!0),i.push("text"),r.push(l),o=a-1)}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}var Ml=new Set([":","-","/","\\xD7",",",".","+","\\u2013","\\u2014"]),xo=/^[A-Za-z0-9_]+[,:;]*$/,go=/[,:;]+$/;function Ao(t){for(let e of t)if(So.test(e))return!0;return!1}function vt(t){if(t.length===0)return!1;for(let e of t)if(!(So.test(e)||Ml.has(e)))return!1;return!0}function Tl(t){let e=[],n=[],i=[],r=[];for(let o=0;o<t.len;o++){let s=t.texts[o],c=t.kinds[o];if(c==="text"&&vt(s)&&Ao(s)){let u=[s],l=o+1;for(;l<t.len&&t.kinds[l]==="text"&&vt(t.texts[l]);)u.push(t.texts[l]),l++;e.push(Te(u)),n.push(!0),i.push("text"),r.push(t.starts[o]),o=l-1;continue}e.push(s),n.push(t.isWordLike[o]),i.push(c),r.push(t.starts[o])}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function kl(t){let e=[],n=[],i=[],r=[];for(let o=0;o<t.len;o++){let s=t.texts[o],c=t.kinds[o],u=t.isWordLike[o];if(c==="text"&&u&&xo.test(s)){let l=[s],a=go.test(s),f=o+1;for(;a&&f<t.len&&t.kinds[f]==="text"&&t.isWordLike[f]&&xo.test(t.texts[f]);){let p=t.texts[f];l.push(p),a=go.test(p),f++}e.push(Te(l)),n.push(!0),i.push("text"),r.push(t.starts[o]),o=f-1;continue}e.push(s),n.push(u),i.push(c),r.push(t.starts[o])}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function vl(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 c=s.split("-"),u=c.length>1;for(let l=0;l<c.length;l++){let a=c[l];if(!u)break;(a.length===0||!Ao(a)||!vt(a))&&(u=!1)}if(u){let l=0;for(let a=0;a<c.length;a++){let f=c[a],p=a<c.length-1?`${f}-`:f;e.push(p),n.push(!0),i.push("text"),r.push(t.starts[o]+l),l+=p.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 Dl(t){let e=[],n=[],i=[],r=[],o=0;for(;o<t.len;){let s=[t.texts[o]],c=t.isWordLike[o],u=t.kinds[o],l=t.starts[o];if(u==="glue"){let a=[s[0]],f=l;for(o++;o<t.len&&t.kinds[o]==="glue";)a.push(t.texts[o]),o++;let p=Te(a);if(o<t.len&&t.kinds[o]==="text")s[0]=p,s.push(t.texts[o]),c=t.isWordLike[o],u="text",l=f,o++;else{e.push(p),n.push(!1),i.push("glue"),r.push(f);continue}}else o++;if(u==="text")for(;o<t.len&&t.kinds[o]==="glue";){let a=[];for(;o<t.len&&t.kinds[o]==="glue";)a.push(t.texts[o]),o++;let f=Te(a);if(o<t.len&&t.kinds[o]==="text"){s.push(f,t.texts[o]),c=c||t.isWordLike[o],o++;continue}s.push(f)}e.push(Te(s)),n.push(c),i.push(u),r.push(l)}return{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function _l(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"||!_e(e[o])||!_e(e[o+1]))continue;let s=pl(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 yo(t,e,n){let i=nl(),r=0,o=[],s=[],c=[],u=[],l=[],a=[],f=[],p=[],g=[],C=[],w=[],S=[];for(let F of i.segment(t))for(let x of Al(F.segment,F.isWordLike??!1,F.index,n)){let ce=function(){a[_]!==null&&(s[_]=[po(o,a,f,_)],a[_]=null),s[_].push(x.text),c[_]=c[_]||x.isWordLike,p[_]=p[_]||N,g[_]=g[_]||T,C[_]=P,w[_]=J,S[_]=ho(g[_],R)},b=x.kind==="text",E=hl(x.text,x.isWordLike,x.kind),N=_e(x.text),T=fo(x.text),R=nn(x.text),P=rn(x.text),J=xl(x.text),_=r-1;e.carryCJKAfterClosingQuote&&b&&r>0&&u[_]==="text"&&N&&p[_]&&C[_]||b&&r>0&&u[_]==="text"&&fl(x.text)&&p[_]||b&&r>0&&u[_]==="text"&&w[_]?ce():b&&r>0&&u[_]==="text"&&x.isWordLike&&T&&S[_]?(ce(),c[_]=!0):E!==null&&r>0&&u[_]==="text"&&a[_]===E?f[_]=(f[_]??1)+1:b&&!x.isWordLike&&r>0&&u[_]==="text"&&(dl(x.text)||x.text==="-"&&c[_])?ce():(o[r]=x.text,s[r]=[x.text],c[r]=x.isWordLike,u[r]=x.kind,l[r]=x.start,a[r]=E,f[r]=E===null?0:1,p[r]=N,g[r]=T,C[r]=P,w[r]=J,S[r]=ho(T,R),r++)}for(let F=0;F<r;F++){if(a[F]!==null){o[F]=po(o,a,f,F);continue}o[F]=Te(s[F])}for(let F=1;F<r;F++)u[F]==="text"&&!c[F]&&Yn(o[F])&&u[F-1]==="text"&&(o[F-1]+=o[F],c[F-1]=c[F-1]||c[F],o[F]="");let U=Array.from({length:r},()=>null),B=-1;for(let F=r-1;F>=0;F--){let x=o[F];if(x.length!==0){if(u[F]==="text"&&!c[F]&&ml(x)&&B>=0&&u[B]==="text"){let b=U[B]??[];b.push(x),U[B]=b,l[B]=l[F],o[F]="";continue}B=F}}for(let F=0;F<r;F++){let x=U[F];x!=null&&(o[F]=bl(x,o[F]))}let M=0;for(let F=0;F<r;F++){let x=o[F];x.length!==0&&(M!==F&&(o[M]=x,c[M]=c[F],u[M]=u[F],l[M]=l[F]),M++)}o.length=M,c.length=M,u.length=M,l.length=M;let X=Dl({len:M,texts:o,isWordLike:c,kinds:u,starts:l}),D=_l(kl(vl(Tl(Cl(Nl(X))))));for(let F=0;F<D.len-1;F++){let x=gl(D.texts[F]);x!==null&&(D.kinds[F]!=="space"&&D.kinds[F]!=="preserved-space"||D.kinds[F+1]!=="text"||!fo(D.texts[F+1])||(D.texts[F]=x.space,D.isWordLike[F]=!1,D.kinds[F]=D.kinds[F]==="preserved-space"?"preserved-space":"space",D.texts[F+1]=x.marks+D.texts[F+1],D.starts[F+1]=D.starts[F]+x.space.length))}return D}function Rl(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 Ll(t){if(t.len<=1)return t;let e=[],n=[],i=[],r=[],o=null,s=!1,c=0,u=!1,l=!1;function a(){o!==null&&(e.push(Te(o)),n.push(s),i.push("text"),r.push(c),o=null)}for(let f=0;f<t.len;f++){let p=t.texts[f],g=t.kinds[f],C=t.isWordLike[f],w=t.starts[f];if(g==="text"){let S=sl(p),U=en(p);if(o!==null&&u&&l){o.push(p),s=s||C,u=u||S,l=U;continue}a(),o=[p],s=C,c=w,u=S,l=U;continue}a(),e.push(p),n.push(C),i.push(g),r.push(w)}return a(),{len:e.length,texts:e,isWordLike:n,kinds:i,starts:r}}function Eo(t,e,n="normal",i="normal"){let r=Za(n),o=r.mode==="pre-wrap"?el(t):Xa(t);if(o.length===0)return{normalized:o,chunks:[],len:0,texts:[],isWordLike:[],kinds:[],starts:[]};let s=i==="keep-all"?Ll(yo(o,e,r)):yo(o,e,r);return{normalized:o,chunks:Rl(s,r),...s}}var rt=null,Fo=new Map,ot=null,Bl=96,Ol=/\\p{Emoji_Presentation}/u,Pl=/[\\p{Emoji_Presentation}\\p{Extended_Pictographic}\\p{Regional_Indicator}\\uFE0F\\u20E3]/u,Zn=null,wo=new Map;function Xn(){if(rt!==null)return rt;if(typeof OffscreenCanvas<"u")return rt=new OffscreenCanvas(1,1).getContext("2d"),rt;if(typeof document<"u")return rt=document.createElement("canvas").getContext("2d"),rt;throw new Error("Text measurement requires OffscreenCanvas or a DOM canvas context.")}function Il(t){let e=Fo.get(t);return e||(e=new Map,Fo.set(t,e)),e}function We(t,e){let n=e.get(t);return n===void 0&&(n={width:Xn().measureText(t).width,containsCJK:_e(t)},e.set(t,n)),n}function st(){if(ot!==null)return ot;if(typeof navigator>"u")return ot={lineFitEpsilon:.005,carryCJKAfterClosingQuote:!1,preferPrefixWidthsForBreakableRuns:!1,preferEarlySoftHyphenBreak:!1},ot;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 ot={lineFitEpsilon:n?1/64:.005,carryCJKAfterClosingQuote:i,preferPrefixWidthsForBreakableRuns:n,preferEarlySoftHyphenBreak:n},ot}function Wl(t){let e=t.match(/(\\d+(?:\\.\\d+)?)\\s*px/);return e?parseFloat(e[1]):16}function No(){return Zn===null&&(Zn=new Intl.Segmenter(void 0,{granularity:"grapheme"})),Zn}function Hl(t){return Ol.test(t)||t.includes("\\uFE0F")}function Co(t){return Pl.test(t)}function ql(t,e){let n=wo.get(t);if(n!==void 0)return n;let i=Xn();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 wo.set(t,n),n}function Ul(t){let e=0,n=No();for(let i of n.segment(t))Hl(i.segment)&&e++;return e}function zl(t,e){return e.emojiCount===void 0&&(e.emojiCount=Ul(t)),e.emojiCount}function Ge(t,e,n){return n===0?e.width:e.width-zl(t,e)*n}function Mo(t,e,n,i,r){if(e.breakableFitAdvances!==void 0)return e.breakableFitAdvances;let o=No(),s=[];for(let a of o.segment(t))s.push(a.segment);if(s.length<=1)return e.breakableFitAdvances=null,e.breakableFitAdvances;if(r==="sum-graphemes"){let a=[];for(let f of s){let p=We(f,n);a.push(Ge(f,p,i))}return e.breakableFitAdvances=a,e.breakableFitAdvances}if(r==="pair-context"||s.length>Bl){let a=[],f=null,p=0;for(let g of s){let C=We(g,n),w=Ge(g,C,i);if(f===null)a.push(w);else{let S=f+g,U=We(S,n);a.push(Ge(S,U,i)-p)}f=g,p=w}return e.breakableFitAdvances=a,e.breakableFitAdvances}let c=[],u="",l=0;for(let a of s){u+=a;let f=We(u,n),p=Ge(u,f,i);c.push(p-l),l=p}return e.breakableFitAdvances=c,e.breakableFitAdvances}function To(t,e){let n=Xn();n.font=t;let i=Il(t),r=Wl(t),o=e?ql(t,r):0;return{cache:i,fontSize:r,emojiCorrection:o}}function jl(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 Gl(t,e){if(e<=0)return 0;let n=t%e;return Math.abs(n)<=1e-6?e:e-n}function Vl(t,e,n,i,r){let o=0,s=e;for(;o<t.length;){let c=s+t[o];if((o+1<t.length?c+r:c)>n+i)break;s=c,o++}return{fitCount:o,fittedWidth:s}}function ko(t,e){return t.simpleLineWalkFastPath?vo(t,e):Do(t,e)}function vo(t,e,n){let{widths:i,kinds:r,breakableFitAdvances:o}=t;if(i.length===0)return 0;let c=st().lineFitEpsilon,u=e+c,l=0,a=0,f=!1,p=0,g=0,C=0,w=0,S=-1,U=0;function B(){S=-1,U=0}function M(E=C,N=w,T=a){l++,n?.({startSegmentIndex:p,startGraphemeIndex:g,endSegmentIndex:E,endGraphemeIndex:N,width:T}),a=0,f=!1,B()}function X(E,N){f=!0,p=E,g=0,C=E+1,w=0,a=N}function D(E,N,T){f=!0,p=E,g=N,C=E,w=N+1,a=T}function F(E,N){if(!f){X(E,N);return}a+=N,C=E+1,w=0}function x(E,N){let T=o[E];for(let R=N;R<T.length;R++){let P=T[R];f?a+P>u?(M(),D(E,R,P)):(a+=P,C=E,w=R+1):D(E,R,P)}f&&C===E&&w===T.length&&(C=E+1,w=0)}let b=0;for(;b<i.length&&!(!f&&(b=jl(t,b),b>=i.length));){let E=i[b],N=r[b],T=N==="space"||N==="preserved-space"||N==="tab"||N==="zero-width-break"||N==="soft-hyphen";if(!f){E>e&&o[b]!==null?x(b,0):X(b,E),T&&(S=b+1,U=a-E),b++;continue}if(a+E>u){if(T){F(b,E),M(b+1,0,a-E),b++;continue}if(S>=0){if(C>S||C===S&&w>0){M();continue}M(S,0,U);continue}if(E>e&&o[b]!==null){M(),x(b,0),b++;continue}M();continue}F(b,E),T&&(S=b+1,U=a-E),b++}return f&&M(),l}function Do(t,e,n){if(t.simpleLineWalkFastPath)return vo(t,e,n);let{widths:i,lineEndFitAdvances:r,lineEndPaintAdvances:o,kinds:s,breakableFitAdvances:c,discretionaryHyphenWidth:u,tabStopAdvance:l,chunks:a}=t;if(i.length===0||a.length===0)return 0;let f=st(),p=f.lineFitEpsilon,g=e+p,C=0,w=0,S=!1,U=0,B=0,M=0,X=0,D=-1,F=0,x=0,b=null;function E(){D=-1,F=0,x=0,b=null}function N($=M,G=X,I=w){C++,n?.({startSegmentIndex:U,startGraphemeIndex:B,endSegmentIndex:$,endGraphemeIndex:G,width:I}),w=0,S=!1,E()}function T($,G){S=!0,U=$,B=0,M=$+1,X=0,w=G}function R($,G,I){S=!0,U=$,B=G,M=$,X=G+1,w=I}function P($,G){if(!S){T($,G);return}w+=G,M=$+1,X=0}function J($,G,I,Z){if(!G)return;let xe=$==="tab"?0:r[I],we=$==="tab"?Z:o[I];D=I+1,F=w-Z+xe,x=w-Z+we,b=$}function _($,G){let I=c[$];for(let Z=G;Z<I.length;Z++){let xe=I[Z];S?w+xe>g?(N(),R($,Z,xe)):(w+=xe,M=$,X=Z+1):R($,Z,xe)}S&&M===$&&X===I.length&&(M=$+1,X=0)}function ce($){if(b!=="soft-hyphen")return!1;let G=c[$];if(G==null)return!1;let{fitCount:I,fittedWidth:Z}=Vl(G,w,e,p,u);return I===0?!1:(w=Z,M=$,X=I,E(),I===G.length?(M=$+1,X=0,!0):(N($,I,Z+u),_($,I),!0))}function ge($){C++,n?.({startSegmentIndex:$.startSegmentIndex,startGraphemeIndex:0,endSegmentIndex:$.consumedEndSegmentIndex,endGraphemeIndex:0,width:0}),E()}for(let $=0;$<a.length;$++){let G=a[$];if(G.startSegmentIndex===G.endSegmentIndex){ge(G);continue}S=!1,w=0,U=G.startSegmentIndex,B=0,M=G.startSegmentIndex,X=0,E();let I=G.startSegmentIndex;for(;I<G.endSegmentIndex;){let Z=s[I],xe=Z==="space"||Z==="preserved-space"||Z==="tab"||Z==="zero-width-break"||Z==="soft-hyphen",we=Z==="tab"?Gl(w,l):i[I];if(Z==="soft-hyphen"){S&&(M=I+1,X=0,D=I+1,F=w+u,x=w+u,b=Z),I++;continue}if(!S){we>e&&c[I]!==null?_(I,0):T(I,we),J(Z,xe,I,we),I++;continue}if(w+we>g){let k=w+(Z==="tab"?0:r[I]),O=w+(Z==="tab"?we:o[I]);if(b==="soft-hyphen"&&f.preferEarlySoftHyphenBreak&&F<=g){N(D,0,x);continue}if(b==="soft-hyphen"&&ce(I)){I++;continue}if(xe&&k<=g){P(I,we),N(I+1,0,O),I++;continue}if(D>=0&&F<=g){if(M>D||M===D&&X>0){N();continue}let ie=D;N(ie,0,x),I=ie;continue}if(we>e&&c[I]!==null){N(),_(I,0),I++;continue}N();continue}P(I,we),J(Z,xe,I,we),I++}if(S){let Z=D===G.consumedEndSegmentIndex?x:w;N(G.consumedEndSegmentIndex,0,Z)}}return C}var ei=null;function $l(){return ei===null&&(ei=new Intl.Segmenter(void 0,{granularity:"grapheme"})),ei}function Kl(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 Jl(t,e){let n=[],i=[],r=0,o=!1,s=!1,c=!1;function u(){i.length!==0&&(n.push({text:i.length===1?i[0]:i.join(""),start:r}),i=[],o=!1,s=!1,c=!1)}function l(f,p,g){i=[f],r=p,o=g,s=rn(f),c=Dt.has(f)}function a(f,p){i.push(f),o=o||p;let g=rn(f);f.length===1&&je.has(f)?s=s||g:s=g,c=!1}for(let f of $l().segment(t)){let p=f.segment,g=_e(p);if(i.length===0){l(p,f.index,g);continue}if(c||tn.has(p)||je.has(p)||e.carryCJKAfterClosingQuote&&g&&s){a(p,g);continue}if(!o&&!g){a(p,g);continue}u(),l(p,f.index,g)}return u(),n}function Ql(t){if(t.length<=1)return t;let e=[],n=[t[0].text],i=t[0].start,r=_e(t[0].text),o=en(t[0].text);function s(){e.push({text:n.length===1?n[0]:n.join(""),start:i})}for(let c=1;c<t.length;c++){let u=t[c],l=_e(u.text),a=en(u.text);if(r&&o){n.push(u.text),r=r||l,o=a;continue}s(),n=[u.text],i=u.start,r=l,o=a}return s(),e}function Yl(t,e,n,i){let r=st(),{cache:o,emojiCorrection:s}=To(e,Co(t.normalized)),c=Ge("-",We("-",o),s),l=Ge(" ",We(" ",o),s)*8;if(t.len===0)return Kl(n);let a=[],f=[],p=[],g=[],C=t.chunks.length<=1,w=n?[]:null,S=[],U=n?[]:null,B=Array.from({length:t.len});function M(x,b,E,N,T,R,P){T!=="text"&&T!=="space"&&T!=="zero-width-break"&&(C=!1),a.push(b),f.push(E),p.push(N),g.push(T),w?.push(R),S.push(P),U!==null&&U.push(x)}function X(x,b,E,N,T){let R=We(x,o),P=Ge(x,R,s),J=b==="space"||b==="preserved-space"||b==="zero-width-break"?0:P,_=b==="space"||b==="zero-width-break"?0:P;if(T&&N&&x.length>1){let ce="sum-graphemes";vt(x)?ce="pair-context":r.preferPrefixWidthsForBreakableRuns&&(ce="segment-prefixes");let ge=Mo(x,R,o,s,ce);M(x,P,J,_,b,E,ge);return}M(x,P,J,_,b,E,null)}for(let x=0;x<t.len;x++){B[x]=a.length;let b=t.texts[x],E=t.isWordLike[x],N=t.kinds[x],T=t.starts[x];if(N==="soft-hyphen"){M(b,0,c,c,N,T,null);continue}if(N==="hard-break"){M(b,0,0,0,N,T,null);continue}if(N==="tab"){M(b,0,0,0,N,T,null);continue}let R=We(b,o);if(N==="text"&&R.containsCJK){let P=Jl(b,r),J=i==="keep-all"?Ql(P):P;for(let _=0;_<J.length;_++){let ce=J[_];X(ce.text,"text",T+ce.start,E,i==="keep-all"||!_e(ce.text))}continue}X(b,N,T,E,!0)}let D=Zl(t.chunks,B,a.length),F=w===null?null:co(t.normalized,w);return U!==null?{widths:a,lineEndFitAdvances:f,lineEndPaintAdvances:p,kinds:g,simpleLineWalkFastPath:C,segLevels:F,breakableFitAdvances:S,discretionaryHyphenWidth:c,tabStopAdvance:l,chunks:D,segments:U}:{widths:a,lineEndFitAdvances:f,lineEndPaintAdvances:p,kinds:g,simpleLineWalkFastPath:C,segLevels:F,breakableFitAdvances:S,discretionaryHyphenWidth:c,tabStopAdvance:l,chunks:D}}function Zl(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,c=o.endSegmentIndex<e.length?e[o.endSegmentIndex]:n,u=o.consumedEndSegmentIndex<e.length?e[o.consumedEndSegmentIndex]:n;i.push({startSegmentIndex:s,endSegmentIndex:c,consumedEndSegmentIndex:u})}return i}function Xl(t,e,n,i){let r=i?.wordBreak??"normal",o=Eo(t,st(),i?.whiteSpace,r);return Yl(o,e,n,r)}function _o(t,e,n){return Xl(t,e,!1,n)}function Ro(t,e,n){let i=ko(t,e);return{lineCount:i,height:i*n}}var eu={maxWidth:1600,baseFontSize:78,minFontSize:42,fontWeight:900,fontFamily:"Outfit",step:2};function Lo(t,e){let n={...eu,...e},i=1.2;for(let r=n.baseFontSize;r>=n.minFontSize;r-=n.step){let o=`${n.fontWeight} ${r}px ${n.fontFamily}`,s=_o(t,o),{lineCount:c}=Ro(s,n.maxWidth,r*i);if(c<=1)return{fontSize:r,fits:!0}}return{fontSize:n.minFontSize,fits:!1}}window.__timelines=window.__timelines||{};window.__hyperframes={fitTextFontSize:Lo,getVariables:to};function Bo(){let t=window;t.__hyperframeRuntimeBootstrapped||(t.__hyperframeRuntimeBootstrapped=!0,lo())}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Bo,{once:!0}):Bo();})();\n';
|
|
7361
7361
|
}
|
|
7362
7362
|
});
|
|
7363
7363
|
|
|
@@ -27864,9 +27864,10 @@ __export(manager_exports2, {
|
|
|
27864
27864
|
clearBrowser: () => clearBrowser,
|
|
27865
27865
|
ensureBrowser: () => ensureBrowser,
|
|
27866
27866
|
findBrowser: () => findBrowser,
|
|
27867
|
+
isLinuxArm: () => isLinuxArm,
|
|
27867
27868
|
setBrowserPath: () => setBrowserPath
|
|
27868
27869
|
});
|
|
27869
|
-
import { execSync } from "child_process";
|
|
27870
|
+
import { execSync, spawnSync as spawnSync2 } from "child_process";
|
|
27870
27871
|
import { existsSync as existsSync17, rmSync as rmSync4 } from "fs";
|
|
27871
27872
|
import { homedir as homedir5 } from "os";
|
|
27872
27873
|
import { join as join21 } from "path";
|
|
@@ -27928,6 +27929,45 @@ async function findBrowser() {
|
|
|
27928
27929
|
if (fromCache) return fromCache;
|
|
27929
27930
|
return findFromSystem2();
|
|
27930
27931
|
}
|
|
27932
|
+
async function ensureLinuxArmBrowser(options) {
|
|
27933
|
+
void options;
|
|
27934
|
+
const existing = await findBrowser();
|
|
27935
|
+
if (existing) return existing;
|
|
27936
|
+
const hasApt = existsSync17("/usr/bin/apt-get");
|
|
27937
|
+
if (hasApt) {
|
|
27938
|
+
console.error(
|
|
27939
|
+
"\n\u{1F50D} Linux ARM64 detected \u2014 Chrome Headless Shell is not available for this platform."
|
|
27940
|
+
);
|
|
27941
|
+
console.error("\u{1F4E6} Auto-installing system Chromium via apt-get (this only happens once)...\n");
|
|
27942
|
+
const result = spawnSync2("apt-get", ["install", "-y", "chromium-browser"], {
|
|
27943
|
+
stdio: "inherit",
|
|
27944
|
+
timeout: 12e4
|
|
27945
|
+
});
|
|
27946
|
+
if (result.status === 0) {
|
|
27947
|
+
const afterInstall = await findBrowser();
|
|
27948
|
+
if (afterInstall) {
|
|
27949
|
+
console.error(`
|
|
27950
|
+
\u2705 Chromium installed at ${afterInstall.executablePath}
|
|
27951
|
+
`);
|
|
27952
|
+
return afterInstall;
|
|
27953
|
+
}
|
|
27954
|
+
} else {
|
|
27955
|
+
console.error("\n\u26A0\uFE0F apt-get exited with errors. Trying anyway...\n");
|
|
27956
|
+
const afterAttempt = await findBrowser();
|
|
27957
|
+
if (afterAttempt) return afterAttempt;
|
|
27958
|
+
}
|
|
27959
|
+
}
|
|
27960
|
+
throw new Error(
|
|
27961
|
+
`Chrome Headless Shell is not available for Linux ARM64 (DGX Spark, GB10, Jetson).
|
|
27962
|
+
|
|
27963
|
+
Install Chromium manually and point hyperframes to it:
|
|
27964
|
+
|
|
27965
|
+
sudo apt-get install -y chromium-browser
|
|
27966
|
+
export HYPERFRAMES_BROWSER_PATH=$(which chromium-browser)
|
|
27967
|
+
|
|
27968
|
+
Then re-run your command. The HYPERFRAMES_BROWSER_PATH env var persists for the session.`
|
|
27969
|
+
);
|
|
27970
|
+
}
|
|
27931
27971
|
async function ensureBrowser(options) {
|
|
27932
27972
|
const existing = await findBrowser();
|
|
27933
27973
|
if (existing) return existing;
|
|
@@ -27935,6 +27975,9 @@ async function ensureBrowser(options) {
|
|
|
27935
27975
|
if (!platform7) {
|
|
27936
27976
|
throw new Error(`Unsupported platform: ${process.platform} ${process.arch}`);
|
|
27937
27977
|
}
|
|
27978
|
+
if (isLinuxArm()) {
|
|
27979
|
+
return ensureLinuxArmBrowser(options);
|
|
27980
|
+
}
|
|
27938
27981
|
const installed = await install({
|
|
27939
27982
|
cacheDir: CACHE_DIR2,
|
|
27940
27983
|
browser: Browser.CHROMEHEADLESSSHELL,
|
|
@@ -27951,6 +27994,9 @@ function clearBrowser() {
|
|
|
27951
27994
|
rmSync4(CACHE_DIR2, { recursive: true, force: true });
|
|
27952
27995
|
return true;
|
|
27953
27996
|
}
|
|
27997
|
+
function isLinuxArm() {
|
|
27998
|
+
return detectBrowserPlatform() === "linux_arm";
|
|
27999
|
+
}
|
|
27954
28000
|
var CHROME_VERSION, CACHE_DIR2, _browserPathOverride, SYSTEM_CHROME_PATHS;
|
|
27955
28001
|
var init_manager2 = __esm({
|
|
27956
28002
|
"src/browser/manager.ts"() {
|
|
@@ -35321,8 +35367,8 @@ var init_paths = __esm({
|
|
|
35321
35367
|
});
|
|
35322
35368
|
|
|
35323
35369
|
// ../producer/src/services/render/shared.ts
|
|
35324
|
-
import { copyFileSync as copyFileSync2, mkdirSync as mkdirSync18, writeFileSync as writeFileSync14 } from "fs";
|
|
35325
|
-
import { dirname as dirname11, join as join35, resolve as resolve17 } from "path";
|
|
35370
|
+
import { copyFileSync as copyFileSync2, cpSync, existsSync as existsSync32, mkdirSync as mkdirSync18, symlinkSync, writeFileSync as writeFileSync14 } from "fs";
|
|
35371
|
+
import { basename as basename3, dirname as dirname11, isAbsolute as isAbsolute6, join as join35, relative as relative3, resolve as resolve17 } from "path";
|
|
35326
35372
|
function projectBrowserEndToCompositionTimeline(existingStart, browserStart, browserEnd) {
|
|
35327
35373
|
return browserEnd + (existingStart - browserStart);
|
|
35328
35374
|
}
|
|
@@ -35401,13 +35447,15 @@ function writeCompiledArtifacts(compiled, workDir, includeSummary) {
|
|
|
35401
35447
|
writeFileSync14(join35(compileDir, "summary.json"), JSON.stringify(summary, null, 2), "utf-8");
|
|
35402
35448
|
}
|
|
35403
35449
|
}
|
|
35404
|
-
function applyRenderModeHints(
|
|
35405
|
-
if (
|
|
35406
|
-
|
|
35450
|
+
function applyRenderModeHints(alreadyForced, compiled, log2 = defaultLogger) {
|
|
35451
|
+
if (alreadyForced || !compiled.renderModeHints.recommendScreenshot) {
|
|
35452
|
+
return { forceScreenshot: alreadyForced, autoSelected: false };
|
|
35453
|
+
}
|
|
35407
35454
|
log2.warn("Auto-selected screenshot capture mode for render compatibility", {
|
|
35408
35455
|
reasonCodes: compiled.renderModeHints.reasons.map((reason) => reason.code),
|
|
35409
35456
|
reasons: compiled.renderModeHints.reasons.map((reason) => reason.message)
|
|
35410
35457
|
});
|
|
35458
|
+
return { forceScreenshot: true, autoSelected: true };
|
|
35411
35459
|
}
|
|
35412
35460
|
function updateJobStatus(job, status, stage, progress, onProgress) {
|
|
35413
35461
|
job.status = status;
|
|
@@ -35416,7 +35464,80 @@ function updateJobStatus(job, status, stage, progress, onProgress) {
|
|
|
35416
35464
|
if (status === "failed" || status === "complete") job.completedAt = /* @__PURE__ */ new Date();
|
|
35417
35465
|
if (onProgress) onProgress(job, stage);
|
|
35418
35466
|
}
|
|
35419
|
-
|
|
35467
|
+
function createCompiledFrameSrcResolver(compiledDir) {
|
|
35468
|
+
const compiledRoot = resolve17(compiledDir);
|
|
35469
|
+
return (framePath) => {
|
|
35470
|
+
const resolvedFramePath = resolve17(framePath);
|
|
35471
|
+
if (!isPathInside2(resolvedFramePath, compiledRoot)) return null;
|
|
35472
|
+
const relativePath = relative3(compiledRoot, resolvedFramePath);
|
|
35473
|
+
if (!relativePath || relativePath.startsWith("..") || isAbsolute6(relativePath)) {
|
|
35474
|
+
return null;
|
|
35475
|
+
}
|
|
35476
|
+
return `/${relativePath.split(/[\\/]+/).map((segment) => encodeURIComponent(segment)).join("/")}`;
|
|
35477
|
+
};
|
|
35478
|
+
}
|
|
35479
|
+
function createMemorySampler(intervalMs = 250) {
|
|
35480
|
+
let peakRss = 0;
|
|
35481
|
+
let peakHeap = 0;
|
|
35482
|
+
const sample = () => {
|
|
35483
|
+
try {
|
|
35484
|
+
const m2 = process.memoryUsage();
|
|
35485
|
+
if (m2.rss > peakRss) peakRss = m2.rss;
|
|
35486
|
+
if (m2.heapUsed > peakHeap) peakHeap = m2.heapUsed;
|
|
35487
|
+
} catch {
|
|
35488
|
+
}
|
|
35489
|
+
};
|
|
35490
|
+
sample();
|
|
35491
|
+
const interval = setInterval(sample, intervalMs);
|
|
35492
|
+
interval.unref();
|
|
35493
|
+
let stopped = false;
|
|
35494
|
+
return {
|
|
35495
|
+
// Resampling at read time means callers see the value at the
|
|
35496
|
+
// moment of inspection, not the last 250ms tick — important for
|
|
35497
|
+
// the success-path perf summary which captures peaks just before
|
|
35498
|
+
// returning.
|
|
35499
|
+
peakRssBytes: () => {
|
|
35500
|
+
sample();
|
|
35501
|
+
return peakRss;
|
|
35502
|
+
},
|
|
35503
|
+
peakHeapUsedBytes: () => {
|
|
35504
|
+
sample();
|
|
35505
|
+
return peakHeap;
|
|
35506
|
+
},
|
|
35507
|
+
stop: () => {
|
|
35508
|
+
if (stopped) return;
|
|
35509
|
+
stopped = true;
|
|
35510
|
+
sample();
|
|
35511
|
+
clearInterval(interval);
|
|
35512
|
+
}
|
|
35513
|
+
};
|
|
35514
|
+
}
|
|
35515
|
+
function materializeExtractedFramesForCompiledDir(extracted, compiledDir, options = {}) {
|
|
35516
|
+
const pathModule = options.pathModule ?? materializePathModule;
|
|
35517
|
+
const fileSystem = options.fileSystem ?? materializeFileSystem;
|
|
35518
|
+
const resolvedCompiledDir = pathModule.resolve(compiledDir);
|
|
35519
|
+
const compiledFrameRoot = pathModule.join(resolvedCompiledDir, "__hyperframes_video_frames");
|
|
35520
|
+
for (const ext of extracted) {
|
|
35521
|
+
const resolvedOut = pathModule.resolve(ext.outputDir);
|
|
35522
|
+
if (isPathInside2(resolvedOut, resolvedCompiledDir, { pathModule })) continue;
|
|
35523
|
+
const linkPath = pathModule.join(compiledFrameRoot, ext.videoId);
|
|
35524
|
+
if (!fileSystem.existsSync(linkPath)) {
|
|
35525
|
+
fileSystem.mkdirSync(pathModule.dirname(linkPath), { recursive: true });
|
|
35526
|
+
if (options.materializeSymlinks) {
|
|
35527
|
+
fileSystem.cpSync(resolvedOut, linkPath, { recursive: true });
|
|
35528
|
+
} else {
|
|
35529
|
+
fileSystem.symlinkSync(resolvedOut, linkPath);
|
|
35530
|
+
}
|
|
35531
|
+
}
|
|
35532
|
+
const remapped = /* @__PURE__ */ new Map();
|
|
35533
|
+
for (const [idx, framePath] of ext.framePaths) {
|
|
35534
|
+
remapped.set(idx, pathModule.join(linkPath, pathModule.basename(framePath)));
|
|
35535
|
+
}
|
|
35536
|
+
ext.framePaths = remapped;
|
|
35537
|
+
ext.outputDir = linkPath;
|
|
35538
|
+
}
|
|
35539
|
+
}
|
|
35540
|
+
var BROWSER_MEDIA_EPSILON, materializePathModule, materializeFileSystem;
|
|
35420
35541
|
var init_shared = __esm({
|
|
35421
35542
|
"../producer/src/services/render/shared.ts"() {
|
|
35422
35543
|
"use strict";
|
|
@@ -35424,6 +35545,531 @@ var init_shared = __esm({
|
|
|
35424
35545
|
init_logger();
|
|
35425
35546
|
init_paths();
|
|
35426
35547
|
BROWSER_MEDIA_EPSILON = 1e-4;
|
|
35548
|
+
materializePathModule = {
|
|
35549
|
+
resolve: resolve17,
|
|
35550
|
+
join: join35,
|
|
35551
|
+
dirname: dirname11,
|
|
35552
|
+
basename: basename3,
|
|
35553
|
+
relative: relative3,
|
|
35554
|
+
isAbsolute: isAbsolute6
|
|
35555
|
+
};
|
|
35556
|
+
materializeFileSystem = {
|
|
35557
|
+
existsSync: existsSync32,
|
|
35558
|
+
mkdirSync: mkdirSync18,
|
|
35559
|
+
symlinkSync,
|
|
35560
|
+
cpSync
|
|
35561
|
+
};
|
|
35562
|
+
}
|
|
35563
|
+
});
|
|
35564
|
+
|
|
35565
|
+
// ../producer/src/services/render/cleanup.ts
|
|
35566
|
+
import { rmSync as rmSync7 } from "fs";
|
|
35567
|
+
import { freemem as freemem2 } from "os";
|
|
35568
|
+
async function safeCleanup(label2, fn, log2 = defaultLogger) {
|
|
35569
|
+
try {
|
|
35570
|
+
await fn();
|
|
35571
|
+
} catch (err) {
|
|
35572
|
+
log2.debug(`Cleanup failed (${label2})`, {
|
|
35573
|
+
error: err instanceof Error ? err.message : String(err)
|
|
35574
|
+
});
|
|
35575
|
+
}
|
|
35576
|
+
}
|
|
35577
|
+
async function cleanupRenderResources(input) {
|
|
35578
|
+
const { fileServer, probeSession, workDir, debug, log: log2, label: label2 } = input;
|
|
35579
|
+
if (fileServer) {
|
|
35580
|
+
const fs4 = fileServer;
|
|
35581
|
+
await safeCleanup(
|
|
35582
|
+
`close file server (${label2})`,
|
|
35583
|
+
() => {
|
|
35584
|
+
fs4.close();
|
|
35585
|
+
},
|
|
35586
|
+
log2
|
|
35587
|
+
);
|
|
35588
|
+
}
|
|
35589
|
+
if (probeSession) {
|
|
35590
|
+
const session = probeSession;
|
|
35591
|
+
await safeCleanup(`close probe session (${label2})`, () => closeCaptureSession(session), log2);
|
|
35592
|
+
}
|
|
35593
|
+
if (!debug) {
|
|
35594
|
+
await safeCleanup(
|
|
35595
|
+
`remove workDir (${label2})`,
|
|
35596
|
+
() => rmSync7(workDir, { recursive: true, force: true }),
|
|
35597
|
+
log2
|
|
35598
|
+
);
|
|
35599
|
+
}
|
|
35600
|
+
}
|
|
35601
|
+
function buildRenderErrorDetails(input) {
|
|
35602
|
+
const errorMessage = input.error instanceof Error ? input.error.message : String(input.error);
|
|
35603
|
+
const errorStack = input.error instanceof Error ? input.error.stack : void 0;
|
|
35604
|
+
return {
|
|
35605
|
+
message: errorMessage,
|
|
35606
|
+
stack: errorStack,
|
|
35607
|
+
elapsedMs: Date.now() - input.pipelineStartMs,
|
|
35608
|
+
freeMemoryMB: Math.round(freemem2() / (1024 * 1024)),
|
|
35609
|
+
browserConsoleTail: input.lastBrowserConsole.length > 0 ? input.lastBrowserConsole.slice(-30) : void 0,
|
|
35610
|
+
perfStages: Object.keys(input.perfStages).length > 0 ? { ...input.perfStages } : void 0,
|
|
35611
|
+
hdrDiagnostics: input.hdrDiagnostics.videoExtractionFailures > 0 || input.hdrDiagnostics.imageDecodeFailures > 0 ? { ...input.hdrDiagnostics } : void 0
|
|
35612
|
+
};
|
|
35613
|
+
}
|
|
35614
|
+
var init_cleanup = __esm({
|
|
35615
|
+
"../producer/src/services/render/cleanup.ts"() {
|
|
35616
|
+
"use strict";
|
|
35617
|
+
init_src2();
|
|
35618
|
+
init_logger();
|
|
35619
|
+
}
|
|
35620
|
+
});
|
|
35621
|
+
|
|
35622
|
+
// ../producer/src/services/render/hdrMode.ts
|
|
35623
|
+
function resolveEffectiveHdrMode(input) {
|
|
35624
|
+
const hdrMode = input.hdrMode ?? "auto";
|
|
35625
|
+
const videoColorSpaces = (input.extractionResult?.extracted ?? []).map(
|
|
35626
|
+
(ext) => ext.metadata.colorSpace
|
|
35627
|
+
);
|
|
35628
|
+
const allColorSpaces = [...videoColorSpaces, ...input.imageColorSpaces];
|
|
35629
|
+
const info = allColorSpaces.length > 0 ? analyzeCompositionHdr(allColorSpaces) : null;
|
|
35630
|
+
let effectiveHdr;
|
|
35631
|
+
let forcedHdrWithoutSources = false;
|
|
35632
|
+
if (hdrMode === "force-sdr") {
|
|
35633
|
+
effectiveHdr = void 0;
|
|
35634
|
+
} else if (hdrMode === "force-hdr") {
|
|
35635
|
+
if (info?.hasHdr && info.dominantTransfer) {
|
|
35636
|
+
effectiveHdr = { transfer: info.dominantTransfer };
|
|
35637
|
+
} else {
|
|
35638
|
+
effectiveHdr = { transfer: "hlg" };
|
|
35639
|
+
forcedHdrWithoutSources = true;
|
|
35640
|
+
}
|
|
35641
|
+
} else if (info?.hasHdr && info.dominantTransfer) {
|
|
35642
|
+
effectiveHdr = { transfer: info.dominantTransfer };
|
|
35643
|
+
}
|
|
35644
|
+
if (effectiveHdr && input.outputFormat !== "mp4") {
|
|
35645
|
+
const hdrSourceReason = forcedHdrWithoutSources ? "HDR was forced without detected HDR sources" : "HDR source detected";
|
|
35646
|
+
input.log.warn(
|
|
35647
|
+
`[Render] ${hdrSourceReason}, but format is "${input.outputFormat}" \u2014 falling back to SDR. HDR + alpha is not supported. Use --format mp4 for HDR10 output.`
|
|
35648
|
+
);
|
|
35649
|
+
effectiveHdr = void 0;
|
|
35650
|
+
}
|
|
35651
|
+
if (forcedHdrWithoutSources) {
|
|
35652
|
+
input.log.warn(
|
|
35653
|
+
"[Render] HDR forced by --hdr flag, but no HDR sources were detected \u2014 defaulting to HLG. SDR-only compositions may look perceptually wrong on HDR displays."
|
|
35654
|
+
);
|
|
35655
|
+
}
|
|
35656
|
+
if (effectiveHdr) {
|
|
35657
|
+
let reason;
|
|
35658
|
+
if (hdrMode === "force-hdr") {
|
|
35659
|
+
reason = forcedHdrWithoutSources ? "forced by --hdr flag (no HDR sources detected \u2014 defaulting to HLG)" : "forced by --hdr flag";
|
|
35660
|
+
} else {
|
|
35661
|
+
reason = "auto-detected from source(s)";
|
|
35662
|
+
}
|
|
35663
|
+
input.log.info(
|
|
35664
|
+
`[Render] HDR ${reason} \u2014 output: ${effectiveHdr.transfer.toUpperCase()} (BT.2020, 10-bit H.265)`
|
|
35665
|
+
);
|
|
35666
|
+
} else if (hdrMode === "force-sdr") {
|
|
35667
|
+
input.log.info("[Render] SDR forced by --sdr flag");
|
|
35668
|
+
} else {
|
|
35669
|
+
input.log.info("[Render] No HDR sources detected \u2014 rendering SDR");
|
|
35670
|
+
}
|
|
35671
|
+
return effectiveHdr;
|
|
35672
|
+
}
|
|
35673
|
+
var init_hdrMode = __esm({
|
|
35674
|
+
"../producer/src/services/render/hdrMode.ts"() {
|
|
35675
|
+
"use strict";
|
|
35676
|
+
init_src2();
|
|
35677
|
+
}
|
|
35678
|
+
});
|
|
35679
|
+
|
|
35680
|
+
// ../producer/src/services/render/hdrPerf.ts
|
|
35681
|
+
function createHdrPerfCollector() {
|
|
35682
|
+
return {
|
|
35683
|
+
frames: 0,
|
|
35684
|
+
normalFrames: 0,
|
|
35685
|
+
transitionFrames: 0,
|
|
35686
|
+
domLayerCaptures: 0,
|
|
35687
|
+
hdrVideoLayerBlits: 0,
|
|
35688
|
+
hdrImageLayerBlits: 0,
|
|
35689
|
+
timings: {
|
|
35690
|
+
frameSeekMs: 0,
|
|
35691
|
+
frameInjectMs: 0,
|
|
35692
|
+
stackingQueryMs: 0,
|
|
35693
|
+
canvasClearMs: 0,
|
|
35694
|
+
normalCompositeMs: 0,
|
|
35695
|
+
transitionCompositeMs: 0,
|
|
35696
|
+
encoderWriteMs: 0,
|
|
35697
|
+
hdrVideoReadDecodeMs: 0,
|
|
35698
|
+
hdrVideoTransferMs: 0,
|
|
35699
|
+
hdrVideoBlitMs: 0,
|
|
35700
|
+
hdrImageTransferMs: 0,
|
|
35701
|
+
hdrImageBlitMs: 0,
|
|
35702
|
+
domLayerSeekMs: 0,
|
|
35703
|
+
domLayerInjectMs: 0,
|
|
35704
|
+
domMaskApplyMs: 0,
|
|
35705
|
+
domScreenshotMs: 0,
|
|
35706
|
+
domMaskRemoveMs: 0,
|
|
35707
|
+
domPngDecodeMs: 0,
|
|
35708
|
+
domBlitMs: 0
|
|
35709
|
+
}
|
|
35710
|
+
};
|
|
35711
|
+
}
|
|
35712
|
+
function addHdrTiming(perf, key2, startMs) {
|
|
35713
|
+
if (!perf) return;
|
|
35714
|
+
perf.timings[key2] += Date.now() - startMs;
|
|
35715
|
+
}
|
|
35716
|
+
function averageTiming(totalMs, count) {
|
|
35717
|
+
return count > 0 ? Math.round(totalMs / count * 100) / 100 : 0;
|
|
35718
|
+
}
|
|
35719
|
+
function finalizeHdrPerf(perf) {
|
|
35720
|
+
const avgMs = {};
|
|
35721
|
+
const perFrameKeys = [
|
|
35722
|
+
"frameSeekMs",
|
|
35723
|
+
"frameInjectMs",
|
|
35724
|
+
"stackingQueryMs",
|
|
35725
|
+
"canvasClearMs",
|
|
35726
|
+
"encoderWriteMs"
|
|
35727
|
+
];
|
|
35728
|
+
for (const key2 of perFrameKeys) avgMs[key2] = averageTiming(perf.timings[key2], perf.frames);
|
|
35729
|
+
avgMs.normalCompositeMs = averageTiming(perf.timings.normalCompositeMs, perf.normalFrames);
|
|
35730
|
+
avgMs.transitionCompositeMs = averageTiming(
|
|
35731
|
+
perf.timings.transitionCompositeMs,
|
|
35732
|
+
perf.transitionFrames
|
|
35733
|
+
);
|
|
35734
|
+
const perDomLayerKeys = [
|
|
35735
|
+
"domLayerSeekMs",
|
|
35736
|
+
"domLayerInjectMs",
|
|
35737
|
+
"domMaskApplyMs",
|
|
35738
|
+
"domScreenshotMs",
|
|
35739
|
+
"domMaskRemoveMs",
|
|
35740
|
+
"domPngDecodeMs",
|
|
35741
|
+
"domBlitMs"
|
|
35742
|
+
];
|
|
35743
|
+
for (const key2 of perDomLayerKeys) {
|
|
35744
|
+
avgMs[key2] = averageTiming(perf.timings[key2], perf.domLayerCaptures);
|
|
35745
|
+
}
|
|
35746
|
+
const perHdrVideoKeys = [
|
|
35747
|
+
"hdrVideoReadDecodeMs",
|
|
35748
|
+
"hdrVideoTransferMs",
|
|
35749
|
+
"hdrVideoBlitMs"
|
|
35750
|
+
];
|
|
35751
|
+
for (const key2 of perHdrVideoKeys) {
|
|
35752
|
+
avgMs[key2] = averageTiming(perf.timings[key2], perf.hdrVideoLayerBlits);
|
|
35753
|
+
}
|
|
35754
|
+
const perHdrImageKeys = ["hdrImageTransferMs", "hdrImageBlitMs"];
|
|
35755
|
+
for (const key2 of perHdrImageKeys) {
|
|
35756
|
+
avgMs[key2] = averageTiming(perf.timings[key2], perf.hdrImageLayerBlits);
|
|
35757
|
+
}
|
|
35758
|
+
return {
|
|
35759
|
+
frames: perf.frames,
|
|
35760
|
+
normalFrames: perf.normalFrames,
|
|
35761
|
+
transitionFrames: perf.transitionFrames,
|
|
35762
|
+
domLayerCaptures: perf.domLayerCaptures,
|
|
35763
|
+
hdrVideoLayerBlits: perf.hdrVideoLayerBlits,
|
|
35764
|
+
hdrImageLayerBlits: perf.hdrImageLayerBlits,
|
|
35765
|
+
timings: { ...perf.timings },
|
|
35766
|
+
avgMs
|
|
35767
|
+
};
|
|
35768
|
+
}
|
|
35769
|
+
var init_hdrPerf = __esm({
|
|
35770
|
+
"../producer/src/services/render/hdrPerf.ts"() {
|
|
35771
|
+
"use strict";
|
|
35772
|
+
}
|
|
35773
|
+
});
|
|
35774
|
+
|
|
35775
|
+
// ../producer/src/services/render/perfSummary.ts
|
|
35776
|
+
function buildRenderPerfSummary(input) {
|
|
35777
|
+
return {
|
|
35778
|
+
renderId: input.job.id,
|
|
35779
|
+
totalElapsedMs: input.totalElapsedMs,
|
|
35780
|
+
// RenderPerfSummary surfaces fps as a decimal because it lands in JSON
|
|
35781
|
+
// payloads (CLI telemetry, regression-harness reports) where a single
|
|
35782
|
+
// number is friendlier than `{num,den}`. Callers needing the rational
|
|
35783
|
+
// back can read `job.config.fps`.
|
|
35784
|
+
fps: fpsToNumber(input.job.config.fps),
|
|
35785
|
+
quality: input.job.config.quality,
|
|
35786
|
+
workers: input.workerCount,
|
|
35787
|
+
chunkedEncode: input.enableChunkedEncode,
|
|
35788
|
+
chunkSizeFrames: input.enableChunkedEncode ? input.chunkedEncodeSize : null,
|
|
35789
|
+
compositionDurationSeconds: input.compositionDurationSeconds,
|
|
35790
|
+
totalFrames: input.totalFrames,
|
|
35791
|
+
resolution: { width: input.outputWidth, height: input.outputHeight },
|
|
35792
|
+
videoCount: input.videoCount,
|
|
35793
|
+
audioCount: input.audioCount,
|
|
35794
|
+
stages: input.perfStages,
|
|
35795
|
+
videoExtractBreakdown: input.videoExtractBreakdown,
|
|
35796
|
+
tmpPeakBytes: input.tmpPeakBytes,
|
|
35797
|
+
captureCalibration: input.captureCalibration ? {
|
|
35798
|
+
sampledFrames: input.captureCalibration.samples.map((sample) => sample.frameIndex),
|
|
35799
|
+
p95Ms: input.captureCalibration.estimate.p95Ms,
|
|
35800
|
+
multiplier: input.captureCalibration.estimate.multiplier,
|
|
35801
|
+
reasons: input.captureCalibration.estimate.reasons
|
|
35802
|
+
} : void 0,
|
|
35803
|
+
captureAttempts: input.captureAttempts.length > 0 ? input.captureAttempts : void 0,
|
|
35804
|
+
hdrDiagnostics: input.hdrDiagnostics.videoExtractionFailures > 0 || input.hdrDiagnostics.imageDecodeFailures > 0 ? { ...input.hdrDiagnostics } : void 0,
|
|
35805
|
+
hdrPerf: input.hdrPerf ? finalizeHdrPerf(input.hdrPerf) : void 0,
|
|
35806
|
+
captureAvgMs: input.totalFrames > 0 ? Math.round((input.perfStages.captureMs ?? 0) / input.totalFrames) : void 0,
|
|
35807
|
+
peakRssMb: Math.round(input.peakRssBytes / (1024 * 1024)),
|
|
35808
|
+
peakHeapUsedMb: Math.round(input.peakHeapUsedBytes / (1024 * 1024))
|
|
35809
|
+
};
|
|
35810
|
+
}
|
|
35811
|
+
var init_perfSummary = __esm({
|
|
35812
|
+
"../producer/src/services/render/perfSummary.ts"() {
|
|
35813
|
+
"use strict";
|
|
35814
|
+
init_src();
|
|
35815
|
+
init_hdrPerf();
|
|
35816
|
+
}
|
|
35817
|
+
});
|
|
35818
|
+
|
|
35819
|
+
// ../producer/src/services/render/captureCost.ts
|
|
35820
|
+
import { join as join36 } from "path";
|
|
35821
|
+
function estimateCaptureCostMultiplier(compiled) {
|
|
35822
|
+
let multiplier = 1;
|
|
35823
|
+
const reasons = [];
|
|
35824
|
+
if (compiled.hasShaderTransitions) {
|
|
35825
|
+
multiplier += 2;
|
|
35826
|
+
reasons.push("shader-transitions");
|
|
35827
|
+
}
|
|
35828
|
+
const reasonCodes = new Set(compiled.renderModeHints.reasons.map((reason) => reason.code));
|
|
35829
|
+
if (reasonCodes.has("requestAnimationFrame")) {
|
|
35830
|
+
multiplier += 1;
|
|
35831
|
+
reasons.push("requestAnimationFrame");
|
|
35832
|
+
}
|
|
35833
|
+
if (reasonCodes.has("iframe")) {
|
|
35834
|
+
multiplier += 0.5;
|
|
35835
|
+
reasons.push("iframe");
|
|
35836
|
+
}
|
|
35837
|
+
return {
|
|
35838
|
+
multiplier: Math.round(multiplier * 100) / 100,
|
|
35839
|
+
reasons
|
|
35840
|
+
};
|
|
35841
|
+
}
|
|
35842
|
+
function combineCaptureCostEstimates(staticCost, measuredCost) {
|
|
35843
|
+
if (!measuredCost || measuredCost.multiplier <= 1) return staticCost;
|
|
35844
|
+
if (staticCost.multiplier >= measuredCost.multiplier) {
|
|
35845
|
+
return {
|
|
35846
|
+
multiplier: staticCost.multiplier,
|
|
35847
|
+
reasons: [...staticCost.reasons, ...measuredCost.reasons],
|
|
35848
|
+
p95Ms: measuredCost.p95Ms
|
|
35849
|
+
};
|
|
35850
|
+
}
|
|
35851
|
+
return {
|
|
35852
|
+
multiplier: measuredCost.multiplier,
|
|
35853
|
+
reasons: [...measuredCost.reasons, ...staticCost.reasons],
|
|
35854
|
+
p95Ms: measuredCost.p95Ms
|
|
35855
|
+
};
|
|
35856
|
+
}
|
|
35857
|
+
function resolveRenderWorkerCount(totalFrames, requestedWorkers, cfg, compiled, log2 = defaultLogger, measuredCaptureCost) {
|
|
35858
|
+
const captureCost = combineCaptureCostEstimates(
|
|
35859
|
+
estimateCaptureCostMultiplier(compiled),
|
|
35860
|
+
measuredCaptureCost
|
|
35861
|
+
);
|
|
35862
|
+
const workerCount = calculateOptimalWorkers(totalFrames, requestedWorkers, {
|
|
35863
|
+
...cfg,
|
|
35864
|
+
captureCostMultiplier: captureCost.multiplier
|
|
35865
|
+
});
|
|
35866
|
+
if (requestedWorkers !== void 0 || captureCost.multiplier <= 1) {
|
|
35867
|
+
return workerCount;
|
|
35868
|
+
}
|
|
35869
|
+
const baselineWorkers = calculateOptimalWorkers(totalFrames, void 0, cfg);
|
|
35870
|
+
if (workerCount < baselineWorkers) {
|
|
35871
|
+
log2.warn(
|
|
35872
|
+
"[Render] Reduced auto worker count for high-cost capture workload to avoid Chrome compositor starvation.",
|
|
35873
|
+
{
|
|
35874
|
+
from: baselineWorkers,
|
|
35875
|
+
to: workerCount,
|
|
35876
|
+
costMultiplier: captureCost.multiplier,
|
|
35877
|
+
reasons: captureCost.reasons
|
|
35878
|
+
}
|
|
35879
|
+
);
|
|
35880
|
+
}
|
|
35881
|
+
return workerCount;
|
|
35882
|
+
}
|
|
35883
|
+
function createCaptureCalibrationConfig(cfg) {
|
|
35884
|
+
return {
|
|
35885
|
+
...cfg,
|
|
35886
|
+
protocolTimeout: Math.min(cfg.protocolTimeout, CAPTURE_CALIBRATION_PROTOCOL_TIMEOUT_MS)
|
|
35887
|
+
};
|
|
35888
|
+
}
|
|
35889
|
+
function estimateMeasuredCaptureCostMultiplier(samples) {
|
|
35890
|
+
if (samples.length === 0) {
|
|
35891
|
+
return { multiplier: 1, reasons: [] };
|
|
35892
|
+
}
|
|
35893
|
+
const sorted = [...samples].sort((a, b2) => a.captureTimeMs - b2.captureTimeMs);
|
|
35894
|
+
const p95Index = Math.max(0, Math.ceil(sorted.length * 0.95) - 1);
|
|
35895
|
+
const p95Sample = sorted[p95Index] ?? sorted[sorted.length - 1];
|
|
35896
|
+
if (!p95Sample) {
|
|
35897
|
+
return { multiplier: 1, reasons: [] };
|
|
35898
|
+
}
|
|
35899
|
+
const p95Ms = Math.round(p95Sample.captureTimeMs);
|
|
35900
|
+
const multiplier = Math.min(
|
|
35901
|
+
MAX_MEASURED_CAPTURE_COST_MULTIPLIER,
|
|
35902
|
+
Math.max(1, Math.round(p95Ms / CAPTURE_CALIBRATION_TARGET_MS * 100) / 100)
|
|
35903
|
+
);
|
|
35904
|
+
return {
|
|
35905
|
+
multiplier,
|
|
35906
|
+
reasons: multiplier > 1 ? [`calibration-p95=${p95Ms}ms`] : [],
|
|
35907
|
+
p95Ms
|
|
35908
|
+
};
|
|
35909
|
+
}
|
|
35910
|
+
function selectCaptureCalibrationFrames(totalFrames) {
|
|
35911
|
+
if (totalFrames <= 0) return [];
|
|
35912
|
+
const lastFrame = totalFrames - 1;
|
|
35913
|
+
const candidates = [
|
|
35914
|
+
0,
|
|
35915
|
+
Math.floor(totalFrames * 0.25),
|
|
35916
|
+
Math.floor(totalFrames * 0.5),
|
|
35917
|
+
Math.floor(totalFrames * 0.75),
|
|
35918
|
+
lastFrame
|
|
35919
|
+
];
|
|
35920
|
+
return Array.from(
|
|
35921
|
+
new Set(candidates.map((frame) => Math.max(0, Math.min(lastFrame, frame))))
|
|
35922
|
+
).sort((a, b2) => a - b2);
|
|
35923
|
+
}
|
|
35924
|
+
async function measureCaptureCostFromSession(session, totalFrames, fps) {
|
|
35925
|
+
const sampledFrames = selectCaptureCalibrationFrames(totalFrames);
|
|
35926
|
+
const samples = [];
|
|
35927
|
+
for (const frameIndex of sampledFrames) {
|
|
35928
|
+
const time = frameIndex / fps;
|
|
35929
|
+
const startedAt = Date.now();
|
|
35930
|
+
const result = await captureFrameToBuffer(session, frameIndex, time);
|
|
35931
|
+
samples.push({
|
|
35932
|
+
frameIndex,
|
|
35933
|
+
captureTimeMs: result.captureTimeMs || Date.now() - startedAt
|
|
35934
|
+
});
|
|
35935
|
+
}
|
|
35936
|
+
return {
|
|
35937
|
+
estimate: estimateMeasuredCaptureCostMultiplier(samples),
|
|
35938
|
+
samples
|
|
35939
|
+
};
|
|
35940
|
+
}
|
|
35941
|
+
function logCaptureCalibrationResult(calibration, log2) {
|
|
35942
|
+
if (calibration.estimate.multiplier > 1) {
|
|
35943
|
+
log2.warn("[Render] Measured slow frame capture during auto-worker calibration.", {
|
|
35944
|
+
multiplier: calibration.estimate.multiplier,
|
|
35945
|
+
p95Ms: calibration.estimate.p95Ms,
|
|
35946
|
+
sampledFrames: calibration.samples.map((sample) => sample.frameIndex)
|
|
35947
|
+
});
|
|
35948
|
+
} else {
|
|
35949
|
+
log2.debug("[Render] Auto-worker calibration kept baseline capture cost.", {
|
|
35950
|
+
p95Ms: calibration.estimate.p95Ms,
|
|
35951
|
+
sampledFrames: calibration.samples.map((sample) => sample.frameIndex)
|
|
35952
|
+
});
|
|
35953
|
+
}
|
|
35954
|
+
}
|
|
35955
|
+
function createFailedCaptureCalibrationEstimate(reason) {
|
|
35956
|
+
return {
|
|
35957
|
+
estimate: {
|
|
35958
|
+
multiplier: MAX_MEASURED_CAPTURE_COST_MULTIPLIER,
|
|
35959
|
+
reasons: [reason]
|
|
35960
|
+
},
|
|
35961
|
+
samples: []
|
|
35962
|
+
};
|
|
35963
|
+
}
|
|
35964
|
+
async function runCaptureCalibration(input) {
|
|
35965
|
+
const {
|
|
35966
|
+
cfg,
|
|
35967
|
+
fileServer,
|
|
35968
|
+
workDir,
|
|
35969
|
+
log: log2,
|
|
35970
|
+
job,
|
|
35971
|
+
totalFrames,
|
|
35972
|
+
buildCaptureOptions,
|
|
35973
|
+
createRenderVideoFrameInjector,
|
|
35974
|
+
assertNotAborted
|
|
35975
|
+
} = input;
|
|
35976
|
+
let probeSession = input.probeSession;
|
|
35977
|
+
let forceScreenshot = input.forceScreenshot;
|
|
35978
|
+
let lastBrowserConsole = [];
|
|
35979
|
+
const fps = fpsToNumber(job.config.fps);
|
|
35980
|
+
const sessionRef = { current: null };
|
|
35981
|
+
const runOneCalibration = async (sessionDir, sessionCfg) => {
|
|
35982
|
+
const session = await createCaptureSession(
|
|
35983
|
+
fileServer.url,
|
|
35984
|
+
sessionDir,
|
|
35985
|
+
buildCaptureOptions(),
|
|
35986
|
+
createRenderVideoFrameInjector(),
|
|
35987
|
+
sessionCfg
|
|
35988
|
+
);
|
|
35989
|
+
sessionRef.current = session;
|
|
35990
|
+
if (!session.isInitialized) {
|
|
35991
|
+
await initializeSession(session);
|
|
35992
|
+
}
|
|
35993
|
+
assertNotAborted();
|
|
35994
|
+
const result = await measureCaptureCostFromSession(session, totalFrames, fps);
|
|
35995
|
+
logCaptureCalibrationResult(result, log2);
|
|
35996
|
+
return result;
|
|
35997
|
+
};
|
|
35998
|
+
const calibrationCfg = createCaptureCalibrationConfig({ ...cfg, forceScreenshot });
|
|
35999
|
+
let calibration;
|
|
36000
|
+
try {
|
|
36001
|
+
calibration = await runOneCalibration(join36(workDir, "capture-calibration"), calibrationCfg);
|
|
36002
|
+
} catch (error) {
|
|
36003
|
+
const shouldFallback = !forceScreenshot && shouldFallbackToScreenshotAfterCalibrationError(error);
|
|
36004
|
+
if (!shouldFallback) {
|
|
36005
|
+
calibration = createFailedCaptureCalibrationEstimate("calibration-failed");
|
|
36006
|
+
log2.warn("[Render] Auto-worker calibration failed; using conservative worker budget.", {
|
|
36007
|
+
protocolTimeout: calibrationCfg.protocolTimeout,
|
|
36008
|
+
error: error instanceof Error ? error.message : String(error)
|
|
36009
|
+
});
|
|
36010
|
+
} else {
|
|
36011
|
+
forceScreenshot = true;
|
|
36012
|
+
if (probeSession) {
|
|
36013
|
+
lastBrowserConsole = probeSession.browserConsoleBuffer;
|
|
36014
|
+
await closeCaptureSession(probeSession).catch(() => {
|
|
36015
|
+
});
|
|
36016
|
+
probeSession = null;
|
|
36017
|
+
}
|
|
36018
|
+
if (sessionRef.current) {
|
|
36019
|
+
lastBrowserConsole = sessionRef.current.browserConsoleBuffer;
|
|
36020
|
+
await closeCaptureSession(sessionRef.current).catch(() => {
|
|
36021
|
+
});
|
|
36022
|
+
sessionRef.current = null;
|
|
36023
|
+
}
|
|
36024
|
+
log2.warn(
|
|
36025
|
+
"[Render] BeginFrame auto-worker calibration timed out; retrying calibration in screenshot capture mode.",
|
|
36026
|
+
{
|
|
36027
|
+
protocolTimeout: calibrationCfg.protocolTimeout,
|
|
36028
|
+
error: error instanceof Error ? error.message : String(error)
|
|
36029
|
+
}
|
|
36030
|
+
);
|
|
36031
|
+
const screenshotCfg = createCaptureCalibrationConfig({ ...cfg, forceScreenshot: true });
|
|
36032
|
+
try {
|
|
36033
|
+
calibration = await runOneCalibration(
|
|
36034
|
+
join36(workDir, "capture-calibration-screenshot"),
|
|
36035
|
+
screenshotCfg
|
|
36036
|
+
);
|
|
36037
|
+
} catch (fallbackError) {
|
|
36038
|
+
calibration = createFailedCaptureCalibrationEstimate("calibration-screenshot-failed");
|
|
36039
|
+
log2.warn(
|
|
36040
|
+
"[Render] Screenshot auto-worker calibration failed after BeginFrame fallback; using conservative worker budget.",
|
|
36041
|
+
{
|
|
36042
|
+
protocolTimeout: screenshotCfg.protocolTimeout,
|
|
36043
|
+
error: fallbackError instanceof Error ? fallbackError.message : String(fallbackError)
|
|
36044
|
+
}
|
|
36045
|
+
);
|
|
36046
|
+
}
|
|
36047
|
+
}
|
|
36048
|
+
} finally {
|
|
36049
|
+
if (sessionRef.current) {
|
|
36050
|
+
lastBrowserConsole = sessionRef.current.browserConsoleBuffer;
|
|
36051
|
+
await closeCaptureSession(sessionRef.current).catch(() => {
|
|
36052
|
+
});
|
|
36053
|
+
}
|
|
36054
|
+
}
|
|
36055
|
+
return { calibration, forceScreenshot, probeSession, lastBrowserConsole };
|
|
36056
|
+
}
|
|
36057
|
+
function shouldFallbackToScreenshotAfterCalibrationError(error) {
|
|
36058
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
36059
|
+
return /HeadlessExperimental\.beginFrame timed out|beginFrame probe timeout|Another frame is pending|Frame still pending|Protocol error.*HeadlessExperimental\.beginFrame|Runtime\.callFunctionOn timed out|Runtime\.evaluate timed out/i.test(
|
|
36060
|
+
message
|
|
36061
|
+
);
|
|
36062
|
+
}
|
|
36063
|
+
var CAPTURE_CALIBRATION_TARGET_MS, MAX_MEASURED_CAPTURE_COST_MULTIPLIER, CAPTURE_CALIBRATION_PROTOCOL_TIMEOUT_MS;
|
|
36064
|
+
var init_captureCost = __esm({
|
|
36065
|
+
"../producer/src/services/render/captureCost.ts"() {
|
|
36066
|
+
"use strict";
|
|
36067
|
+
init_src();
|
|
36068
|
+
init_src2();
|
|
36069
|
+
init_logger();
|
|
36070
|
+
CAPTURE_CALIBRATION_TARGET_MS = 600;
|
|
36071
|
+
MAX_MEASURED_CAPTURE_COST_MULTIPLIER = 8;
|
|
36072
|
+
CAPTURE_CALIBRATION_PROTOCOL_TIMEOUT_MS = 3e4;
|
|
35427
36073
|
}
|
|
35428
36074
|
});
|
|
35429
36075
|
|
|
@@ -35496,9 +36142,9 @@ var init_fontData_generated = __esm({
|
|
|
35496
36142
|
});
|
|
35497
36143
|
|
|
35498
36144
|
// ../producer/src/services/deterministicFonts.ts
|
|
35499
|
-
import { existsSync as
|
|
36145
|
+
import { existsSync as existsSync33, mkdirSync as mkdirSync19, readFileSync as readFileSync23, writeFileSync as writeFileSync15 } from "fs";
|
|
35500
36146
|
import { homedir as homedir8 } from "os";
|
|
35501
|
-
import { join as
|
|
36147
|
+
import { join as join37 } from "path";
|
|
35502
36148
|
function normalizeFamilyName(family) {
|
|
35503
36149
|
return family.trim().replace(/^['"]|['"]$/g, "").trim().toLowerCase();
|
|
35504
36150
|
}
|
|
@@ -35609,14 +36255,14 @@ function fontSlug(familyName) {
|
|
|
35609
36255
|
return familyName.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
35610
36256
|
}
|
|
35611
36257
|
function fontCacheDir(slug) {
|
|
35612
|
-
const dir =
|
|
35613
|
-
if (!
|
|
36258
|
+
const dir = join37(GOOGLE_FONTS_CACHE_DIR, slug);
|
|
36259
|
+
if (!existsSync33(dir)) {
|
|
35614
36260
|
mkdirSync19(dir, { recursive: true });
|
|
35615
36261
|
}
|
|
35616
36262
|
return dir;
|
|
35617
36263
|
}
|
|
35618
36264
|
function cachedWoff2Path(slug, weight, style) {
|
|
35619
|
-
return
|
|
36265
|
+
return join37(fontCacheDir(slug), `${weight}-${style}.woff2`);
|
|
35620
36266
|
}
|
|
35621
36267
|
async function fetchGoogleFont(familyName) {
|
|
35622
36268
|
const slug = fontSlug(familyName);
|
|
@@ -35642,7 +36288,7 @@ async function fetchGoogleFont(familyName) {
|
|
|
35642
36288
|
const woff2Url = match[3] || "";
|
|
35643
36289
|
if (!woff2Url) continue;
|
|
35644
36290
|
const cachePath2 = cachedWoff2Path(slug, weight, style);
|
|
35645
|
-
if (!
|
|
36291
|
+
if (!existsSync33(cachePath2)) {
|
|
35646
36292
|
try {
|
|
35647
36293
|
const fontRes = await fetch(woff2Url);
|
|
35648
36294
|
if (!fontRes.ok) continue;
|
|
@@ -35828,14 +36474,14 @@ var init_deterministicFonts = __esm({
|
|
|
35828
36474
|
poppins: "poppins",
|
|
35829
36475
|
"segoe ui": "roboto"
|
|
35830
36476
|
};
|
|
35831
|
-
GOOGLE_FONTS_CACHE_DIR =
|
|
36477
|
+
GOOGLE_FONTS_CACHE_DIR = join37(homedir8(), ".cache", "hyperframes", "fonts");
|
|
35832
36478
|
WOFF2_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36";
|
|
35833
36479
|
}
|
|
35834
36480
|
});
|
|
35835
36481
|
|
|
35836
36482
|
// ../producer/src/services/htmlCompiler.ts
|
|
35837
|
-
import { readFileSync as readFileSync24, existsSync as
|
|
35838
|
-
import { join as
|
|
36483
|
+
import { readFileSync as readFileSync24, existsSync as existsSync34, mkdirSync as mkdirSync20 } from "fs";
|
|
36484
|
+
import { join as join38, dirname as dirname12, resolve as resolve18 } from "path";
|
|
35839
36485
|
function dedupeElementsById(elements) {
|
|
35840
36486
|
const deduped = /* @__PURE__ */ new Map();
|
|
35841
36487
|
for (const element of elements) {
|
|
@@ -35896,16 +36542,16 @@ function detectShaderTransitionUsage(html) {
|
|
|
35896
36542
|
async function resolveMediaDuration(src, mediaStart, baseDir, downloadDir, tagName19) {
|
|
35897
36543
|
let filePath = src;
|
|
35898
36544
|
if (isHttpUrl(src)) {
|
|
35899
|
-
if (!
|
|
36545
|
+
if (!existsSync34(downloadDir)) mkdirSync20(downloadDir, { recursive: true });
|
|
35900
36546
|
try {
|
|
35901
36547
|
filePath = await downloadToTemp(src, downloadDir);
|
|
35902
36548
|
} catch {
|
|
35903
36549
|
return { duration: 0, resolvedPath: src };
|
|
35904
36550
|
}
|
|
35905
36551
|
} else if (!filePath.startsWith("/")) {
|
|
35906
|
-
filePath =
|
|
36552
|
+
filePath = join38(baseDir, filePath);
|
|
35907
36553
|
}
|
|
35908
|
-
if (!
|
|
36554
|
+
if (!existsSync34(filePath)) {
|
|
35909
36555
|
return { duration: 0, resolvedPath: filePath };
|
|
35910
36556
|
}
|
|
35911
36557
|
let metadata;
|
|
@@ -35983,7 +36629,7 @@ async function parseSubCompositions(html, projectDir, downloadDir, parentOffset
|
|
|
35983
36629
|
if (visited.has(filePath)) {
|
|
35984
36630
|
continue;
|
|
35985
36631
|
}
|
|
35986
|
-
if (!
|
|
36632
|
+
if (!existsSync34(filePath)) {
|
|
35987
36633
|
continue;
|
|
35988
36634
|
}
|
|
35989
36635
|
const rawSubHtml = readFileSync24(filePath, "utf-8");
|
|
@@ -36172,7 +36818,7 @@ function inlineSubCompositions(html, subCompositions, projectDir) {
|
|
|
36172
36818
|
let compHtml = subCompositions.get(srcPath) || null;
|
|
36173
36819
|
if (!compHtml) {
|
|
36174
36820
|
const filePath = resolve18(projectDir, srcPath);
|
|
36175
|
-
if (
|
|
36821
|
+
if (existsSync34(filePath)) {
|
|
36176
36822
|
compHtml = readFileSync24(filePath, "utf-8");
|
|
36177
36823
|
}
|
|
36178
36824
|
}
|
|
@@ -36374,7 +37020,7 @@ function collectExternalAssets(html, projectDir) {
|
|
|
36374
37020
|
if (isPathInside2(absPath, absProjectDir)) {
|
|
36375
37021
|
return null;
|
|
36376
37022
|
}
|
|
36377
|
-
if (!
|
|
37023
|
+
if (!existsSync34(absPath)) return null;
|
|
36378
37024
|
const safeKey = toExternalAssetKey(absPath);
|
|
36379
37025
|
externalAssets.set(safeKey, absPath);
|
|
36380
37026
|
return safeKey;
|
|
@@ -36613,14 +37259,16 @@ var init_htmlCompiler2 = __esm({
|
|
|
36613
37259
|
});
|
|
36614
37260
|
|
|
36615
37261
|
// ../producer/src/services/render/stages/compileStage.ts
|
|
36616
|
-
import { join as
|
|
37262
|
+
import { join as join39 } from "path";
|
|
36617
37263
|
async function runCompileStage(input) {
|
|
36618
37264
|
const { projectDir, workDir, htmlPath, entryFile, job, cfg, needsAlpha, log: log2, assertNotAborted } = input;
|
|
36619
37265
|
const compileStart = Date.now();
|
|
36620
|
-
const compiled = await compileForRender(projectDir, htmlPath,
|
|
37266
|
+
const compiled = await compileForRender(projectDir, htmlPath, join39(workDir, "downloads"));
|
|
36621
37267
|
assertNotAborted();
|
|
36622
37268
|
const compileOnlyMs = Date.now() - compileStart;
|
|
36623
|
-
|
|
37269
|
+
const callerForced = cfg.forceScreenshot || needsAlpha;
|
|
37270
|
+
const { forceScreenshot } = applyRenderModeHints(callerForced, compiled, log2);
|
|
37271
|
+
cfg.forceScreenshot = forceScreenshot;
|
|
36624
37272
|
writeCompiledArtifacts(compiled, workDir, Boolean(job.config.debug));
|
|
36625
37273
|
log2.info("Compiled composition metadata", {
|
|
36626
37274
|
entryFile,
|
|
@@ -36659,7 +37307,15 @@ async function runCompileStage(input) {
|
|
|
36659
37307
|
deviceScaleFactor
|
|
36660
37308
|
});
|
|
36661
37309
|
}
|
|
36662
|
-
return {
|
|
37310
|
+
return {
|
|
37311
|
+
compiled,
|
|
37312
|
+
composition,
|
|
37313
|
+
deviceScaleFactor,
|
|
37314
|
+
outputWidth,
|
|
37315
|
+
outputHeight,
|
|
37316
|
+
compileOnlyMs,
|
|
37317
|
+
forceScreenshot
|
|
37318
|
+
};
|
|
36663
37319
|
}
|
|
36664
37320
|
var init_compileStage = __esm({
|
|
36665
37321
|
"../producer/src/services/render/stages/compileStage.ts"() {
|
|
@@ -36670,7 +37326,7 @@ var init_compileStage = __esm({
|
|
|
36670
37326
|
});
|
|
36671
37327
|
|
|
36672
37328
|
// ../producer/src/services/render/stages/probeStage.ts
|
|
36673
|
-
import { join as
|
|
37329
|
+
import { join as join40 } from "path";
|
|
36674
37330
|
async function runProbeStage(input) {
|
|
36675
37331
|
const {
|
|
36676
37332
|
projectDir,
|
|
@@ -36698,7 +37354,7 @@ async function runProbeStage(input) {
|
|
|
36698
37354
|
reasons.push(`${compiled.unresolvedCompositions.length} unresolved composition(s)`);
|
|
36699
37355
|
fileServer = await createFileServer2({
|
|
36700
37356
|
projectDir,
|
|
36701
|
-
compiledDir:
|
|
37357
|
+
compiledDir: join40(workDir, "compiled"),
|
|
36702
37358
|
port: 0,
|
|
36703
37359
|
preHeadScripts: [VIRTUAL_TIME_SHIM]
|
|
36704
37360
|
});
|
|
@@ -36713,7 +37369,7 @@ async function runProbeStage(input) {
|
|
|
36713
37369
|
};
|
|
36714
37370
|
probeSession = await createCaptureSession(
|
|
36715
37371
|
fileServer.url,
|
|
36716
|
-
|
|
37372
|
+
join40(workDir, "probe"),
|
|
36717
37373
|
captureOpts,
|
|
36718
37374
|
null,
|
|
36719
37375
|
cfg
|
|
@@ -36745,7 +37401,7 @@ async function runProbeStage(input) {
|
|
|
36745
37401
|
compiled,
|
|
36746
37402
|
resolutions,
|
|
36747
37403
|
projectDir,
|
|
36748
|
-
|
|
37404
|
+
join40(workDir, "downloads")
|
|
36749
37405
|
);
|
|
36750
37406
|
assertNotAborted();
|
|
36751
37407
|
composition.videos = compiled.videos;
|
|
@@ -36916,8 +37572,8 @@ var init_probeStage = __esm({
|
|
|
36916
37572
|
});
|
|
36917
37573
|
|
|
36918
37574
|
// ../producer/src/services/render/stages/extractVideosStage.ts
|
|
36919
|
-
import { existsSync as
|
|
36920
|
-
import { isAbsolute as
|
|
37575
|
+
import { existsSync as existsSync35 } from "fs";
|
|
37576
|
+
import { isAbsolute as isAbsolute7, join as join41 } from "path";
|
|
36921
37577
|
async function runExtractVideosStage(input) {
|
|
36922
37578
|
const {
|
|
36923
37579
|
projectDir,
|
|
@@ -36939,8 +37595,8 @@ async function runExtractVideosStage(input) {
|
|
|
36939
37595
|
if (job.config.hdrMode !== "force-sdr" && composition.videos.length > 0) {
|
|
36940
37596
|
await Promise.all(
|
|
36941
37597
|
composition.videos.map(async (v2) => {
|
|
36942
|
-
const videoPath =
|
|
36943
|
-
if (!
|
|
37598
|
+
const videoPath = isAbsolute7(v2.src) ? v2.src : resolveProjectRelativeSrc(v2.src, projectDir, compiledDir);
|
|
37599
|
+
if (!existsSync35(videoPath)) return;
|
|
36944
37600
|
const meta = await extractMediaMetadata(videoPath);
|
|
36945
37601
|
if (isHdrColorSpace(meta.colorSpace)) {
|
|
36946
37602
|
nativeHdrVideoIds.add(v2.id);
|
|
@@ -36958,10 +37614,10 @@ async function runExtractVideosStage(input) {
|
|
|
36958
37614
|
composition.images.map(async (img) => {
|
|
36959
37615
|
let imgPath = img.src;
|
|
36960
37616
|
if (!imgPath.startsWith("/")) {
|
|
36961
|
-
const fromCompiled =
|
|
37617
|
+
const fromCompiled = existsSync35(join41(compiledDir, imgPath)) ? join41(compiledDir, imgPath) : join41(projectDir, imgPath);
|
|
36962
37618
|
imgPath = fromCompiled;
|
|
36963
37619
|
}
|
|
36964
|
-
if (!
|
|
37620
|
+
if (!existsSync35(imgPath)) return null;
|
|
36965
37621
|
const meta = await extractMediaMetadata(imgPath);
|
|
36966
37622
|
if (isHdrColorSpace(meta.colorSpace)) {
|
|
36967
37623
|
nativeHdrImageIds.add(img.id);
|
|
@@ -36983,7 +37639,7 @@ async function runExtractVideosStage(input) {
|
|
|
36983
37639
|
// output framerate exact.
|
|
36984
37640
|
{
|
|
36985
37641
|
fps: fpsToNumber(job.config.fps),
|
|
36986
|
-
outputDir:
|
|
37642
|
+
outputDir: join41(compiledDir, "__hyperframes_video_frames")
|
|
36987
37643
|
},
|
|
36988
37644
|
abortSignal,
|
|
36989
37645
|
{ extractCacheDir: cfg.extractCacheDir },
|
|
@@ -37046,17 +37702,17 @@ var init_extractVideosStage = __esm({
|
|
|
37046
37702
|
});
|
|
37047
37703
|
|
|
37048
37704
|
// ../producer/src/services/render/stages/audioStage.ts
|
|
37049
|
-
import { join as
|
|
37705
|
+
import { join as join42 } from "path";
|
|
37050
37706
|
async function runAudioStage(input) {
|
|
37051
37707
|
const { projectDir, workDir, compiledDir, duration, audios, abortSignal, assertNotAborted } = input;
|
|
37052
37708
|
const stage3Start = Date.now();
|
|
37053
|
-
const audioOutputPath =
|
|
37709
|
+
const audioOutputPath = join42(workDir, "audio.aac");
|
|
37054
37710
|
let hasAudio = false;
|
|
37055
37711
|
if (audios.length > 0) {
|
|
37056
37712
|
const audioResult = await processCompositionAudio(
|
|
37057
37713
|
audios,
|
|
37058
37714
|
projectDir,
|
|
37059
|
-
|
|
37715
|
+
join42(workDir, "audio-work"),
|
|
37060
37716
|
audioOutputPath,
|
|
37061
37717
|
duration,
|
|
37062
37718
|
abortSignal,
|
|
@@ -37085,6 +37741,7 @@ async function runCaptureStage(input) {
|
|
|
37085
37741
|
job,
|
|
37086
37742
|
totalFrames,
|
|
37087
37743
|
cfg,
|
|
37744
|
+
forceScreenshot,
|
|
37088
37745
|
log: log2,
|
|
37089
37746
|
captureAttempts,
|
|
37090
37747
|
buildCaptureOptions,
|
|
@@ -37096,6 +37753,7 @@ async function runCaptureStage(input) {
|
|
|
37096
37753
|
} = input;
|
|
37097
37754
|
let { workerCount, probeSession } = input;
|
|
37098
37755
|
let lastBrowserConsole = [];
|
|
37756
|
+
const captureCfg = cfg.forceScreenshot === forceScreenshot ? cfg : { ...cfg, forceScreenshot };
|
|
37099
37757
|
if (workerCount > 1) {
|
|
37100
37758
|
const attempts = await executeDiskCaptureWithAdaptiveRetry({
|
|
37101
37759
|
serverUrl: fileServer.url,
|
|
@@ -37122,7 +37780,7 @@ async function runCaptureStage(input) {
|
|
|
37122
37780
|
);
|
|
37123
37781
|
}
|
|
37124
37782
|
},
|
|
37125
|
-
cfg,
|
|
37783
|
+
cfg: captureCfg,
|
|
37126
37784
|
log: log2
|
|
37127
37785
|
});
|
|
37128
37786
|
captureAttempts.push(...attempts);
|
|
@@ -37142,7 +37800,7 @@ async function runCaptureStage(input) {
|
|
|
37142
37800
|
framesDir,
|
|
37143
37801
|
buildCaptureOptions(),
|
|
37144
37802
|
videoInjector,
|
|
37145
|
-
|
|
37803
|
+
captureCfg
|
|
37146
37804
|
);
|
|
37147
37805
|
if (probeSession) {
|
|
37148
37806
|
prepareCaptureSessionForReuse(session, framesDir, videoInjector);
|
|
@@ -37195,6 +37853,7 @@ async function runCaptureStreamingStage(input) {
|
|
|
37195
37853
|
job,
|
|
37196
37854
|
totalFrames,
|
|
37197
37855
|
cfg,
|
|
37856
|
+
forceScreenshot,
|
|
37198
37857
|
log: log2,
|
|
37199
37858
|
outputFormat,
|
|
37200
37859
|
streamingEncoderOptions,
|
|
@@ -37206,6 +37865,7 @@ async function runCaptureStreamingStage(input) {
|
|
|
37206
37865
|
} = input;
|
|
37207
37866
|
let { workerCount, probeSession } = input;
|
|
37208
37867
|
let lastBrowserConsole = [];
|
|
37868
|
+
const captureCfg = cfg.forceScreenshot === forceScreenshot ? cfg : { ...cfg, forceScreenshot };
|
|
37209
37869
|
let streamingEncoder = null;
|
|
37210
37870
|
let streamingEncoderClosed = false;
|
|
37211
37871
|
try {
|
|
@@ -37264,7 +37924,7 @@ async function runCaptureStreamingStage(input) {
|
|
|
37264
37924
|
}
|
|
37265
37925
|
},
|
|
37266
37926
|
onFrameBuffer,
|
|
37267
|
-
|
|
37927
|
+
captureCfg
|
|
37268
37928
|
);
|
|
37269
37929
|
if (probeSession) {
|
|
37270
37930
|
lastBrowserConsole = probeSession.browserConsoleBuffer;
|
|
@@ -37278,7 +37938,7 @@ async function runCaptureStreamingStage(input) {
|
|
|
37278
37938
|
framesDir,
|
|
37279
37939
|
buildCaptureOptions(),
|
|
37280
37940
|
videoInjector,
|
|
37281
|
-
|
|
37941
|
+
captureCfg
|
|
37282
37942
|
);
|
|
37283
37943
|
if (probeSession) {
|
|
37284
37944
|
prepareCaptureSessionForReuse(session, framesDir, videoInjector);
|
|
@@ -37414,19 +38074,20 @@ var init_hdrImageTransferCache = __esm({
|
|
|
37414
38074
|
|
|
37415
38075
|
// ../producer/src/services/render/stages/captureHdrStage.ts
|
|
37416
38076
|
import {
|
|
37417
|
-
existsSync as
|
|
38077
|
+
existsSync as existsSync36,
|
|
37418
38078
|
mkdirSync as mkdirSync21,
|
|
37419
38079
|
openSync,
|
|
37420
38080
|
readFileSync as readFileSync25,
|
|
37421
|
-
rmSync as
|
|
38081
|
+
rmSync as rmSync8,
|
|
37422
38082
|
statSync as statSync11,
|
|
37423
38083
|
writeFileSync as writeFileSync16
|
|
37424
38084
|
} from "fs";
|
|
37425
|
-
import { join as
|
|
38085
|
+
import { join as join43 } from "path";
|
|
37426
38086
|
async function runCaptureHdrStage(input) {
|
|
37427
38087
|
const {
|
|
37428
38088
|
job,
|
|
37429
38089
|
cfg,
|
|
38090
|
+
forceScreenshot,
|
|
37430
38091
|
log: log2,
|
|
37431
38092
|
projectDir,
|
|
37432
38093
|
compiledDir,
|
|
@@ -37454,6 +38115,11 @@ async function runCaptureHdrStage(input) {
|
|
|
37454
38115
|
assertNotAborted,
|
|
37455
38116
|
onProgress
|
|
37456
38117
|
} = input;
|
|
38118
|
+
if (!forceScreenshot) {
|
|
38119
|
+
throw new Error(
|
|
38120
|
+
"captureHdrStage requires forceScreenshot=true; the layered composite path uses captureAlphaPng which hangs under --enable-begin-frame-control."
|
|
38121
|
+
);
|
|
38122
|
+
}
|
|
37457
38123
|
const stageStart = Date.now();
|
|
37458
38124
|
let lastBrowserConsole = [];
|
|
37459
38125
|
let hdrPerf;
|
|
@@ -37464,15 +38130,15 @@ async function runCaptureHdrStage(input) {
|
|
|
37464
38130
|
hasHdrContent ? "[Render] HDR layered composite: z-ordered DOM + native HDR video/image layers" : "[Render] Shader transition composite: z-ordered SDR DOM layers"
|
|
37465
38131
|
);
|
|
37466
38132
|
hdrPerf = createHdrPerfCollector();
|
|
37467
|
-
cfg
|
|
38133
|
+
const hdrCfg = { ...cfg, forceScreenshot: true };
|
|
37468
38134
|
const hdrVideoIds = composition.videos.filter((v2) => nativeHdrVideoIds.has(v2.id)).map((v2) => v2.id);
|
|
37469
38135
|
const hdrVideoSrcPaths = /* @__PURE__ */ new Map();
|
|
37470
38136
|
for (const v2 of composition.videos) {
|
|
37471
38137
|
if (!hdrVideoIds.includes(v2.id)) continue;
|
|
37472
38138
|
let srcPath = v2.src;
|
|
37473
38139
|
if (!srcPath.startsWith("/")) {
|
|
37474
|
-
const fromCompiled =
|
|
37475
|
-
srcPath =
|
|
38140
|
+
const fromCompiled = join43(compiledDir, srcPath);
|
|
38141
|
+
srcPath = existsSync36(fromCompiled) ? fromCompiled : join43(projectDir, srcPath);
|
|
37476
38142
|
}
|
|
37477
38143
|
hdrVideoSrcPaths.set(v2.id, srcPath);
|
|
37478
38144
|
}
|
|
@@ -37482,7 +38148,7 @@ async function runCaptureHdrStage(input) {
|
|
|
37482
38148
|
framesDir,
|
|
37483
38149
|
buildCaptureOptions(),
|
|
37484
38150
|
createRenderVideoFrameInjector(),
|
|
37485
|
-
|
|
38151
|
+
hdrCfg
|
|
37486
38152
|
);
|
|
37487
38153
|
let hdrEncoder = null;
|
|
37488
38154
|
let hdrEncoderClosed = false;
|
|
@@ -37608,11 +38274,11 @@ async function runCaptureHdrStage(input) {
|
|
|
37608
38274
|
for (const [videoId, srcPath] of hdrVideoSrcPaths) {
|
|
37609
38275
|
const video = composition.videos.find((v2) => v2.id === videoId);
|
|
37610
38276
|
if (!video) continue;
|
|
37611
|
-
const frameDir =
|
|
38277
|
+
const frameDir = join43(framesDir, `hdr_${videoId}`);
|
|
37612
38278
|
mkdirSync21(frameDir, { recursive: true });
|
|
37613
38279
|
const duration = video.end - video.start;
|
|
37614
38280
|
const dims = hdrExtractionDims.get(videoId) ?? { width, height };
|
|
37615
|
-
const rawPath =
|
|
38281
|
+
const rawPath = join43(frameDir, "frames.rgb48le");
|
|
37616
38282
|
const ffmpegArgs = [
|
|
37617
38283
|
"-ss",
|
|
37618
38284
|
String(video.mediaStart),
|
|
@@ -37715,8 +38381,8 @@ async function runCaptureHdrStage(input) {
|
|
|
37715
38381
|
}
|
|
37716
38382
|
}
|
|
37717
38383
|
const debugDumpEnabled = process.env.KEEP_TEMP === "1";
|
|
37718
|
-
const debugDumpDir = debugDumpEnabled ?
|
|
37719
|
-
if (debugDumpDir && !
|
|
38384
|
+
const debugDumpDir = debugDumpEnabled ? join43(framesDir, "debug-composite") : null;
|
|
38385
|
+
if (debugDumpDir && !existsSync36(debugDumpDir)) {
|
|
37720
38386
|
mkdirSync21(debugDumpDir, { recursive: true });
|
|
37721
38387
|
}
|
|
37722
38388
|
const compositeTransfer = resolveCompositeTransfer(hasHdrContent, effectiveHdr);
|
|
@@ -37877,7 +38543,7 @@ async function runCaptureHdrStage(input) {
|
|
|
37877
38543
|
await compositeHdrFrame(hdrCompositeCtx, normalCanvas, time, stackingInfo, void 0, i2);
|
|
37878
38544
|
addHdrTiming(hdrPerf, "normalCompositeMs", timingStart);
|
|
37879
38545
|
if (debugDumpEnabled && debugDumpDir && i2 % 30 === 0) {
|
|
37880
|
-
const previewPath =
|
|
38546
|
+
const previewPath = join43(
|
|
37881
38547
|
debugDumpDir,
|
|
37882
38548
|
`frame_${String(i2).padStart(4, "0")}_final_rgb48le.bin`
|
|
37883
38549
|
);
|
|
@@ -37896,7 +38562,7 @@ async function runCaptureHdrStage(input) {
|
|
|
37896
38562
|
if (frameSource) {
|
|
37897
38563
|
closeHdrVideoFrameSource(frameSource, log2);
|
|
37898
38564
|
try {
|
|
37899
|
-
|
|
38565
|
+
rmSync8(frameSource.dir, { recursive: true, force: true });
|
|
37900
38566
|
} catch (err) {
|
|
37901
38567
|
log2.warn("Failed to clean up HDR raw frame directory", {
|
|
37902
38568
|
videoId,
|
|
@@ -37978,8 +38644,8 @@ var init_captureHdrStage = __esm({
|
|
|
37978
38644
|
});
|
|
37979
38645
|
|
|
37980
38646
|
// ../producer/src/services/render/stages/encodeStage.ts
|
|
37981
|
-
import { copyFileSync as copyFileSync3, existsSync as
|
|
37982
|
-
import { join as
|
|
38647
|
+
import { copyFileSync as copyFileSync3, existsSync as existsSync37, mkdirSync as mkdirSync22, readdirSync as readdirSync14 } from "fs";
|
|
38648
|
+
import { join as join44 } from "path";
|
|
37983
38649
|
async function runEncodeStage(input) {
|
|
37984
38650
|
const {
|
|
37985
38651
|
job,
|
|
@@ -38005,7 +38671,7 @@ async function runEncodeStage(input) {
|
|
|
38005
38671
|
const stage5Start = Date.now();
|
|
38006
38672
|
if (isPngSequence) {
|
|
38007
38673
|
updateJobStatus(job, "encoding", "Writing PNG sequence", 75, onProgress);
|
|
38008
|
-
if (!
|
|
38674
|
+
if (!existsSync37(outputPath)) mkdirSync22(outputPath, { recursive: true });
|
|
38009
38675
|
const captured = readdirSync14(framesDir).filter((name) => name.endsWith(".png")).sort();
|
|
38010
38676
|
if (captured.length === 0) {
|
|
38011
38677
|
throw new Error(
|
|
@@ -38013,11 +38679,11 @@ async function runEncodeStage(input) {
|
|
|
38013
38679
|
);
|
|
38014
38680
|
}
|
|
38015
38681
|
captured.forEach((name, i2) => {
|
|
38016
|
-
const dst =
|
|
38017
|
-
copyFileSync3(
|
|
38682
|
+
const dst = join44(outputPath, `frame_${String(i2 + 1).padStart(6, "0")}.png`);
|
|
38683
|
+
copyFileSync3(join44(framesDir, name), dst);
|
|
38018
38684
|
});
|
|
38019
|
-
if (hasAudio &&
|
|
38020
|
-
copyFileSync3(audioOutputPath,
|
|
38685
|
+
if (hasAudio && existsSync37(audioOutputPath)) {
|
|
38686
|
+
copyFileSync3(audioOutputPath, join44(outputPath, "audio.aac"));
|
|
38021
38687
|
log2.info(`[Render] png-sequence: audio.aac sidecar written to ${outputPath}/audio.aac`);
|
|
38022
38688
|
}
|
|
38023
38689
|
return { encodeMs: Date.now() - stage5Start };
|
|
@@ -38103,33 +38769,21 @@ var init_assembleStage = __esm({
|
|
|
38103
38769
|
|
|
38104
38770
|
// ../producer/src/services/renderOrchestrator.ts
|
|
38105
38771
|
import {
|
|
38106
|
-
existsSync as
|
|
38772
|
+
existsSync as existsSync38,
|
|
38107
38773
|
mkdirSync as mkdirSync23,
|
|
38108
|
-
rmSync as rmSync8,
|
|
38109
38774
|
readFileSync as readFileSync26,
|
|
38110
38775
|
readSync,
|
|
38111
38776
|
closeSync,
|
|
38112
38777
|
readdirSync as readdirSync15,
|
|
38778
|
+
rmSync as rmSync9,
|
|
38113
38779
|
statSync as statSync12,
|
|
38114
38780
|
writeFileSync as writeFileSync17,
|
|
38115
38781
|
copyFileSync as copyFileSync4,
|
|
38116
|
-
appendFileSync
|
|
38117
|
-
symlinkSync,
|
|
38118
|
-
cpSync
|
|
38782
|
+
appendFileSync
|
|
38119
38783
|
} from "fs";
|
|
38120
|
-
import { join as
|
|
38784
|
+
import { join as join45, dirname as dirname13, resolve as resolve19 } from "path";
|
|
38121
38785
|
import { randomUUID as randomUUID2 } from "crypto";
|
|
38122
|
-
import { freemem as freemem2 } from "os";
|
|
38123
38786
|
import { fileURLToPath as fileURLToPath3 } from "url";
|
|
38124
|
-
async function safeCleanup(label2, fn, log2 = defaultLogger) {
|
|
38125
|
-
try {
|
|
38126
|
-
await fn();
|
|
38127
|
-
} catch (err) {
|
|
38128
|
-
log2.debug(`Cleanup failed (${label2})`, {
|
|
38129
|
-
error: err instanceof Error ? err.message : String(err)
|
|
38130
|
-
});
|
|
38131
|
-
}
|
|
38132
|
-
}
|
|
38133
38787
|
function sampleDirectoryBytes(dir) {
|
|
38134
38788
|
let total = 0;
|
|
38135
38789
|
const stack = [dir];
|
|
@@ -38143,7 +38797,7 @@ function sampleDirectoryBytes(dir) {
|
|
|
38143
38797
|
continue;
|
|
38144
38798
|
}
|
|
38145
38799
|
for (const name of entries2) {
|
|
38146
|
-
const full =
|
|
38800
|
+
const full = join45(current, name);
|
|
38147
38801
|
try {
|
|
38148
38802
|
const st3 = statSync12(full);
|
|
38149
38803
|
if (st3.isDirectory()) {
|
|
@@ -38172,94 +38826,6 @@ function countNonZeroRgb48(buf) {
|
|
|
38172
38826
|
}
|
|
38173
38827
|
return n;
|
|
38174
38828
|
}
|
|
38175
|
-
function createHdrPerfCollector() {
|
|
38176
|
-
return {
|
|
38177
|
-
frames: 0,
|
|
38178
|
-
normalFrames: 0,
|
|
38179
|
-
transitionFrames: 0,
|
|
38180
|
-
domLayerCaptures: 0,
|
|
38181
|
-
hdrVideoLayerBlits: 0,
|
|
38182
|
-
hdrImageLayerBlits: 0,
|
|
38183
|
-
timings: {
|
|
38184
|
-
frameSeekMs: 0,
|
|
38185
|
-
frameInjectMs: 0,
|
|
38186
|
-
stackingQueryMs: 0,
|
|
38187
|
-
canvasClearMs: 0,
|
|
38188
|
-
normalCompositeMs: 0,
|
|
38189
|
-
transitionCompositeMs: 0,
|
|
38190
|
-
encoderWriteMs: 0,
|
|
38191
|
-
hdrVideoReadDecodeMs: 0,
|
|
38192
|
-
hdrVideoTransferMs: 0,
|
|
38193
|
-
hdrVideoBlitMs: 0,
|
|
38194
|
-
hdrImageTransferMs: 0,
|
|
38195
|
-
hdrImageBlitMs: 0,
|
|
38196
|
-
domLayerSeekMs: 0,
|
|
38197
|
-
domLayerInjectMs: 0,
|
|
38198
|
-
domMaskApplyMs: 0,
|
|
38199
|
-
domScreenshotMs: 0,
|
|
38200
|
-
domMaskRemoveMs: 0,
|
|
38201
|
-
domPngDecodeMs: 0,
|
|
38202
|
-
domBlitMs: 0
|
|
38203
|
-
}
|
|
38204
|
-
};
|
|
38205
|
-
}
|
|
38206
|
-
function addHdrTiming(perf, key2, startMs) {
|
|
38207
|
-
if (!perf) return;
|
|
38208
|
-
perf.timings[key2] += Date.now() - startMs;
|
|
38209
|
-
}
|
|
38210
|
-
function averageTiming(totalMs, count) {
|
|
38211
|
-
return count > 0 ? Math.round(totalMs / count * 100) / 100 : 0;
|
|
38212
|
-
}
|
|
38213
|
-
function finalizeHdrPerf(perf) {
|
|
38214
|
-
const avgMs = {};
|
|
38215
|
-
const perFrameKeys = [
|
|
38216
|
-
"frameSeekMs",
|
|
38217
|
-
"frameInjectMs",
|
|
38218
|
-
"stackingQueryMs",
|
|
38219
|
-
"canvasClearMs",
|
|
38220
|
-
"encoderWriteMs"
|
|
38221
|
-
];
|
|
38222
|
-
for (const key2 of perFrameKeys) avgMs[key2] = averageTiming(perf.timings[key2], perf.frames);
|
|
38223
|
-
avgMs.normalCompositeMs = averageTiming(perf.timings.normalCompositeMs, perf.normalFrames);
|
|
38224
|
-
avgMs.transitionCompositeMs = averageTiming(
|
|
38225
|
-
perf.timings.transitionCompositeMs,
|
|
38226
|
-
perf.transitionFrames
|
|
38227
|
-
);
|
|
38228
|
-
const perDomLayerKeys = [
|
|
38229
|
-
"domLayerSeekMs",
|
|
38230
|
-
"domLayerInjectMs",
|
|
38231
|
-
"domMaskApplyMs",
|
|
38232
|
-
"domScreenshotMs",
|
|
38233
|
-
"domMaskRemoveMs",
|
|
38234
|
-
"domPngDecodeMs",
|
|
38235
|
-
"domBlitMs"
|
|
38236
|
-
];
|
|
38237
|
-
for (const key2 of perDomLayerKeys) {
|
|
38238
|
-
avgMs[key2] = averageTiming(perf.timings[key2], perf.domLayerCaptures);
|
|
38239
|
-
}
|
|
38240
|
-
const perHdrVideoKeys = [
|
|
38241
|
-
"hdrVideoReadDecodeMs",
|
|
38242
|
-
"hdrVideoTransferMs",
|
|
38243
|
-
"hdrVideoBlitMs"
|
|
38244
|
-
];
|
|
38245
|
-
for (const key2 of perHdrVideoKeys) {
|
|
38246
|
-
avgMs[key2] = averageTiming(perf.timings[key2], perf.hdrVideoLayerBlits);
|
|
38247
|
-
}
|
|
38248
|
-
const perHdrImageKeys = ["hdrImageTransferMs", "hdrImageBlitMs"];
|
|
38249
|
-
for (const key2 of perHdrImageKeys) {
|
|
38250
|
-
avgMs[key2] = averageTiming(perf.timings[key2], perf.hdrImageLayerBlits);
|
|
38251
|
-
}
|
|
38252
|
-
return {
|
|
38253
|
-
frames: perf.frames,
|
|
38254
|
-
normalFrames: perf.normalFrames,
|
|
38255
|
-
transitionFrames: perf.transitionFrames,
|
|
38256
|
-
domLayerCaptures: perf.domLayerCaptures,
|
|
38257
|
-
hdrVideoLayerBlits: perf.hdrVideoLayerBlits,
|
|
38258
|
-
hdrImageLayerBlits: perf.hdrImageLayerBlits,
|
|
38259
|
-
timings: { ...perf.timings },
|
|
38260
|
-
avgMs
|
|
38261
|
-
};
|
|
38262
|
-
}
|
|
38263
38829
|
function installDebugLogger(logPath, log2 = defaultLogger) {
|
|
38264
38830
|
const origLog = console.log;
|
|
38265
38831
|
const origError = console.error;
|
|
@@ -38295,43 +38861,6 @@ function installDebugLogger(logPath, log2 = defaultLogger) {
|
|
|
38295
38861
|
console.warn = origWarn;
|
|
38296
38862
|
};
|
|
38297
38863
|
}
|
|
38298
|
-
function createCompiledFrameSrcResolver(compiledDir) {
|
|
38299
|
-
const compiledRoot = resolve19(compiledDir);
|
|
38300
|
-
return (framePath) => {
|
|
38301
|
-
const resolvedFramePath = resolve19(framePath);
|
|
38302
|
-
if (!isPathInside2(resolvedFramePath, compiledRoot)) return null;
|
|
38303
|
-
const relativePath = relative3(compiledRoot, resolvedFramePath);
|
|
38304
|
-
if (!relativePath || relativePath.startsWith("..") || isAbsolute7(relativePath)) {
|
|
38305
|
-
return null;
|
|
38306
|
-
}
|
|
38307
|
-
return `/${relativePath.split(/[\\/]+/).map((segment) => encodeURIComponent(segment)).join("/")}`;
|
|
38308
|
-
};
|
|
38309
|
-
}
|
|
38310
|
-
function materializeExtractedFramesForCompiledDir(extracted, compiledDir, options = {}) {
|
|
38311
|
-
const pathModule = options.pathModule ?? materializePathModule;
|
|
38312
|
-
const fileSystem = options.fileSystem ?? materializeFileSystem;
|
|
38313
|
-
const resolvedCompiledDir = pathModule.resolve(compiledDir);
|
|
38314
|
-
const compiledFrameRoot = pathModule.join(resolvedCompiledDir, "__hyperframes_video_frames");
|
|
38315
|
-
for (const ext of extracted) {
|
|
38316
|
-
const resolvedOut = pathModule.resolve(ext.outputDir);
|
|
38317
|
-
if (isPathInside2(resolvedOut, resolvedCompiledDir, { pathModule })) continue;
|
|
38318
|
-
const linkPath = pathModule.join(compiledFrameRoot, ext.videoId);
|
|
38319
|
-
if (!fileSystem.existsSync(linkPath)) {
|
|
38320
|
-
fileSystem.mkdirSync(pathModule.dirname(linkPath), { recursive: true });
|
|
38321
|
-
if (options.materializeSymlinks) {
|
|
38322
|
-
fileSystem.cpSync(resolvedOut, linkPath, { recursive: true });
|
|
38323
|
-
} else {
|
|
38324
|
-
fileSystem.symlinkSync(resolvedOut, linkPath);
|
|
38325
|
-
}
|
|
38326
|
-
}
|
|
38327
|
-
const remapped = /* @__PURE__ */ new Map();
|
|
38328
|
-
for (const [idx, framePath] of ext.framePaths) {
|
|
38329
|
-
remapped.set(idx, pathModule.join(linkPath, pathModule.basename(framePath)));
|
|
38330
|
-
}
|
|
38331
|
-
ext.framePaths = remapped;
|
|
38332
|
-
ext.outputDir = linkPath;
|
|
38333
|
-
}
|
|
38334
|
-
}
|
|
38335
38864
|
function collectVideoReadinessSkipIds(nativeHdrVideoIds, extractedVideos) {
|
|
38336
38865
|
return Array.from(
|
|
38337
38866
|
/* @__PURE__ */ new Set([
|
|
@@ -38350,115 +38879,12 @@ function collectVideoMetadataHints(extractedVideos) {
|
|
|
38350
38879
|
height: video.metadata.height
|
|
38351
38880
|
})).sort((a, b2) => a.id.localeCompare(b2.id));
|
|
38352
38881
|
}
|
|
38353
|
-
function resolveRenderWorkerCount(totalFrames, requestedWorkers, cfg, compiled, log2 = defaultLogger, measuredCaptureCost) {
|
|
38354
|
-
const captureCost = combineCaptureCostEstimates(
|
|
38355
|
-
estimateCaptureCostMultiplier(compiled),
|
|
38356
|
-
measuredCaptureCost
|
|
38357
|
-
);
|
|
38358
|
-
const workerCount = calculateOptimalWorkers(totalFrames, requestedWorkers, {
|
|
38359
|
-
...cfg,
|
|
38360
|
-
captureCostMultiplier: captureCost.multiplier
|
|
38361
|
-
});
|
|
38362
|
-
if (requestedWorkers !== void 0 || captureCost.multiplier <= 1) {
|
|
38363
|
-
return workerCount;
|
|
38364
|
-
}
|
|
38365
|
-
const baselineWorkers = calculateOptimalWorkers(totalFrames, void 0, cfg);
|
|
38366
|
-
if (workerCount < baselineWorkers) {
|
|
38367
|
-
log2.warn(
|
|
38368
|
-
"[Render] Reduced auto worker count for high-cost capture workload to avoid Chrome compositor starvation.",
|
|
38369
|
-
{
|
|
38370
|
-
from: baselineWorkers,
|
|
38371
|
-
to: workerCount,
|
|
38372
|
-
costMultiplier: captureCost.multiplier,
|
|
38373
|
-
reasons: captureCost.reasons
|
|
38374
|
-
}
|
|
38375
|
-
);
|
|
38376
|
-
}
|
|
38377
|
-
return workerCount;
|
|
38378
|
-
}
|
|
38379
|
-
function estimateCaptureCostMultiplier(compiled) {
|
|
38380
|
-
let multiplier = 1;
|
|
38381
|
-
const reasons = [];
|
|
38382
|
-
if (compiled.hasShaderTransitions) {
|
|
38383
|
-
multiplier += 2;
|
|
38384
|
-
reasons.push("shader-transitions");
|
|
38385
|
-
}
|
|
38386
|
-
const reasonCodes = new Set(compiled.renderModeHints.reasons.map((reason) => reason.code));
|
|
38387
|
-
if (reasonCodes.has("requestAnimationFrame")) {
|
|
38388
|
-
multiplier += 1;
|
|
38389
|
-
reasons.push("requestAnimationFrame");
|
|
38390
|
-
}
|
|
38391
|
-
if (reasonCodes.has("iframe")) {
|
|
38392
|
-
multiplier += 0.5;
|
|
38393
|
-
reasons.push("iframe");
|
|
38394
|
-
}
|
|
38395
|
-
return {
|
|
38396
|
-
multiplier: Math.round(multiplier * 100) / 100,
|
|
38397
|
-
reasons
|
|
38398
|
-
};
|
|
38399
|
-
}
|
|
38400
|
-
function combineCaptureCostEstimates(staticCost, measuredCost) {
|
|
38401
|
-
if (!measuredCost || measuredCost.multiplier <= 1) return staticCost;
|
|
38402
|
-
if (staticCost.multiplier >= measuredCost.multiplier) {
|
|
38403
|
-
return {
|
|
38404
|
-
multiplier: staticCost.multiplier,
|
|
38405
|
-
reasons: [...staticCost.reasons, ...measuredCost.reasons],
|
|
38406
|
-
p95Ms: measuredCost.p95Ms
|
|
38407
|
-
};
|
|
38408
|
-
}
|
|
38409
|
-
return {
|
|
38410
|
-
multiplier: measuredCost.multiplier,
|
|
38411
|
-
reasons: [...measuredCost.reasons, ...staticCost.reasons],
|
|
38412
|
-
p95Ms: measuredCost.p95Ms
|
|
38413
|
-
};
|
|
38414
|
-
}
|
|
38415
|
-
function createCaptureCalibrationConfig(cfg) {
|
|
38416
|
-
return {
|
|
38417
|
-
...cfg,
|
|
38418
|
-
protocolTimeout: Math.min(cfg.protocolTimeout, CAPTURE_CALIBRATION_PROTOCOL_TIMEOUT_MS)
|
|
38419
|
-
};
|
|
38420
|
-
}
|
|
38421
|
-
function estimateMeasuredCaptureCostMultiplier(samples) {
|
|
38422
|
-
if (samples.length === 0) {
|
|
38423
|
-
return { multiplier: 1, reasons: [] };
|
|
38424
|
-
}
|
|
38425
|
-
const sorted = [...samples].sort((a, b2) => a.captureTimeMs - b2.captureTimeMs);
|
|
38426
|
-
const p95Index = Math.max(0, Math.ceil(sorted.length * 0.95) - 1);
|
|
38427
|
-
const p95Sample = sorted[p95Index] ?? sorted[sorted.length - 1];
|
|
38428
|
-
if (!p95Sample) {
|
|
38429
|
-
return { multiplier: 1, reasons: [] };
|
|
38430
|
-
}
|
|
38431
|
-
const p95Ms = Math.round(p95Sample.captureTimeMs);
|
|
38432
|
-
const multiplier = Math.min(
|
|
38433
|
-
MAX_MEASURED_CAPTURE_COST_MULTIPLIER,
|
|
38434
|
-
Math.max(1, Math.round(p95Ms / CAPTURE_CALIBRATION_TARGET_MS * 100) / 100)
|
|
38435
|
-
);
|
|
38436
|
-
return {
|
|
38437
|
-
multiplier,
|
|
38438
|
-
reasons: multiplier > 1 ? [`calibration-p95=${p95Ms}ms`] : [],
|
|
38439
|
-
p95Ms
|
|
38440
|
-
};
|
|
38441
|
-
}
|
|
38442
|
-
function selectCaptureCalibrationFrames(totalFrames) {
|
|
38443
|
-
if (totalFrames <= 0) return [];
|
|
38444
|
-
const lastFrame = totalFrames - 1;
|
|
38445
|
-
const candidates = [
|
|
38446
|
-
0,
|
|
38447
|
-
Math.floor(totalFrames * 0.25),
|
|
38448
|
-
Math.floor(totalFrames * 0.5),
|
|
38449
|
-
Math.floor(totalFrames * 0.75),
|
|
38450
|
-
lastFrame
|
|
38451
|
-
];
|
|
38452
|
-
return Array.from(
|
|
38453
|
-
new Set(candidates.map((frame) => Math.max(0, Math.min(lastFrame, frame))))
|
|
38454
|
-
).sort((a, b2) => a - b2);
|
|
38455
|
-
}
|
|
38456
38882
|
function findMissingFrameRanges(totalFrames, framesDir, frameExt) {
|
|
38457
38883
|
const ranges = [];
|
|
38458
38884
|
let rangeStart = null;
|
|
38459
38885
|
for (let frameIndex = 0; frameIndex < totalFrames; frameIndex++) {
|
|
38460
|
-
const framePath =
|
|
38461
|
-
const missing = !
|
|
38886
|
+
const framePath = join45(framesDir, `frame_${String(frameIndex).padStart(6, "0")}.${frameExt}`);
|
|
38887
|
+
const missing = !existsSync38(framePath);
|
|
38462
38888
|
if (missing && rangeStart === null) {
|
|
38463
38889
|
rangeStart = frameIndex;
|
|
38464
38890
|
} else if (!missing && rangeStart !== null) {
|
|
@@ -38480,7 +38906,7 @@ function buildMissingFrameRetryBatches(ranges, maxWorkers, workDir, attempt) {
|
|
|
38480
38906
|
workerId,
|
|
38481
38907
|
startFrame: range.startFrame,
|
|
38482
38908
|
endFrame: range.endFrame,
|
|
38483
|
-
outputDir:
|
|
38909
|
+
outputDir: join45(workDir, `retry-${attempt}-batch-${batchIndex}-worker-${workerId}`)
|
|
38484
38910
|
}));
|
|
38485
38911
|
batches.push(batch);
|
|
38486
38912
|
}
|
|
@@ -38495,63 +38921,17 @@ function isRecoverableParallelCaptureError(error) {
|
|
|
38495
38921
|
message
|
|
38496
38922
|
);
|
|
38497
38923
|
}
|
|
38498
|
-
function shouldFallbackToScreenshotAfterCalibrationError(error) {
|
|
38499
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
38500
|
-
return /HeadlessExperimental\.beginFrame timed out|beginFrame probe timeout|Another frame is pending|Frame still pending|Protocol error.*HeadlessExperimental\.beginFrame|Runtime\.callFunctionOn timed out|Runtime\.evaluate timed out/i.test(
|
|
38501
|
-
message
|
|
38502
|
-
);
|
|
38503
|
-
}
|
|
38504
38924
|
function countCapturedFrames(totalFrames, framesDir, frameExt) {
|
|
38505
38925
|
let captured = 0;
|
|
38506
38926
|
for (let frameIndex = 0; frameIndex < totalFrames; frameIndex++) {
|
|
38507
|
-
const framePath =
|
|
38508
|
-
if (
|
|
38927
|
+
const framePath = join45(framesDir, `frame_${String(frameIndex).padStart(6, "0")}.${frameExt}`);
|
|
38928
|
+
if (existsSync38(framePath)) captured++;
|
|
38509
38929
|
}
|
|
38510
38930
|
return captured;
|
|
38511
38931
|
}
|
|
38512
38932
|
function countFrameRanges(ranges) {
|
|
38513
38933
|
return ranges.reduce((sum, range) => sum + (range.endFrame - range.startFrame), 0);
|
|
38514
38934
|
}
|
|
38515
|
-
async function measureCaptureCostFromSession(session, totalFrames, fps) {
|
|
38516
|
-
const sampledFrames = selectCaptureCalibrationFrames(totalFrames);
|
|
38517
|
-
const samples = [];
|
|
38518
|
-
for (const frameIndex of sampledFrames) {
|
|
38519
|
-
const time = frameIndex / fps;
|
|
38520
|
-
const startedAt = Date.now();
|
|
38521
|
-
const result = await captureFrameToBuffer(session, frameIndex, time);
|
|
38522
|
-
samples.push({
|
|
38523
|
-
frameIndex,
|
|
38524
|
-
captureTimeMs: result.captureTimeMs || Date.now() - startedAt
|
|
38525
|
-
});
|
|
38526
|
-
}
|
|
38527
|
-
return {
|
|
38528
|
-
estimate: estimateMeasuredCaptureCostMultiplier(samples),
|
|
38529
|
-
samples
|
|
38530
|
-
};
|
|
38531
|
-
}
|
|
38532
|
-
function logCaptureCalibrationResult(calibration, log2) {
|
|
38533
|
-
if (calibration.estimate.multiplier > 1) {
|
|
38534
|
-
log2.warn("[Render] Measured slow frame capture during auto-worker calibration.", {
|
|
38535
|
-
multiplier: calibration.estimate.multiplier,
|
|
38536
|
-
p95Ms: calibration.estimate.p95Ms,
|
|
38537
|
-
sampledFrames: calibration.samples.map((sample) => sample.frameIndex)
|
|
38538
|
-
});
|
|
38539
|
-
} else {
|
|
38540
|
-
log2.debug("[Render] Auto-worker calibration kept baseline capture cost.", {
|
|
38541
|
-
p95Ms: calibration.estimate.p95Ms,
|
|
38542
|
-
sampledFrames: calibration.samples.map((sample) => sample.frameIndex)
|
|
38543
|
-
});
|
|
38544
|
-
}
|
|
38545
|
-
}
|
|
38546
|
-
function createFailedCaptureCalibrationEstimate(reason) {
|
|
38547
|
-
return {
|
|
38548
|
-
estimate: {
|
|
38549
|
-
multiplier: MAX_MEASURED_CAPTURE_COST_MULTIPLIER,
|
|
38550
|
-
reasons: [reason]
|
|
38551
|
-
},
|
|
38552
|
-
samples: []
|
|
38553
|
-
};
|
|
38554
|
-
}
|
|
38555
38935
|
async function executeDiskCaptureWithAdaptiveRetry(options) {
|
|
38556
38936
|
const attempts = [];
|
|
38557
38937
|
let currentWorkers = options.initialWorkerCount;
|
|
@@ -38565,7 +38945,7 @@ async function executeDiskCaptureWithAdaptiveRetry(options) {
|
|
|
38565
38945
|
frameCount,
|
|
38566
38946
|
reason: attempt === 0 ? "initial" : "retry"
|
|
38567
38947
|
});
|
|
38568
|
-
const attemptWorkDir =
|
|
38948
|
+
const attemptWorkDir = join45(options.workDir, `capture-attempt-${attempt}`);
|
|
38569
38949
|
const batches = missingRanges ? buildMissingFrameRetryBatches(missingRanges, currentWorkers, attemptWorkDir, attempt) : [distributeFrames(options.totalFrames, currentWorkers, attemptWorkDir)];
|
|
38570
38950
|
try {
|
|
38571
38951
|
for (const tasks of batches) {
|
|
@@ -38989,7 +39369,7 @@ async function compositeHdrFrame(ctx, canvas, time, fullStacking, elementFilter,
|
|
|
38989
39369
|
if (shouldLog && debugDumpDir) {
|
|
38990
39370
|
const after2 = countNonZeroRgb48(canvas);
|
|
38991
39371
|
const dumpName = `frame_${String(debugFrameIndex).padStart(4, "0")}_layer_${String(layerIdx).padStart(2, "0")}_dom.png`;
|
|
38992
|
-
const dumpPath =
|
|
39372
|
+
const dumpPath = join45(debugDumpDir, dumpName);
|
|
38993
39373
|
writeFileSync17(dumpPath, domPng);
|
|
38994
39374
|
log2.info("[diag] dom layer blit", {
|
|
38995
39375
|
frame: debugFrameIndex,
|
|
@@ -39076,8 +39456,8 @@ function extractStandaloneEntryFromIndex(indexHtml, entryFile) {
|
|
|
39076
39456
|
async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSignal) {
|
|
39077
39457
|
const moduleDir = dirname13(fileURLToPath3(import.meta.url));
|
|
39078
39458
|
const producerRoot = process.env.PRODUCER_RENDERS_DIR ? resolve19(process.env.PRODUCER_RENDERS_DIR, "..") : resolve19(moduleDir, "../..");
|
|
39079
|
-
const debugDir =
|
|
39080
|
-
const workDir = job.config.debug ?
|
|
39459
|
+
const debugDir = join45(producerRoot, ".debug");
|
|
39460
|
+
const workDir = job.config.debug ? join45(debugDir, job.id) : join45(dirname13(outputPath), `work-${job.id}`);
|
|
39081
39461
|
const pipelineStart = Date.now();
|
|
39082
39462
|
const log2 = job.config.logger ?? defaultLogger;
|
|
39083
39463
|
let fileServer = null;
|
|
@@ -39090,32 +39470,18 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
39090
39470
|
imageDecodeFailures: 0
|
|
39091
39471
|
};
|
|
39092
39472
|
let hdrPerf;
|
|
39093
|
-
const perfOutputPath =
|
|
39473
|
+
const perfOutputPath = join45(workDir, "perf-summary.json");
|
|
39094
39474
|
const cfg = { ...job.config.producerConfig ?? resolveConfig() };
|
|
39095
39475
|
const outputFormat = job.config.format ?? "mp4";
|
|
39096
39476
|
const isWebm = outputFormat === "webm";
|
|
39097
39477
|
const isMov = outputFormat === "mov";
|
|
39098
39478
|
const isPngSequence = outputFormat === "png-sequence";
|
|
39099
39479
|
const needsAlpha = isWebm || isMov || isPngSequence;
|
|
39100
|
-
if (needsAlpha) {
|
|
39101
|
-
cfg.forceScreenshot = true;
|
|
39102
|
-
}
|
|
39103
39480
|
const enableChunkedEncode = cfg.enableChunkedEncode;
|
|
39104
39481
|
const chunkedEncodeSize = cfg.chunkSizeFrames;
|
|
39105
|
-
let
|
|
39106
|
-
let peakHeapUsedBytes = 0;
|
|
39107
|
-
const sampleMemory = () => {
|
|
39108
|
-
try {
|
|
39109
|
-
const m2 = process.memoryUsage();
|
|
39110
|
-
if (m2.rss > peakRssBytes) peakRssBytes = m2.rss;
|
|
39111
|
-
if (m2.heapUsed > peakHeapUsedBytes) peakHeapUsedBytes = m2.heapUsed;
|
|
39112
|
-
} catch {
|
|
39113
|
-
}
|
|
39114
|
-
};
|
|
39115
|
-
sampleMemory();
|
|
39116
|
-
const memSamplerInterval = setInterval(sampleMemory, 250);
|
|
39117
|
-
memSamplerInterval.unref?.();
|
|
39482
|
+
let memSampler = null;
|
|
39118
39483
|
try {
|
|
39484
|
+
memSampler = createMemorySampler();
|
|
39119
39485
|
const assertNotAborted = () => {
|
|
39120
39486
|
if (abortSignal?.aborted) {
|
|
39121
39487
|
throw new RenderCancelledError("render_cancelled");
|
|
@@ -39123,22 +39489,22 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
39123
39489
|
};
|
|
39124
39490
|
job.startedAt = /* @__PURE__ */ new Date();
|
|
39125
39491
|
assertNotAborted();
|
|
39126
|
-
if (!
|
|
39492
|
+
if (!existsSync38(workDir)) mkdirSync23(workDir, { recursive: true });
|
|
39127
39493
|
if (job.config.debug) {
|
|
39128
|
-
const logPath =
|
|
39494
|
+
const logPath = join45(workDir, "render.log");
|
|
39129
39495
|
restoreLogger = installDebugLogger(logPath, log2);
|
|
39130
39496
|
}
|
|
39131
39497
|
const entryFile = job.config.entryFile || "index.html";
|
|
39132
|
-
let htmlPath =
|
|
39133
|
-
if (!
|
|
39498
|
+
let htmlPath = join45(projectDir, entryFile);
|
|
39499
|
+
if (!existsSync38(htmlPath)) {
|
|
39134
39500
|
throw new Error(`Entry file not found: ${htmlPath}`);
|
|
39135
39501
|
}
|
|
39136
39502
|
assertNotAborted();
|
|
39137
39503
|
const rawEntry = readFileSync26(htmlPath, "utf-8");
|
|
39138
39504
|
if (entryFile !== "index.html" && rawEntry.trimStart().startsWith("<template")) {
|
|
39139
|
-
const wrapperPath =
|
|
39140
|
-
const projectIndexPath =
|
|
39141
|
-
if (!
|
|
39505
|
+
const wrapperPath = join45(workDir, "standalone-entry.html");
|
|
39506
|
+
const projectIndexPath = join45(projectDir, "index.html");
|
|
39507
|
+
if (!existsSync38(projectIndexPath)) {
|
|
39142
39508
|
throw new Error(
|
|
39143
39509
|
`Template entry file "${entryFile}" requires a project index.html to extract its render shell.`
|
|
39144
39510
|
);
|
|
@@ -39176,6 +39542,7 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
39176
39542
|
const { deviceScaleFactor, outputWidth, outputHeight } = compileResult;
|
|
39177
39543
|
const { width, height } = composition;
|
|
39178
39544
|
perfStages.compileOnlyMs = compileResult.compileOnlyMs;
|
|
39545
|
+
let captureForceScreenshot = compileResult.forceScreenshot;
|
|
39179
39546
|
const probeResult = await runProbeStage({
|
|
39180
39547
|
projectDir,
|
|
39181
39548
|
workDir,
|
|
@@ -39200,7 +39567,7 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
39200
39567
|
perfStages.browserProbeMs = probeResult.browserProbeMs;
|
|
39201
39568
|
perfStages.compileMs = Date.now() - stage1Start;
|
|
39202
39569
|
updateJobStatus(job, "preprocessing", "Extracting video frames", 10, onProgress);
|
|
39203
|
-
const compiledDir =
|
|
39570
|
+
const compiledDir = join45(workDir, "compiled");
|
|
39204
39571
|
const extractResult = await runExtractVideosStage({
|
|
39205
39572
|
projectDir,
|
|
39206
39573
|
compiledDir,
|
|
@@ -39223,55 +39590,13 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
39223
39590
|
imageColorSpaces
|
|
39224
39591
|
} = extractResult;
|
|
39225
39592
|
perfStages.videoExtractMs = extractResult.videoExtractMs;
|
|
39226
|
-
|
|
39227
|
-
|
|
39228
|
-
|
|
39229
|
-
|
|
39230
|
-
|
|
39231
|
-
|
|
39232
|
-
|
|
39233
|
-
const allColorSpaces = [...videoColorSpaces, ...imageColorSpaces];
|
|
39234
|
-
const info = allColorSpaces.length > 0 ? analyzeCompositionHdr(allColorSpaces) : null;
|
|
39235
|
-
if (hdrMode === "force-sdr") {
|
|
39236
|
-
effectiveHdr = void 0;
|
|
39237
|
-
} else if (hdrMode === "force-hdr") {
|
|
39238
|
-
if (info?.hasHdr && info.dominantTransfer) {
|
|
39239
|
-
effectiveHdr = { transfer: info.dominantTransfer };
|
|
39240
|
-
} else {
|
|
39241
|
-
effectiveHdr = { transfer: "hlg" };
|
|
39242
|
-
forcedHdrWithoutSources = true;
|
|
39243
|
-
}
|
|
39244
|
-
} else {
|
|
39245
|
-
if (info?.hasHdr && info.dominantTransfer) {
|
|
39246
|
-
effectiveHdr = { transfer: info.dominantTransfer };
|
|
39247
|
-
}
|
|
39248
|
-
}
|
|
39249
|
-
}
|
|
39250
|
-
if (effectiveHdr && outputFormat !== "mp4") {
|
|
39251
|
-
const hdrSourceReason = forcedHdrWithoutSources ? "HDR was forced without detected HDR sources" : "HDR source detected";
|
|
39252
|
-
log2.warn(
|
|
39253
|
-
`[Render] ${hdrSourceReason}, but format is "${outputFormat}" \u2014 falling back to SDR. HDR + alpha is not supported. Use --format mp4 for HDR10 output.`
|
|
39254
|
-
);
|
|
39255
|
-
effectiveHdr = void 0;
|
|
39256
|
-
}
|
|
39257
|
-
{
|
|
39258
|
-
const hdrMode = job.config.hdrMode ?? "auto";
|
|
39259
|
-
if (forcedHdrWithoutSources) {
|
|
39260
|
-
log2.warn(
|
|
39261
|
-
"[Render] HDR forced by --hdr flag, but no HDR sources were detected \u2014 defaulting to HLG. SDR-only compositions may look perceptually wrong on HDR displays."
|
|
39262
|
-
);
|
|
39263
|
-
}
|
|
39264
|
-
if (effectiveHdr) {
|
|
39265
|
-
const reason = hdrMode === "force-hdr" ? forcedHdrWithoutSources ? "forced by --hdr flag (no HDR sources detected \u2014 defaulting to HLG)" : "forced by --hdr flag" : "auto-detected from source(s)";
|
|
39266
|
-
log2.info(
|
|
39267
|
-
`[Render] HDR ${reason} \u2014 output: ${effectiveHdr.transfer.toUpperCase()} (BT.2020, 10-bit H.265)`
|
|
39268
|
-
);
|
|
39269
|
-
} else if (hdrMode === "force-sdr") {
|
|
39270
|
-
log2.info("[Render] SDR forced by --sdr flag");
|
|
39271
|
-
} else {
|
|
39272
|
-
log2.info("[Render] No HDR sources detected \u2014 rendering SDR");
|
|
39273
|
-
}
|
|
39274
|
-
}
|
|
39593
|
+
const effectiveHdr = resolveEffectiveHdrMode({
|
|
39594
|
+
hdrMode: job.config.hdrMode,
|
|
39595
|
+
outputFormat,
|
|
39596
|
+
extractionResult,
|
|
39597
|
+
imageColorSpaces,
|
|
39598
|
+
log: log2
|
|
39599
|
+
});
|
|
39275
39600
|
updateJobStatus(job, "preprocessing", "Processing audio tracks", 20, onProgress);
|
|
39276
39601
|
const audioResult = await runAudioStage({
|
|
39277
39602
|
projectDir,
|
|
@@ -39289,14 +39614,14 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
39289
39614
|
if (!fileServer) {
|
|
39290
39615
|
fileServer = await createFileServer2({
|
|
39291
39616
|
projectDir,
|
|
39292
|
-
compiledDir:
|
|
39617
|
+
compiledDir: join45(workDir, "compiled"),
|
|
39293
39618
|
port: 0,
|
|
39294
39619
|
preHeadScripts: [VIRTUAL_TIME_SHIM]
|
|
39295
39620
|
});
|
|
39296
39621
|
assertNotAborted();
|
|
39297
39622
|
}
|
|
39298
|
-
const framesDir =
|
|
39299
|
-
if (!
|
|
39623
|
+
const framesDir = join45(workDir, "captured-frames");
|
|
39624
|
+
if (!existsSync38(framesDir)) mkdirSync23(framesDir, { recursive: true });
|
|
39300
39625
|
const captureOptions = {
|
|
39301
39626
|
width,
|
|
39302
39627
|
height,
|
|
@@ -39319,95 +39644,24 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
39319
39644
|
});
|
|
39320
39645
|
let captureCalibration;
|
|
39321
39646
|
if (job.config.workers === void 0 && totalFrames >= 60) {
|
|
39322
|
-
const
|
|
39323
|
-
|
|
39324
|
-
|
|
39325
|
-
|
|
39326
|
-
|
|
39327
|
-
|
|
39328
|
-
|
|
39329
|
-
|
|
39330
|
-
|
|
39331
|
-
|
|
39332
|
-
|
|
39333
|
-
|
|
39334
|
-
|
|
39335
|
-
|
|
39336
|
-
|
|
39337
|
-
|
|
39338
|
-
|
|
39339
|
-
|
|
39340
|
-
totalFrames,
|
|
39341
|
-
fpsToNumber(job.config.fps)
|
|
39342
|
-
);
|
|
39343
|
-
logCaptureCalibrationResult(captureCalibration, log2);
|
|
39344
|
-
} catch (error) {
|
|
39345
|
-
const shouldFallbackToScreenshot = !cfg.forceScreenshot && shouldFallbackToScreenshotAfterCalibrationError(error);
|
|
39346
|
-
if (shouldFallbackToScreenshot) {
|
|
39347
|
-
cfg.forceScreenshot = true;
|
|
39348
|
-
if (probeSession) {
|
|
39349
|
-
lastBrowserConsole = probeSession.browserConsoleBuffer;
|
|
39350
|
-
await closeCaptureSession(probeSession).catch(() => {
|
|
39351
|
-
});
|
|
39352
|
-
probeSession = null;
|
|
39353
|
-
}
|
|
39354
|
-
if (calibrationSession) {
|
|
39355
|
-
lastBrowserConsole = calibrationSession.browserConsoleBuffer;
|
|
39356
|
-
await closeCaptureSession(calibrationSession).catch(() => {
|
|
39357
|
-
});
|
|
39358
|
-
calibrationSession = null;
|
|
39359
|
-
}
|
|
39360
|
-
log2.warn(
|
|
39361
|
-
"[Render] BeginFrame auto-worker calibration timed out; retrying calibration in screenshot capture mode.",
|
|
39362
|
-
{
|
|
39363
|
-
protocolTimeout: calibrationCfg.protocolTimeout,
|
|
39364
|
-
error: error instanceof Error ? error.message : String(error)
|
|
39365
|
-
}
|
|
39366
|
-
);
|
|
39367
|
-
const screenshotCalibrationCfg = createCaptureCalibrationConfig(cfg);
|
|
39368
|
-
try {
|
|
39369
|
-
calibrationSession = await createCaptureSession(
|
|
39370
|
-
fileServer.url,
|
|
39371
|
-
join44(workDir, "capture-calibration-screenshot"),
|
|
39372
|
-
buildCaptureOptions(),
|
|
39373
|
-
createRenderVideoFrameInjector(),
|
|
39374
|
-
screenshotCalibrationCfg
|
|
39375
|
-
);
|
|
39376
|
-
if (!calibrationSession.isInitialized) {
|
|
39377
|
-
await initializeSession(calibrationSession);
|
|
39378
|
-
}
|
|
39379
|
-
assertNotAborted();
|
|
39380
|
-
captureCalibration = await measureCaptureCostFromSession(
|
|
39381
|
-
calibrationSession,
|
|
39382
|
-
totalFrames,
|
|
39383
|
-
fpsToNumber(job.config.fps)
|
|
39384
|
-
);
|
|
39385
|
-
logCaptureCalibrationResult(captureCalibration, log2);
|
|
39386
|
-
} catch (fallbackError) {
|
|
39387
|
-
captureCalibration = createFailedCaptureCalibrationEstimate(
|
|
39388
|
-
"calibration-screenshot-failed"
|
|
39389
|
-
);
|
|
39390
|
-
log2.warn(
|
|
39391
|
-
"[Render] Screenshot auto-worker calibration failed after BeginFrame fallback; using conservative worker budget.",
|
|
39392
|
-
{
|
|
39393
|
-
protocolTimeout: screenshotCalibrationCfg.protocolTimeout,
|
|
39394
|
-
error: fallbackError instanceof Error ? fallbackError.message : String(fallbackError)
|
|
39395
|
-
}
|
|
39396
|
-
);
|
|
39397
|
-
}
|
|
39398
|
-
} else {
|
|
39399
|
-
captureCalibration = createFailedCaptureCalibrationEstimate("calibration-failed");
|
|
39400
|
-
log2.warn("[Render] Auto-worker calibration failed; using conservative worker budget.", {
|
|
39401
|
-
protocolTimeout: calibrationCfg.protocolTimeout,
|
|
39402
|
-
error: error instanceof Error ? error.message : String(error)
|
|
39403
|
-
});
|
|
39404
|
-
}
|
|
39405
|
-
} finally {
|
|
39406
|
-
if (calibrationSession) {
|
|
39407
|
-
lastBrowserConsole = calibrationSession.browserConsoleBuffer;
|
|
39408
|
-
await closeCaptureSession(calibrationSession).catch(() => {
|
|
39409
|
-
});
|
|
39410
|
-
}
|
|
39647
|
+
const outcome = await runCaptureCalibration({
|
|
39648
|
+
cfg,
|
|
39649
|
+
fileServer,
|
|
39650
|
+
workDir,
|
|
39651
|
+
log: log2,
|
|
39652
|
+
job,
|
|
39653
|
+
totalFrames,
|
|
39654
|
+
forceScreenshot: captureForceScreenshot,
|
|
39655
|
+
probeSession,
|
|
39656
|
+
buildCaptureOptions,
|
|
39657
|
+
createRenderVideoFrameInjector,
|
|
39658
|
+
assertNotAborted
|
|
39659
|
+
});
|
|
39660
|
+
captureCalibration = outcome.calibration;
|
|
39661
|
+
captureForceScreenshot = outcome.forceScreenshot;
|
|
39662
|
+
probeSession = outcome.probeSession;
|
|
39663
|
+
if (outcome.lastBrowserConsole.length > 0) {
|
|
39664
|
+
lastBrowserConsole = outcome.lastBrowserConsole;
|
|
39411
39665
|
}
|
|
39412
39666
|
}
|
|
39413
39667
|
let workerCount = resolveRenderWorkerCount(
|
|
@@ -39440,7 +39694,7 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
39440
39694
|
"png-sequence": ""
|
|
39441
39695
|
};
|
|
39442
39696
|
const videoExt = FORMAT_EXT2[outputFormat] ?? ".mp4";
|
|
39443
|
-
const videoOnlyPath =
|
|
39697
|
+
const videoOnlyPath = join45(workDir, `video-only${videoExt}`);
|
|
39444
39698
|
const nativeHdrIds = /* @__PURE__ */ new Set([...nativeHdrVideoIds, ...nativeHdrImageIds]);
|
|
39445
39699
|
const hasHdrContent = Boolean(effectiveHdr && nativeHdrIds.size > 0);
|
|
39446
39700
|
const useLayeredComposite = shouldUseLayeredComposite({
|
|
@@ -39460,9 +39714,11 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
39460
39714
|
const effectiveBitrate = job.config.crf != null ? void 0 : job.config.videoBitrate;
|
|
39461
39715
|
job.framesRendered = 0;
|
|
39462
39716
|
if (useLayeredComposite) {
|
|
39717
|
+
captureForceScreenshot = true;
|
|
39463
39718
|
const hdrRes = await runCaptureHdrStage({
|
|
39464
39719
|
job,
|
|
39465
39720
|
cfg,
|
|
39721
|
+
forceScreenshot: captureForceScreenshot,
|
|
39466
39722
|
log: log2,
|
|
39467
39723
|
projectDir,
|
|
39468
39724
|
compiledDir,
|
|
@@ -39505,6 +39761,7 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
39505
39761
|
job,
|
|
39506
39762
|
totalFrames,
|
|
39507
39763
|
cfg,
|
|
39764
|
+
forceScreenshot: captureForceScreenshot,
|
|
39508
39765
|
log: log2,
|
|
39509
39766
|
workerCount,
|
|
39510
39767
|
probeSession,
|
|
@@ -39547,6 +39804,7 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
39547
39804
|
job,
|
|
39548
39805
|
totalFrames,
|
|
39549
39806
|
cfg,
|
|
39807
|
+
forceScreenshot: captureForceScreenshot,
|
|
39550
39808
|
log: log2,
|
|
39551
39809
|
workerCount,
|
|
39552
39810
|
probeSession,
|
|
@@ -39611,41 +39869,29 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
39611
39869
|
job.outputPath = outputPath;
|
|
39612
39870
|
updateJobStatus(job, "complete", "Render complete", 100, onProgress);
|
|
39613
39871
|
const totalElapsed = Date.now() - pipelineStart;
|
|
39614
|
-
|
|
39615
|
-
const
|
|
39616
|
-
|
|
39617
|
-
|
|
39618
|
-
|
|
39619
|
-
|
|
39620
|
-
// payloads (CLI telemetry, regression-harness reports) where a single
|
|
39621
|
-
// number is friendlier than `{num,den}`. Callers needing the rational
|
|
39622
|
-
// back can read `job.config.fps`.
|
|
39623
|
-
fps: fpsToNumber(job.config.fps),
|
|
39624
|
-
quality: job.config.quality,
|
|
39625
|
-
workers: workerCount,
|
|
39626
|
-
chunkedEncode: enableChunkedEncode,
|
|
39627
|
-
chunkSizeFrames: enableChunkedEncode ? chunkedEncodeSize : null,
|
|
39872
|
+
const tmpPeakBytes = existsSync38(workDir) ? sampleDirectoryBytes(workDir) : 0;
|
|
39873
|
+
const perfSummary = buildRenderPerfSummary({
|
|
39874
|
+
job,
|
|
39875
|
+
workerCount,
|
|
39876
|
+
enableChunkedEncode,
|
|
39877
|
+
chunkedEncodeSize,
|
|
39628
39878
|
compositionDurationSeconds: composition.duration,
|
|
39629
39879
|
totalFrames,
|
|
39630
|
-
|
|
39880
|
+
outputWidth,
|
|
39881
|
+
outputHeight,
|
|
39631
39882
|
videoCount: composition.videos.length,
|
|
39632
39883
|
audioCount: composition.audios.length,
|
|
39633
|
-
|
|
39884
|
+
totalElapsedMs: totalElapsed,
|
|
39885
|
+
perfStages,
|
|
39634
39886
|
videoExtractBreakdown: extractionResult?.phaseBreakdown,
|
|
39635
39887
|
tmpPeakBytes,
|
|
39636
|
-
captureCalibration
|
|
39637
|
-
|
|
39638
|
-
|
|
39639
|
-
|
|
39640
|
-
|
|
39641
|
-
|
|
39642
|
-
|
|
39643
|
-
hdrDiagnostics: hdrDiagnostics.videoExtractionFailures > 0 || hdrDiagnostics.imageDecodeFailures > 0 ? { ...hdrDiagnostics } : void 0,
|
|
39644
|
-
hdrPerf: hdrPerf ? finalizeHdrPerf(hdrPerf) : void 0,
|
|
39645
|
-
captureAvgMs: totalFrames > 0 ? Math.round((perfStages.captureMs ?? 0) / totalFrames) : void 0,
|
|
39646
|
-
peakRssMb: Math.round(peakRssBytes / (1024 * 1024)),
|
|
39647
|
-
peakHeapUsedMb: Math.round(peakHeapUsedBytes / (1024 * 1024))
|
|
39648
|
-
};
|
|
39888
|
+
captureCalibration,
|
|
39889
|
+
captureAttempts,
|
|
39890
|
+
hdrDiagnostics,
|
|
39891
|
+
hdrPerf,
|
|
39892
|
+
peakRssBytes: memSampler.peakRssBytes(),
|
|
39893
|
+
peakHeapUsedBytes: memSampler.peakHeapUsedBytes()
|
|
39894
|
+
});
|
|
39649
39895
|
job.perfSummary = perfSummary;
|
|
39650
39896
|
if (job.config.debug) {
|
|
39651
39897
|
try {
|
|
@@ -39658,8 +39904,8 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
39658
39904
|
}
|
|
39659
39905
|
}
|
|
39660
39906
|
if (job.config.debug) {
|
|
39661
|
-
if (!isPngSequence &&
|
|
39662
|
-
const debugOutput =
|
|
39907
|
+
if (!isPngSequence && existsSync38(outputPath)) {
|
|
39908
|
+
const debugOutput = join45(workDir, `output${videoExt}`);
|
|
39663
39909
|
copyFileSync4(outputPath, debugOutput);
|
|
39664
39910
|
}
|
|
39665
39911
|
} else if (process.env.KEEP_TEMP === "1") {
|
|
@@ -39668,7 +39914,7 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
39668
39914
|
await safeCleanup(
|
|
39669
39915
|
"remove workDir",
|
|
39670
39916
|
() => {
|
|
39671
|
-
|
|
39917
|
+
rmSync9(workDir, { recursive: true, force: true });
|
|
39672
39918
|
},
|
|
39673
39919
|
log2
|
|
39674
39920
|
);
|
|
@@ -39678,34 +39924,18 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
39678
39924
|
if (error instanceof RenderCancelledError || abortSignal?.aborted) {
|
|
39679
39925
|
job.error = error instanceof Error ? error.message : "render_cancelled";
|
|
39680
39926
|
updateJobStatus(job, "cancelled", "Render cancelled", job.progress, onProgress);
|
|
39681
|
-
|
|
39682
|
-
|
|
39683
|
-
|
|
39684
|
-
|
|
39685
|
-
|
|
39686
|
-
|
|
39687
|
-
|
|
39688
|
-
|
|
39689
|
-
);
|
|
39690
|
-
}
|
|
39691
|
-
if (probeSession) {
|
|
39692
|
-
const session = probeSession;
|
|
39693
|
-
await safeCleanup("close probe session (cancel)", () => closeCaptureSession(session), log2);
|
|
39694
|
-
}
|
|
39695
|
-
if (!job.config.debug) {
|
|
39696
|
-
await safeCleanup(
|
|
39697
|
-
"remove workDir (cancel)",
|
|
39698
|
-
() => {
|
|
39699
|
-
rmSync8(workDir, { recursive: true, force: true });
|
|
39700
|
-
},
|
|
39701
|
-
log2
|
|
39702
|
-
);
|
|
39703
|
-
}
|
|
39927
|
+
await cleanupRenderResources({
|
|
39928
|
+
fileServer,
|
|
39929
|
+
probeSession,
|
|
39930
|
+
workDir,
|
|
39931
|
+
debug: Boolean(job.config.debug),
|
|
39932
|
+
log: log2,
|
|
39933
|
+
label: "cancel"
|
|
39934
|
+
});
|
|
39704
39935
|
if (restoreLogger) restoreLogger();
|
|
39705
39936
|
throw error instanceof RenderCancelledError ? error : new RenderCancelledError("render_cancelled");
|
|
39706
39937
|
}
|
|
39707
39938
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
39708
|
-
const errorStack = error instanceof Error ? error.stack : void 0;
|
|
39709
39939
|
const isTimeoutError = errorMessage.includes("Waiting failed") || errorMessage.includes("timeout exceeded") || errorMessage.includes("Navigation timeout");
|
|
39710
39940
|
const wasParallel = job.config.workers !== 1;
|
|
39711
39941
|
if (isTimeoutError && wasParallel) {
|
|
@@ -39715,58 +39945,42 @@ async function executeRenderJob(job, projectDir, outputPath, onProgress, abortSi
|
|
|
39715
39945
|
}
|
|
39716
39946
|
job.error = errorMessage;
|
|
39717
39947
|
updateJobStatus(job, "failed", `Failed: ${errorMessage}`, job.progress, onProgress);
|
|
39718
|
-
const elapsed = Date.now() - pipelineStart;
|
|
39719
|
-
const freeMemMB = Math.round(freemem2() / (1024 * 1024));
|
|
39720
39948
|
job.failedStage = job.currentStage;
|
|
39721
|
-
job.errorDetails = {
|
|
39722
|
-
|
|
39723
|
-
|
|
39724
|
-
|
|
39725
|
-
|
|
39726
|
-
|
|
39727
|
-
|
|
39728
|
-
|
|
39729
|
-
|
|
39730
|
-
|
|
39731
|
-
|
|
39732
|
-
|
|
39733
|
-
|
|
39734
|
-
|
|
39735
|
-
|
|
39736
|
-
},
|
|
39737
|
-
log2
|
|
39738
|
-
);
|
|
39739
|
-
}
|
|
39740
|
-
if (probeSession) {
|
|
39741
|
-
const session = probeSession;
|
|
39742
|
-
await safeCleanup("close probe session (error)", () => closeCaptureSession(session), log2);
|
|
39743
|
-
}
|
|
39744
|
-
if (!job.config.debug) {
|
|
39745
|
-
await safeCleanup(
|
|
39746
|
-
"remove workDir (error)",
|
|
39747
|
-
() => {
|
|
39748
|
-
if (existsSync37(workDir)) rmSync8(workDir, { recursive: true, force: true });
|
|
39749
|
-
},
|
|
39750
|
-
log2
|
|
39751
|
-
);
|
|
39752
|
-
}
|
|
39949
|
+
job.errorDetails = buildRenderErrorDetails({
|
|
39950
|
+
error,
|
|
39951
|
+
pipelineStartMs: pipelineStart,
|
|
39952
|
+
lastBrowserConsole,
|
|
39953
|
+
perfStages,
|
|
39954
|
+
hdrDiagnostics
|
|
39955
|
+
});
|
|
39956
|
+
await cleanupRenderResources({
|
|
39957
|
+
fileServer,
|
|
39958
|
+
probeSession,
|
|
39959
|
+
workDir,
|
|
39960
|
+
debug: Boolean(job.config.debug),
|
|
39961
|
+
log: log2,
|
|
39962
|
+
label: "error"
|
|
39963
|
+
});
|
|
39753
39964
|
if (restoreLogger) restoreLogger();
|
|
39754
39965
|
throw error;
|
|
39755
39966
|
} finally {
|
|
39756
|
-
|
|
39967
|
+
memSampler?.stop();
|
|
39757
39968
|
}
|
|
39758
39969
|
}
|
|
39759
|
-
var RenderCancelledError
|
|
39970
|
+
var RenderCancelledError;
|
|
39760
39971
|
var init_renderOrchestrator = __esm({
|
|
39761
39972
|
"../producer/src/services/renderOrchestrator.ts"() {
|
|
39762
39973
|
"use strict";
|
|
39763
39974
|
init_esm10();
|
|
39764
|
-
init_src();
|
|
39765
39975
|
init_src2();
|
|
39766
39976
|
init_fileServer2();
|
|
39767
39977
|
init_logger();
|
|
39768
|
-
init_paths();
|
|
39769
39978
|
init_shared();
|
|
39979
|
+
init_cleanup();
|
|
39980
|
+
init_hdrMode();
|
|
39981
|
+
init_perfSummary();
|
|
39982
|
+
init_captureCost();
|
|
39983
|
+
init_hdrPerf();
|
|
39770
39984
|
init_compileStage();
|
|
39771
39985
|
init_probeStage();
|
|
39772
39986
|
init_extractVideosStage();
|
|
@@ -39776,6 +39990,10 @@ var init_renderOrchestrator = __esm({
|
|
|
39776
39990
|
init_captureHdrStage();
|
|
39777
39991
|
init_encodeStage();
|
|
39778
39992
|
init_assembleStage();
|
|
39993
|
+
init_hdrPerf();
|
|
39994
|
+
init_captureCost();
|
|
39995
|
+
init_shared();
|
|
39996
|
+
init_captureCost();
|
|
39779
39997
|
RenderCancelledError = class extends Error {
|
|
39780
39998
|
reason;
|
|
39781
39999
|
constructor(message = "render_cancelled", reason = "aborted") {
|
|
@@ -39784,23 +40002,6 @@ var init_renderOrchestrator = __esm({
|
|
|
39784
40002
|
this.reason = reason;
|
|
39785
40003
|
}
|
|
39786
40004
|
};
|
|
39787
|
-
materializePathModule = {
|
|
39788
|
-
resolve: resolve19,
|
|
39789
|
-
join: join44,
|
|
39790
|
-
dirname: dirname13,
|
|
39791
|
-
basename: basename3,
|
|
39792
|
-
relative: relative3,
|
|
39793
|
-
isAbsolute: isAbsolute7
|
|
39794
|
-
};
|
|
39795
|
-
materializeFileSystem = {
|
|
39796
|
-
existsSync: existsSync37,
|
|
39797
|
-
mkdirSync: mkdirSync23,
|
|
39798
|
-
symlinkSync,
|
|
39799
|
-
cpSync
|
|
39800
|
-
};
|
|
39801
|
-
CAPTURE_CALIBRATION_TARGET_MS = 600;
|
|
39802
|
-
MAX_MEASURED_CAPTURE_COST_MULTIPLIER = 8;
|
|
39803
|
-
CAPTURE_CALIBRATION_PROTOCOL_TIMEOUT_MS = 3e4;
|
|
39804
40005
|
}
|
|
39805
40006
|
});
|
|
39806
40007
|
|
|
@@ -39829,8 +40030,8 @@ var init_config3 = __esm({
|
|
|
39829
40030
|
});
|
|
39830
40031
|
|
|
39831
40032
|
// ../producer/src/services/hyperframeLint.ts
|
|
39832
|
-
import { existsSync as
|
|
39833
|
-
import { resolve as resolve20, join as
|
|
40033
|
+
import { existsSync as existsSync39, readFileSync as readFileSync27, statSync as statSync13 } from "fs";
|
|
40034
|
+
import { resolve as resolve20, join as join46 } from "path";
|
|
39834
40035
|
function isStringRecord(value) {
|
|
39835
40036
|
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
39836
40037
|
return false;
|
|
@@ -39858,7 +40059,7 @@ function pickEntryFile(files, preferredEntryFile) {
|
|
|
39858
40059
|
}
|
|
39859
40060
|
function readProjectEntryFile(projectDir, preferredEntryFile) {
|
|
39860
40061
|
const absProjectDir = resolve20(projectDir);
|
|
39861
|
-
if (!
|
|
40062
|
+
if (!existsSync39(absProjectDir) || !statSync13(absProjectDir).isDirectory()) {
|
|
39862
40063
|
return { error: `Project directory not found: ${absProjectDir}` };
|
|
39863
40064
|
}
|
|
39864
40065
|
const entryCandidates = [preferredEntryFile, "index.html", "src/index.html"].filter(
|
|
@@ -39869,7 +40070,7 @@ function readProjectEntryFile(projectDir, preferredEntryFile) {
|
|
|
39869
40070
|
if (!absoluteEntryPath.startsWith(absProjectDir)) {
|
|
39870
40071
|
return { error: `Entry file must stay inside project directory: ${entryFile}` };
|
|
39871
40072
|
}
|
|
39872
|
-
if (
|
|
40073
|
+
if (existsSync39(absoluteEntryPath) && statSync13(absoluteEntryPath).isFile()) {
|
|
39873
40074
|
return {
|
|
39874
40075
|
entryFile,
|
|
39875
40076
|
html: readFileSync27(absoluteEntryPath, "utf-8"),
|
|
@@ -39878,7 +40079,7 @@ function readProjectEntryFile(projectDir, preferredEntryFile) {
|
|
|
39878
40079
|
}
|
|
39879
40080
|
}
|
|
39880
40081
|
return {
|
|
39881
|
-
error: `No HTML entry file found in project directory: ${
|
|
40082
|
+
error: `No HTML entry file found in project directory: ${join46(absProjectDir, preferredEntryFile || "index.html")}`
|
|
39882
40083
|
};
|
|
39883
40084
|
}
|
|
39884
40085
|
function prepareHyperframeLintBody(body) {
|
|
@@ -39967,15 +40168,15 @@ var init_semaphore = __esm({
|
|
|
39967
40168
|
|
|
39968
40169
|
// ../producer/src/server.ts
|
|
39969
40170
|
import {
|
|
39970
|
-
existsSync as
|
|
40171
|
+
existsSync as existsSync40,
|
|
39971
40172
|
mkdirSync as mkdirSync24,
|
|
39972
40173
|
statSync as statSync14,
|
|
39973
40174
|
mkdtempSync as mkdtempSync2,
|
|
39974
40175
|
writeFileSync as writeFileSync18,
|
|
39975
|
-
rmSync as
|
|
40176
|
+
rmSync as rmSync10,
|
|
39976
40177
|
createReadStream
|
|
39977
40178
|
} from "fs";
|
|
39978
|
-
import { resolve as resolve21, dirname as dirname14, join as
|
|
40179
|
+
import { resolve as resolve21, dirname as dirname14, join as join47 } from "path";
|
|
39979
40180
|
import { tmpdir as tmpdir3 } from "os";
|
|
39980
40181
|
import { parseArgs as parseArgs2 } from "util";
|
|
39981
40182
|
import crypto2 from "crypto";
|
|
@@ -40000,11 +40201,11 @@ async function prepareRenderBody(body) {
|
|
|
40000
40201
|
const projectDir = typeof body.projectDir === "string" ? body.projectDir : void 0;
|
|
40001
40202
|
if (projectDir) {
|
|
40002
40203
|
const absProjectDir = resolve21(projectDir);
|
|
40003
|
-
if (!
|
|
40204
|
+
if (!existsSync40(absProjectDir) || !statSync14(absProjectDir).isDirectory()) {
|
|
40004
40205
|
return { error: `Project directory not found: ${absProjectDir}` };
|
|
40005
40206
|
}
|
|
40006
40207
|
const entry = options.entryFile || "index.html";
|
|
40007
|
-
if (!
|
|
40208
|
+
if (!existsSync40(resolve21(absProjectDir, entry))) {
|
|
40008
40209
|
return { error: `Entry file "${entry}" not found in project directory: ${absProjectDir}` };
|
|
40009
40210
|
}
|
|
40010
40211
|
return { prepared: { input: { projectDir: absProjectDir, ...options } } };
|
|
@@ -40029,8 +40230,8 @@ async function prepareRenderBody(body) {
|
|
|
40029
40230
|
}
|
|
40030
40231
|
}
|
|
40031
40232
|
const tempRoot = process.env.PRODUCER_TMP_PROJECT_DIR || tmpdir3();
|
|
40032
|
-
const tempProjectDir = mkdtempSync2(
|
|
40033
|
-
writeFileSync18(
|
|
40233
|
+
const tempProjectDir = mkdtempSync2(join47(tempRoot, "producer-project-"));
|
|
40234
|
+
writeFileSync18(join47(tempProjectDir, "index.html"), htmlContent, "utf-8");
|
|
40034
40235
|
return {
|
|
40035
40236
|
prepared: {
|
|
40036
40237
|
input: {
|
|
@@ -40081,7 +40282,7 @@ function createArtifactStore(ttlMs) {
|
|
|
40081
40282
|
function cleanupTempDir(dir, log2) {
|
|
40082
40283
|
if (!dir) return;
|
|
40083
40284
|
try {
|
|
40084
|
-
|
|
40285
|
+
rmSync10(dir, { recursive: true, force: true });
|
|
40085
40286
|
} catch (error) {
|
|
40086
40287
|
log2.warn("Failed to cleanup temp project dir", {
|
|
40087
40288
|
cleanupProjectDir: dir,
|
|
@@ -40153,7 +40354,7 @@ function createRenderHandlers(options = {}) {
|
|
|
40153
40354
|
log2
|
|
40154
40355
|
);
|
|
40155
40356
|
const outputDir = dirname14(absoluteOutputPath);
|
|
40156
|
-
if (!
|
|
40357
|
+
if (!existsSync40(outputDir)) mkdirSync24(outputDir, { recursive: true });
|
|
40157
40358
|
const release2 = await renderSemaphore.acquire();
|
|
40158
40359
|
log2.info("render started", {
|
|
40159
40360
|
requestId,
|
|
@@ -40180,7 +40381,7 @@ function createRenderHandlers(options = {}) {
|
|
|
40180
40381
|
log2.info(`render progress ${pct}%`, { requestId, stage: j3.currentStage, message });
|
|
40181
40382
|
}
|
|
40182
40383
|
});
|
|
40183
|
-
const fileSize =
|
|
40384
|
+
const fileSize = existsSync40(absoluteOutputPath) ? statSync14(absoluteOutputPath).size : 0;
|
|
40184
40385
|
const durationMs = Date.now() - t0;
|
|
40185
40386
|
const outputToken = store.register(absoluteOutputPath);
|
|
40186
40387
|
const outputUrl = `${outputUrlPrefix}/${outputToken}`;
|
|
@@ -40264,7 +40465,7 @@ function createRenderHandlers(options = {}) {
|
|
|
40264
40465
|
log2
|
|
40265
40466
|
);
|
|
40266
40467
|
const outputDir = dirname14(absoluteOutputPath);
|
|
40267
|
-
if (!
|
|
40468
|
+
if (!existsSync40(outputDir)) mkdirSync24(outputDir, { recursive: true });
|
|
40268
40469
|
log2.info("render-stream started", { requestId, projectDir: input.projectDir });
|
|
40269
40470
|
const job = createRenderJob({
|
|
40270
40471
|
fps: input.fps,
|
|
@@ -40309,7 +40510,7 @@ function createRenderHandlers(options = {}) {
|
|
|
40309
40510
|
},
|
|
40310
40511
|
abortController.signal
|
|
40311
40512
|
);
|
|
40312
|
-
const fileSize =
|
|
40513
|
+
const fileSize = existsSync40(absoluteOutputPath) ? statSync14(absoluteOutputPath).size : 0;
|
|
40313
40514
|
const outputToken = store.register(absoluteOutputPath);
|
|
40314
40515
|
const outputUrl = `${outputUrlPrefix}/${outputToken}`;
|
|
40315
40516
|
log2.info("render-stream completed", { requestId, fileSize, perf: job.perfSummary ?? null });
|
|
@@ -40368,7 +40569,7 @@ function createRenderHandlers(options = {}) {
|
|
|
40368
40569
|
if (!artifact) {
|
|
40369
40570
|
return c3.json({ success: false, error: "Output artifact not found or expired" }, 404);
|
|
40370
40571
|
}
|
|
40371
|
-
if (!
|
|
40572
|
+
if (!existsSync40(artifact.path)) {
|
|
40372
40573
|
store.delete(token);
|
|
40373
40574
|
return c3.json({ success: false, error: "Output artifact file missing" }, 404);
|
|
40374
40575
|
}
|
|
@@ -40507,20 +40708,20 @@ __export(studioServer_exports, {
|
|
|
40507
40708
|
});
|
|
40508
40709
|
import { Hono as Hono5 } from "hono";
|
|
40509
40710
|
import { streamSSE as streamSSE3 } from "hono/streaming";
|
|
40510
|
-
import { existsSync as
|
|
40511
|
-
import { resolve as resolve22, join as
|
|
40711
|
+
import { existsSync as existsSync41, readFileSync as readFileSync28, writeFileSync as writeFileSync19, statSync as statSync15 } from "fs";
|
|
40712
|
+
import { resolve as resolve22, join as join48, basename as basename4 } from "path";
|
|
40512
40713
|
function resolveDistDir() {
|
|
40513
40714
|
return resolveStudioBundle().dir;
|
|
40514
40715
|
}
|
|
40515
40716
|
function resolveStudioBundle() {
|
|
40516
40717
|
const builtPath = resolve22(__dirname, "studio");
|
|
40517
40718
|
const builtIndex = resolve22(builtPath, "index.html");
|
|
40518
|
-
if (
|
|
40719
|
+
if (existsSync41(builtIndex)) {
|
|
40519
40720
|
return { dir: builtPath, indexPath: builtIndex, available: true, checkedPaths: [builtIndex] };
|
|
40520
40721
|
}
|
|
40521
40722
|
const devPath = resolve22(__dirname, "..", "..", "..", "studio", "dist");
|
|
40522
40723
|
const devIndex = resolve22(devPath, "index.html");
|
|
40523
|
-
if (
|
|
40724
|
+
if (existsSync41(devIndex)) {
|
|
40524
40725
|
return {
|
|
40525
40726
|
dir: devPath,
|
|
40526
40727
|
indexPath: devIndex,
|
|
@@ -40537,9 +40738,9 @@ function resolveStudioBundle() {
|
|
|
40537
40738
|
}
|
|
40538
40739
|
function resolveRuntimePath() {
|
|
40539
40740
|
const builtPath = resolve22(__dirname, "hyperframe-runtime.js");
|
|
40540
|
-
if (
|
|
40741
|
+
if (existsSync41(builtPath)) return builtPath;
|
|
40541
40742
|
const iifePath = resolve22(__dirname, "hyperframe.runtime.iife.js");
|
|
40542
|
-
if (
|
|
40743
|
+
if (existsSync41(iifePath)) return iifePath;
|
|
40543
40744
|
const devPath = resolve22(
|
|
40544
40745
|
__dirname,
|
|
40545
40746
|
"..",
|
|
@@ -40549,12 +40750,12 @@ function resolveRuntimePath() {
|
|
|
40549
40750
|
"dist",
|
|
40550
40751
|
"hyperframe.runtime.iife.js"
|
|
40551
40752
|
);
|
|
40552
|
-
if (
|
|
40753
|
+
if (existsSync41(devPath)) return devPath;
|
|
40553
40754
|
return builtPath;
|
|
40554
40755
|
}
|
|
40555
40756
|
function readStudioManualEditManifestContent(projectDir) {
|
|
40556
|
-
const manifestPath =
|
|
40557
|
-
if (!
|
|
40757
|
+
const manifestPath = join48(projectDir, STUDIO_MANUAL_EDITS_PATH2);
|
|
40758
|
+
if (!existsSync41(manifestPath)) return "";
|
|
40558
40759
|
try {
|
|
40559
40760
|
return readFileSync28(manifestPath, "utf-8");
|
|
40560
40761
|
} catch {
|
|
@@ -40642,7 +40843,7 @@ function createStudioServer(options) {
|
|
|
40642
40843
|
return lintHyperframeHtml2(html, opts);
|
|
40643
40844
|
},
|
|
40644
40845
|
runtimeUrl: "/api/runtime.js",
|
|
40645
|
-
rendersDir: () =>
|
|
40846
|
+
rendersDir: () => join48(projectDir, "renders"),
|
|
40646
40847
|
startRender(opts) {
|
|
40647
40848
|
const state = {
|
|
40648
40849
|
id: opts.jobId,
|
|
@@ -40755,7 +40956,7 @@ function createStudioServer(options) {
|
|
|
40755
40956
|
});
|
|
40756
40957
|
app.get("/api/runtime.js", (c3) => {
|
|
40757
40958
|
const serve4 = async () => {
|
|
40758
|
-
const runtimeSource = await loadRuntimeSource() ?? (
|
|
40959
|
+
const runtimeSource = await loadRuntimeSource() ?? (existsSync41(runtimePath) ? readFileSync28(runtimePath, "utf-8") : null);
|
|
40759
40960
|
if (!runtimeSource) return c3.text("runtime not available", 404);
|
|
40760
40961
|
return c3.body(runtimeSource, 200, {
|
|
40761
40962
|
"Content-Type": "text/javascript",
|
|
@@ -40791,7 +40992,7 @@ function createStudioServer(options) {
|
|
|
40791
40992
|
});
|
|
40792
40993
|
const serveStudioStaticFile = (c3) => {
|
|
40793
40994
|
const filePath = resolve22(studioDir, c3.req.path.slice(1));
|
|
40794
|
-
if (!
|
|
40995
|
+
if (!existsSync41(filePath) || !statSync15(filePath).isFile()) return c3.text("not found", 404);
|
|
40795
40996
|
const content = readFileSync28(filePath);
|
|
40796
40997
|
return new Response(content, {
|
|
40797
40998
|
headers: { "Content-Type": getMimeType(filePath), "Cache-Control": "no-store" }
|
|
@@ -40801,7 +41002,7 @@ function createStudioServer(options) {
|
|
|
40801
41002
|
app.get("/icons/*", serveStudioStaticFile);
|
|
40802
41003
|
app.get("*", (c3) => {
|
|
40803
41004
|
const indexPath = resolve22(studioDir, "index.html");
|
|
40804
|
-
if (!
|
|
41005
|
+
if (!existsSync41(indexPath)) {
|
|
40805
41006
|
return c3.html(
|
|
40806
41007
|
`<!doctype html>
|
|
40807
41008
|
<html>
|
|
@@ -40883,20 +41084,20 @@ __export(preview_exports, {
|
|
|
40883
41084
|
examples: () => examples
|
|
40884
41085
|
});
|
|
40885
41086
|
import { spawn as spawn9 } from "child_process";
|
|
40886
|
-
import { existsSync as
|
|
40887
|
-
import { resolve as resolve23, dirname as dirname15, basename as basename5, join as
|
|
41087
|
+
import { existsSync as existsSync42, lstatSync as lstatSync2, symlinkSync as symlinkSync2, unlinkSync as unlinkSync5, readlinkSync, mkdirSync as mkdirSync25 } from "fs";
|
|
41088
|
+
import { resolve as resolve23, dirname as dirname15, basename as basename5, join as join49 } from "path";
|
|
40888
41089
|
import { fileURLToPath as fileURLToPath4 } from "url";
|
|
40889
41090
|
import { createRequire } from "module";
|
|
40890
41091
|
async function runDevMode(dir, projectName) {
|
|
40891
41092
|
const thisFile = fileURLToPath4(import.meta.url);
|
|
40892
41093
|
const repoRoot = resolve23(dirname15(thisFile), "..", "..", "..", "..");
|
|
40893
|
-
const projectsDir =
|
|
41094
|
+
const projectsDir = join49(repoRoot, "packages", "studio", "data", "projects");
|
|
40894
41095
|
const pName = projectName ?? basename5(dir);
|
|
40895
|
-
const symlinkPath =
|
|
41096
|
+
const symlinkPath = join49(projectsDir, pName);
|
|
40896
41097
|
mkdirSync25(projectsDir, { recursive: true });
|
|
40897
41098
|
let createdSymlink = false;
|
|
40898
41099
|
if (dir !== symlinkPath) {
|
|
40899
|
-
if (
|
|
41100
|
+
if (existsSync42(symlinkPath)) {
|
|
40900
41101
|
try {
|
|
40901
41102
|
const stat3 = lstatSync2(symlinkPath);
|
|
40902
41103
|
if (stat3.isSymbolicLink()) {
|
|
@@ -40908,7 +41109,7 @@ async function runDevMode(dir, projectName) {
|
|
|
40908
41109
|
} catch {
|
|
40909
41110
|
}
|
|
40910
41111
|
}
|
|
40911
|
-
if (!
|
|
41112
|
+
if (!existsSync42(symlinkPath)) {
|
|
40912
41113
|
symlinkSync2(dir, symlinkPath, "dir");
|
|
40913
41114
|
createdSymlink = true;
|
|
40914
41115
|
}
|
|
@@ -40916,7 +41117,7 @@ async function runDevMode(dir, projectName) {
|
|
|
40916
41117
|
ge(c2.bold("hyperframes preview"));
|
|
40917
41118
|
const s2 = ft();
|
|
40918
41119
|
s2.start("Starting studio...");
|
|
40919
|
-
const studioPkgDir =
|
|
41120
|
+
const studioPkgDir = join49(repoRoot, "packages", "studio");
|
|
40920
41121
|
const child = spawn9("bun", ["run", "dev"], {
|
|
40921
41122
|
cwd: studioPkgDir,
|
|
40922
41123
|
stdio: ["ignore", "pipe", "pipe"]
|
|
@@ -40950,7 +41151,7 @@ async function runDevMode(dir, projectName) {
|
|
|
40950
41151
|
if (createdSymlink) {
|
|
40951
41152
|
process.on("exit", () => {
|
|
40952
41153
|
try {
|
|
40953
|
-
if (
|
|
41154
|
+
if (existsSync42(symlinkPath)) unlinkSync5(symlinkPath);
|
|
40954
41155
|
} catch {
|
|
40955
41156
|
}
|
|
40956
41157
|
});
|
|
@@ -40961,7 +41162,7 @@ async function runDevMode(dir, projectName) {
|
|
|
40961
41162
|
}
|
|
40962
41163
|
function hasLocalStudio(dir) {
|
|
40963
41164
|
try {
|
|
40964
|
-
const req = createRequire(
|
|
41165
|
+
const req = createRequire(join49(dir, "package.json"));
|
|
40965
41166
|
req.resolve("@hyperframes/studio/package.json");
|
|
40966
41167
|
return true;
|
|
40967
41168
|
} catch {
|
|
@@ -40969,20 +41170,20 @@ function hasLocalStudio(dir) {
|
|
|
40969
41170
|
}
|
|
40970
41171
|
}
|
|
40971
41172
|
async function runLocalStudioMode(dir, projectName) {
|
|
40972
|
-
const req = createRequire(
|
|
41173
|
+
const req = createRequire(join49(dir, "package.json"));
|
|
40973
41174
|
const studioPkgPath = dirname15(req.resolve("@hyperframes/studio/package.json"));
|
|
40974
41175
|
const pName = projectName ?? basename5(dir);
|
|
40975
|
-
const projectsDir =
|
|
40976
|
-
const symlinkPath =
|
|
41176
|
+
const projectsDir = join49(studioPkgPath, "data", "projects");
|
|
41177
|
+
const symlinkPath = join49(projectsDir, pName);
|
|
40977
41178
|
mkdirSync25(projectsDir, { recursive: true });
|
|
40978
41179
|
let createdSymlink = false;
|
|
40979
41180
|
if (dir !== symlinkPath) {
|
|
40980
|
-
if (
|
|
41181
|
+
if (existsSync42(symlinkPath) && lstatSync2(symlinkPath).isSymbolicLink()) {
|
|
40981
41182
|
if (resolve23(readlinkSync(symlinkPath)) !== resolve23(dir)) {
|
|
40982
41183
|
unlinkSync5(symlinkPath);
|
|
40983
41184
|
}
|
|
40984
41185
|
}
|
|
40985
|
-
if (!
|
|
41186
|
+
if (!existsSync42(symlinkPath)) {
|
|
40986
41187
|
symlinkSync2(dir, symlinkPath, "dir");
|
|
40987
41188
|
createdSymlink = true;
|
|
40988
41189
|
}
|
|
@@ -41021,7 +41222,7 @@ async function runLocalStudioMode(dir, projectName) {
|
|
|
41021
41222
|
if (createdSymlink) {
|
|
41022
41223
|
process.on("exit", () => {
|
|
41023
41224
|
try {
|
|
41024
|
-
if (
|
|
41225
|
+
if (existsSync42(symlinkPath)) unlinkSync5(symlinkPath);
|
|
41025
41226
|
} catch {
|
|
41026
41227
|
}
|
|
41027
41228
|
});
|
|
@@ -41197,8 +41398,8 @@ var init_preview2 = __esm({
|
|
|
41197
41398
|
const dir = resolve23(rawArg ?? ".");
|
|
41198
41399
|
const isImplicitCwd = !rawArg || rawArg === "." || rawArg === "./";
|
|
41199
41400
|
const projectName = isImplicitCwd ? basename5(process.env.PWD ?? dir) : basename5(dir);
|
|
41200
|
-
const indexPath =
|
|
41201
|
-
if (
|
|
41401
|
+
const indexPath = join49(dir, "index.html");
|
|
41402
|
+
if (existsSync42(indexPath)) {
|
|
41202
41403
|
const project = { dir, name: projectName, indexPath };
|
|
41203
41404
|
const lintResult = lintProject(project);
|
|
41204
41405
|
if (lintResult.totalErrors > 0 || lintResult.totalWarnings > 0) {
|
|
@@ -41229,7 +41430,7 @@ __export(init_exports, {
|
|
|
41229
41430
|
injectTailwindBrowserScript: () => injectTailwindBrowserScript
|
|
41230
41431
|
});
|
|
41231
41432
|
import {
|
|
41232
|
-
existsSync as
|
|
41433
|
+
existsSync as existsSync43,
|
|
41233
41434
|
mkdirSync as mkdirSync26,
|
|
41234
41435
|
copyFileSync as copyFileSync5,
|
|
41235
41436
|
cpSync as cpSync2,
|
|
@@ -41237,7 +41438,7 @@ import {
|
|
|
41237
41438
|
readFileSync as readFileSync29,
|
|
41238
41439
|
readdirSync as readdirSync16
|
|
41239
41440
|
} from "fs";
|
|
41240
|
-
import { resolve as resolve24, basename as basename6, join as
|
|
41441
|
+
import { resolve as resolve24, basename as basename6, join as join50, dirname as dirname16 } from "path";
|
|
41241
41442
|
import { fileURLToPath as fileURLToPath5 } from "url";
|
|
41242
41443
|
import { execFileSync as execFileSync5, spawn as spawn10 } from "child_process";
|
|
41243
41444
|
function probeVideo(filePath) {
|
|
@@ -41309,7 +41510,7 @@ function resolveAssetDir(devSegments, builtSegments) {
|
|
|
41309
41510
|
const base = dirname16(fileURLToPath5(import.meta.url));
|
|
41310
41511
|
const devPath = resolve24(base, ...devSegments);
|
|
41311
41512
|
const builtPath = resolve24(base, ...builtSegments);
|
|
41312
|
-
return
|
|
41513
|
+
return existsSync43(devPath) ? devPath : builtPath;
|
|
41313
41514
|
}
|
|
41314
41515
|
function getStaticTemplateDir(templateId) {
|
|
41315
41516
|
return resolveAssetDir(["..", "templates", templateId], ["templates", templateId]);
|
|
@@ -41337,7 +41538,7 @@ function buildPackageScripts() {
|
|
|
41337
41538
|
}
|
|
41338
41539
|
function writeDefaultPackageJson(destDir, projectName) {
|
|
41339
41540
|
const packageJsonPath = resolve24(destDir, "package.json");
|
|
41340
|
-
if (
|
|
41541
|
+
if (existsSync43(packageJsonPath)) return;
|
|
41341
41542
|
writeFileSync20(
|
|
41342
41543
|
packageJsonPath,
|
|
41343
41544
|
`${JSON.stringify(
|
|
@@ -41359,7 +41560,7 @@ function listHtmlFiles(dir) {
|
|
|
41359
41560
|
const ignoredDirs = /* @__PURE__ */ new Set([".git", "dist", "node_modules"]);
|
|
41360
41561
|
function walk(currentDir) {
|
|
41361
41562
|
for (const entry of readdirSync16(currentDir, { withFileTypes: true })) {
|
|
41362
|
-
const entryPath =
|
|
41563
|
+
const entryPath = join50(currentDir, entry.name);
|
|
41363
41564
|
if (entry.isDirectory()) {
|
|
41364
41565
|
if (!ignoredDirs.has(entry.name)) walk(entryPath);
|
|
41365
41566
|
continue;
|
|
@@ -41404,7 +41605,7 @@ function writeTailwindSupport(destDir) {
|
|
|
41404
41605
|
}
|
|
41405
41606
|
}
|
|
41406
41607
|
function patchVideoSrc(dir, videoFilename, durationSeconds) {
|
|
41407
|
-
const htmlFiles = readdirSync16(dir, { withFileTypes: true, recursive: true }).filter((e3) => e3.isFile() && e3.name.endsWith(".html")).map((e3) =>
|
|
41608
|
+
const htmlFiles = readdirSync16(dir, { withFileTypes: true, recursive: true }).filter((e3) => e3.isFile() && e3.name.endsWith(".html")).map((e3) => join50(e3.parentPath ?? e3.path, e3.name));
|
|
41408
41609
|
for (const file of htmlFiles) {
|
|
41409
41610
|
let content = readFileSync29(file, "utf-8");
|
|
41410
41611
|
if (videoFilename) {
|
|
@@ -41559,7 +41760,7 @@ function applyResolutionPreset(destDir, resolution) {
|
|
|
41559
41760
|
async function scaffoldProject(destDir, name, templateId, localVideoName, durationSeconds, tailwind = false, resolution) {
|
|
41560
41761
|
mkdirSync26(destDir, { recursive: true });
|
|
41561
41762
|
const templateDir = getStaticTemplateDir(templateId);
|
|
41562
|
-
if (
|
|
41763
|
+
if (existsSync43(join50(templateDir, "index.html"))) {
|
|
41563
41764
|
cpSync2(templateDir, destDir, { recursive: true });
|
|
41564
41765
|
} else {
|
|
41565
41766
|
await fetchRemoteTemplate(templateId, destDir);
|
|
@@ -41580,15 +41781,15 @@ async function scaffoldProject(destDir, name, templateId, localVideoName, durati
|
|
|
41580
41781
|
),
|
|
41581
41782
|
"utf-8"
|
|
41582
41783
|
);
|
|
41583
|
-
if (!
|
|
41784
|
+
if (!existsSync43(resolve24(destDir, "hyperframes.json"))) {
|
|
41584
41785
|
const { writeProjectConfig: writeProjectConfig2, DEFAULT_PROJECT_CONFIG: DEFAULT_PROJECT_CONFIG2 } = await Promise.resolve().then(() => (init_projectConfig(), projectConfig_exports));
|
|
41585
41786
|
writeProjectConfig2(destDir, DEFAULT_PROJECT_CONFIG2);
|
|
41586
41787
|
}
|
|
41587
41788
|
writeDefaultPackageJson(destDir, name);
|
|
41588
41789
|
const sharedDir = getSharedTemplateDir();
|
|
41589
|
-
if (
|
|
41790
|
+
if (existsSync43(sharedDir)) {
|
|
41590
41791
|
for (const entry of readdirSync16(sharedDir, { withFileTypes: true })) {
|
|
41591
|
-
const src =
|
|
41792
|
+
const src = join50(sharedDir, entry.name);
|
|
41592
41793
|
const dest = resolve24(destDir, entry.name);
|
|
41593
41794
|
if (entry.isFile() || entry.isSymbolicLink()) {
|
|
41594
41795
|
copyFileSync5(src, dest);
|
|
@@ -41746,7 +41947,7 @@ var init_init = __esm({
|
|
|
41746
41947
|
const templateId2 = exampleFlag ?? "blank";
|
|
41747
41948
|
const name2 = args.name ?? "my-video";
|
|
41748
41949
|
const destDir2 = resolve24(name2);
|
|
41749
|
-
if (
|
|
41950
|
+
if (existsSync43(destDir2) && readdirSync16(destDir2).length > 0) {
|
|
41750
41951
|
console.error(c2.error(`Directory already exists and is not empty: ${name2}`));
|
|
41751
41952
|
process.exit(1);
|
|
41752
41953
|
}
|
|
@@ -41760,7 +41961,7 @@ var init_init = __esm({
|
|
|
41760
41961
|
}
|
|
41761
41962
|
if (videoFlag) {
|
|
41762
41963
|
const videoPath = resolve24(videoFlag);
|
|
41763
|
-
if (!
|
|
41964
|
+
if (!existsSync43(videoPath)) {
|
|
41764
41965
|
console.error(c2.error(`Video file not found: ${videoFlag}`));
|
|
41765
41966
|
process.exit(1);
|
|
41766
41967
|
}
|
|
@@ -41774,7 +41975,7 @@ var init_init = __esm({
|
|
|
41774
41975
|
}
|
|
41775
41976
|
if (audioFlag) {
|
|
41776
41977
|
const audioPath = resolve24(audioFlag);
|
|
41777
|
-
if (!
|
|
41978
|
+
if (!existsSync43(audioPath)) {
|
|
41778
41979
|
console.error(c2.error(`Audio file not found: ${audioFlag}`));
|
|
41779
41980
|
process.exit(1);
|
|
41780
41981
|
}
|
|
@@ -41822,7 +42023,7 @@ var init_init = __esm({
|
|
|
41822
42023
|
}
|
|
41823
42024
|
trackInitTemplate(templateId2, { tailwind });
|
|
41824
42025
|
const transcriptFile2 = resolve24(destDir2, "transcript.json");
|
|
41825
|
-
if (
|
|
42026
|
+
if (existsSync43(transcriptFile2)) {
|
|
41826
42027
|
await patchTranscript(destDir2, transcriptFile2);
|
|
41827
42028
|
}
|
|
41828
42029
|
console.log(c2.success(`Created ${c2.accent(name2 + "/")}`));
|
|
@@ -41877,7 +42078,7 @@ var init_init = __esm({
|
|
|
41877
42078
|
name = nameResult;
|
|
41878
42079
|
}
|
|
41879
42080
|
const destDir = resolve24(name);
|
|
41880
|
-
if (
|
|
42081
|
+
if (existsSync43(destDir) && readdirSync16(destDir).length > 0) {
|
|
41881
42082
|
const overwrite = await ue({
|
|
41882
42083
|
message: `Directory ${c2.accent(name)} already exists and is not empty. Overwrite?`,
|
|
41883
42084
|
initialValue: false
|
|
@@ -41892,7 +42093,7 @@ var init_init = __esm({
|
|
|
41892
42093
|
let videoDuration;
|
|
41893
42094
|
if (videoFlag) {
|
|
41894
42095
|
const videoPath = resolve24(videoFlag);
|
|
41895
|
-
if (!
|
|
42096
|
+
if (!existsSync43(videoPath)) {
|
|
41896
42097
|
R2.error(`File not found: ${videoFlag}`);
|
|
41897
42098
|
me("Setup cancelled.");
|
|
41898
42099
|
process.exit(1);
|
|
@@ -41904,7 +42105,7 @@ var init_init = __esm({
|
|
|
41904
42105
|
videoDuration = result.meta.durationSeconds;
|
|
41905
42106
|
} else if (audioFlag) {
|
|
41906
42107
|
const audioPath = resolve24(audioFlag);
|
|
41907
|
-
if (!
|
|
42108
|
+
if (!existsSync43(audioPath)) {
|
|
41908
42109
|
R2.error(`File not found: ${audioFlag}`);
|
|
41909
42110
|
me("Setup cancelled.");
|
|
41910
42111
|
process.exit(1);
|
|
@@ -42005,7 +42206,7 @@ ${c2.dim("Use --example blank for offline use.")}`
|
|
|
42005
42206
|
}
|
|
42006
42207
|
trackInitTemplate(templateId, { tailwind });
|
|
42007
42208
|
const transcriptFile = resolve24(destDir, "transcript.json");
|
|
42008
|
-
if (
|
|
42209
|
+
if (existsSync43(transcriptFile)) {
|
|
42009
42210
|
await patchTranscript(destDir, transcriptFile);
|
|
42010
42211
|
}
|
|
42011
42212
|
const files = readdirSync16(destDir);
|
|
@@ -42036,7 +42237,7 @@ ${c2.dim("Use --example blank for offline use.")}`
|
|
|
42036
42237
|
});
|
|
42037
42238
|
|
|
42038
42239
|
// src/utils/clipboard.ts
|
|
42039
|
-
import { spawnSync as
|
|
42240
|
+
import { spawnSync as spawnSync3 } from "child_process";
|
|
42040
42241
|
import { platform as platform4 } from "os";
|
|
42041
42242
|
function detectProvider() {
|
|
42042
42243
|
const os = platform4();
|
|
@@ -42054,7 +42255,7 @@ function detectProvider() {
|
|
|
42054
42255
|
];
|
|
42055
42256
|
const cmd = process.platform === "win32" ? "where" : "which";
|
|
42056
42257
|
for (const p2 of candidates) {
|
|
42057
|
-
const result =
|
|
42258
|
+
const result = spawnSync3(cmd, [p2.cmd], { stdio: "ignore" });
|
|
42058
42259
|
if (result.status === 0) return p2;
|
|
42059
42260
|
}
|
|
42060
42261
|
return void 0;
|
|
@@ -42064,7 +42265,7 @@ function copyToClipboard(text) {
|
|
|
42064
42265
|
const provider = cachedProvider;
|
|
42065
42266
|
if (!provider) return false;
|
|
42066
42267
|
try {
|
|
42067
|
-
const res =
|
|
42268
|
+
const res = spawnSync3(provider.cmd, provider.args, {
|
|
42068
42269
|
input: text,
|
|
42069
42270
|
encoding: "utf-8"
|
|
42070
42271
|
});
|
|
@@ -42091,7 +42292,7 @@ __export(add_exports, {
|
|
|
42091
42292
|
remapTarget: () => remapTarget,
|
|
42092
42293
|
runAdd: () => runAdd
|
|
42093
42294
|
});
|
|
42094
|
-
import { existsSync as
|
|
42295
|
+
import { existsSync as existsSync44 } from "fs";
|
|
42095
42296
|
import { resolve as resolve25, relative as relative4 } from "path";
|
|
42096
42297
|
function remapTarget(item, originalTarget, paths) {
|
|
42097
42298
|
if (item.type === "hyperframes:block") {
|
|
@@ -42117,8 +42318,8 @@ function buildSnippet(item, relativeTarget) {
|
|
|
42117
42318
|
async function runAdd(opts) {
|
|
42118
42319
|
const projectDir = resolve25(opts.projectDir);
|
|
42119
42320
|
let config = loadProjectConfig(projectDir);
|
|
42120
|
-
const hasConfig =
|
|
42121
|
-
if (!hasConfig &&
|
|
42321
|
+
const hasConfig = existsSync44(projectConfigPath(projectDir));
|
|
42322
|
+
if (!hasConfig && existsSync44(resolve25(projectDir, "index.html"))) {
|
|
42122
42323
|
writeProjectConfig(projectDir, DEFAULT_PROJECT_CONFIG);
|
|
42123
42324
|
config = DEFAULT_PROJECT_CONFIG;
|
|
42124
42325
|
}
|
|
@@ -42220,10 +42421,10 @@ var init_add = __esm({
|
|
|
42220
42421
|
const projectDir = resolve25(args.dir ?? process.cwd());
|
|
42221
42422
|
const json = args.json === true;
|
|
42222
42423
|
const skipClipboard = args["no-clipboard"] === true;
|
|
42223
|
-
const hasConfigBefore =
|
|
42424
|
+
const hasConfigBefore = existsSync44(projectConfigPath(projectDir));
|
|
42224
42425
|
try {
|
|
42225
42426
|
const result = await runAdd({ name: args.name, projectDir, skipClipboard });
|
|
42226
|
-
const wroteConfig = !hasConfigBefore &&
|
|
42427
|
+
const wroteConfig = !hasConfigBefore && existsSync44(projectConfigPath(projectDir));
|
|
42227
42428
|
if (json) {
|
|
42228
42429
|
console.log(JSON.stringify(result));
|
|
42229
42430
|
return;
|
|
@@ -42253,7 +42454,7 @@ var init_add = __esm({
|
|
|
42253
42454
|
process.exit(1);
|
|
42254
42455
|
}
|
|
42255
42456
|
let config = loadProjectConfig(projectDir);
|
|
42256
|
-
if (!
|
|
42457
|
+
if (!existsSync44(projectConfigPath(projectDir)) && existsSync44(resolve25(projectDir, "index.html"))) {
|
|
42257
42458
|
writeProjectConfig(projectDir, DEFAULT_PROJECT_CONFIG);
|
|
42258
42459
|
config = DEFAULT_PROJECT_CONFIG;
|
|
42259
42460
|
}
|
|
@@ -42473,17 +42674,17 @@ var init_format = __esm({
|
|
|
42473
42674
|
});
|
|
42474
42675
|
|
|
42475
42676
|
// src/utils/project.ts
|
|
42476
|
-
import { existsSync as
|
|
42677
|
+
import { existsSync as existsSync45, statSync as statSync16 } from "fs";
|
|
42477
42678
|
import { resolve as resolve27, basename as basename7 } from "path";
|
|
42478
42679
|
function resolveProject(dirArg) {
|
|
42479
42680
|
const dir = resolve27(dirArg ?? ".");
|
|
42480
42681
|
const name = basename7(dir);
|
|
42481
42682
|
const indexPath = resolve27(dir, "index.html");
|
|
42482
|
-
if (!
|
|
42683
|
+
if (!existsSync45(dir) || !statSync16(dir).isDirectory()) {
|
|
42483
42684
|
errorBox("Not a directory: " + dir);
|
|
42484
42685
|
process.exit(1);
|
|
42485
42686
|
}
|
|
42486
|
-
if (!
|
|
42687
|
+
if (!existsSync45(indexPath)) {
|
|
42487
42688
|
errorBox(
|
|
42488
42689
|
"No composition found in " + dir,
|
|
42489
42690
|
"No index.html file found.",
|
|
@@ -42506,7 +42707,7 @@ __export(play_exports, {
|
|
|
42506
42707
|
default: () => play_default,
|
|
42507
42708
|
examples: () => examples5
|
|
42508
42709
|
});
|
|
42509
|
-
import { existsSync as
|
|
42710
|
+
import { existsSync as existsSync46, readFileSync as readFileSync30 } from "fs";
|
|
42510
42711
|
import { resolve as resolve28, dirname as dirname17 } from "path";
|
|
42511
42712
|
function commandDir() {
|
|
42512
42713
|
return dirname17(new URL(import.meta.url).pathname);
|
|
@@ -42521,7 +42722,7 @@ function resolveRuntimePath2() {
|
|
|
42521
42722
|
resolve28(d2, "..", "..", "..", "core", "dist", "hyperframe.runtime.iife.js")
|
|
42522
42723
|
];
|
|
42523
42724
|
for (const p2 of candidates) {
|
|
42524
|
-
if (
|
|
42725
|
+
if (existsSync46(p2)) return p2;
|
|
42525
42726
|
}
|
|
42526
42727
|
return null;
|
|
42527
42728
|
}
|
|
@@ -42535,7 +42736,7 @@ function resolvePlayerPath() {
|
|
|
42535
42736
|
resolve28(d2, "..", "hyperframes-player.global.js")
|
|
42536
42737
|
];
|
|
42537
42738
|
for (const p2 of candidates) {
|
|
42538
|
-
if (
|
|
42739
|
+
if (existsSync46(p2)) return p2;
|
|
42539
42740
|
}
|
|
42540
42741
|
return null;
|
|
42541
42742
|
}
|
|
@@ -42639,7 +42840,7 @@ var init_play = __esm({
|
|
|
42639
42840
|
const reqPath = ctx.req.path.replace("/composition/", "");
|
|
42640
42841
|
const filePath = resolve28(project.dir, reqPath);
|
|
42641
42842
|
if (!filePath.startsWith(project.dir)) return ctx.text("Forbidden", 403);
|
|
42642
|
-
if (!
|
|
42843
|
+
if (!existsSync46(filePath)) return ctx.text("Not found", 404);
|
|
42643
42844
|
const content = readFileSync30(filePath, "utf-8");
|
|
42644
42845
|
if (filePath.endsWith(".html")) {
|
|
42645
42846
|
const injected = injectRuntime(content);
|
|
@@ -42715,7 +42916,7 @@ var init_play = __esm({
|
|
|
42715
42916
|
});
|
|
42716
42917
|
|
|
42717
42918
|
// src/utils/publishProject.ts
|
|
42718
|
-
import { basename as basename8, join as
|
|
42919
|
+
import { basename as basename8, join as join51, relative as relative5 } from "path";
|
|
42719
42920
|
import { readdirSync as readdirSync17, readFileSync as readFileSync31, statSync as statSync17 } from "fs";
|
|
42720
42921
|
import AdmZip from "adm-zip";
|
|
42721
42922
|
function isRecord2(value) {
|
|
@@ -42816,7 +43017,7 @@ function shouldIgnoreSegment(segment) {
|
|
|
42816
43017
|
function collectProjectFiles(rootDir, currentDir, paths) {
|
|
42817
43018
|
for (const entry of readdirSync17(currentDir, { withFileTypes: true })) {
|
|
42818
43019
|
if (shouldIgnoreSegment(entry.name)) continue;
|
|
42819
|
-
const absolutePath =
|
|
43020
|
+
const absolutePath = join51(currentDir, entry.name);
|
|
42820
43021
|
const relativePath = relative5(rootDir, absolutePath).replaceAll("\\", "/");
|
|
42821
43022
|
if (!relativePath) continue;
|
|
42822
43023
|
if (entry.isDirectory()) {
|
|
@@ -42835,7 +43036,7 @@ function createPublishArchive(projectDir) {
|
|
|
42835
43036
|
}
|
|
42836
43037
|
const archive = new AdmZip();
|
|
42837
43038
|
for (const filePath of filePaths) {
|
|
42838
|
-
archive.addFile(filePath, readFileSync31(
|
|
43039
|
+
archive.addFile(filePath, readFileSync31(join51(projectDir, filePath)));
|
|
42839
43040
|
}
|
|
42840
43041
|
return {
|
|
42841
43042
|
buffer: archive.toBuffer(),
|
|
@@ -42956,8 +43157,8 @@ __export(publish_exports, {
|
|
|
42956
43157
|
examples: () => examples6
|
|
42957
43158
|
});
|
|
42958
43159
|
import { basename as basename9, resolve as resolve29 } from "path";
|
|
42959
|
-
import { existsSync as
|
|
42960
|
-
import { join as
|
|
43160
|
+
import { existsSync as existsSync47 } from "fs";
|
|
43161
|
+
import { join as join52 } from "path";
|
|
42961
43162
|
var examples6, publish_default;
|
|
42962
43163
|
var init_publish = __esm({
|
|
42963
43164
|
"src/commands/publish.ts"() {
|
|
@@ -42992,8 +43193,8 @@ var init_publish = __esm({
|
|
|
42992
43193
|
const dir = resolve29(rawArg ?? ".");
|
|
42993
43194
|
const isImplicitCwd = !rawArg || rawArg === "." || rawArg === "./";
|
|
42994
43195
|
const projectName = isImplicitCwd ? basename9(process.env["PWD"] ?? dir) : basename9(dir);
|
|
42995
|
-
const indexPath =
|
|
42996
|
-
if (
|
|
43196
|
+
const indexPath = join52(dir, "index.html");
|
|
43197
|
+
if (existsSync47(indexPath)) {
|
|
42997
43198
|
const lintResult = lintProject({ dir, name: projectName, indexPath });
|
|
42998
43199
|
if (lintResult.totalErrors > 0 || lintResult.totalWarnings > 0) {
|
|
42999
43200
|
console.log();
|
|
@@ -43187,9 +43388,9 @@ __export(render_exports, {
|
|
|
43187
43388
|
resolveVariablesArg: () => resolveVariablesArg,
|
|
43188
43389
|
validateVariablesAgainstProject: () => validateVariablesAgainstProject
|
|
43189
43390
|
});
|
|
43190
|
-
import { mkdirSync as mkdirSync27, readdirSync as readdirSync18, readFileSync as readFileSync32, statSync as statSync18, writeFileSync as writeFileSync21, rmSync as
|
|
43391
|
+
import { mkdirSync as mkdirSync27, readdirSync as readdirSync18, readFileSync as readFileSync32, statSync as statSync18, writeFileSync as writeFileSync21, rmSync as rmSync11 } from "fs";
|
|
43191
43392
|
import { cpus as cpus3, freemem as freemem3, tmpdir as tmpdir4 } from "os";
|
|
43192
|
-
import { resolve as resolve30, dirname as dirname18, join as
|
|
43393
|
+
import { resolve as resolve30, dirname as dirname18, join as join53, basename as basename10 } from "path";
|
|
43193
43394
|
import { execFileSync as execFileSync6, spawn as spawn11 } from "child_process";
|
|
43194
43395
|
function formatFpsParseError(input, reason) {
|
|
43195
43396
|
switch (reason) {
|
|
@@ -43334,9 +43535,9 @@ function ensureDockerImage(version, quiet) {
|
|
|
43334
43535
|
}
|
|
43335
43536
|
if (!quiet) console.log(c2.dim(` Building Docker image: ${tag}...`));
|
|
43336
43537
|
const dockerfilePath = resolveDockerfilePath();
|
|
43337
|
-
const tmpDir =
|
|
43538
|
+
const tmpDir = join53(tmpdir4(), `hyperframes-docker-${Date.now()}`);
|
|
43338
43539
|
mkdirSync27(tmpDir, { recursive: true });
|
|
43339
|
-
writeFileSync21(
|
|
43540
|
+
writeFileSync21(join53(tmpDir, "Dockerfile"), readFileSync32(dockerfilePath));
|
|
43340
43541
|
try {
|
|
43341
43542
|
execFileSync6(
|
|
43342
43543
|
"docker",
|
|
@@ -43356,7 +43557,7 @@ function ensureDockerImage(version, quiet) {
|
|
|
43356
43557
|
const message = error instanceof Error ? error.message : String(error);
|
|
43357
43558
|
throw new Error(`Failed to build Docker image: ${message}`);
|
|
43358
43559
|
} finally {
|
|
43359
|
-
|
|
43560
|
+
rmSync11(tmpDir, { recursive: true, force: true });
|
|
43360
43561
|
}
|
|
43361
43562
|
if (!quiet) console.log(c2.dim(` Docker image: ${tag} (built)`));
|
|
43362
43563
|
return tag;
|
|
@@ -43548,7 +43749,7 @@ function printRenderComplete(outputPath, elapsedMs, quiet) {
|
|
|
43548
43749
|
for (const entry of readdirSync18(outputPath, { withFileTypes: true })) {
|
|
43549
43750
|
if (!entry.isFile()) continue;
|
|
43550
43751
|
try {
|
|
43551
|
-
total += statSync18(
|
|
43752
|
+
total += statSync18(join53(outputPath, entry.name)).size;
|
|
43552
43753
|
} catch {
|
|
43553
43754
|
}
|
|
43554
43755
|
}
|
|
@@ -43790,7 +43991,7 @@ var init_render2 = __esm({
|
|
|
43790
43991
|
const now = /* @__PURE__ */ new Date();
|
|
43791
43992
|
const datePart = now.toISOString().slice(0, 10);
|
|
43792
43993
|
const timePart = now.toTimeString().slice(0, 8).replace(/:/g, "-");
|
|
43793
|
-
const outputPath = args.output ? resolve30(args.output) :
|
|
43994
|
+
const outputPath = args.output ? resolve30(args.output) : join53(rendersDir, `${project.name}_${datePart}_${timePart}${ext}`);
|
|
43794
43995
|
mkdirSync27(dirname18(outputPath), { recursive: true });
|
|
43795
43996
|
const useDocker = args.docker ?? false;
|
|
43796
43997
|
const useGpu = args.gpu ?? false;
|
|
@@ -44205,7 +44406,7 @@ var init_lint3 = __esm({
|
|
|
44205
44406
|
|
|
44206
44407
|
// src/utils/staticProjectServer.ts
|
|
44207
44408
|
import { createServer } from "http";
|
|
44208
|
-
import { existsSync as
|
|
44409
|
+
import { existsSync as existsSync48, readFileSync as readFileSync33 } from "fs";
|
|
44209
44410
|
import { isAbsolute as isAbsolute8, relative as relative6, resolve as resolve31 } from "path";
|
|
44210
44411
|
async function serveStaticProjectHtml(projectDir, html, bindErrorMessage = "Failed to bind local HTTP server") {
|
|
44211
44412
|
const server = createServer((req, res) => {
|
|
@@ -44222,7 +44423,7 @@ async function serveStaticProjectHtml(projectDir, html, bindErrorMessage = "Fail
|
|
|
44222
44423
|
res.end();
|
|
44223
44424
|
return;
|
|
44224
44425
|
}
|
|
44225
|
-
if (
|
|
44426
|
+
if (existsSync48(filePath)) {
|
|
44226
44427
|
res.writeHead(200, { "Content-Type": getMimeType(filePath) });
|
|
44227
44428
|
res.end(readFileSync33(filePath));
|
|
44228
44429
|
return;
|
|
@@ -44400,8 +44601,8 @@ __export(layout_exports, {
|
|
|
44400
44601
|
default: () => layout_default,
|
|
44401
44602
|
examples: () => examples9
|
|
44402
44603
|
});
|
|
44403
|
-
import { existsSync as
|
|
44404
|
-
import { dirname as dirname19, join as
|
|
44604
|
+
import { existsSync as existsSync49, readFileSync as readFileSync34 } from "fs";
|
|
44605
|
+
import { dirname as dirname19, join as join54 } from "path";
|
|
44405
44606
|
import { fileURLToPath as fileURLToPath6 } from "url";
|
|
44406
44607
|
async function getCompositionDuration2(page) {
|
|
44407
44608
|
return page.evaluate(() => {
|
|
@@ -44547,11 +44748,11 @@ async function runLayoutAudit(projectDir, opts) {
|
|
|
44547
44748
|
}
|
|
44548
44749
|
function loadLayoutAuditScript() {
|
|
44549
44750
|
const candidates = [
|
|
44550
|
-
|
|
44551
|
-
|
|
44751
|
+
join54(__dirname2, "layout-audit.browser.js"),
|
|
44752
|
+
join54(__dirname2, "commands", "layout-audit.browser.js")
|
|
44552
44753
|
];
|
|
44553
44754
|
for (const candidate of candidates) {
|
|
44554
|
-
if (
|
|
44755
|
+
if (existsSync49(candidate)) return readFileSync34(candidate, "utf-8");
|
|
44555
44756
|
}
|
|
44556
44757
|
throw new Error("Missing layout audit browser script");
|
|
44557
44758
|
}
|
|
@@ -44760,11 +44961,11 @@ __export(info_exports, {
|
|
|
44760
44961
|
examples: () => examples11
|
|
44761
44962
|
});
|
|
44762
44963
|
import { readFileSync as readFileSync35, readdirSync as readdirSync19, statSync as statSync19 } from "fs";
|
|
44763
|
-
import { join as
|
|
44964
|
+
import { join as join55 } from "path";
|
|
44764
44965
|
function totalSize(dir) {
|
|
44765
44966
|
let total = 0;
|
|
44766
44967
|
for (const entry of readdirSync19(dir, { withFileTypes: true })) {
|
|
44767
|
-
const path2 =
|
|
44968
|
+
const path2 = join55(dir, entry.name);
|
|
44768
44969
|
if (entry.isDirectory()) {
|
|
44769
44970
|
total += totalSize(path2);
|
|
44770
44971
|
} else {
|
|
@@ -44855,7 +45056,7 @@ __export(compositions_exports, {
|
|
|
44855
45056
|
parseCompositions: () => parseCompositions,
|
|
44856
45057
|
parseSubComposition: () => parseSubComposition
|
|
44857
45058
|
});
|
|
44858
|
-
import { existsSync as
|
|
45059
|
+
import { existsSync as existsSync50, readFileSync as readFileSync36 } from "fs";
|
|
44859
45060
|
import { resolve as resolve32, dirname as dirname20 } from "path";
|
|
44860
45061
|
function countRenderableDescendants(root) {
|
|
44861
45062
|
return Array.from(root.querySelectorAll("*")).filter(
|
|
@@ -44889,7 +45090,7 @@ function parseCompositions(html, baseDir) {
|
|
|
44889
45090
|
const compositionSrc = div.getAttribute("data-composition-src");
|
|
44890
45091
|
if (compositionSrc) {
|
|
44891
45092
|
const subPath = resolve32(baseDir, compositionSrc);
|
|
44892
|
-
if (
|
|
45093
|
+
if (existsSync50(subPath)) {
|
|
44893
45094
|
const subHtml = readFileSync36(subPath, "utf-8");
|
|
44894
45095
|
const subInfo = parseSubComposition(subHtml, id, width, height);
|
|
44895
45096
|
compositions.push({ ...subInfo, source: compositionSrc });
|
|
@@ -45031,8 +45232,8 @@ __export(benchmark_exports, {
|
|
|
45031
45232
|
default: () => benchmark_default,
|
|
45032
45233
|
examples: () => examples13
|
|
45033
45234
|
});
|
|
45034
|
-
import { existsSync as
|
|
45035
|
-
import { resolve as resolve33, join as
|
|
45235
|
+
import { existsSync as existsSync51, statSync as statSync20 } from "fs";
|
|
45236
|
+
import { resolve as resolve33, join as join56 } from "path";
|
|
45036
45237
|
var examples13, FPS_30, FPS_60, DEFAULT_CONFIGS, benchmark_default;
|
|
45037
45238
|
var init_benchmark = __esm({
|
|
45038
45239
|
"src/commands/benchmark.ts"() {
|
|
@@ -45110,7 +45311,7 @@ var init_benchmark = __esm({
|
|
|
45110
45311
|
s2?.start(`Benchmarking ${config.label}...`);
|
|
45111
45312
|
for (let i2 = 0; i2 < runsPerConfig; i2++) {
|
|
45112
45313
|
s2?.message(`${config.label} \u2014 run ${i2 + 1}/${runsPerConfig}`);
|
|
45113
|
-
const outputPath =
|
|
45314
|
+
const outputPath = join56(
|
|
45114
45315
|
benchDir,
|
|
45115
45316
|
`${config.label.replace(/[^a-zA-Z0-9]/g, "_")}_run${i2}.mp4`
|
|
45116
45317
|
);
|
|
@@ -45124,7 +45325,7 @@ var init_benchmark = __esm({
|
|
|
45124
45325
|
await producer.executeRenderJob(job, project.dir, outputPath);
|
|
45125
45326
|
const elapsedMs = Date.now() - startTime;
|
|
45126
45327
|
let fileSize = null;
|
|
45127
|
-
if (
|
|
45328
|
+
if (existsSync51(outputPath)) {
|
|
45128
45329
|
const stat3 = statSync20(outputPath);
|
|
45129
45330
|
fileSize = stat3.size;
|
|
45130
45331
|
}
|
|
@@ -45214,6 +45415,34 @@ __export(browser_exports, {
|
|
|
45214
45415
|
});
|
|
45215
45416
|
async function runEnsure() {
|
|
45216
45417
|
ge(c2.bold("hyperframes browser ensure"));
|
|
45418
|
+
if (isLinuxArm()) {
|
|
45419
|
+
const s3 = ft();
|
|
45420
|
+
s3.start("Linux ARM64 detected \u2014 looking for system Chromium...");
|
|
45421
|
+
const existing2 = await findBrowser();
|
|
45422
|
+
if (existing2) {
|
|
45423
|
+
s3.stop(c2.success("System Chromium found"));
|
|
45424
|
+
console.log();
|
|
45425
|
+
console.log(` ${c2.dim("Source:")} ${c2.bold(existing2.source)}`);
|
|
45426
|
+
console.log(` ${c2.dim("Path:")} ${c2.bold(existing2.executablePath)}`);
|
|
45427
|
+
console.log();
|
|
45428
|
+
ye(c2.success("Ready to render."));
|
|
45429
|
+
return;
|
|
45430
|
+
}
|
|
45431
|
+
s3.stop(c2.warn("No Chromium found \u2014 attempting auto-install via apt-get..."));
|
|
45432
|
+
console.log();
|
|
45433
|
+
try {
|
|
45434
|
+
const result2 = await ensureBrowser();
|
|
45435
|
+
console.log();
|
|
45436
|
+
console.log(` ${c2.dim("Source:")} ${c2.bold(result2.source)}`);
|
|
45437
|
+
console.log(` ${c2.dim("Path:")} ${c2.bold(result2.executablePath)}`);
|
|
45438
|
+
console.log();
|
|
45439
|
+
ye(c2.success("Chromium ready. You can now render on ARM64."));
|
|
45440
|
+
} catch (err) {
|
|
45441
|
+
R2.error(err instanceof Error ? err.message : String(err));
|
|
45442
|
+
ye(c2.warn("Manual setup required (see instructions above)."));
|
|
45443
|
+
}
|
|
45444
|
+
return;
|
|
45445
|
+
}
|
|
45217
45446
|
const s2 = ft();
|
|
45218
45447
|
s2.start("Looking for an existing browser...");
|
|
45219
45448
|
const existing = await findBrowser();
|
|
@@ -45350,9 +45579,9 @@ __export(manager_exports3, {
|
|
|
45350
45579
|
modelPath: () => modelPath,
|
|
45351
45580
|
selectProviders: () => selectProviders
|
|
45352
45581
|
});
|
|
45353
|
-
import { existsSync as
|
|
45582
|
+
import { existsSync as existsSync52, mkdirSync as mkdirSync28 } from "fs";
|
|
45354
45583
|
import { homedir as homedir9, platform as platform5, arch } from "os";
|
|
45355
|
-
import { join as
|
|
45584
|
+
import { join as join57 } from "path";
|
|
45356
45585
|
function isDevice(value) {
|
|
45357
45586
|
return typeof value === "string" && DEVICES.includes(value);
|
|
45358
45587
|
}
|
|
@@ -45392,15 +45621,15 @@ function listAvailableProviders() {
|
|
|
45392
45621
|
return out;
|
|
45393
45622
|
}
|
|
45394
45623
|
function modelPath(model = DEFAULT_MODEL2) {
|
|
45395
|
-
return
|
|
45624
|
+
return join57(MODELS_DIR2, `${model}.onnx`);
|
|
45396
45625
|
}
|
|
45397
45626
|
async function ensureModel2(model = DEFAULT_MODEL2, options) {
|
|
45398
45627
|
const dest = modelPath(model);
|
|
45399
|
-
if (
|
|
45628
|
+
if (existsSync52(dest)) return dest;
|
|
45400
45629
|
mkdirSync28(MODELS_DIR2, { recursive: true });
|
|
45401
45630
|
options?.onProgress?.(`Downloading ${model} weights (~168 MB)...`);
|
|
45402
45631
|
await downloadFile(MODEL_URLS[model], dest);
|
|
45403
|
-
if (!
|
|
45632
|
+
if (!existsSync52(dest)) {
|
|
45404
45633
|
throw new Error(`Model download failed: ${model}`);
|
|
45405
45634
|
}
|
|
45406
45635
|
return dest;
|
|
@@ -45410,7 +45639,7 @@ var init_manager3 = __esm({
|
|
|
45410
45639
|
"src/background-removal/manager.ts"() {
|
|
45411
45640
|
"use strict";
|
|
45412
45641
|
init_download();
|
|
45413
|
-
MODELS_DIR2 =
|
|
45642
|
+
MODELS_DIR2 = join57(homedir9(), ".cache", "hyperframes", "background-removal", "models");
|
|
45414
45643
|
DEFAULT_MODEL2 = "u2net_human_seg";
|
|
45415
45644
|
MODEL_URLS = {
|
|
45416
45645
|
u2net_human_seg: "https://github.com/danielgatis/rembg/releases/download/v0.0.0/u2net_human_seg.onnx"
|
|
@@ -45882,12 +46111,12 @@ __export(remove_background_exports, {
|
|
|
45882
46111
|
examples: () => examples15
|
|
45883
46112
|
});
|
|
45884
46113
|
import { resolve as resolve34 } from "path";
|
|
45885
|
-
import { existsSync as
|
|
46114
|
+
import { existsSync as existsSync53 } from "fs";
|
|
45886
46115
|
async function showInfo(json) {
|
|
45887
46116
|
const { selectProviders: selectProviders2, listAvailableProviders: listAvailableProviders2, DEFAULT_MODEL: DEFAULT_MODEL4, MODEL_MEMORY_MB: MODEL_MEMORY_MB2, modelPath: modelPath2 } = await Promise.resolve().then(() => (init_manager3(), manager_exports3));
|
|
45888
46117
|
const providers = listAvailableProviders2();
|
|
45889
46118
|
const auto = selectProviders2("auto");
|
|
45890
|
-
const cached2 =
|
|
46119
|
+
const cached2 = existsSync53(modelPath2());
|
|
45891
46120
|
if (json) {
|
|
45892
46121
|
console.log(
|
|
45893
46122
|
JSON.stringify({
|
|
@@ -46094,8 +46323,8 @@ __export(transcribe_exports2, {
|
|
|
46094
46323
|
default: () => transcribe_default,
|
|
46095
46324
|
examples: () => examples16
|
|
46096
46325
|
});
|
|
46097
|
-
import { existsSync as
|
|
46098
|
-
import { resolve as resolve35, join as
|
|
46326
|
+
import { existsSync as existsSync54, writeFileSync as writeFileSync22 } from "fs";
|
|
46327
|
+
import { resolve as resolve35, join as join58, extname as extname10 } from "path";
|
|
46099
46328
|
async function importTranscript(inputPath, dir, json) {
|
|
46100
46329
|
const { loadTranscript: loadTranscript2, patchCaptionHtml: patchCaptionHtml2 } = await Promise.resolve().then(() => (init_normalize(), normalize_exports));
|
|
46101
46330
|
const { words, format } = loadTranscript2(inputPath);
|
|
@@ -46103,7 +46332,7 @@ async function importTranscript(inputPath, dir, json) {
|
|
|
46103
46332
|
console.error(c2.error("No words found in transcript."));
|
|
46104
46333
|
process.exit(1);
|
|
46105
46334
|
}
|
|
46106
|
-
const outPath =
|
|
46335
|
+
const outPath = join58(dir, "transcript.json");
|
|
46107
46336
|
writeFileSync22(outPath, JSON.stringify(words, null, 2));
|
|
46108
46337
|
patchCaptionHtml2(dir, words);
|
|
46109
46338
|
if (json) {
|
|
@@ -46220,7 +46449,7 @@ var init_transcribe2 = __esm({
|
|
|
46220
46449
|
},
|
|
46221
46450
|
async run({ args }) {
|
|
46222
46451
|
const inputPath = resolve35(args.input);
|
|
46223
|
-
if (!
|
|
46452
|
+
if (!existsSync54(inputPath)) {
|
|
46224
46453
|
console.error(c2.error(`File not found: ${args.input}`));
|
|
46225
46454
|
process.exit(1);
|
|
46226
46455
|
}
|
|
@@ -46241,9 +46470,9 @@ var init_transcribe2 = __esm({
|
|
|
46241
46470
|
});
|
|
46242
46471
|
|
|
46243
46472
|
// src/tts/manager.ts
|
|
46244
|
-
import { existsSync as
|
|
46473
|
+
import { existsSync as existsSync55, mkdirSync as mkdirSync29 } from "fs";
|
|
46245
46474
|
import { homedir as homedir10 } from "os";
|
|
46246
|
-
import { join as
|
|
46475
|
+
import { join as join59 } from "path";
|
|
46247
46476
|
function inferLangFromVoiceId(voiceId) {
|
|
46248
46477
|
const first = voiceId.charAt(0).toLowerCase();
|
|
46249
46478
|
return VOICE_PREFIX_LANG[first] ?? "en-us";
|
|
@@ -46252,8 +46481,8 @@ function isSupportedLang(value) {
|
|
|
46252
46481
|
return SUPPORTED_LANGS.includes(value);
|
|
46253
46482
|
}
|
|
46254
46483
|
async function ensureModel3(model = DEFAULT_MODEL3, options) {
|
|
46255
|
-
const modelPath2 =
|
|
46256
|
-
if (
|
|
46484
|
+
const modelPath2 = join59(MODELS_DIR3, `${model}.onnx`);
|
|
46485
|
+
if (existsSync55(modelPath2)) return modelPath2;
|
|
46257
46486
|
const url = MODEL_URLS2[model];
|
|
46258
46487
|
if (!url) {
|
|
46259
46488
|
throw new Error(
|
|
@@ -46263,18 +46492,18 @@ async function ensureModel3(model = DEFAULT_MODEL3, options) {
|
|
|
46263
46492
|
mkdirSync29(MODELS_DIR3, { recursive: true });
|
|
46264
46493
|
options?.onProgress?.(`Downloading TTS model ${model} (~311 MB)...`);
|
|
46265
46494
|
await downloadFile(url, modelPath2);
|
|
46266
|
-
if (!
|
|
46495
|
+
if (!existsSync55(modelPath2)) {
|
|
46267
46496
|
throw new Error(`Model download failed: ${model}`);
|
|
46268
46497
|
}
|
|
46269
46498
|
return modelPath2;
|
|
46270
46499
|
}
|
|
46271
46500
|
async function ensureVoices(options) {
|
|
46272
|
-
const voicesPath =
|
|
46273
|
-
if (
|
|
46501
|
+
const voicesPath = join59(VOICES_DIR, "voices-v1.0.bin");
|
|
46502
|
+
if (existsSync55(voicesPath)) return voicesPath;
|
|
46274
46503
|
mkdirSync29(VOICES_DIR, { recursive: true });
|
|
46275
46504
|
options?.onProgress?.("Downloading voice data (~27 MB)...");
|
|
46276
46505
|
await downloadFile(VOICES_URL, voicesPath);
|
|
46277
|
-
if (!
|
|
46506
|
+
if (!existsSync55(voicesPath)) {
|
|
46278
46507
|
throw new Error("Voice data download failed");
|
|
46279
46508
|
}
|
|
46280
46509
|
return voicesPath;
|
|
@@ -46284,9 +46513,9 @@ var init_manager4 = __esm({
|
|
|
46284
46513
|
"src/tts/manager.ts"() {
|
|
46285
46514
|
"use strict";
|
|
46286
46515
|
init_download();
|
|
46287
|
-
CACHE_DIR3 =
|
|
46288
|
-
MODELS_DIR3 =
|
|
46289
|
-
VOICES_DIR =
|
|
46516
|
+
CACHE_DIR3 = join59(homedir10(), ".cache", "hyperframes", "tts");
|
|
46517
|
+
MODELS_DIR3 = join59(CACHE_DIR3, "models");
|
|
46518
|
+
VOICES_DIR = join59(CACHE_DIR3, "voices");
|
|
46290
46519
|
DEFAULT_MODEL3 = "kokoro-v1.0";
|
|
46291
46520
|
MODEL_URLS2 = {
|
|
46292
46521
|
"kokoro-v1.0": "https://github.com/thewh1teagle/kokoro-onnx/releases/download/model-files-v1.0/kokoro-v1.0.onnx"
|
|
@@ -46347,8 +46576,8 @@ __export(synthesize_exports, {
|
|
|
46347
46576
|
synthesize: () => synthesize
|
|
46348
46577
|
});
|
|
46349
46578
|
import { execFileSync as execFileSync7 } from "child_process";
|
|
46350
|
-
import { existsSync as
|
|
46351
|
-
import { join as
|
|
46579
|
+
import { existsSync as existsSync56, writeFileSync as writeFileSync23, mkdirSync as mkdirSync30, readdirSync as readdirSync20, unlinkSync as unlinkSync6 } from "fs";
|
|
46580
|
+
import { join as join60, dirname as dirname21, basename as basename11 } from "path";
|
|
46352
46581
|
import { homedir as homedir11 } from "os";
|
|
46353
46582
|
function findPython() {
|
|
46354
46583
|
for (const name of ["python3", "python"]) {
|
|
@@ -46384,7 +46613,7 @@ function hasPythonPackage(python, pkg) {
|
|
|
46384
46613
|
}
|
|
46385
46614
|
}
|
|
46386
46615
|
function ensureSynthScript() {
|
|
46387
|
-
if (!
|
|
46616
|
+
if (!existsSync56(SCRIPT_PATH)) {
|
|
46388
46617
|
mkdirSync30(SCRIPT_DIR, { recursive: true });
|
|
46389
46618
|
writeFileSync23(SCRIPT_PATH, SYNTH_SCRIPT);
|
|
46390
46619
|
const currentName = basename11(SCRIPT_PATH);
|
|
@@ -46392,7 +46621,7 @@ function ensureSynthScript() {
|
|
|
46392
46621
|
for (const entry of readdirSync20(SCRIPT_DIR)) {
|
|
46393
46622
|
if (entry !== currentName && /^synth(-v\d+)?\.py$/.test(entry)) {
|
|
46394
46623
|
try {
|
|
46395
|
-
unlinkSync6(
|
|
46624
|
+
unlinkSync6(join60(SCRIPT_DIR, entry));
|
|
46396
46625
|
} catch {
|
|
46397
46626
|
}
|
|
46398
46627
|
}
|
|
@@ -46438,7 +46667,7 @@ async function synthesize(text, outputPath, options) {
|
|
|
46438
46667
|
stdio: ["pipe", "pipe", "pipe"]
|
|
46439
46668
|
}
|
|
46440
46669
|
);
|
|
46441
|
-
if (!
|
|
46670
|
+
if (!existsSync56(outputPath)) {
|
|
46442
46671
|
throw new Error("Synthesis completed but no output file was created");
|
|
46443
46672
|
}
|
|
46444
46673
|
const lines = stdout2.trim().split("\n");
|
|
@@ -46451,7 +46680,7 @@ async function synthesize(text, outputPath, options) {
|
|
|
46451
46680
|
langApplied: result.langApplied
|
|
46452
46681
|
};
|
|
46453
46682
|
} catch (err) {
|
|
46454
|
-
if (err instanceof SyntaxError &&
|
|
46683
|
+
if (err instanceof SyntaxError && existsSync56(outputPath)) {
|
|
46455
46684
|
throw new Error(
|
|
46456
46685
|
"Speech was generated but metadata could not be read. Check the output file manually."
|
|
46457
46686
|
);
|
|
@@ -46502,8 +46731,8 @@ print(json.dumps({
|
|
|
46502
46731
|
"langApplied": bool(lang and supports_lang),
|
|
46503
46732
|
}))
|
|
46504
46733
|
`;
|
|
46505
|
-
SCRIPT_DIR =
|
|
46506
|
-
SCRIPT_PATH =
|
|
46734
|
+
SCRIPT_DIR = join60(homedir11(), ".cache", "hyperframes", "tts");
|
|
46735
|
+
SCRIPT_PATH = join60(SCRIPT_DIR, "synth-v2.py");
|
|
46507
46736
|
}
|
|
46508
46737
|
});
|
|
46509
46738
|
|
|
@@ -46513,7 +46742,7 @@ __export(tts_exports, {
|
|
|
46513
46742
|
default: () => tts_default,
|
|
46514
46743
|
examples: () => examples17
|
|
46515
46744
|
});
|
|
46516
|
-
import { existsSync as
|
|
46745
|
+
import { existsSync as existsSync57, readFileSync as readFileSync37 } from "fs";
|
|
46517
46746
|
import { resolve as resolve36, extname as extname11 } from "path";
|
|
46518
46747
|
function listVoices(json) {
|
|
46519
46748
|
const rows = BUNDLED_VOICES.map((v2) => ({ ...v2, defaultLang: inferLangFromVoiceId(v2.id) }));
|
|
@@ -46623,7 +46852,7 @@ var init_tts = __esm({
|
|
|
46623
46852
|
}
|
|
46624
46853
|
let text;
|
|
46625
46854
|
const maybeFile = resolve36(args.input);
|
|
46626
|
-
if (
|
|
46855
|
+
if (existsSync57(maybeFile) && extname11(maybeFile).toLowerCase() === ".txt") {
|
|
46627
46856
|
text = readFileSync37(maybeFile, "utf-8").trim();
|
|
46628
46857
|
if (!text) {
|
|
46629
46858
|
console.error(c2.error("File is empty."));
|
|
@@ -46716,15 +46945,15 @@ __export(docs_exports, {
|
|
|
46716
46945
|
default: () => docs_default,
|
|
46717
46946
|
examples: () => examples18
|
|
46718
46947
|
});
|
|
46719
|
-
import { readFileSync as readFileSync38, existsSync as
|
|
46720
|
-
import { resolve as resolve37, dirname as dirname22, join as
|
|
46948
|
+
import { readFileSync as readFileSync38, existsSync as existsSync58 } from "fs";
|
|
46949
|
+
import { resolve as resolve37, dirname as dirname22, join as join61 } from "path";
|
|
46721
46950
|
import { fileURLToPath as fileURLToPath7 } from "url";
|
|
46722
46951
|
function docsDir() {
|
|
46723
46952
|
const thisFile = fileURLToPath7(import.meta.url);
|
|
46724
46953
|
const dir = dirname22(thisFile);
|
|
46725
46954
|
const devPath = resolve37(dir, "..", "docs");
|
|
46726
46955
|
const builtPath = resolve37(dir, "docs");
|
|
46727
|
-
return
|
|
46956
|
+
return existsSync58(devPath) ? devPath : builtPath;
|
|
46728
46957
|
}
|
|
46729
46958
|
function formatInlineCode(line) {
|
|
46730
46959
|
return line.replace(/`([^`]+)`/g, (_match, code) => c2.accent(code));
|
|
@@ -46821,8 +47050,8 @@ var init_docs = __esm({
|
|
|
46821
47050
|
}
|
|
46822
47051
|
process.exit(1);
|
|
46823
47052
|
}
|
|
46824
|
-
const filePath =
|
|
46825
|
-
if (!
|
|
47053
|
+
const filePath = join61(docsDir(), entry.file);
|
|
47054
|
+
if (!existsSync58(filePath)) {
|
|
46826
47055
|
console.error(c2.error(`Doc file not found: ${filePath}`));
|
|
46827
47056
|
process.exit(1);
|
|
46828
47057
|
}
|
|
@@ -47310,8 +47539,8 @@ __export(validate_exports, {
|
|
|
47310
47539
|
default: () => validate_default,
|
|
47311
47540
|
shouldIgnoreRequestFailure: () => shouldIgnoreRequestFailure
|
|
47312
47541
|
});
|
|
47313
|
-
import { existsSync as
|
|
47314
|
-
import { join as
|
|
47542
|
+
import { existsSync as existsSync59, readFileSync as readFileSync39 } from "fs";
|
|
47543
|
+
import { join as join62, dirname as dirname23 } from "path";
|
|
47315
47544
|
import { fileURLToPath as fileURLToPath8 } from "url";
|
|
47316
47545
|
function shouldIgnoreRequestFailure(url, errorText) {
|
|
47317
47546
|
if (errorText !== "net::ERR_ABORTED") return false;
|
|
@@ -47363,11 +47592,11 @@ async function runContrastAudit(page) {
|
|
|
47363
47592
|
}
|
|
47364
47593
|
function loadContrastAuditScript() {
|
|
47365
47594
|
const candidates = [
|
|
47366
|
-
|
|
47367
|
-
|
|
47595
|
+
join62(__dirname3, "contrast-audit.browser.js"),
|
|
47596
|
+
join62(__dirname3, "commands", "contrast-audit.browser.js")
|
|
47368
47597
|
];
|
|
47369
47598
|
for (const candidate of candidates) {
|
|
47370
|
-
if (
|
|
47599
|
+
if (existsSync59(candidate)) return readFileSync39(candidate, "utf-8");
|
|
47371
47600
|
}
|
|
47372
47601
|
throw new Error("Missing contrast audit browser script");
|
|
47373
47602
|
}
|
|
@@ -47384,8 +47613,8 @@ async function validateInBrowser(projectDir, opts) {
|
|
|
47384
47613
|
res.end(html);
|
|
47385
47614
|
return;
|
|
47386
47615
|
}
|
|
47387
|
-
const filePath =
|
|
47388
|
-
if (
|
|
47616
|
+
const filePath = join62(projectDir, decodeURIComponent(url));
|
|
47617
|
+
if (existsSync59(filePath)) {
|
|
47389
47618
|
res.writeHead(200, { "Content-Type": getMimeType2(filePath) });
|
|
47390
47619
|
res.end(readFileSync39(filePath));
|
|
47391
47620
|
return;
|
|
@@ -47586,12 +47815,12 @@ __export(snapshot_exports, {
|
|
|
47586
47815
|
examples: () => examples22
|
|
47587
47816
|
});
|
|
47588
47817
|
import { spawn as spawn13 } from "child_process";
|
|
47589
|
-
import { existsSync as
|
|
47818
|
+
import { existsSync as existsSync60, mkdtempSync as mkdtempSync3, readFileSync as readFileSync40, mkdirSync as mkdirSync31, rmSync as rmSync12 } from "fs";
|
|
47590
47819
|
import { tmpdir as tmpdir5 } from "os";
|
|
47591
|
-
import { resolve as resolve38, join as
|
|
47820
|
+
import { resolve as resolve38, join as join63, relative as relative7, isAbsolute as isAbsolute9 } from "path";
|
|
47592
47821
|
async function extractVideoFrameToBuffer(videoPath, timeSeconds, useVp9AlphaDecoder = false) {
|
|
47593
|
-
const tmp = mkdtempSync3(
|
|
47594
|
-
const outPath =
|
|
47822
|
+
const tmp = mkdtempSync3(join63(tmpdir5(), "hf-snapshot-frame-"));
|
|
47823
|
+
const outPath = join63(tmp, "frame.png");
|
|
47595
47824
|
try {
|
|
47596
47825
|
const result = await new Promise(
|
|
47597
47826
|
(resolvePromise) => {
|
|
@@ -47631,11 +47860,11 @@ async function extractVideoFrameToBuffer(videoPath, timeSeconds, useVp9AlphaDeco
|
|
|
47631
47860
|
});
|
|
47632
47861
|
}
|
|
47633
47862
|
);
|
|
47634
|
-
if (result.code !== 0 || result.timedOut || !
|
|
47863
|
+
if (result.code !== 0 || result.timedOut || !existsSync60(outPath)) return null;
|
|
47635
47864
|
return readFileSync40(outPath);
|
|
47636
47865
|
} finally {
|
|
47637
47866
|
try {
|
|
47638
|
-
|
|
47867
|
+
rmSync12(tmp, { recursive: true, force: true });
|
|
47639
47868
|
} catch {
|
|
47640
47869
|
}
|
|
47641
47870
|
}
|
|
@@ -47704,7 +47933,7 @@ async function captureSnapshots(projectDir, opts) {
|
|
|
47704
47933
|
return [];
|
|
47705
47934
|
}
|
|
47706
47935
|
const positions = opts.at?.length ? opts.at : numFrames === 1 ? [duration / 2] : Array.from({ length: numFrames }, (_, i2) => i2 / (numFrames - 1) * duration);
|
|
47707
|
-
const snapshotDir =
|
|
47936
|
+
const snapshotDir = join63(projectDir, "snapshots");
|
|
47708
47937
|
mkdirSync31(snapshotDir, { recursive: true });
|
|
47709
47938
|
let injectVideoFramesBatch2 = null;
|
|
47710
47939
|
let syncVideoFrameVisibility2 = null;
|
|
@@ -47779,7 +48008,7 @@ async function captureSnapshots(projectDir, opts) {
|
|
|
47779
48008
|
const decodedPath = decodeURIComponent(url.pathname).replace(/^\//, "");
|
|
47780
48009
|
const candidate = resolve38(projectDir, decodedPath);
|
|
47781
48010
|
const rel = relative7(projectDir, candidate);
|
|
47782
|
-
if (!rel.startsWith("..") && !isAbsolute9(rel) &&
|
|
48011
|
+
if (!rel.startsWith("..") && !isAbsolute9(rel) && existsSync60(candidate)) {
|
|
47783
48012
|
filePath = candidate;
|
|
47784
48013
|
}
|
|
47785
48014
|
} catch {
|
|
@@ -47809,7 +48038,7 @@ async function captureSnapshots(projectDir, opts) {
|
|
|
47809
48038
|
}
|
|
47810
48039
|
const timeLabel = opts.at?.length ? `${time.toFixed(1)}s` : `${Math.round(time / duration * 100)}pct`;
|
|
47811
48040
|
const filename = `frame-${String(i2).padStart(2, "0")}-at-${timeLabel}.png`;
|
|
47812
|
-
const framePath =
|
|
48041
|
+
const framePath = join63(snapshotDir, filename);
|
|
47813
48042
|
await page.screenshot({ path: framePath, type: "png" });
|
|
47814
48043
|
savedPaths.push(`snapshots/${filename}`);
|
|
47815
48044
|
}
|
|
@@ -47895,13 +48124,13 @@ ${c2.error("\u2717")} Snapshot failed: ${msg}`);
|
|
|
47895
48124
|
|
|
47896
48125
|
// src/capture/assetDownloader.ts
|
|
47897
48126
|
import { writeFileSync as writeFileSync24, mkdirSync as mkdirSync32 } from "fs";
|
|
47898
|
-
import { join as
|
|
48127
|
+
import { join as join64, extname as extname12 } from "path";
|
|
47899
48128
|
async function downloadAssets(tokens, outputDir, catalogedAssets, faviconLinks) {
|
|
47900
|
-
const assetsDir =
|
|
48129
|
+
const assetsDir = join64(outputDir, "assets");
|
|
47901
48130
|
mkdirSync32(assetsDir, { recursive: true });
|
|
47902
48131
|
const assets = [];
|
|
47903
48132
|
const downloadedUrls = /* @__PURE__ */ new Set();
|
|
47904
|
-
mkdirSync32(
|
|
48133
|
+
mkdirSync32(join64(outputDir, "assets", "svgs"), { recursive: true });
|
|
47905
48134
|
for (let i2 = 0; i2 < tokens.svgs.length && i2 < 30; i2++) {
|
|
47906
48135
|
const svg = tokens.svgs[i2];
|
|
47907
48136
|
if (!svg.outerHTML || svg.outerHTML.length < 50) continue;
|
|
@@ -47909,7 +48138,7 @@ async function downloadAssets(tokens, outputDir, catalogedAssets, faviconLinks)
|
|
|
47909
48138
|
const name = label2 ? slugify(label2) + ".svg" : svg.isLogo ? `logo-${i2}.svg` : `icon-${i2}.svg`;
|
|
47910
48139
|
const localPath = `assets/svgs/${name}`;
|
|
47911
48140
|
try {
|
|
47912
|
-
writeFileSync24(
|
|
48141
|
+
writeFileSync24(join64(outputDir, localPath), svg.outerHTML, "utf-8");
|
|
47913
48142
|
assets.push({ url: "", localPath, type: "svg" });
|
|
47914
48143
|
} catch {
|
|
47915
48144
|
}
|
|
@@ -47922,7 +48151,7 @@ async function downloadAssets(tokens, outputDir, catalogedAssets, faviconLinks)
|
|
|
47922
48151
|
const localPath = `assets/${name}`;
|
|
47923
48152
|
const buffer = await fetchBuffer(icon.href);
|
|
47924
48153
|
if (buffer) {
|
|
47925
|
-
writeFileSync24(
|
|
48154
|
+
writeFileSync24(join64(outputDir, localPath), buffer);
|
|
47926
48155
|
assets.push({ url: icon.href, localPath, type: "favicon" });
|
|
47927
48156
|
break;
|
|
47928
48157
|
}
|
|
@@ -47979,7 +48208,7 @@ async function downloadAssets(tokens, outputDir, catalogedAssets, faviconLinks)
|
|
|
47979
48208
|
const slug = isMeaningful ? slugify(rawName) : `${prefix}-${imgIdx}`;
|
|
47980
48209
|
const name = `${slug}${ext}`;
|
|
47981
48210
|
const localPath = `assets/${name}`;
|
|
47982
|
-
writeFileSync24(
|
|
48211
|
+
writeFileSync24(join64(outputDir, localPath), buffer);
|
|
47983
48212
|
assets.push({ url, localPath, type: "image" });
|
|
47984
48213
|
imgIdx++;
|
|
47985
48214
|
} catch {
|
|
@@ -47992,7 +48221,7 @@ async function downloadAssets(tokens, outputDir, catalogedAssets, faviconLinks)
|
|
|
47992
48221
|
const localPath = `assets/og-image${ext}`;
|
|
47993
48222
|
const buffer = await fetchBuffer(tokens.ogImage);
|
|
47994
48223
|
if (buffer && buffer.length > 5e3) {
|
|
47995
|
-
writeFileSync24(
|
|
48224
|
+
writeFileSync24(join64(outputDir, localPath), buffer);
|
|
47996
48225
|
assets.push({ url: tokens.ogImage, localPath, type: "image" });
|
|
47997
48226
|
}
|
|
47998
48227
|
} catch {
|
|
@@ -48015,7 +48244,7 @@ function normalizeUrl(u) {
|
|
|
48015
48244
|
}
|
|
48016
48245
|
}
|
|
48017
48246
|
async function downloadAndRewriteFonts(css, outputDir) {
|
|
48018
|
-
const assetsDir =
|
|
48247
|
+
const assetsDir = join64(outputDir, "assets", "fonts");
|
|
48019
48248
|
mkdirSync32(assetsDir, { recursive: true });
|
|
48020
48249
|
const fontUrlRegex = /url\(['"]?(https?:\/\/[^'")\s]+\.(?:woff2?|ttf|otf)[^'")\s]*?)['"]?\)/g;
|
|
48021
48250
|
const fontUrls = /* @__PURE__ */ new Set();
|
|
@@ -48051,7 +48280,7 @@ async function downloadAndRewriteFonts(css, outputDir) {
|
|
|
48051
48280
|
try {
|
|
48052
48281
|
const urlObj = new URL(fontUrl);
|
|
48053
48282
|
const filename = urlObj.pathname.split("/").pop() || `font-${count}.woff2`;
|
|
48054
|
-
const localPath =
|
|
48283
|
+
const localPath = join64(assetsDir, filename);
|
|
48055
48284
|
const relativePath = `assets/fonts/${filename}`;
|
|
48056
48285
|
const buffer = await fetchBuffer(fontUrl);
|
|
48057
48286
|
if (buffer) {
|
|
@@ -48849,7 +49078,7 @@ var init_animationCataloger = __esm({
|
|
|
48849
49078
|
|
|
48850
49079
|
// src/capture/mediaCapture.ts
|
|
48851
49080
|
import { mkdirSync as mkdirSync33, writeFileSync as writeFileSync25, readdirSync as readdirSync21, readFileSync as readFileSync41, statSync as statSync21 } from "fs";
|
|
48852
|
-
import { join as
|
|
49081
|
+
import { join as join65 } from "path";
|
|
48853
49082
|
async function saveLottieAnimations(discoveredLotties, lottieDir) {
|
|
48854
49083
|
let savedCount = 0;
|
|
48855
49084
|
const savedHashes = /* @__PURE__ */ new Set();
|
|
@@ -48882,7 +49111,7 @@ async function saveLottieAnimations(discoveredLotties, lottieDir) {
|
|
|
48882
49111
|
const hash2 = buf.toString("base64").slice(0, 100);
|
|
48883
49112
|
if (savedHashes.has(hash2)) continue;
|
|
48884
49113
|
savedHashes.add(hash2);
|
|
48885
|
-
writeFileSync25(
|
|
49114
|
+
writeFileSync25(join65(lottieDir, `animation-${savedCount}.lottie`), buf);
|
|
48886
49115
|
savedCount++;
|
|
48887
49116
|
continue;
|
|
48888
49117
|
}
|
|
@@ -48900,7 +49129,7 @@ async function saveLottieAnimations(discoveredLotties, lottieDir) {
|
|
|
48900
49129
|
} catch {
|
|
48901
49130
|
continue;
|
|
48902
49131
|
}
|
|
48903
|
-
writeFileSync25(
|
|
49132
|
+
writeFileSync25(join65(lottieDir, `animation-${savedCount}.json`), jsonData, "utf-8");
|
|
48904
49133
|
savedCount++;
|
|
48905
49134
|
}
|
|
48906
49135
|
} catch {
|
|
@@ -48910,22 +49139,22 @@ async function saveLottieAnimations(discoveredLotties, lottieDir) {
|
|
|
48910
49139
|
}
|
|
48911
49140
|
async function renderLottiePreviews(chromeBrowser, lottieDir, outputDir) {
|
|
48912
49141
|
const manifest = [];
|
|
48913
|
-
const previewDir =
|
|
49142
|
+
const previewDir = join65(lottieDir, "previews");
|
|
48914
49143
|
mkdirSync33(previewDir, { recursive: true });
|
|
48915
49144
|
for (const file of readdirSync21(lottieDir)) {
|
|
48916
49145
|
if (!file.endsWith(".json")) continue;
|
|
48917
49146
|
try {
|
|
48918
|
-
const raw = JSON.parse(readFileSync41(
|
|
49147
|
+
const raw = JSON.parse(readFileSync41(join65(lottieDir, file), "utf-8"));
|
|
48919
49148
|
const fr = raw.fr || 30;
|
|
48920
49149
|
const dur = ((raw.op || 0) - (raw.ip || 0)) / fr;
|
|
48921
49150
|
const previewName = file.replace(".json", "-preview.png");
|
|
48922
|
-
const fileSize = statSync21(
|
|
49151
|
+
const fileSize = statSync21(join65(lottieDir, file)).size;
|
|
48923
49152
|
if (fileSize > 2e6) continue;
|
|
48924
49153
|
let previewPage;
|
|
48925
49154
|
try {
|
|
48926
49155
|
previewPage = await chromeBrowser.newPage();
|
|
48927
49156
|
await previewPage.setViewport({ width: 400, height: 400 });
|
|
48928
|
-
const animData = JSON.parse(readFileSync41(
|
|
49157
|
+
const animData = JSON.parse(readFileSync41(join65(lottieDir, file), "utf-8"));
|
|
48929
49158
|
const midFrame = Math.floor(((raw.op || 0) - (raw.ip || 0)) * 0.3);
|
|
48930
49159
|
await previewPage.setContent(
|
|
48931
49160
|
`<!DOCTYPE html>
|
|
@@ -48955,7 +49184,7 @@ async function renderLottiePreviews(chromeBrowser, lottieDir, outputDir) {
|
|
|
48955
49184
|
await previewPage.waitForFunction(() => window.__READY === true, { timeout: 5e3 }).catch(() => {
|
|
48956
49185
|
});
|
|
48957
49186
|
await previewPage.screenshot({
|
|
48958
|
-
path:
|
|
49187
|
+
path: join65(previewDir, previewName),
|
|
48959
49188
|
type: "png",
|
|
48960
49189
|
omitBackground: true
|
|
48961
49190
|
});
|
|
@@ -48979,7 +49208,7 @@ async function renderLottiePreviews(chromeBrowser, lottieDir, outputDir) {
|
|
|
48979
49208
|
}
|
|
48980
49209
|
if (manifest.length > 0) {
|
|
48981
49210
|
writeFileSync25(
|
|
48982
|
-
|
|
49211
|
+
join65(outputDir, "extracted", "lottie-manifest.json"),
|
|
48983
49212
|
JSON.stringify(manifest, null, 2),
|
|
48984
49213
|
"utf-8"
|
|
48985
49214
|
);
|
|
@@ -49041,15 +49270,15 @@ async function captureVideoManifest(page, outputDir, progress) {
|
|
|
49041
49270
|
return true;
|
|
49042
49271
|
});
|
|
49043
49272
|
if (uniqueVideos.length > 0) {
|
|
49044
|
-
const videoManifestDir =
|
|
49273
|
+
const videoManifestDir = join65(outputDir, "assets", "videos");
|
|
49045
49274
|
mkdirSync33(videoManifestDir, { recursive: true });
|
|
49046
|
-
const previewDir =
|
|
49275
|
+
const previewDir = join65(videoManifestDir, "previews");
|
|
49047
49276
|
mkdirSync33(previewDir, { recursive: true });
|
|
49048
49277
|
const videoManifest = [];
|
|
49049
49278
|
for (let vi = 0; vi < uniqueVideos.length && vi < 20; vi++) {
|
|
49050
49279
|
const v2 = uniqueVideos[vi];
|
|
49051
49280
|
const previewName = `video-${vi}-preview.png`;
|
|
49052
|
-
const previewPath =
|
|
49281
|
+
const previewPath = join65(previewDir, previewName);
|
|
49053
49282
|
try {
|
|
49054
49283
|
await page.evaluate(`window.scrollTo(0, ${Math.max(0, v2.top - 100)})`);
|
|
49055
49284
|
await new Promise((r2) => setTimeout(r2, 300));
|
|
@@ -49088,7 +49317,7 @@ async function captureVideoManifest(page, outputDir, progress) {
|
|
|
49088
49317
|
}
|
|
49089
49318
|
if (videoManifest.length > 0) {
|
|
49090
49319
|
writeFileSync25(
|
|
49091
|
-
|
|
49320
|
+
join65(outputDir, "extracted", "video-manifest.json"),
|
|
49092
49321
|
JSON.stringify(videoManifest, null, 2),
|
|
49093
49322
|
"utf-8"
|
|
49094
49323
|
);
|
|
@@ -89615,7 +89844,7 @@ ${underline2}`);
|
|
|
89615
89844
|
|
|
89616
89845
|
// src/capture/contentExtractor.ts
|
|
89617
89846
|
import { readdirSync as readdirSync22, statSync as statSync23, readFileSync as readFileSync42 } from "fs";
|
|
89618
|
-
import { join as
|
|
89847
|
+
import { join as join66 } from "path";
|
|
89619
89848
|
async function detectLibraries(page, capturedShaders) {
|
|
89620
89849
|
let detectedLibraries = [];
|
|
89621
89850
|
try {
|
|
@@ -89735,7 +89964,7 @@ async function captionImagesWithGemini(outputDir, progress, warnings) {
|
|
|
89735
89964
|
try {
|
|
89736
89965
|
const { GoogleGenAI: GoogleGenAI2 } = await Promise.resolve().then(() => (init_node4(), node_exports));
|
|
89737
89966
|
const ai = new GoogleGenAI2({ apiKey: geminiKey });
|
|
89738
|
-
const imageFiles = readdirSync22(
|
|
89967
|
+
const imageFiles = readdirSync22(join66(outputDir, "assets")).filter(
|
|
89739
89968
|
(f3) => /\.(png|jpg|jpeg|webp|gif)$/i.test(f3)
|
|
89740
89969
|
);
|
|
89741
89970
|
const model = process.env.HYPERFRAMES_GEMINI_MODEL || "gemini-3.1-flash-lite-preview";
|
|
@@ -89744,7 +89973,7 @@ async function captionImagesWithGemini(outputDir, progress, warnings) {
|
|
|
89744
89973
|
const batch = imageFiles.slice(i2, i2 + BATCH_SIZE);
|
|
89745
89974
|
const results = await Promise.allSettled(
|
|
89746
89975
|
batch.map(async (file) => {
|
|
89747
|
-
const filePath =
|
|
89976
|
+
const filePath = join66(outputDir, "assets", file);
|
|
89748
89977
|
const stat3 = statSync23(filePath);
|
|
89749
89978
|
if (stat3.size > 4e6) return { file, caption: "" };
|
|
89750
89979
|
const buffer = readFileSync42(filePath);
|
|
@@ -89793,11 +90022,11 @@ function generateAssetDescriptions(outputDir, tokens, catalogedAssets, geminiCap
|
|
|
89793
90022
|
const uncaptionedLines = [];
|
|
89794
90023
|
const svgLines = [];
|
|
89795
90024
|
const fontLines = [];
|
|
89796
|
-
const assetsPath =
|
|
90025
|
+
const assetsPath = join66(outputDir, "assets");
|
|
89797
90026
|
try {
|
|
89798
90027
|
for (const file of readdirSync22(assetsPath)) {
|
|
89799
90028
|
if (file === "svgs" || file === "fonts" || file === "lottie" || file === "videos") continue;
|
|
89800
|
-
const filePath =
|
|
90029
|
+
const filePath = join66(assetsPath, file);
|
|
89801
90030
|
const stat3 = statSync23(filePath);
|
|
89802
90031
|
if (!stat3.isFile()) continue;
|
|
89803
90032
|
const sizeKb = Math.round(stat3.size / 1024);
|
|
@@ -89826,7 +90055,7 @@ function generateAssetDescriptions(outputDir, tokens, catalogedAssets, geminiCap
|
|
|
89826
90055
|
} catch {
|
|
89827
90056
|
}
|
|
89828
90057
|
try {
|
|
89829
|
-
const svgsPath =
|
|
90058
|
+
const svgsPath = join66(assetsPath, "svgs");
|
|
89830
90059
|
for (const file of readdirSync22(svgsPath)) {
|
|
89831
90060
|
if (!file.endsWith(".svg")) continue;
|
|
89832
90061
|
const svgMatch = tokens.svgs.find(
|
|
@@ -89841,7 +90070,7 @@ function generateAssetDescriptions(outputDir, tokens, catalogedAssets, geminiCap
|
|
|
89841
90070
|
} catch {
|
|
89842
90071
|
}
|
|
89843
90072
|
try {
|
|
89844
|
-
const fontsPath =
|
|
90073
|
+
const fontsPath = join66(assetsPath, "fonts");
|
|
89845
90074
|
for (const file of readdirSync22(fontsPath)) {
|
|
89846
90075
|
fontLines.push(`fonts/${file} \u2014 font file`);
|
|
89847
90076
|
}
|
|
@@ -89861,12 +90090,12 @@ __export(agentPromptGenerator_exports, {
|
|
|
89861
90090
|
generateAgentPrompt: () => generateAgentPrompt
|
|
89862
90091
|
});
|
|
89863
90092
|
import { writeFileSync as writeFileSync26 } from "fs";
|
|
89864
|
-
import { join as
|
|
90093
|
+
import { join as join67 } from "path";
|
|
89865
90094
|
function generateAgentPrompt(outputDir, url, tokens, _animations, hasScreenshot, hasLottie, hasShaders, _catalogedAssets, detectedLibraries) {
|
|
89866
90095
|
const prompt = buildPrompt(url, tokens, hasScreenshot, hasLottie, hasShaders, detectedLibraries);
|
|
89867
|
-
writeFileSync26(
|
|
89868
|
-
writeFileSync26(
|
|
89869
|
-
writeFileSync26(
|
|
90096
|
+
writeFileSync26(join67(outputDir, "AGENTS.md"), prompt, "utf-8");
|
|
90097
|
+
writeFileSync26(join67(outputDir, "CLAUDE.md"), prompt, "utf-8");
|
|
90098
|
+
writeFileSync26(join67(outputDir, ".cursorrules"), prompt, "utf-8");
|
|
89870
90099
|
}
|
|
89871
90100
|
function buildPrompt(url, tokens, hasScreenshot, hasLottie, hasShaders, detectedLibraries) {
|
|
89872
90101
|
const title = tokens.title || new URL(url).hostname.replace(/^www\./, "");
|
|
@@ -89933,8 +90162,8 @@ var init_agentPromptGenerator = __esm({
|
|
|
89933
90162
|
});
|
|
89934
90163
|
|
|
89935
90164
|
// src/capture/scaffolding.ts
|
|
89936
|
-
import { existsSync as
|
|
89937
|
-
import { join as
|
|
90165
|
+
import { existsSync as existsSync61, writeFileSync as writeFileSync27, readFileSync as readFileSync43 } from "fs";
|
|
90166
|
+
import { join as join68, resolve as resolve39 } from "path";
|
|
89938
90167
|
function loadEnvFile(startDir) {
|
|
89939
90168
|
try {
|
|
89940
90169
|
let dir = resolve39(startDir);
|
|
@@ -89960,8 +90189,8 @@ function loadEnvFile(startDir) {
|
|
|
89960
90189
|
}
|
|
89961
90190
|
}
|
|
89962
90191
|
async function generateProjectScaffold(outputDir, url, tokens, animationCatalog, hasScreenshots, hasLotties, hasShaders, catalogedAssets, progress, warnings, detectedLibraries) {
|
|
89963
|
-
const metaPath =
|
|
89964
|
-
if (!
|
|
90192
|
+
const metaPath = join68(outputDir, "meta.json");
|
|
90193
|
+
if (!existsSync61(metaPath)) {
|
|
89965
90194
|
const hostname = new URL(url).hostname.replace(/^www\./, "");
|
|
89966
90195
|
writeFileSync27(
|
|
89967
90196
|
metaPath,
|
|
@@ -89999,9 +90228,9 @@ __export(screenshotCapture_exports, {
|
|
|
89999
90228
|
captureScrollScreenshots: () => captureScrollScreenshots
|
|
90000
90229
|
});
|
|
90001
90230
|
import { writeFileSync as writeFileSync28, mkdirSync as mkdirSync34 } from "fs";
|
|
90002
|
-
import { join as
|
|
90231
|
+
import { join as join69 } from "path";
|
|
90003
90232
|
async function captureScrollScreenshots(page, outputDir) {
|
|
90004
|
-
const screenshotsDir =
|
|
90233
|
+
const screenshotsDir = join69(outputDir, "screenshots");
|
|
90005
90234
|
mkdirSync34(screenshotsDir, { recursive: true });
|
|
90006
90235
|
const MAX_SCREENSHOTS = 20;
|
|
90007
90236
|
const filePaths = [];
|
|
@@ -90035,7 +90264,7 @@ async function captureScrollScreenshots(page, outputDir) {
|
|
|
90035
90264
|
finalPositions[i2] / Math.max(1, scrollHeight - viewportHeight) * 100
|
|
90036
90265
|
);
|
|
90037
90266
|
const filename = `scroll-${String(Math.min(pct, 100)).padStart(3, "0")}.png`;
|
|
90038
|
-
const filePath =
|
|
90267
|
+
const filePath = join69(screenshotsDir, filename);
|
|
90039
90268
|
const buffer = await page.screenshot({ type: "png" });
|
|
90040
90269
|
writeFileSync28(filePath, buffer);
|
|
90041
90270
|
filePaths.push(`screenshots/${filename}`);
|
|
@@ -90348,8 +90577,8 @@ var capture_exports = {};
|
|
|
90348
90577
|
__export(capture_exports, {
|
|
90349
90578
|
captureWebsite: () => captureWebsite
|
|
90350
90579
|
});
|
|
90351
|
-
import { mkdirSync as mkdirSync35, writeFileSync as writeFileSync29, existsSync as
|
|
90352
|
-
import { join as
|
|
90580
|
+
import { mkdirSync as mkdirSync35, writeFileSync as writeFileSync29, existsSync as existsSync62 } from "fs";
|
|
90581
|
+
import { join as join70 } from "path";
|
|
90353
90582
|
async function captureWebsite(opts, onProgress) {
|
|
90354
90583
|
const {
|
|
90355
90584
|
url,
|
|
@@ -90366,9 +90595,9 @@ async function captureWebsite(opts, onProgress) {
|
|
|
90366
90595
|
onProgress?.(stage, detail);
|
|
90367
90596
|
};
|
|
90368
90597
|
loadEnvFile(outputDir);
|
|
90369
|
-
mkdirSync35(
|
|
90370
|
-
mkdirSync35(
|
|
90371
|
-
mkdirSync35(
|
|
90598
|
+
mkdirSync35(join70(outputDir, "extracted"), { recursive: true });
|
|
90599
|
+
mkdirSync35(join70(outputDir, "screenshots"), { recursive: true });
|
|
90600
|
+
mkdirSync35(join70(outputDir, "assets"), { recursive: true });
|
|
90372
90601
|
progress("browser", "Launching headless Chrome...");
|
|
90373
90602
|
const { ensureBrowser: ensureBrowser2 } = await Promise.resolve().then(() => (init_manager2(), manager_exports2));
|
|
90374
90603
|
const browser = await ensureBrowser2();
|
|
@@ -90524,7 +90753,7 @@ async function captureWebsite(opts, onProgress) {
|
|
|
90524
90753
|
} catch {
|
|
90525
90754
|
}
|
|
90526
90755
|
if (discoveredLotties.length > 0) {
|
|
90527
|
-
const lottieDir =
|
|
90756
|
+
const lottieDir = join70(outputDir, "assets", "lottie");
|
|
90528
90757
|
mkdirSync35(lottieDir, { recursive: true });
|
|
90529
90758
|
const savedCount = await saveLottieAnimations(discoveredLotties, lottieDir);
|
|
90530
90759
|
if (savedCount > 0) {
|
|
@@ -90544,7 +90773,7 @@ async function captureWebsite(opts, onProgress) {
|
|
|
90544
90773
|
});
|
|
90545
90774
|
capturedShaders = unique;
|
|
90546
90775
|
writeFileSync29(
|
|
90547
|
-
|
|
90776
|
+
join70(outputDir, "extracted", "shaders.json"),
|
|
90548
90777
|
JSON.stringify(unique, null, 2),
|
|
90549
90778
|
"utf-8"
|
|
90550
90779
|
);
|
|
@@ -90555,7 +90784,7 @@ async function captureWebsite(opts, onProgress) {
|
|
|
90555
90784
|
progress("tokens", "Extracting design tokens...");
|
|
90556
90785
|
const tokens = await extractTokens(page1);
|
|
90557
90786
|
writeFileSync29(
|
|
90558
|
-
|
|
90787
|
+
join70(outputDir, "extracted", "tokens.json"),
|
|
90559
90788
|
JSON.stringify(tokens, null, 2),
|
|
90560
90789
|
"utf-8"
|
|
90561
90790
|
);
|
|
@@ -90629,7 +90858,7 @@ async function captureWebsite(opts, onProgress) {
|
|
|
90629
90858
|
representativeAnimations: representativeAnims
|
|
90630
90859
|
};
|
|
90631
90860
|
writeFileSync29(
|
|
90632
|
-
|
|
90861
|
+
join70(outputDir, "extracted", "animations.json"),
|
|
90633
90862
|
JSON.stringify(leanCatalog, null, 2),
|
|
90634
90863
|
"utf-8"
|
|
90635
90864
|
);
|
|
@@ -90640,18 +90869,18 @@ async function captureWebsite(opts, onProgress) {
|
|
|
90640
90869
|
assets = await downloadAssets(tokens, outputDir, catalogedAssets, faviconLinks);
|
|
90641
90870
|
}
|
|
90642
90871
|
if (visibleTextContent) {
|
|
90643
|
-
writeFileSync29(
|
|
90872
|
+
writeFileSync29(join70(outputDir, "extracted", "visible-text.txt"), visibleTextContent, "utf-8");
|
|
90644
90873
|
}
|
|
90645
90874
|
if (catalogedAssets.length > 0) {
|
|
90646
90875
|
writeFileSync29(
|
|
90647
|
-
|
|
90876
|
+
join70(outputDir, "extracted", "assets-catalog.json"),
|
|
90648
90877
|
JSON.stringify(catalogedAssets, null, 2),
|
|
90649
90878
|
"utf-8"
|
|
90650
90879
|
);
|
|
90651
90880
|
}
|
|
90652
90881
|
if (detectedLibraries.length > 0) {
|
|
90653
90882
|
writeFileSync29(
|
|
90654
|
-
|
|
90883
|
+
join70(outputDir, "extracted", "detected-libraries.json"),
|
|
90655
90884
|
JSON.stringify(detectedLibraries, null, 2),
|
|
90656
90885
|
"utf-8"
|
|
90657
90886
|
);
|
|
@@ -90662,7 +90891,7 @@ async function captureWebsite(opts, onProgress) {
|
|
|
90662
90891
|
const lines = generateAssetDescriptions(outputDir, tokens, catalogedAssets, geminiCaptions);
|
|
90663
90892
|
if (lines.length > 0) {
|
|
90664
90893
|
writeFileSync29(
|
|
90665
|
-
|
|
90894
|
+
join70(outputDir, "extracted", "asset-descriptions.md"),
|
|
90666
90895
|
"# Asset Descriptions\n\nOne line per file. Read this instead of opening every image individually.\n\n" + lines.map((l) => "- " + l).join("\n") + "\n",
|
|
90667
90896
|
"utf-8"
|
|
90668
90897
|
);
|
|
@@ -90678,7 +90907,7 @@ async function captureWebsite(opts, onProgress) {
|
|
|
90678
90907
|
animationCatalog,
|
|
90679
90908
|
screenshots.length > 0,
|
|
90680
90909
|
discoveredLotties.length > 0,
|
|
90681
|
-
|
|
90910
|
+
existsSync62(join70(outputDir, "extracted", "shaders.json")),
|
|
90682
90911
|
catalogedAssets,
|
|
90683
90912
|
progress,
|
|
90684
90913
|
warnings,
|
|
@@ -91027,7 +91256,7 @@ __export(autoUpdate_exports, {
|
|
|
91027
91256
|
import { spawn as spawn14 } from "child_process";
|
|
91028
91257
|
import { appendFileSync as appendFileSync2, mkdirSync as mkdirSync36, openSync as openSync2 } from "fs";
|
|
91029
91258
|
import { homedir as homedir12 } from "os";
|
|
91030
|
-
import { join as
|
|
91259
|
+
import { join as join71 } from "path";
|
|
91031
91260
|
import { compareVersions as compareVersions2 } from "compare-versions";
|
|
91032
91261
|
function isAutoInstallDisabled() {
|
|
91033
91262
|
if (isDevMode()) return true;
|
|
@@ -91050,7 +91279,7 @@ function log(line) {
|
|
|
91050
91279
|
}
|
|
91051
91280
|
function launchDetachedInstall(installCommand, version) {
|
|
91052
91281
|
mkdirSync36(CONFIG_DIR2, { recursive: true, mode: 448 });
|
|
91053
|
-
const configFile =
|
|
91282
|
+
const configFile = join71(CONFIG_DIR2, "config.json");
|
|
91054
91283
|
const nodeScript = `
|
|
91055
91284
|
const { exec } = require("node:child_process");
|
|
91056
91285
|
const { readFileSync, renameSync, writeFileSync } = require("node:fs");
|
|
@@ -91169,8 +91398,8 @@ var init_autoUpdate = __esm({
|
|
|
91169
91398
|
init_config();
|
|
91170
91399
|
init_env();
|
|
91171
91400
|
init_installerDetection();
|
|
91172
|
-
CONFIG_DIR2 =
|
|
91173
|
-
LOG_FILE =
|
|
91401
|
+
CONFIG_DIR2 = join71(homedir12(), ".hyperframes");
|
|
91402
|
+
LOG_FILE = join71(CONFIG_DIR2, "auto-update.log");
|
|
91174
91403
|
PENDING_TIMEOUT_MS = 10 * 60 * 1e3;
|
|
91175
91404
|
}
|
|
91176
91405
|
});
|