function nse(e,t){return t?"func"==e?nse(`Unknown argument "${t[1]||""}" in function "${t[0]||""}" ${t[2]||""}`.trim()+"."):void 0:console.error(" Parsing failed: "+e)}function parseNovaSheets(){let sheets,inline;try{sheets=document.querySelectorAll('link[rel="novasheet" i], link[rel="novasheets" i]'),inline=document.querySelectorAll('[type="novasheet" i], [type="novasheets" i]')}catch(e){sheets=document.querySelectorAll('link[rel="novasheet"], link[rel="novasheets"]'),inline=document.querySelectorAll('[type="novasheet"], [type="novasheets"]')}let fn={full:[],rel:[]},src=[];for(let e of sheets)fn.full.push(e.href),fn.rel.push(e.getAttribute("href"));let sc=[];for(let e in fn.full)try{let t=new XMLHttpRequest;t.open("GET",fn.full[e],!1),t.send();let r=t.responseText;sc.push(r.toString()),src.push(fn.rel[e])}catch(t){nse(`File "${fn.rel[e]}" cannot be accessed.`)}for(let e of inline)sc.push(e.innerHTML),src.push("inline");window.randomHash=window.randomHash||Math.random().toString().hashCode(6);for(let s in sc){sc[s]=sc[s].replace(/^(.*?)\/\/.*$/gm,"$1").replace(/^@var.+?=.*$/gm,"$& @endvar").replace(/@(var|const|endvar)/g,"\n@$1");let lines=sc[s].split("\n"),cso="";for(let e in lines)lines[e]=lines[e].replace(/[\r\n]/g," ").trim(),cso+=lines[e];cso=cso.replace(/\s*@(var|const)[\s\S]*?((?=\s*@(var|const))|@endvar)/gm," ");let cv=[],localVars=[],MAX_RECURSION=50,MAX_ARGUMENTS=10;for(let e in lines)if(lines[e].match(/^\s*@var\s/)){let t=lines[e].replace(/^\s*@var\s/,"").split("="),r=lines.slice(e),s;for(let e in r)if(r[e].match(/^\s*@endvar\s*$|^\s*@var\s/)&&0!=e){s=e;break}let n=t[0].trim(),a=(t[1]||"")+r.slice(1,s).join(" ");cv.push({line:Number(e),ending:Number(s),content:a.trim(),name:n.split("|")[0].trim(),params:n.split("|").slice(1)})}else lines[e].match(/^\s*@const\s*MAX_RECURSION\s/)?MAX_RECURSION=Number(lines[e].split("MAX_RECURSION")[1]):lines[e].match(/^\s*@const\s*MAX_ARGUMENTS\s/)&&(MAX_ARGUMENTS=Number(lines[e].split("MAX_ARGUMENTS")[1]));for(let e in cv)for(let t in cv[e].params){let r=cv[e].params[t].trim(),s=[t,cv[e].name,window.randomHash,r].join("~"),n=`$[${r}]`,a=`$(${s})`;cv[e].content=cv[e].content.split(n).join(a),localVars.push(s)}let lp=0;for(;(cso.indexOf("$(")>-1||lp<2)&&lp++"\\s*(?:\\|\\s*([^"+(e||"")+"|$()]+)\\s*)?",s=r().repeat(MAX_ARGUMENTS),n=`\\$\\(\\s*(${t})\\s*${s}\\s*\\)`,a=`\\$\\(\\s*${t}${r("=").repeat(MAX_ARGUMENTS)}\\s*\\)`,u="$("+t;for(let e=1;e<=MAX_ARGUMENTS;e++)u+="|"+e+"=$"+e;cso=cso.replace(RegExp(a),u+")");let l=cso.match(RegExp(n));if(!l)continue;let c="\\$\\(\\s*"+t+"[^$()]*?\\)";cso=cso.replace(RegExp(c),cv[e].content);for(let e=0;e(Array.isArray(t)||(t=Array(r||MAX_ARGUMENTS).fill(t||"[^|)]*?")),RegExp(`\\$\\(\\s*${e}\\s*(?:\\|\\s*(${t.join("))?\\s*(?:\\|\\s*(")}))?\\s*\\)`,"g")),nm="[0-9]*[.]?[0-9]+",nmr="(?:0x|0b|0o)?[0-9]*[.]?[0-9]+",bnr=`\\(${nmr}\\)|${nmr}`,snmr="[+-]?"+bnr,nur=`(${snmr})\\s*(m|cm|mm|ft|in|em|rem|en|ex|px|pt|pc)?`,mr=e=>`(${bnr})\\s*${e.escapeRegex()}\\s*(${bnr})`,umR=e=>`${nur}\\s*${e.escapeRegex()}\\s*${nur}`,mrb=e=>"\\(\\s*"+mr(e)+"\\s*\\)",pm=(ops,b)=>{for(let op of ops){Array.isArray(op)||(op=[op,op]),cso=cso.replace(RegExp(`(${nmr})[Ee]([+-]?${nmr})`),(e,t,r)=>{return(Number(t)*Math.pow(10,Number(r))).toFixed(20).replace(/\.?0+$/,"")}).replace(/(?:\+|--)+([.0-9]+)/,"+$1").replace(/(?:\+-|-\+)+(?:\++)?([.0-9]+)/,"-$1").replace(RegExp(umR(op[0])),(_,n1,u1,n2,u2)=>{n1=Number(n1),n2=Number(n2);let output=(n1,n2)=>eval(n1+op[0]+n2);if(!u1&&!u2)return _;switch(u1+","+u2){case"m,cm":return output(100*n1,n2)+u2;case"cm,m":return output(n1/100,n2)+u2;case"m,mm":return output(1e3*n1,n2)+u2;case"mm,m":return output(n1/1e3,n2)+u2;case"cm,mm":return output(10*n1,n2)+u2;case"mm,cm":return output(n1/10,n2)+u2;case"m,in":return output(39.3701*n1,n2)+u2;case"in,m":return output(n1/39.3701,n2)+u2;case"cm,in":return output(.393701*n1,n2)+u2;case"in,cm":return output(n1/.393701,n2)+u2;case"mm,in":return output(.0393701*n1,n2)+u2;case"in,mm":return output(n1/.393701,n2)+u2;case"m,ft":return output(3.28084*n1,n2)+u2;case"ft,m":return output(n1/3.28084,n2)+u2;case"cm,ft":return output(.0328084*n1,n2)+u2;case"ft,cm":return output(n1/.0328084,n2)+u2;case"mm,ft":return output(.00328084*n1,n2)+u2;case"ft,mm":return output(n1/.00328084,n2)+u2;default:return output(n1,n2)+(u2||u1)}});let regex=b?mrb(op[0]):mr(op[0]),nums=cso.match(RegExp(regex));if(!nums)continue;let result=eval(`Number(${nums[1]}) ${op[1]} Number(${nums[2]})`);cso=cso.replace(RegExp(regex),result)}};for(let e=0;et%r).replace(nsf("@sin",nm,1),(e,t)=>Math.sin(t)).replace(nsf("@asin",nm,1),(e,t)=>Math.asin(t)).replace(nsf("@cos",nm,1),(e,t)=>Math.cos(t)).replace(nsf("@acos",nm,1),(e,t)=>Math.acos(t)).replace(nsf("@tan",nm,1),(e,t)=>Math.tan(t)).replace(nsf("@atan",nm,1),(e,t)=>Math.atan(t)).replace(nsf("@abs",nm,1),(e,t)=>Math.abs(t)).replace(nsf("@floor",nm,1),(e,t)=>Math.floor(t)).replace(nsf("@ceil",nm,1),(e,t)=>Math.ceil(t)).replace(nsf("@percent",nm,1),(e,t)=>100*Number(t)+"%").replace(nsf("@log",nm,2),(e,t,r)=>Math.log(r)/(t?Math.log(t):1)).replace(nsf("@root",nm,2),(e,t,r)=>Math.pow(r,1/t)).replace(nsf("@round",nm,2),(e,t,r)=>Math.round((Number(t)+Number.EPSILON)*Math.pow(10,r))/Math.pow(10,r)).replace(nsf("@min",nm),(e,...t)=>{let r=[];for(let s of t)s&&!s.toString().includes(e)&&r.push(s);return Math.min(...r)}).replace(nsf("@max",nm),(e,...t)=>{let r=[];for(let s of t)s&&!s.toString().includes(e)&&r.push(s);return Math.max(...r)}).replace(nsf("@clamp",nm,3),(e,t,r,s)=>(s=s?s:t)).replace(nsf("@degrees","("+nm+")\\s*(deg|rad|grad)?",1),(e,t,r,s)=>"grad"===s?10*r/9:r/Math.PI*180).replace(nsf("@radians","("+nm+")\\s*(deg|rad|grad)?",1),(e,t,r,s)=>"grad"===s?r*Math.PI/200:r*Math.PI/180).replace(nsf("@gradians","("+nm+")\\s*(deg|rad|grad)?",1),(e,t,r,s)=>"rad"===s?r/Math.PI*200:.9*r),cso=cso.replace(nsf("@encode"),(e,t)=>encodeURIComponent(t)).replace(nsf("@length"),(e,t)=>t.trim().length).replace(nsf("@replace"),(e,t,r,s)=>{if(r.trim().startsWith("/")){let e=r.replace(/\/(.+?)\/[gimusy]*/,"$1").trim(),t=r.replace(/\/.+?\/([gimusy]*)/,"$1").trim(" ")||"s";r=RegExp(e,t)}return t.trim().replace(r,s.trim())}),cso=cso.replace(nsf("@color"),(e,t,r,s,n,a)=>{if(r.startsWith("#")){let e;r.length-1==3?e=[r[1].repeat(2),r[2].repeat(2),r[3].repeat(2)]:r.length-1==4?e=[r[1].repeat(2),r[2].repeat(2),r[3].repeat(2),r[4].repeat(2)]:r.length-1==6?e=[r[1]+r[2],r[3]+r[4],r[5]+r[6]]:r.length-1==8&&(e=[r[1]+r[2],r[3]+r[4],r[5]+r[6],r[7]+r[8]]),r=parseInt(e[0],16),s=parseInt(e[1],16)||0,n=parseInt(e[2],16)||0,a=parseInt(e[3],16)||0}if("hash"===t||"#"===t){if(!r)return"#000";if(r.toString().startsWith("#"))return r;const e=e=>(Number(e)||0).toString(16).padStart(2,"0");return"#"+e(r)+e(s)+e(n)+(e(a)<1?"":e(a))}return["rgb","hsl"].includes(t)?`${t}(${Number(r)}, ${Number(s)}, ${Number(n)})`:["rgba","hsla"].includes(t)?`${t}(${Number(r)}, ${Number(s)}, ${Number(n)}, ${Number(a)})`:void 0}).replace(nsf("@colorpart",["w+","(?:rgba?|hsla?)\\(\\s*\\d{1,3},\\s*\\d{1,3},\\s*\\d{1,3}(?:,\\s*\\d{1,3})?\\s*\\)|#[0-9a-f]{3,8}"]),(e,t,r)=>{t=t.trim().toLowerCase();let s=[];const n=(e,t)=>Number("0x"+e.substr(t,2)).toString();if((r=r.trim().toLowerCase()).startsWith("#")){let e=r.replace("#","");3===e.length&&(e=e[0].repeat(2)+e[1].repeat(2)+e[2].repeat(2)+"00"),4===e.length&&(e=e[0].repeat(2)+e[1].repeat(2)+e[2].repeat(2)+e[3].repeat(2)),6===e.length&&(e+="00"),s=[n(e,0),n(e,2),n(e,4),n(e,6)]}else s=r.replace(/^\s*...a?\s*/,"").replace(/[()]/g,"").split(",");return r.startsWith("#")||r.startsWith("rgb")?t.startsWith("r")?s[0]:t.startsWith("g")?s[1]:t.startsWith("b")?s[2]:t.startsWith("a")?s[3]:(nse("func",["colorpart",t,"of color type rgb/rgba/#"]),r):r.startsWith("hsl")?t.startsWith("h")?s[0]:t.startsWith("s")?s[1]:t.startsWith("l")?s[2]:t.startsWith("a")?s[3]:(nse("func",["colorpart",t,"of color type hsl/hsla"]),r):(nse("func",["colorpart",t,"of unknown color type"]),r)});const parseLogic=arg=>{for(let e=0;e").replace(/</g,"<").replace(/\bor\b/gi,"||").replace(/\band\b/gi,"&&").replace(/\bnot\b/gi,"!").replace(/(.+?)\bnor\b(.+)?/gi,"!($1) && !($2)").replace(/(.+?)\bnand\b(.+)?/gi,"!($1) || !($2)").replace(/(.+?)\bxor\b(.+)?/gi,"($1 && !($2)) || (!($1) && $2)").replace(/(.+?)\bxnor\b(.+)?/gi,"$1 == $2").replace(/(?!=)(!?)=(==)?(?!=)/g,"$1$2==");return arg.match(/(<|<=|>|>=|==|!=|&|\||!)/)&&(arg=eval(arg)),["false","undefined","null","NaN",""].includes(arg)&&(arg=!1),arg},lrg=e=>RegExp(`(${snmr})\\s*(?:${e})\\s*(${snmr})`);cso=cso.replace(nsf("@bitwise"),args=>{let output=args.replace(/^\$\((.*)\)$/,"$1");output=output.replace(/&/g,"&").replace(/>/g,">").replace(/</g,"<");for(let i=0;ieval("~"+Number(a))).replace(lrg("or|\\|"),(_,a,b)=>eval(`(${Number(a)}) | (${Number(b)})`)).replace(lrg("nor"),(_,a,b)=>eval(`~ (${Number(a)}) | (${Number(b)})`)).replace(lrg("and|&"),(_,a,b)=>eval(`(${Number(a)}) & (${Number(b)})`)).replace(lrg("nand"),(_,a,b)=>eval(`~ (${Number(a)}) & (${Number(b)})`)).replace(lrg("xor"),(_,a,b)=>eval(`(${Number(a)}) ^ (${Number(b)})`)).replace(lrg("xnor"),(_,a,b)=>eval(`~ (${Number(a)}) ^ (${Number(b)})`));return output}).replace(nsf("@boolean"),(e,t)=>parseLogic(t)).replace(nsf("@if"),(e,t,r,s)=>parseLogic(t)?r:s||"")}if(cso=cso.replace(/\$\(.+?\)/g,e=>e.includes("static")?e:"").replace(/@endvar/g,"").replace(/(\s*;)+/g,";").replace(/\s+/g," ").replace(/} *(?!$)/g,"}\n").replace(/:(?=[^\s])/,": "),document.querySelectorAll(`[data-hash="${cso.hashCode()}"]`).length)break;let sE=document.createElement("style");sE.innerHTML="\n"+cso+"\n",sE.dataset.hash=cso.hashCode(),sE.dataset.source=src[s],(document.head||document.body).appendChild(sE)}}String.prototype.hashCode=function(e){let t=0;for(let e=0;e