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:[]},sources=[];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()),sources.push(fn.rel[e])}catch(t){nse(`File "${fn.rel[e]}" cannot be accessed.`)}for(let e of inline)sc.push(e.innerHTML),sources.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=[],lv=[],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),lv.push(s)}let loop=0;for(;(cso.indexOf("$(")>-1||loop<2)&&loop++"\\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")),number="[0-9]*[.]?[0-9]+",nmr="(?:0x|0b|0o)?[0-9]*[.]?[0-9]+",bnr=`\\(${nmr}\\)|${nmr}`,snr="[+-]?"+bnr,nur=`(${snr})\\s*(m|cm|mm|ft|in|em|rem|en|ex|px|pt|pc)?`,mr=e=>`(${bnr})\\s*${e.eR()}\\s*(${bnr})`,umr=e=>`${nur}\\s*${e.eR()}\\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",number,1),(e,t)=>Math.sin(t)).replace(nsf("@asin",number,1),(e,t)=>Math.asin(t)).replace(nsf("@cos",number,1),(e,t)=>Math.cos(t)).replace(nsf("@acos",number,1),(e,t)=>Math.acos(t)).replace(nsf("@tan",number,1),(e,t)=>Math.tan(t)).replace(nsf("@atan",number,1),(e,t)=>Math.atan(t)).replace(nsf("@abs",number,1),(e,t)=>Math.abs(t)).replace(nsf("@floor",number,1),(e,t)=>Math.floor(t)).replace(nsf("@ceil",number,1),(e,t)=>Math.ceil(t)).replace(nsf("@percent",number,1),(e,t)=>100*Number(t)+"%").replace(nsf("@log",number,2),(e,t,r)=>Math.log(r)/(t?Math.log(t):1)).replace(nsf("@root",number,2),(e,t,r)=>Math.pow(r,1/t)).replace(nsf("@round",number,2),(e,t,r)=>Math.round((Number(t)+Number.EPSILON)*Math.pow(10,r||0))/Math.pow(10,r||0)).replace(nsf("@min",number),(e,...t)=>{let r=[];for(let s of t)s&&!s.toString().includes(e)&&r.push(s);return Math.min(...r)}).replace(nsf("@max",number),(e,...t)=>{let r=[];for(let s of t)s&&!s.toString().includes(e)&&r.push(s);return Math.max(...r)}).replace(nsf("@clamp",number,3),(e,t,r,s)=>(s=s?s:t)).replace(nsf("@degrees","("+number+")\\s*(deg|rad|grad)?",1),(e,t,r,s)=>"grad"===s?10*r/9:r/Math.PI*180).replace(nsf("@radians","("+number+")\\s*(deg|rad|grad)?",1),(e,t,r,s)=>"grad"===s?r*Math.PI/200:r*Math.PI/180).replace(nsf("@gradians","("+number+")\\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())});const car=`(?:rgba?|hsla?)\\(\\s*\\d{1,3}\\s*,${`\\s*,\\s*${number}%?\\s*`.repeat(3)}(?:\\s*,\\s*${number})?\\s*\\)|#[0-9a-f]{3,8}`;cso=cso.replace(nsf("@color",["\\w+",number,number+"%?",number+"%?",number+"%?"],4),(e,t,r,s,n,a)=>{if("hash"===t||t.startsWith("hex")||"#"===t){if(!r)return"#000";r.startsWith("rgb")&&([r,s,n,a]=r.replace(/rgba?\(|\)/g,"").split(","));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","rgba"].includes(t)?(s.includes("%")&&(s=Number(s.replace(/%/,""))/100*256-1),n.includes("%")&&(n=Number(n.replace(/%/,""))/100*256-1),`${t}(${Number(r)}, ${Number(s)}, ${Number(n)}${a&&"rgba"===t?","+Number(a.replace(/%/g,"")):""}${a.includes("%")?"%":""})`):["hsl","hsla"].includes(t)?`${t}(${Number(r)}, ${Number(s.replace(/%/,""))}%, ${Number(n.replace(/%/,""))}%${a&&"hsla"===t?", "+Number(a.replace(/%/g,"")):""}${a.includes("%")?"%":""})`:void 0}).replace(nsf("@color",["\\w+",car]),(e,t,r)=>{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)]:[5,6].includes(r.length-1)?e=[r[1]+r[2],r[3]+r[4],r[5]+(r[6]||"0")]:[7,8].includes(r.length-1)&&(e=[r[1]+r[2],r[3]+r[4],r[5]+r[6],r[7]+(r[8]||"0")]),r=parseInt(e[0],16),b=parseInt(e[1],16).toString()||0,c=parseInt(e[2],16).toString()||0,d=parseInt(e[3],16)||0}else parts=r.replace(/^\s*...a?\s*/,"").replace(/[()]/g,"").split(","),[r,b,c,d]=parts;return`${t}(${r}, ${b}, ${c}${d?", "+d:""})`}).replace(nsf("@colorpart",["\\w+",car]),(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},lR=e=>RegExp(`(${snr})\\s*(?:${e})\\s*(${snr})`);cso=cso.replace(nsf("@bitwise"),(_,a)=>{a=a.replace(/&/g,"&").replace(/>/g,">").replace(/</g,"<");for(let i=0;ieval("~"+Number(a))).replace(lR("or|\\|"),(_,a,b)=>eval(`(${Number(a)}) | (${Number(b)})`)).replace(lR("nor"),(_,a,b)=>eval(`~ (${Number(a)}) | (${Number(b)})`)).replace(lR("and|&"),(_,a,b)=>eval(`(${Number(a)}) & (${Number(b)})`)).replace(lR("nand"),(_,a,b)=>eval(`~ (${Number(a)}) & (${Number(b)})`)).replace(lR("xor"),(_,a,b)=>eval(`(${Number(a)}) ^ (${Number(b)})`)).replace(lR("xnor"),(_,a,b)=>eval(`~ (${Number(a)}) ^ (${Number(b)})`));return a}).replace(nsf("@boolean"),(e,t)=>parseLogic(t)).replace(nsf("@if"),(e,t,r,s)=>parseLogic(t)?r:s||"")}if(cso=cso.replace(/\$\(.+?\)/g,"").replace(/@endvar/g,"").replace(/(\s*;)+/g,";").replace(/\s+/g," ").replace(/} *(?!$)/g,"}\n").replace(/:(?=[^\s])/,": ").replace(/\.?0{8,}\d/,"").replace(/(\d)(9{8,})\d?\b/g,(e,t)=>Number(t)+1),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=sources[s],(document.head||document.body).appendChild(se)}}String.prototype.hashCode=function(e){let t=0;for(let e=0;e