@fabi-play/sdk 0.3.0 → 0.5.0
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/README.md +84 -0
- package/dist/avatars.d.ts +26 -14
- package/dist/avatars.js +1 -1
- package/dist/chunks/{chunk-GFNOIOSX.js → chunk-H3BKYVPL.js} +301 -22
- package/dist/fabi-play.d.ts +193 -10
- package/dist/fabi-play.js +1 -1
- package/dist/fabi-play.schema.json +32 -3
- package/dist/fabi-play.umd.js +453 -26
- package/dist/fabi-play.umd.min.js +1 -1
- package/dist/index.d.ts +212 -11
- package/dist/index.js +166 -4
- package/dist/integrity.json +6 -6
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
/*! @fabi-play/sdk 0.3.0 | Fabi Play Kit License | https://docs.fabiplay.app */(function(we,te){var pe=typeof document<"u"?document.currentScript:null;typeof define=="function"&&define.amd?define([],function(){return te(pe)}):typeof module=="object"&&module&&module.exports?module.exports=te(pe):we.FabiPlay=te(pe)})(typeof globalThis<"u"?globalThis:typeof self<"u"?self:this,function(we){"use strict";var te={exports:{}},pe=te.exports,ye=Object.defineProperty,wt=Object.getOwnPropertyDescriptor,vt=Object.getOwnPropertyNames,Et=Object.prototype.hasOwnProperty,Mt=(e,t,a)=>t in e?ye(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,Le=(e,t)=>{for(var a in t)ye(e,a,{get:t[a],enumerable:!0})},At=(e,t,a,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of vt(t))!Et.call(e,o)&&o!==a&&ye(e,o,{get:()=>t[o],enumerable:!(s=wt(t,o))||s.enumerable});return e},Ct=e=>At(ye({},"__esModule",{value:!0}),e),Q=(e,t,a)=>Mt(e,typeof t!="symbol"?t+"":t,a),_e={};Le(_e,{install:()=>qa}),te.exports=Ct(_e);function St(e,t=window){const a=new Set,s=t.AudioContext;s&&(t.AudioContext=class extends s{constructor(...i){super(...i),a.add(this)}});let o=[],r=[];Promise.resolve(e).then(i=>{i.on("break-start",()=>{o=[...t.document.querySelectorAll("audio, video")].filter(c=>!c.paused),o.forEach(c=>c.pause()),r=[...a].filter(c=>c.state==="running"),r.forEach(c=>{c.suspend()})}),i.on("break-done",()=>{o.forEach(c=>{c.play().catch(()=>{})}),r.forEach(c=>{c.resume()}),o=[],r=[]})})}var zt={jump:"Space",squat:"ArrowDown",left:"ArrowLeft",right:"ArrowRight",clap:"Enter"};function Tt(e){if(e.trim()==="default")return;const t={};for(const a of e.split(",")){const[s,o]=a.split(":").map(r=>r.trim());s&&o&&(t[s]=o)}return t}var Ot={Space:[" ",32],Enter:["Enter",13],Escape:["Escape",27],ShiftLeft:["Shift",16],ArrowLeft:["ArrowLeft",37],ArrowUp:["ArrowUp",38],ArrowRight:["ArrowRight",39],ArrowDown:["ArrowDown",40]};function De(e){const t=Ot[e];if(t)return{key:t[0],code:e,keyCode:t[1]};const a=/^Key([A-Z])$/.exec(e);if(a)return{key:a[1].toLowerCase(),code:e,keyCode:a[1].charCodeAt(0)};const s=/^Digit([0-9])$/.exec(e);if(s)return{key:s[1],code:e,keyCode:48+Number(s[1])};throw new Error(`Fabi Play: unknown key "${e}" (use Space, Enter, Arrow\u2026, KeyA\u2026, Digit0\u2026)`)}var Pt=(e=document)=>({dispatch(t,a){const s=new KeyboardEvent(t,{key:a.key,code:a.code,bubbles:!0,cancelable:!0});for(const o of["keyCode","which"])Object.defineProperty(s,o,{get:()=>a.keyCode});(e.activeElement??e.body??e).dispatchEvent(s)}}),Ne=80,Lt=800;function _t(e,t=zt,a={}){const s=a.player===void 0&&e.input==="remote";let o=a.player??(s?e.players?.[0]??1:1);const r=a.target??Pt(),i=a.setTimeout??((y,k)=>setTimeout(y,k)),c=new Set;let h=0;const f=y=>{const k=t[y];!k||c.has(y)||(c.add(y),r.dispatch("keydown",De(k)))},n=y=>{const k=t[y];!k||!c.has(y)||(c.delete(y),r.dispatch("keyup",De(k)))},u=y=>{f(y),i(()=>n(y),Ne)},l=y=>{if(y.player!==o)return;const k={"lane-left":-1,"lane-center":0,"lane-right":1};switch(y.gesture){case"jump":f("jump"),i(()=>n("jump"),Lt);break;case"land":n("jump");break;case"squat":f("squat");break;case"stand":n("squat");break;case"clap":u("clap");break;default:{const x=k[y.gesture];if(x===void 0)break;const M=x>h?"right":"left";for(let g=0;g<Math.abs(x-h);g++)i(()=>u(M),g*(Ne*2));h=x}}},p=y=>{const k=y.players.find(x=>x.id===o);k&&(k.shape==="arms-up"?f("arms-up"):n("arms-up"))},b=[e.on("gesture",l),e.on("frame",p),e.on("break-start",()=>[...c].forEach(n)),e.on("turn",y=>{s&&([...c].forEach(n),o=y.players[0]??o,h=0)})];return()=>{b.forEach(y=>y()),[...c].forEach(n)}}function Dt(e=document){const t=e.createElement("div");t.setAttribute("aria-hidden","true"),t.style.cssText="position:fixed;left:0;top:0;width:56px;height:56px;margin:-28px 0 0 -28px;border-radius:50%;border:6px solid #FBE7B8;background:rgba(251,231,184,.25);pointer-events:none;z-index:2147483647;box-sizing:border-box;transition:transform 60ms linear",e.body.appendChild(t);const a=(s,o,...r)=>{const i=e.elementFromPoint(s,o)??e.body;for(const c of r){const h={bubbles:!0,cancelable:!0,clientX:s,clientY:o,pointerId:1,pointerType:"touch",isPrimary:!0};i.dispatchEvent(c.startsWith("pointer")?new PointerEvent(c,h):new MouseEvent(c,h))}};return{size:()=>({width:e.documentElement.clientWidth,height:e.documentElement.clientHeight}),move:(s,o)=>a(s,o,"pointermove","mousemove"),click:(s,o)=>a(s,o,"pointerdown","mousedown","pointerup","mouseup","click"),cursor:(s,o,r)=>{t.style.transform=`translate(${s}px, ${o}px) scale(${1-r*.35})`,t.style.borderColor=r>0?"#EE6A43":"#FBE7B8"}}}function Nt(e,t={}){const a=t.player??1,s=t.hand??"any",o=t.dwellMs??800,r=t.radius??.04,i=t.target??Dt();let c=null,h=!1;return e.on("frame",f=>{const n=f.players.find(g=>g.id===a);if(!n)return;const l=s==="left"?n.leftHand:s==="right"?n.rightHand:((g,N)=>g&&N?g.y<N.y?g:N:g??N)(n.leftHand,n.rightHand);if(!l)return;const{width:p,height:b}=i.size(),y=l.x*p,k=l.y*b;i.move(y,k),(!c||Math.hypot(y-c.x,k-c.y)>r*Math.hypot(p,b))&&(c={x:y,y:k,t:f.t},h=!1);const M=h?0:Math.min((f.t-c.t)/o,1);M>=1&&(h=!0,i.click(c.x,c.y)),i.cursor(y,k,h?0:M)})}var Ie=1,Re=33,P={nose:0,leftShoulder:11,rightShoulder:12,leftElbow:13,rightElbow:14,leftWrist:15,rightWrist:16,leftHip:23,rightHip:24,leftKnee:25,rightKnee:26,leftAnkle:27,rightAnkle:28},It=["3-5","6-8","9-12"],Rt=e=>It.includes(e),ve=4,Qe={"3-5":["bunny","bear","panda","penguin"],"6-8":["fox","lion","dragon","unicorn"],"9-12":["robot","astronaut","ninja","skater"]},Qt=Qe["6-8"],Be=(e,t)=>{const a=Rt(t)?Qe[t]:Qt;return a[Number.isInteger(e)&&e>=0?e%a.length:0]},Fe="fabi-play",ie=e=>({ns:Fe,...e});function He(e){if(!Ee(e))return;const{x:t,y:a,w:s,h:o}=e;return oe(t)&&oe(a)&&oe(s)&&oe(o)&&s>0&&o>0?{x:t,y:a,w:s,h:o}:void 0}var je=(e,t)=>e?{x:e.x+t.x*e.w,y:e.y+t.y*e.h}:{x:t.x,y:t.y},Ue=["high","medium","low"];function Bt(e){if(!Ee(e))return;const t={};return Ue.includes(e.tier)&&(t.tier=e.tier),oe(e.hz)&&e.hz>=20&&e.hz<=240&&(t.hz=Math.round(e.hz)),t.tier||t.hz?t:void 0}function Ft(e){const t={};return Ee(e)&&(oe(e.fps)&&e.fps>=0&&e.fps<1e3&&(t.fps=e.fps),typeof e.renderer=="string"&&/^[a-z0-9-]{1,16}$/.test(e.renderer)&&(t.renderer=e.renderer),Ue.includes(e.tier)&&(t.tier=e.tier)),t}var $e=e=>Number.isInteger(e)&&e>=1&&e<=ve;function Ht(e){return Array.isArray(e)&&e.length===1&&$e(e[0])?[e[0]]:void 0}function jt(e){if(!(!Array.isArray(e)||e.length<1||e.length>ve||!e.every($e)||new Set(e).size!==e.length))return[...e]}var Ee=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),oe=e=>typeof e=="number"&&Number.isFinite(e),Ut=12,$t=Re*4,qt=e=>Ut+e*$t,Wa=qt(ve),U="#4a382c",H="#2b2118",Y="#1c1f2b",qe="#fbefe3",Z="#f4897a",ce="#3a2a22",Ye=[{id:"fox",name:{en:"Fox",it:"Volpe"},band:"6-8",palette:{body:"#ee6a43",limbs:"#ee6a43",belly:qe,accent:"#ffd9c2",outline:H,hands:"#5a3426",feet:"#5a3426"},head:"wide",ears:"pointy",face:{eyes:"dot",mouth:"cat",nose:ce,muzzle:"cheeks"},tail:"fluffy",headExtras:[],bodyExtras:[]},{id:"mascot",name:{en:"Fabi",it:"Fabi"},band:"all",special:!0,palette:{body:"#ee6a43",limbs:"#ee6a43",belly:qe,accent:"#5a3426",outline:H,hands:"#5a3426",feet:"#5a3426"},head:"wide",ears:"pointy",face:{eyes:"bead",mouth:"open",nose:ce,muzzle:"band",cheeks:Z},tail:"brush",headExtras:[],bodyExtras:["star"],extraColors:["#ffd84a"]},{id:"bunny",name:{en:"Bunny",it:"Coniglietto"},band:"3-5",palette:{body:"#f9d0de",limbs:"#f9d0de",belly:"#fff6f8",accent:"#f4a0b9",outline:U},head:"round",ears:"long",face:{eyes:"dot",mouth:"cat",nose:"#e0607e",muzzle:"none",cheeks:Z},tail:"pom",headExtras:[],bodyExtras:[]},{id:"bear",name:{en:"Bear",it:"Orsetto"},band:"3-5",palette:{body:"#cf9f78",limbs:"#cf9f78",belly:"#f7e0bf",accent:"#f7e0bf",outline:U},head:"round",ears:"round",face:{eyes:"dot",mouth:"smile",nose:ce,muzzle:"oval",cheeks:Z},tail:"none",headExtras:[],bodyExtras:[]},{id:"cat",name:{en:"Cat",it:"Gattino"},band:"3-5",palette:{body:"#c8b6ee",limbs:"#c8b6ee",belly:"#f4eeff",accent:"#f7b3c8",outline:U,hands:"#f4eeff",feet:"#f4eeff"},head:"wide",ears:"pointy",face:{eyes:"big",eyeColor:"#3f9a5a",mouth:"cat",nose:"#f07a9a",muzzle:"none",cheeks:Z},tail:"long",headExtras:["whiskers"],bodyExtras:[]},{id:"panda",name:{en:"Panda",it:"Panda"},band:"3-5",palette:{body:"#ffffff",limbs:"#6e6674",belly:"#ffffff",accent:"#6e6674",outline:U,ears:"#6e6674"},head:"wide",ears:"round",face:{eyes:"mask",mouth:"smile",nose:"#2f2a2c",muzzle:"none",cheeks:"#f6a3a3"},tail:"none",headExtras:[],bodyExtras:[]},{id:"penguin",name:{en:"Penguin",it:"Pinguino"},band:"3-5",palette:{body:"#6c8fca",limbs:"#6c8fca",belly:"#ffffff",accent:"#f9b95c",outline:U,feet:"#f9b95c"},head:"tall",ears:"none",face:{eyes:"dot",mouth:"beak",muzzle:"heart",cheeks:"#f6a3a3"},tail:"none",headExtras:[],bodyExtras:["flippers","scarf"],extraColors:["#f6907a"]},{id:"frog",name:{en:"Frog",it:"Ranocchio"},band:"3-5",palette:{body:"#8fd487",limbs:"#8fd487",belly:"#e6f7cc",accent:"#62ad62",outline:U},head:"wide",ears:"none",face:{eyes:"big",eyesOnTop:!0,mouth:"open",muzzle:"none",cheeks:"#f59b8f"},tail:"none",headExtras:[],bodyExtras:["flippers","spots"],extraColors:["#62ad62","#b0e6a4"]},{id:"lion",name:{en:"Lion",it:"Leoncino"},band:"6-8",palette:{body:"#f6c454",limbs:"#f6c454",belly:"#fde7b0",accent:"#fde7b0",outline:H},head:"round",ears:"round",face:{eyes:"dot",mouth:"cat",nose:"#8a4b2a",muzzle:"oval",cheeks:Z},tail:"tuft",headExtras:["mane"],bodyExtras:[],extraColors:["#c8692e"]},{id:"unicorn",name:{en:"Unicorn",it:"Unicorno"},band:"6-8",palette:{body:"#fbf5ff",limbs:"#fbf5ff",belly:"#efe0ff",accent:"#fbd46a",outline:H,hands:"#c9a6f2",feet:"#c9a6f2"},head:"tall",ears:"unicorn",face:{eyes:"dot",mouth:"smile",muzzle:"none",cheeks:"#f7a6c8"},tail:"none",headExtras:["rainbow-mane"],bodyExtras:[],extraColors:["#f58cc0","#8fd3f4","#a98ff2"]},{id:"dragon",name:{en:"Little Dragon",it:"Draghetto"},band:"6-8",palette:{body:"#8a63d2",limbs:"#8a63d2",belly:"#fbd46a",accent:"#5fd0b5",outline:H},head:"wide",ears:"horns",face:{eyes:"big",eyeColor:"#3a2a6a",mouth:"teeth",muzzle:"none",cheeks:"#f59bc0"},tail:"arrow",headExtras:[],bodyExtras:["wings"]},{id:"robot",name:{en:"Robot",it:"Robot"},band:"9-12",palette:{body:"#b9c7d2",limbs:"#8b9aa6",belly:"#b9c7d2",accent:"#ee6a43",outline:Y,hands:"#ee6a43",feet:"#6b7a86"},head:"square",ears:"antenna",face:{eyes:"screen",eyeColor:"#7ff0ff",mouth:"grill",muzzle:"none"},tail:"none",headExtras:["bolts"],bodyExtras:["panel","joints","boots"],extraColors:["#ff7a6b","#fbd46a","#7ff0ff"]},{id:"astronaut",name:{en:"Astronaut",it:"Astronauta"},band:"9-12",palette:{body:"#f4f1ec",limbs:"#f4f1ec",belly:"#f4f1ec",accent:"#ee6a43",outline:Y,hands:"#9fb0bd",feet:"#9fb0bd"},head:"round",ears:"none",face:{eyes:"visor",mouth:"smile",muzzle:"none"},tail:"none",headExtras:["helmet"],bodyExtras:["backpack","badge","boots"],extraColors:["#c9d3db"]},{id:"dinosaur",name:{en:"Dinosaur",it:"Dinosauro"},band:"6-8",palette:{body:"#3fb3a6",limbs:"#3fb3a6",belly:"#c9f0d6",accent:"#f79a3e",outline:H},head:"wide",ears:"none",face:{eyes:"dot",mouth:"teeth",muzzle:"none",cheeks:"#f59b8f"},tail:"spiky",headExtras:["spikes","spots"],bodyExtras:[],extraColors:["#2b8f84","#7fd3c6"]},{id:"monkey",name:{en:"Monkey",it:"Scimmietta"},band:"6-8",palette:{body:"#7b5234",limbs:"#7b5234",belly:"#f2c9a0",accent:"#f2c9a0",outline:H,hands:"#f2c9a0",feet:"#f2c9a0"},head:"round",ears:"side",face:{eyes:"dot",mouth:"open",nose:"#5a3a26",muzzle:"monkey",cheeks:Z},tail:"curl",headExtras:["tuft"],bodyExtras:[]},{id:"koala",name:{en:"Koala",it:"Koala"},band:"3-5",palette:{body:"#b7bcc6",limbs:"#b7bcc6",belly:"#eef0f3",accent:"#f4dbe2",outline:U},head:"wide",ears:"big-round",face:{eyes:"dot",mouth:"smile",nose:"#3b3438",muzzle:"none",cheeks:"#f4a3b0"},tail:"none",headExtras:[],bodyExtras:[]},{id:"tiger",name:{en:"Tiger",it:"Tigrotto"},band:"6-8",palette:{body:"#f9a33a",limbs:"#f9a33a",belly:"#fff1dc",accent:"#fff1dc",outline:H},head:"wide",ears:"round",face:{eyes:"dot",mouth:"cat",nose:"#e2607a",muzzle:"oval",cheeks:Z},tail:"striped",headExtras:["stripes","whiskers"],bodyExtras:[],extraColors:["#3a2a22"]},{id:"owl",name:{en:"Owl",it:"Gufetto"},band:"3-5",palette:{body:"#8ec0e6",limbs:"#8ec0e6",belly:"#e3f2fc",accent:"#639cc9",outline:U,feet:"#f9b95c",hands:"#639cc9"},head:"tall",ears:"tufts",face:{eyes:"big",eyeColor:U,eyeRing:"#fde08a",mouth:"beak",muzzle:"none",cheeks:"#f6a8b4"},tail:"none",headExtras:[],bodyExtras:["feathers"]},{id:"alien",name:{en:"Alien",it:"Alieno"},band:"9-12",palette:{body:"#9ee05a",limbs:"#9ee05a",belly:"#d8f5a8",accent:"#b07cf2",outline:Y},head:"bulb",ears:"antennae",face:{eyes:"almond",eyeColor:"#1e1838",mouth:"smirk",muzzle:"none"},tail:"none",headExtras:[],bodyExtras:["spots"],extraColors:["#7cc23e","#7cc23e"]},{id:"ghost",name:{en:"Friendly Ghost",it:"Fantasmino"},band:"6-8",palette:{body:"#e6f4ff",limbs:"#e6f4ff",belly:"#e6f4ff",accent:"#bcd9f2",outline:H},head:"round",ears:"none",face:{eyes:"dot",mouth:"open",muzzle:"none",cheeks:"#f7a6c8"},tail:"none",headExtras:["curl"],bodyExtras:["sheet"]},{id:"octopus",name:{en:"Octopus",it:"Polpetto"},band:"6-8",palette:{body:"#e0578a",limbs:"#e0578a",belly:"#f7b3cc",accent:"#f7b3cc",outline:H,hands:"#f7b3cc",feet:"#f7b3cc"},head:"tall",ears:"none",face:{eyes:"big",eyeColor:"#3a2140",mouth:"smile",muzzle:"none",cheeks:"#ffd0a0"},tail:"none",headExtras:["spots"],bodyExtras:["tentacles"],extraColors:["#f7b3cc","#f7b3cc"]},{id:"chick",name:{en:"Chick",it:"Pulcino"},band:"3-5",palette:{body:"#ffd45e",limbs:"#ffd45e",belly:"#fff2c2",accent:"#ffa04a",outline:U,hands:"#ffc23d",feet:"#ffa04a"},head:"round",ears:"none",face:{eyes:"dot",mouth:"beak",muzzle:"none",cheeks:Z},tail:"none",headExtras:["eggshell"],bodyExtras:[],extraColors:["#fffaf0"]},{id:"puppy",name:{en:"Puppy",it:"Cucciolo"},band:"3-5",palette:{body:"#f4e4cf",limbs:"#f4e4cf",belly:"#fffaf2",accent:"#f29aa4",outline:U,ears:"#b58262",hands:"#e6caa6",feet:"#e6caa6"},head:"wide",ears:"floppy",face:{eyes:"dot",mouth:"open",nose:ce,muzzle:"oval",cheeks:Z},tail:"curl",headExtras:["eye-spot"],bodyExtras:[]},{id:"lamb",name:{en:"Lamb",it:"Agnellino"},band:"3-5",palette:{body:"#fdf8ee",limbs:"#e3d1c2",belly:"#fffdf8",accent:"#f6bcc2",outline:U,skin:"#f7dccb",hands:"#a58c7e",feet:"#a58c7e"},head:"round",ears:"droopy",face:{eyes:"dot",mouth:"smile",nose:"#e591a0",muzzle:"none",cheeks:Z},tail:"pom",headExtras:["wool"],bodyExtras:["wool"]},{id:"duckling",name:{en:"Duckling",it:"Anatroccolo"},band:"3-5",palette:{body:"#fff1a6",limbs:"#fff1a6",belly:"#fffbe0",accent:"#ff9f43",outline:U,feet:"#ff9f43"},head:"tall",ears:"none",face:{eyes:"dot",mouth:"bill",muzzle:"none",cheeks:Z},tail:"none",headExtras:["curl"],bodyExtras:["flippers","scarf"],extraColors:["#86cfe0"]},{id:"shark",name:{en:"Shark",it:"Squalo"},band:"6-8",palette:{body:"#6c95c4",limbs:"#6c95c4",belly:"#eef5fb",accent:"#4c76a8",outline:H,hands:"#eef5fb",feet:"#4c76a8"},head:"wide",ears:"fin",face:{eyes:"dot",mouth:"jaws",muzzle:"none",cheeks:"#f59bb0"},tail:"fish",headExtras:["gills"],bodyExtras:[]},{id:"wolf",name:{en:"Wolf",it:"Lupo"},band:"6-8",palette:{body:"#8f9bb3",limbs:"#8f9bb3",belly:"#eef1f6",accent:"#f3b8c4",outline:H,hands:"#5a647a",feet:"#5a647a"},head:"round",ears:"pointy",face:{eyes:"dot",mouth:"open",nose:ce,muzzle:"oval",cheeks:"#f4a3b0"},tail:"fluffy",headExtras:["ruff","forehead"],bodyExtras:[],extraColors:["#636d84"]},{id:"parrot",name:{en:"Parrot",it:"Pappagallo"},band:"6-8",palette:{body:"#e8503f",limbs:"#e8503f",belly:"#ffd25a",accent:"#f6e6c4",outline:H,hands:"#3a9bdc",feet:"#8a7a70"},head:"round",ears:"none",face:{eyes:"big",eyeColor:H,eyeRing:"#ffffff",mouth:"hook",muzzle:"none",cheeks:"#ffb0a0"},tail:"plume",headExtras:["crest"],bodyExtras:["feathers"],extraColors:["#ffd25a","#3fae5a","#3a9bdc"]},{id:"ninja",name:{en:"Ninja",it:"Ninja"},band:"9-12",palette:{body:"#2f3a56",limbs:"#2f3a56",belly:"#2f3a56",accent:"#36c9bb",outline:Y,skin:"#b07a52",hands:"#222a40",feet:"#222a40"},head:"round",ears:"none",face:{eyes:"calm",mouth:"none",muzzle:"none",brows:"#2a1d16"},tail:"none",headExtras:["ninja-hood"],bodyExtras:["belt"],extraColors:["#36c9bb","#36c9bb","#36c9bb"]},{id:"skater",name:{en:"Skater",it:"Skater"},band:"9-12",palette:{body:"#3a8fc0",limbs:"#2c3e57",belly:"#2f7aa6",accent:"#ffcf3a",outline:Y,skin:"#f2c9a5",hair:"#7a4a2a",hands:"#f2c9a5",feet:"#eef1f5"},head:"round",ears:"human",face:{eyes:"calm",mouth:"smirk",muzzle:"none",brows:"#5a3520"},tail:"none",headExtras:["hair","cap"],bodyExtras:["pocket","joints"],extraColors:["#ff5d73"]},{id:"explorer",name:{en:"Explorer",it:"Giramondo"},band:"9-12",palette:{body:"#5f8f5b",limbs:"#5f8f5b",belly:"#5f8f5b",accent:"#d9bb7e",outline:Y,skin:"#7a4a30",hair:"#1d1410",hands:"#7a4a30",feet:"#6b4a2a"},head:"round",ears:"human",face:{eyes:"calm",mouth:"smile",muzzle:"none",brows:"#1d1410"},tail:"none",headExtras:["curls","safari-hat"],bodyExtras:["backpack","straps","boots"],extraColors:["#e07b39","#6b4a2a"]},{id:"wizard",name:{en:"Wizard",it:"Mago"},band:"9-12",palette:{body:"#5b3fa0",limbs:"#5b3fa0",belly:"#5b3fa0",accent:"#3d5fc8",outline:Y,skin:"#c98d62",hair:"#a8452a",hands:"#c98d62",feet:"#33255e"},head:"round",ears:"human",face:{eyes:"calm",mouth:"smile",muzzle:"none",brows:"#7a301c"},tail:"none",headExtras:["locks","wizard-hat"],bodyExtras:["robe","belt"],extraColors:["#ffd84a","#ffd84a","#ffd84a"]},{id:"knight",name:{en:"Knight",it:"Cavaliere"},band:"9-12",palette:{body:"#bcc7d3",limbs:"#8e9aa8",belly:"#dce3ea",accent:"#d8443a",outline:Y,hands:"#6c7786",feet:"#6c7786"},head:"bucket",ears:"none",face:{eyes:"slit",eyeColor:"#bfefff",mouth:"none",muzzle:"none"},tail:"none",headExtras:["plume"],bodyExtras:["pauldrons","emblem","boots"],extraColors:["#d8443a"]},{id:"racer",name:{en:"Racer",it:"Pilota"},band:"9-12",palette:{body:"#ff6a2b",limbs:"#ff6a2b",belly:"#ffffff",accent:"#ffffff",outline:Y,hands:"#232838",feet:"#232838"},head:"round",ears:"none",face:{eyes:"goggle",eyeColor:"#7fd6ff",mouth:"none",muzzle:"none"},tail:"none",headExtras:["stripe"],bodyExtras:["racing-stripe","boots"]},{id:"pirate",name:{en:"Pirate",it:"Pirata"},band:"9-12",palette:{body:"#f2efe6",limbs:"#2a3d6e",belly:"#f2efe6",accent:"#d94545",outline:Y,skin:"#d9a072",hair:"#2b1a12",hands:"#d9a072",feet:"#3a2a20"},head:"round",ears:"human",face:{eyes:"calm",mouth:"smirk",muzzle:"none",brows:"#2b1a12"},tail:"none",headExtras:["locks","bandana","eye-patch"],bodyExtras:["stripes","belt","boots"],extraColors:["#d94545","#2a3d6e","#4a3426"]},{id:"diver",name:{en:"Diver",it:"Sub"},band:"9-12",palette:{body:"#1f6582",limbs:"#1f6582",belly:"#1f6582",accent:"#ffb020",outline:Y,skin:"#e8b48a",hair:"#c98f2e",hands:"#1b4f66",feet:"#ffb020"},head:"round",ears:"human",face:{eyes:"calm",mouth:"smile",muzzle:"none",brows:"#8a5a1a"},tail:"none",headExtras:["curls","dive-mask"],bodyExtras:["tank","fins"],extraColors:["#c9d3db"]},{id:"hero",name:{en:"Hero",it:"Supereroe"},band:"9-12",palette:{body:"#3557c8",limbs:"#3557c8",belly:"#3557c8",accent:"#e0403a",outline:Y,skin:"#5a3825",hair:"#141010",hands:"#e0403a",feet:"#e0403a"},head:"round",ears:"human",face:{eyes:"calm",mouth:"smirk",muzzle:"none",brows:"#141010"},tail:"none",headExtras:["hair","domino"],bodyExtras:["cape","emblem","boots"],extraColors:["#ffd84a"]}],D={M:0,L:1,Q:2,C:3,Z:4},Ze=[2,2,4,6,0];function Me(e,t){for(const a of t)Yt(e,a)}function Yt(e,t){if(t.k==="group"){e.save(),e.translate(t.x,t.y),t.rot&&e.rotate(t.rot),t.s!==void 0&&t.s!==1&&e.scale(t.s,t.s),t.alpha!==void 0&&(e.globalAlpha*=t.alpha),Me(e,t.items),e.restore();return}switch(e.save(),t.alpha!==void 0&&(e.globalAlpha*=t.alpha),e.beginPath(),t.k){case"circle":e.arc(t.x,t.y,Math.max(t.r,0),0,Math.PI*2);break;case"ellipse":e.ellipse(t.x,t.y,Math.max(t.rx,0),Math.max(t.ry,0),t.rot??0,0,Math.PI*2);break;case"rect":Zt(e,t);break;case"path":typeof t.d=="string"?Xt(e,t.d):Kt(e,t.d);break;case"line":e.moveTo(t.pts[0]??0,t.pts[1]??0);for(let a=2;a+1<t.pts.length;a+=2)e.lineTo(t.pts[a],t.pts[a+1]);break}e.lineCap="round",e.lineJoin="round",t.fill&&t.k!=="line"&&(e.fillStyle=t.fill,e.fill()),t.stroke&&(t.lw??1)>0&&(e.strokeStyle=t.stroke,e.lineWidth=t.lw??1,e.stroke()),e.restore()}function Zt(e,t){const a=Math.max(0,Math.min(t.r,t.w/2,t.h/2));e.translate(t.x,t.y),t.rot&&e.rotate(t.rot);const s=-t.w/2,o=-t.h/2;e.moveTo(s+a,o),e.lineTo(s+t.w-a,o),e.quadraticCurveTo(s+t.w,o,s+t.w,o+a),e.lineTo(s+t.w,o+t.h-a),e.quadraticCurveTo(s+t.w,o+t.h,s+t.w-a,o+t.h),e.lineTo(s+a,o+t.h),e.quadraticCurveTo(s,o+t.h,s,o+t.h-a),e.lineTo(s,o+a),e.quadraticCurveTo(s,o,s+a,o),e.closePath()}function Kt(e,t){for(let a=0;a<t.length;){const s=t[a++];if(s===D.M)e.moveTo(t[a],t[a+1]);else if(s===D.L)e.lineTo(t[a],t[a+1]);else if(s===D.Q)e.quadraticCurveTo(t[a],t[a+1],t[a+2],t[a+3]);else if(s===D.C)e.bezierCurveTo(t[a],t[a+1],t[a+2],t[a+3],t[a+4],t[a+5]);else if(s===D.Z)e.closePath();else return;a+=Ze[s]}}function Wt(e){if(typeof e=="string")return(e.match(/-?\d*\.?\d+(?:e-?\d+)?/gi)??[]).map(Number);const t=[];for(let a=0;a<e.length;){const s=Ze[e[a++]];if(s===void 0)break;for(let o=0;o<s;o++)t.push(e[a+o]);a+=s}return t}function Xt(e,t){const a=t.match(/[MLQCZ]|-?\d*\.?\d+(?:e-?\d+)?/gi)??[];let s="",o=0;const r=()=>Number(a[o++]);for(;o<a.length;){const i=a[o];if(/[MLQCZ]/i.test(i)&&(s=i.toUpperCase(),o++,s==="Z")){e.closePath();continue}s==="M"?(e.moveTo(r(),r()),s="L"):s==="L"?e.lineTo(r(),r()):s==="Q"?e.quadraticCurveTo(r(),r(),r(),r()):s==="C"?e.bezierCurveTo(r(),r(),r(),r(),r(),r()):o++}}var S=e=>{const t=Math.round(e*100)/100;return t===0?0:t};function _(e,t=.5){const a=e.length;if(a<3)return[];const s=(c,h,f)=>({x:c.x+(h.x-c.x)*f,y:c.y+(h.y-c.y)*f}),o=Math.min(Math.max(t,0),.5),r=s(e[0],e[1],o),i=[D.M,S(r.x),S(r.y)];for(let c=1;c<=a;c++){const h=e[(c-1)%a],f=e[c%a],n=e[(c+1)%a],u=s(h,f,1-o),l=s(f,n,o);i.push(D.L,S(u.x),S(u.y),D.Q,S(f.x),S(f.y),S(l.x),S(l.y))}return i.push(D.Z),i}function L(e,t=1){const a=e.length;if(a<3)return[];const s=[D.M,S(e[0].x),S(e[0].y)],o=t/6;for(let r=0;r<a;r++){const i=e[(r-1+a)%a],c=e[r],h=e[(r+1)%a],f=e[(r+2)%a];s.push(D.C,S(c.x+(h.x-i.x)*o),S(c.y+(h.y-i.y)*o),S(h.x-(f.x-c.x)*o),S(h.y-(f.y-c.y)*o),S(h.x),S(h.y))}return s.push(D.Z),s}function fe(e){const t=e.length;if(t<2)return[];const a=[D.M,S(e[0].x),S(e[0].y)];for(let s=0;s<t-1;s++){const o=e[Math.max(s-1,0)],r=e[s],i=e[s+1],c=e[Math.min(s+2,t-1)];a.push(D.C,S(r.x+(i.x-o.x)/6),S(r.y+(i.y-o.y)/6),S(i.x-(c.x-r.x)/6),S(i.y-(c.y-r.y)/6),S(i.x),S(i.y))}return a}var be="M0 -1 L0.29 -0.4 L0.95 -0.31 L0.47 0.15 L0.59 0.81 L0 0.5 L-0.59 0.81 L-0.47 0.15 L-0.95 -0.31 L-0.29 -0.4 Z",B="#ffffff",E=[-1,1],Ke="#3a2420",Gt="#f2808f",Ae="#26324a",Vt="#ffd84a",j=(...e)=>{const t=[];for(let a=0;a+1<e.length;a+=2)t.push({x:e[a],y:e[a+1]});return t};function We(e,t){const a=e.palette,s=[],o={stroke:a.outline,lw:t},r=n=>e.headExtras.includes(n),i=(n,u)=>e.extraColors?.[n]??u;if(r("mane")){for(let u=0;u<12;u++){const l=u/12*Math.PI*2;s.push({k:"circle",x:Math.cos(l)*1.02,y:Math.sin(l)*1+.04,r:.42,fill:i(0,a.accent),...o})}s.push({k:"circle",x:0,y:.04,r:1.08,fill:i(0,a.accent)})}if(r("rainbow-mane")){const n=e.extraColors??["#f59ac0","#fbd46a","#8fd3f4"];[[.98,.05,.3,.5,-.25],[.92,.58,.26,.42,-.1],[.62,.92,.22,.32,.4]].forEach(([l,p,b,y,k],x)=>s.push({k:"ellipse",x:l,y:p,rx:b,ry:y,rot:k,fill:n[x%n.length],...o}))}if(r("spikes"))for(const n of[-.55,0,.55]){const u=he(n,1.48),l=he(n-.32,.86),p=he(n+.32,.86);s.push({k:"path",d:_([l,u,p],.22),fill:a.accent,...o})}if(r("curl")&&s.push({k:"path",d:L([{x:-.2,y:-.9},{x:-.05,y:-1.3},{x:.32,y:-1.42},{x:.16,y:-1.18},{x:.2,y:-.9}]),fill:a.body,...o}),r("wool"))for(let n=0;n<=8;n++){const u=-1.75+n/8*3.5;s.push({k:"circle",x:Math.sin(u)*.98,y:-Math.cos(u)*.92-.04,r:.34,fill:a.body,...o})}if(r("crest")&&[-.38,0,.38].forEach((n,u)=>{const l=he(n,1.12);s.push({k:"ellipse",x:l.x,y:l.y,rx:.15,ry:.42,rot:n,fill:i(u,a.accent),...o})}),r("plume")&&s.push({k:"path",d:L(j(-.12,-.92,-.2,-1.42,.1,-1.78,.62,-1.74,.36,-1.46,.16,-.98)),fill:a.accent,...o}),r("locks")&&s.push({k:"path",d:L(j(-1.14,.58,-1.24,-.2,-.86,-.98,0,-1.2,.86,-.98,1.24,-.2,1.14,.58,.8,.66,0,.2,-.8,.66)),fill:a.hair??a.outline,...o}),r("ninja-hood"))for(const[n,u]of[[.35,.5],[.85,.42]])s.push({k:"ellipse",x:1+Math.cos(n)*u*.8,y:-.5+Math.sin(n)*u*.8,rx:u,ry:.11,rot:n,fill:a.accent,...o});if(r("bandana"))for(const[n,u]of[[Math.PI-.5,.42],[Math.PI-1,.36]])s.push({k:"ellipse",x:-.98+Math.cos(n)*u*.8,y:-.36+Math.sin(n)*u*.8,rx:u,ry:.12,rot:n,fill:a.accent,...o});if(r("ruff"))for(const n of E)s.push({k:"path",d:_(j(n*.7,-.3,n*1.32,0,n*1.02,.18,n*1.26,.46,n*.86,.56,n*.98,.84,n*.4,.7),.25),fill:a.body,...o});if(e.face.eyesOnTop)for(const n of E)s.push({k:"circle",x:n*.46,y:-.72,r:.38,fill:a.body,...o});s.push(...aa(e,t)),s.push(Jt(e,o));const c=e.face.muzzle,h=a.belly;if(c==="oval"&&s.push({k:"ellipse",x:0,y:.4,rx:.46,ry:.32,fill:h}),c==="monkey"){for(const n of E)s.push({k:"circle",x:n*.32,y:-.04,r:.38,fill:h});s.push({k:"ellipse",x:0,y:.4,rx:.56,ry:.4,fill:h})}if(c==="heart"){for(const n of E)s.push({k:"circle",x:n*.36,y:.02,r:.5,fill:h});s.push({k:"ellipse",x:0,y:.38,rx:.66,ry:.48,fill:h})}if(c==="disc")for(const n of E)s.push({k:"circle",x:n*.4,y:.02,r:.44,fill:h});if(c==="cheeks")for(const n of E)s.push({k:"ellipse",x:n*.4,y:.44,rx:.44,ry:.32,fill:h});if(c==="band"&&s.push({k:"path",d:ta(e,t),fill:h}),r("stripes")){const n=i(0,a.outline);s.push({k:"line",pts:[0,-.97,0,-.66],stroke:n,lw:.13});for(const u of E)s.push({k:"line",pts:[u*.3,-.93,u*.24,-.7],stroke:n,lw:.1}),s.push({k:"line",pts:[u*.98,-.05,u*.74,0],stroke:n,lw:.1}),s.push({k:"line",pts:[u*.94,.22,u*.74,.22],stroke:n,lw:.09})}if(r("spots")){const n=i(1,a.belly);s.push({k:"circle",x:-.55,y:-.5,r:.15,fill:n}),s.push({k:"circle",x:.58,y:-.42,r:.11,fill:n}),s.push({k:"circle",x:.22,y:-.76,r:.09,fill:n})}if(r("forehead")&&s.push({k:"path",d:L(j(-.62,-.66,0,-.86,.62,-.66,.26,-.36,0,-.1,-.26,-.36),.9),fill:i(0,a.accent)}),r("eye-spot")&&s.push({k:"ellipse",x:.42,y:-.06,rx:.3,ry:.33,rot:.3,fill:a.ears??a.accent}),r("gills"))for(const n of E)for(const u of[0,.12,.24])s.push({k:"path",d:`M${n*(.66+u)} 0.06 Q${n*(.6+u)} 0.22 ${n*(.66+u)} 0.38`,stroke:a.accent,lw:t*.9});const f=a.hair??a.outline;if(r("hair")&&s.push({k:"path",d:L(j(-1.02,-.06,-1.02,-.58,-.62,-1.04,.08,-1.14,.76,-.92,1.05,-.42,1,-.06,.84,-.4,.42,-.5,.06,-.4,-.34,-.56,-.74,-.38)),fill:f,...o}),r("locks")&&s.push({k:"path",d:L(j(-1,-.08,-.98,-.62,-.56,-1.02,0,-1.1,.56,-1.02,.98,-.62,1,-.08,.8,-.38,.36,-.44,0,-.4,-.36,-.44,-.8,-.38)),fill:f,...o}),r("curls")){for(let n=0;n<7;n++){const u=he(-1.3+n/6*2.6,.86);s.push({k:"circle",x:u.x,y:u.y,r:.3,fill:f,...o})}s.push({k:"ellipse",x:0,y:-.64,rx:.8,ry:.36,fill:f})}if(r("ninja-hood")&&(s.push({k:"rect",x:0,y:0,w:1.56,h:.6,r:.28,fill:a.skin??B,stroke:a.outline,lw:t*.8}),s.push({k:"path",d:"M-0.98 -0.42 Q0 -0.74 0.98 -0.42 L1.0 -0.62 Q0 -0.94 -1.0 -0.62 Z",fill:a.accent,...o})),r("domino")){s.push({k:"path",d:L(j(-.86,-.04,-.62,-.3,-.18,-.24,0,-.16,.18,-.24,.62,-.3,.86,-.04,.6,.22,.16,.16,0,.1,-.16,.16,-.6,.22),.9),fill:a.accent,...o});for(const n of E)s.push({k:"ellipse",x:n*.38,y:0,rx:.19,ry:.13,fill:B})}if(s.push(...sa(e,t)),r("brows"))for(const n of E)s.push({k:"line",pts:[n*.72,-.5,n*.14,-.3],stroke:a.accent,lw:.16});if(e.face.brows)for(const n of E)s.push({k:"line",pts:[n*.2,-.2,n*.54,-.28],stroke:e.face.brows,lw:.09});if(s.push(...oa(e,t)),e.face.cheeks)for(const n of E)s.push({k:"ellipse",x:n*.64,y:.3,rx:.15,ry:.1,fill:e.face.cheeks,alpha:.8});if(r("whiskers"))for(const n of E)for(const u of[-.1,.06])s.push({k:"line",pts:[n*.62,.38+u,n*1.06,.3+u*2.2],stroke:a.outline,lw:t*.7,alpha:.75});if(r("rainbow-mane")){const n=e.extraColors??["#f59ac0","#fbd46a","#8fd3f4"];s.push({k:"ellipse",x:.42,y:-.82,rx:.34,ry:.22,rot:.5,fill:n[0],...o}),s.push({k:"ellipse",x:.1,y:-.92,rx:.3,ry:.2,rot:.25,fill:n[1%n.length],...o})}if(e.ears==="unicorn"){const n=[{x:-.18,y:-.84},{x:.02,y:-1.72},{x:.18,y:-.84}];s.push({k:"path",d:_(n,.12),fill:a.accent,...o});for(const u of[-1,-1.2,-1.4]){const l=.16*((u+1.72)/.88);s.push({k:"line",pts:[-l,u+.04,l,u-.04],stroke:a.outline,lw:t*.7,alpha:.6})}}if(r("helmet")){for(const n of E)s.push({k:"rect",x:n*1,y:.05,w:.26,h:.56,r:.12,fill:a.accent,...o});s.push({k:"path",d:"M-0.62 -0.62 Q-0.3 -0.92 0.12 -0.9",stroke:B,lw:.1,alpha:.9})}if(r("bolts"))for(const n of E)s.push({k:"rect",x:n*1.08,y:.08,w:.2,h:.44,r:.08,fill:a.accent,...o});if(r("tuft")&&s.push({k:"path",d:L([{x:-.26,y:-.95},{x:-.12,y:-1.22},{x:.02,y:-1.04},{x:.16,y:-1.28},{x:.28,y:-.95},{x:0,y:-.86}]),fill:a.body,...o}),r("eggshell")&&s.push({k:"path",d:"M-0.88 -0.5 C-0.88 -1.12 -0.46 -1.42 0 -1.42 C0.46 -1.42 0.88 -1.12 0.88 -0.5 L0.66 -0.66 L0.44 -0.48 L0.22 -0.66 L0 -0.48 L-0.22 -0.66 L-0.44 -0.48 L-0.66 -0.66 Z",fill:i(0,B),...o}),r("wool"))for(const[n,u]of[[-.36,-.84],[.02,-.94],[.4,-.82]])s.push({k:"circle",x:n,y:u,r:.27,fill:a.body,...o});if(r("stripe")&&s.push({k:"rect",x:0,y:-.64,w:.38,h:.62,r:.06,fill:a.accent}),r("eye-patch")&&(s.push({k:"line",pts:[-.97,-.5,.97,.13],stroke:a.outline,lw:.07}),s.push({k:"ellipse",x:.38,y:.02,rx:.21,ry:.19,fill:a.outline})),r("bandana")){s.push({k:"path",d:L(j(-1.05,-.22,-.96,-.72,-.5,-1.08,.1,-1.14,.72,-.96,1.04,-.56,1.05,-.22,.5,-.46,-.5,-.46)),fill:a.accent,...o});for(const[n,u]of[[-.5,-.8],[.08,-.92],[.6,-.74],[-.12,-.62],[.36,-.6]])s.push({k:"circle",x:n,y:u,r:.06,fill:B,alpha:.85});s.push({k:"circle",x:-.98,y:-.34,r:.15,fill:a.accent,...o})}if(r("cap")){for(const n of E)s.push({k:"line",pts:[n*.98,-.2,n*.5,.82,-n*.05,.98],stroke:a.outline,lw:.06});s.push({k:"path",d:L(j(-1.1,-.16,-1.04,-.66,-.6,-1.12,0,-1.24,.6,-1.12,1.04,-.66,1.1,-.16,.5,-.4,-.5,-.4)),fill:a.accent,...o}),s.push({k:"path",d:"M-0.74 -0.4 Q0 -0.6 0.74 -0.4 Q0.8 -0.24 0.6 -0.22 Q0 -0.36 -0.6 -0.22 Q-0.8 -0.24 -0.74 -0.4 Z",fill:a.accent,...o}),s.push({k:"circle",x:.5,y:-.82,r:.15,fill:i(0,B),...o});for(const n of[-.42,-.14])s.push({k:"line",pts:[n,-1.04,n+.02,-.78],stroke:a.outline,lw:.07,alpha:.7})}if(r("safari-hat")&&(s.push({k:"ellipse",x:0,y:-.56,rx:1.48,ry:.3,fill:a.accent,...o}),s.push({k:"path",d:L(j(-.78,-.58,-.7,-1.1,-.3,-1.38,.3,-1.38,.7,-1.1,.78,-.58,0,-.5),.8),fill:a.accent,...o}),s.push({k:"path",d:"M-0.77 -0.72 Q0 -0.62 0.77 -0.72 L0.74 -0.9 Q0 -0.8 -0.74 -0.9 Z",fill:i(1,a.outline),stroke:a.outline,lw:t*.8})),r("wizard-hat")){s.push({k:"ellipse",x:0,y:-.62,rx:1.32,ry:.26,fill:a.accent,...o}),s.push({k:"path",d:_(j(-.8,-.66,-.36,-1.5,.5,-2.2,.3,-1.46,.8,-.66),.3),fill:a.accent,...o});const n=i(0,Vt);for(const[u,l,p]of[[.02,-1.08,.18],[-.38,-.84,.1],[.36,-1.5,.11]])s.push({k:"group",x:u,y:l,s:p,items:[{k:"path",d:be,fill:n}]})}if(r("dive-mask")){for(const u of E)s.push({k:"line",pts:[u*.7,-.04,u*1,-.12],stroke:a.outline,lw:.2},{k:"line",pts:[u*.7,-.04,u*1,-.12],stroke:a.accent,lw:.11});s.push({k:"rect",x:0,y:0,w:1.42,h:.62,r:.28,fill:"#bfe9f5",alpha:.35}),s.push({k:"rect",x:0,y:0,w:1.42,h:.62,r:.28,stroke:a.outline,lw:.2}),s.push({k:"rect",x:0,y:0,w:1.42,h:.62,r:.28,stroke:a.accent,lw:.11}),s.push({k:"path",d:"M-0.5 -0.16 Q-0.4 -0.24 -0.22 -0.24",stroke:B,lw:.06,alpha:.9});const n="M0.5 0.52 Q0.98 0.56 1.04 0.1 L1.12 -0.92";s.push({k:"path",d:n,stroke:a.outline,lw:.24},{k:"path",d:n,stroke:a.accent,lw:.13})}return s}function Jt(e,t){const a=e.headExtras.includes("ninja-hood")?e.palette.body:e.palette.skin??e.palette.body;switch(e.head){case"round":return{k:"circle",x:0,y:0,r:1,fill:a,...t};case"wide":return{k:"ellipse",x:0,y:.03,rx:1.12,ry:.94,fill:a,...t};case"tall":return{k:"ellipse",x:0,y:-.02,rx:.94,ry:1.04,fill:a,...t};case"square":return{k:"rect",x:0,y:0,w:2,h:1.8,r:.46,fill:a,...t};case"bucket":return{k:"path",d:_(j(-.94,.96,-.98,-.36,-.62,-1.04,.62,-1.04,.98,-.36,.94,.96),.42),fill:a,...t};case"bulb":return{k:"path",d:L([{x:0,y:-1.02},{x:.86,y:-.74},{x:1.08,y:-.12},{x:.72,y:.62},{x:0,y:.92},{x:-.72,y:.62},{x:-1.08,y:-.12},{x:-.86,y:-.74}]),fill:a,...t}}}function ea(e){return e.head==="round"?{cy:0,rx:1,ry:1}:e.head==="tall"?{cy:-.02,rx:.94,ry:1.04}:{cy:.03,rx:1.12,ry:.94}}function ta(e,t){const{cy:a,rx:s,ry:o}=ea(e),r=s-t/2,i=o-t/2,c=.15,h=Math.asin(Math.min(1,(c-a)/i)),f=Math.cos(h)*r,n=b=>Math.round(b*100)/100||0,u=[D.M,n(-f),c],l=[[-.84*f,.02,-.53*f,.06,-.32*f,.24],[-.17*f,.11,.17*f,.11,.32*f,.24],[.53*f,.06,.84*f,.02,f,c]];for(const b of l)u.push(D.C,...b.map(n));const p=24;for(let b=1;b<=p;b++){const y=h+(Math.PI-2*h)*b/p;u.push(D.L,n(Math.cos(y)*r),n(a+Math.sin(y)*i))}return u.push(D.Z),u}function aa(e,t){const a=e.palette,s={stroke:a.outline,lw:t},o=[];for(const r of E)switch(e.ears){case"pointy":case"unicorn":{const i=e.ears==="unicorn"?.8:1,c={x:r*.3,y:-.82},h={x:r*.86,y:-.82-.62*i},f={x:r*.94,y:-.36};o.push({k:"path",d:_([c,h,f],.2),fill:a.body,...s});const n={x:(c.x+h.x+f.x)/3,y:(c.y+h.y+f.y)/3},u=[c,h,f].map(l=>({x:n.x+(l.x-n.x)*.55,y:n.y+(l.y-n.y)*.55+.04}));o.push({k:"path",d:_(u,.25),fill:a.accent});break}case"round":o.push({k:"circle",x:r*.72,y:-.72,r:.36,fill:a.ears??a.body,...s}),a.ears||o.push({k:"circle",x:r*.74,y:-.74,r:.19,fill:a.accent});break;case"big-round":o.push({k:"circle",x:r*.96,y:-.46,r:.52,fill:a.body,...s}),o.push({k:"circle",x:r*1,y:-.44,r:.32,fill:a.accent});break;case"long":o.push({k:"ellipse",x:r*.38,y:-1.42,rx:.25,ry:.68,rot:r*.14,fill:a.body,...s}),o.push({k:"ellipse",x:r*.39,y:-1.36,rx:.12,ry:.48,rot:r*.14,fill:a.accent});break;case"side":o.push({k:"circle",x:r*1,y:.02,r:.34,fill:a.body,...s}),o.push({k:"circle",x:r*1.02,y:.02,r:.2,fill:a.belly});break;case"tufts":o.push({k:"path",d:_([{x:r*.3,y:-.84},{x:r*1.22,y:-1.12},{x:r*.92,y:-.42}],.16),fill:a.body,...s}),o.push({k:"line",pts:[r*.62,-.78,r*1,-.98],stroke:a.accent,lw:.08});break;case"antennae":{const i={x:r*.62,y:-1.42};o.push({k:"path",d:`M${r*.3} -0.8 Q${r*.36} -1.2 ${i.x} ${i.y}`,stroke:a.outline,lw:t*2.6}),o.push({k:"path",d:`M${r*.3} -0.8 Q${r*.36} -1.2 ${i.x} ${i.y}`,stroke:a.body,lw:t*1.2}),o.push({k:"circle",x:i.x,y:i.y,r:.17,fill:a.accent,...s});break}case"floppy":o.push({k:"ellipse",x:r*.96,y:.02,rx:.3,ry:.62,rot:-r*.36,fill:a.ears??a.body,...s});break;case"droopy":o.push({k:"ellipse",x:r*1.04,y:-.22,rx:.4,ry:.18,rot:r*.32,fill:a.skin??a.body,...s}),o.push({k:"ellipse",x:r*1.08,y:-.2,rx:.24,ry:.08,rot:r*.32,fill:a.accent});break;case"human":o.push({k:"ellipse",x:r*.98,y:.06,rx:.17,ry:.23,fill:a.skin??a.body,...s});break;case"horns":{const i=[{x:r*.3,y:-.84},{x:r*.6,y:-1.5},{x:r*.66,y:-.68}];o.push({k:"path",d:_(i,.18),fill:a.accent,...s});break}}return e.ears==="fin"&&o.push({k:"path",d:_(j(-.4,-.82,.2,-1.62,.46,-.78),.2),fill:a.body,...s}),e.ears==="antenna"&&(o.push({k:"line",pts:[0,-.85,0,-1.42],stroke:a.outline,lw:t*2.6}),o.push({k:"line",pts:[0,-.85,0,-1.42],stroke:a.limbs,lw:t*1.2}),o.push({k:"circle",x:0,y:-1.5,r:.18,fill:a.accent,...s})),o}function sa(e,t){const a=e.palette,s=e.face,o=[],r=a.outline,i=s.eyesOnTop?.46:.4,c=s.eyesOnTop?-.72:-.04,h=(f,n,u)=>({k:"circle",x:f,y:n,r:u,fill:B});switch(s.eyes){case"dot":for(const f of E)o.push({k:"ellipse",x:f*i,y:c,rx:.12,ry:.155,fill:r}),o.push(h(f*i+.04,c-.06,.045));break;case"bead":for(const f of E)o.push({k:"ellipse",x:f*i,y:c,rx:.16,ry:.22,fill:r}),o.push(h(f*i+.05,c-.08,.065));break;case"big":for(const f of E)s.eyeRing&&o.push({k:"circle",x:f*i,y:c,r:.36,fill:s.eyeRing,stroke:r,lw:t*.8}),o.push({k:"circle",x:f*i,y:c,r:.25,fill:B,stroke:r,lw:t*.8}),o.push({k:"circle",x:f*i+f*-.03,y:c+.03,r:.14,fill:s.eyeColor??r}),o.push(h(f*i+f*-.03+.05,c-.03,.05));break;case"mask":for(const f of E)o.push({k:"ellipse",x:f*.4,y:0,rx:.24,ry:.32,rot:f*-.55,fill:a.limbs}),o.push({k:"circle",x:f*.4,y:-.02,r:.11,fill:B}),o.push({k:"circle",x:f*.39,y:-0,r:.065,fill:r});break;case"screen":o.push({k:"rect",x:0,y:0,w:1.5,h:.66,r:.26,fill:"#24323d",stroke:r,lw:t*.8});for(const f of E)o.push({k:"ellipse",x:f*.36,y:0,rx:.2,ry:.24,fill:s.eyeColor??"#7ff0ff",alpha:.3}),o.push({k:"ellipse",x:f*.36,y:0,rx:.12,ry:.16,fill:s.eyeColor??"#7ff0ff"});break;case"almond":for(const f of E)o.push({k:"ellipse",x:f*.42,y:-.02,rx:.3,ry:.2,rot:-f*.5,fill:s.eyeColor??r}),o.push(h(f*.42-f*.07,-.08,.07));break;case"calm":for(const f of E)o.push({k:"ellipse",x:f*.38,y:.02,rx:.085,ry:.12,fill:r}),o.push(h(f*.38+.03,-.02,.03));break;case"slit":o.push({k:"line",pts:[0,-.98,0,-.2],stroke:r,lw:t*.8,alpha:.5}),o.push({k:"rect",x:0,y:-.04,w:1.56,h:.26,r:.1,fill:Ae,stroke:r,lw:t*.8}),o.push({k:"rect",x:0,y:.3,w:.22,h:.46,r:.08,fill:Ae,stroke:r,lw:t*.8});for(const f of E){o.push({k:"ellipse",x:f*.4,y:-.04,rx:.12,ry:.07,fill:s.eyeColor??B});for(const n of[.36,.56])o.push({k:"circle",x:f*.42,y:n,r:.05,fill:r,alpha:.6})}break;case"goggle":for(const f of E)o.push({k:"circle",x:f*.9,y:0,r:.13,fill:a.accent,stroke:r,lw:t*.8});o.push({k:"rect",x:0,y:0,w:1.66,h:.62,r:.3,fill:Ae,stroke:r,lw:t*.8}),o.push({k:"path",d:"M-0.6 -0.16 Q-0.42 -0.24 -0.12 -0.24",stroke:B,lw:.07,alpha:.8});for(const f of E)o.push({k:"path",d:`M${f*.5} 0.04 Q${f*.34} -0.08 ${f*.16} 0.02`,stroke:s.eyeColor??"#7fd6ff",lw:.08});for(const f of[-.18,0,.18])o.push({k:"line",pts:[f,.56,f,.72],stroke:r,lw:t*.8,alpha:.6});break;case"visor":o.push({k:"ellipse",x:0,y:.08,rx:.8,ry:.64,fill:"#2a3f6b",stroke:r,lw:t*.8}),o.push({k:"path",d:"M-0.56 -0.14 Q-0.46 -0.4 -0.16 -0.46",stroke:B,lw:.08,alpha:.7});for(const f of E)o.push({k:"ellipse",x:f*.28,y:.04,rx:.1,ry:.14,fill:s.eyeColor??"#cfeeff"});break}return o}function oa(e,t){const a=e.palette,s=e.face,o=[],r=s.eyes==="visor"?"#cfeeff":Ke,i=t*1.05;switch(s.nose&&s.mouth!=="beak"&&(s.mouth==="cat"?o.push({k:"path",d:_([{x:-.1,y:.22},{x:.1,y:.22},{x:0,y:.33}],.3),fill:s.nose,stroke:s.nose,lw:t*.6}):e.ears==="big-round"?o.push({k:"ellipse",x:0,y:.22,rx:.2,ry:.25,fill:s.nose}):o.push({k:"ellipse",x:0,y:.25,rx:.13,ry:.085,fill:s.nose})),s.mouth){case"smile":o.push({k:"path",d:s.eyes==="visor"?"M-0.16 0.32 Q0 0.46 0.16 0.32":"M-0.17 0.42 Q0 0.58 0.17 0.42",stroke:r,lw:i});break;case"open":o.push({k:"path",d:"M-0.21 0.4 Q0 0.46 0.21 0.4 Q0.19 0.68 0 0.68 Q-0.19 0.68 -0.21 0.4 Z",fill:r,stroke:r,lw:t*.5}),o.push({k:"ellipse",x:0,y:.6,rx:.1,ry:.06,fill:Gt});break;case"cat":o.push({k:"path",d:"M-0.19 0.4 Q-0.1 0.5 0 0.37 Q0.1 0.5 0.19 0.4",stroke:r,lw:i});break;case"beak":o.push({k:"path",d:_([{x:-.17,y:.2},{x:.17,y:.2},{x:0,y:.48}],.25),fill:a.accent,stroke:a.outline,lw:t*.8});break;case"teeth":o.push({k:"path",d:"M-0.36 0.34 Q0 0.44 0.36 0.34 Q0.28 0.66 0 0.66 Q-0.28 0.66 -0.36 0.34 Z",fill:r,stroke:r,lw:t*.5});for(const c of E)o.push({k:"rect",x:c*.12,y:.43,w:.1,h:.1,r:.03,fill:B});break;case"grill":o.push({k:"rect",x:0,y:.56,w:.62,h:.2,r:.08,fill:"#24323d",stroke:a.outline,lw:t*.7});for(const c of[-.15,0,.15])o.push({k:"line",pts:[c,.51,c,.61],stroke:"#9fb0bd",lw:t*.6});break;case"tiny":o.push({k:"ellipse",x:0,y:.44,rx:.08,ry:.1,fill:r});break;case"smirk":o.push({k:"path",d:"M-0.16 0.46 Q0.06 0.54 0.22 0.38",stroke:r,lw:i});break;case"bill":o.push({k:"ellipse",x:0,y:.36,rx:.44,ry:.2,fill:a.accent,stroke:a.outline,lw:t*.8}),o.push({k:"path",d:"M-0.36 0.38 Q0 0.46 0.36 0.38",stroke:a.outline,lw:t*.7});for(const c of E)o.push({k:"circle",x:c*.1,y:.28,r:.03,fill:a.outline});break;case"hook":o.push({k:"ellipse",x:0,y:.48,rx:.16,ry:.11,fill:Ke}),o.push({k:"path",d:"M-0.3 0.12 Q0 -0.02 0.3 0.12 Q0.36 0.52 0.04 0.76 Q0.08 0.52 -0.08 0.46 Q-0.28 0.38 -0.3 0.12 Z",fill:a.accent,stroke:a.outline,lw:t*.8});break;case"jaws":{o.push({k:"path",d:"M-0.5 0.3 Q0 0.5 0.5 0.3 Q0.38 0.72 0 0.72 Q-0.38 0.72 -0.5 0.3 Z",fill:r,stroke:r,lw:t*.5});for(const c of[-.34,-.17,0,.17,.34]){const h=.3+.4*(c+.5)*(.5-c)-.01;o.push({k:"path",d:_(j(c-.075,h,c+.075,h,c,h+.13),.15),fill:B})}break}}return o}var he=(e,t)=>({x:Math.sin(e)*t,y:-Math.cos(e)*t}),ra=.5,J={leftEye:2,rightEye:5,leftEar:7,rightEar:8},ae={"3-5":{head:.75,neck:.74,arm:.3,leg:.36,hand:.19,foot:1.2,shoulderMin:.4,shoulderPad:.07,hipMin:.5,hipPad:.22,bottom:.26,bulge:1.12,armsOverHead:!0},"6-8":{head:.6,neck:.78,arm:.22,leg:.28,hand:.15,foot:1,shoulderMin:.34,shoulderPad:.04,hipMin:.4,hipPad:.16,bottom:.14,bulge:1.04,armsOverHead:!1},"9-12":{head:.5,neck:.92,arm:.17,leg:.21,hand:.125,foot:.9,shoulderMin:.36,shoulderPad:.07,hipMin:.32,hipPad:.08,bottom:.1,bulge:1,armsOverHead:!1}},ke="6-8",Xe=e=>e.band in ae?e.band:ke,Xa=ae[ke].head,na=.3,la=.12,ia=.9,Ge=.5,Ve=.65,ca=.35,fa=.2,ha=.25,X=(e,t)=>({x:e.x-t.x,y:e.y-t.y}),K=(e,t)=>({x:e.x+t.x,y:e.y+t.y}),F=(e,t)=>({x:e.x*t,y:e.y*t}),se=e=>Math.hypot(e.x,e.y),Je=(e,t)=>({x:(e.x+t.x)/2,y:(e.y+t.y)/2}),Ce=e=>{const t=se(e);return t>1e-9?{x:e.x/t,y:e.y/t}:{x:0,y:1}},ua=(...e)=>e.every(Number.isFinite),da=e=>Math.atan2(Math.sin(e),Math.cos(e)),pa=(e,t,a)=>Math.min(Math.max(e,t),a);function et(e,t,a=!1){return s=>{const o=e[s*3],r=e[s*3+1],i=e[s*3+2];return o===void 0||r===void 0||i===void 0||!ua(o,r,i)?{x:0,y:0,ok:!1}:{x:t.x+(a?1-o:o)*t.w,y:t.y+r*t.h,ok:i>=ra}}}function Se(e,t,a={}){const s=et(e,t,a.mirrored),o=s(P.leftShoulder),r=s(P.rightShoulder);if(!o.ok||!r.ok)return null;const i=s(P.leftHip),c=s(P.rightHip),h=Je(o,r),f=se(X(r,o)),n=i.ok&&c.ok;let u=Ce(X(r,o));f<1e-6&&(u={x:1,y:0});let l,p,b;if(n){const R=Je(i,c);p=se(X(R,h)),p>=f*ha?l=Ce(X(R,h)):(l={x:-u.y,y:u.x},l.y<0&&(l=F(l,-1))),b=Math.max(p,f*1.15)}else l={x:-u.y,y:u.x},l.y<0&&(l=F(l,-1)),b=f*1.15,p=b;b=Math.max(b,1e-6);const y={x:l.y,y:-l.x},k=Math.atan2(y.y,y.x),x=F(l,-1),M=ae[a.band??ke]??ae[ke],g=M.head*b;let N=K(h,F(x,g*M.neck));const I=s(P.nose);if(I.ok){const R=K(I,F(x,g*.15)),ee=F(X(R,N),ca),C=Math.min(1,g*fa/Math.max(se(ee),1e-6));N=K(N,F(ee,C))}return{S:h,r:y,d:l,U:b,L:p,hipsOk:n,head:N,headR:g,headRot:k+ya(e,s,k,b),angle:k}}function ya(e,t,a,s){const o=[[J.leftEar,J.rightEar],[J.leftEye,J.rightEye]];for(const[r,i]of o){const c=t(r),h=t(i);if(!c.ok||!h.ok||!(e[r*3+2]>=Ve&&e[i*3+2]>=Ve)||se(X(h,c))<s*.05)continue;const f=da(Math.atan2(h.y-c.y,h.x-c.x)-a),n=Math.max(Math.abs(f)-la,0),u=pa((ia+Ge-Math.abs(f))/Ge,0,1);return Math.sign(f)*Math.min(n,na)*u}return 0}function ze(e,t,a,s={}){const o=Xe(t),r=ae[o],i=Se(e,a,{...s,band:o});if(!i)return[];const c=et(e,a,s.mirrored),h=t.palette,{S:f,r:n,d:u,U:l,L:p}=i,b=d=>t.bodyExtras.includes(d),y=Math.max(1.2,l*.045),k={stroke:h.outline,lw:y},x=(d,m)=>({x:f.x+n.x*d+u.x*m,y:f.y+n.y*d+u.y*m}),M=d=>d.map(([m,w])=>x(m,w)),g=c(P.leftShoulder),N=c(P.rightShoulder),I=c(P.leftHip),R=c(P.rightHip),ee=se(X(N,g)),C=i.hipsOk?se(X(R,I)):ee*.7,v=Math.max(ee/2+r.shoulderPad*l,r.shoulderMin*l),O=Math.max(C/2+r.hipPad*l,r.hipMin*l),$=-.1*l,re=p+r.bottom*l,G=[],me=[],z=[],ge=[],yt=[],bt=(d,m,w,T)=>{const A=m.flatMap(q=>[q.x,q.y]);d.push({k:"line",pts:A,stroke:h.outline,lw:w+y*2}),d.push({k:"line",pts:A,stroke:T,lw:w})},Ya=r.leg*l,Za=r.arm*l,kt=Math.max(r.arm/.22,.9);if(i.hipsOk)for(const[d,m,w,T]of[[I,P.leftKnee,P.leftAnkle,-1],[R,P.rightKnee,P.rightAnkle,1]]){const A=c(m),q=c(w);if(!A.ok)continue;const Te=K(d,F(u,-.12*l)),ne=q.ok?[Te,A,q]:[Te,A];bt(me,ne,Ya,h.limbs),b("joints")&&me.push({k:"circle",x:A.x,y:A.y,r:.15*l*kt,fill:h.accent,...k}),q.ok&&me.push(xa(t,q,i,T,y,r.foot))}for(const[d,m,w,T]of[[g,P.leftElbow,P.leftWrist,-1],[N,P.rightElbow,P.rightWrist,1]]){const A=c(m),q=c(w);if(b("pauldrons")){const le=K(d,F(u,.02*l));ge.push({k:"ellipse",x:le.x,y:le.y,rx:.25*l,ry:.17*l,rot:i.angle+T*.25,fill:h.body,...k});const de=K(le,F(u,.05*l));ge.push({k:"ellipse",x:de.x,y:de.y,rx:.17*l,ry:.07*l,rot:i.angle+T*.25,fill:h.belly})}if(!A.ok)continue;const ne=r.armsOverHead&&(A.x-f.x)*u.x+(A.y-f.y)*u.y<-.25*l?yt:ge,xt=K(d,F(u,.04*l));if(bt(ne,q.ok?[xt,A,q]:[xt,A],Za,h.limbs),b("joints")&&ne.push({k:"circle",x:A.x,y:A.y,r:.13*l*kt,fill:h.accent,...k}),!q.ok)continue;const ue=Ce(X(q,A)),Oe=K(q,F(ue,.05*l));if(b("feathers"))for(const le of[-.55,0,.55]){const de=Math.cos(le),mt=Math.sin(le)*T,Pe={x:ue.x*de-ue.y*mt,y:ue.x*mt+ue.y*de},gt=K(Oe,F(Pe,.16*l));ne.push({k:"ellipse",x:gt.x,y:gt.y,rx:.2*l,ry:.09*l,rot:Math.atan2(Pe.y,Pe.x),fill:h.hands??h.accent,...k})}ne.push({k:"circle",x:Oe.x,y:Oe.y,r:r.hand*l,fill:h.hands??h.limbs,...k})}if(b("wings"))for(const d of[-1,1]){const m=M([[d*v*.5,.05*l],[d*(v+.85*l),-.6*l],[d*(v+.72*l),.05*l],[d*(v+.45*l),-.02*l],[d*(v+.3*l),.32*l],[d*v*.6,.55*l]]);G.push({k:"path",d:_(m,.18),fill:h.accent,...k})}if(b("cape")){const d=p+.8*l,m=O+.36*l,w=M([[-v*.92,$+.04*l],[v*.92,$+.04*l],[v+.16*l,p*.5],[m,d],[m*.5,d-.1*l],[0,d],[-m*.5,d-.1*l],[-m,d],[-v-.16*l,p*.5]]);G.push({k:"path",d:L(w,.6),fill:h.accent,...k})}if(b("backpack")){const d=x(0,.35*l);G.push({k:"rect",x:d.x,y:d.y,w:v*2+.34*l,h:.8*l,r:.16*l,rot:i.angle,fill:t.extraColors?.[0]??h.limbs,...k})}if(b("tank")){const d=x(v*.95,.24*l),m=t.extraColors?.[0]??h.accent,w=x(v*.95,-.3*l);G.push({k:"rect",x:w.x,y:w.y,w:.14*l,h:.16*l,r:.04*l,rot:i.angle,fill:h.outline}),G.push({k:"rect",x:d.x,y:d.y,w:.34*l,h:1*l,r:.17*l,rot:i.angle,fill:m,...k})}if(i.hipsOk&&!s.portrait&&G.push(...ma(t,i,O,y)),b("tentacles")&&i.hipsOk)for(const d of[-1,1]){const m=M([[d*O*.7,p*.9],[d*(O+.22*l),p+.3*l],[d*(O+.48*l),p+.22*l],[d*(O+.5*l),p-.02*l],[d*(O+.34*l),p-.06*l]]);G.push({k:"path",d:fe(m),stroke:h.outline,lw:.2*l+y*2}),G.push({k:"path",d:fe(m),stroke:h.limbs,lw:.2*l})}const V=Math.max(v,O)*r.bulge;if(b("wool")){for(const[m,w]of[[v*.7,$+.02*l],[V,p*.3],[V*1.02,p*.62],[(V+O)/2,p*.92],[O*.55,re]])for(const T of[-1,1]){const A=x(T*m,w);z.push({k:"circle",x:A.x,y:A.y,r:.2*l,fill:h.body,...k})}const d=x(0,re+.02*l);z.push({k:"circle",x:d.x,y:d.y,r:.2*l,fill:h.body,...k})}if(b("robe")){const d=p+.58*l,m=O*1.4;z.push({k:"path",d:L(M([[-v,$],[0,$-.04*l],[v,$],[V,p*.55],[m,d],[0,d+.06*l],[-m,d],[-V,p*.55]]),.7),fill:h.body,...k});const w=M([[-m*.94,d-.1*l],[0,d-.04*l],[m*.94,d-.1*l]]);z.push({k:"path",d:fe(w),stroke:t.extraColors?.[0]??h.accent,lw:.07*l})}else if(b("sheet")){const d=p+.78*l,m=O*1.3;z.push({k:"path",d:L(M([[-v,$],[v,$],[V,p*.55],[m,d],[m*.5,d-.2*l],[0,d],[-m*.5,d-.2*l],[-m,d],[-V,p*.55]]),.9),fill:h.body,...k})}else z.push({k:"path",d:L(M([[-v,$],[0,$-.04*l],[v,$],[V,p*.55],[O,re],[0,re+.03*l],[-O,re],[-V,p*.55]]),.85),fill:h.body,...k});const W=Math.min(v,O);if(b("pocket")){const d=x(0,p*.74);z.push({k:"rect",x:d.x,y:d.y,w:W*1.3,h:.3*l,r:.1*l,rot:i.angle,fill:h.belly,stroke:h.outline,lw:y*.8})}else if(b("racing-stripe"))for(const d of[-.1,.1]){const m=x(d*l,$+.02*l),w=x(d*l,re-.04*l);z.push({k:"line",pts:[m.x,m.y,w.x,w.y],stroke:h.belly,lw:.1*l})}else if(h.belly&&h.belly!==h.body&&!b("panel")&&!b("sheet")&&!b("stripes")){const d=x(0,p*.58);z.push({k:"ellipse",x:d.x,y:d.y,rx:W*.64,ry:Math.max(p*.36,.2*l),rot:i.angle,fill:h.belly})}if(b("spots")){const d=t.extraColors?.[1]??h.belly;for(const[m,w,T]of[[-.55,.35,.09],[.5,.62,.11],[-.35,.86,.07]]){const A=x(m*W,w*p);z.push({k:"circle",x:A.x,y:A.y,r:T*l,fill:d})}}if(b("stripes")){const d=t.extraColors?.[1]??h.accent;for(const m of[.22,.44,.66]){const w=x(-W*.98,p*m),T=x(W*.98,p*m);z.push({k:"line",pts:[w.x,w.y,T.x,T.y],stroke:d,lw:.1*l})}}if(b("straps")){const d=t.extraColors?.[1]??h.outline;for(const m of[-1,1]){const w=x(m*v*.62,$+.02*l),T=x(m*W*.62,p*.72);z.push({k:"line",pts:[w.x,w.y,T.x,T.y],stroke:h.outline,lw:.13*l+y*2}),z.push({k:"line",pts:[w.x,w.y,T.x,T.y],stroke:d,lw:.13*l})}}if(b("belt")){const d=x(0,p*.9);z.push({k:"rect",x:d.x,y:d.y,w:O*1.92,h:.17*l,r:.06*l,rot:i.angle,fill:t.extraColors?.[2]??"#4a3426",...k}),z.push({k:"rect",x:d.x,y:d.y,w:.2*l,h:.19*l,r:.04*l,rot:i.angle,fill:"#ffd84a",...k})}if(b("emblem")){const d=x(0,p*.4),m=t.extraColors?.[0]??h.accent,w=_([{x:-.22,y:-.2},{x:.22,y:-.2},{x:.22,y:.04},{x:0,y:.26},{x:-.22,y:.04}],.25);z.push({k:"group",x:d.x,y:d.y,rot:i.angle,s:l,items:[{k:"path",d:w,fill:m,stroke:h.outline,lw:y/l},{k:"group",x:0,y:.01,s:.12,items:[{k:"path",d:be,fill:m===h.accent?"#ffffff":h.accent}]}]})}if(b("panel")){const d=x(0,p*.5);z.push({k:"rect",x:d.x,y:d.y,w:W*1.2,h:.38*l,r:.1*l,rot:i.angle,fill:"#24323d",...k}),(t.extraColors??["#ff7a6b","#fbd46a","#7ff0ff"]).slice(0,3).forEach((w,T)=>{const A=x((T-1)*W*.34,p*.5);z.push({k:"circle",x:A.x,y:A.y,r:.075*l,fill:w})})}if(b("badge")){const d=x(-W*.42,p*.36);z.push({k:"circle",x:d.x,y:d.y,r:.15*l,fill:h.accent,...k}),z.push({k:"group",x:d.x,y:d.y,rot:i.angle,s:.09*l,items:[{k:"path",d:be,fill:"#ffffff"}]})}if(b("star")){const d=x(-W*.5,p*.3),m=.15*l;z.push({k:"group",x:d.x,y:d.y,rot:i.angle-.2,s:m,items:[{k:"path",d:be,fill:t.extraColors?.[0]??"#ffd84a",stroke:h.outline,lw:y*.8/m}]})}if(b("scarf")){const d=Math.max(.04,r.head*(1-r.neck)-.06)*l,m=x(0,d),w=t.extraColors?.[0]??h.accent,T=x(v*.45,d+.28*l);z.push({k:"rect",x:T.x,y:T.y,w:.16*l,h:.42*l,r:.06*l,rot:i.angle+.15,fill:w,...k}),z.push({k:"rect",x:m.x,y:m.y,w:v*2.05,h:.2*l,r:.1*l,rot:i.angle,fill:w,...k})}const Ka={k:"group",x:i.head.x,y:i.head.y,rot:i.headRot,s:i.headR,items:ka(t,y/i.headR)};return[...G,...me,...z,...ge,Ka,...yt]}var tt=new WeakMap,ba=64;function ka(e,t){const a=Number(t.toPrecision(4));let s=tt.get(e);s||tt.set(e,s=new Map);let o=s.get(a);return o||(s.size>=ba&&s.clear(),s.set(a,o=We(e,a))),o}function xa(e,t,a,s,o,r){const i=e.palette,{d:c,r:h}=a,f=a.U*r,n=K(K(t,F(c,.07*f)),F(h,s*.06*f)),u={stroke:i.outline,lw:o},l=i.feet??i.limbs;if(e.bodyExtras.includes("fins")){const p=_([{x:-.13,y:-.06},{x:.13,y:-.06},{x:.24,y:.46},{x:-.24,y:.46}],.22);return{k:"group",x:n.x,y:n.y,rot:a.angle,s:f,items:[{k:"path",d:p,fill:l,stroke:i.outline,lw:o/f},{k:"line",pts:[0,.06,0,.38],stroke:i.outline,lw:o/f,alpha:.5}]}}return e.bodyExtras.includes("flippers")?{k:"ellipse",x:n.x,y:n.y,rx:.27*f,ry:.11*f,rot:a.angle,fill:l,...u}:e.bodyExtras.includes("boots")?{k:"rect",x:n.x,y:n.y,w:.4*f,h:.24*f,r:.09*f,rot:a.angle,fill:l,...u}:{k:"ellipse",x:n.x,y:n.y,rx:.2*f,ry:.13*f,rot:a.angle,fill:l,...u}}function ma(e,t,a,s){const o=e.palette,{U:r,L:i,S:c,r:h,d:f}=t,n=(y,k)=>({x:c.x+h.x*y+f.x*k,y:c.y+h.y*y+f.y*k}),u=y=>y.map(([k,x])=>n(k,x)),l={stroke:o.outline,lw:s},p=(y,k,x)=>[{k:"path",d:fe(y),stroke:o.outline,lw:k+s*2},{k:"path",d:fe(y),stroke:x,lw:k}],b=[];switch(e.tail){case"none":break;case"fluffy":{const y=u([[a*.5,i*.95],[a+.28*r,i*1],[a+.72*r,i*.62],[a+.78*r,i*.12],[a+.52*r,i*.32],[a+.3*r,i*.6],[a*.6,i*.7]]);b.push({k:"path",d:L(y),fill:o.body,...l});const k=n(a+.72*r,i*.2);b.push({k:"ellipse",x:k.x,y:k.y,rx:.13*r,ry:.2*r,rot:t.angle+.25,fill:o.belly,...l});break}case"brush":{const y=u([[a*.4,i*.98],[a+.42*r,i*1.06],[a+.98*r,i*.66],[a+1.06*r,i*.12],[a+.86*r,-.04*r],[a+.66*r,i*.36],[a+.3*r,i*.66],[a*.5,i*.68]]);b.push({k:"path",d:L(y),fill:o.body,...l});const k=u([[a+1.03*r,i*.36],[a+1.06*r,i*.12],[a+.86*r,-.04*r],[a+.72*r,i*.24],[a+.86*r,i*.34]]);b.push({k:"path",d:L(k),fill:o.belly,...l});break}case"pom":{const y=n(a+.06*r,i*.88);b.push({k:"circle",x:y.x,y:y.y,r:.2*r,fill:o.belly,...l});break}case"long":case"striped":case"tuft":{const y=u([[a*.6,i*.9],[a+.35*r,i*.85],[a+.58*r,i*.4],[a+.5*r,-.02*r]]);if(b.push(...p(y,.14*r,o.body)),e.tail==="tuft"){const k=y[y.length-1];b.push({k:"circle",x:k.x,y:k.y,r:.16*r,fill:e.extraColors?.[0]??o.accent,...l})}if(e.tail==="striped"){for(const x of[.35,.6,.85]){const M=n(a+.35*r+.22999999999999998*r*(x*1.4>1?1:x*1.4),i*(.85-.85*x));b.push({k:"line",pts:[M.x-h.x*.08*r,M.y-h.y*.08*r,M.x+h.x*.08*r,M.y+h.y*.08*r],stroke:e.extraColors?.[0]??o.outline,lw:.06*r})}const k=y[y.length-1];b.push({k:"circle",x:k.x,y:k.y,r:.07*r,fill:e.extraColors?.[0]??o.outline})}break}case"curl":{const y=u([[a*.6,i*.9],[a+.4*r,i*.88],[a+.62*r,i*.45],[a+.5*r,i*.12],[a+.3*r,i*.24],[a+.36*r,i*.42]]);b.push(...p(y,.12*r,o.limbs));break}case"fish":{const y=u([[a*.6,i*.9],[a+.36*r,i*.86],[a+.6*r,i*.5]]);b.push(...p(y,.17*r,o.body));const k=y[y.length-1],x=_([{x:0,y:.06},{x:-.26,y:-.34},{x:.02,y:-.12},{x:.32,y:-.3}],.2);b.push({k:"group",x:k.x,y:k.y,rot:t.angle+.35,s:r,items:[{k:"path",d:x,fill:o.body,stroke:o.outline,lw:s/r}]});break}case"plume":{const y=e.extraColors??[o.accent];[0,1,2].forEach(k=>{const x=n(a+(.12+k*.13)*r,i+(.32-k*.06)*r);b.push({k:"ellipse",x:x.x,y:x.y,rx:.11*r,ry:.44*r,rot:t.angle-.55+k*.28,fill:y[(k+1)%y.length],...l})});break}case"spiky":case"arrow":{const y=u([[a*.3,i*.55],[a+.35*r,i*.68],[a+.95*r,i*.86],[a+.35*r,i*1.08],[a*.3,i*1.08]]);if(e.tail==="spiky"){for(const k of[.15,.45,.72]){const x=a+(.2+k*.7)*r,M=i*(.66+k*.19);b.push({k:"path",d:_(u([[x-.12*r,M+.05*r],[x,M-.2*r],[x+.12*r,M+.07*r]]),.2),fill:o.accent,...l})}b.push({k:"path",d:L(y,.7),fill:o.body,...l})}else{const k=u([[a*.6,i*.9],[a+.4*r,i*.92],[a+.62*r,i*.5],[a+.62*r,i*.18]]);b.push(...p(k,.13*r,o.body));const x=k[k.length-1];b.push({k:"group",x:x.x,y:x.y,rot:t.angle,s:r,items:[{k:"path",d:_([{x:-.15,y:.04},{x:0,y:-.22},{x:.15,y:.04}],.2),fill:o.accent,stroke:o.outline,lw:s/r}]})}break}}return b}var ga={nose:[0,-.62],leftShoulder:[-.42,0],rightShoulder:[.42,0],leftElbow:[-.58,.5],rightElbow:[.58,.5],leftWrist:[-.66,.98],rightWrist:[.66,.98],leftHip:[-.27,1],rightHip:[.27,1],leftKnee:[-.31,1.6],rightKnee:[.31,1.6],leftAnkle:[-.33,2.18],rightAnkle:[.33,2.18]};function wa(e,{cx:t=.5,cy:a=.36,T:s=.18}={}){const o={...ga,...e},r=new Array(Re*3).fill(0),i=(f,[n,u],l=.99)=>{r[f*3]=t+n*s,r[f*3+1]=a+u*s,r[f*3+2]=l};for(const f of Object.keys(P))i(P[f],o[f]);const c=o.tilt??0,h=(f,n)=>[o.nose[0]+f*Math.cos(c)-n*Math.sin(c),o.nose[1]+f*Math.sin(c)+n*Math.cos(c)];return i(J.leftEye,h(-.1,-.08)),i(J.rightEye,h(.1,-.08)),i(J.leftEar,h(-.22,-.02)),i(J.rightEar,h(.22,-.02)),r}var va=()=>wa({}),at=.5,Ea=.15,Ma=class{constructor(e={}){Q(this,"tracks",new Map),Q(this,"offset",NaN),Q(this,"lastArrival",NaN),Q(this,"interval",33),Q(this,"lastT",NaN),Q(this,"lostMs"),Q(this,"maxExtrapolateMs"),this.lostMs=e.lostMs??250,this.maxExtrapolateMs=e.maxExtrapolateMs??25}get delayMs(){return this.interval}push(e,t,a,s=st()){Number.isFinite(t)||(t=s),this.clock(t,s);const o=this.tracks.get(e);if(!o||t-o.tb>this.lostMs||t<o.tb-this.lostMs||a.length!==o.b.length){this.tracks.set(e,{a:null,ta:t,b:a,tb:t,out:null,outAt:NaN});return}if(a===o.b||t<=o.tb){t===o.tb&&a!==o.b&&(o.b=a,o.out=null);return}o.a=o.b,o.ta=o.tb,o.b=a,o.tb=t,o.out=null}at(e,t=st()){const a=this.tracks.get(e);if(!a)return null;if(!a.a)return a.b;if(a.out&&a.outAt===t)return a.out;const s=t-this.offset-this.interval,o=a.tb-a.ta,r=Math.min(o*.5,this.maxExtrapolateMs),i=Math.min(Math.max((s-a.ta)/o,0),1+r/o);return a.out=Aa(a.a,a.b,i),a.outAt=t,a.out}forget(e){this.tracks.delete(e)}clear(){this.tracks.clear()}clock(e,t){const a=t-e;if(!Number.isFinite(this.offset)||a<this.offset||a>this.offset+1e3?this.offset=a:Number.isFinite(this.lastArrival)&&(this.offset+=Math.min(a-this.offset,(t-this.lastArrival)/1e3)),this.lastArrival=t,Number.isFinite(this.lastT)&&e>this.lastT){const s=e-this.lastT;s<this.interval*3+20&&(this.interval+=(Math.min(Math.max(s,8),100)-this.interval)*.1)}e<=this.lastT||(this.lastT=e)}},st=()=>globalThis.performance?.now()??Date.now();function Aa(e,t,a){const s=t.slice(),o=a<.5?e:t;for(let r=0;r+2<t.length;r+=3){const i=e[r],c=e[r+1],h=t[r],f=t[r+1];e[r+2]>=at&&t[r+2]>=at&&Math.abs(h-i)+Math.abs(f-c)<Ea?(s[r]=i+(h-i)*a,s[r+1]=c+(f-c)*a,s[r+2]=e[r+2]+(t[r+2]-e[r+2])*Math.min(a,1)):(s[r]=o[r],s[r+1]=o[r+1],s[r+2]=o[r+2])}return s}var Ga=Ye.map(e=>e.id),xe=new Map(Ye.map(e=>[e.id,e])),ot=xe.get("fox"),Ca=e=>typeof e=="string"&&xe.has(e),Sa=e=>xe.get(e),rt=e=>typeof e=="string"?xe.get(e)??ot:e;function za(e,t,a,s,o={}){const r=ze(t,rt(a),s,{mirrored:o.mirrored});return r.length?(e.save(),o.alpha!==void 0&&(e.globalAlpha*=Math.min(Math.max(o.alpha,0),1)),Me(e,r),e.restore(),!0):!1}function Ta(e,t){const a=rt(e),s=va(),o=Xe(a),r=Se(s,{x:0,y:0,w:1,h:1},{band:o}),i=-lt(We(a,.05)).minY,h=Math.min(.27,.43/Math.max(i,1))*t/ae[o].head/r.U,f=.5*t+Math.min(0,(i-1.6)*.06*t),n={x:t/2-r.head.x*h,y:f-r.head.y*h,w:h,h};return ze(s,a,n,{portrait:!0})}function Oa(e,t,a=.5){if(!e||e.length!==t.length)return t.slice();const s=t.slice();for(let o=0;o+2<t.length;o+=3){const r=e[o+2],i=t[o+2],c=r>=.5,h=i>=.5;c&&i>=.3&&(s[o+2]=Math.max(i,.5));const f=Math.hypot(t[o]-e[o],t[o+1]-e[o+1]);if(c&&h&&f<.15){const n=a*Math.min(1,nt+(1-nt)*f/Pa);s[o]=e[o]+(t[o]-e[o])*n,s[o+1]=e[o+1]+(t[o+1]-e[o+1])*n}else c&&!h&&s[o+2]>=.5&&(s[o]=e[o],s[o+1]=e[o+1])}return Da(e,t,s,a*La),s}var nt=.1,Pa=.03,La=.35,_a=11;function Da(e,t,a,s){const o=P.leftShoulder*3,r=P.rightShoulder*3,i=(u,l)=>u[l+2]>=.5;if(!i(e,o)||!i(e,r)||!i(t,o)||!i(t,r))return;const c=(u,l)=>(u[o+l]+u[r+l])/2,h=[c(e,0),c(e,1)],f=[c(t,0),c(t,1)],n=[c(a,0),c(a,1)];for(let u=0;u<_a&&u*3+2<t.length;u++){const l=u*3;if(!i(e,l)||!i(t,l))continue;const p=[e[l]-h[0],e[l+1]-h[1]],b=[t[l]-f[0],t[l+1]-f[1]];Math.hypot(b[0]-p[0],b[1]-p[1])>=.15||(a[l]=n[0]+p[0]+(b[0]-p[0])*s,a[l+1]=n[1]+p[1]+(b[1]-p[1])*s)}}function lt(e){const t={minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0},a=(s,o)=>{t.minX=Math.min(t.minX,s),t.minY=Math.min(t.minY,o),t.maxX=Math.max(t.maxX,s),t.maxY=Math.max(t.maxY,o)};for(const s of e){const o="lw"in s&&s.stroke?(s.lw??1)/2:0;switch(s.k){case"circle":a(s.x-s.r-o,s.y-s.r-o),a(s.x+s.r+o,s.y+s.r+o);break;case"ellipse":case"rect":{const r=s.k==="ellipse"?s.rx:s.w/2,i=s.k==="ellipse"?s.ry:s.h/2,c=Math.max(r,i)+o;a(s.x-c,s.y-c),a(s.x+c,s.y+c);break}case"path":{const r=Wt(s.d);for(let i=0;i+1<r.length;i+=2)a(r[i]-o,r[i+1]-o),a(r[i]+o,r[i+1]+o);break}case"line":for(let r=0;r+1<s.pts.length;r+=2)a(s.pts[r]-o,s.pts[r+1]-o),a(s.pts[r]+o,s.pts[r+1]+o);break;case"group":{const r=lt(s.items);if(!Number.isFinite(r.minX))break;const i=s.s??1,c=Math.cos(s.rot??0),h=Math.sin(s.rot??0);for(const[f,n]of[[r.minX,r.minY],[r.maxX,r.minY],[r.minX,r.maxY],[r.maxX,r.maxY]])a(s.x+(f*c-n*h)*i,s.y+(f*h+n*c)*i);break}}}return t}var Na=()=>{const e=typeof document<"u"?document.timeline?.currentTime:null;return typeof e=="number"&&Number.isFinite(e)?e:globalThis.performance?.now()??Date.now()},it=()=>globalThis.performance?.now()??Date.now(),ct=class{constructor(e=Na){Q(this,"now",e),Q(this,"known",new Map),Q(this,"smoothed",new Map),Q(this,"times",new WeakMap),Q(this,"lerp",new Ma),Q(this,"drawnAt",NaN),Q(this,"drawn",0),Q(this,"smoothedBody",(t,a={})=>{const s=a.interpolate!==!1;if(typeof t=="number"){const o=this.smoothed.get(t);return o?s?this.lerp.at(t,this.tick())??o.body:o.body:null}return typeof t!="object"||t===null||!Array.isArray(t.body)?null:this.posed(t.id,t.body,ft(a.smooth),s)})}note(e,t,a=it()){for(const s of e)this.known.set(s.id,this.resolve(s.id,s.avatar)),t!==void 0&&Number.isFinite(t)&&Array.isArray(s.body)&&this.times.set(s.body,{t,arrival:a})}of(e){return typeof e=="object"&&e!==null?e.avatar!==void 0?this.resolve(e.id,e.avatar):this.of(e.id):this.known.get(e)??Be(e-1)}posed(e,t,a,s=!0){const o=this.smooth(e,t,a);return s?this.lerp.at(e,this.tick())??o:o}smooth(e,t,a){const s=this.smoothed.get(e);if(s&&s.raw===t&&s.amount===a)return s.body;s&&s.amount!==a&&this.lerp.forget(e);const o=a<1?Oa(s?.body,t,a):t;this.smoothed.set(e,{raw:t,body:o,amount:a});const r=this.times.get(t),i=r?.arrival??it();return this.lerp.push(e,r?.t??i,o,i),o}takeDrawn(){const e=this.drawn;return this.drawn=0,e}tick(){const e=this.now();return e!==this.drawnAt&&(this.drawnAt=e,this.drawn++),e}resolve(e,t){return Ca(t)?t:Be(e-1)}};function Ia(e,t){const a=typeof e.getTransform=="function"?e.getTransform():null,s=a&&Math.hypot(a.a,a.b)||1,o=a&&Math.hypot(a.c,a.d)||1,r=(e.canvas?.width??0)/s,i=(e.canvas?.height??0)/o;return t?{x:t.x*r,y:t.y*i,w:t.w*r,h:t.h*i}:{x:0,y:0,w:r,h:i}}var ft=e=>e===!1?1:typeof e=="number"?Math.min(Math.max(e,.05),1):.5;function ht(e,t){return(a,s,o,r,i={})=>{const c=Array.isArray(s)?null:s,h=c?c.body:s;if(!Array.isArray(h))return null;const f=typeof o=="string"?o:e.of(typeof o=="number"?o:c??1),n=typeof o=="number"?o:c?.id,u=n!==void 0?e.posed(n,h,ft(i.smooth),i.interpolate!==!1):h;return za(a,u,f,r??Ia(a,t().view),i.alpha!==void 0?{alpha:i.alpha}:{})?u:null}}function Ra(e){const t=new Map,a=(n,u)=>t.get(n)?.forEach(l=>l(u));let s=null,o=null;const r=new Map,i=[],c=n=>s?n(s):i.push(n),h=new ct,f=ht(h,()=>({view:null}));return e.then(n=>{s=n;const u=new Map;n.on("gesture",l=>a(l.gesture,{player:l.player})),n.on("pause",l=>a("pause",{reason:l.reason==="distance"?"distance":"user"})),n.on("resume",()=>a("resume",{})),n.on("break-start",()=>a("break-start",{})),n.on("break-done",l=>a("break-end",{shown:l.shown})),n.onBackdrop((l,p)=>a("backdrop",{backdrop:l,view:p})),n.on("turn",l=>a("turn",{players:[...l.players]})),n.on("frame",l=>{a("players",{players:l.players});for(const p of l.players)a("hands",{player:p.id,left:p.leftHand,right:p.rightHand}),u.get(p.id)!==p.shape&&(u.set(p.id,p.shape),a("shape",{player:p.id,shape:p.shape}))}),o=Qa(n),a("start",o),i.splice(0).forEach(l=>l(n))}),{on(n,u){const l=t.get(n)??new Set;return t.set(n,l),l.add(u),n==="start"&&o&&u(o),()=>{l.delete(u)}},ready:()=>c(n=>n.ready()),score:(n,u)=>c(l=>{const p=u??dt(l);r.set(p,n),l.score(p,n)}),break:n=>new Promise(u=>c(l=>{l.break(n).then(u)})),end:n=>c(u=>u.end(typeof n=="number"?Ba(u,n,r):n.map(l=>({player:l.player,score:l.score,stars:l.stars??2})))),keys:(n,u)=>c(l=>{_t(l,n,u)}),pointer:n=>c(u=>{Nt(u,n)}),get players(){return s?.players??ut},get turns(){return s?.turns??ut},get input(){return s?.input??"body"},get hasPointer(){return s?.pointer??!1},get view(){return s?.view??null},get device(){return s?.device??null},reportStats:n=>s?.reportStats(n),toScreen:n=>s?s.toScreen(n):je(null,n),avatarOf:n=>s?s.avatarOf(n):h.of(n),drawAvatar:(...n)=>s?s.drawAvatar(...n):f(...n),smoothedBody:(...n)=>s?s.smoothedBody(...n):h.smoothedBody(...n)}}var ut=Object.freeze([]),Qa=e=>({ageRange:e.ageRange,players:e.players,locale:e.locale,mode:e.mode,backdrop:e.backdrop,view:e.view,device:e.device,turns:e.turns,input:e.input,pointer:e.pointer}),dt=e=>e.input==="remote"?e.players[0]??1:1;function Ba(e,t,a){const s=dt(e);return e.input!=="remote"?[{player:s,score:t,stars:2}]:[...e.turns.slice(0,Math.max(e.turns.indexOf(s),0)).map(r=>({player:r,score:a.get(r)??0,stars:2})),{player:s,score:t,stars:2}]}var Fa=(e=window)=>({post:t=>e.parent.postMessage(t,"*"),listen:t=>e.addEventListener("message",a=>a.source===e.parent&&t(a.data))}),Ha=1e4,ja=1e3;function Ua(e=Fa()){return new Promise((t,a)=>{const s=new Map,o=[];let r=!1,i=!1,c=!1,h="none",f=null,n="body",u=Object.freeze([]),l=u;const p=new Set,b=new ct,y=ht(b,()=>({view:f})),k=b.smoothedBody,x=setTimeout(()=>a(new Error("Fabi Play: no host, is the game opened from Fabi Play?")),Ha);e.listen(M=>{if(typeof M!="object"||M===null||M.ns!==Fe)return;const g=M;if(g.type==="init"&&!c){if(g.v!==Ie)return clearTimeout(x),a(new Error(`Fabi Play: protocol ${g.v}, this SDK speaks ${Ie}`));c=!0,clearTimeout(x),h=g.backdrop==="video"?"video":"none",f=He(g.view)??null;const N=Bt(g.device)??null;n=g.input==="remote"?"remote":"body";const I=n==="remote"&&g.pointer===!0;u=Object.freeze(Array.isArray(g.players)?[...g.players]:[]);const R=n==="remote"&&u.length===1?jt(g.turns):void 0;l=Object.freeze(R&&R[0]===u[0]?R:[...u]);let ee={};if(g.stats===!0){let C=performance.now();setInterval(()=>{const O=performance.now();e.post(ie({type:"stats",renderFps:Math.round(b.takeDrawn()*1e3/Math.max(O-C,1)),...ee})),C=O},ja).unref?.()}t({locale:g.locale,mode:g.mode,get players(){return u},turns:l,input:n,pointer:I,muted:g.muted,ageRange:g.ageRange??"6-8",get backdrop(){return h},get view(){return f},device:N,reportStats:C=>{ee=Ft(C)},toScreen:C=>je(f,C),avatarOf:C=>b.of(C),drawAvatar:y,smoothedBody:k,onBackdrop(C){return p.add(C),()=>{p.delete(C)}},on(C,v){const O=s.get(C)??new Set;return s.set(C,O),O.add(v),()=>{O.delete(v)}},ready:()=>e.post(ie({type:"ready"})),score:(C,v)=>e.post(ie({type:"score",player:C,score:v})),break:(C="level")=>new Promise(v=>{o.push({reason:C,done:v}),e.post(ie({type:"break",reason:C}))}),end:C=>e.post(ie({type:"end",scores:C}))})}else if(c){let N=g;if(g.type==="frame"&&Array.isArray(g.players)&&b.note(g.players,g.t),g.type==="backdrop"){if(g.backdrop!=="video"&&g.backdrop!=="none")return;const I=He(g.view)??null;if(g.backdrop===h&&$a(I,f))return;h=g.backdrop,f=I,N={type:"backdrop",backdrop:h,...f?{view:f}:{}};for(const R of[...p])R(h,f)}if(g.type==="turn"){const I=n==="remote"&&r&&!i&&o[0]?.reason==="turn"?Ht(g.players):void 0,R=u[0];if(!I||R===void 0||l.indexOf(I[0])<=l.indexOf(R))return;i=!0,u=Object.freeze(I),N={type:"turn",players:[...I]}}g.type==="break-start"&&(r=o.length>0);for(const I of s.get(g.type)??[])I(N);g.type==="break-done"&&(r=i=!1,o.shift()?.done(g.shown))}else return})})}var $a=(e,t)=>e===t||e!==null&&t!==null&&e.x===t.x&&e.y===t.y&&e.w===t.w&&e.h===t.h,pt={};Le(pt,{BAND_BODY:()=>ae,DEFAULT_AVATAR:()=>ot,avatarById:()=>Sa,avatarShapes:()=>ze,drawShapes:()=>Me,frameOf:()=>Se,iconShapes:()=>Ta});function qa(e){const t=Ua(),a=Ra(t);e?.dataset.mute!=="manual"&&St(t);const s=Object.assign(a,{avatars:{...pt}});window.FabiPlay=s;const o=e?.dataset.keys;o&&a.keys(Tt(o));const r=e?.dataset.pointer;return r&&a.pointer({hand:r==="left"||r==="right"?r:"any"}),e?.dataset.ready!=="manual"&&(document.readyState==="complete"?a.ready():window.addEventListener("load",()=>a.ready(),{once:!0})),s}return te.exports.install(we)});
|
|
1
|
+
/*! @fabi-play/sdk 0.5.0 | Fabi Play Kit License | https://docs.fabiplay.app */(function(_e,ue){var Ce=typeof document<"u"?document.currentScript:null;typeof define=="function"&&define.amd?define([],function(){return ue(Ce)}):typeof module=="object"&&module&&module.exports?module.exports=ue(Ce):_e.FabiPlay=ue(Ce)})(typeof globalThis<"u"?globalThis:typeof self<"u"?self:this,function(_e){"use strict";var ue={exports:{}},Ce=ue.exports,Se=Object.defineProperty,Pt=Object.getOwnPropertyDescriptor,Ot=Object.getOwnPropertyNames,_t=Object.prototype.hasOwnProperty,It=(e,t,o)=>t in e?Se(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,je=(e,t)=>{for(var o in t)Se(e,o,{get:t[o],enumerable:!0})},Lt=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Ot(t))!_t.call(e,a)&&a!==o&&Se(e,a,{get:()=>t[a],enumerable:!(r=Pt(t,a))||r.enumerable});return e},Rt=e=>Lt(Se({},"__esModule",{value:!0}),e),W=(e,t,o)=>It(e,typeof t!="symbol"?t+"":t,o),He={};je(He,{install:()=>Ar}),ue.exports=Rt(He);function Dt(e,t=window){const o=new Set,r=t.AudioContext;r&&(t.AudioContext=class extends r{constructor(...i){super(...i),o.add(this)}});let a=[],n=[];Promise.resolve(e).then(i=>{i.on("break-start",()=>{a=[...t.document.querySelectorAll("audio, video")].filter(c=>!c.paused),a.forEach(c=>c.pause()),n=[...o].filter(c=>c.state==="running"),n.forEach(c=>{c.suspend()})}),i.on("break-done",()=>{a.forEach(c=>{c.play().catch(()=>{})}),n.forEach(c=>{c.resume()}),a=[],n=[]})})}var Nt={jump:"Space",squat:"ArrowDown",left:"ArrowLeft",right:"ArrowRight",clap:"Enter"};function Qt(e){if(e.trim()==="default")return;const t={};for(const o of e.split(",")){const[r,a]=o.split(":").map(n=>n.trim());r&&a&&(t[r]=a)}return t}var Bt={Space:[" ",32],Enter:["Enter",13],Escape:["Escape",27],ShiftLeft:["Shift",16],ArrowLeft:["ArrowLeft",37],ArrowUp:["ArrowUp",38],ArrowRight:["ArrowRight",39],ArrowDown:["ArrowDown",40]};function Fe(e){const t=Bt[e];if(t)return{key:t[0],code:e,keyCode:t[1]};const o=/^Key([A-Z])$/.exec(e);if(o)return{key:o[1].toLowerCase(),code:e,keyCode:o[1].charCodeAt(0)};const r=/^Digit([0-9])$/.exec(e);if(r)return{key:r[1],code:e,keyCode:48+Number(r[1])};throw new Error(`Fabi Play: unknown key "${e}" (use Space, Enter, Arrow\u2026, KeyA\u2026, Digit0\u2026)`)}var jt=(e=document)=>({dispatch(t,o){const r=new KeyboardEvent(t,{key:o.key,code:o.code,bubbles:!0,cancelable:!0});for(const a of["keyCode","which"])Object.defineProperty(r,a,{get:()=>o.keyCode});(e.activeElement??e.body??e).dispatchEvent(r)}}),We=80,Ht=800;function Ft(e,t=Nt,o={}){const r=o.player===void 0&&e.input==="remote";let a=o.player??(r?e.players?.[0]??1:1);const n=o.target??jt(),i=o.setTimeout??((y,b)=>setTimeout(y,b)),c=new Set;let u=0;const f=y=>{const b=t[y];!b||c.has(y)||(c.add(y),n.dispatch("keydown",Fe(b)))},s=y=>{const b=t[y];!b||!c.has(y)||(c.delete(y),n.dispatch("keyup",Fe(b)))},h=y=>{f(y),i(()=>s(y),We)},l=y=>{if(y.player!==a)return;const b={"lane-left":-1,"lane-center":0,"lane-right":1};switch(y.gesture){case"jump":f("jump"),i(()=>s("jump"),Ht);break;case"land":s("jump");break;case"squat":f("squat");break;case"stand":s("squat");break;case"clap":h("clap");break;default:{const m=b[y.gesture];if(m===void 0)break;const A=m>u?"right":"left";for(let M=0;M<Math.abs(m-u);M++)i(()=>h(A),M*(We*2));u=m}}},d=y=>{const b=y.players.find(m=>m.id===a);b&&(b.shape==="arms-up"?f("arms-up"):s("arms-up"))},p=[e.on("gesture",l),e.on("frame",d),e.on("break-start",()=>[...c].forEach(s)),e.on("turn",y=>{r&&([...c].forEach(s),a=y.players[0]??a,u=0)})];return()=>{p.forEach(y=>y()),[...c].forEach(s)}}function Wt(e=document){const t=e.createElement("div");t.setAttribute("aria-hidden","true"),t.style.cssText="position:fixed;left:0;top:0;width:56px;height:56px;margin:-28px 0 0 -28px;border-radius:50%;border:6px solid #FBE7B8;background:rgba(251,231,184,.25);pointer-events:none;z-index:2147483647;box-sizing:border-box;transition:transform 60ms linear",e.body.appendChild(t);const o=(r,a,...n)=>{const i=e.elementFromPoint(r,a)??e.body;for(const c of n){const u={bubbles:!0,cancelable:!0,clientX:r,clientY:a,pointerId:1,pointerType:"touch",isPrimary:!0};i.dispatchEvent(c.startsWith("pointer")?new PointerEvent(c,u):new MouseEvent(c,u))}};return{size:()=>({width:e.documentElement.clientWidth,height:e.documentElement.clientHeight}),move:(r,a)=>o(r,a,"pointermove","mousemove"),click:(r,a)=>o(r,a,"pointerdown","mousedown","pointerup","mouseup","click"),cursor:(r,a,n)=>{t.style.transform=`translate(${r}px, ${a}px) scale(${1-n*.35})`,t.style.borderColor=n>0?"#EE6A43":"#FBE7B8"}}}function Xt(e,t={}){const o=t.player??1,r=t.hand??"any",a=t.dwellMs??800,n=t.radius??.04,i=t.target??Wt();let c=null,u=!1;return e.on("frame",f=>{const s=f.players.find(M=>M.id===o);if(!s)return;const l=r==="left"?s.leftHand:r==="right"?s.rightHand:((M,S)=>M&&S?M.y<S.y?M:S:M??S)(s.leftHand,s.rightHand);if(!l)return;const{width:d,height:p}=i.size(),y=l.x*d,b=l.y*p;i.move(y,b),(!c||Math.hypot(y-c.x,b-c.y)>n*Math.hypot(d,p))&&(c={x:y,y:b,t:f.t},u=!1);const A=u?0:Math.min((f.t-c.t)/a,1);A>=1&&(u=!0,i.click(c.x,c.y)),i.cursor(y,b,u?0:A)})}function Yt(e=document){const t=e.defaultView,o=t?.PointerEvent,r=t?.MouseEvent??MouseEvent;let a=null,n=null;const i=(c,u,f,s,h,l=null)=>{const d={bubbles:!0,cancelable:!0,composed:!0,view:t,clientX:f,clientY:s,screenX:f,screenY:s,button:0,buttons:h,relatedTarget:l,pointerId:1,pointerType:"mouse",isPrimary:!0};u.startsWith("pointer")?o&&c.dispatchEvent(new o(u,d)):c.dispatchEvent(new r(u,d))};return{size:()=>({width:t?.innerWidth??e.documentElement.clientWidth,height:t?.innerHeight??e.documentElement.clientHeight}),dispatch(c,u,f,s){const h=e.elementFromPoint(u,f)??e.body??e.documentElement;if(c==="pointermove"&&h!==a){if(a?.isConnected)for(const l of["pointerout","mouseout"])i(a,l,u,f,s,h);for(const l of["pointerover","mouseover"])i(h,l,u,f,s,a);a=h}if(c==="pointerdown"&&(n=h),c==="click"){const l=n===h;if(n=null,!l)return}i(h,c,u,f,s)}}}function qt(e){let t=null;const o=(r,a,n,i)=>{const{width:c,height:u}=e.size();for(const f of r)e.dispatch(f,a*c,n*u,i)};return{update(r){const a=t?.down??!1;(!t||t.x!==r.x||t.y!==r.y)&&o(["pointermove","mousemove"],r.x,r.y,a?1:0),r.down&&!a&&o(["pointerdown","mousedown"],r.x,r.y,1),!r.down&&a&&o(["pointerup","mouseup","click"],r.x,r.y,0),t={x:r.x,y:r.y,down:r.down}},cancel(){t?.down&&(o(["pointercancel","mouseup"],t.x,t.y,0),t={...t,down:!1})}}}var Xe=3*1024*1024,$t=1920,Zt=.85,Kt=60,Gt=["sent","unavailable","too-big","error"],Vt=/^[A-Za-z0-9+/]*={0,2}$/,Ut={"image/jpeg":"/9j/","image/png":"iVBORw0KGg"},Jt=/^data:(image\/(?:jpeg|png));base64,/,eo=e=>e.length/4*3-(e.endsWith("==")?2:e.endsWith("=")?1:0),to=Math.ceil(Xe/3)*4,oo=(e,t)=>t.length%4===0&&t.length>0&&t.startsWith(Ut[e])&&Vt.test(t);function Ye(e){if(typeof e!="string")return{error:"invalid"};const t=Jt.exec(e);if(!t)return{error:"invalid"};const o=t[1],r=e.slice(t[0].length);if(r.length>to)return{error:"too-big"};if(!oo(o,r))return{error:"invalid"};const a=eo(r);return a>Xe?{error:"too-big"}:{ok:{mime:o,base64:r,size:a}}}function ro(e){return typeof e!="string"?void 0:Array.from(e.replace(/[\p{Cc}\p{Cf}]/gu,"").trim()).slice(0,Kt).join("").trim()||void 0}var qe=1,$e=33,D={nose:0,leftShoulder:11,rightShoulder:12,leftElbow:13,rightElbow:14,leftWrist:15,rightWrist:16,leftHip:23,rightHip:24,leftKnee:25,rightKnee:26,leftAnkle:27,rightAnkle:28},ao=["3-5","6-8","9-12"],no=e=>ao.includes(e),Ie=4,Ze={"3-5":["bunny","bear","panda","penguin"],"6-8":["fox","lion","dragon","unicorn"],"9-12":["robot","astronaut","ninja","skater"]},so=Ze["6-8"],Ke=(e,t)=>{const o=no(t)?Ze[t]:so;return o[Number.isInteger(e)&&e>=0?e%o.length:0]},Ge="fabi-play",pe=e=>({ns:Ge,...e});function Ve(e){if(!xe(e))return;const{x:t,y:o,w:r,h:a}=e;return ae(t)&&ae(o)&&ae(r)&&ae(a)&&r>0&&a>0?{x:t,y:o,w:r,h:a}:void 0}var Ue=(e,t)=>e?{x:e.x+t.x*e.w,y:e.y+t.y*e.h}:{x:t.x,y:t.y},Je=["high","medium","low"];function lo(e){if(!xe(e))return;const t={};return Je.includes(e.tier)&&(t.tier=e.tier),ae(e.hz)&&e.hz>=20&&e.hz<=240&&(t.hz=Math.round(e.hz)),t.tier||t.hz?t:void 0}function io(e){const t={};return xe(e)&&(ae(e.fps)&&e.fps>=0&&e.fps<1e3&&(t.fps=e.fps),typeof e.renderer=="string"&&/^[a-z0-9-]{1,16}$/.test(e.renderer)&&(t.renderer=e.renderer),Je.includes(e.tier)&&(t.tier=e.tier)),t}function co(e){if(!xe(e)||!ae(e.x)||!ae(e.y)||typeof e.down!="boolean")return;const t=o=>Math.min(Math.max(o,0),1);return{type:"cursor",x:t(e.x),y:t(e.y),down:e.down}}function fo(e){if(!(!xe(e)||!Gt.includes(e.result)))return{type:"picture-result",...Number.isInteger(e.id)?{id:e.id}:{},result:e.result}}var et=e=>Number.isInteger(e)&&e>=1&&e<=Ie;function uo(e){return Array.isArray(e)&&e.length===1&&et(e[0])?[e[0]]:void 0}function ho(e){if(!(!Array.isArray(e)||e.length<1||e.length>Ie||!e.every(et)||new Set(e).size!==e.length))return[...e]}var Tr=16/9,xe=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),ae=e=>typeof e=="number"&&Number.isFinite(e),po=12,yo=$e*4,bo=e=>po+e*yo,zr=bo(Ie),Y="#4a382c",H="#2b2118",K="#1c1f2b",tt="#fbefe3",V="#f4897a",me="#3a2a22",ot=[{id:"fox",name:{en:"Fox",it:"Volpe"},band:"6-8",palette:{body:"#ee6a43",limbs:"#ee6a43",belly:tt,accent:"#ffd9c2",outline:H,hands:"#5a3426",feet:"#5a3426"},head:"wide",ears:"pointy",face:{eyes:"dot",mouth:"cat",nose:me,muzzle:"cheeks"},tail:"fluffy",headExtras:[],bodyExtras:[]},{id:"mascot",name:{en:"Fabi",it:"Fabi"},band:"all",special:!0,palette:{body:"#ee6a43",limbs:"#ee6a43",belly:tt,accent:"#5a3426",outline:H,hands:"#5a3426",feet:"#5a3426"},head:"wide",ears:"pointy",face:{eyes:"bead",mouth:"open",nose:me,muzzle:"band",cheeks:V},tail:"brush",headExtras:[],bodyExtras:["star"],extraColors:["#ffd84a"]},{id:"bunny",name:{en:"Bunny",it:"Coniglietto"},band:"3-5",palette:{body:"#f9d0de",limbs:"#f9d0de",belly:"#fff6f8",accent:"#f4a0b9",outline:Y},head:"round",ears:"long",face:{eyes:"dot",mouth:"cat",nose:"#e0607e",muzzle:"none",cheeks:V},tail:"pom",headExtras:[],bodyExtras:[]},{id:"bear",name:{en:"Bear",it:"Orsetto"},band:"3-5",palette:{body:"#cf9f78",limbs:"#cf9f78",belly:"#f7e0bf",accent:"#f7e0bf",outline:Y},head:"round",ears:"round",face:{eyes:"dot",mouth:"smile",nose:me,muzzle:"oval",cheeks:V},tail:"none",headExtras:[],bodyExtras:[]},{id:"cat",name:{en:"Cat",it:"Gattino"},band:"3-5",palette:{body:"#c8b6ee",limbs:"#c8b6ee",belly:"#f4eeff",accent:"#f7b3c8",outline:Y,hands:"#f4eeff",feet:"#f4eeff"},head:"wide",ears:"pointy",face:{eyes:"big",eyeColor:"#3f9a5a",mouth:"cat",nose:"#f07a9a",muzzle:"none",cheeks:V},tail:"long",headExtras:["whiskers"],bodyExtras:[]},{id:"panda",name:{en:"Panda",it:"Panda"},band:"3-5",palette:{body:"#ffffff",limbs:"#6e6674",belly:"#ffffff",accent:"#6e6674",outline:Y,ears:"#6e6674"},head:"wide",ears:"round",face:{eyes:"mask",mouth:"smile",nose:"#2f2a2c",muzzle:"none",cheeks:"#f6a3a3"},tail:"none",headExtras:[],bodyExtras:[]},{id:"penguin",name:{en:"Penguin",it:"Pinguino"},band:"3-5",palette:{body:"#6c8fca",limbs:"#6c8fca",belly:"#ffffff",accent:"#f9b95c",outline:Y,feet:"#f9b95c"},head:"tall",ears:"none",face:{eyes:"dot",mouth:"beak",muzzle:"heart",cheeks:"#f6a3a3"},tail:"none",headExtras:[],bodyExtras:["flippers","scarf"],extraColors:["#f6907a"]},{id:"frog",name:{en:"Frog",it:"Ranocchio"},band:"3-5",palette:{body:"#8fd487",limbs:"#8fd487",belly:"#e6f7cc",accent:"#62ad62",outline:Y},head:"wide",ears:"none",face:{eyes:"big",eyesOnTop:!0,mouth:"open",muzzle:"none",cheeks:"#f59b8f"},tail:"none",headExtras:[],bodyExtras:["flippers","spots"],extraColors:["#62ad62","#b0e6a4"]},{id:"lion",name:{en:"Lion",it:"Leoncino"},band:"6-8",alsoIn:["3-5"],palette:{body:"#f6c454",limbs:"#f6c454",belly:"#fde7b0",accent:"#fde7b0",outline:H},head:"round",ears:"round",face:{eyes:"dot",mouth:"cat",nose:"#8a4b2a",muzzle:"oval",cheeks:V},tail:"tuft",headExtras:["mane"],bodyExtras:[],extraColors:["#c8692e"]},{id:"unicorn",name:{en:"Unicorn",it:"Unicorno"},band:"6-8",palette:{body:"#fbf5ff",limbs:"#fbf5ff",belly:"#efe0ff",accent:"#fbd46a",outline:H,hands:"#c9a6f2",feet:"#c9a6f2"},head:"tall",ears:"unicorn",face:{eyes:"dot",mouth:"smile",muzzle:"none",cheeks:"#f7a6c8"},tail:"none",headExtras:["rainbow-mane"],bodyExtras:[],extraColors:["#f58cc0","#8fd3f4","#a98ff2"]},{id:"dragon",name:{en:"Little Dragon",it:"Draghetto"},band:"6-8",palette:{body:"#8a63d2",limbs:"#8a63d2",belly:"#fbd46a",accent:"#5fd0b5",outline:H},head:"wide",ears:"horns",face:{eyes:"big",eyeColor:"#3a2a6a",mouth:"teeth",muzzle:"none",cheeks:"#f59bc0"},tail:"arrow",headExtras:[],bodyExtras:["wings"]},{id:"robot",name:{en:"Robot",it:"Robot"},band:"9-12",palette:{body:"#b9c7d2",limbs:"#8b9aa6",belly:"#b9c7d2",accent:"#ee6a43",outline:K,hands:"#ee6a43",feet:"#6b7a86"},head:"square",ears:"antenna",face:{eyes:"screen",eyeColor:"#7ff0ff",mouth:"grill",muzzle:"none"},tail:"none",headExtras:["bolts"],bodyExtras:["panel","joints","boots"],extraColors:["#ff7a6b","#fbd46a","#7ff0ff"]},{id:"astronaut",name:{en:"Astronaut",it:"Astronauta"},band:"9-12",palette:{body:"#f4f1ec",limbs:"#f4f1ec",belly:"#f4f1ec",accent:"#ee6a43",outline:K,hands:"#9fb0bd",feet:"#9fb0bd"},head:"round",ears:"none",face:{eyes:"visor",mouth:"smile",muzzle:"none"},tail:"none",headExtras:["helmet"],bodyExtras:["backpack","badge","boots"],extraColors:["#c9d3db"]},{id:"dinosaur",name:{en:"Dinosaur",it:"Dinosauro"},band:"6-8",palette:{body:"#3fb3a6",limbs:"#3fb3a6",belly:"#c9f0d6",accent:"#f79a3e",outline:H},head:"wide",ears:"none",face:{eyes:"dot",mouth:"teeth",muzzle:"none",cheeks:"#f59b8f"},tail:"spiky",headExtras:["spikes","spots"],bodyExtras:[],extraColors:["#2b8f84","#7fd3c6"]},{id:"monkey",name:{en:"Monkey",it:"Scimmietta"},band:"6-8",palette:{body:"#7b5234",limbs:"#7b5234",belly:"#f2c9a0",accent:"#f2c9a0",outline:H,hands:"#f2c9a0",feet:"#f2c9a0"},head:"round",ears:"side",face:{eyes:"dot",mouth:"open",nose:"#5a3a26",muzzle:"monkey",cheeks:V},tail:"curl",headExtras:["tuft"],bodyExtras:[]},{id:"koala",name:{en:"Koala",it:"Koala"},band:"3-5",palette:{body:"#b7bcc6",limbs:"#b7bcc6",belly:"#eef0f3",accent:"#f4dbe2",outline:Y},head:"wide",ears:"big-round",face:{eyes:"dot",mouth:"smile",nose:"#3b3438",muzzle:"none",cheeks:"#f4a3b0"},tail:"none",headExtras:[],bodyExtras:[]},{id:"tiger",name:{en:"Tiger",it:"Tigrotto"},band:"6-8",palette:{body:"#f9a33a",limbs:"#f9a33a",belly:"#fff1dc",accent:"#fff1dc",outline:H},head:"wide",ears:"round",face:{eyes:"dot",mouth:"cat",nose:"#e2607a",muzzle:"oval",cheeks:V},tail:"striped",headExtras:["stripes","whiskers"],bodyExtras:[],extraColors:["#3a2a22"]},{id:"owl",name:{en:"Owl",it:"Gufetto"},band:"3-5",palette:{body:"#8ec0e6",limbs:"#8ec0e6",belly:"#e3f2fc",accent:"#639cc9",outline:Y,feet:"#f9b95c",hands:"#639cc9"},head:"tall",ears:"tufts",face:{eyes:"big",eyeColor:Y,eyeRing:"#fde08a",mouth:"beak",muzzle:"none",cheeks:"#f6a8b4"},tail:"none",headExtras:[],bodyExtras:["feathers"]},{id:"alien",name:{en:"Alien",it:"Alieno"},band:"9-12",palette:{body:"#9ee05a",limbs:"#9ee05a",belly:"#d8f5a8",accent:"#b07cf2",outline:K},head:"bulb",ears:"antennae",face:{eyes:"almond",eyeColor:"#1e1838",mouth:"smirk",muzzle:"none"},tail:"none",headExtras:[],bodyExtras:["spots"],extraColors:["#7cc23e","#7cc23e"]},{id:"ghost",name:{en:"Friendly Ghost",it:"Fantasmino"},band:"6-8",palette:{body:"#e6f4ff",limbs:"#e6f4ff",belly:"#e6f4ff",accent:"#bcd9f2",outline:H},head:"round",ears:"none",face:{eyes:"dot",mouth:"open",muzzle:"none",cheeks:"#f7a6c8"},tail:"none",headExtras:["curl"],bodyExtras:["sheet"]},{id:"octopus",name:{en:"Octopus",it:"Polpetto"},band:"6-8",palette:{body:"#e0578a",limbs:"#e0578a",belly:"#f7b3cc",accent:"#f7b3cc",outline:H,hands:"#f7b3cc",feet:"#f7b3cc"},head:"tall",ears:"none",face:{eyes:"big",eyeColor:"#3a2140",mouth:"smile",muzzle:"none",cheeks:"#ffd0a0"},tail:"none",headExtras:["spots"],bodyExtras:["tentacles"],extraColors:["#f7b3cc","#f7b3cc"]},{id:"chick",name:{en:"Chick",it:"Pulcino"},band:"3-5",palette:{body:"#ffd45e",limbs:"#ffd45e",belly:"#fff2c2",accent:"#ffa04a",outline:Y,hands:"#ffc23d",feet:"#ffa04a"},head:"round",ears:"none",face:{eyes:"dot",mouth:"beak",muzzle:"none",cheeks:V},tail:"none",headExtras:["eggshell"],bodyExtras:[],extraColors:["#fffaf0"]},{id:"puppy",name:{en:"Puppy",it:"Cucciolo"},band:"3-5",palette:{body:"#f4e4cf",limbs:"#f4e4cf",belly:"#fffaf2",accent:"#f29aa4",outline:Y,ears:"#b58262",hands:"#e6caa6",feet:"#e6caa6"},head:"wide",ears:"floppy",face:{eyes:"dot",mouth:"open",nose:me,muzzle:"oval",cheeks:V},tail:"curl",headExtras:["eye-spot"],bodyExtras:[]},{id:"lamb",name:{en:"Lamb",it:"Agnellino"},band:"3-5",palette:{body:"#fdf8ee",limbs:"#e3d1c2",belly:"#fffdf8",accent:"#f6bcc2",outline:Y,skin:"#f7dccb",hands:"#a58c7e",feet:"#a58c7e"},head:"round",ears:"droopy",face:{eyes:"dot",mouth:"smile",nose:"#e591a0",muzzle:"none",cheeks:V},tail:"pom",headExtras:["wool"],bodyExtras:["wool"]},{id:"duckling",name:{en:"Duckling",it:"Anatroccolo"},band:"3-5",palette:{body:"#fff1a6",limbs:"#fff1a6",belly:"#fffbe0",accent:"#ff9f43",outline:Y,feet:"#ff9f43"},head:"tall",ears:"none",face:{eyes:"dot",mouth:"bill",muzzle:"none",cheeks:V},tail:"none",headExtras:["curl"],bodyExtras:["flippers","scarf"],extraColors:["#86cfe0"]},{id:"shark",name:{en:"Shark",it:"Squalo"},band:"6-8",palette:{body:"#6c95c4",limbs:"#6c95c4",belly:"#eef5fb",accent:"#4c76a8",outline:H,hands:"#eef5fb",feet:"#4c76a8"},head:"wide",ears:"fin",face:{eyes:"dot",mouth:"jaws",muzzle:"none",cheeks:"#f59bb0"},tail:"fish",headExtras:["gills"],bodyExtras:[]},{id:"wolf",name:{en:"Wolf",it:"Lupo"},band:"6-8",palette:{body:"#8f9bb3",limbs:"#8f9bb3",belly:"#eef1f6",accent:"#f3b8c4",outline:H,hands:"#5a647a",feet:"#5a647a"},head:"round",ears:"pointy",face:{eyes:"dot",mouth:"open",nose:me,muzzle:"oval",cheeks:"#f4a3b0"},tail:"fluffy",headExtras:["ruff","forehead"],bodyExtras:[],extraColors:["#636d84"]},{id:"parrot",name:{en:"Parrot",it:"Pappagallo"},band:"6-8",palette:{body:"#e8503f",limbs:"#e8503f",belly:"#ffd25a",accent:"#f6e6c4",outline:H,hands:"#3a9bdc",feet:"#8a7a70"},head:"round",ears:"none",face:{eyes:"big",eyeColor:H,eyeRing:"#ffffff",mouth:"hook",muzzle:"none",cheeks:"#ffb0a0"},tail:"plume",headExtras:["crest"],bodyExtras:["feathers"],extraColors:["#ffd25a","#3fae5a","#3a9bdc"]},{id:"ninja",name:{en:"Ninja",it:"Ninja"},band:"9-12",palette:{body:"#2f3a56",limbs:"#2f3a56",belly:"#2f3a56",accent:"#36c9bb",outline:K,skin:"#b07a52",hands:"#222a40",feet:"#222a40"},head:"round",ears:"none",face:{eyes:"calm",mouth:"none",muzzle:"none",brows:"#2a1d16"},tail:"none",headExtras:["ninja-hood"],bodyExtras:["belt"],extraColors:["#36c9bb","#36c9bb","#36c9bb"]},{id:"skater",name:{en:"Skater",it:"Skater"},band:"9-12",palette:{body:"#3a8fc0",limbs:"#2c3e57",belly:"#2f7aa6",accent:"#ffcf3a",outline:K,skin:"#f2c9a5",hair:"#7a4a2a",hands:"#f2c9a5",feet:"#eef1f5"},head:"round",ears:"human",face:{eyes:"calm",mouth:"smirk",muzzle:"none",brows:"#5a3520"},tail:"none",headExtras:["hair","cap"],bodyExtras:["pocket","joints"],extraColors:["#ff5d73"]},{id:"explorer",name:{en:"Explorer",it:"Giramondo"},band:"9-12",palette:{body:"#5f8f5b",limbs:"#5f8f5b",belly:"#5f8f5b",accent:"#d9bb7e",outline:K,skin:"#7a4a30",hair:"#1d1410",hands:"#7a4a30",feet:"#6b4a2a"},head:"round",ears:"human",face:{eyes:"calm",mouth:"smile",muzzle:"none",brows:"#1d1410"},tail:"none",headExtras:["curls","safari-hat"],bodyExtras:["backpack","straps","boots"],extraColors:["#e07b39","#6b4a2a"]},{id:"wizard",name:{en:"Wizard",it:"Mago"},band:"9-12",palette:{body:"#5b3fa0",limbs:"#5b3fa0",belly:"#5b3fa0",accent:"#3d5fc8",outline:K,skin:"#c98d62",hair:"#a8452a",hands:"#c98d62",feet:"#33255e"},head:"round",ears:"human",face:{eyes:"calm",mouth:"smile",muzzle:"none",brows:"#7a301c"},tail:"none",headExtras:["locks","wizard-hat"],bodyExtras:["robe","belt"],extraColors:["#ffd84a","#ffd84a","#ffd84a"]},{id:"knight",name:{en:"Knight",it:"Cavaliere"},band:"9-12",palette:{body:"#bcc7d3",limbs:"#8e9aa8",belly:"#dce3ea",accent:"#d8443a",outline:K,hands:"#6c7786",feet:"#6c7786"},head:"bucket",ears:"none",face:{eyes:"slit",eyeColor:"#bfefff",mouth:"none",muzzle:"none"},tail:"none",headExtras:["plume"],bodyExtras:["pauldrons","emblem","boots"],extraColors:["#d8443a"]},{id:"racer",name:{en:"Racer",it:"Pilota"},band:"9-12",palette:{body:"#ff6a2b",limbs:"#ff6a2b",belly:"#ffffff",accent:"#ffffff",outline:K,hands:"#232838",feet:"#232838"},head:"round",ears:"none",face:{eyes:"goggle",eyeColor:"#7fd6ff",mouth:"none",muzzle:"none"},tail:"none",headExtras:["stripe"],bodyExtras:["racing-stripe","boots"]},{id:"pirate",name:{en:"Pirate",it:"Pirata"},band:"9-12",palette:{body:"#f2efe6",limbs:"#2a3d6e",belly:"#f2efe6",accent:"#d94545",outline:K,skin:"#d9a072",hair:"#2b1a12",hands:"#d9a072",feet:"#3a2a20"},head:"round",ears:"human",face:{eyes:"calm",mouth:"smirk",muzzle:"none",brows:"#2b1a12"},tail:"none",headExtras:["locks","bandana","eye-patch"],bodyExtras:["stripes","belt","boots"],extraColors:["#d94545","#2a3d6e","#4a3426"]},{id:"diver",name:{en:"Diver",it:"Sub"},band:"9-12",palette:{body:"#1f6582",limbs:"#1f6582",belly:"#1f6582",accent:"#ffb020",outline:K,skin:"#e8b48a",hair:"#c98f2e",hands:"#1b4f66",feet:"#ffb020"},head:"round",ears:"human",face:{eyes:"calm",mouth:"smile",muzzle:"none",brows:"#8a5a1a"},tail:"none",headExtras:["curls","dive-mask"],bodyExtras:["tank","fins"],extraColors:["#c9d3db"]},{id:"hero",name:{en:"Hero",it:"Supereroe"},band:"9-12",palette:{body:"#3557c8",limbs:"#3557c8",belly:"#3557c8",accent:"#e0403a",outline:K,skin:"#5a3825",hair:"#141010",hands:"#e0403a",feet:"#e0403a"},head:"round",ears:"human",face:{eyes:"calm",mouth:"smirk",muzzle:"none",brows:"#141010"},tail:"none",headExtras:["hair","domino"],bodyExtras:["cape","emblem","boots"],extraColors:["#ffd84a"]},{id:"trex",name:{en:"T-Rex",it:"T-Rex"},band:"6-8",alsoIn:["3-5"],palette:{body:"#6cb84e",limbs:"#6cb84e",belly:"#f4e8a8",accent:"#f4e8a8",outline:H},head:"snout-long",ears:"none",face:{eyes:"dot",mouth:"toothy",muzzle:"none",cheeks:"#f59b8f"},tail:"thick",headExtras:["stripes"],bodyExtras:["tiny-arms","strong-legs"],extraColors:["#4a9235","#58a23f"]},{id:"fairy",name:{en:"Fairy",it:"Fatina"},band:"6-8",alsoIn:["3-5"],palette:{body:"#b99af0",limbs:"#a8693f",belly:"#b99af0",accent:"#ffd84a",outline:H,skin:"#a8693f",hair:"#2e1d17",hands:"#a8693f",feet:"#f58cbc"},head:"round",ears:"pixie",face:{eyes:"dot",mouth:"smile",muzzle:"none",cheeks:"#f0857a"},tail:"none",headExtras:["bun","flower-crown"],bodyExtras:["wings-fairy","petals","wand"],extraColors:["#c4ecff","#f7a8cf","#fff3a0","#ffffff"]}],B={M:0,L:1,Q:2,C:3,Z:4},rt=[2,2,4,6,0];function Le(e,t){for(const o of t)ko(e,o)}function ko(e,t){if(t.k==="group"){e.save(),e.translate(t.x,t.y),t.rot&&e.rotate(t.rot),t.s!==void 0&&t.s!==1&&e.scale(t.s,t.s),t.alpha!==void 0&&(e.globalAlpha*=t.alpha),Le(e,t.items),e.restore();return}switch(e.save(),t.alpha!==void 0&&(e.globalAlpha*=t.alpha),e.beginPath(),t.k){case"circle":e.arc(t.x,t.y,Math.max(t.r,0),0,Math.PI*2);break;case"ellipse":e.ellipse(t.x,t.y,Math.max(t.rx,0),Math.max(t.ry,0),t.rot??0,0,Math.PI*2);break;case"rect":xo(e,t);break;case"path":typeof t.d=="string"?wo(e,t.d):mo(e,t.d);break;case"line":e.moveTo(t.pts[0]??0,t.pts[1]??0);for(let o=2;o+1<t.pts.length;o+=2)e.lineTo(t.pts[o],t.pts[o+1]);break}e.lineCap="round",e.lineJoin="round",t.fill&&t.k!=="line"&&(e.fillStyle=t.fill,e.fill()),t.stroke&&(t.lw??1)>0&&(e.strokeStyle=t.stroke,e.lineWidth=t.lw??1,e.stroke()),e.restore()}function xo(e,t){const o=Math.max(0,Math.min(t.r,t.w/2,t.h/2));e.translate(t.x,t.y),t.rot&&e.rotate(t.rot);const r=-t.w/2,a=-t.h/2;e.moveTo(r+o,a),e.lineTo(r+t.w-o,a),e.quadraticCurveTo(r+t.w,a,r+t.w,a+o),e.lineTo(r+t.w,a+t.h-o),e.quadraticCurveTo(r+t.w,a+t.h,r+t.w-o,a+t.h),e.lineTo(r+o,a+t.h),e.quadraticCurveTo(r,a+t.h,r,a+t.h-o),e.lineTo(r,a+o),e.quadraticCurveTo(r,a,r+o,a),e.closePath()}function mo(e,t){for(let o=0;o<t.length;){const r=t[o++];if(r===B.M)e.moveTo(t[o],t[o+1]);else if(r===B.L)e.lineTo(t[o],t[o+1]);else if(r===B.Q)e.quadraticCurveTo(t[o],t[o+1],t[o+2],t[o+3]);else if(r===B.C)e.bezierCurveTo(t[o],t[o+1],t[o+2],t[o+3],t[o+4],t[o+5]);else if(r===B.Z)e.closePath();else return;o+=rt[r]}}function go(e){if(typeof e=="string")return(e.match(/-?\d*\.?\d+(?:e-?\d+)?/gi)??[]).map(Number);const t=[];for(let o=0;o<e.length;){const r=rt[e[o++]];if(r===void 0)break;for(let a=0;a<r;a++)t.push(e[o+a]);o+=r}return t}function wo(e,t){const o=t.match(/[MLQCZ]|-?\d*\.?\d+(?:e-?\d+)?/gi)??[];let r="",a=0;const n=()=>Number(o[a++]);for(;a<o.length;){const i=o[a];if(/[MLQCZ]/i.test(i)&&(r=i.toUpperCase(),a++,r==="Z")){e.closePath();continue}r==="M"?(e.moveTo(n(),n()),r="L"):r==="L"?e.lineTo(n(),n()):r==="Q"?e.quadraticCurveTo(n(),n(),n(),n()):r==="C"?e.bezierCurveTo(n(),n(),n(),n(),n(),n()):a++}}var I=e=>{const t=Math.round(e*100)/100;return t===0?0:t};function R(e,t=.5){const o=e.length;if(o<3)return[];const r=(c,u,f)=>({x:c.x+(u.x-c.x)*f,y:c.y+(u.y-c.y)*f}),a=Math.min(Math.max(t,0),.5),n=r(e[0],e[1],a),i=[B.M,I(n.x),I(n.y)];for(let c=1;c<=o;c++){const u=e[(c-1)%o],f=e[c%o],s=e[(c+1)%o],h=r(u,f,1-a),l=r(f,s,a);i.push(B.L,I(h.x),I(h.y),B.Q,I(f.x),I(f.y),I(l.x),I(l.y))}return i.push(B.Z),i}function L(e,t=1){const o=e.length;if(o<3)return[];const r=[B.M,I(e[0].x),I(e[0].y)],a=t/6;for(let n=0;n<o;n++){const i=e[(n-1+o)%o],c=e[n],u=e[(n+1)%o],f=e[(n+2)%o];r.push(B.C,I(c.x+(u.x-i.x)*a),I(c.y+(u.y-i.y)*a),I(u.x-(f.x-c.x)*a),I(u.y-(f.y-c.y)*a),I(u.x),I(u.y))}return r.push(B.Z),r}function ge(e){const t=e.length;if(t<2)return[];const o=[B.M,I(e[0].x),I(e[0].y)];for(let r=0;r<t-1;r++){const a=e[Math.max(r-1,0)],n=e[r],i=e[r+1],c=e[Math.min(r+2,t-1)];o.push(B.C,I(n.x+(i.x-a.x)/6),I(n.y+(i.y-a.y)/6),I(i.x-(c.x-n.x)/6),I(i.y-(c.y-n.y)/6),I(i.x),I(i.y))}return o}var ye="M0 -1 L0.29 -0.4 L0.95 -0.31 L0.47 0.15 L0.59 0.81 L0 0.5 L-0.59 0.81 L-0.47 0.15 L-0.95 -0.31 L-0.29 -0.4 Z",j="#ffffff",C=[-1,1],at="#3a2420",nt="#f2808f",Re="#26324a",vo="#ffd84a",Q=(...e)=>{const t=[];for(let o=0;o+1<e.length;o+=2)t.push({x:e[o],y:e[o+1]});return t};function st(e,t){const o=e.palette,r=[],a={stroke:o.outline,lw:t},n=s=>e.headExtras.includes(s),i=(s,h)=>e.extraColors?.[s]??h;if(n("mane")){for(let h=0;h<12;h++){const l=h/12*Math.PI*2;r.push({k:"circle",x:Math.cos(l)*1.02,y:Math.sin(l)*1+.04,r:.42,fill:i(0,o.accent),...a})}r.push({k:"circle",x:0,y:.04,r:1.08,fill:i(0,o.accent)})}if(n("rainbow-mane")){const s=e.extraColors??["#f59ac0","#fbd46a","#8fd3f4"];[[.98,.05,.3,.5,-.25],[.92,.58,.26,.42,-.1],[.62,.92,.22,.32,.4]].forEach(([l,d,p,y,b],m)=>r.push({k:"ellipse",x:l,y:d,rx:p,ry:y,rot:b,fill:s[m%s.length],...a}))}if(n("spikes"))for(const s of[-.55,0,.55]){const h=he(s,1.48),l=he(s-.32,.86),d=he(s+.32,.86);r.push({k:"path",d:R([l,h,d],.22),fill:o.accent,...a})}if(n("curl")&&r.push({k:"path",d:L([{x:-.2,y:-.9},{x:-.05,y:-1.3},{x:.32,y:-1.42},{x:.16,y:-1.18},{x:.2,y:-.9}]),fill:o.body,...a}),n("wool"))for(let s=0;s<=8;s++){const h=-1.75+s/8*3.5;r.push({k:"circle",x:Math.sin(h)*.98,y:-Math.cos(h)*.92-.04,r:.34,fill:o.body,...a})}if(n("crest")&&[-.38,0,.38].forEach((s,h)=>{const l=he(s,1.12);r.push({k:"ellipse",x:l.x,y:l.y,rx:.15,ry:.42,rot:s,fill:i(h,o.accent),...a})}),n("plume")&&r.push({k:"path",d:L(Q(-.12,-.92,-.2,-1.42,.1,-1.78,.62,-1.74,.36,-1.46,.16,-.98)),fill:o.accent,...a}),n("locks")&&r.push({k:"path",d:L(Q(-1.14,.58,-1.24,-.2,-.86,-.98,0,-1.2,.86,-.98,1.24,-.2,1.14,.58,.8,.66,0,.2,-.8,.66)),fill:o.hair??o.outline,...a}),n("bun")&&r.push({k:"circle",x:.04,y:-1.14,r:.4,fill:o.hair??o.outline,...a}),n("ninja-hood"))for(const[s,h]of[[.35,.5],[.85,.42]])r.push({k:"ellipse",x:1+Math.cos(s)*h*.8,y:-.5+Math.sin(s)*h*.8,rx:h,ry:.11,rot:s,fill:o.accent,...a});if(n("bandana"))for(const[s,h]of[[Math.PI-.5,.42],[Math.PI-1,.36]])r.push({k:"ellipse",x:-.98+Math.cos(s)*h*.8,y:-.36+Math.sin(s)*h*.8,rx:h,ry:.12,rot:s,fill:o.accent,...a});if(n("ruff"))for(const s of C)r.push({k:"path",d:R(Q(s*.7,-.3,s*1.32,0,s*1.02,.18,s*1.26,.46,s*.86,.56,s*.98,.84,s*.4,.7),.25),fill:o.body,...a});if(e.face.eyesOnTop)for(const s of C)r.push({k:"circle",x:s*.46,y:-.72,r:.38,fill:o.body,...a});r.push(...To(e,t)),r.push(Eo(e,a));const c=e.face.muzzle,u=o.belly;if(c==="oval"&&r.push({k:"ellipse",x:0,y:.4,rx:.46,ry:.32,fill:u}),c==="monkey"){for(const s of C)r.push({k:"circle",x:s*.32,y:-.04,r:.38,fill:u});r.push({k:"ellipse",x:0,y:.4,rx:.56,ry:.4,fill:u})}if(c==="heart"){for(const s of C)r.push({k:"circle",x:s*.36,y:.02,r:.5,fill:u});r.push({k:"ellipse",x:0,y:.38,rx:.66,ry:.48,fill:u})}if(c==="disc")for(const s of C)r.push({k:"circle",x:s*.4,y:.02,r:.44,fill:u});if(c==="cheeks")for(const s of C)r.push({k:"ellipse",x:s*.4,y:.44,rx:.44,ry:.32,fill:u});if(c==="band"&&r.push({k:"path",d:So(e,t),fill:u}),n("stripes")&&e.head==="snout-long"){const s=i(0,o.outline);for(const[h,l,d,p]of[[.46,-.94,.36,-.66],[.8,-.72,.62,-.5],[1,-.36,.78,-.24]])r.push({k:"line",pts:[h,l,d,p],stroke:s,lw:.11})}else if(n("stripes")){const s=i(0,o.outline);r.push({k:"line",pts:[0,-.97,0,-.66],stroke:s,lw:.13});for(const h of C)r.push({k:"line",pts:[h*.3,-.93,h*.24,-.7],stroke:s,lw:.1}),r.push({k:"line",pts:[h*.98,-.05,h*.74,0],stroke:s,lw:.1}),r.push({k:"line",pts:[h*.94,.22,h*.74,.22],stroke:s,lw:.09})}if(n("spots")){const s=i(1,o.belly);r.push({k:"circle",x:-.55,y:-.5,r:.15,fill:s}),r.push({k:"circle",x:.58,y:-.42,r:.11,fill:s}),r.push({k:"circle",x:.22,y:-.76,r:.09,fill:s})}if(e.head==="snout-long")for(const[s,h,l]of[[-1.38,-.14,.06],[-1.14,-.22,.055]])r.push({k:"ellipse",x:s,y:h,rx:l,ry:l*.8,rot:-.3,fill:o.outline,alpha:.85});if(n("forehead")&&r.push({k:"path",d:L(Q(-.62,-.66,0,-.86,.62,-.66,.26,-.36,0,-.1,-.26,-.36),.9),fill:i(0,o.accent)}),n("eye-spot")&&r.push({k:"ellipse",x:.42,y:-.06,rx:.3,ry:.33,rot:.3,fill:o.ears??o.accent}),n("gills"))for(const s of C)for(const h of[0,.12,.24])r.push({k:"path",d:`M${s*(.66+h)} 0.06 Q${s*(.6+h)} 0.22 ${s*(.66+h)} 0.38`,stroke:o.accent,lw:t*.9});const f=o.hair??o.outline;if(n("hair")&&r.push({k:"path",d:L(Q(-1.02,-.06,-1.02,-.58,-.62,-1.04,.08,-1.14,.76,-.92,1.05,-.42,1,-.06,.84,-.4,.42,-.5,.06,-.4,-.34,-.56,-.74,-.38)),fill:f,...a}),n("locks")&&r.push({k:"path",d:L(Q(-1,-.08,-.98,-.62,-.56,-1.02,0,-1.1,.56,-1.02,.98,-.62,1,-.08,.8,-.38,.36,-.44,0,-.4,-.36,-.44,-.8,-.38)),fill:f,...a}),n("bun")&&r.push({k:"path",d:L(Q(-1.02,-.1,-.98,-.62,-.56,-1.02,0,-1.1,.56,-1.02,.98,-.62,1.02,-.1,.84,-.36,.5,-.56,.12,-.48,-.22,-.6,-.6,-.5,-.86,-.36)),fill:f,...a}),n("curls")){for(let s=0;s<7;s++){const h=he(-1.3+s/6*2.6,.86);r.push({k:"circle",x:h.x,y:h.y,r:.3,fill:f,...a})}r.push({k:"ellipse",x:0,y:-.64,rx:.8,ry:.36,fill:f})}if(n("ninja-hood")&&(r.push({k:"rect",x:0,y:0,w:1.56,h:.6,r:.28,fill:o.skin??j,stroke:o.outline,lw:t*.8}),r.push({k:"path",d:"M-0.98 -0.42 Q0 -0.74 0.98 -0.42 L1.0 -0.62 Q0 -0.94 -1.0 -0.62 Z",fill:o.accent,...a})),n("domino")){r.push({k:"path",d:L(Q(-.86,-.04,-.62,-.3,-.18,-.24,0,-.16,.18,-.24,.62,-.3,.86,-.04,.6,.22,.16,.16,0,.1,-.16,.16,-.6,.22),.9),fill:o.accent,...a});for(const s of C)r.push({k:"ellipse",x:s*.38,y:0,rx:.19,ry:.13,fill:j})}if(r.push(...zo(e,t)),n("brows"))for(const s of C)r.push({k:"line",pts:[s*.72,-.5,s*.14,-.3],stroke:o.accent,lw:.16});if(e.face.brows)for(const s of C)r.push({k:"line",pts:[s*.2,-.2,s*.54,-.28],stroke:e.face.brows,lw:.09});if(r.push(...Po(e,t)),e.face.cheeks)for(const s of Ao(e))r.push({k:"ellipse",x:s.x,y:s.y,rx:.15,ry:.1,fill:e.face.cheeks,alpha:.8});if(n("whiskers"))for(const s of C)for(const h of[-.1,.06])r.push({k:"line",pts:[s*.62,.38+h,s*1.06,.3+h*2.2],stroke:o.outline,lw:t*.7,alpha:.75});if(n("rainbow-mane")){const s=e.extraColors??["#f59ac0","#fbd46a","#8fd3f4"];r.push({k:"ellipse",x:.42,y:-.82,rx:.34,ry:.22,rot:.5,fill:s[0],...a}),r.push({k:"ellipse",x:.1,y:-.92,rx:.3,ry:.2,rot:.25,fill:s[1%s.length],...a})}if(e.ears==="unicorn"){const s=[{x:-.18,y:-.84},{x:.02,y:-1.72},{x:.18,y:-.84}];r.push({k:"path",d:R(s,.12),fill:o.accent,...a});for(const h of[-1,-1.2,-1.4]){const l=.16*((h+1.72)/.88);r.push({k:"line",pts:[-l,h+.04,l,h-.04],stroke:o.outline,lw:t*.7,alpha:.6})}}if(n("flower-crown")){const s=[i(1,"#f7a8cf"),i(2,"#fff3a0"),i(3,j)];for(const h of[-.84,-.28,.28,.84]){const l=he(h,.9);r.push({k:"ellipse",x:l.x,y:l.y,rx:.14,ry:.07,rot:h+.5,fill:"#7cc76a",stroke:o.outline,lw:t*.7})}[-1.12,-.56,0,.56,1.12].forEach((h,l)=>{const d=he(h,.9),p=l===2?.13:.11;for(let y=0;y<5;y++){const b=h+y/5*Math.PI*2;r.push({k:"circle",x:d.x+Math.sin(b)*p,y:d.y-Math.cos(b)*p,r:p*.82,fill:s[l%s.length],stroke:o.outline,lw:t*.7})}r.push({k:"circle",x:d.x,y:d.y,r:p*.62,fill:s[l%s.length]}),r.push({k:"circle",x:d.x,y:d.y,r:p*.42,fill:o.accent})})}if(n("helmet")){for(const s of C)r.push({k:"rect",x:s*1,y:.05,w:.26,h:.56,r:.12,fill:o.accent,...a});r.push({k:"path",d:"M-0.62 -0.62 Q-0.3 -0.92 0.12 -0.9",stroke:j,lw:.1,alpha:.9})}if(n("bolts"))for(const s of C)r.push({k:"rect",x:s*1.08,y:.08,w:.2,h:.44,r:.08,fill:o.accent,...a});if(n("tuft")&&r.push({k:"path",d:L([{x:-.26,y:-.95},{x:-.12,y:-1.22},{x:.02,y:-1.04},{x:.16,y:-1.28},{x:.28,y:-.95},{x:0,y:-.86}]),fill:o.body,...a}),n("eggshell")&&r.push({k:"path",d:"M-0.88 -0.5 C-0.88 -1.12 -0.46 -1.42 0 -1.42 C0.46 -1.42 0.88 -1.12 0.88 -0.5 L0.66 -0.66 L0.44 -0.48 L0.22 -0.66 L0 -0.48 L-0.22 -0.66 L-0.44 -0.48 L-0.66 -0.66 Z",fill:i(0,j),...a}),n("wool"))for(const[s,h]of[[-.36,-.84],[.02,-.94],[.4,-.82]])r.push({k:"circle",x:s,y:h,r:.27,fill:o.body,...a});if(n("stripe")&&r.push({k:"rect",x:0,y:-.64,w:.38,h:.62,r:.06,fill:o.accent}),n("eye-patch")&&(r.push({k:"line",pts:[-.97,-.5,.97,.13],stroke:o.outline,lw:.07}),r.push({k:"ellipse",x:.38,y:.02,rx:.21,ry:.19,fill:o.outline})),n("bandana")){r.push({k:"path",d:L(Q(-1.05,-.22,-.96,-.72,-.5,-1.08,.1,-1.14,.72,-.96,1.04,-.56,1.05,-.22,.5,-.46,-.5,-.46)),fill:o.accent,...a});for(const[s,h]of[[-.5,-.8],[.08,-.92],[.6,-.74],[-.12,-.62],[.36,-.6]])r.push({k:"circle",x:s,y:h,r:.06,fill:j,alpha:.85});r.push({k:"circle",x:-.98,y:-.34,r:.15,fill:o.accent,...a})}if(n("cap")){for(const s of C)r.push({k:"line",pts:[s*.98,-.2,s*.5,.82,-s*.05,.98],stroke:o.outline,lw:.06});r.push({k:"path",d:L(Q(-1.1,-.16,-1.04,-.66,-.6,-1.12,0,-1.24,.6,-1.12,1.04,-.66,1.1,-.16,.5,-.4,-.5,-.4)),fill:o.accent,...a}),r.push({k:"path",d:"M-0.74 -0.4 Q0 -0.6 0.74 -0.4 Q0.8 -0.24 0.6 -0.22 Q0 -0.36 -0.6 -0.22 Q-0.8 -0.24 -0.74 -0.4 Z",fill:o.accent,...a}),r.push({k:"circle",x:.5,y:-.82,r:.15,fill:i(0,j),...a});for(const s of[-.42,-.14])r.push({k:"line",pts:[s,-1.04,s+.02,-.78],stroke:o.outline,lw:.07,alpha:.7})}if(n("safari-hat")&&(r.push({k:"ellipse",x:0,y:-.56,rx:1.48,ry:.3,fill:o.accent,...a}),r.push({k:"path",d:L(Q(-.78,-.58,-.7,-1.1,-.3,-1.38,.3,-1.38,.7,-1.1,.78,-.58,0,-.5),.8),fill:o.accent,...a}),r.push({k:"path",d:"M-0.77 -0.72 Q0 -0.62 0.77 -0.72 L0.74 -0.9 Q0 -0.8 -0.74 -0.9 Z",fill:i(1,o.outline),stroke:o.outline,lw:t*.8})),n("wizard-hat")){r.push({k:"ellipse",x:0,y:-.62,rx:1.32,ry:.26,fill:o.accent,...a}),r.push({k:"path",d:R(Q(-.8,-.66,-.36,-1.5,.5,-2.2,.3,-1.46,.8,-.66),.3),fill:o.accent,...a});const s=i(0,vo);for(const[h,l,d]of[[.02,-1.08,.18],[-.38,-.84,.1],[.36,-1.5,.11]])r.push({k:"group",x:h,y:l,s:d,items:[{k:"path",d:ye,fill:s}]})}if(n("dive-mask")){for(const h of C)r.push({k:"line",pts:[h*.7,-.04,h*1,-.12],stroke:o.outline,lw:.2},{k:"line",pts:[h*.7,-.04,h*1,-.12],stroke:o.accent,lw:.11});r.push({k:"rect",x:0,y:0,w:1.42,h:.62,r:.28,fill:"#bfe9f5",alpha:.35}),r.push({k:"rect",x:0,y:0,w:1.42,h:.62,r:.28,stroke:o.outline,lw:.2}),r.push({k:"rect",x:0,y:0,w:1.42,h:.62,r:.28,stroke:o.accent,lw:.11}),r.push({k:"path",d:"M-0.5 -0.16 Q-0.4 -0.24 -0.22 -0.24",stroke:j,lw:.06,alpha:.9});const s="M0.5 0.52 Q0.98 0.56 1.04 0.1 L1.12 -0.92";r.push({k:"path",d:s,stroke:o.outline,lw:.24},{k:"path",d:s,stroke:o.accent,lw:.13})}return r}function Eo(e,t){const o=e.headExtras.includes("ninja-hood")?e.palette.body:e.palette.skin??e.palette.body;switch(e.head){case"round":return{k:"circle",x:0,y:0,r:1,fill:o,...t};case"wide":return{k:"ellipse",x:0,y:.03,rx:1.12,ry:.94,fill:o,...t};case"tall":return{k:"ellipse",x:0,y:-.02,rx:.94,ry:1.04,fill:o,...t};case"square":return{k:"rect",x:0,y:0,w:2,h:1.8,r:.46,fill:o,...t};case"bucket":return{k:"path",d:R(Q(-.94,.96,-.98,-.36,-.62,-1.04,.62,-1.04,.98,-.36,.94,.96),.42),fill:o,...t};case"snout-long":return{k:"path",d:L(Mo,.95),fill:o,...t};case"bulb":return{k:"path",d:L([{x:0,y:-1.02},{x:.86,y:-.74},{x:1.08,y:-.12},{x:.72,y:.62},{x:0,y:.92},{x:-.72,y:.62},{x:-1.08,y:-.12},{x:-.86,y:-.74}]),fill:o,...t}}}var Mo=Q(.7,-.88,.12,-1.04,-.3,-.98,-.72,-.74,-1.2,-.56,-1.5,-.32,-1.6,.04,-1.44,.42,-.9,.72,-.2,.92,.5,.88,.96,.56,1.08,0,.98,-.5);function lt(e,t,o){return e.head==="snout-long"?[{x:-.36,y:-.5,k:.95},{x:.26,y:-.48,k:1.1}]:C.map(r=>({x:r*t,y:o,k:1}))}function Ao(e){return e.head==="snout-long"?Q(-.66,-.14,.66,.1):C.map(t=>({x:t*.64,y:.3}))}function Co(e){return e.head==="round"?{cy:0,rx:1,ry:1}:e.head==="tall"?{cy:-.02,rx:.94,ry:1.04}:{cy:.03,rx:1.12,ry:.94}}function So(e,t){const{cy:o,rx:r,ry:a}=Co(e),n=r-t/2,i=a-t/2,c=.15,u=Math.asin(Math.min(1,(c-o)/i)),f=Math.cos(u)*n,s=p=>Math.round(p*100)/100||0,h=[B.M,s(-f),c],l=[[-.84*f,.02,-.53*f,.06,-.32*f,.24],[-.17*f,.11,.17*f,.11,.32*f,.24],[.53*f,.06,.84*f,.02,f,c]];for(const p of l)h.push(B.C,...p.map(s));const d=24;for(let p=1;p<=d;p++){const y=u+(Math.PI-2*u)*p/d;h.push(B.L,s(Math.cos(y)*n),s(o+Math.sin(y)*i))}return h.push(B.Z),h}function To(e,t){const o=e.palette,r={stroke:o.outline,lw:t},a=[];for(const n of C)switch(e.ears){case"pointy":case"unicorn":{const i=e.ears==="unicorn"?.8:1,c={x:n*.3,y:-.82},u={x:n*.86,y:-.82-.62*i},f={x:n*.94,y:-.36};a.push({k:"path",d:R([c,u,f],.2),fill:o.body,...r});const s={x:(c.x+u.x+f.x)/3,y:(c.y+u.y+f.y)/3},h=[c,u,f].map(l=>({x:s.x+(l.x-s.x)*.55,y:s.y+(l.y-s.y)*.55+.04}));a.push({k:"path",d:R(h,.25),fill:o.accent});break}case"round":a.push({k:"circle",x:n*.72,y:-.72,r:.36,fill:o.ears??o.body,...r}),o.ears||a.push({k:"circle",x:n*.74,y:-.74,r:.19,fill:o.accent});break;case"big-round":a.push({k:"circle",x:n*.96,y:-.46,r:.52,fill:o.body,...r}),a.push({k:"circle",x:n*1,y:-.44,r:.32,fill:o.accent});break;case"long":a.push({k:"ellipse",x:n*.38,y:-1.42,rx:.25,ry:.68,rot:n*.14,fill:o.body,...r}),a.push({k:"ellipse",x:n*.39,y:-1.36,rx:.12,ry:.48,rot:n*.14,fill:o.accent});break;case"side":a.push({k:"circle",x:n*1,y:.02,r:.34,fill:o.body,...r}),a.push({k:"circle",x:n*1.02,y:.02,r:.2,fill:o.belly});break;case"tufts":a.push({k:"path",d:R([{x:n*.3,y:-.84},{x:n*1.22,y:-1.12},{x:n*.92,y:-.42}],.16),fill:o.body,...r}),a.push({k:"line",pts:[n*.62,-.78,n*1,-.98],stroke:o.accent,lw:.08});break;case"antennae":{const i={x:n*.62,y:-1.42};a.push({k:"path",d:`M${n*.3} -0.8 Q${n*.36} -1.2 ${i.x} ${i.y}`,stroke:o.outline,lw:t*2.6}),a.push({k:"path",d:`M${n*.3} -0.8 Q${n*.36} -1.2 ${i.x} ${i.y}`,stroke:o.body,lw:t*1.2}),a.push({k:"circle",x:i.x,y:i.y,r:.17,fill:o.accent,...r});break}case"floppy":a.push({k:"ellipse",x:n*.96,y:.02,rx:.3,ry:.62,rot:-n*.36,fill:o.ears??o.body,...r});break;case"droopy":a.push({k:"ellipse",x:n*1.04,y:-.22,rx:.4,ry:.18,rot:n*.32,fill:o.skin??o.body,...r}),a.push({k:"ellipse",x:n*1.08,y:-.2,rx:.24,ry:.08,rot:n*.32,fill:o.accent});break;case"pixie":a.push({k:"path",d:R(Q(n*.86,-.22,n*1.36,-.5,n*1.02,.26),.28),fill:o.skin??o.body,...r}),a.push({k:"line",pts:[n*.98,-.12,n*1.16,-.3],stroke:o.accent,lw:t*.8,alpha:.5});break;case"human":a.push({k:"ellipse",x:n*.98,y:.06,rx:.17,ry:.23,fill:o.skin??o.body,...r});break;case"horns":{const i=[{x:n*.3,y:-.84},{x:n*.6,y:-1.5},{x:n*.66,y:-.68}];a.push({k:"path",d:R(i,.18),fill:o.accent,...r});break}}return e.ears==="fin"&&a.push({k:"path",d:R(Q(-.4,-.82,.2,-1.62,.46,-.78),.2),fill:o.body,...r}),e.ears==="antenna"&&(a.push({k:"line",pts:[0,-.85,0,-1.42],stroke:o.outline,lw:t*2.6}),a.push({k:"line",pts:[0,-.85,0,-1.42],stroke:o.limbs,lw:t*1.2}),a.push({k:"circle",x:0,y:-1.5,r:.18,fill:o.accent,...r})),a}function zo(e,t){const o=e.palette,r=e.face,a=[],n=o.outline,i=r.eyesOnTop?.46:.4,c=r.eyesOnTop?-.72:-.04,u=(f,s,h)=>({k:"circle",x:f,y:s,r:h,fill:j});switch(r.eyes){case"dot":for(const f of lt(e,i,c))a.push({k:"ellipse",x:f.x,y:f.y,rx:.12*f.k,ry:.155*f.k,fill:n}),a.push(u(f.x+.04*f.k,f.y-.06*f.k,.045*f.k));break;case"bead":for(const f of lt(e,i,c))a.push({k:"ellipse",x:f.x,y:f.y,rx:.16*f.k,ry:.22*f.k,fill:n}),a.push(u(f.x+.05*f.k,f.y-.08*f.k,.065*f.k));break;case"big":for(const f of C)r.eyeRing&&a.push({k:"circle",x:f*i,y:c,r:.36,fill:r.eyeRing,stroke:n,lw:t*.8}),a.push({k:"circle",x:f*i,y:c,r:.25,fill:j,stroke:n,lw:t*.8}),a.push({k:"circle",x:f*i+f*-.03,y:c+.03,r:.14,fill:r.eyeColor??n}),a.push(u(f*i+f*-.03+.05,c-.03,.05));break;case"mask":for(const f of C)a.push({k:"ellipse",x:f*.4,y:0,rx:.24,ry:.32,rot:f*-.55,fill:o.limbs}),a.push({k:"circle",x:f*.4,y:-.02,r:.11,fill:j}),a.push({k:"circle",x:f*.39,y:-0,r:.065,fill:n});break;case"screen":a.push({k:"rect",x:0,y:0,w:1.5,h:.66,r:.26,fill:"#24323d",stroke:n,lw:t*.8});for(const f of C)a.push({k:"ellipse",x:f*.36,y:0,rx:.2,ry:.24,fill:r.eyeColor??"#7ff0ff",alpha:.3}),a.push({k:"ellipse",x:f*.36,y:0,rx:.12,ry:.16,fill:r.eyeColor??"#7ff0ff"});break;case"almond":for(const f of C)a.push({k:"ellipse",x:f*.42,y:-.02,rx:.3,ry:.2,rot:-f*.5,fill:r.eyeColor??n}),a.push(u(f*.42-f*.07,-.08,.07));break;case"calm":for(const f of C)a.push({k:"ellipse",x:f*.38,y:.02,rx:.085,ry:.12,fill:n}),a.push(u(f*.38+.03,-.02,.03));break;case"slit":a.push({k:"line",pts:[0,-.98,0,-.2],stroke:n,lw:t*.8,alpha:.5}),a.push({k:"rect",x:0,y:-.04,w:1.56,h:.26,r:.1,fill:Re,stroke:n,lw:t*.8}),a.push({k:"rect",x:0,y:.3,w:.22,h:.46,r:.08,fill:Re,stroke:n,lw:t*.8});for(const f of C){a.push({k:"ellipse",x:f*.4,y:-.04,rx:.12,ry:.07,fill:r.eyeColor??j});for(const s of[.36,.56])a.push({k:"circle",x:f*.42,y:s,r:.05,fill:n,alpha:.6})}break;case"goggle":for(const f of C)a.push({k:"circle",x:f*.9,y:0,r:.13,fill:o.accent,stroke:n,lw:t*.8});a.push({k:"rect",x:0,y:0,w:1.66,h:.62,r:.3,fill:Re,stroke:n,lw:t*.8}),a.push({k:"path",d:"M-0.6 -0.16 Q-0.42 -0.24 -0.12 -0.24",stroke:j,lw:.07,alpha:.8});for(const f of C)a.push({k:"path",d:`M${f*.5} 0.04 Q${f*.34} -0.08 ${f*.16} 0.02`,stroke:r.eyeColor??"#7fd6ff",lw:.08});for(const f of[-.18,0,.18])a.push({k:"line",pts:[f,.56,f,.72],stroke:n,lw:t*.8,alpha:.6});break;case"visor":a.push({k:"ellipse",x:0,y:.08,rx:.8,ry:.64,fill:"#2a3f6b",stroke:n,lw:t*.8}),a.push({k:"path",d:"M-0.56 -0.14 Q-0.46 -0.4 -0.16 -0.46",stroke:j,lw:.08,alpha:.7});for(const f of C)a.push({k:"ellipse",x:f*.28,y:.04,rx:.1,ry:.14,fill:r.eyeColor??"#cfeeff"});break}return a}function Po(e,t){const o=e.palette,r=e.face,a=[],n=r.eyes==="visor"?"#cfeeff":at,i=t*1.05;switch(r.nose&&r.mouth!=="beak"&&(r.mouth==="cat"?a.push({k:"path",d:R([{x:-.1,y:.22},{x:.1,y:.22},{x:0,y:.33}],.3),fill:r.nose,stroke:r.nose,lw:t*.6}):e.ears==="big-round"?a.push({k:"ellipse",x:0,y:.22,rx:.2,ry:.25,fill:r.nose}):a.push({k:"ellipse",x:0,y:.25,rx:.13,ry:.085,fill:r.nose})),r.mouth){case"smile":a.push({k:"path",d:r.eyes==="visor"?"M-0.16 0.32 Q0 0.46 0.16 0.32":"M-0.17 0.42 Q0 0.58 0.17 0.42",stroke:n,lw:i});break;case"open":a.push({k:"path",d:"M-0.21 0.4 Q0 0.46 0.21 0.4 Q0.19 0.68 0 0.68 Q-0.19 0.68 -0.21 0.4 Z",fill:n,stroke:n,lw:t*.5}),a.push({k:"ellipse",x:0,y:.6,rx:.1,ry:.06,fill:nt});break;case"cat":a.push({k:"path",d:"M-0.19 0.4 Q-0.1 0.5 0 0.37 Q0.1 0.5 0.19 0.4",stroke:n,lw:i});break;case"beak":a.push({k:"path",d:R([{x:-.17,y:.2},{x:.17,y:.2},{x:0,y:.48}],.25),fill:o.accent,stroke:o.outline,lw:t*.8});break;case"teeth":a.push({k:"path",d:"M-0.36 0.34 Q0 0.44 0.36 0.34 Q0.28 0.66 0 0.66 Q-0.28 0.66 -0.36 0.34 Z",fill:n,stroke:n,lw:t*.5});for(const c of C)a.push({k:"rect",x:c*.12,y:.43,w:.1,h:.1,r:.03,fill:j});break;case"grill":a.push({k:"rect",x:0,y:.56,w:.62,h:.2,r:.08,fill:"#24323d",stroke:o.outline,lw:t*.7});for(const c of[-.15,0,.15])a.push({k:"line",pts:[c,.51,c,.61],stroke:"#9fb0bd",lw:t*.6});break;case"tiny":a.push({k:"ellipse",x:0,y:.44,rx:.08,ry:.1,fill:n});break;case"smirk":a.push({k:"path",d:"M-0.16 0.46 Q0.06 0.54 0.22 0.38",stroke:n,lw:i});break;case"bill":a.push({k:"ellipse",x:0,y:.36,rx:.44,ry:.2,fill:o.accent,stroke:o.outline,lw:t*.8}),a.push({k:"path",d:"M-0.36 0.38 Q0 0.46 0.36 0.38",stroke:o.outline,lw:t*.7});for(const c of C)a.push({k:"circle",x:c*.1,y:.28,r:.03,fill:o.outline});break;case"hook":a.push({k:"ellipse",x:0,y:.48,rx:.16,ry:.11,fill:at}),a.push({k:"path",d:"M-0.3 0.12 Q0 -0.02 0.3 0.12 Q0.36 0.52 0.04 0.76 Q0.08 0.52 -0.08 0.46 Q-0.28 0.38 -0.3 0.12 Z",fill:o.accent,stroke:o.outline,lw:t*.8});break;case"toothy":{a.push({k:"path",d:"M-1.4 0.1 Q-0.5 0.36 0.5 0.2 Q0.64 0.16 0.68 0.02 Q0.78 0.28 0.52 0.38 Q-0.4 0.78 -1.3 0.26 Z",fill:n,stroke:n,lw:t*.6}),a.push({k:"ellipse",x:-.38,y:.5,rx:.24,ry:.08,fill:nt});for(const c of[.12,.27,.42,.57,.72,.86]){const u=(1-c)*(1-c)*-1.4+2*(1-c)*c*-.5+c*c*.5,f=(1-c)*(1-c)*.1+2*(1-c)*c*.36+c*c*.2-.01;a.push({k:"path",d:R(Q(u-.08,f,u+.08,f,u,f+.14),.3),fill:j})}for(const c of[.3,.7]){const u=(1-c)*(1-c)*.52+2*(1-c)*c*-.4+c*c*-1.3,f=(1-c)*(1-c)*.38+2*(1-c)*c*.78+c*c*.26+.01;a.push({k:"path",d:R(Q(u-.07,f,u+.07,f,u,f-.12),.3),fill:j})}break}case"jaws":{a.push({k:"path",d:"M-0.5 0.3 Q0 0.5 0.5 0.3 Q0.38 0.72 0 0.72 Q-0.38 0.72 -0.5 0.3 Z",fill:n,stroke:n,lw:t*.5});for(const c of[-.34,-.17,0,.17,.34]){const u=.3+.4*(c+.5)*(.5-c)-.01;a.push({k:"path",d:R(Q(c-.075,u,c+.075,u,c,u+.13),.15),fill:j})}break}}return a}var he=(e,t)=>({x:Math.sin(e)*t,y:-Math.cos(e)*t}),Oo=.5,ne={leftEye:2,rightEye:5,leftEar:7,rightEar:8},se={"3-5":{head:.75,neck:.74,arm:.3,leg:.36,hand:.19,foot:1.2,shoulderMin:.4,shoulderPad:.07,hipMin:.5,hipPad:.22,bottom:.26,bulge:1.12,armsOverHead:!0},"6-8":{head:.6,neck:.78,arm:.22,leg:.28,hand:.15,foot:1,shoulderMin:.34,shoulderPad:.04,hipMin:.4,hipPad:.16,bottom:.14,bulge:1.04,armsOverHead:!1},"9-12":{head:.5,neck:.92,arm:.17,leg:.21,hand:.125,foot:.9,shoulderMin:.36,shoulderPad:.07,hipMin:.32,hipPad:.08,bottom:.1,bulge:1,armsOverHead:!1}},Te="6-8",it=(e,t)=>t!==void 0&&e.band!=="all"&&e.alsoIn?.includes(t)&&t in se?t:e.band in se?e.band:Te,Pr=se[Te].head,_o=.3,Io=.12,Lo=.9,ct=.5,ft=.65,Ro=.35,Do=.2,No=.25,U=(e,t)=>({x:e.x-t.x,y:e.y-t.y}),N=(e,t)=>({x:e.x+t.x,y:e.y+t.y}),P=(e,t)=>({x:e.x*t,y:e.y*t}),de=e=>Math.hypot(e.x,e.y),ut=(e,t)=>({x:(e.x+t.x)/2,y:(e.y+t.y)/2}),ze=e=>{const t=de(e);return t>1e-9?{x:e.x/t,y:e.y/t}:{x:0,y:1}},Qo=(...e)=>e.every(Number.isFinite),Bo=e=>Math.atan2(Math.sin(e),Math.cos(e)),jo=(e,t,o)=>Math.min(Math.max(e,t),o);function ht(e,t,o=!1){return r=>{const a=e[r*3],n=e[r*3+1],i=e[r*3+2];return a===void 0||n===void 0||i===void 0||!Qo(a,n,i)?{x:0,y:0,ok:!1}:{x:t.x+(o?1-a:a)*t.w,y:t.y+n*t.h,ok:i>=Oo}}}function De(e,t,o={}){const r=ht(e,t,o.mirrored),a=r(D.leftShoulder),n=r(D.rightShoulder);if(!a.ok||!n.ok)return null;const i=r(D.leftHip),c=r(D.rightHip),u=ut(a,n),f=de(U(n,a)),s=i.ok&&c.ok;let h=ze(U(n,a));f<1e-6&&(h={x:1,y:0});let l,d,p;if(s){const oe=ut(i,c);d=de(U(oe,u)),d>=f*No?l=ze(U(oe,u)):(l={x:-h.y,y:h.x},l.y<0&&(l=P(l,-1))),p=Math.max(d,f*1.15)}else l={x:-h.y,y:h.x},l.y<0&&(l=P(l,-1)),p=f*1.15,d=p;p=Math.max(p,1e-6);const y={x:l.y,y:-l.x},b=Math.atan2(y.y,y.x),m=P(l,-1),A=se[o.band??Te]??se[Te],M=A.head*p;let S=N(u,P(m,M*A.neck));const q=r(D.nose);if(q.ok){const oe=N(q,P(m,M*.15)),le=P(U(oe,S),Ro),J=Math.min(1,M*Do/Math.max(de(le),1e-6));S=N(S,P(le,J))}return{S:u,r:y,d:l,U:p,L:d,hipsOk:s,head:S,headR:M,headRot:b+Ho(e,r,b,p),angle:b}}function Ho(e,t,o,r){const a=[[ne.leftEar,ne.rightEar],[ne.leftEye,ne.rightEye]];for(const[n,i]of a){const c=t(n),u=t(i);if(!c.ok||!u.ok||!(e[n*3+2]>=ft&&e[i*3+2]>=ft)||de(U(u,c))<r*.05)continue;const f=Bo(Math.atan2(u.y-c.y,u.x-c.x)-o),s=Math.max(Math.abs(f)-Io,0),h=jo((Lo+ct-Math.abs(f))/ct,0,1);return Math.sign(f)*Math.min(s,_o)*h}return 0}function Ne(e,t,o,r={}){const a=it(t,r.band),n=se[a],i=De(e,o,{...r,band:a});if(!i)return[];const c=ht(e,o,r.mirrored),u=t.palette,{S:f,r:s,d:h,U:l,L:d}=i,p=k=>t.bodyExtras.includes(k),y=Math.max(1.2,l*.045),b={stroke:u.outline,lw:y},m=(k,g)=>({x:f.x+s.x*k+h.x*g,y:f.y+s.y*k+h.y*g}),A=k=>k.map(([g,w])=>m(g,w)),M=c(D.leftShoulder),S=c(D.rightShoulder),q=c(D.leftHip),oe=c(D.rightHip),le=de(U(S,M)),J=i.hipsOk?de(U(oe,q)):le*.7,x=Math.max(le/2+n.shoulderPad*l,n.shoulderMin*l),O=Math.max(J/2+n.hipPad*l,n.hipMin*l),E=-.1*l,F=d+n.bottom*l,$=[],T=[],v=[],X=[],be=[],we=(k,g,w,_)=>{const z=g.flatMap(Z=>[Z.x,Z.y]);k.push({k:"line",pts:z,stroke:u.outline,lw:w+y*2}),k.push({k:"line",pts:z,stroke:_,lw:w})},Qe=n.leg*l*(p("strong-legs")?1.3:1),Oe=n.arm*l*(p("tiny-arms")?.6:1),ve=Math.max(n.arm/.22,.9);if(i.hipsOk)for(const[k,g,w,_]of[[q,D.leftKnee,D.leftAnkle,-1],[oe,D.rightKnee,D.rightAnkle,1]]){const z=c(g),Z=c(w);if(!z.ok)continue;const Be=N(k,P(h,-.12*l)),ie=Z.ok?[Be,z,Z]:[Be,z];we(T,ie,Qe,u.limbs),p("joints")&&T.push({k:"circle",x:z.x,y:z.y,r:.15*l*ve,fill:u.accent,...b}),Z.ok&&T.push(...Xo(t,Z,i,_,y,n.foot))}for(const[k,g,w,_]of[[M,D.leftElbow,D.leftWrist,-1],[S,D.rightElbow,D.rightWrist,1]]){const z=c(g),Z=c(w);if(p("pauldrons")){const re=N(k,P(h,.02*l));X.push({k:"ellipse",x:re.x,y:re.y,rx:.25*l,ry:.17*l,rot:i.angle+_*.25,fill:u.body,...b});const ce=N(re,P(h,.05*l));X.push({k:"ellipse",x:ce.x,y:ce.y,rx:.17*l,ry:.07*l,rot:i.angle+_*.25,fill:u.belly})}if(!z.ok)continue;const ie=n.armsOverHead&&(z.x-f.x)*h.x+(z.y-f.y)*h.y<-.25*l?be:X,Tt=N(k,P(h,.04*l));if(we(ie,Z.ok?[Tt,z,Z]:[Tt,z],Oe,u.limbs),p("joints")&&ie.push({k:"circle",x:z.x,y:z.y,r:.13*l*ve,fill:u.accent,...b}),!Z.ok)continue;const te=ze(U(Z,z)),ke=N(Z,P(te,.05*l));if(p("feathers"))for(const re of[-.55,0,.55]){const ce=Math.cos(re),Me=Math.sin(re)*_,fe={x:te.x*ce-te.y*Me,y:te.x*Me+te.y*ce},Ae=N(ke,P(fe,.16*l));ie.push({k:"ellipse",x:Ae.x,y:Ae.y,rx:.2*l,ry:.09*l,rot:Math.atan2(fe.y,fe.x),fill:u.hands??u.accent,...b})}p("wand")&&_===1&&!r.portrait&&ie.push(...$o(t,ke,ze(N(P(te,.4),U(P(s,.6),h))),l,y));const Ee=n.hand*l*(p("tiny-arms")?.72:1);if(p("tiny-arms"))for(const re of[-.45,.45]){const ce=Math.cos(re),Me=Math.sin(re),fe={x:te.x*ce-te.y*Me,y:te.x*Me+te.y*ce},Ae=N(ke,P(fe,Ee*.75)),Sr=N(ke,P(fe,Ee*1.6)),zt={x:-fe.y*Ee*.32,y:fe.x*Ee*.32};ie.push({k:"path",d:R([N(Ae,zt),Sr,U(Ae,zt)],.2),fill:u.belly,...b})}ie.push({k:"circle",x:ke.x,y:ke.y,r:Ee,fill:u.hands??u.limbs,...b})}if(p("wings"))for(const k of[-1,1]){const g=A([[k*x*.5,.05*l],[k*(x+.85*l),-.6*l],[k*(x+.72*l),.05*l],[k*(x+.45*l),-.02*l],[k*(x+.3*l),.32*l],[k*x*.6,.55*l]]);$.push({k:"path",d:R(g,.18),fill:u.accent,...b})}if(p("wings-fairy")&&$.push(...Zo(t,m,x,l,y)),p("cape")){const k=d+.8*l,g=O+.36*l,w=A([[-x*.92,E+.04*l],[x*.92,E+.04*l],[x+.16*l,d*.5],[g,k],[g*.5,k-.1*l],[0,k],[-g*.5,k-.1*l],[-g,k],[-x-.16*l,d*.5]]);$.push({k:"path",d:L(w,.6),fill:u.accent,...b})}if(p("backpack")){const k=m(0,.35*l);$.push({k:"rect",x:k.x,y:k.y,w:x*2+.34*l,h:.8*l,r:.16*l,rot:i.angle,fill:t.extraColors?.[0]??u.limbs,...b})}if(p("tank")){const k=m(x*.95,.24*l),g=t.extraColors?.[0]??u.accent,w=m(x*.95,-.3*l);$.push({k:"rect",x:w.x,y:w.y,w:.14*l,h:.16*l,r:.04*l,rot:i.angle,fill:u.outline}),$.push({k:"rect",x:k.x,y:k.y,w:.34*l,h:1*l,r:.17*l,rot:i.angle,fill:g,...b})}if(i.hipsOk&&!r.portrait&&$.push(...qo(t,i,O,y)),p("tentacles")&&i.hipsOk)for(const k of[-1,1]){const g=A([[k*O*.7,d*.9],[k*(O+.22*l),d+.3*l],[k*(O+.48*l),d+.22*l],[k*(O+.5*l),d-.02*l],[k*(O+.34*l),d-.06*l]]);$.push({k:"path",d:ge(g),stroke:u.outline,lw:.2*l+y*2}),$.push({k:"path",d:ge(g),stroke:u.limbs,lw:.2*l})}const G=Math.max(x,O)*n.bulge;if(p("wool")){for(const[g,w]of[[x*.7,E+.02*l],[G,d*.3],[G*1.02,d*.62],[(G+O)/2,d*.92],[O*.55,F]])for(const _ of[-1,1]){const z=m(_*g,w);v.push({k:"circle",x:z.x,y:z.y,r:.2*l,fill:u.body,...b})}const k=m(0,F+.02*l);v.push({k:"circle",x:k.x,y:k.y,r:.2*l,fill:u.body,...b})}if(p("robe")){const k=d+.58*l,g=O*1.4;v.push({k:"path",d:L(A([[-x,E],[0,E-.04*l],[x,E],[G,d*.55],[g,k],[0,k+.06*l],[-g,k],[-G,d*.55]]),.7),fill:u.body,...b});const w=A([[-g*.94,k-.1*l],[0,k-.04*l],[g*.94,k-.1*l]]);v.push({k:"path",d:ge(w),stroke:t.extraColors?.[0]??u.accent,lw:.07*l})}else if(p("sheet")){const k=d+.78*l,g=O*1.3;v.push({k:"path",d:L(A([[-x,E],[x,E],[G,d*.55],[g,k],[g*.5,k-.2*l],[0,k],[-g*.5,k-.2*l],[-g,k],[-G,d*.55]]),.9),fill:u.body,...b})}else v.push({k:"path",d:L(A([[-x,E],[0,E-.04*l],[x,E],[G,d*.55],[O,F],[0,F+.03*l],[-O,F],[-G,d*.55]]),.85),fill:u.body,...b});const ee=Math.min(x,O);if(p("pocket")){const k=m(0,d*.74);v.push({k:"rect",x:k.x,y:k.y,w:ee*1.3,h:.3*l,r:.1*l,rot:i.angle,fill:u.belly,stroke:u.outline,lw:y*.8})}else if(p("racing-stripe"))for(const k of[-.1,.1]){const g=m(k*l,E+.02*l),w=m(k*l,F-.04*l);v.push({k:"line",pts:[g.x,g.y,w.x,w.y],stroke:u.belly,lw:.1*l})}else if(u.belly&&u.belly!==u.body&&!p("panel")&&!p("sheet")&&!p("stripes")){const k=m(0,d*.58);v.push({k:"ellipse",x:k.x,y:k.y,rx:ee*.64,ry:Math.max(d*.36,.2*l),rot:i.angle,fill:u.belly})}if(p("spots")){const k=t.extraColors?.[1]??u.belly;for(const[g,w,_]of[[-.55,.35,.09],[.5,.62,.11],[-.35,.86,.07]]){const z=m(g*ee,w*d);v.push({k:"circle",x:z.x,y:z.y,r:_*l,fill:k})}}if(p("stripes")){const k=t.extraColors?.[1]??u.accent;for(const g of[.22,.44,.66]){const w=m(-ee*.98,d*g),_=m(ee*.98,d*g);v.push({k:"line",pts:[w.x,w.y,_.x,_.y],stroke:k,lw:.1*l})}}if(p("straps")){const k=t.extraColors?.[1]??u.outline;for(const g of[-1,1]){const w=m(g*x*.62,E+.02*l),_=m(g*ee*.62,d*.72);v.push({k:"line",pts:[w.x,w.y,_.x,_.y],stroke:u.outline,lw:.13*l+y*2}),v.push({k:"line",pts:[w.x,w.y,_.x,_.y],stroke:k,lw:.13*l})}}if(p("belt")){const k=m(0,d*.9);v.push({k:"rect",x:k.x,y:k.y,w:O*1.92,h:.17*l,r:.06*l,rot:i.angle,fill:t.extraColors?.[2]??"#4a3426",...b}),v.push({k:"rect",x:k.x,y:k.y,w:.2*l,h:.19*l,r:.04*l,rot:i.angle,fill:"#ffd84a",...b})}if(p("emblem")){const k=m(0,d*.4),g=t.extraColors?.[0]??u.accent,w=R([{x:-.22,y:-.2},{x:.22,y:-.2},{x:.22,y:.04},{x:0,y:.26},{x:-.22,y:.04}],.25);v.push({k:"group",x:k.x,y:k.y,rot:i.angle,s:l,items:[{k:"path",d:w,fill:g,stroke:u.outline,lw:y/l},{k:"group",x:0,y:.01,s:.12,items:[{k:"path",d:ye,fill:g===u.accent?"#ffffff":u.accent}]}]})}if(p("panel")){const k=m(0,d*.5);v.push({k:"rect",x:k.x,y:k.y,w:ee*1.2,h:.38*l,r:.1*l,rot:i.angle,fill:"#24323d",...b}),(t.extraColors??["#ff7a6b","#fbd46a","#7ff0ff"]).slice(0,3).forEach((w,_)=>{const z=m((_-1)*ee*.34,d*.5);v.push({k:"circle",x:z.x,y:z.y,r:.075*l,fill:w})})}if(p("badge")){const k=m(-ee*.42,d*.36);v.push({k:"circle",x:k.x,y:k.y,r:.15*l,fill:u.accent,...b}),v.push({k:"group",x:k.x,y:k.y,rot:i.angle,s:.09*l,items:[{k:"path",d:ye,fill:"#ffffff"}]})}if(p("star")){const k=m(-ee*.5,d*.3),g=.15*l;v.push({k:"group",x:k.x,y:k.y,rot:i.angle-.2,s:g,items:[{k:"path",d:ye,fill:t.extraColors?.[0]??"#ffd84a",stroke:u.outline,lw:y*.8/g}]})}if(p("petals")&&v.push(...Ko(t,m,x,O,G,d,F,l,y,n)),p("scarf")){const k=Math.max(.04,n.head*(1-n.neck)-.06)*l,g=m(0,k),w=t.extraColors?.[0]??u.accent,_=m(x*.45,k+.28*l);v.push({k:"rect",x:_.x,y:_.y,w:.16*l,h:.42*l,r:.06*l,rot:i.angle+.15,fill:w,...b}),v.push({k:"rect",x:g.x,y:g.y,w:x*2.05,h:.2*l,r:.1*l,rot:i.angle,fill:w,...b})}const Cr={k:"group",x:i.head.x,y:i.head.y,rot:i.headRot,s:i.headR,items:Wo(t,y/i.headR)};return[...$,...T,...v,...X,Cr,...be]}var dt=new WeakMap,Fo=64;function Wo(e,t){const o=Number(t.toPrecision(4));let r=dt.get(e);r||dt.set(e,r=new Map);let a=r.get(o);return a||(r.size>=Fo&&r.clear(),r.set(o,a=st(e,o))),a}function Xo(e,t,o,r,a,n){const i=Yo(e,t,o,r,a,n);if(!e.bodyExtras.includes("strong-legs"))return[i];const c=o.U*n,u=N(N(t,P(o.d,.07*c)),P(o.r,r*.06*c)),f=[i];for(const s of[-1,0,1]){const h=N(N(u,P(o.r,s*.12*c)),P(o.d,.09*c));f.push({k:"ellipse",x:h.x,y:h.y,rx:.05*c,ry:.045*c,rot:o.angle,fill:e.palette.belly,stroke:e.palette.outline,lw:a*.8})}return f}function Yo(e,t,o,r,a,n){const i=e.palette,{d:c,r:u}=o,f=o.U*n,s=N(N(t,P(c,.07*f)),P(u,r*.06*f)),h={stroke:i.outline,lw:a},l=i.feet??i.limbs;if(e.bodyExtras.includes("fins")){const d=R([{x:-.13,y:-.06},{x:.13,y:-.06},{x:.24,y:.46},{x:-.24,y:.46}],.22);return{k:"group",x:s.x,y:s.y,rot:o.angle,s:f,items:[{k:"path",d,fill:l,stroke:i.outline,lw:a/f},{k:"line",pts:[0,.06,0,.38],stroke:i.outline,lw:a/f,alpha:.5}]}}return e.bodyExtras.includes("flippers")?{k:"ellipse",x:s.x,y:s.y,rx:.27*f,ry:.11*f,rot:o.angle,fill:l,...h}:e.bodyExtras.includes("boots")?{k:"rect",x:s.x,y:s.y,w:.4*f,h:.24*f,r:.09*f,rot:o.angle,fill:l,...h}:{k:"ellipse",x:s.x,y:s.y,rx:.2*f,ry:.13*f,rot:o.angle,fill:l,...h}}function qo(e,t,o,r){const a=e.palette,{U:n,L:i,S:c,r:u,d:f}=t,s=(y,b)=>({x:c.x+u.x*y+f.x*b,y:c.y+u.y*y+f.y*b}),h=y=>y.map(([b,m])=>s(b,m)),l={stroke:a.outline,lw:r},d=(y,b,m)=>[{k:"path",d:ge(y),stroke:a.outline,lw:b+r*2},{k:"path",d:ge(y),stroke:m,lw:b}],p=[];switch(e.tail){case"none":break;case"fluffy":{const y=h([[o*.5,i*.95],[o+.28*n,i*1],[o+.72*n,i*.62],[o+.78*n,i*.12],[o+.52*n,i*.32],[o+.3*n,i*.6],[o*.6,i*.7]]);p.push({k:"path",d:L(y),fill:a.body,...l});const b=s(o+.72*n,i*.2);p.push({k:"ellipse",x:b.x,y:b.y,rx:.13*n,ry:.2*n,rot:t.angle+.25,fill:a.belly,...l});break}case"brush":{const y=h([[o*.4,i*.98],[o+.42*n,i*1.06],[o+.98*n,i*.66],[o+1.06*n,i*.12],[o+.86*n,-.04*n],[o+.66*n,i*.36],[o+.3*n,i*.66],[o*.5,i*.68]]);p.push({k:"path",d:L(y),fill:a.body,...l});const b=h([[o+1.03*n,i*.36],[o+1.06*n,i*.12],[o+.86*n,-.04*n],[o+.72*n,i*.24],[o+.86*n,i*.34]]);p.push({k:"path",d:L(b),fill:a.belly,...l});break}case"pom":{const y=s(o+.06*n,i*.88);p.push({k:"circle",x:y.x,y:y.y,r:.2*n,fill:a.belly,...l});break}case"long":case"striped":case"tuft":{const y=h([[o*.6,i*.9],[o+.35*n,i*.85],[o+.58*n,i*.4],[o+.5*n,-.02*n]]);if(p.push(...d(y,.14*n,a.body)),e.tail==="tuft"){const b=y[y.length-1];p.push({k:"circle",x:b.x,y:b.y,r:.16*n,fill:e.extraColors?.[0]??a.accent,...l})}if(e.tail==="striped"){for(const m of[.35,.6,.85]){const A=s(o+.35*n+.22999999999999998*n*(m*1.4>1?1:m*1.4),i*(.85-.85*m));p.push({k:"line",pts:[A.x-u.x*.08*n,A.y-u.y*.08*n,A.x+u.x*.08*n,A.y+u.y*.08*n],stroke:e.extraColors?.[0]??a.outline,lw:.06*n})}const b=y[y.length-1];p.push({k:"circle",x:b.x,y:b.y,r:.07*n,fill:e.extraColors?.[0]??a.outline})}break}case"curl":{const y=h([[o*.6,i*.9],[o+.4*n,i*.88],[o+.62*n,i*.45],[o+.5*n,i*.12],[o+.3*n,i*.24],[o+.36*n,i*.42]]);p.push(...d(y,.12*n,a.limbs));break}case"fish":{const y=h([[o*.6,i*.9],[o+.36*n,i*.86],[o+.6*n,i*.5]]);p.push(...d(y,.17*n,a.body));const b=y[y.length-1],m=R([{x:0,y:.06},{x:-.26,y:-.34},{x:.02,y:-.12},{x:.32,y:-.3}],.2);p.push({k:"group",x:b.x,y:b.y,rot:t.angle+.35,s:n,items:[{k:"path",d:m,fill:a.body,stroke:a.outline,lw:r/n}]});break}case"plume":{const y=e.extraColors??[a.accent];[0,1,2].forEach(b=>{const m=s(o+(.12+b*.13)*n,i+(.32-b*.06)*n);p.push({k:"ellipse",x:m.x,y:m.y,rx:.11*n,ry:.44*n,rot:t.angle-.55+b*.28,fill:y[(b+1)%y.length],...l})});break}case"thick":{const y=h([[o*.3,i*.42],[o+.42*n,i*.62],[o+.92*n,i*.96],[o+1.32*n,i*1.08],[o+1.44*n,i*.98],[o+.98*n,i*1.2],[o+.4*n,i*1.22],[o*.3,i*1.12]]);p.push({k:"path",d:L(y,.8),fill:a.body,...l});const b=e.extraColors?.[0]??a.accent;for(const[m,A,M]of[[.28,.58,.26],[.62,.8,.22],[.96,1,.16]]){const S=s(o+m*n,i*A+.03*n),q=s(o+(m-.1)*n,i*A+M*n);p.push({k:"line",pts:[S.x,S.y,q.x,q.y],stroke:b,lw:.09*n})}break}case"spiky":case"arrow":{const y=h([[o*.3,i*.55],[o+.35*n,i*.68],[o+.95*n,i*.86],[o+.35*n,i*1.08],[o*.3,i*1.08]]);if(e.tail==="spiky"){for(const b of[.15,.45,.72]){const m=o+(.2+b*.7)*n,A=i*(.66+b*.19);p.push({k:"path",d:R(h([[m-.12*n,A+.05*n],[m,A-.2*n],[m+.12*n,A+.07*n]]),.2),fill:a.accent,...l})}p.push({k:"path",d:L(y,.7),fill:a.body,...l})}else{const b=h([[o*.6,i*.9],[o+.4*n,i*.92],[o+.62*n,i*.5],[o+.62*n,i*.18]]);p.push(...d(b,.13*n,a.body));const m=b[b.length-1];p.push({k:"group",x:m.x,y:m.y,rot:t.angle,s:n,items:[{k:"path",d:R([{x:-.15,y:.04},{x:0,y:-.22},{x:.15,y:.04}],.2),fill:a.accent,stroke:a.outline,lw:r/n}]})}break}}return p}function $o(e,t,o,r,a){const n=e.palette,i=N(t,P(o,-.08*r)),c=N(t,P(o,.52*r)),u=.2*r;return[{k:"line",pts:[i.x,i.y,c.x,c.y],stroke:n.outline,lw:.06*r+a*2},{k:"line",pts:[i.x,i.y,c.x,c.y],stroke:"#fff3d6",lw:.06*r},{k:"circle",x:c.x,y:c.y,r:.24*r,fill:n.accent,alpha:.28},{k:"group",x:c.x,y:c.y,rot:Math.atan2(o.y,o.x)+Math.PI/2,s:u,items:[{k:"path",d:ye,fill:n.accent,stroke:n.outline,lw:a*.9/u}]}]}function Zo(e,t,o,r,a){const n=e.palette,i=e.extraColors?.[0]??"#cdeeff",c=[];for(const u of[-1,1]){const f=[[[u*o*.3,.12*r],[u*(o+.42*r),-.66*r],[u*(o+1*r),-.74*r],[u*(o+1.02*r),-.18*r],[u*(o+.5*r),.26*r]],[[u*o*.4,.3*r],[u*(o+.6*r),.36*r],[u*(o+.74*r),.78*r],[u*(o+.3*r),.9*r]]];for(const s of f){const h=L(s.map(([y,b])=>t(y,b)),.9);c.push({k:"path",d:h,fill:i,alpha:.6}),c.push({k:"path",d:h,stroke:n.outline,lw:a*.9});const l=s[Math.floor(s.length/2)],d=t(s[0][0],s[0][1]),p=t(s[0][0]+(l[0]-s[0][0])*.75,s[0][1]+(l[1]-s[0][1])*.75);c.push({k:"line",pts:[d.x,d.y,p.x,p.y],stroke:"#ffffff",lw:a*.9,alpha:.85})}for(const[s,h,l]of[[o+.72*r,-.42*r,.075*r],[o+.44*r,-.16*r,.05*r],[o+.5*r,.6*r,.055*r]]){const d=t(u*s,h);c.push({k:"group",x:d.x,y:d.y,s:l,items:[{k:"path",d:ye,fill:"#ffffff"}]})}}return c}function Ko(e,t,o,r,a,n,i,c,u,f){const s=e.palette,h=e.extraColors?.[1]??s.belly,l=[],d=Math.atan2(t(1,0).y-t(0,0).y,t(1,0).x-t(0,0).x),p=5,y=Math.max(r,a*.92)*1.08,b=(n*.8+i)/2,m=[0,4,1,3,2];for(const M of m){const S=M/(p-1)-.5,q=t(S*2*y,b+(.5-Math.abs(S))*.1*c);l.push({k:"ellipse",x:q.x,y:q.y,rx:y*.3,ry:.34*c,rot:d-S*.6,fill:M%2?h:s.body,stroke:s.outline,lw:u})}const A=Math.max(.04,f.head*(1-f.neck)-.04)*c;for(const M of[-1,1,0]){const S=t(M*o*.32,A+(M?0:.05*c));l.push({k:"ellipse",x:S.x,y:S.y,rx:o*.26,ry:.12*c,rot:d+M*.5,fill:M?h:s.body,stroke:s.outline,lw:u*.9})}return l}var Go={nose:[0,-.62],leftShoulder:[-.42,0],rightShoulder:[.42,0],leftElbow:[-.58,.5],rightElbow:[.58,.5],leftWrist:[-.66,.98],rightWrist:[.66,.98],leftHip:[-.27,1],rightHip:[.27,1],leftKnee:[-.31,1.6],rightKnee:[.31,1.6],leftAnkle:[-.33,2.18],rightAnkle:[.33,2.18]};function Vo(e,{cx:t=.5,cy:o=.36,T:r=.18}={}){const a={...Go,...e},n=new Array($e*3).fill(0),i=(f,[s,h],l=.99)=>{n[f*3]=t+s*r,n[f*3+1]=o+h*r,n[f*3+2]=l};for(const f of Object.keys(D))i(D[f],a[f]);const c=a.tilt??0,u=(f,s)=>[a.nose[0]+f*Math.cos(c)-s*Math.sin(c),a.nose[1]+f*Math.sin(c)+s*Math.cos(c)];return i(ne.leftEye,u(-.1,-.08)),i(ne.rightEye,u(.1,-.08)),i(ne.leftEar,u(-.22,-.02)),i(ne.rightEar,u(.22,-.02)),n}var Uo=()=>Vo({}),pt=.5,Jo=.15,er=class{constructor(e={}){W(this,"tracks",new Map),W(this,"offset",NaN),W(this,"lastArrival",NaN),W(this,"interval",33),W(this,"lastT",NaN),W(this,"lostMs"),W(this,"maxExtrapolateMs"),this.lostMs=e.lostMs??250,this.maxExtrapolateMs=e.maxExtrapolateMs??25}get delayMs(){return this.interval}push(e,t,o,r=yt()){Number.isFinite(t)||(t=r),this.clock(t,r);const a=this.tracks.get(e);if(!a||t-a.tb>this.lostMs||t<a.tb-this.lostMs||o.length!==a.b.length){this.tracks.set(e,{a:null,ta:t,b:o,tb:t,out:null,outAt:NaN});return}if(o===a.b||t<=a.tb){t===a.tb&&o!==a.b&&(a.b=o,a.out=null);return}a.a=a.b,a.ta=a.tb,a.b=o,a.tb=t,a.out=null}at(e,t=yt()){const o=this.tracks.get(e);if(!o)return null;if(!o.a)return o.b;if(o.out&&o.outAt===t)return o.out;const r=t-this.offset-this.interval,a=o.tb-o.ta,n=Math.min(a*.5,this.maxExtrapolateMs),i=Math.min(Math.max((r-o.ta)/a,0),1+n/a);return o.out=tr(o.a,o.b,i),o.outAt=t,o.out}forget(e){this.tracks.delete(e)}clear(){this.tracks.clear()}clock(e,t){const o=t-e;if(!Number.isFinite(this.offset)||o<this.offset||o>this.offset+1e3?this.offset=o:Number.isFinite(this.lastArrival)&&(this.offset+=Math.min(o-this.offset,(t-this.lastArrival)/1e3)),this.lastArrival=t,Number.isFinite(this.lastT)&&e>this.lastT){const r=e-this.lastT;r<this.interval*3+20&&(this.interval+=(Math.min(Math.max(r,8),100)-this.interval)*.1)}e<=this.lastT||(this.lastT=e)}},yt=()=>globalThis.performance?.now()??Date.now();function tr(e,t,o){const r=t.slice(),a=o<.5?e:t;for(let n=0;n+2<t.length;n+=3){const i=e[n],c=e[n+1],u=t[n],f=t[n+1];e[n+2]>=pt&&t[n+2]>=pt&&Math.abs(u-i)+Math.abs(f-c)<Jo?(r[n]=i+(u-i)*o,r[n+1]=c+(f-c)*o,r[n+2]=e[n+2]+(t[n+2]-e[n+2])*Math.min(o,1)):(r[n]=a[n],r[n+1]=a[n+1],r[n+2]=a[n+2])}return r}var Or=ot.map(e=>e.id),Pe=new Map(ot.map(e=>[e.id,e])),bt=Pe.get("fox"),or=e=>typeof e=="string"&&Pe.has(e),rr=e=>Pe.get(e),kt=e=>typeof e=="string"?Pe.get(e)??bt:e;function ar(e,t,o,r,a={}){const n=Ne(t,kt(o),r,{mirrored:a.mirrored,band:a.band});return n.length?(e.save(),a.alpha!==void 0&&(e.globalAlpha*=Math.min(Math.max(a.alpha,0),1)),Le(e,n),e.restore(),!0):!1}function nr(e,t,o){const r=kt(e),a=Uo(),n=it(r,o),i=De(a,{x:0,y:0,w:1,h:1},{band:n}),c=mt(st(r,.05)),u=-c.minY,f=Math.min(.27,.43/Math.max(u,1))*t,s=r.head==="snout-long"?(c.minX+c.maxX)/2*f:0,h=f/se[n].head/i.U,l=.5*t+Math.min(0,(u-1.6)*.06*t),d={x:t/2-s-i.head.x*h,y:l-i.head.y*h,w:h,h};return Ne(a,r,d,{portrait:!0,band:n})}function sr(e,t,o=.5){if(!e||e.length!==t.length)return t.slice();const r=t.slice();for(let a=0;a+2<t.length;a+=3){const n=e[a+2],i=t[a+2],c=n>=.5,u=i>=.5;c&&i>=.3&&(r[a+2]=Math.max(i,.5));const f=Math.hypot(t[a]-e[a],t[a+1]-e[a+1]);if(c&&u&&f<.15){const s=o*Math.min(1,xt+(1-xt)*f/lr);r[a]=e[a]+(t[a]-e[a])*s,r[a+1]=e[a+1]+(t[a+1]-e[a+1])*s}else c&&!u&&r[a+2]>=.5&&(r[a]=e[a],r[a+1]=e[a+1])}return fr(e,t,r,o*ir),r}var xt=.1,lr=.03,ir=.35,cr=11;function fr(e,t,o,r){const a=D.leftShoulder*3,n=D.rightShoulder*3,i=(h,l)=>h[l+2]>=.5;if(!i(e,a)||!i(e,n)||!i(t,a)||!i(t,n))return;const c=(h,l)=>(h[a+l]+h[n+l])/2,u=[c(e,0),c(e,1)],f=[c(t,0),c(t,1)],s=[c(o,0),c(o,1)];for(let h=0;h<cr&&h*3+2<t.length;h++){const l=h*3;if(!i(e,l)||!i(t,l))continue;const d=[e[l]-u[0],e[l+1]-u[1]],p=[t[l]-f[0],t[l+1]-f[1]];Math.hypot(p[0]-d[0],p[1]-d[1])>=.15||(o[l]=s[0]+d[0]+(p[0]-d[0])*r,o[l+1]=s[1]+d[1]+(p[1]-d[1])*r)}}function mt(e){const t={minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0},o=(r,a)=>{t.minX=Math.min(t.minX,r),t.minY=Math.min(t.minY,a),t.maxX=Math.max(t.maxX,r),t.maxY=Math.max(t.maxY,a)};for(const r of e){const a="lw"in r&&r.stroke?(r.lw??1)/2:0;switch(r.k){case"circle":o(r.x-r.r-a,r.y-r.r-a),o(r.x+r.r+a,r.y+r.r+a);break;case"ellipse":case"rect":{const n=r.k==="ellipse"?r.rx:r.w/2,i=r.k==="ellipse"?r.ry:r.h/2,c=Math.max(n,i)+a;o(r.x-c,r.y-c),o(r.x+c,r.y+c);break}case"path":{const n=go(r.d);for(let i=0;i+1<n.length;i+=2)o(n[i]-a,n[i+1]-a),o(n[i]+a,n[i+1]+a);break}case"line":for(let n=0;n+1<r.pts.length;n+=2)o(r.pts[n]-a,r.pts[n+1]-a),o(r.pts[n]+a,r.pts[n+1]+a);break;case"group":{const n=mt(r.items);if(!Number.isFinite(n.minX))break;const i=r.s??1,c=Math.cos(r.rot??0),u=Math.sin(r.rot??0);for(const[f,s]of[[n.minX,n.minY],[n.maxX,n.minY],[n.minX,n.maxY],[n.maxX,n.maxY]])o(r.x+(f*c-s*u)*i,r.y+(f*u+s*c)*i);break}}}return t}var ur=()=>{const e=typeof document<"u"?document.timeline?.currentTime:null;return typeof e=="number"&&Number.isFinite(e)?e:globalThis.performance?.now()??Date.now()},gt=()=>globalThis.performance?.now()??Date.now(),wt=class{constructor(e=ur){W(this,"now",e),W(this,"known",new Map),W(this,"smoothed",new Map),W(this,"times",new WeakMap),W(this,"lerp",new er),W(this,"drawnAt",NaN),W(this,"drawn",0),W(this,"smoothedBody",(t,o={})=>{const r=o.interpolate!==!1;if(typeof t=="number"){const a=this.smoothed.get(t);return a?r?this.lerp.at(t,this.tick())??a.body:a.body:null}return typeof t!="object"||t===null||!Array.isArray(t.body)?null:this.posed(t.id,t.body,vt(o.smooth),r)})}note(e,t,o=gt()){for(const r of e)this.known.set(r.id,this.resolve(r.id,r.avatar)),t!==void 0&&Number.isFinite(t)&&Array.isArray(r.body)&&this.times.set(r.body,{t,arrival:o})}of(e){return typeof e=="object"&&e!==null?e.avatar!==void 0?this.resolve(e.id,e.avatar):this.of(e.id):this.known.get(e)??Ke(e-1)}posed(e,t,o,r=!0){const a=this.smooth(e,t,o);return r?this.lerp.at(e,this.tick())??a:a}smooth(e,t,o){const r=this.smoothed.get(e);if(r&&r.raw===t&&r.amount===o)return r.body;r&&r.amount!==o&&this.lerp.forget(e);const a=o<1?sr(r?.body,t,o):t;this.smoothed.set(e,{raw:t,body:a,amount:o});const n=this.times.get(t),i=n?.arrival??gt();return this.lerp.push(e,n?.t??i,a,i),a}takeDrawn(){const e=this.drawn;return this.drawn=0,e}tick(){const e=this.now();return e!==this.drawnAt&&(this.drawnAt=e,this.drawn++),e}resolve(e,t){return or(t)?t:Ke(e-1)}};function hr(e,t){const o=typeof e.getTransform=="function"?e.getTransform():null,r=o&&Math.hypot(o.a,o.b)||1,a=o&&Math.hypot(o.c,o.d)||1,n=(e.canvas?.width??0)/r,i=(e.canvas?.height??0)/a;return t?{x:t.x*n,y:t.y*i,w:t.w*n,h:t.h*i}:{x:0,y:0,w:n,h:i}}var vt=e=>e===!1?1:typeof e=="number"?Math.min(Math.max(e,.05),1):.5;function Et(e,t){return(o,r,a,n,i={})=>{const c=Array.isArray(r)?null:r,u=c?c.body:r;if(!Array.isArray(u))return null;const f=typeof a=="string"?a:e.of(typeof a=="number"?a:c??1),s=typeof a=="number"?a:c?.id,h=s!==void 0?e.posed(s,u,vt(i.smooth),i.interpolate!==!1):u;return ar(o,h,f,n??hr(o,t().view),i.alpha!==void 0?{alpha:i.alpha}:{})?h:null}}function dr(e){const t=new Map,o=(s,h)=>t.get(s)?.forEach(l=>l(h));let r=null,a=null;const n=new Map,i=[],c=s=>r?s(r):i.push(s),u=new wt,f=Et(u,()=>({view:null}));return e.then(s=>{r=s;const h=new Map;s.on("gesture",l=>o(l.gesture,{player:l.player})),s.on("pause",l=>o("pause",{reason:l.reason==="distance"?"distance":"user"})),s.on("resume",()=>o("resume",{})),s.on("break-start",()=>o("break-start",{})),s.on("break-done",l=>o("break-end",{shown:l.shown})),s.onBackdrop((l,d)=>o("backdrop",{backdrop:l,view:d})),s.on("turn",l=>o("turn",{players:[...l.players]})),s.on("capabilities",l=>o("capabilities",{pictures:l.pictures})),s.on("frame",l=>{o("players",{players:l.players});for(const d of l.players)o("hands",{player:d.id,left:d.leftHand,right:d.rightHand}),h.get(d.id)!==d.shape&&(h.set(d.id,d.shape),o("shape",{player:d.id,shape:d.shape}))}),a=pr(s),o("start",a),i.splice(0).forEach(l=>l(s))}),{on(s,h){const l=t.get(s)??new Set;return t.set(s,l),l.add(h),s==="start"&&a&&h(a),()=>{l.delete(h)}},ready:()=>c(s=>s.ready()),score:(s,h)=>c(l=>{const d=h??At(l);n.set(d,s),l.score(d,s)}),break:s=>new Promise(h=>c(l=>{l.break(s).then(h)})),end:s=>c(h=>h.end(typeof s=="number"?yr(h,s,n):s.map(l=>({player:l.player,score:l.score,stars:l.stars??2})))),keys:(s,h)=>c(l=>{Ft(l,s,h)}),pointer:s=>c(h=>{Xt(h,s)}),get players(){return r?.players??Mt},get turns(){return r?.turns??Mt},get input(){return r?.input??"body"},get hasPointer(){return r?.pointer??!1},get canSavePicture(){return r?.canSavePicture??!1},savePicture:(s,h)=>new Promise(l=>c(d=>{d.savePicture(s,h).then(l)})),get muted(){return r?.muted??!1},get view(){return r?.view??null},get device(){return r?.device??null},reportStats:s=>r?.reportStats(s),toScreen:s=>r?r.toScreen(s):Ue(null,s),avatarOf:s=>r?r.avatarOf(s):u.of(s),drawAvatar:(...s)=>r?r.drawAvatar(...s):f(...s),smoothedBody:(...s)=>r?r.smoothedBody(...s):u.smoothedBody(...s)}}var Mt=Object.freeze([]),pr=e=>({ageRange:e.ageRange,players:e.players,locale:e.locale,mode:e.mode,orientation:e.orientation,backdrop:e.backdrop,view:e.view,device:e.device,turns:e.turns,input:e.input,pointer:e.pointer,canSavePicture:e.canSavePicture,muted:e.muted}),At=e=>e.input==="remote"?e.players[0]??1:1;function yr(e,t,o){const r=At(e);return e.input!=="remote"?[{player:r,score:t,stars:2}]:[...e.turns.slice(0,Math.max(e.turns.indexOf(r),0)).map(n=>({player:n,score:o.get(n)??0,stars:2})),{player:r,score:t,stars:2}]}var br=[Zt,.7,.55],Ct=.75,kr=320;function xr(e){if(typeof e=="string"){const t=Ye(e);return"ok"in t?{data:e}:{error:t.error==="too-big"?"too-big":"error"}}try{if(!e||typeof e.toDataURL!="function")return{error:"error"};const{width:t,height:o}=e;if(!(t>0&&o>0))return{error:"error"};const r=e.ownerDocument??document;let a=Math.min(1,$t/Math.max(t,o));for(;;){const n=Math.max(1,Math.round(t*a)),i=Math.max(1,Math.round(o*a)),c=r.createElement("canvas");c.width=n,c.height=i;const u=c.getContext("2d");if(!u)return{error:"error"};u.fillStyle="#fff",u.fillRect(0,0,n,i),u.drawImage(e,0,0,n,i);for(const f of br){const s=c.toDataURL("image/jpeg",f),h=Ye(s);if("ok"in h)return{data:s};if(h.error!=="too-big")return{error:"error"}}if(Math.max(n,i)*Ct<kr)return{error:"too-big"};a*=Ct}}catch{return{error:"error"}}}var mr=(e=window)=>({post:t=>e.parent.postMessage(t,"*"),listen:t=>e.addEventListener("message",o=>o.source===e.parent&&t(o.data))}),gr=1e4,wr=1e3,vr=12e4;function Er(e=mr(),t={}){return new Promise((o,r)=>{const a=new Map,n=[];let i=!1,c=!1,u=!1,f="none",s=null,h="body",l=Object.freeze([]),d=l,p=!1,y=0;const b=new Map;let m;const A=()=>{if(m===void 0){const J=t.cursor!==void 0?t.cursor:typeof document<"u"?Yt():null;m=J?qt(J):null}return m},M=new Set,S=new wt,q=Et(S,()=>({view:s})),oe=S.smoothedBody,le=setTimeout(()=>r(new Error("Fabi Play: no host, is the game opened from Fabi Play?")),gr);e.listen(J=>{if(typeof J!="object"||J===null||J.ns!==Ge)return;const x=J;if(x.type==="init"&&!u){if(x.v!==qe)return clearTimeout(le),r(new Error(`Fabi Play: protocol ${x.v}, this SDK speaks ${qe}`));u=!0,clearTimeout(le),f=x.backdrop==="video"?"video":"none",s=Ve(x.view)??null;const O=lo(x.device)??null;h=x.input==="remote"?"remote":"body";const E=h==="remote"&&x.pointer===!0;p=x.pictures===!0,l=Object.freeze(Array.isArray(x.players)?[...x.players]:[]);const F=h==="remote"&&l.length===1?ho(x.turns):void 0;d=Object.freeze(F&&F[0]===l[0]?F:[...l]);let $={};if(x.stats===!0){let T=performance.now();setInterval(()=>{const X=performance.now();e.post(pe({type:"stats",renderFps:Math.round(S.takeDrawn()*1e3/Math.max(X-T,1)),...$})),T=X},wr).unref?.()}o({locale:x.locale,mode:x.mode,get players(){return l},turns:d,input:h,pointer:E,muted:x.muted,orientation:x.orientation==="portrait"?"portrait":"landscape",ageRange:x.ageRange??"6-8",get backdrop(){return f},get view(){return s},device:O,reportStats:T=>{$=io(T)},toScreen:T=>Ue(s,T),avatarOf:T=>S.of(T),drawAvatar:q,smoothedBody:oe,onBackdrop(T){return M.add(T),()=>{M.delete(T)}},on(T,v){const X=a.get(T)??new Set;return a.set(T,X),X.add(v),()=>{X.delete(v)}},ready:()=>e.post(pe({type:"ready"})),score:(T,v)=>e.post(pe({type:"score",player:T,score:v})),break:(T="level")=>new Promise(v=>{n.push({reason:T,done:v}),e.post(pe({type:"break",reason:T}))}),end:T=>e.post(pe({type:"end",scores:T})),get canSavePicture(){return p},savePicture:async(T,v)=>{if(!p)return"unavailable";const X=xr(T);if("error"in X)return X.error;const be=++y,we=ro(v?.title);return new Promise(Qe=>{const Oe=setTimeout(()=>ve("error"),vr);Oe.unref?.();const ve=G=>{clearTimeout(Oe),b.delete(be),Qe(G)};b.set(be,ve),e.post(pe({type:"picture",data:X.data,id:be,...we?{title:we}:{}}))})}})}else if(u){let O=x;if(x.type==="frame"&&Array.isArray(x.players)&&S.note(x.players,x.t),x.type==="backdrop"){if(x.backdrop!=="video"&&x.backdrop!=="none")return;const E=Ve(x.view)??null;if(x.backdrop===f&&Mr(E,s))return;f=x.backdrop,s=E,O={type:"backdrop",backdrop:f,...s?{view:s}:{}};for(const F of[...M])F(f,s)}if(x.type==="turn"){const E=h==="remote"&&i&&!c&&n[0]?.reason==="turn"?uo(x.players):void 0,F=l[0];if(!E||F===void 0||d.indexOf(E[0])<=d.indexOf(F))return;c=!0,l=Object.freeze(E),O={type:"turn",players:[...E]}}if(x.type==="picture-result"){const E=fo(x);E?.id!==void 0&&b.get(E.id)?.(E.result);return}if(x.type==="capabilities"){if(typeof x.pictures!="boolean"||x.pictures===p)return;p=x.pictures,O={type:"capabilities",pictures:p}}if(x.type==="cursor"){const E=h==="remote"?co(x):void 0;if(!E)return;O=E,A()?.update(E)}(x.type==="pause"||x.type==="break-start"||x.type==="turn")&&m?.cancel(),x.type==="break-start"&&(i=n.length>0);for(const E of a.get(x.type)??[])E(O);x.type==="break-done"&&(i=c=!1,n.shift()?.done(x.shown))}else return})})}var Mr=(e,t)=>e===t||e!==null&&t!==null&&e.x===t.x&&e.y===t.y&&e.w===t.w&&e.h===t.h,St={};je(St,{BAND_BODY:()=>se,DEFAULT_AVATAR:()=>bt,avatarById:()=>rr,avatarShapes:()=>Ne,drawShapes:()=>Le,frameOf:()=>De,iconShapes:()=>nr});function Ar(e){const t=Er(),o=dr(t);e?.dataset.mute!=="manual"&&Dt(t);const r=Object.assign(o,{avatars:{...St}});window.FabiPlay=r;const a=e?.dataset.keys;a&&o.keys(Qt(a));const n=e?.dataset.pointer;return n&&o.pointer({hand:n==="left"||n==="right"?n:"any"}),e?.dataset.ready!=="manual"&&(document.readyState==="complete"?o.ready():window.addEventListener("load",()=>o.ready(),{once:!0})),r}return ue.exports.install(_e)});
|