{"id":10806,"date":"2026-11-01T22:00:19","date_gmt":"2026-11-02T03:00:19","guid":{"rendered":"https:\/\/www.ezcalculatoronline.com\/?page_id=10806"},"modified":"2026-11-01T22:25:46","modified_gmt":"2026-11-02T03:25:46","slug":"sushi-sort","status":"publish","type":"page","link":"https:\/\/www.ezcalculatoronline.com\/games\/sushi-sort\/","title":{"rendered":"Sushi Sort"},"content":{"rendered":"<div id=\"tdi_1\" class=\"tdc-zone\"><div class=\"tdc_zone tdi_2  wpb_row td-pb-row\"  >\n<style scoped>\n\n\/* custom css *\/\n.tdi_2{\r\n                    min-height: 0;\r\n                }\n<\/style><div id=\"tdi_3\" class=\"tdc-row\"><div class=\"vc_row tdi_4  wpb_row td-pb-row\" >\n<style scoped>\n\n\/* custom css *\/\n.tdi_4,\r\n                .tdi_4 .tdc-columns{\r\n                    min-height: 0;\r\n                }.tdi_4,\r\n\t\t\t\t.tdi_4 .tdc-columns{\r\n\t\t\t\t    display: block;\r\n\t\t\t\t}.tdi_4 .tdc-columns{\r\n\t\t\t\t    width: 100%;\r\n\t\t\t\t}\n<\/style><div class=\"vc_column tdi_6  wpb_column vc_column_container tdc-column td-pb-span8\">\n<style scoped>\n\n\/* custom css *\/\n.tdi_6{\r\n                    vertical-align: baseline;\r\n                }.tdi_6 > .wpb_wrapper,\r\n\t\t\t\t.tdi_6 > .wpb_wrapper > .tdc-elements{\r\n\t\t\t\t    display: block;\r\n\t\t\t\t}.tdi_6 > .wpb_wrapper > .tdc-elements{\r\n\t\t\t\t    width: 100%;\r\n\t\t\t\t}.tdi_6 > .wpb_wrapper > .vc_row_inner{\r\n\t\t\t\t    width: auto;\r\n\t\t\t\t}.tdi_6 > .wpb_wrapper{\r\n\t\t\t\t    width: auto;\r\n\t\t\t\t    height: auto;\r\n\t\t\t\t}\n<\/style><div class=\"wpb_wrapper\" ><div class=\"wpb_wrapper td_block_wrap vc_raw_html tdi_8 \"><div class=\"td-fix-index\"><!-- ===== Sushi Sort (cute edition) \u2013 paste into a WordPress \"Custom HTML\" block ===== -->\r\n<div id=\"ssg-root\">\r\n  <div class=\"ssg-wrap\">\r\n    <div class=\"ssg-hud\">\r\n      <div class=\"ssg-lvbadge\" id=\"ssg-lv\">Lv 1 \u00b7 Easy<\/div>\r\n      <div class=\"ssg-prog\"><div class=\"ssg-progfill\" id=\"ssg-pf\"><\/div><span id=\"ssg-sv\">0\/0<\/span><\/div>\r\n      <div class=\"ssg-hearts\" id=\"ssg-hp\"><\/div>\r\n      <div class=\"ssg-score\">\u2605 <span id=\"ssg-sc\">0<\/span><\/div>\r\n    <\/div>\r\n    <div class=\"ssg-stage\"><canvas id=\"ssg-canvas\" aria-label=\"Sushi Sort game\"><\/canvas><\/div>\r\n    <div class=\"ssg-tools\">\r\n      <button type=\"button\" data-a=\"shuffle\" title=\"Shuffle columns\">\ud83d\udd00<b id=\"ssg-shc\">2<\/b><\/button>\r\n      <button type=\"button\" data-a=\"trash\" title=\"Clear unwanted sushi from the belt\">\ud83e\uddf9<b id=\"ssg-trc\">1<\/b><\/button>\r\n      <button type=\"button\" data-a=\"speed\" title=\"Belt speed\">\u23e9<b id=\"ssg-spd\">1x<\/b><\/button>\r\n      <button type=\"button\" data-a=\"music\" id=\"ssg-mus\" title=\"Background music\">\ud83c\udfb5<\/button>\r\n      <button type=\"button\" data-a=\"sound\" id=\"ssg-snd\" title=\"Sound effects\">\ud83d\udd0a<\/button>\r\n      <button type=\"button\" data-a=\"fs\" title=\"Fullscreen\">\u26f6<\/button>\r\n      <button type=\"button\" data-a=\"pause\" title=\"Pause \/ menu\" class=\"ssg-pz\">\u275a\u275a<\/button>\r\n    <\/div>\r\n    <div class=\"ssg-ov\" id=\"ssg-ov\"><\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Fredoka:wght@500;600;700&display=swap');\r\n#ssg-root{max-width:500px;margin:0 auto;font-family:'Fredoka','Trebuchet MS',system-ui,sans-serif;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;line-height:1.3}\r\n#ssg-root *{box-sizing:border-box}\r\n#ssg-root .ssg-wrap{position:relative;display:flex;flex-direction:column;background:#ffe9ef;border-radius:26px;overflow:hidden;border:4px solid #fff;box-shadow:0 14px 36px rgba(224,110,145,.3)}\r\n#ssg-root .ssg-hud{display:flex;align-items:center;gap:7px;padding:10px 11px;background:linear-gradient(135deg,#ff9eb5,#ffb88c)}\r\n#ssg-root .ssg-lvbadge{color:#fff;font-weight:700;border-radius:999px;padding:5px 11px;font-size:14px;white-space:nowrap;box-shadow:inset 0 -3px 0 rgba(0,0,0,.15);background:#4cc38a}\r\n#ssg-root .ssg-prog{flex:1;position:relative;height:26px;min-width:56px;background:rgba(255,255,255,.6);border-radius:999px;overflow:hidden;box-shadow:inset 0 2px 3px rgba(150,60,80,.15)}\r\n#ssg-root .ssg-progfill{position:absolute;left:0;top:0;bottom:0;width:0;background:linear-gradient(90deg,#8ff0b4,#4cc38a);border-radius:999px;transition:width .35s}\r\n#ssg-root .ssg-prog span{position:relative;display:block;text-align:center;line-height:26px;font-weight:700;color:#7a2e45;font-size:14px}\r\n#ssg-root .ssg-hearts{font-size:17px;white-space:nowrap;line-height:1}\r\n#ssg-root .ssg-hearts .on{color:#ff3d6e;text-shadow:0 1px 0 #fff}\r\n#ssg-root .ssg-hearts .off{color:rgba(255,255,255,.7)}\r\n#ssg-root .ssg-score{background:#fff;color:#e0577a;font-weight:700;border-radius:999px;padding:4px 10px;font-size:14px;white-space:nowrap}\r\n#ssg-root .ssg-stage{display:flex;justify-content:center;align-items:center;min-height:0;background:#ffe1c7}\r\n#ssg-root canvas{display:block;touch-action:none;max-width:100%}\r\n#ssg-root .ssg-tools{display:flex;gap:7px;padding:11px 8px 12px;justify-content:center;flex-wrap:wrap;background:linear-gradient(#ffd3de,#ffbfd0)}\r\n#ssg-root .ssg-tools button{all:unset;position:relative;cursor:pointer;background:#fff;color:#c2416a;font-weight:700;font-size:19px;border-radius:16px;width:44px;height:42px;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 0 #f19ab3;transition:transform .08s}\r\n#ssg-root .ssg-tools button:active{transform:translateY(3px);box-shadow:0 1px 0 #f19ab3}\r\n#ssg-root .ssg-tools button.ssg-pz{font-size:15px;letter-spacing:-2px}\r\n#ssg-root .ssg-tools button b{position:absolute;top:-7px;right:-7px;background:#ff5c8a;color:#fff;font-size:11px;min-width:20px;height:20px;padding:0 4px;border-radius:10px;display:flex;align-items:center;justify-content:center;border:2px solid #fff}\r\n#ssg-root .ssg-tools button.dim{opacity:.5}\r\n#ssg-root .ssg-ov{position:absolute;inset:0;display:none;align-items:center;justify-content:center;background:rgba(120,40,70,.45);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);z-index:5;padding:14px}\r\n#ssg-root .ssg-card{background:#fffaf6;border-radius:26px;padding:20px 18px 16px;width:100%;max-width:370px;max-height:100%;overflow:auto;text-align:center;color:#7a2e45;box-shadow:0 14px 34px rgba(120,30,60,.3);border:5px solid #ffc6d5;animation:ssgPop .35s cubic-bezier(.2,1.4,.4,1)}\r\n@keyframes ssgPop{from{transform:scale(.7);opacity:0}to{transform:scale(1);opacity:1}}\r\n#ssg-root .ssg-card h2{margin:2px 0 6px;font-size:30px;color:#ff4d7e;font-weight:700;letter-spacing:.3px}\r\n#ssg-root .ssg-logo{font-size:56px;line-height:1;animation:ssgBob 1.6s ease-in-out infinite}\r\n@keyframes ssgBob{50%{transform:translateY(-6px) rotate(-4deg)}}\r\n#ssg-root .ssg-sub{margin:0 0 12px;font-size:15px}\r\n#ssg-root .ssg-tier{display:inline-block;color:#fff;font-weight:700;border-radius:999px;padding:3px 14px;font-size:14px;margin-bottom:8px}\r\n#ssg-root .ssg-stats{display:grid;grid-template-columns:repeat(2,1fr);gap:6px;margin:10px 0;font-size:14px}\r\n#ssg-root .ssg-stats div{background:#ffeef3;border-radius:12px;padding:7px 4px}\r\n#ssg-root .ssg-stats b{display:block;font-size:18px;color:#ff4d7e}\r\n#ssg-root .ssg-new{background:#fff3c4;border:2px dashed #f5c542;border-radius:14px;padding:8px 10px;margin:8px 0;font-size:14px;text-align:left}\r\n#ssg-root .ssg-btn{all:unset;cursor:pointer;display:block;margin:9px auto;width:84%;padding:12px 0;border-radius:18px;background:linear-gradient(#ff7aa2,#ff5c8a);color:#fff;font-weight:700;font-size:19px;box-shadow:0 5px 0 #d63d6b;text-align:center}\r\n#ssg-root .ssg-btn.alt{background:#ffe0e9;color:#c2416a;box-shadow:0 5px 0 #f3a9bf}\r\n#ssg-root .ssg-btn.green{background:linear-gradient(#7ee3a1,#4cc38a);box-shadow:0 5px 0 #2f9a66}\r\n#ssg-root .ssg-btn:active{transform:translateY(4px);box-shadow:none}\r\n#ssg-root .ssg-legend{display:flex;flex-wrap:wrap;gap:5px;justify-content:center;margin-top:10px;font-size:12px}\r\n#ssg-root .ssg-legend span{color:#fff;border-radius:999px;padding:2px 9px;font-weight:600}\r\n#ssg-root .ssg-tabs{display:flex;flex-wrap:wrap;gap:5px;justify-content:center;margin-top:12px}\r\n#ssg-root .ssg-tab{all:unset;cursor:pointer;padding:4px 11px;border-radius:999px;font-size:13px;font-weight:700;color:var(--c);border:2px solid var(--c);background:#fff}\r\n#ssg-root .ssg-tab.on{background:var(--c);color:#fff}\r\n#ssg-root .ssg-range{font-size:13px;margin-top:8px;opacity:.75}\r\n#ssg-root .ssg-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-top:10px}\r\n#ssg-root .ssg-lvl{all:unset;cursor:pointer;border-radius:14px;padding:7px 0 3px;font-weight:700;font-size:16px;text-align:center;color:#fff;box-shadow:0 4px 0 rgba(0,0,0,.18)}\r\n#ssg-root .ssg-lvl small{display:block;font-size:9px;color:#fff6b0;letter-spacing:-1px;min-height:11px}\r\n#ssg-root .ssg-lvl.lock{background:#e9d3da!important;color:#b99aa5;cursor:default;box-shadow:none}\r\n#ssg-root details.ssg-how{text-align:left;background:#ffeef3;border-radius:14px;padding:8px 12px;margin:10px 0;font-size:14px}\r\n#ssg-root details.ssg-how summary{cursor:pointer;font-weight:700}\r\n#ssg-root details.ssg-how ul{margin:8px 0 2px;padding-left:18px}\r\n#ssg-root .ssg-stars{font-size:44px;color:#ffc531;letter-spacing:4px;margin:2px 0;text-shadow:0 3px 0 #f0a000}\r\n#ssg-root .ssg-stars .e{color:#f1dfe5;text-shadow:none}\r\n#ssg-root{touch-action:manipulation}\r\nhtml.ssg-lock,body.ssg-lock{overflow:hidden!important;overscroll-behavior:none!important}\r\n#ssg-root.ssg-fs{position:fixed!important;left:0!important;top:0!important;right:auto!important;bottom:auto!important;width:100vw;height:100vh;height:100dvh;max-width:none!important;max-height:none!important;margin:0!important;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)!important;z-index:2147483000!important;background:#ffd9e3;transform:none!important;overflow:hidden!important}\r\n#ssg-root.ssg-fs .ssg-wrap{height:100%;border-radius:0;border:0;box-shadow:none}\r\n#ssg-root.ssg-fs .ssg-stage{flex:1;overflow:hidden}\r\n@media (max-height:700px){#ssg-root.ssg-fs .ssg-hud{padding:6px 9px}#ssg-root.ssg-fs .ssg-tools{padding:7px 6px 8px}#ssg-root.ssg-fs .ssg-tools button{height:36px;width:40px;font-size:17px}}\r\n@media (max-width:380px){#ssg-root .ssg-lvbadge{font-size:12px;padding:4px 8px}#ssg-root .ssg-score{font-size:12px;padding:3px 7px}#ssg-root .ssg-hearts{font-size:14px}}\r\n<\/style>\r\n\r\n<script>\r\n(function(){\r\n\"use strict\";\r\nvar root=document.getElementById('ssg-root');\r\nif(!root||root.dataset.init)return; root.dataset.init='1';\r\nvar cv=root.querySelector('#ssg-canvas'), ctx=cv.getContext('2d');\r\nvar stage=root.querySelector('.ssg-stage'), ov=root.querySelector('#ssg-ov');\r\nfunction $(s){return root.querySelector(s);}\r\nvar W=540,H=920,scale=1,PI=Math.PI,FONT=\"'Fredoka','Trebuchet MS',sans-serif\";\r\n\r\n\/* ---------- storage ---------- *\/\r\nvar LS={get:function(k,d){try{var v=localStorage.getItem(k);return v==null?d:JSON.parse(v);}catch(e){return d;}},\r\n        set:function(k,v){try{localStorage.setItem(k,JSON.stringify(v));}catch(e){}}};\r\n\r\n\/* ---------- sound ---------- *\/\r\nvar AC=null, muted=LS.get('ssg_mute',false);\r\nfunction tone(f,d,type,v,f2){\r\n  if(muted)return;\r\n  try{\r\n    AC=AC||new (window.AudioContext||window.webkitAudioContext)();\r\n    if(AC.state==='suspended')AC.resume();\r\n    var o=AC.createOscillator(),g=AC.createGain(),t=AC.currentTime;\r\n    o.type=type||'sine'; o.frequency.setValueAtTime(f,t);\r\n    if(f2)o.frequency.exponentialRampToValueAtTime(f2,t+d);\r\n    g.gain.setValueAtTime(v||.12,t); g.gain.exponentialRampToValueAtTime(.001,t+d);\r\n    o.connect(g); g.connect(AC.destination); o.start(t); o.stop(t+d+.03);\r\n  }catch(e){}\r\n}\r\nfunction seq(notes,gap,type,v,d){notes.forEach(function(f,i){setTimeout(function(){tone(f,d||.2,type||'triangle',v||.13);},i*gap);});}\r\nvar SFX={\r\n  tap:function(){tone(620,.08,'triangle',.11,900);},\r\n  pick:function(){tone(1000,.06,'sine',.08,1400);},\r\n  serve:function(){seq([784,1047,1319],70,'triangle',.12,.16);},\r\n  err:function(){tone(200,.18,'square',.05,140);},\r\n  boost:function(){tone(400,.3,'sine',.12,1500);},\r\n  reveal:function(){tone(1200,.12,'sine',.07,1800);},\r\n  angry:function(){tone(260,.25,'sawtooth',.06,150);},\r\n  win:function(){seq([523,659,784,1047,1319],110,'triangle',.14,.25);},\r\n  lose:function(){seq([523,415,330,262],160,'sine',.13,.3);}\r\n};\r\n\r\n\/* ---------- background music ----------\r\n   Paste your music file URL between the quotes, e.g.\r\n   var BGM_URL='https:\/\/ezcalculatoronline.com\/wp-content\/uploads\/sushi-bgm.mp3';\r\n   Leave empty for no music. *\/\r\nvar BGM_URL='https:\/\/www.ezcalculatoronline.com\/wp-content\/uploads\/2026\/11\/sushi-game.mp3';\r\nvar BGM_VOL=0.35;\r\nvar bgm=null, musicOn=LS.get('ssg_music',true);\r\nfunction bgmPlay(){\r\n  if(!BGM_URL||!musicOn)return;\r\n  try{ if(!bgm){bgm=new Audio(BGM_URL);bgm.loop=true;bgm.volume=BGM_VOL;bgm.preload='auto';}\r\n    var pr=bgm.play();if(pr&&pr.catch)pr.catch(function(){}); }catch(e){}\r\n}\r\nfunction bgmStop(){if(bgm)try{bgm.pause();}catch(e){}}\r\n\r\n\/* ---------- helpers ---------- *\/\r\nfunction ri(a,b){return a+Math.floor(Math.random()*(b-a+1));}\r\nfunction shuffle(a){for(var i=a.length-1;i>0;i--){var j=Math.random()*(i+1)|0,t=a[i];a[i]=a[j];a[j]=t;}return a;}\r\nfunction rr(x,y,w,h,r){r=Math.min(r,w\/2,h\/2);ctx.beginPath();ctx.moveTo(x+r,y);ctx.arcTo(x+w,y,x+w,y+h,r);ctx.arcTo(x+w,y+h,x,y+h,r);ctx.arcTo(x,y+h,x,y,r);ctx.arcTo(x,y,x+w,y,r);ctx.closePath();}\r\nfunction circ(x,y,r){ctx.beginPath();ctx.arc(x,y,r,0,PI*2);ctx.fill();}\r\nfunction ell(x,y,a,b,rot){ctx.beginPath();ctx.ellipse(x,y,a,b,rot||0,0,PI*2);ctx.fill();}\r\nfunction heart(x,y,s,col){ctx.fillStyle=col;ctx.beginPath();ctx.moveTo(x,y+s*.3);ctx.bezierCurveTo(x,y,x-s*.5,y,x-s*.5,y+s*.3);ctx.bezierCurveTo(x-s*.5,y+s*.6,x,y+s*.8,x,y+s);ctx.bezierCurveTo(x,y+s*.8,x+s*.5,y+s*.6,x+s*.5,y+s*.3);ctx.bezierCurveTo(x+s*.5,y,x,y,x,y+s*.3);ctx.fill();}\r\nfunction txt(s,x,y,size,fill,stroke,lw){ctx.font='700 '+size+'px '+FONT;ctx.textAlign='center';ctx.textBaseline='middle';if(stroke){ctx.lineJoin='round';ctx.lineWidth=lw||4;ctx.strokeStyle=stroke;ctx.strokeText(s,x,y);}ctx.fillStyle=fill;ctx.fillText(s,x,y);}\r\n\r\n\/* ---------- belt path ---------- *\/\r\nvar P={x0:68,y0:158,x1:472,y1:492,r:70};\r\nvar SW=P.x1-P.x0-2*P.r, SH=P.y1-P.y0-2*P.r, ARC=PI*P.r\/2;\r\nvar L=2*SW+2*SH+4*ARC, N=38, SP=L\/N;\r\nfunction pathPt(s){\r\n  var r=P.r,a; s=((s%L)+L)%L;\r\n  if(s<SW)return [P.x0+r+s,P.y0]; s-=SW;\r\n  if(s<ARC){a=-PI\/2+s\/r;return [P.x1-r+Math.cos(a)*r,P.y0+r+Math.sin(a)*r];} s-=ARC;\r\n  if(s<SH)return [P.x1,P.y0+r+s]; s-=SH;\r\n  if(s<ARC){a=s\/r;return [P.x1-r+Math.cos(a)*r,P.y1-r+Math.sin(a)*r];} s-=ARC;\r\n  if(s<SW)return [P.x1-r-s,P.y1]; s-=SW;\r\n  if(s<ARC){a=PI\/2+s\/r;return [P.x0+r+Math.cos(a)*r,P.y1-r+Math.sin(a)*r];} s-=ARC;\r\n  if(s<SH)return [P.x0,P.y1-r-s]; s-=SH;\r\n  a=PI+s\/r;return [P.x0+r+Math.cos(a)*r,P.y0+r+Math.sin(a)*r];\r\n}\r\nfunction paramOf(x,y){var best=1e9,bs=0;for(var s=0;s<L;s+=2){var p=pathPt(s),d=(p[0]-x)*(p[0]-x)+(p[1]-y)*(p[1]-y);if(d<best){best=d;bs=s;}}return bs;}\r\nfunction cdist(a,b){var d=Math.abs(((a-b)%L+L)%L);return Math.min(d,L-d);}\r\nvar ENTRY=paramOf(270,P.y1);\r\nvar SEATS=[\r\n  {hx:130,hy:76,bx:50,by:48},{hx:410,hy:76,bx:490,by:48},\r\n  {hx:130,hy:574,bx:50,by:582},{hx:410,hy:574,bx:490,by:582}\r\n];\r\nSEATS[0].ps=paramOf(150,P.y0);SEATS[1].ps=paramOf(390,P.y0);\r\nSEATS[2].ps=paramOf(150,P.y1);SEATS[3].ps=paramOf(390,P.y1);\r\n\r\n\/* ---------- cute sushi ---------- *\/\r\nvar TYPES=['tuna','salmon','tamago','onigiri','shrimp','maki','eel','tako','ikura'];\r\nfunction face(x,y,sc,light,mood){\r\n  var ink=light?'#fff6ea':'#3b2416';\r\n  if(mood==='blink'){ctx.strokeStyle=ink;ctx.lineWidth=1.3*sc;ctx.lineCap='round';\r\n    ctx.beginPath();ctx.moveTo(x-6.5*sc,y);ctx.lineTo(x-3.5*sc,y);ctx.moveTo(x+3.5*sc,y);ctx.lineTo(x+6.5*sc,y);ctx.stroke();}\r\n  else{ctx.fillStyle=ink;ell(x-5*sc,y,1.9*sc,2.3*sc);ell(x+5*sc,y,1.9*sc,2.3*sc);\r\n    ctx.fillStyle=light?'#3b2416':'#fff';circ(x-5.6*sc,y-.9*sc,.75*sc);circ(x+4.4*sc,y-.9*sc,.75*sc);}\r\n  ctx.strokeStyle=ink;ctx.lineWidth=1.2*sc;ctx.lineCap='round';\r\n  ctx.beginPath();ctx.arc(x,y+1.4*sc,1.7*sc,.15*PI,.85*PI);ctx.stroke();\r\n  ctx.fillStyle='rgba(255,100,140,.5)';ell(x-9*sc,y+2.4*sc,2.5*sc,1.5*sc);ell(x+9*sc,y+2.4*sc,2.5*sc,1.5*sc);\r\n}\r\nfunction slabPath(){ctx.beginPath();ctx.moveTo(-19,1);ctx.quadraticCurveTo(-20,-13,-6,-14);ctx.quadraticCurveTo(10,-16,19,-7);ctx.quadraticCurveTo(22,3,12,4);ctx.lineTo(-14,5);ctx.quadraticCurveTo(-20,5,-19,1);ctx.closePath();}\r\nfunction slab(c,d){slabPath();ctx.fillStyle=c;ctx.fill();ctx.strokeStyle=d;ctx.lineWidth=1.6;ctx.stroke();}\r\nfunction shine(){ctx.fillStyle='rgba(255,255,255,.5)';ell(-6,-9,6,2.2,-.2);}\r\nfunction rice(){rr(-16,-2,32,17,8);ctx.fillStyle='#fffdf7';ctx.fill();ctx.strokeStyle='#ead9c0';ctx.lineWidth=1.6;ctx.stroke();}\r\nfunction band(){rr(-4,-17,8,19,2);ctx.fillStyle='#2d3a30';ctx.fill();ctx.fillStyle='rgba(255,255,255,.15)';ctx.fillRect(-3,-16,2,17);}\r\nfunction drawItem(t,x,y,s,mood){\r\n  ctx.save();ctx.translate(x,y);var k=s\/40;ctx.scale(k,k);\r\n  ctx.fillStyle='rgba(120,50,40,.18)';ell(0,16,17,4.5);\r\n  var i;\r\n  switch(t){\r\n    case 'tuna':rice();slab('#ff5b6b','#d93a4c');shine();face(0,7,1,0,mood);break;\r\n    case 'salmon':rice();slab('#ff9a62','#e8743c');ctx.save();slabPath();ctx.clip();ctx.strokeStyle='#ffe6d4';ctx.lineWidth=2.2;\r\n      for(i=-3;i<=3;i++){ctx.beginPath();ctx.moveTo(i*7-6,8);ctx.lineTo(i*7+5,-17);ctx.stroke();}ctx.restore();shine();face(0,7,1,0,mood);break;\r\n    case 'eel':rice();slab('#a65a2e','#6e3516');ctx.strokeStyle='rgba(255,190,120,.6)';ctx.lineWidth=1.4;\r\n      for(i=-2;i<=2;i++){ctx.beginPath();ctx.moveTo(i*7-3,3);ctx.quadraticCurveTo(i*7+2,-5,i*7-1,-12);ctx.stroke();}band();face(0,7,1,0,mood);break;\r\n    case 'tamago':rice();rr(-18,-15,36,15,5);ctx.fillStyle='#ffdb4d';ctx.fill();ctx.strokeStyle='#ecb400';ctx.lineWidth=1.6;ctx.stroke();\r\n      ctx.strokeStyle='rgba(236,170,0,.55)';ctx.beginPath();ctx.moveTo(-17,-10);ctx.lineTo(17,-10);ctx.moveTo(-17,-5);ctx.lineTo(17,-5);ctx.stroke();band();face(0,7,1,0,mood);break;\r\n    case 'shrimp':rice();ctx.beginPath();ctx.moveTo(-18,2);ctx.quadraticCurveTo(-19,-13,0,-13);ctx.quadraticCurveTo(13,-13,15,-5);ctx.lineTo(13,4);ctx.closePath();\r\n      ctx.fillStyle='#ffa184';ctx.fill();ctx.strokeStyle='#ef6a45';ctx.lineWidth=1.6;ctx.stroke();\r\n      ctx.save();ctx.clip();ctx.strokeStyle='#fff1e8';ctx.lineWidth=2.4;for(i=0;i<4;i++){ctx.beginPath();ctx.moveTo(-11+i*6,4);ctx.quadraticCurveTo(-13+i*6,-5,-9+i*6,-14);ctx.stroke();}ctx.restore();\r\n      ctx.fillStyle='#ff5a3c';ctx.beginPath();ctx.moveTo(13,-4);ctx.lineTo(23,-13);ctx.lineTo(22,4);ctx.closePath();ctx.fill();face(0,7,1,0,mood);break;\r\n    case 'tako':rice();slab('#ffe6ec','#e0457b');ctx.save();slabPath();ctx.clip();ctx.fillStyle='#d9487f';ctx.fillRect(-22,-18,44,7);\r\n      ctx.fillStyle='#f7a1c0';[[-10,-2],[-2,0],[6,-2],[12,-5]].forEach(function(p){circ(p[0],p[1],2.3);});ctx.restore();face(0,7,1,0,mood);break;\r\n    case 'onigiri':ctx.beginPath();ctx.moveTo(0,-18);ctx.lineTo(18,13);ctx.lineTo(-18,13);ctx.closePath();ctx.lineJoin='round';\r\n      ctx.lineWidth=11;ctx.strokeStyle='#ead9c0';ctx.stroke();ctx.lineWidth=9;ctx.strokeStyle='#fffdf7';ctx.stroke();ctx.fillStyle='#fffdf7';ctx.fill();\r\n      rr(-8,6,16,11,2);ctx.fillStyle='#2d3a30';ctx.fill();face(0,-2,.95,0,mood);break;\r\n    case 'maki':rr(-15,-6,30,21,6);ctx.fillStyle='#2d3a30';ctx.fill();\r\n      ctx.fillStyle='#3a4a3e';ell(0,-6,15,7.5);ctx.fillStyle='#fffdf7';ell(0,-6,12,5.8);ctx.fillStyle='#7ccf4a';ell(0,-6,5,2.6);\r\n      ctx.fillStyle='rgba(255,255,255,.12)';ctx.fillRect(-12,-2,3,15);face(0,6,.85,1,mood);break;\r\n    case 'ikura':rr(-16,-3,32,18,7);ctx.fillStyle='#2d3a30';ctx.fill();\r\n      [[-11,-4],[-5,-7],[1,-5],[7,-7],[12,-4],[-8,-10],[-2,-12],[4,-11],[9,-9]].forEach(function(p){ctx.fillStyle='#ff7a24';circ(p[0],p[1],3.6);ctx.fillStyle='rgba(255,255,255,.8)';circ(p[0]-1,p[1]-1.3,1.05);});\r\n      ctx.fillStyle='#62c462';ell(11,-13,7,3,-.7);face(0,6,.9,1,mood);break;\r\n  }\r\n  ctx.restore();\r\n}\r\nfunction drawLid(x,y,s,wob){\r\n  ctx.save();ctx.translate(x,y);var k=s\/40;ctx.scale(k,k);ctx.rotate(Math.sin(wob||0)*.06);\r\n  ctx.fillStyle='rgba(120,50,40,.18)';ell(0,16,17,4.5);\r\n  ctx.beginPath();ctx.moveTo(-18,12);ctx.quadraticCurveTo(-18,-16,0,-16);ctx.quadraticCurveTo(18,-16,18,12);ctx.closePath();\r\n  var g=ctx.createLinearGradient(0,-16,0,12);g.addColorStop(0,'#ffe1ea');g.addColorStop(1,'#ffb3c8');ctx.fillStyle=g;ctx.fill();\r\n  ctx.strokeStyle='#f07fa0';ctx.lineWidth=1.8;ctx.stroke();\r\n  rr(-20,10,40,6,3);ctx.fillStyle='#f07fa0';ctx.fill();\r\n  ctx.fillStyle='#f07fa0';circ(0,-18,3.5);\r\n  ctx.fillStyle='rgba(255,255,255,.6)';ell(-8,-6,3,6,.3);\r\n  txt('?',2,0,17,'#fff','#e0577a',3);\r\n  ctx.restore();\r\n}\r\n\r\n\/* ---------- difficulty ---------- *\/\r\nvar MAXL=100;\r\nvar TIERS=[{n:'Easy',c:'#4cc38a',a:1,b:5},{n:'Normal',c:'#3fa7e0',a:6,b:15},{n:'Hard',c:'#f08c3a',a:16,b:30},\r\n  {n:'Expert',c:'#e5484d',a:31,b:50},{n:'Master',c:'#8e4ec6',a:51,b:75},{n:'Legend',c:'#d4a017',a:76,b:100}];\r\nfunction tierOf(n){for(var i=0;i<TIERS.length;i++)if(n<=TIERS[i].b)return i;return TIERS.length-1;}\r\nfunction cfg(n){\r\n  n=Math.min(n,MAXL);\r\n  return {cols:n<=3?3:n<=8?4:5,\r\n    customers:Math.min(90,6+Math.round(n*1.8)),\r\n    types:Math.min(9,3+Math.ceil(n\/3)),\r\n    minNeed:n<8?2:3, maxNeed:Math.min(7,3+Math.floor(n\/8)),\r\n    cap:Math.max(12,30-Math.floor(n\/3)),\r\n    speed:40+Math.min(n,40)*1.5,\r\n    chunk:n<=5?3:2,\r\n    mystery:n>=10?Math.min(.45,.1+(n-10)*.008):0,\r\n    patience:n>=5?Math.max(14,Math.round(44-(n-5)*.5)):0,\r\n    vip:n>=16?Math.min(.3,.08+(n-16)*.004):0,\r\n    shuffle:n<=10?3:2, trash:n<=15?1:2};\r\n}\r\nfunction newFeatures(n){\r\n  var f={1:'\ud83c\udf63 Tap a column to put sushi on the belt. Customers grab what they ordered!',\r\n    4:'\ud83c\udd95 4 columns and more sushi types.',\r\n    5:'\u23f3 Customers now have patience! If time runs out they leave and you lose a \u2764.',\r\n    6:'\ud83d\udd35 Normal levels: more customers every level.',\r\n    9:'\ud83c\udd95 5 columns and a smaller belt. Plan carefully!',\r\n    10:'\u2753 Mystery lids! Hidden sushi is revealed when it reaches the top.',\r\n    16:'\ud83d\udc51 VIP customers! They pay double but are less patient.',\r\n    31:'\ud83d\udd34 Expert: bigger orders and a tiny belt.',\r\n    51:'\ud83d\udfe3 Master: lots of mystery lids and impatient VIPs.',\r\n    76:'\ud83c\udfc6 Legend levels. Only true sushi masters survive!',\r\n    100:'\ud83c\udf8c The final level. Good luck, chef!'}[n];\r\n  return f?[f]:[];\r\n}\r\nfunction buildCols(cnt,maxChunk,ncol,myst){\r\n  var chunks=[],t,n,k;\r\n  for(t in cnt){n=cnt[t];while(n>0){k=Math.min(n,ri(1,maxChunk));chunks.push([t,k]);n-=k;}}\r\n  shuffle(chunks);\r\n  var cols=[],i;for(i=0;i<ncol;i++)cols.push([]);\r\n  chunks.forEach(function(c){\r\n    var min=Math.min.apply(null,cols.map(function(x){return x.length;}));\r\n    var cand=[];for(var j=0;j<ncol;j++)if(cols[j].length<=min+2)cand.push(j);\r\n    var col=cols[cand[ri(0,cand.length-1)]];for(var m=0;m<c[1];m++)col.push({t:c[0],h:false});\r\n  });\r\n  if(myst)cols.forEach(function(col){for(var j=1;j<col.length;j++)if(Math.random()<myst)col[j].h=true;});\r\n  return cols;\r\n}\r\nvar G=null;\r\nfunction newGame(level){\r\n  var c=cfg(level),types=shuffle(TYPES.slice()).slice(0,c.types),pool=[],cnt={};\r\n  for(var i=0;i<c.customers;i++){\r\n    var t=i<types.length?types[i]:types[ri(0,types.length-1)],n=ri(c.minNeed,c.maxNeed);\r\n    pool.push({t:t,n:n});cnt[t]=(cnt[t]||0)+n;\r\n  }\r\n  var gap=10,cw=(492-(c.cols-1)*gap)\/c.cols,IS=c.cols===3?42:c.cols===4?38:35;\r\n  G={level:level,cfg:c,pool:pool,cols:buildCols(cnt,c.chunk,c.cols,c.mystery),\r\n     CW:cw,GAP:gap,IS:IS,ISP:Math.round(IS*.86),\r\n     colOff:[0,0,0,0,0],colShake:[0,0,0,0,0],colPress:[0,0,0,0,0],\r\n     slots:new Array(N).fill(null),off:0,flights:[],parts:[],pops:[],served:0,score:0,combo:0,lastServe:-9,\r\n     time:0,peak:0,state:'menu',stuckT:0,barFlash:0,shuffle:c.shuffle,trash:c.trash,fast:false,\r\n     hearts:3,heartsLost:0,idle:0,loseWhy:'',\r\n     seats:SEATS.map(function(s,i){return {hx:s.hx,hy:s.hy,bx:s.bx,by:s.by,ps:s.ps,c:null,wait:.5+i*.45};})};\r\n}\r\n\r\n\/* ---------- logic ---------- *\/\r\nfunction filled(){var n=0;for(var i=0;i<N;i++)if(G.slots[i])n++;return n;}\r\nfunction groupLen(col){if(!col.length)return 0;var k=1;while(k<col.length&&!col[k].h&&col[k].t===col[0].t)k++;return k;}\r\nfunction activeNeeds(){var s={};G.seats.forEach(function(x){var c=x.c;if(c&&(c.st==='in'||c.st==='wait')&&c.got<c.need)s[c.t]=1;});return s;}\r\nfunction randLook(){\r\n  return {skin:['#ffe0c9','#f6c8a4','#e0a57c','#b97a52','#ffd6b8'][ri(0,4)],\r\n    hair:['#3b2416','#6b4129','#f2c86b','#c0582f','#2a2a3a','#ff9ec3','#8e6bd8'][ri(0,6)],\r\n    shirt:['#ff8fa3','#7dd3c0','#ffd166','#8ab6f9','#c9a7f5','#ffb088','#9be08f'][ri(0,6)],\r\n    style:ri(0,3),acc:ri(0,4),blink:Math.random()*10};\r\n}\r\nfunction spawn(seat){\r\n  var belt={},top={},act=activeNeeds(),best=-1e9,bi=0;\r\n  G.slots.forEach(function(it){if(it)belt[it.t]=(belt[it.t]||0)+1;});\r\n  G.cols.forEach(function(c){if(c.length)top[c[0].t]=(top[c[0].t]||0)+groupLen(c);});\r\n  G.pool.forEach(function(o,i){var sc=(belt[o.t]||0)*3+(top[o.t]||0)*2+Math.random()*2-(act[o.t]?1.5:0);if(sc>best){best=sc;bi=i;}});\r\n  var o=G.pool.splice(bi,1)[0],vip=Math.random()<G.cfg.vip,pat=G.cfg.patience?Math.round((G.cfg.patience+o.n*2)*(vip?.75:1)):0;\r\n  seat.c={t:o.t,need:o.n,got:0,land:0,st:'in',t2:0,cd:0,look:randLook(),pat:pat,left:pat,vip:vip};\r\n}\r\nfunction fly(t,sx,sy,tgt,dur,delay,s0,s1,done){G.flights.push({t:t,sx:sx,sy:sy,tgt:tgt,dur:dur,delay:delay,s0:s0,s1:s1,done:done,e:0});}\r\nfunction burst(x,y,n,cols,hearts){for(var i=0;i<n;i++){var a=Math.random()*PI*2,v=70+Math.random()*150;G.parts.push({x:x,y:y,vx:Math.cos(a)*v,vy:Math.sin(a)*v-130,l:1,c:cols[i%cols.length],r:2+Math.random()*3,h:hearts&&i%2===0});}}\r\nfunction pop(x,y,s,col){G.pops.push({x:x,y:y,txt:s,col:col||'#fff',t:0});}\r\n\r\nvar COLY=684,COLH=232;\r\nfunction colX(i){return 24+i*(G.CW+G.GAP);}\r\n\r\nfunction tapCol(i){\r\n  if(!G||G.state!=='play'||i>=G.cfg.cols)return;\r\n  var col=G.cols[i];if(!col.length)return;\r\n  G.idle=0;\r\n  var t=col[0].t,k=groupLen(col),free=G.cfg.cap-filled();\r\n  if(k>free){G.colShake[i]=.4;G.barFlash=.7;SFX.err();pop(colX(i)+G.CW\/2,COLY-6,'Belt full!','#ff7a9c');return;}\r\n  var empties=[];\r\n  for(var j=0;j<N;j++)if(!G.slots[j])empties.push([cdist(j*SP+G.off,ENTRY),j]);\r\n  empties.sort(function(a,b){return a[0]-b[0];});\r\n  var cx=colX(i)+G.CW\/2,baseOff=G.colOff[i];\r\n  col.splice(0,k);\r\n  if(col.length&&col[0].h){col[0].h=false;SFX.reveal();burst(cx,COLY+26+G.ISP*k,8,['#fff','#ffd6e2','#fff3a0']);}\r\n  for(var m=0;m<k;m++)(function(m){\r\n    var sj=empties[m][1],it={t:t,arr:true};G.slots[sj]=it;\r\n    var sy=COLY+26+m*G.ISP+baseOff;\r\n    fly(t,cx,sy,function(){return pathPt(sj*SP+G.off);},.36,m*.05,G.IS\/34,1,function(){it.arr=false;});\r\n  })(m);\r\n  G.colOff[i]=baseOff+k*G.ISP;G.colPress[i]=.15;G.stuckT=0;SFX.tap();\r\n}\r\nfunction tryPick(seat){\r\n  var c=seat.c;\r\n  for(var i=0;i<N;i++){\r\n    var it=G.slots[i];if(!it||it.arr||it.t!==c.t)continue;\r\n    var s=i*SP+G.off;\r\n    if(cdist(s,seat.ps)<SP*.5){\r\n      G.slots[i]=null;c.got++;c.cd=.1;if(c.pat)c.left=Math.min(c.pat,c.left+2);\r\n      var p=pathPt(s);\r\n      fly(c.t,p[0],p[1],function(){return [seat.bx-8,seat.by-2];},.3,0,1,.75,function(){c.land++;});\r\n      G.score+=10;SFX.pick();return;\r\n    }\r\n  }\r\n}\r\nfunction serve(seat){\r\n  var c=seat.c;c.res='happy';G.served++;\r\n  G.combo=(G.time-G.lastServe<4)?G.combo+1:1;G.lastServe=G.time;\r\n  var bonus=(30*G.combo+(c.pat?Math.ceil(c.left)*2:0))*(c.vip?2:1);G.score+=bonus;if(c.vip)pop(seat.hx,seat.hy-96,'VIP x2!','#ffd84d');\r\n  pop(seat.hx,seat.hy-48,'+'+bonus,'#fff38a');\r\n  if(G.combo>1)pop(seat.hx,seat.hy-74,'Combo x'+G.combo+'!','#ffb3d0');\r\n  burst(seat.hx,seat.hy-24,18,['#ff6b9a','#ffd43b','#7ee3a1','#7cc4ff','#ff9ec3'],true);\r\n  SFX.serve();\r\n}\r\nfunction angry(seat){\r\n  var c=seat.c;c.st='angry';c.res='mad';c.t2=0;\r\n  var rem=c.need-c.got;if(rem>0)G.pool.push({t:c.t,n:rem});\r\n  G.hearts--;G.heartsLost++;G.combo=0;\r\n  pop(seat.hx,seat.hy-50,'\ud83d\udc94','#fff');SFX.angry();\r\n}\r\nfunction doShuffle(){\r\n  if(!G||G.state!=='play'||G.shuffle<=0)return;\r\n  var cnt={};G.cols.forEach(function(c){c.forEach(function(o){cnt[o.t]=(cnt[o.t]||0)+1;});});\r\n  G.cols=buildCols(cnt,3,G.cfg.cols,G.cfg.mystery*.5);G.shuffle--;G.colOff=[90,90,90,90,90];G.stuckT=0;G.idle=0;SFX.boost();\r\n}\r\nfunction doTrash(){\r\n  if(!G||G.trash<=0)return false;\r\n  if(G.state!=='play'&&G.state!=='lost')return false;\r\n  var need=activeNeeds(),removed=0;\r\n  for(var i=0;i<N&&removed<8;i++){\r\n    var it=G.slots[i];if(!it||it.arr||need[it.t])continue;\r\n    for(var k=0;k<G.pool.length;k++){if(G.pool[k].t===it.t){G.pool[k].n--;if(G.pool[k].n<=0)G.pool.splice(k,1);break;}}\r\n    var p=pathPt(i*SP+G.off);burst(p[0],p[1],6,['#fff','#ffd6e2','#c9f2ff']);G.slots[i]=null;removed++;\r\n  }\r\n  if(!removed){pop(270,330,'Nothing to clear','#fff');return false;}\r\n  G.trash--;G.stuckT=0;G.idle=0;SFX.boost();pop(270,330,'Cleared '+removed+'! \u2728','#b2f2bb');\r\n  return true;\r\n}\r\nfunction hintCol(){\r\n  var need=activeNeeds(),free=G.cfg.cap-filled(),i,fb=-1;\r\n  for(i=0;i<G.cfg.cols;i++){var c=G.cols[i],k=groupLen(c);if(!k||k>free)continue;if(need[c[0].t])return i;if(fb<0)fb=i;}\r\n  return -1;\r\n}\r\n\r\nfunction update(dt){\r\n  if(!G||G.state==='paused')return;\r\n  var spd=G.cfg.speed*(G.fast?2:1),i;\r\n  G.off=(G.off+spd*dt)%L;\r\n  for(i=0;i<5;i++){G.colOff[i]+=(0-G.colOff[i])*Math.min(1,dt*12);if(Math.abs(G.colOff[i])<.3)G.colOff[i]=0;\r\n    G.colShake[i]=Math.max(0,G.colShake[i]-dt);G.colPress[i]=Math.max(0,G.colPress[i]-dt);}\r\n  G.barFlash=Math.max(0,G.barFlash-dt);\r\n  for(i=G.parts.length-1;i>=0;i--){var p=G.parts[i];p.x+=p.vx*dt;p.y+=p.vy*dt;p.vy+=p.h?120*dt:400*dt;p.l-=dt*1.3;if(p.l<=0)G.parts.splice(i,1);}\r\n  for(i=G.pops.length-1;i>=0;i--){G.pops[i].t+=dt;if(G.pops[i].t>1.2)G.pops.splice(i,1);}\r\n  G.time+=dt;\r\n  if(G.state!=='play')return;\r\n  G.idle+=dt;\r\n  for(i=G.flights.length-1;i>=0;i--){var f=G.flights[i];f.e+=dt;if(f.e>=f.delay+f.dur){G.flights.splice(i,1);if(f.done)f.done();}}\r\n  var lost=false;\r\n  G.seats.forEach(function(s){\r\n    if(!s.c){if(G.pool.length){s.wait-=dt;if(s.wait<=0)spawn(s);}return;}\r\n    var c=s.c;c.t2+=dt;c.cd-=dt;\r\n    if(c.st==='in'&&c.t2>.35){c.st='wait';c.t2=0;}\r\n    if(c.st==='wait'){\r\n      if(c.got<c.need&&c.cd<=0)tryPick(s);\r\n      if(c.land>=c.need){c.st='happy';c.t2=0;serve(s);}\r\n      else if(c.pat&&c.got<c.need){c.left-=dt;if(c.left<=0)angry(s);}\r\n    }else if(c.st==='happy'&&c.t2>.9){c.st='out';c.t2=0;}\r\n    else if(c.st==='angry'&&c.t2>.9){c.st='out';c.t2=0;if(G.hearts<=0)lost=true;}\r\n    else if(c.st==='out'&&c.t2>.35){s.c=null;s.wait=.4;}\r\n  });\r\n  if(lost){lose('hearts');return;}\r\n  G.peak=Math.max(G.peak,filled()\/G.cfg.cap);\r\n  if(!G.pool.length&&G.seats.every(function(s){return !s.c;})&&!G.flights.length){win();return;}\r\n  checkStuck(dt);\r\n}\r\nfunction checkStuck(dt){\r\n  if(G.flights.length){G.stuckT=0;return;}\r\n  var busy=G.seats.some(function(s){return (!s.c&&G.pool.length)||(s.c&&s.c.st!=='wait');});\r\n  if(busy){G.stuckT=0;return;}\r\n  var need=activeNeeds();\r\n  for(var i=0;i<N;i++){var it=G.slots[i];if(it&&need[it.t]){G.stuckT=0;return;}}\r\n  var free=G.cfg.cap-filled();\r\n  for(i=0;i<G.cfg.cols;i++){var k=groupLen(G.cols[i]);if(k&&k<=free){G.stuckT=0;return;}}\r\n  G.stuckT+=dt;if(G.stuckT>1)lose('jam');\r\n}\r\n\r\n\/* ---------- drawing: scene ---------- *\/\r\nfunction drawBG(){\r\n  var g=ctx.createLinearGradient(0,0,0,640);g.addColorStop(0,'#ffeef3');g.addColorStop(1,'#ffe0cc');\r\n  ctx.fillStyle=g;ctx.fillRect(0,0,W,H);\r\n  ctx.strokeStyle='rgba(230,140,160,.12)';ctx.lineWidth=2;\r\n  for(var x=0;x<W;x+=45){ctx.beginPath();ctx.moveTo(x,0);ctx.lineTo(x,626);ctx.stroke();}\r\n  for(var y=40;y<626;y+=60){ctx.beginPath();ctx.moveTo(0,y);ctx.lineTo(W,y);ctx.stroke();}\r\n  \/\/ bunting\r\n  var cols=['#ff9eb5','#ffd166','#7dd3c0','#8ab6f9','#c9a7f5'];\r\n  ctx.strokeStyle='#d98ba0';ctx.lineWidth=1.5;ctx.beginPath();ctx.moveTo(0,6);ctx.quadraticCurveTo(135,30,270,8);ctx.quadraticCurveTo(405,30,540,6);ctx.stroke();\r\n  for(var i=0;i<12;i++){var bx=12+i*46,t2=(bx%270)\/270,by=6+Math.sin(t2*PI)*18-(bx>270?0:0);\r\n    ctx.fillStyle=cols[i%5];ctx.beginPath();ctx.moveTo(bx-9,by);ctx.lineTo(bx+9,by);ctx.lineTo(bx,by+16);ctx.closePath();ctx.fill();}\r\n  \/\/ sign\r\n  rr(214,28,112,50,16);ctx.fillStyle='#ff8fab';ctx.fill();rr(220,34,100,38,12);ctx.fillStyle='#fff4f7';ctx.fill();\r\n  txt('SUSHI',270,53,21,'#ff4d7e');\r\n  ctx.fillStyle='rgba(255,100,140,.45)';ell(234,60,5,3);ell(306,60,5,3);\r\n  \/\/ lanterns\r\n  [184,356].forEach(function(lx,j){\r\n    var sw=Math.sin(G.time*1.6+j)*.06;ctx.save();ctx.translate(lx,20);ctx.rotate(sw);\r\n    ctx.strokeStyle='#c46a85';ctx.lineWidth=2;ctx.beginPath();ctx.moveTo(0,-20);ctx.lineTo(0,6);ctx.stroke();\r\n    ctx.fillStyle='#ff6b8b';ell(0,28,15,19);ctx.fillStyle='rgba(255,255,255,.3)';ell(-5,24,4,11);\r\n    ctx.fillStyle='#7a3a4a';ctx.fillRect(-8,6,16,5);ctx.fillRect(-8,45,16,5);\r\n    ctx.fillStyle='#fff';ell(-5,28,1.8,2.2);ell(5,28,1.8,2.2);ctx.strokeStyle='#fff';ctx.lineWidth=1.3;ctx.beginPath();ctx.arc(0,30,2,.15*PI,.85*PI);ctx.stroke();\r\n    ctx.restore();\r\n  });\r\n}\r\nfunction drawBelt(){\r\n  ctx.fillStyle='#f06c8f';rr(30,134,480,410,92);ctx.fill();\r\n  ctx.fillStyle='#ff8fab';rr(30,126,480,410,92);ctx.fill();\r\n  var g=ctx.createLinearGradient(0,118,0,530);g.addColorStop(0,'#ffffff');g.addColorStop(1,'#ffe6ee');\r\n  ctx.fillStyle=g;rr(30,118,480,408,92);ctx.fill();ctx.strokeStyle='#ffc2d3';ctx.lineWidth=3;ctx.stroke();\r\n  rr(P.x0,P.y0,P.x1-P.x0,P.y1-P.y0,P.r);ctx.strokeStyle='#e7c9f2';ctx.lineWidth=52;ctx.stroke();\r\n  rr(P.x0,P.y0,P.x1-P.x0,P.y1-P.y0,P.r);ctx.strokeStyle='#f6ecff';ctx.lineWidth=46;ctx.stroke();\r\n  ctx.strokeStyle='rgba(180,130,210,.28)';ctx.lineWidth=2;ctx.lineCap='round';\r\n  for(var i=0;i<N;i++){\r\n    var s=i*SP+G.off-SP\/2,p=pathPt(s),q=pathPt(s+1),tx=q[0]-p[0],ty=q[1]-p[1],m=Math.hypot(tx,ty)||1;\r\n    var nx=-ty\/m*20,ny=tx\/m*20;ctx.beginPath();ctx.moveTo(p[0]-nx,p[1]-ny);ctx.lineTo(p[0]+nx,p[1]+ny);ctx.stroke();\r\n  }\r\n  \/\/ entry arrow\r\n  var ep=pathPt(ENTRY);ctx.fillStyle='rgba(255,120,160,.35)';ctx.beginPath();ctx.moveTo(ep[0]-8,ep[1]+30);ctx.lineTo(ep[0]+8,ep[1]+30);ctx.lineTo(ep[0],ep[1]+40);ctx.closePath();ctx.fill();\r\n}\r\nfunction drawKitchen(){\r\n  rr(92,182,356,286,46);ctx.fillStyle='#ff8fab';ctx.fill();\r\n  ctx.save();rr(99,189,342,272,40);ctx.clip();\r\n  ctx.fillStyle='#c8efe6';ctx.fillRect(99,189,342,272);\r\n  ctx.strokeStyle='rgba(255,255,255,.7)';ctx.lineWidth=2;\r\n  for(var x=99;x<441;x+=28){ctx.beginPath();ctx.moveTo(x,189);ctx.lineTo(x,276);ctx.stroke();}\r\n  for(var y=203;y<276;y+=28){ctx.beginPath();ctx.moveTo(99,y);ctx.lineTo(441,y);ctx.stroke();}\r\n  ctx.fillStyle='#ffe1c2';ctx.fillRect(99,268,342,48);ctx.fillStyle='#ffcc9e';ctx.fillRect(99,268,342,5);\r\n  \/\/ cute jars\r\n  [[128,236,'#ff9eb5'],[160,244,'#ffd166'],[372,240,'#8ab6f9']].forEach(function(j){rr(j[0],j[1],24,30,8);ctx.fillStyle=j[2];ctx.fill();ctx.fillStyle='#fff';rr(j[0]+2,j[1]-4,20,6,3);ctx.fill();\r\n    ctx.fillStyle='#5a2e3a';circ(j[0]+8,j[1]+15,1.5);circ(j[0]+16,j[1]+15,1.5);});\r\n  drawChef(270,286);\r\n  rr(148,402,244,62,14);ctx.fillStyle='#fff';ctx.fill();\r\n  rr(158,392,224,44,12);ctx.fillStyle='#8fdc9a';ctx.fill();\r\n  [['#ff5b6b',188],['#ff9a62',224],['#ffdb4d',258],['#ffa184',292],['#ffe6ec',326],['#ff5b6b',356]].forEach(function(f){ctx.fillStyle=f[0];ell(f[1],414,15,9,-.3);ctx.fillStyle='rgba(255,255,255,.45)';ell(f[1]-4,411,5,2,-.3);});\r\n  rr(158,392,224,44,12);ctx.fillStyle='rgba(210,240,255,.35)';ctx.fill();ctx.strokeStyle='rgba(255,255,255,.9)';ctx.lineWidth=2;ctx.stroke();\r\n  ctx.restore();\r\n}\r\nfunction drawChef(cx,cy){\r\n  var t=G.time,bob=Math.sin(t*3)*2;cy+=bob;\r\n  ctx.fillStyle='#ffffff';ctx.beginPath();ctx.ellipse(cx,cy+112,70,62,0,PI,0);ctx.lineTo(cx+70,cy+170);ctx.lineTo(cx-70,cy+170);ctx.closePath();ctx.fill();\r\n  ctx.fillStyle='#ff8fab';ctx.beginPath();ctx.moveTo(cx-18,cy+52);ctx.lineTo(cx,cy+68);ctx.lineTo(cx+18,cy+52);ctx.lineTo(cx,cy+60);ctx.closePath();ctx.fill();\r\n  ctx.fillStyle='#ffd3b0';circ(cx,cy+18,33);\r\n  ctx.fillStyle='#fff';rr(cx-28,cy-18,56,18,7);ctx.fill();circ(cx-17,cy-26,15);circ(cx,cy-36,18);circ(cx+17,cy-26,15);\r\n  ctx.strokeStyle='#f3dbe2';ctx.lineWidth=1.5;ctx.beginPath();ctx.moveTo(cx-27,cy-4);ctx.lineTo(cx+27,cy-4);ctx.stroke();\r\n  ctx.strokeStyle='#4a2a1e';ctx.lineWidth=3;ctx.lineCap='round';\r\n  ctx.beginPath();ctx.arc(cx-11,cy+18,5,PI*1.1,PI*1.9);ctx.stroke();ctx.beginPath();ctx.arc(cx+11,cy+18,5,PI*1.1,PI*1.9);ctx.stroke();\r\n  ctx.fillStyle='rgba(255,110,140,.45)';ell(cx-21,cy+27,6,3.5);ell(cx+21,cy+27,6,3.5);\r\n  ctx.fillStyle='#c0505f';ctx.beginPath();ctx.arc(cx,cy+30,5,0,PI);ctx.closePath();ctx.fill();\r\n  var a=Math.sin(t*6)*.35;\r\n  ctx.save();ctx.translate(cx+32,cy+88);ctx.rotate(-1+a);\r\n  rr(-12,-3,12,6,2);ctx.fillStyle='#b5724a';ctx.fill();rr(0,-4,34,8,4);ctx.fillStyle='#dfe8f2';ctx.fill();ctx.restore();\r\n  ctx.fillStyle='#ffd3b0';circ(cx+32,cy+88,9);circ(cx-32,cy+90,9);\r\n}\r\nfunction drawCustomer(s){\r\n  var c=s.c;if(!c)return;\r\n  var dy=0,a=1,p;\r\n  if(c.st==='in'){p=Math.min(1,c.t2\/.35);dy=(1-p)*(1-p)*40;a=p;}\r\n  else if(c.st==='out'){p=Math.min(1,c.t2\/.35);dy=p*40;a=1-p;}\r\n  var Lk=c.look,happy=c.res==='happy',mad=c.res==='mad';\r\n  var worried=c.st==='wait'&&c.pat&&c.left\/c.pat<.3;\r\n  var shake=mad?Math.sin(c.t2*50)*2:0;\r\n  ctx.save();ctx.globalAlpha=a;ctx.translate(s.hx+shake,s.hy+dy+(happy?-Math.abs(Math.sin(c.t2*12))*5:0)+Math.sin(G.time*2+s.hx)*1.2);\r\n  ctx.fillStyle=Lk.hair;\r\n  if(Lk.style===1){rr(-36,-26,72,78,32);ctx.fill();}\r\n  if(Lk.style===2){for(var i=0;i<11;i++){var an=PI*.85+i*(PI*1.3\/10);circ(Math.cos(an)*32,Math.sin(an)*32-2,12);}}\r\n  ctx.fillStyle=Lk.shirt;ctx.beginPath();ctx.ellipse(0,72,46,36,0,PI,0);ctx.lineTo(46,120);ctx.lineTo(-46,120);ctx.closePath();ctx.fill();\r\n  ctx.fillStyle='#fff';ctx.beginPath();ctx.moveTo(-14,38);ctx.lineTo(0,50);ctx.lineTo(14,38);ctx.lineTo(0,44);ctx.closePath();ctx.fill();\r\n  ctx.fillStyle=Lk.skin;ctx.fillRect(-9,22,18,16);circ(-31,4,7);circ(31,4,7);ell(0,0,33,31);\r\n  if(mad){ctx.fillStyle='rgba(255,60,60,.22)';ell(0,0,33,31);}\r\n  ctx.fillStyle=Lk.hair;\r\n  if(Lk.style===2){for(i=0;i<7;i++)circ(-27+i*9,-24-Math.sin(i\/6*PI)*8,10);}\r\n  else{ctx.beginPath();ctx.moveTo(-33,2);ctx.bezierCurveTo(-36,-31,-12,-39,2,-37);ctx.bezierCurveTo(25,-37,37,-23,33,2);ctx.bezierCurveTo(27,-12,16,-17,4,-14);ctx.bezierCurveTo(-8,-12,-21,-17,-33,2);ctx.fill();}\r\n  if(Lk.style===3){circ(0,-40,13);ctx.fillStyle='#ff6b9a';rr(-9,-31,18,5,2.5);ctx.fill();}\r\n  \/\/ eyes\r\n  if(happy){\r\n    ctx.strokeStyle='#3b2416';ctx.lineWidth=3.2;ctx.lineCap='round';\r\n    ctx.beginPath();ctx.arc(-12,6,6,PI*1.1,PI*1.9);ctx.stroke();ctx.beginPath();ctx.arc(12,6,6,PI*1.1,PI*1.9);ctx.stroke();\r\n  }else if(mad){\r\n    ctx.strokeStyle='#3b2416';ctx.lineWidth=3;ctx.lineCap='round';\r\n    ctx.beginPath();ctx.moveTo(-18,-6);ctx.lineTo(-7,-1);ctx.moveTo(18,-6);ctx.lineTo(7,-1);ctx.stroke();\r\n    ctx.fillStyle='#3b2416';ell(-12,5,3.5,3.5);ell(12,5,3.5,3.5);\r\n  }else{\r\n    var bl=(Math.sin(Lk.blink+G.time*1.7)>.985)?.12:1;\r\n    [-12,12].forEach(function(sx){ctx.fillStyle='#3b2416';ell(sx,4,5.6,7*bl);ctx.fillStyle='#fff';circ(sx+1.8,1.2,2.2*bl);circ(sx-1.8,7,1.1*bl);});\r\n    if(worried){ctx.strokeStyle='#3b2416';ctx.lineWidth=2.4;ctx.lineCap='round';ctx.beginPath();ctx.moveTo(-18,-7);ctx.lineTo(-8,-10);ctx.moveTo(18,-7);ctx.lineTo(8,-10);ctx.stroke();\r\n      ctx.fillStyle='#8fd3ff';ctx.beginPath();ctx.moveTo(26,-14);ctx.quadraticCurveTo(32,-4,26,-2);ctx.quadraticCurveTo(20,-4,26,-14);ctx.fill();}\r\n  }\r\n  ctx.fillStyle='rgba(255,105,140,.42)';ell(-21,14,6.5,4);ell(21,14,6.5,4);\r\n  if(happy){ctx.fillStyle='#b8344f';ctx.beginPath();ctx.arc(0,14,8,0,PI);ctx.closePath();ctx.fill();ctx.fillStyle='#ff8fa3';ell(0,19,4,2.5);}\r\n  else if(mad){ctx.strokeStyle='#7a3a2a';ctx.lineWidth=2.6;ctx.lineCap='round';ctx.beginPath();ctx.arc(0,20,6,1.2*PI,1.8*PI);ctx.stroke();}\r\n  else if(worried){ctx.strokeStyle='#7a3a2a';ctx.lineWidth=2.2;ctx.beginPath();ctx.moveTo(-5,16);ctx.quadraticCurveTo(0,13,5,16);ctx.stroke();}\r\n  else{ctx.strokeStyle='#7a3a2a';ctx.lineWidth=2.4;ctx.lineCap='round';ctx.beginPath();ctx.moveTo(-6,13);ctx.quadraticCurveTo(-3,17,0,13);ctx.quadraticCurveTo(3,17,6,13);ctx.stroke();}\r\n  if(Lk.acc===1){ctx.fillStyle='#fff';for(i=0;i<5;i++){var b=i*PI*2\/5;circ(23+Math.cos(b)*6,-23+Math.sin(b)*6,5);}ctx.fillStyle='#ffc94d';circ(23,-23,4);}\r\n  if(Lk.acc===2){ctx.strokeStyle='#5a3a4a';ctx.lineWidth=2;ctx.beginPath();ctx.arc(-12,4,9,0,PI*2);ctx.stroke();ctx.beginPath();ctx.arc(12,4,9,0,PI*2);ctx.stroke();ctx.beginPath();ctx.moveTo(-3,4);ctx.lineTo(3,4);ctx.stroke();}\r\n  if(Lk.acc===3){ctx.fillStyle='#ff6b9a';ctx.beginPath();ctx.moveTo(-26,-20);ctx.lineTo(-38,-30);ctx.lineTo(-36,-12);ctx.closePath();ctx.fill();ctx.beginPath();ctx.moveTo(-26,-20);ctx.lineTo(-14,-32);ctx.lineTo(-16,-12);ctx.closePath();ctx.fill();circ(-26,-20,4);}\r\n  if(c.vip){ctx.save();ctx.translate(0,-44);ctx.rotate(-.12);ctx.fillStyle='#ffcf3d';ctx.strokeStyle='#e0a000';ctx.lineWidth=2;\r\n    ctx.beginPath();ctx.moveTo(-16,8);ctx.lineTo(-18,-8);ctx.lineTo(-8,0);ctx.lineTo(0,-12);ctx.lineTo(8,0);ctx.lineTo(18,-8);ctx.lineTo(16,8);ctx.closePath();ctx.fill();ctx.stroke();\r\n    ctx.fillStyle='#ff5c8a';circ(0,2,3);ctx.fillStyle='#7cc4ff';circ(-9,4,2.2);circ(9,4,2.2);ctx.restore();}\r\n  if(mad){ctx.strokeStyle='#ff3d5a';ctx.lineWidth=3;ctx.lineCap='round';var vx=24,vy=-30;\r\n    ctx.beginPath();ctx.moveTo(vx-6,vy-2);ctx.lineTo(vx-2,vy-2);ctx.lineTo(vx-2,vy-6);ctx.moveTo(vx+6,vy-2);ctx.lineTo(vx+2,vy-2);ctx.lineTo(vx+2,vy-6);\r\n    ctx.moveTo(vx-6,vy+6);ctx.lineTo(vx-2,vy+6);ctx.lineTo(vx-2,vy+10);ctx.moveTo(vx+6,vy+6);ctx.lineTo(vx+2,vy+6);ctx.lineTo(vx+2,vy+10);ctx.stroke();}\r\n  ctx.restore();\r\n}\r\nfunction drawBubble(s){\r\n  var c=s.c;if(!c)return;\r\n  var a=1;if(c.st==='in')a=Math.min(1,c.t2\/.35);if(c.st==='out')a=Math.max(0,1-c.t2\/.25);\r\n  ctx.save();ctx.globalAlpha=a;\r\n  var bx=s.bx,by=s.by,dir=bx<s.hx?1:-1,pulse=1;\r\n  var worried=c.st==='wait'&&c.pat&&c.left\/c.pat<.3;\r\n  if(worried)pulse=1+Math.sin(G.time*14)*.04;\r\n  ctx.translate(bx,by);ctx.scale(pulse,pulse);ctx.translate(-bx,-by);\r\n  ctx.fillStyle=c.vip?'#fff8dc':'#fff';ctx.strokeStyle=worried?'#ff7a9c':c.vip?'#f2b705':'#ffc2d3';ctx.lineWidth=c.vip?3.5:2.5;\r\n  rr(bx-35,by-28,70,56,20);ctx.fill();ctx.stroke();\r\n  ctx.beginPath();ctx.moveTo(bx+dir*22,by+14);ctx.lineTo(bx+dir*46,by+26);ctx.lineTo(bx+dir*32,by-2);ctx.closePath();ctx.fill();\r\n  ctx.beginPath();ctx.moveTo(bx+dir*23,by+18);ctx.lineTo(bx+dir*46,by+26);ctx.lineTo(bx+dir*34,by+5);ctx.stroke();\r\n  if(c.res==='happy'){\r\n    heart(bx-12,by-14,26,'#ff4d7e');\r\n  }else if(c.res==='mad'){\r\n    txt('\u2717',bx,by,30,'#ff5c7a');\r\n  }else{\r\n    drawItem(c.t,bx-8,by-3,38);\r\n    var left=c.need-c.got;\r\n    ctx.fillStyle=left?'#ff5c8a':'#4cc38a';circ(bx+20,by+15,12);ctx.strokeStyle='#fff';ctx.lineWidth=2;ctx.beginPath();ctx.arc(bx+20,by+15,12,0,PI*2);ctx.stroke();\r\n    txt(String(left),bx+20,by+16,15,'#fff');\r\n    if(c.pat){var r=Math.max(0,c.left\/c.pat);\r\n      rr(bx-30,by+33,60,8,4);ctx.fillStyle='#f6dbe3';ctx.fill();\r\n      if(r>0){rr(bx-30,by+33,Math.max(8,60*r),8,4);ctx.fillStyle=r>.5?'#7ed69b':r>.25?'#ffc04d':'#ff5c7a';ctx.fill();}}\r\n  }\r\n  ctx.restore();\r\n}\r\nfunction drawCounterAndBar(){\r\n  var g=ctx.createLinearGradient(0,626,0,684);g.addColorStop(0,'#ffcfa6');g.addColorStop(1,'#f4b07e');\r\n  ctx.fillStyle=g;ctx.fillRect(0,626,W,58);ctx.fillStyle='#ffe2c6';ctx.fillRect(0,626,W,5);\r\n  var used=filled(),cap=G.cfg.cap,r=Math.min(1,used\/cap);\r\n  rr(70,640,400,32,16);ctx.fillStyle='#9a5b48';ctx.fill();\r\n  if(used>0){rr(73,643,Math.max(26,394*r),26,13);ctx.fillStyle=r<.6?'#7ed69b':r<.85?'#ffc04d':'#ff5c7a';ctx.fill();\r\n    ctx.fillStyle='rgba(255,255,255,.35)';rr(78,645,Math.max(16,384*r),8,4);ctx.fill();}\r\n  if(G.barFlash>0&&Math.floor(G.barFlash*10)%2===0){rr(70,640,400,32,16);ctx.strokeStyle='#ff3b6b';ctx.lineWidth=4;ctx.stroke();}\r\n  txt(used+' \/ '+cap,270,657,17,'#fff','#9a5b48',4);\r\n  drawItem('maki',46,654,30);\r\n  if(r>=.85&&G.state==='play'){txt('!',495,656,24,'#ff3b6b','#fff',4);}\r\n}\r\nfunction drawColumns(){\r\n  ctx.fillStyle='#e9a37a';ctx.fillRect(0,COLY-4,W,H-COLY+4);\r\n  var hint=(G.state==='play'&&G.idle>5)?hintCol():-1;\r\n  for(var i=0;i<G.cfg.cols;i++){\r\n    var sh=G.colShake[i]>0?Math.sin(G.colShake[i]*70)*5:0,x=colX(i)+sh,col=G.cols[i],cw=G.CW,pr=G.colPress[i]>0?3:0;\r\n    rr(x,COLY+pr,cw,COLH,18);ctx.fillStyle='#d4895f';ctx.fill();\r\n    rr(x+4,COLY+4+pr,cw-8,COLH-8,15);var g=ctx.createLinearGradient(0,COLY,0,COLY+COLH);g.addColorStop(0,'#fff3e6');g.addColorStop(1,'#ffdcc0');ctx.fillStyle=g;ctx.fill();\r\n    ctx.save();rr(x+4,COLY+4+pr,cw-8,COLH-8,15);ctx.clip();\r\n    if(col.length&&G.state==='play'){\r\n      var k=groupLen(col);rr(x+9,COLY+8+G.colOff[i]+pr,cw-18,(k-1)*G.ISP+G.IS+8,14);\r\n      ctx.fillStyle='rgba(255,170,200,'+(0.3+0.14*Math.sin(G.time*4))+')';ctx.fill();\r\n    }\r\n    var jmax=Math.min(col.length,Math.ceil((COLH-20-G.colOff[i])\/G.ISP)+1);\r\n    for(var j=jmax-1;j>=0;j--){var it=col[j],yy=COLY+26+j*G.ISP+G.colOff[i]+pr;\r\n      if(it.h)drawLid(x+cw\/2,yy,G.IS,G.time*3+j+i);else drawItem(it.t,x+cw\/2,yy,G.IS,j===0&&Math.sin(G.time*1.3+i*2)>.97?'blink':null);}\r\n    var fg=ctx.createLinearGradient(0,COLY+COLH-46,0,COLY+COLH);fg.addColorStop(0,'rgba(255,220,192,0)');fg.addColorStop(1,'rgba(255,214,182,.95)');\r\n    ctx.fillStyle=fg;ctx.fillRect(x,COLY+COLH-46,cw,46);\r\n    ctx.restore();\r\n    if(col.length){rr(x+cw\/2-18,COLY+COLH-24,36,19,9.5);ctx.fillStyle='#ff8fab';ctx.fill();txt(String(col.length),x+cw\/2,COLY+COLH-14,12,'#fff');}\r\n    if(i===hint){var hy=COLY-12+Math.sin(G.time*8)*5;txt('\ud83d\udc47',x+cw\/2,hy,26,'#000');}\r\n  }\r\n}\r\nfunction drawFlights(){\r\n  G.flights.forEach(function(f){\r\n    var p=Math.max(0,Math.min(1,(f.e-f.delay)\/f.dur)),e=p<.5?2*p*p:1-Math.pow(-2*p+2,2)\/2,tg=f.tgt();\r\n    var x=f.sx+(tg[0]-f.sx)*e,y=f.sy+(tg[1]-f.sy)*e-Math.sin(p*PI)*45;\r\n    drawItem(f.t,x,y,34*(f.s0+(f.s1-f.s0)*p));\r\n  });\r\n}\r\nfunction draw(){\r\n  ctx.setTransform(scale,0,0,scale,0,0);\r\n  drawBG();\r\n  drawCustomer(G.seats[0]);drawCustomer(G.seats[1]);\r\n  drawBelt();drawKitchen();\r\n  for(var i=0;i<N;i++){var it=G.slots[i];if(!it||it.arr)continue;var p=pathPt(i*SP+G.off);\r\n    drawItem(it.t,p[0],p[1]+Math.sin(G.time*7+i)*1.3,33,Math.sin(G.time*1.1+i*1.7)>.985?'blink':null);}\r\n  drawCustomer(G.seats[2]);drawCustomer(G.seats[3]);\r\n  drawCounterAndBar();\r\n  G.seats.forEach(drawBubble);\r\n  drawColumns();\r\n  drawFlights();\r\n  G.parts.forEach(function(p){ctx.globalAlpha=Math.max(0,p.l);if(p.h)heart(p.x,p.y,p.r*4,p.c);else{ctx.fillStyle=p.c;circ(p.x,p.y,p.r);}});ctx.globalAlpha=1;\r\n  G.pops.forEach(function(p){ctx.globalAlpha=Math.max(0,1-p.t\/1.2);var sc=Math.min(1,p.t*6);txt(p.txt,p.x,p.y-p.t*40,22*(.6+.4*sc),p.col,'#b8344f',5);});\r\n  ctx.globalAlpha=1;\r\n}\r\n\r\n\/* ---------- HUD & overlays ---------- *\/\r\nvar hudCache={};\r\nfunction setT(id,v,html){if(hudCache[id]!==v){hudCache[id]=v;if(html)$(id).innerHTML=v;else $(id).textContent=v;}}\r\nfunction hud(){\r\n  var active=G.seats.filter(function(s){return s.c&&(s.c.st==='in'||s.c.st==='wait');}).length;\r\n  var total=G.served+active+G.pool.length,tr=TIERS[tierOf(G.level)];\r\n  setT('#ssg-lv','Lv '+G.level+' \u00b7 '+tr.n);\r\n  if(hudCache.tc!==tr.c){hudCache.tc=tr.c;$('#ssg-lv').style.background=tr.c;}\r\n  setT('#ssg-sv',G.served+' \/ '+total);\r\n  var pw=(total?G.served\/total*100:0).toFixed(1)+'%';if(hudCache.pw!==pw){hudCache.pw=pw;$('#ssg-pf').style.width=pw;}\r\n  var h='';if(G.cfg.patience)for(var i=0;i<3;i++)h+='<span class=\"'+(i<G.hearts?'on':'off')+'\">\u2665<\/span>';\r\n  setT('#ssg-hp',h,true);\r\n  setT('#ssg-sc',String(G.score));\r\n  setT('#ssg-shc',String(G.shuffle));setT('#ssg-trc',String(G.trash));\r\n  setT('#ssg-spd',G.fast?'2x':'1x');setT('#ssg-snd',muted?'\ud83d\udd07':'\ud83d\udd0a');\r\n  var mc=(musicOn&&BGM_URL)?'':'dim';if(hudCache.mc!==mc){hudCache.mc=mc;$('#ssg-mus').className=mc;}\r\n}\r\nfunction show(html){ov.innerHTML='<div class=\"ssg-card\">'+html+'<\/div>';ov.style.display='flex';}\r\nfunction hide(){ov.style.display='none';}\r\nfunction starStr(n){var s='';for(var i=0;i<3;i++)s+=i<n?'\u2605':'<span class=\"e\">\u2605<\/span>';return s;}\r\nfunction tierPill(l){var t=TIERS[tierOf(l)];return '<span class=\"ssg-tier\" style=\"background:'+t.c+'\">'+t.n+'<\/span>';}\r\nfunction menu(tab){\r\n  if(G)G.state='menu';\r\n  var un=Math.min(LS.get('ssg_unlocked',1),MAXL),stars=LS.get('ssg_stars',{}),grid='',tabs='',tot=0;\r\n  for(var k in stars)tot+=stars[k];\r\n  if(tab==null)tab=tierOf(un);\r\n  TIERS.forEach(function(t,i){tabs+='<button type=\"button\" class=\"ssg-tab'+(i===tab?' on':'')+'\" style=\"--c:'+t.c+'\" data-o=\"tab\" data-t=\"'+i+'\">'+t.n+'<\/button>';});\r\n  var T=TIERS[tab];\r\n  for(var l=T.a;l<=T.b;l++){\r\n    var lock=l>un,st=stars[l]||0;\r\n    grid+='<button type=\"button\" class=\"ssg-lvl'+(lock?' lock':'')+'\" style=\"background:'+T.c+'\"'+(lock?' disabled':'')+' data-o=\"intro\" data-l=\"'+l+'\">'+(lock?'\ud83d\udd12':l)+'<small>'+(st?'\u2605'.repeat(st):'')+'<\/small><\/button>';\r\n  }\r\n  show('<div class=\"ssg-logo\">\ud83c\udf63<\/div><h2>Sushi Sort<\/h2><p class=\"ssg-sub\">Feed the hungry customers before the belt jams!<\/p>'+\r\n    '<div class=\"ssg-stats\"><div><b>'+un+' \/ '+MAXL+'<\/b>levels<\/div><div><b>'+tot+' \u2605<\/b>stars<\/div><\/div>'+\r\n    '<button type=\"button\" class=\"ssg-btn\" data-o=\"intro\" data-l=\"'+un+'\">\u25b6 Play Level '+un+'<\/button>'+\r\n    '<details class=\"ssg-how\"><summary>How to play<\/summary><ul>'+\r\n    '<li>Tap a column to send the sushi group on top onto the belt.<\/li>'+\r\n    '<li>Customers grab the sushi they ordered as it rolls by.<\/li>'+\r\n    '<li>Don\\'t fill the belt with sushi nobody wants!<\/li>'+\r\n    '<li>From level 5, customers lose patience. Run out of \u2665 and it\\'s game over.<\/li>'+\r\n    '<li>From level 10, \u2753 lids hide sushi until it reaches the top.<\/li>'+\r\n    '<li>From level 16, \ud83d\udc51 VIP customers pay double but are less patient.<\/li>'+\r\n    '<li>\ud83d\udd00 shuffle \u00b7 \ud83e\uddf9 clear unwanted sushi \u00b7 \u23e9 faster belt. Unused boosters give bonus points!<\/li><\/ul><\/details>'+\r\n    '<div class=\"ssg-tabs\">'+tabs+'<\/div><div class=\"ssg-range\">Levels '+T.a+'\u2013'+T.b+'<\/div><div class=\"ssg-grid\">'+grid+'<\/div>');\r\n}\r\nfunction intro(l){\r\n  l=Math.max(1,Math.min(l,MAXL));newGame(l);G.state='intro';hud();\r\n  var c=G.cfg,f=newFeatures(l),fh='';f.forEach(function(x){fh+='<div class=\"ssg-new\">'+x+'<\/div>';});\r\n  show('<div class=\"ssg-logo\">\ud83c\udf71<\/div><h2>Level '+l+'<\/h2>'+tierPill(l)+\r\n    '<div class=\"ssg-stats\"><div><b>'+c.customers+'<\/b>customers<\/div><div><b>'+c.cols+'<\/b>columns<\/div>'+\r\n    '<div><b>'+c.cap+'<\/b>belt space<\/div><div><b>'+(c.patience?c.patience+'s':'\u221e')+'<\/b>patience<\/div>'+\r\n    '<div><b>'+(c.mystery?Math.round(c.mystery*100)+'%':'\u2014')+'<\/b>mystery lids<\/div><div><b>'+(c.vip?Math.round(c.vip*100)+'%':'\u2014')+'<\/b>VIP chance<\/div><\/div>'+fh+\r\n    '<button type=\"button\" class=\"ssg-btn green\" data-o=\"go\">Let\\'s cook! \ud83c\udf63<\/button><button type=\"button\" class=\"ssg-btn alt\" data-o=\"menu\">\u2630 Levels<\/button>');\r\n}\r\nfunction pause(){if(!G||G.state!=='play')return;G.state='paused';bgmStop();\r\n  show('<div class=\"ssg-logo\">\u2615<\/div><h2>Paused<\/h2><button type=\"button\" class=\"ssg-btn green\" data-o=\"resume\">\u25b6 Resume<\/button><button type=\"button\" class=\"ssg-btn alt\" data-o=\"restart\">\u21bb Restart<\/button><button type=\"button\" class=\"ssg-btn alt\" data-o=\"menu\">\u2630 Levels<\/button>');}\r\nfunction win(){\r\n  G.state='won';var stars=3;if(G.peak>=.8)stars--;if(G.heartsLost>0)stars--;stars=Math.max(1,stars);\r\n  var bonus=G.shuffle*50+G.trash*80+(G.cfg.patience?G.hearts*100:0);G.score+=bonus;\r\n  var un=LS.get('ssg_unlocked',1);if(G.level+1>un)LS.set('ssg_unlocked',Math.min(G.level+1,MAXL));var last=G.level>=MAXL;\r\n  var ss=LS.get('ssg_stars',{});if((ss[G.level]||0)<stars){ss[G.level]=stars;LS.set('ssg_stars',ss);}\r\n  var best=LS.get('ssg_best',{});var nb=G.score>(best[G.level]||0);if(nb){best[G.level]=G.score;LS.set('ssg_best',best);}\r\n  SFX.win();hud();burst(270,300,40,['#ff6b9a','#ffd43b','#7ee3a1','#7cc4ff','#c9a7f5'],true);\r\n  var nextTier=last?'<div class=\"ssg-new\">\ud83c\udfc6 You beat all '+MAXL+' levels! You are a true Sushi Legend!<\/div>':tierOf(G.level+1)!==tierOf(G.level)?'<div class=\"ssg-new\">\ud83c\udf89 Next up: '+TIERS[tierOf(G.level+1)].n+' levels!<\/div>':'';\r\n  show('<div class=\"ssg-logo\">\ud83c\udf89<\/div><h2>Level '+G.level+' Clear!<\/h2><div class=\"ssg-stars\">'+starStr(stars)+'<\/div>'+\r\n    '<p class=\"ssg-sub\">Score <b>'+G.score+'<\/b>'+(nb?' \ud83c\udfc6 New best!':'')+'<br><small>Bonus +'+bonus+' \u00b7 Served '+G.served+'<\/small><\/p>'+nextTier+\r\n    (last?'':'<button type=\"button\" class=\"ssg-btn green\" data-o=\"intro\" data-l=\"'+(G.level+1)+'\">Next Level \u25b6<\/button>')+\r\n    '<button type=\"button\" class=\"ssg-btn alt\" data-o=\"restart\">\u21bb Replay<\/button><button type=\"button\" class=\"ssg-btn alt\" data-o=\"menu\">\u2630 Levels<\/button>');\r\n}\r\nfunction lose(why){\r\n  G.state='lost';G.loseWhy=why;SFX.lose();\r\n  var jam=why==='jam';\r\n  show('<div class=\"ssg-logo\">'+(jam?'\ud83d\ude35':'\ud83d\udc94')+'<\/div><h2>'+(jam?'Belt Jammed!':'Out of Hearts!')+'<\/h2>'+\r\n    '<p class=\"ssg-sub\">'+(jam?'The belt is full of sushi nobody ordered.':'Too many customers left hungry.')+'<\/p>'+\r\n    (jam&&G.trash>0?'<button type=\"button\" class=\"ssg-btn green\" data-o=\"cont\">\ud83e\uddf9 Clear belt & continue<\/button>':'')+\r\n    '<button type=\"button\" class=\"ssg-btn\" data-o=\"restart\">\u21bb Try again<\/button><button type=\"button\" class=\"ssg-btn alt\" data-o=\"menu\">\u2630 Levels<\/button>');\r\n}\r\nov.addEventListener('click',function(e){\r\n  var b=e.target.closest('[data-o]');if(!b||b.disabled)return;\r\n  var o=b.getAttribute('data-o');tone(700,.06,'triangle',.08);\r\n  if(o==='tab')menu(parseInt(b.getAttribute('data-t'),10)||0);\r\n  else if(o==='intro')intro(parseInt(b.getAttribute('data-l'),10)||1);\r\n  else if(o==='go'){G.state='play';hide();bgmPlay();}\r\n  else if(o==='resume'){G.state='play';hide();bgmPlay();}\r\n  else if(o==='restart'){newGame(G.level);G.state='play';hide();bgmPlay();}\r\n  else if(o==='menu')menu();\r\n  else if(o==='cont'){if(doTrash()){G.state='play';hide();}}\r\n});\r\nroot.querySelector('.ssg-tools').addEventListener('click',function(e){\r\n  var b=e.target.closest('button');if(!b)return;var a=b.getAttribute('data-a');\r\n  if(a==='shuffle')doShuffle();\r\n  else if(a==='trash'){if(G.state==='play')doTrash();}\r\n  else if(a==='speed'){G.fast=!G.fast;tone(700,.06,'triangle',.08);}\r\n  else if(a==='music'){musicOn=!musicOn;LS.set('ssg_music',musicOn);if(musicOn&&G.state==='play')bgmPlay();else bgmStop();}\r\n  else if(a==='sound'){muted=!muted;LS.set('ssg_mute',muted);tone(700,.06,'triangle',.08);}\r\n  else if(a==='fs')toggleFS();\r\n  else if(a==='pause'){if(G.state==='play')pause();else if(G.state==='paused'){G.state='play';hide();bgmPlay();}}\r\n  hud();\r\n});\r\n\r\n\/* ---------- input ---------- *\/\r\ncv.addEventListener('pointerdown',function(e){\r\n  var r=cv.getBoundingClientRect(),x=(e.clientX-r.left)\/r.width*W,y=(e.clientY-r.top)\/r.height*H;\r\n  if(y>=COLY-14&&G){var i=Math.floor((x-24+G.GAP\/2)\/(G.CW+G.GAP));if(i>=0&&i<G.cfg.cols)tapCol(i);}\r\n  e.preventDefault();\r\n});\r\ndocument.addEventListener('keydown',function(e){\r\n  if(!G||G.state!=='play')return;\r\n  var tag=(document.activeElement&&document.activeElement.tagName)||'';if(\/INPUT|TEXTAREA|SELECT\/.test(tag))return;\r\n  var n=parseInt(e.key,10);if(n>=1&&n<=5){var r=root.getBoundingClientRect();if(r.bottom>0&&r.top<innerHeight)tapCol(n-1);}\r\n});\r\ndocument.addEventListener('visibilitychange',function(){if(document.hidden&&G&&G.state==='play')pause();});\r\n\r\n\/* ---------- sizing & fullscreen ---------- *\/\r\nvar fs=false,lastW=0,ph=null,savedScroll=0;\r\nvar hudEl=root.querySelector('.ssg-hud'),toolsEl=root.querySelector('.ssg-tools'),fsBtn=root.querySelector('[data-a=fs]');\r\nfunction vh(){return Math.round((window.visualViewport&&window.visualViewport.height)||window.innerHeight||H);}\r\nfunction vw(){return Math.round((window.visualViewport&&window.visualViewport.width)||window.innerWidth||W);}\r\nfunction fit(){\r\n  var sw=stage.clientWidth||W,w,extra=(hudEl.offsetHeight||50)+(toolsEl.offsetHeight||60);\r\n  if(fs){\r\n    root.style.setProperty('width',vw()+'px','important');root.style.setProperty('height',vh()+'px','important');\r\n    var sh=stage.clientHeight||(vh()-extra);w=Math.min(sw,sh*W\/H);\r\n  }else{\r\n    \/* on phones keep the whole game visible on one screen *\/\r\n    var avail=vh()-extra-12;w=Math.min(sw,500,Math.max(280,avail*W\/H));\r\n  }\r\n  w=Math.max(200,Math.floor(w));var h=Math.floor(w*H\/W),d=Math.min(window.devicePixelRatio||1,2);\r\n  cv.style.setProperty('width',w+'px','important');cv.style.setProperty('height',h+'px','important');\r\n  cv.width=Math.round(w*d);cv.height=Math.round(h*d);scale=cv.width\/W;\r\n}\r\nfunction setFS(on){\r\n  if(on===fs)return;fs=on;\r\n  if(on){\r\n    savedScroll=window.pageYOffset||0;\r\n    \/* move the game to <body> so theme containers (transform\/overflow\/z-index) can't clip it *\/\r\n    if(!ph&&root.parentNode!==document.body){ph=document.createComment('ssg-placeholder');root.parentNode.insertBefore(ph,root);document.body.appendChild(root);}\r\n  }else{\r\n    if(ph&&ph.parentNode){ph.parentNode.insertBefore(root,ph);ph.parentNode.removeChild(ph);}ph=null;\r\n    root.style.removeProperty('width');root.style.removeProperty('height');\r\n  }\r\n  root.classList.toggle('ssg-fs',on);\r\n  document.documentElement.classList.toggle('ssg-lock',on);document.body.classList.toggle('ssg-lock',on);\r\n  fsBtn.textContent=on?'\u2715':'\u26f6';fsBtn.title=on?'Exit fullscreen':'Fullscreen';\r\n  if(!on)window.scrollTo(0,savedScroll);\r\n  fit();setTimeout(fit,60);setTimeout(fit,350);\r\n}\r\nfunction toggleFS(){\r\n  var req=root.requestFullscreen||root.webkitRequestFullscreen,ex=document.exitFullscreen||document.webkitExitFullscreen;\r\n  if(!fs){\r\n    setFS(true); \/* reparent first, then ask the browser (iPhone has no API: CSS fullscreen is used) *\/\r\n    if(req){try{var pr=req.call(root);if(pr&&pr.catch)pr.catch(function(){});}catch(e){}}\r\n    try{if(screen.orientation&&screen.orientation.lock)screen.orientation.lock('portrait').catch(function(){});}catch(e){}\r\n  }else{\r\n    if((document.fullscreenElement||document.webkitFullscreenElement)&&ex){try{ex.call(document);}catch(e){}}\r\n    setFS(false);\r\n  }\r\n}\r\nfunction onFsChange(){if(!(document.fullscreenElement||document.webkitFullscreenElement)&&fs)setFS(false);else fit();}\r\ndocument.addEventListener('fullscreenchange',onFsChange);document.addEventListener('webkitfullscreenchange',onFsChange);\r\ndocument.addEventListener('keydown',function(e){if(e.key==='Escape'&&fs)setFS(false);});\r\nfunction refit(){fit();setTimeout(fit,250);}\r\nwindow.addEventListener('resize',refit);window.addEventListener('orientationchange',refit);\r\nif(window.visualViewport)window.visualViewport.addEventListener('resize',function(){if(fs)fit();});\r\n\/* stop the page from scrolling \/ bouncing behind the game while in fullscreen *\/\r\nroot.addEventListener('touchmove',function(e){if(fs&&!e.target.closest('.ssg-card'))e.preventDefault();},{passive:false});\r\nif(window.ResizeObserver)new ResizeObserver(function(){var w=root.clientWidth;if(w!==lastW){lastW=w;fit();}}).observe(root);\r\n\r\n\/* ---------- loop ---------- *\/\r\nvar last=performance.now();\r\nfunction loop(now){\r\n  var dt=Math.min(.05,(now-last)\/1000);last=now;\r\n  update(dt);draw();hud();\r\n  requestAnimationFrame(loop);\r\n}\r\nnewGame(Math.min(LS.get('ssg_unlocked',1),MAXL));fit();menu();hud();\r\nrequestAnimationFrame(loop);\r\n})();\r\n<\/script>\r\n<!-- ===== end Sushi Sort ===== --><\/div><\/div><div class=\"wpb_wrapper wpb_text_column td_block_wrap td_block_wrap vc_column_text tdi_9  tagdiv-type td-pb-border-top td_block_template_1\"  data-td-block-uid=\"tdi_9\" ><div class=\"td-block-title-wrap\"><\/div><div class=\"td-fix-index\"><h2 dir=\"ltr\" aria-level=\"4\"><strong>Sushi Sort \u2013 Free Online Sushi Sorting Game<\/strong><\/h2>\n<p dir=\"ltr\"><strong>Sushi Sort<\/strong> is a free online puzzle game where you run a busy conveyor-belt sushi bar. Tap a column to send sushi onto the belt, and hungry customers grab what they ordered as it rolls past. Sounds easy? The belt has limited space. Load the wrong sushi and it fills up with plates nobody wants. Plan ahead, serve fast and keep every customer smiling across <strong>100 levels<\/strong>, from Easy to Legend.<\/p>\n<p dir=\"ltr\">Sushi Sort runs in your browser on phone, tablet and computer. There\u2019s nothing to download and no sign-up, so you can start playing right away.<\/p>\n<h2 dir=\"ltr\" aria-level=\"5\"><strong>How to Play Sushi Sort<\/strong><\/h2>\n<ol dir=\"ltr\">\n<li><strong>Check the orders.<\/strong> Four customers sit around the conveyor belt. Each speech bubble shows the sushi they want and how many pieces.<\/li>\n<li><strong>Tap a column.<\/strong> The group of matching sushi on top of the column jumps onto the belt.<\/li>\n<li><strong>Let the belt work.<\/strong> Customers automatically grab their sushi as it passes by. When an order is complete, the customer leaves happy and a new one sits down.<\/li>\n<li><strong>Watch the belt meter.<\/strong> The bar under the belt shows how full it is. If the belt fills with sushi no customer needs, it jams and the level is over.<\/li>\n<li><strong>Serve everyone to win.<\/strong> Clear the level when every customer has been served. Earn up to 3 stars.<\/li>\n<\/ol>\n<p dir=\"ltr\"><strong>Tip:<\/strong> on a computer you can press keys <strong>1\u20135<\/strong> to tap the columns.<\/p>\n<h4 dir=\"ltr\" aria-level=\"5\"><strong>Boosters<\/strong><\/h4>\n<div dir=\"ltr\">\n<table>\n<thead>\n<tr>\n<th scope=\"col\">Booster<\/th>\n<th scope=\"col\">What it does<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\ud83d\udd00 <strong>Shuffle<\/strong><\/td>\n<td>Reshuffles all the columns when you\u2019re stuck<\/td>\n<\/tr>\n<tr>\n<td>\ud83e\uddf9 <strong>Clear<\/strong><\/td>\n<td>Removes up to 8 unwanted sushi from the belt. It can also rescue you after a jam<\/td>\n<\/tr>\n<tr>\n<td>\u23e9 <strong>Speed<\/strong><\/td>\n<td>Doubles the belt speed so orders are served faster<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p dir=\"ltr\">Boosters you don\u2019t use give <strong>bonus points<\/strong> at the end of the level.<\/p>\n<h4 dir=\"ltr\" aria-level=\"5\"><strong>100 Levels and 6 Difficulty Tiers<\/strong><\/h4>\n<div dir=\"ltr\">\n<table>\n<thead>\n<tr>\n<th scope=\"col\">Tier<\/th>\n<th scope=\"col\">Levels<\/th>\n<th scope=\"col\">What\u2019s new<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\ud83d\udfe2 <strong>Easy<\/strong><\/td>\n<td>1\u20135<\/td>\n<td>3\u20134 columns, a big belt, learn the basics<\/td>\n<\/tr>\n<tr>\n<td>\ud83d\udd35 <strong>Normal<\/strong><\/td>\n<td>6\u201315<\/td>\n<td>Customer patience timers and more customers<\/td>\n<\/tr>\n<tr>\n<td>\ud83d\udfe0 <strong>Hard<\/strong><\/td>\n<td>16\u201330<\/td>\n<td><strong>VIP customers<\/strong> and mystery sushi<\/td>\n<\/tr>\n<tr>\n<td>\ud83d\udd34 <strong>Expert<\/strong><\/td>\n<td>31\u201350<\/td>\n<td>Bigger orders and a smaller, faster belt<\/td>\n<\/tr>\n<tr>\n<td>\ud83d\udfe3 <strong>Master<\/strong><\/td>\n<td>51\u201375<\/td>\n<td>Lots of mystery lids and impatient VIPs<\/td>\n<\/tr>\n<tr>\n<td>\ud83d\udfe1 <strong>Legend<\/strong><\/td>\n<td>76\u2013100<\/td>\n<td>The ultimate sushi chef challenge<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p dir=\"ltr\">Each level adds more customers, more sushi types, bigger orders and a faster belt, so the game always stays fresh.<\/p>\n<h4 dir=\"ltr\" aria-level=\"5\"><strong>Special Features<\/strong><\/h4>\n<ul dir=\"ltr\">\n<li><strong>\u23f3 Customer patience (from level 5):<\/strong> each customer has a patience bar. If it runs out, they leave and you lose a \u2764. Lose all 3 hearts and the level is over.<\/li>\n<li><strong>\u2753 Mystery sushi (from level 10):<\/strong> some sushi hides under a lid until it reaches the top of its column.<\/li>\n<li><strong>\ud83d\udc51 VIP customers (from level 16):<\/strong> VIPs wear a golden crown and pay <strong>double points<\/strong>, but they are less patient.<\/li>\n<li><strong>\ud83d\udd25 Combo bonus:<\/strong> serve customers within a few seconds of each other to build a combo.<\/li>\n<\/ul>\n<h4 dir=\"ltr\" aria-level=\"5\"><strong>Meet the Sushi<\/strong><\/h4>\n<p dir=\"ltr\">Sushi Sort features 9 adorable kawaii sushi: <strong>tuna, salmon, shrimp (ebi), eel (unagi), octopus (tako), tamago, onigiri, cucumber maki and salmon roe (ikura)<\/strong>. Each one has its own cute face, so they\u2019re easy to spot even when the belt is busy.<\/p>\n<h4 dir=\"ltr\" aria-level=\"5\"><strong>Tips to Get 3 Stars<\/strong><\/h4>\n<ul dir=\"ltr\">\n<li><strong>Load what\u2019s ordered.<\/strong> Look at the bubbles before you tap, and only send sushi a customer is waiting for.<\/li>\n<li><strong>Keep the belt under 80%.<\/strong> You get 3 stars if the belt never gets too crowded and you don\u2019t lose any hearts.<\/li>\n<li><strong>Help impatient customers first.<\/strong> A red patience bar means that customer is about to leave.<\/li>\n<li><strong>Save boosters for emergencies.<\/strong> Unused boosters are worth bonus points.<\/li>\n<li><strong>Follow the \ud83d\udc47 hint.<\/strong> If you\u2019re unsure, wait a few seconds and the game points to a good column.<\/li>\n<\/ul>\n<h2 dir=\"ltr\" aria-level=\"5\"><strong>Why You\u2019ll Love Sushi Sort<\/strong><\/h2>\n<ul dir=\"ltr\">\n<li>\u2705 100% free, no download, no sign-up<\/li>\n<li>\u2705 Works on mobile, tablet and desktop, with a fullscreen mode<\/li>\n<li>\u2705 Cute kawaii graphics, music and sound effects<\/li>\n<li>\u2705 Progress and stars are saved automatically in your browser<\/li>\n<li>\u2705 Relaxing at first, truly challenging later<\/li>\n<li>\u2705 Fun for kids and adults, and good practice for planning and quick thinking<\/li>\n<\/ul>\n<\/div><\/div><\/div><\/div><div class=\"vc_column tdi_11  wpb_column vc_column_container tdc-column td-pb-span4 td-is-sticky\">\n<style scoped>\n\n\/* custom css *\/\n.tdi_11{\r\n                    vertical-align: top;\r\n                }.tdi_11 > .wpb_wrapper,\r\n\t\t\t\t.tdi_11 > .wpb_wrapper > .tdc-elements{\r\n\t\t\t\t    display: block;\r\n\t\t\t\t}.tdi_11 > .wpb_wrapper > .tdc-elements{\r\n\t\t\t\t    width: 100%;\r\n\t\t\t\t}.tdi_11 > .wpb_wrapper > .vc_row_inner{\r\n\t\t\t\t    width: auto;\r\n\t\t\t\t}.tdi_11 > .wpb_wrapper{\r\n\t\t\t\t    width: auto;\r\n\t\t\t\t    height: auto;\r\n\t\t\t\t}\n<\/style><div class=\"wpb_wrapper\" data-sticky-offset=\"20\"><div class=\"wpb_wrapper td_block_wrap vc_raw_html tdi_13 \">\n<style scoped>\n\n\/* inline tdc_css att *\/\n\n.tdi_13{\npadding-top:20px !important;\n}\n\n<\/style><div class=\"td-fix-index\"><script async src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-7396755811986582\"\n     crossorigin=\"anonymous\"><\/script>\n<!-- ads 300 x 250 -->\n<ins class=\"adsbygoogle\"\n     style=\"display:inline-block;width:300px;height:250px\"\n     data-ad-client=\"ca-pub-7396755811986582\"\n     data-ad-slot=\"2517371721\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script><\/div><\/div><div class=\"wpb_wrapper td_block_wrap vc_raw_html tdi_15 \"><div class=\"td-fix-index\"><script async src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-7396755811986582\"\n     crossorigin=\"anonymous\"><\/script>\n<!-- ads 300 x 250 -->\n<ins class=\"adsbygoogle\"\n     style=\"display:inline-block;width:300px;height:250px\"\n     data-ad-client=\"ca-pub-7396755811986582\"\n     data-ad-slot=\"2517371721\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script><\/div><\/div><div class=\"wpb_wrapper td_block_wrap vc_raw_html tdi_17 \"><div class=\"td-fix-index\"><script async src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-7396755811986582\"\n     crossorigin=\"anonymous\"><\/script>\n<!-- Ads KNS 300 x 600 -->\n<ins class=\"adsbygoogle\"\n     style=\"display:inline-block;width:300px;height:600px\"\n     data-ad-client=\"ca-pub-7396755811986582\"\n     data-ad-slot=\"4956265638\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script><\/div><\/div><\/div><\/div><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":10815,"parent":3814,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-10806","page","type-page","status-publish","has-post-thumbnail"],"rankMath":{"parentDomain":"ezcalculatoronline.com","noFollowDomains":[],"noFollowExcludeDomains":[],"noFollowExternalLinks":false,"featuredImageNotice":"The featured image should be at least 200 by 200 pixels to be picked up by Facebook and other social media sites.","pluginReviewed":false,"postSettings":{"linkSuggestions":true,"useFocusKeyword":false},"frontEndScore":false,"postName":"sushi-sort","permalinkFormat":"https:\/\/www.ezcalculatoronline.com\/%pagename%\/","showLockModifiedDate":true,"assessor":{"focusKeywordLink":"https:\/\/www.ezcalculatoronline.com\/wp-admin\/edit.php?focus_keyword=%focus_keyword%&post_type=%post_type%","hasTOCPlugin":false,"primaryTaxonomy":false,"serpData":{"title":"Sushi Sort \u2013 Cute Sushi Sorting Game Online Free","description":"Run your own kawaii sushi bar! Sort sushi, fill orders and keep customers smiling. Fun puzzle game for kids and adults. Free on desktop and mobile.","focusKeywords":"Sushi Sort","pillarContent":false,"canonicalUrl":"","breadcrumbTitle":"","advancedRobots":{"max-snippet":"-1","max-video-preview":"-1","max-image-preview":"large"},"facebookTitle":"","facebookDescription":"","facebookImage":"","facebookImageID":"","facebookHasOverlay":false,"facebookImageOverlay":"","facebookAuthor":"","twitterCardType":"","twitterUseFacebook":true,"twitterTitle":"","twitterDescription":"","twitterImage":"","twitterImageID":"","twitterHasOverlay":false,"twitterImageOverlay":"","twitterPlayerUrl":"","twitterPlayerSize":"","twitterPlayerStream":"","twitterPlayerStreamCtype":"","twitterAppDescription":"","twitterAppIphoneName":"","twitterAppIphoneID":"","twitterAppIphoneUrl":"","twitterAppIpadName":"","twitterAppIpadID":"","twitterAppIpadUrl":"","twitterAppGoogleplayName":"","twitterAppGoogleplayID":"","twitterAppGoogleplayUrl":"","twitterAppCountry":"","robots":{"index":true},"twitterAuthor":"username","primaryTerm":0,"authorName":"Thien Nguyen","titleTemplate":"%title% %sep% %sitename%","descriptionTemplate":"%excerpt%","showScoreFrontend":true,"lockModifiedDate":false},"powerWords":["a cut above","absolute","absolutely","absolutely lowest","absurd","abuse","accurate","accuse","achieve","actionable","adaptable","adequate","admit","adorable","advantage","advice","affordable","aggravate","aggressive","agitated","agonizing","agony","alarmed","alarming","alienated","aligned","alive","all-inclusive","alluring","always","amazing","amp","animated","annihilate","announcing","anonymous","antagonistic","anxious","apocalypse","appalled","approved","approving","argumentative","armageddon","arrogant","ass kicking","assault","assured","astonishing","astounded","astounding","at ease","atrocious","attack","attractive","audacity","authentic","authoritative","authority","avoid","aware","awe-inspiring","awesome","awkward","backbone","backdoor","backed","backlash","backstabbing","badass","balanced","banned","bargain","barrage","basic","battle","beaming","beat down","beating","beautiful","beauty","begging","behind the scenes","belief","belong","best","best-selling","better","beware","big","billion","black market","blacklisted","blast","blessed","blinded","blissful","blood","bloodbath","bloodcurdling","bloody","blunder","blushing","bold","bomb","bona","bona fide","bonanza","bonus","bootleg","bottom line","bountiful","brave","bravery","brazen","break","breaking","breakthrough","breathtaking","bright","brilliant","broke","brutal","budget","buffoon","bullshit","bully","bumbling","buy","cadaver","calm","cancel anytime","capable","captivate","captivating","carefree","case study","cash","cataclysmic","catapult","catastrophe","caution","censored","centered","certain","certainly","certified","challenge","charming","cheap","cheat","cheat-sheet","cheer","cheerful","child-like","clarity","classified","clear","clueless","collapse","colorful","colossal","comfortable","compare","competitive","complete","completely","completeness","comprehensive","compromise","compulsive","concealed","conclusive","condemning","condescending","confess","confession","confessions","confident","confidential","conquer","conscientious","constructive","content","contrary","controlling","controversial","convenient","convert","cool","cooperative","copy","corpse","corrupt","corrupting","courage","courageous","cover-up","covert","coward","cowardly","crammed","crave","crazy","create","creative","cringeworthy","cripple","crisis","critical","crooked","crush","crushing","damaging","danger","dangerous","daring","dazzling","dead","deadline","deadly","death","decadent","deceived","deceptive","deep","defiance","definitely","definitive","defying","dejected","delicious","delight","delighted","delightful","delirious","delivered","demoralizing","deplorable","depraved","desire","desperate","despicable","destiny","destroy","detailed","devastating","devoted","diagnosed","direct","dirty","disadvantages","disastrous","discount","discover","disdainful","disempowered","disgusted","disgusting","dishonest","disillusioned","disoriented","distracted","distraught","distressed","distrustful","divulge","document","dollar","dominate","doomed","double","doubtful","download","dreadful","dreamy","drive","drowning","dumb","dynamic","eager","earnest","easily","easy","economical","ecstatic","edge","effective","efficient","effortless","elated","eliminate","elite","embarrass","embarrassed","embarrassing","emergency","emerging","emphasize","empowered","enchant","encouraged","endorsed","energetic","energy","enormous","enraged","enthusiastic","envy","epic","epidemic","essential","ethical","euphoric","evil","exactly","exasperated","excellent","excited","excitement","exciting","exclusive","exclusivity","excruciating","exhilarated","expensive","expert","explode","exploit","explosive","exposed","exquisite","extra","extraordinary","extremely","exuberant","eye-opening","fail","fail-proof","failure","faith","famous","fantasy","fascinating","fatigued","faux","faux pas","fearless","feast","feeble","festive","fide","fierce","fight","final","fine","fired","first","first ever","flirt","fluid","focus","focused","fool","fooled","foolish","forbidden","force-fed","forever","forgiving","forgotten","formula","fortune","foul","frantic","free","freebie","freedom","frenzied","frenzy","frightening","frisky","frugal","frustrated","fulfill","fulfilled","full","fully","fun","fun-loving","fundamentals","funniest","funny","furious","gambling","gargantuan","genius","genuine","gift","gigantic","giveaway","glamorous","gleeful","glorious","glowing","goddamn","gorgeous","graceful","grateful","gratified","gravity","great","greatest","greatness","greed","greedy","gripping","grit","grounded","growth","guaranteed","guilt","guilt-free","gullible","guts","hack","happiness","happy","harmful","harsh","hate","have you heard","havoc","hazardous","healthy","heart","heartbreaking","heartwarming","heavenly","hell","helpful","helplessness","hero","hesitant","hidden","high tech","highest","highly effective","hilarious","hoak","hoax","honest","honored","hope","hopeful","horribly","horrific","horrifying","horror","hostile","how to","huge","humility","humor","hurricane","hurry","hypnotic","idiot","ignite","illegal","illusive","imagination","immediately","imminently","impatience","impatient","impenetrable","important","impressive","improved","in the zone","incapable","incapacitated","incompetent","inconsiderate","increase","incredible","indecisive","indulgence","indulgent","inexpensive","inferior","informative","infuriated","ingredients","innocent","innovative","insane","insecure","insider","insidious","inspired","inspiring","instant savings","instantly","instructive","insult","intel","intelligent","intense","interesting","intriguing","introducing","invasion","investment","iron-clad","ironclad","irresistible","irs","is here","jackpot","jail","jaw-dropping","jealous","jeopardy","jittery","jovial","joyous","jubilant","judgmental","jumpstart","just arrived","keen","kickass","kickstart","kill","killed","killing","kills","know it all","lame","largest","lascivious","last","last chance","last minute","latest","laugh","laughing","launch","launching","lavishly","lawsuit","lazy","left behind","legendary","legitimate","liberal","liberated","lick","lies","life-changing","lifetime","light","lighthearted","likely","limited","literally","little-known","loathsome","lonely","looming","loser","lost","love","lucrative","lunatic","lurking","lust","luxurious","luxury","lying","magic","magical","magnificent","mainstream","malicious","mammoth","manipulative","marked down","massive","master","masterclass","maul","mediocre","meditative","meltdown","memorability","memorable","menacing","mesmerizing","meticulous","mind-blowing","minimalist","miracle","mired","mischievous","misgiving","missing out","mistake","monetize","money","moneyback","moneygrubbing","monumental","most important","motivated","mouth-watering","murder","mystery","nail","naked","natural","naughty","nazi","nest egg","never","new","nightmare","no good","no obligation","no one talks about","no questions asked","no risk","no strings attached","non-controlling","noted","novelty","now","obnoxious","obsessed","obsession","obvious","odd","off-kilter","off-limits","off-the record","offensive","official","okay","on-demand","open-minded","opportunities","optimistic","ordeal","outlawed","outrageousness","outstanding","overcome","overjoyed","overnight","overwhelmed","packed","painful","painless","painstaking","pale","panic","panicked","paralyzed","pas","passionate","pathetic","pay zero","payback","perfect","peril","perplexed","perspective","pessimistic","pioneering","piranha","pitfall","pitiful","placid","plague","played","playful","pleased","pluck","plummet","plunge","poison","poisonous","polarizing","poor","popular","portfolio","pound","powerful","powerless","practical","preposterous","prestige","price","priceless","pride","prison","privacy","private","privileged","prize","problem","productive","professional","profit","profitable","profound","promiscuous","promising","promote","protect","protected","proven","provocative","provoke","psychological","pummel","punch","punish","pus","quadruple","quality","quarrelsome","quick","quick-start","quickly","quiet","radiant","rare","ravenous","rebellious","recession-proof","reckoning","recognized","recommend","recreate","reduced","reflective","refugee","refund","refundable","reject","relaxed","release","relentless","reliable","remarkable","replicate","report","reprimanding","repulsed","repulsive","research","resentful","resourceful","responsible","responsive","rested","restricted","results","retaliating","reveal","revealing","revenge","revengeful","revisited","revolting","revolutionary","reward","rich","ridiculous","risky","riveting","rookie","rowdy","ruin","rules","ruthless","sabotaging","sacred","sadistic","sadly","sadness","safe","safety","sale","sampler","sarcastic","satisfied","savage","savagery","save","savings","savvy","scam","scandal","scandalous","scarce","scared","scary","scornful","scream","searing","secret","secret agenda","secret plot","secrets","secure","security","seductive","seething","seize","selected","self-hating","self-sufficient","sensational","senseless","sensual","serene","seriously","severe","sex","sexy","shaking","shameful","shameless","shaming","shatter","shellacking","shocking","should","shrewd","sick and tired","signs","silly","simple","simplicity","simplified","simplistic","sincere","sinful","sins","six-figure","sizable","sizzle","sizzled","sizzles","sizzling","sizzlingly","skill","skyrocket","slaughter","slave","sleazy","sleeping","sly","smash","smiling","smug","smuggle","smuggled","sneak-peek","sneaky","sniveling","snob","snooty","snotty","soar","soaring","solid","solution","spank","special","spectacular","speedy","spell-binding","spine","spirit","spirited","spiteful","spoiler","spontaneous","spotlight","spunky","squirming","stable","staggering","startling","steady","steal","stealthy","steamy","step-by-step","still","stoic","stop","strange","strangle","strategy","stressed","strong","strongly suggest","struggle","stuck up","studies","stunning","stupid","stupid-simple","sturdy","sublime","succeed","success","successful","suck","suddenly","suffer","sunny","super","super-human","superb","supercharge","superior","supported","supportive","sure","sure fire","surefire","surge","surging","surprise","surprised","surprising","survival","survive","suspicious","sweaty","swoon","swoon-worthy","tailspin","tank","tantalizing","targeted","tawdry","tease","technology","teetering","tempting","tenacious","tense","terrible","terrific","terrified","terrifying","terror","terrorist","tested","thankful","the truth","threaten","threatened","thrilled","thrilling","thug","ticked off","tickled","timely","today","torture","toxic","track record","trade secret","tragedy","tragic","transform","transparency","trap","trapped","trauma","traumatized","treacherous","treasure","tremendous","trend","tricks","triggers","triple","triumph","truly","trusting","trustworthy","truth","truthful","turbo-charge","turbocharges","tweaks","twitching","ultimate","unadulterated","unassuming","unauthorized","unbelievable","unburdened","uncaring","uncensored","uncertain","uncomfortable","unconditional","uncontrollable","unconventional","uncovered","undeniable","under priced","undercover","underground","underhanded","underused","unexpected","unforgettable","unheard of","unhurried","uninterested","unique","unjustified","unknowingly","unleashed","unlimited","unlock","unparalleled","unpopular","unreliable","unresponsive","unseen","unstable","unstoppable","unsure","unsurpassed","untapped","unusual","up-sell","upbeat","uplifted","uplifting","urge","urgent","useful","useless","validate","valor","valuable","value","vanquish","vaporize","venomous","verify","vibrant","vicious","victim","victory","vigorous","vilified","vindictive","violated","violent","volatile","vulnerable","waiting","wanted","wanton","warning","waste","weak","wealth","weird","what no one tells you","whip","whopping","wicked","wild","willpower","withheld","wonderful","wondrous","woozy","world","worry","worst","worthwhile","wounded","wreaking","youthful","zen","zinger"],"diacritics":{"A":"[\\u0041\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F]","AA":"[\\uA732]","AE":"[\\u00C6\\u01FC\\u01E2]","AO":"[\\uA734]","AU":"[\\uA736]","AV":"[\\uA738\\uA73A]","AY":"[\\uA73C]","B":"[\\u0042\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181]","C":"[\\u0043\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\u00C7\\u1E08\\u0187\\u023B\\uA73E]","D":"[\\u0044\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779]","DZ":"[\\u01F1\\u01C4]","Dz":"[\\u01F2\\u01C5]","E":"[\\u0045\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E]","F":"[\\u0046\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B]","G":"[\\u0047\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E]","H":"[\\u0048\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D]","I":"[\\u0049\\u24BE\\uFF29\\u00CC\\u00CD\\u00CE\\u0128\\u012A\\u012C\\u0130\\u00CF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197]","J":"[\\u004A\\u24BF\\uFF2A\\u0134\\u0248]","K":"[\\u004B\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2]","L":"[\\u004C\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780]","LJ":"[\\u01C7]","Lj":"[\\u01C8]","M":"[\\u004D\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C]","N":"[\\u004E\\u24C3\\uFF2E\\u01F8\\u0143\\u00D1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4]","NJ":"[\\u01CA]","Nj":"[\\u01CB]","O":"[\\u004F\\u24C4\\uFF2F\\u00D2\\u00D3\\u00D4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\u00D5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\u00D6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\u00D8\\u01FE\\u0186\\u019F\\uA74A\\uA74C]","OI":"[\\u01A2]","OO":"[\\uA74E]","OU":"[\\u0222]","P":"[\\u0050\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754]","Q":"[\\u0051\\u24C6\\uFF31\\uA756\\uA758\\u024A]","R":"[\\u0052\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782]","S":"[\\u0053\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784]","T":"[\\u0054\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786]","TZ":"[\\uA728]","U":"[\\u0055\\u24CA\\uFF35\\u00D9\\u00DA\\u00DB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\u00DC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244]","V":"[\\u0056\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245]","VY":"[\\uA760]","W":"[\\u0057\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72]","X":"[\\u0058\\u24CD\\uFF38\\u1E8A\\u1E8C]","Y":"[\\u0059\\u24CE\\uFF39\\u1EF2\\u00DD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE]","Z":"[\\u005A\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762]","a":"[\\u0061\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250]","aa":"[\\uA733]","ae":"[\\u00E6\\u01FD\\u01E3]","ao":"[\\uA735]","au":"[\\uA737]","av":"[\\uA739\\uA73B]","ay":"[\\uA73D]","b":"[\\u0062\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253]","c":"[\\u0063\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184]","d":"[\\u0064\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A]","dz":"[\\u01F3\\u01C6]","e":"[\\u0065\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD]","f":"[\\u0066\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C]","g":"[\\u0067\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F]","h":"[\\u0068\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265]","hv":"[\\u0195]","i":"[\\u0069\\u24D8\\uFF49\\u00EC\\u00ED\\u00EE\\u0129\\u012B\\u012D\\u00EF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131]","j":"[\\u006A\\u24D9\\uFF4A\\u0135\\u01F0\\u0249]","k":"[\\u006B\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3]","l":"[\\u006C\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747]","lj":"[\\u01C9]","m":"[\\u006D\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F]","n":"[\\u006E\\u24DD\\uFF4E\\u01F9\\u0144\\u00F1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5]","nj":"[\\u01CC]","o":"[\\u006F\\u24DE\\uFF4F\\u00F2\\u00F3\\u00F4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\u00F5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\u00F6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\u00F8\\u01FF\\u0254\\uA74B\\uA74D\\u0275]","oi":"[\\u01A3]","ou":"[\\u0223]","oo":"[\\uA74F]","p":"[\\u0070\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755]","q":"[\\u0071\\u24E0\\uFF51\\u024B\\uA757\\uA759]","r":"[\\u0072\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783]","s":"[\\u0073\\u24E2\\uFF53\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B]","ss":"[\\u00DF]","t":"[\\u0074\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787]","tz":"[\\uA729]","u":"[\\u0075\\u24E4\\uFF55\\u00F9\\u00FA\\u00FB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\u00FC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289]","v":"[\\u0076\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C]","vy":"[\\uA761]","w":"[\\u0077\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73]","x":"[\\u0078\\u24E7\\uFF58\\u1E8B\\u1E8D]","y":"[\\u0079\\u24E8\\uFF59\\u1EF3\\u00FD\\u0177\\u1EF9\\u0233\\u1E8F\\u00FF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF]","z":"[\\u007A\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763]"},"researchesTests":["contentHasTOC","contentHasShortParagraphs","contentHasAssets","keywordInTitle","keywordInMetaDescription","keywordInPermalink","keywordIn10Percent","keywordInContent","keywordInSubheadings","keywordInImageAlt","keywordDensity","keywordNotUsed","lengthContent","lengthPermalink","linksHasInternal","linksHasExternals","linksNotAllExternals","titleStartWithKeyword","titleSentiment","titleHasPowerWords","titleHasNumber","hasContentAI"],"hasRedirection":true,"hasBreadcrumb":true},"homeUrl":"https:\/\/www.ezcalculatoronline.com","objectID":10806,"objectType":"post","locale":"en","localeFull":"en_US","overlayImages":{"play":{"name":"Play icon","url":"https:\/\/www.ezcalculatoronline.com\/wp-content\/plugins\/seo-by-rank-math\/assets\/admin\/img\/icon-play.png","path":"\/home\/dh_7btfqe\/ezcalculatoronline.com\/wp-content\/plugins\/seo-by-rank-math\/assets\/admin\/img\/icon-play.png","position":"middle_center"},"gif":{"name":"GIF icon","url":"https:\/\/www.ezcalculatoronline.com\/wp-content\/plugins\/seo-by-rank-math\/assets\/admin\/img\/icon-gif.png","path":"\/home\/dh_7btfqe\/ezcalculatoronline.com\/wp-content\/plugins\/seo-by-rank-math\/assets\/admin\/img\/icon-gif.png","position":"middle_center"}},"defautOgImage":"https:\/\/www.ezcalculatoronline.com\/wp-content\/uploads\/2025\/11\/EZCALCULATORONLINE-LOGO-2.png","customPermalinks":true,"isUserRegistered":false,"autoSuggestKeywords":false,"connectSiteUrl":"https:\/\/rankmath.com\/auth?site=https%3A%2F%2Fwww.ezcalculatoronline.com&r=https%3A%2F%2Fwww.ezcalculatoronline.com%2Fpa%2Fwp-json%2Fwp%2Fv2%2Fpages%2F10806%3Fnonce%3Dccfd2398c2","maxTags":5,"trendsIcon":"<svg viewBox=\"0 0 610 610\"><path d=\"M18.85,446,174.32,290.48l58.08,58.08L76.93,504a14.54,14.54,0,0,1-20.55,0L18.83,466.48a14.54,14.54,0,0,1,0-20.55Z\" style=\"fill:#4285f4\"\/><path d=\"M242.65,242.66,377.59,377.6l-47.75,47.75a14.54,14.54,0,0,1-20.55,0L174.37,290.43l47.75-47.75A14.52,14.52,0,0,1,242.65,242.66Z\" style=\"fill:#ea4335\"\/><polygon points=\"319.53 319.53 479.26 159.8 537.34 217.88 377.61 377.62 319.53 319.53\" style=\"fill:#fabb05\"\/><path d=\"M594.26,262.73V118.61h0a16.94,16.94,0,0,0-16.94-16.94H433.2a16.94,16.94,0,0,0-12,28.92L565.34,274.71h0a16.94,16.94,0,0,0,28.92-12Z\" style=\"fill:#34a853\"\/><rect width=\"610\" height=\"610\" style=\"fill:none\"\/><\/svg>","showScore":true,"siteFavIcon":"https:\/\/www.ezcalculatoronline.com\/wp-content\/uploads\/2025\/05\/cropped-ezcaculator-32x32.webp","canUser":{"general":false,"advanced":false,"snippet":false,"social":false,"analysis":false,"analytics":false,"content_ai":false},"showKeywordIntent":true,"isPro":false,"is_front_page":false,"trendsUpgradeLink":"https:\/\/rankmath.com\/pricing\/?utm_source=Plugin&utm_medium=CE%20General%20Tab%20Trends&utm_campaign=WP","trendsUpgradeLabel":"Upgrade","trendsPreviewImage":"https:\/\/www.ezcalculatoronline.com\/wp-content\/plugins\/seo-by-rank-math\/assets\/admin\/img\/trends-preview.jpg","currentEditor":false,"homepageData":{"assessor":{"powerWords":["a cut above","absolute","absolutely","absolutely lowest","absurd","abuse","accurate","accuse","achieve","actionable","adaptable","adequate","admit","adorable","advantage","advice","affordable","aggravate","aggressive","agitated","agonizing","agony","alarmed","alarming","alienated","aligned","alive","all-inclusive","alluring","always","amazing","amp","animated","annihilate","announcing","anonymous","antagonistic","anxious","apocalypse","appalled","approved","approving","argumentative","armageddon","arrogant","ass kicking","assault","assured","astonishing","astounded","astounding","at ease","atrocious","attack","attractive","audacity","authentic","authoritative","authority","avoid","aware","awe-inspiring","awesome","awkward","backbone","backdoor","backed","backlash","backstabbing","badass","balanced","banned","bargain","barrage","basic","battle","beaming","beat down","beating","beautiful","beauty","begging","behind the scenes","belief","belong","best","best-selling","better","beware","big","billion","black market","blacklisted","blast","blessed","blinded","blissful","blood","bloodbath","bloodcurdling","bloody","blunder","blushing","bold","bomb","bona","bona fide","bonanza","bonus","bootleg","bottom line","bountiful","brave","bravery","brazen","break","breaking","breakthrough","breathtaking","bright","brilliant","broke","brutal","budget","buffoon","bullshit","bully","bumbling","buy","cadaver","calm","cancel anytime","capable","captivate","captivating","carefree","case study","cash","cataclysmic","catapult","catastrophe","caution","censored","centered","certain","certainly","certified","challenge","charming","cheap","cheat","cheat-sheet","cheer","cheerful","child-like","clarity","classified","clear","clueless","collapse","colorful","colossal","comfortable","compare","competitive","complete","completely","completeness","comprehensive","compromise","compulsive","concealed","conclusive","condemning","condescending","confess","confession","confessions","confident","confidential","conquer","conscientious","constructive","content","contrary","controlling","controversial","convenient","convert","cool","cooperative","copy","corpse","corrupt","corrupting","courage","courageous","cover-up","covert","coward","cowardly","crammed","crave","crazy","create","creative","cringeworthy","cripple","crisis","critical","crooked","crush","crushing","damaging","danger","dangerous","daring","dazzling","dead","deadline","deadly","death","decadent","deceived","deceptive","deep","defiance","definitely","definitive","defying","dejected","delicious","delight","delighted","delightful","delirious","delivered","demoralizing","deplorable","depraved","desire","desperate","despicable","destiny","destroy","detailed","devastating","devoted","diagnosed","direct","dirty","disadvantages","disastrous","discount","discover","disdainful","disempowered","disgusted","disgusting","dishonest","disillusioned","disoriented","distracted","distraught","distressed","distrustful","divulge","document","dollar","dominate","doomed","double","doubtful","download","dreadful","dreamy","drive","drowning","dumb","dynamic","eager","earnest","easily","easy","economical","ecstatic","edge","effective","efficient","effortless","elated","eliminate","elite","embarrass","embarrassed","embarrassing","emergency","emerging","emphasize","empowered","enchant","encouraged","endorsed","energetic","energy","enormous","enraged","enthusiastic","envy","epic","epidemic","essential","ethical","euphoric","evil","exactly","exasperated","excellent","excited","excitement","exciting","exclusive","exclusivity","excruciating","exhilarated","expensive","expert","explode","exploit","explosive","exposed","exquisite","extra","extraordinary","extremely","exuberant","eye-opening","fail","fail-proof","failure","faith","famous","fantasy","fascinating","fatigued","faux","faux pas","fearless","feast","feeble","festive","fide","fierce","fight","final","fine","fired","first","first ever","flirt","fluid","focus","focused","fool","fooled","foolish","forbidden","force-fed","forever","forgiving","forgotten","formula","fortune","foul","frantic","free","freebie","freedom","frenzied","frenzy","frightening","frisky","frugal","frustrated","fulfill","fulfilled","full","fully","fun","fun-loving","fundamentals","funniest","funny","furious","gambling","gargantuan","genius","genuine","gift","gigantic","giveaway","glamorous","gleeful","glorious","glowing","goddamn","gorgeous","graceful","grateful","gratified","gravity","great","greatest","greatness","greed","greedy","gripping","grit","grounded","growth","guaranteed","guilt","guilt-free","gullible","guts","hack","happiness","happy","harmful","harsh","hate","have you heard","havoc","hazardous","healthy","heart","heartbreaking","heartwarming","heavenly","hell","helpful","helplessness","hero","hesitant","hidden","high tech","highest","highly effective","hilarious","hoak","hoax","honest","honored","hope","hopeful","horribly","horrific","horrifying","horror","hostile","how to","huge","humility","humor","hurricane","hurry","hypnotic","idiot","ignite","illegal","illusive","imagination","immediately","imminently","impatience","impatient","impenetrable","important","impressive","improved","in the zone","incapable","incapacitated","incompetent","inconsiderate","increase","incredible","indecisive","indulgence","indulgent","inexpensive","inferior","informative","infuriated","ingredients","innocent","innovative","insane","insecure","insider","insidious","inspired","inspiring","instant savings","instantly","instructive","insult","intel","intelligent","intense","interesting","intriguing","introducing","invasion","investment","iron-clad","ironclad","irresistible","irs","is here","jackpot","jail","jaw-dropping","jealous","jeopardy","jittery","jovial","joyous","jubilant","judgmental","jumpstart","just arrived","keen","kickass","kickstart","kill","killed","killing","kills","know it all","lame","largest","lascivious","last","last chance","last minute","latest","laugh","laughing","launch","launching","lavishly","lawsuit","lazy","left behind","legendary","legitimate","liberal","liberated","lick","lies","life-changing","lifetime","light","lighthearted","likely","limited","literally","little-known","loathsome","lonely","looming","loser","lost","love","lucrative","lunatic","lurking","lust","luxurious","luxury","lying","magic","magical","magnificent","mainstream","malicious","mammoth","manipulative","marked down","massive","master","masterclass","maul","mediocre","meditative","meltdown","memorability","memorable","menacing","mesmerizing","meticulous","mind-blowing","minimalist","miracle","mired","mischievous","misgiving","missing out","mistake","monetize","money","moneyback","moneygrubbing","monumental","most important","motivated","mouth-watering","murder","mystery","nail","naked","natural","naughty","nazi","nest egg","never","new","nightmare","no good","no obligation","no one talks about","no questions asked","no risk","no strings attached","non-controlling","noted","novelty","now","obnoxious","obsessed","obsession","obvious","odd","off-kilter","off-limits","off-the record","offensive","official","okay","on-demand","open-minded","opportunities","optimistic","ordeal","outlawed","outrageousness","outstanding","overcome","overjoyed","overnight","overwhelmed","packed","painful","painless","painstaking","pale","panic","panicked","paralyzed","pas","passionate","pathetic","pay zero","payback","perfect","peril","perplexed","perspective","pessimistic","pioneering","piranha","pitfall","pitiful","placid","plague","played","playful","pleased","pluck","plummet","plunge","poison","poisonous","polarizing","poor","popular","portfolio","pound","powerful","powerless","practical","preposterous","prestige","price","priceless","pride","prison","privacy","private","privileged","prize","problem","productive","professional","profit","profitable","profound","promiscuous","promising","promote","protect","protected","proven","provocative","provoke","psychological","pummel","punch","punish","pus","quadruple","quality","quarrelsome","quick","quick-start","quickly","quiet","radiant","rare","ravenous","rebellious","recession-proof","reckoning","recognized","recommend","recreate","reduced","reflective","refugee","refund","refundable","reject","relaxed","release","relentless","reliable","remarkable","replicate","report","reprimanding","repulsed","repulsive","research","resentful","resourceful","responsible","responsive","rested","restricted","results","retaliating","reveal","revealing","revenge","revengeful","revisited","revolting","revolutionary","reward","rich","ridiculous","risky","riveting","rookie","rowdy","ruin","rules","ruthless","sabotaging","sacred","sadistic","sadly","sadness","safe","safety","sale","sampler","sarcastic","satisfied","savage","savagery","save","savings","savvy","scam","scandal","scandalous","scarce","scared","scary","scornful","scream","searing","secret","secret agenda","secret plot","secrets","secure","security","seductive","seething","seize","selected","self-hating","self-sufficient","sensational","senseless","sensual","serene","seriously","severe","sex","sexy","shaking","shameful","shameless","shaming","shatter","shellacking","shocking","should","shrewd","sick and tired","signs","silly","simple","simplicity","simplified","simplistic","sincere","sinful","sins","six-figure","sizable","sizzle","sizzled","sizzles","sizzling","sizzlingly","skill","skyrocket","slaughter","slave","sleazy","sleeping","sly","smash","smiling","smug","smuggle","smuggled","sneak-peek","sneaky","sniveling","snob","snooty","snotty","soar","soaring","solid","solution","spank","special","spectacular","speedy","spell-binding","spine","spirit","spirited","spiteful","spoiler","spontaneous","spotlight","spunky","squirming","stable","staggering","startling","steady","steal","stealthy","steamy","step-by-step","still","stoic","stop","strange","strangle","strategy","stressed","strong","strongly suggest","struggle","stuck up","studies","stunning","stupid","stupid-simple","sturdy","sublime","succeed","success","successful","suck","suddenly","suffer","sunny","super","super-human","superb","supercharge","superior","supported","supportive","sure","sure fire","surefire","surge","surging","surprise","surprised","surprising","survival","survive","suspicious","sweaty","swoon","swoon-worthy","tailspin","tank","tantalizing","targeted","tawdry","tease","technology","teetering","tempting","tenacious","tense","terrible","terrific","terrified","terrifying","terror","terrorist","tested","thankful","the truth","threaten","threatened","thrilled","thrilling","thug","ticked off","tickled","timely","today","torture","toxic","track record","trade secret","tragedy","tragic","transform","transparency","trap","trapped","trauma","traumatized","treacherous","treasure","tremendous","trend","tricks","triggers","triple","triumph","truly","trusting","trustworthy","truth","truthful","turbo-charge","turbocharges","tweaks","twitching","ultimate","unadulterated","unassuming","unauthorized","unbelievable","unburdened","uncaring","uncensored","uncertain","uncomfortable","unconditional","uncontrollable","unconventional","uncovered","undeniable","under priced","undercover","underground","underhanded","underused","unexpected","unforgettable","unheard of","unhurried","uninterested","unique","unjustified","unknowingly","unleashed","unlimited","unlock","unparalleled","unpopular","unreliable","unresponsive","unseen","unstable","unstoppable","unsure","unsurpassed","untapped","unusual","up-sell","upbeat","uplifted","uplifting","urge","urgent","useful","useless","validate","valor","valuable","value","vanquish","vaporize","venomous","verify","vibrant","vicious","victim","victory","vigorous","vilified","vindictive","violated","violent","volatile","vulnerable","waiting","wanted","wanton","warning","waste","weak","wealth","weird","what no one tells you","whip","whopping","wicked","wild","willpower","withheld","wonderful","wondrous","woozy","world","worry","worst","worthwhile","wounded","wreaking","youthful","zen","zinger"],"diacritics":true,"researchesTests":["contentHasTOC","contentHasShortParagraphs","contentHasAssets","keywordInTitle","keywordInMetaDescription","keywordInPermalink","keywordIn10Percent","keywordInContent","keywordInSubheadings","keywordInImageAlt","keywordDensity","keywordNotUsed","lengthContent","lengthPermalink","linksHasInternal","linksHasExternals","linksNotAllExternals","titleStartWithKeyword","titleSentiment","titleHasPowerWords","titleHasNumber","hasContentAI"],"hasBreadcrumb":true,"serpData":{"title":"%sitename% %sep% %sitedesc%","description":"%sitedesc%","titleTemplate":"%sitename% %page% %sep% %sitedesc%","descriptionTemplate":"","focusKeywords":"","breadcrumbTitle":"Home","robots":{"index":true},"advancedRobots":{"max-snippet":"-1","max-video-preview":"-1","max-image-preview":"large"},"facebookTitle":"","facebookDescription":"","facebookImage":"","facebookImageID":""}}},"tocTitle":"Table of Contents","tocExcludeHeadings":[],"listStyle":"ul"},"_links":{"self":[{"href":"https:\/\/www.ezcalculatoronline.com\/wp-json\/wp\/v2\/pages\/10806","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ezcalculatoronline.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.ezcalculatoronline.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.ezcalculatoronline.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ezcalculatoronline.com\/wp-json\/wp\/v2\/comments?post=10806"}],"version-history":[{"count":8,"href":"https:\/\/www.ezcalculatoronline.com\/wp-json\/wp\/v2\/pages\/10806\/revisions"}],"predecessor-version":[{"id":10808,"href":"https:\/\/www.ezcalculatoronline.com\/wp-json\/wp\/v2\/pages\/10806\/revisions\/10808"}],"up":[{"embeddable":true,"href":"https:\/\/www.ezcalculatoronline.com\/wp-json\/wp\/v2\/pages\/3814"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ezcalculatoronline.com\/wp-json\/wp\/v2\/media\/10815"}],"wp:attachment":[{"href":"https:\/\/www.ezcalculatoronline.com\/wp-json\/wp\/v2\/media?parent=10806"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}