KG_Complexity_Filter

Filters games by complexity on the game page

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(У мене вже є менеджер скриптів, дайте мені встановити його!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name          KG_Complexity_Filter
// @namespace     klavogonki
// @version      1.0.7
// @description   Filters games by complexity on the game page
// @match         *://klavogonki.ru/g/*
// @author        Patcher
// @icon          https://www.google.com/s2/favicons?sz=64&domain=klavogonki.ru
// ==/UserScript==

(()=>{var e={14:(e,t,a)=>{"use strict";a.r(t),a.d(t,{layout:()=>o,layoutLang:()=>l,layoutName:()=>r,shiftMap:()=>n});const o={ё:[0,0,0,"L"],1:[1,0,1,"L"],2:[2,0,2,"L"],3:[3,0,3,"L"],4:[4,0,4,"L"],5:[4,0,5,"L"],6:[6,0,6,"R"],7:[7,0,7,"R"],8:[8,0,8,"R"],9:[9,0,9,"R"],0:[9,0,10,"R"],"*":[9,0,11,"R"],"=":[9,0,12,"R"],ц:[0,1,0,"L"],ь:[1,1,1,"L"],я:[2,1,2,"L"],",":[3,1,3,"L"],".":[4,1,4,"L"],з:[5,1,5,"R"],в:[6,1,6,"R"],к:[7,1,7,"R"],д:[8,1,8,"R"],ч:[9,1,9,"R"],ш:[9,1,10,"R"],щ:[9,1,11,"R"],"\\":[9,1,12,"R"],у:[0,2,0,"L"],и:[1,2,1,"L"],е:[2,2,2,"L"],о:[3,2,3,"L"],а:[4,2,4,"L"],л:[5,2,5,"R"],н:[6,2,6,"R"],т:[7,2,7,"R"],с:[8,2,8,"R"],р:[9,2,9,"R"],й:[9,2,10,"R"],ф:[0,3,0,"L"],э:[1,3,1,"L"],х:[2,3,2,"L"],ы:[3,3,3,"L"],ю:[4,3,4,"L"],б:[5,3,5,"R"],м:[6,3,6,"R"],п:[7,3,7,"R"],г:[8,3,8,"R"],ж:[9,3,9,"R"]},n={ъ:"1",ь:"2","№":"3","%":"4",":":"5",";":"6","-":"7",'"':"8","(":"9",")":"0",_:"-","+":"=","?":",","!":".","/":"\\"},l="RU",r="ДИКТОР"},30:(e,t,a)=>{var o={"./close-line.svg":961,"./contrast-fill.svg":722,"./enFlag.svg":649,"./eye-close-fill.svg":980,"./eye-fill.svg":581,"./eye-off-fill.svg":329,"./fire-fill.svg":228,"./hashtag.svg":402,"./keyboard-fill.svg":417,"./moon-fill.svg":785,"./ruFlag.svg":491,"./sun-fill.svg":310};function n(e){var t=l(e);return a(t)}function l(e){if(!a.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}n.keys=function(){return Object.keys(o)},n.resolve=l,e.exports=n,n.id=30},56:(e,t,a)=>{"use strict";e.exports=function(e){var t=a.nc;t&&e.setAttribute("nonce",t)}},72:e=>{"use strict";var t=[];function a(e){for(var a=-1,o=0;o<t.length;o++)if(t[o].identifier===e){a=o;break}return a}function o(e,o){for(var l={},r=[],i=0;i<e.length;i++){var s=e[i],p=o.base?s[0]+o.base:s[0],c=l[p]||0,d="".concat(p," ").concat(c);l[p]=c+1;var f=a(d),m={css:s[1],media:s[2],sourceMap:s[3],supports:s[4],layer:s[5]};if(-1!==f)t[f].references++,t[f].updater(m);else{var g=n(m,o);o.byIndex=i,t.splice(i,0,{identifier:d,updater:g,references:1})}r.push(d)}return r}function n(e,t){var a=t.domAPI(t);a.update(e);return function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;a.update(e=t)}else a.remove()}}e.exports=function(e,n){var l=o(e=e||[],n=n||{});return function(e){e=e||[];for(var r=0;r<l.length;r++){var i=a(l[r]);t[i].references--}for(var s=o(e,n),p=0;p<l.length;p++){var c=a(l[p]);0===t[c].references&&(t[c].updater(),t.splice(c,1))}l=s}}},113:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},172:(e,t,a)=>{var o={"./en/dvorak.js":786,"./en/qwerty.js":937,"./ru/dictor.js":14,"./ru/jcuken.js":471};function n(e){var t=l(e);return a(t)}function l(e){if(!a.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}n.keys=function(){return Object.keys(o)},n.resolve=l,e.exports=n,n.id=172},228:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>o});const o='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M12 23C7.85786 23 4.5 19.6421 4.5 15.5C4.5 13.3462 5.40786 11.4045 6.86179 10.0366C8.20403 8.77375 11.5 6.49951 11 1.5C17 5.5 20 9.5 14 15.5C15 15.5 16.5 15.5 19 13.0296C19.2697 13.8032 19.5 14.6345 19.5 15.5C19.5 19.6421 16.1421 23 12 23Z"></path></svg>'},310:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>o});const o='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M12 18C8.68629 18 6 15.3137 6 12C6 8.68629 8.68629 6 12 6C15.3137 6 18 8.68629 18 12C18 15.3137 15.3137 18 12 18ZM11 1H13V4H11V1ZM11 20H13V23H11V20ZM3.51472 4.92893L4.92893 3.51472L7.05025 5.63604L5.63604 7.05025L3.51472 4.92893ZM16.9497 18.364L18.364 16.9497L20.4853 19.0711L19.0711 20.4853L16.9497 18.364ZM19.0711 3.51472L20.4853 4.92893L18.364 7.05025L16.9497 5.63604L19.0711 3.51472ZM5.63604 16.9497L7.05025 18.364L4.92893 20.4853L3.51472 19.0711L5.63604 16.9497ZM23 11V13H20V11H23ZM4 11V13H1V11H4Z"></path></svg>'},314:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var a="",o=void 0!==t[5];return t[4]&&(a+="@supports (".concat(t[4],") {")),t[2]&&(a+="@media ".concat(t[2]," {")),o&&(a+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),a+=e(t),o&&(a+="}"),t[2]&&(a+="}"),t[4]&&(a+="}"),a})).join("")},t.i=function(e,a,o,n,l){"string"==typeof e&&(e=[[null,e,void 0]]);var r={};if(o)for(var i=0;i<this.length;i++){var s=this[i][0];null!=s&&(r[s]=!0)}for(var p=0;p<e.length;p++){var c=[].concat(e[p]);o&&r[c[0]]||(void 0!==l&&(void 0===c[5]||(c[1]="@layer".concat(c[5].length>0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=l),a&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=a):c[2]=a),n&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=n):c[4]="".concat(n)),t.push(c))}},t}},329:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>o});const o='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M4.52047 5.93457L1.39366 2.80777L2.80788 1.39355L22.6069 21.1925L21.1927 22.6068L17.8827 19.2968C16.1814 20.3755 14.1638 21.0002 12.0003 21.0002C6.60812 21.0002 2.12215 17.1204 1.18164 12.0002C1.61832 9.62282 2.81932 7.5129 4.52047 5.93457ZM14.7577 16.1718L13.2937 14.7078C12.902 14.8952 12.4634 15.0002 12.0003 15.0002C10.3434 15.0002 9.00026 13.657 9.00026 12.0002C9.00026 11.537 9.10522 11.0984 9.29263 10.7067L7.82866 9.24277C7.30514 10.0332 7.00026 10.9811 7.00026 12.0002C7.00026 14.7616 9.23884 17.0002 12.0003 17.0002C13.0193 17.0002 13.9672 16.6953 14.7577 16.1718ZM7.97446 3.76015C9.22127 3.26959 10.5793 3.00016 12.0003 3.00016C17.3924 3.00016 21.8784 6.87992 22.8189 12.0002C22.5067 13.6998 21.8038 15.2628 20.8068 16.5925L16.947 12.7327C16.9821 12.4936 17.0003 12.249 17.0003 12.0002C17.0003 9.23873 14.7617 7.00016 12.0003 7.00016C11.7514 7.00016 11.5068 7.01833 11.2677 7.05343L7.97446 3.76015Z"></path></svg>'},402:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>o});const o='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M7.78428 14L8.2047 10H4V8H8.41491L8.94043 3H10.9514L10.4259 8H14.4149L14.9404 3H16.9514L16.4259 8H20V10H16.2157L15.7953 14H20V16H15.5851L15.0596 21H13.0486L13.5741 16H9.58509L9.05957 21H7.04855L7.57407 16H4V14H7.78428ZM9.7953 14H13.7843L14.2047 10H10.2157L9.7953 14Z"></path></svg>'},417:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>o});const o='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M3 17H21V19H3V17ZM3 11H6V14H3V11ZM8 11H11V14H8V11ZM3 5H6V8H3V5ZM13 5H16V8H13V5ZM18 5H21V8H18V5ZM13 11H16V14H13V11ZM18 11H21V14H18V11ZM8 5H11V8H8V5Z"></path></svg>'},471:(e,t,a)=>{"use strict";a.r(t),a.d(t,{layout:()=>o,layoutLang:()=>l,layoutName:()=>r,shiftMap:()=>n});const o={ё:[0,0,0,"L"],1:[0,0,1,"L"],2:[1,0,2,"L"],3:[2,0,3,"L"],4:[3,0,4,"L"],5:[4,0,5,"L"],6:[5,0,6,"R"],7:[6,0,7,"R"],8:[7,0,8,"R"],9:[8,0,9,"R"],0:[9,0,10,"R"],"-":[9,0,11,"R"],"=":[9,0,12,"R"],й:[0,1,0,"L"],ц:[1,1,1,"L"],у:[2,1,2,"L"],к:[3,1,3,"L"],е:[4,1,4,"L"],н:[5,1,5,"R"],г:[6,1,6,"R"],ш:[7,1,7,"R"],щ:[8,1,8,"R"],з:[9,1,9,"R"],х:[9,1,10,"R"],ъ:[9,1,11,"R"],"\\":[9,1,12,"R"],ф:[0,2,0,"L"],ы:[1,2,1,"L"],в:[2,2,2,"L"],а:[3,2,3,"L"],п:[4,2,4,"L"],р:[5,2,5,"R"],о:[6,2,6,"R"],л:[7,2,7,"R"],д:[8,2,8,"R"],ж:[9,2,9,"R"],э:[9,2,10,"R"],я:[0,3,0,"L"],ч:[1,3,1,"L"],с:[2,3,2,"L"],м:[3,3,3,"L"],и:[4,3,4,"L"],т:[5,3,5,"R"],ь:[6,3,6,"R"],б:[7,3,7,"R"],ю:[8,3,8,"R"],".":[9,3,9,"R"]},n={"!":"1",'"':"2","№":"3",";":"4","%":"5",":":"6","?":"7","*":"8","(":"9",")":"0",_:"-","+":"=","/":"\\",",":"."},l="RU",r="ЙЦУКЕН"},491:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>o});const o='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 600">\n  <rect width="900" height="200" fill="#ffffff"/>\n  <rect width="900" height="200" y="200" fill="#0039a6"/>\n  <rect width="900" height="200" y="400" fill="#d52b1e"/>\n</svg>'},504:(e,t,a)=>{var o={"./en/_frequency.js":588,"./ru/_frequency.js":778};function n(e){var t=l(e);return a(t)}function l(e){if(!a.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}n.keys=function(){return Object.keys(o)},n.resolve=l,e.exports=n,n.id=504},540:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},581:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>o});const o='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M1.18164 12C2.12215 6.87976 6.60812 3 12.0003 3C17.3924 3 21.8784 6.87976 22.8189 12C21.8784 17.1202 17.3924 21 12.0003 21C6.60812 21 2.12215 17.1202 1.18164 12ZM12.0003 17C14.7617 17 17.0003 14.7614 17.0003 12C17.0003 9.23858 14.7617 7 12.0003 7C9.23884 7 7.00026 9.23858 7.00026 12C7.00026 14.7614 9.23884 17 12.0003 17ZM12.0003 15C10.3434 15 9.00026 13.6569 9.00026 12C9.00026 10.3431 10.3434 9 12.0003 9C13.6571 9 15.0003 10.3431 15.0003 12C15.0003 13.6569 13.6571 15 12.0003 15Z"></path></svg>'},588:(e,t,a)=>{"use strict";a.r(t),a.d(t,{freqNorm:()=>n,frequency:()=>o,layoutLang:()=>l});const o={e:12.6,t:9.37,a:8.34,o:7.7,i:6.71,n:6.8,s:6.11,h:6.11,r:5.68,l:4.24,d:4.14,c:2.73,u:2.85,m:2.53,w:2.34,f:2.03,g:1.92,y:2.04,p:1.66,b:1.54,v:1.06,k:.87,j:.23,x:.2,q:.09,z:.06},n=12.6,l="EN"},601:e=>{"use strict";e.exports=function(e){return e[1]}},649:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>o});const o='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 600">\n  <polygon fill="#ffffff" points="0,0 900,0 900,600 0,600"/>\n  <path fill="#012169" d="M900 99.94l-166.29 99.78 166.29 0 0 -99.78zm-833.44 -99.94l283.13 0 0 169.88 -283.13 -169.88zm483.7 0l283.13 0 -283.13 169.88 0 -169.88zm349.74 400.21l0 99.86 -166.42 -99.85 166.42 -0zm-66.6 199.79l-283.13 0 0 -169.88 283.13 169.88zm-483.7 0l-283.13 0 283.13 -169.88 0 169.88zm-349.7 -100.03l0 -99.75 166.25 0 -166.25 99.75zm0 -300.32l0 -99.75 166.25 99.75 -166.25 0z"/>\n  <polygon fill="#C8102E" points="369.75,239.83 0,239.83 0,360.17 389.81,360.17 389.81,600 510.15,600 510.15,360.25 900,360.25 900,239.83 510.15,239.83 510.15,0 389.81,0 389.81,239.83"/>\n  <path fill="#C8102E" d="M349.7 406.8l-322 193.2 -27.7 0 0 -45.55 257 -154.16 92.72 0 0 6.52zm522.93 -406.81l27.61 0 0 45.62 -256.86 154.09 -92.87 0 0 -6.44 322.12 -193.27zm27.61 523.38l0 62.18 -308.95 -185.35 103.67 -0.01 205.28 123.18zm-900 -446.66l0 -62.18 308.66 185.17 -103.67 0 -204.99 -122.99z"/>\n</svg>'},659:e=>{"use strict";var t={};e.exports=function(e,a){var o=function(e){if(void 0===t[e]){var a=document.querySelector(e);if(window.HTMLIFrameElement&&a instanceof window.HTMLIFrameElement)try{a=a.contentDocument.head}catch(e){a=null}t[e]=a}return t[e]}(e);if(!o)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");o.appendChild(a)}},722:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>o});const o='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M12 21.9967C6.47715 21.9967 2 17.5196 2 11.9967C2 6.47386 6.47715 1.9967 12 1.9967C17.5228 1.9967 22 6.47386 22 11.9967C22 17.5196 17.5228 21.9967 12 21.9967ZM12 19.9967V3.9967C7.58172 3.9967 4 7.57843 4 11.9967C4 16.415 7.58172 19.9967 12 19.9967Z"></path></svg>'},778:(e,t,a)=>{"use strict";a.r(t),a.d(t,{freqNorm:()=>n,frequency:()=>o,layoutLang:()=>l});const o={о:10.98,е:8.48,а:8,и:7.37,н:6.7,т:6.32,с:5.47,р:4.75,в:4.53,л:4.34,к:3.49,м:3.2,д:2.98,п:2.8,у:2.62,я:2,ы:1.9,з:1.64,ч:1.45,й:1.21,б:1.59,г:1.69,ь:1.74,ж:.94,х:.97,ш:.72,ю:.64,ц:.49,щ:.36,э:.33,ф:.27,ъ:.04,ё:.01},n=10.98,l="RU"},785:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>o});const o='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M11.3807 2.01886C9.91573 3.38768 9 5.3369 9 7.49999C9 11.6421 12.3579 15 16.5 15C18.6631 15 20.6123 14.0843 21.9811 12.6193C21.6613 17.8537 17.3149 22 12 22C6.47715 22 2 17.5228 2 12C2 6.68514 6.14629 2.33869 11.3807 2.01886Z"></path></svg>'},786:(e,t,a)=>{"use strict";a.r(t),a.d(t,{layout:()=>o,layoutLang:()=>l,layoutName:()=>r,shiftMap:()=>n});const o={"`":[0,0,0,"L"],1:[0,0,1,"L"],2:[1,0,2,"L"],3:[2,0,3,"L"],4:[3,0,4,"L"],5:[4,0,5,"L"],6:[5,0,6,"R"],7:[6,0,7,"R"],8:[7,0,8,"R"],9:[8,0,9,"R"],0:[9,0,10,"R"],"[":[9,0,11,"R"],"]":[9,0,12,"R"],"'":[0,1,0,"L"],",":[1,1,1,"L"],".":[2,1,2,"L"],p:[3,1,3,"L"],y:[4,1,4,"L"],f:[5,1,5,"R"],g:[6,1,6,"R"],c:[7,1,7,"R"],r:[8,1,8,"R"],l:[9,1,9,"R"],"/":[9,1,10,"R"],"=":[9,1,11,"R"],"\\":[9,1,12,"R"],a:[0,2,0,"L"],o:[1,2,1,"L"],e:[2,2,2,"L"],u:[3,2,3,"L"],i:[4,2,4,"L"],d:[5,2,5,"R"],h:[6,2,6,"R"],t:[7,2,7,"R"],n:[8,2,8,"R"],s:[9,2,9,"R"],"-":[9,2,10,"R"],";":[0,3,0,"L"],q:[1,3,1,"L"],j:[2,3,2,"L"],k:[3,3,3,"L"],x:[4,3,4,"L"],b:[5,3,5,"R"],m:[6,3,6,"R"],w:[7,3,7,"R"],v:[8,3,8,"R"],z:[9,3,9,"R"]},n={"~":"`","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0","{":"[","}":"]",'"':"'","<":",",">":".","|":"\\","?":"/","+":"=",_:"-",":":";"},l="EN",r="DVORAK"},825:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(a){!function(e,t,a){var o="";a.supports&&(o+="@supports (".concat(a.supports,") {")),a.media&&(o+="@media ".concat(a.media," {"));var n=void 0!==a.layer;n&&(o+="@layer".concat(a.layer.length>0?" ".concat(a.layer):""," {")),o+=a.css,n&&(o+="}"),a.media&&(o+="}"),a.supports&&(o+="}");var l=a.sourceMap;l&&"undefined"!=typeof btoa&&(o+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(l))))," */")),t.styleTagTransform(o,e,t.options)}(t,e,a)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},911:(e,t,a)=>{"use strict";a.d(t,{A:()=>i});var o=a(601),n=a.n(o),l=a(314),r=a.n(l)()(n());r.push([e.id,'@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}@keyframes swing{0%{transform:rotate(0deg)}20%{transform:rotate(-22deg)}45%{transform:rotate(18deg)}65%{transform:rotate(-10deg)}80%{transform:rotate(6deg)}100%{transform:rotate(0deg)}}@keyframes fade-in{from{opacity:0}to{opacity:1}}@keyframes fade-out{from{opacity:1}to{opacity:0}}#complexity-filter-panel[data-complexity-filter-theme=dark]{--bg: #0f1117;--border: #2a2f42;--txt: #d4d8e8;--txt-dim: #6b728e;--digit-bg: #1a2340;--chip-bg: #1e2233;--scrollbar-thumb: #2e3450;--scrollbar-thumb-hover: #3d4460;--clr-red: #e05c5c;--clr-yellow: #f0b840;--clr-green: #4caf82;--clr-blue: #5b8cff;--clr-purple: #a67cff;--clr-slate: #555c77;--accent: var(--clr-blue);--easy: var(--clr-green);--medium: var(--clr-yellow);--hard: var(--clr-red);--hand-l: var(--clr-blue);--hand-r: var(--clr-yellow);--penalty-same-finger: var(--clr-red);--penalty-outward: var(--clr-purple);--penalty-scissor: var(--clr-blue);--penalty-row-jump: var(--clr-green);--penalty-shift: var(--clr-yellow);--penalty-other: var(--clr-slate)}#kg-keyboard-panel[data-complexity-filter-theme=dark]{--bg: #0f1117;--border: #2a2f42;--txt: #d4d8e8;--txt-dim: #6b728e;--chip-bg: #1e2233;--scrollbar-thumb: #2e3450;--clr-blue: #5b8cff;--clr-yellow: #f0b840;--clr-slate: #555c77;--hand-l: var(--clr-blue);--hand-r: var(--clr-yellow);--kb-bg: var(--bg);--kb-border: var(--border);--kb-title: var(--txt-dim);--kb-key-bg: var(--chip-bg);--kb-key-border: var(--scrollbar-thumb);--kb-key-txt: var(--txt);--kb-key-shift-txt: color-mix(in srgb, var(--txt) 70%, var(--kb-key-bg));--kb-special-bg: color-mix(in srgb, var(--clr-slate) 30%, var(--bg));--kb-special-txt: var(--txt-dim)}#complexity-filter-panel[data-complexity-filter-theme=light]{--bg: #f5f6fa;--border: #dde1ef;--txt: #1e2235;--txt-dim: #8b92aa;--digit-bg: #ccd8f7;--chip-bg: #eaecf5;--scrollbar-thumb: #c4c9db;--scrollbar-thumb-hover: #a8afc6;--clr-red: #c93030;--clr-yellow: #c9920a;--clr-green: #2e9668;--clr-blue: #3a6ee8;--clr-purple: #7c52d9;--clr-slate: #9098b0;--accent: var(--clr-blue);--easy: var(--clr-green);--medium: var(--clr-yellow);--hard: var(--clr-red);--hand-l: var(--clr-blue);--hand-r: var(--clr-yellow);--penalty-same-finger: var(--clr-red);--penalty-outward: var(--clr-purple);--penalty-scissor: var(--clr-blue);--penalty-row-jump: var(--clr-green);--penalty-shift: var(--clr-yellow);--penalty-other: var(--clr-slate)}#kg-keyboard-panel[data-complexity-filter-theme=light]{--bg: #f5f6fa;--border: #dde1ef;--txt: #1e2235;--txt-dim: #8b92aa;--chip-bg: #eaecf5;--scrollbar-thumb: #c4c9db;--clr-blue: #3a6ee8;--clr-yellow: #c9920a;--clr-slate: #9098b0;--hand-l: var(--clr-blue);--hand-r: var(--clr-yellow);--kb-bg: var(--bg);--kb-border: var(--border);--kb-title: var(--txt-dim);--kb-key-bg: var(--bg);--kb-key-border: var(--scrollbar-thumb);--kb-key-txt: var(--txt);--kb-key-shift-txt: color-mix(in srgb, var(--txt) 65%, var(--kb-key-bg));--kb-special-bg: color-mix(in srgb, var(--border) 60%, var(--bg));--kb-special-txt: var(--txt-dim)}#kg-keyboard-panel{position:fixed;z-index:2005;border-radius:10px;border:1px solid var(--kb-border);background:var(--kb-bg);box-shadow:0 0 8px rgba(0,0,0,.25) !important;padding:12px;font-family:var(--font-ui, "Inter", system-ui, sans-serif);cursor:move;user-select:none;touch-action:none}#kg-keyboard-panel .kg-kb-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}#kg-keyboard-panel .kg-kb-title{font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--kb-title)}#kg-keyboard-panel .kg-keyboard{display:flex;flex-direction:column;gap:5px}#kg-keyboard-panel .kg-kb-row{display:flex;gap:5px;align-items:stretch}#kg-keyboard-panel .kg-key{position:relative;width:38px;min-width:38px;height:40px;border-radius:6px;background:var(--kb-key-bg);display:flex;flex-direction:column;align-items:center;justify-content:flex-end;padding:4px 5px 6px;cursor:default}#kg-keyboard-panel .kg-key.kg-key--f0{background:color-mix(in srgb, var(--hand-l) 14%, var(--kb-key-bg))}#kg-keyboard-panel .kg-key.kg-key--f1{background:color-mix(in srgb, var(--hand-l) 23%, var(--kb-key-bg))}#kg-keyboard-panel .kg-key.kg-key--f2{background:color-mix(in srgb, var(--hand-l) 32%, var(--kb-key-bg))}#kg-keyboard-panel .kg-key.kg-key--f3{background:color-mix(in srgb, var(--hand-l) 41%, var(--kb-key-bg))}#kg-keyboard-panel .kg-key.kg-key--f4{background:color-mix(in srgb, var(--hand-l) 50%, var(--kb-key-bg))}#kg-keyboard-panel .kg-key.kg-key--f5{background:color-mix(in srgb, var(--hand-r) 50%, var(--kb-key-bg))}#kg-keyboard-panel .kg-key.kg-key--f6{background:color-mix(in srgb, var(--hand-r) 41%, var(--kb-key-bg))}#kg-keyboard-panel .kg-key.kg-key--f7{background:color-mix(in srgb, var(--hand-r) 32%, var(--kb-key-bg))}#kg-keyboard-panel .kg-key.kg-key--f8{background:color-mix(in srgb, var(--hand-r) 23%, var(--kb-key-bg))}#kg-keyboard-panel .kg-key.kg-key--f9{background:color-mix(in srgb, var(--hand-r) 14%, var(--kb-key-bg))}#kg-keyboard-panel .kg-key-main{font-size:14px;font-weight:700;color:var(--kb-key-txt);line-height:1}#kg-keyboard-panel .kg-key-shift{position:absolute;top:5px;left:6px;font-size:10px;font-weight:600;color:var(--kb-key-shift-txt);line-height:1}#kg-keyboard-panel .kg-key-count{display:none;position:absolute;top:0;left:0;right:0;margin:2px;font-size:9px;font-weight:600;line-height:14px;text-align:center;color:var(--kb-key-shift-txt);border-radius:5px;background:var(--kb-bg);pointer-events:none;transition:transform .2s cubic-bezier(0.34, 1.56, 0.64, 1)}#kg-keyboard-panel .kg-key[data-count-bottom] .kg-key-count{transform:translateY(22px)}#kg-keyboard-panel[data-kb-count=on] .kg-key-count{display:block}#kg-keyboard-panel[data-kb-mode=heat] .kg-key:not(.kg-key--special){background:color-mix(in srgb, color-mix(in srgb, color-mix(in srgb, #4caf82 clamp(0%, var(--key-heat, 0) * 300%, 100%), #5b8dd9), #f0b840 clamp(0%, (var(--key-heat, 0) - 0.333) * 300%, 100%)), #e05c5c clamp(0%, (var(--key-heat, 0) - 0.667) * 300%, 100%))}#kg-keyboard-panel[data-kb-mode=heat] .kg-key:not(.kg-key--special) .kg-key-main{color:rgba(0,0,0,.75)}#kg-keyboard-panel[data-kb-mode=heat] .kg-key:not(.kg-key--special) .kg-key-shift{color:rgba(0,0,0,.5)}#kg-keyboard-panel[data-kb-mode=heat] .kg-kb-mode-btn .panel-icon:first-child{display:inline-flex}#kg-keyboard-panel[data-kb-mode=heat] .kg-kb-mode-btn .panel-icon:last-child{display:none}#kg-keyboard-panel[data-kb-mode=zones] .kg-kb-mode-btn .panel-icon:first-child,#kg-keyboard-panel:not([data-kb-mode]) .kg-kb-mode-btn .panel-icon:first-child{display:none}#kg-keyboard-panel[data-kb-mode=zones] .kg-kb-mode-btn .panel-icon:last-child,#kg-keyboard-panel:not([data-kb-mode]) .kg-kb-mode-btn .panel-icon:last-child{display:inline-flex}#kg-keyboard-panel .kg-key--special{background:var(--kb-special-bg);justify-content:flex-end;align-items:flex-start;padding:5px 7px}#kg-keyboard-panel .kg-key-special-label{font-size:10px;font-weight:600;color:var(--kb-special-txt);line-height:1;white-space:nowrap}#kg-keyboard-panel .kg-key--backspace{width:81px}#kg-keyboard-panel .kg-key--tab{width:59.5px}#kg-keyboard-panel .kg-kb-row--1 .kg-key:last-child{flex:1}#kg-keyboard-panel .kg-key--caps{width:70.25px}#kg-keyboard-panel .kg-key--enter{width:91.75px}#kg-keyboard-panel .kg-key--shift-l{width:91.75px}#kg-keyboard-panel .kg-key--shift-r{width:113.25px}#kg-keyboard-panel .kg-key--ctrl,#kg-keyboard-panel .kg-key--win,#kg-keyboard-panel .kg-key--alt,#kg-keyboard-panel .kg-key--menu{width:48.75px}#kg-keyboard-panel .kg-key--space{flex:1}.panel-btn-group{display:flex;align-items:center;gap:4px}.panel-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;background:none;border:none;color:var(--txt-dim);cursor:pointer;padding:0;border-radius:4px;transition:color .15s,background .15s}.panel-btn:hover{color:var(--txt);background:var(--border)}.panel-btn--active{color:var(--txt);background:var(--border)}.panel-btn .panel-icon{width:18px !important;height:18px !important}#complexity-filter-panel{--font-mono: "JetBrains Mono", "Fira Code", "Consolas", monospace;--font-ui: "Inter", "Segoe UI", system-ui, sans-serif;position:fixed;width:480px;max-height:100vh;background:var(--bg);border:1px solid var(--border);border-radius:10px;box-shadow:0 0 8px rgba(0,0,0,.25) !important;display:flex;flex-direction:column;overflow:hidden;z-index:2000;font-family:var(--font-ui);font-size:13px;color:var(--txt);opacity:0;animation:fade-in .35s cubic-bezier(0.16, 1, 0.3, 1) forwards}#complexity-filter-panel.no-fade{animation:none;opacity:1}#complexity-filter-panel .panel-header{display:flex;align-items:center;gap:8px;padding:8px 8px 8px 16px;border-bottom:1px solid var(--border);flex-shrink:0;cursor:move;user-select:none;touch-action:none}#complexity-filter-panel .panel-logo{font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--accent);opacity:.85}#complexity-filter-panel .panel-title{font-size:12px;color:var(--txt-dim);flex:1}#complexity-filter-panel .panel-icon{width:1em;height:1em}#complexity-filter-panel .panel-theme .panel-icon{transform-origin:50% 50%}#complexity-filter-panel .panel-theme .panel-icon.spin{animation:spin .5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards}#complexity-filter-panel .panel-theme .panel-icon.swing{animation:swing .4s ease-in-out forwards}#complexity-filter-panel[data-complexity-filter-theme=dark] .panel-theme .panel-icon:nth-child(1){display:none}#complexity-filter-panel[data-complexity-filter-theme=light] .panel-theme .panel-icon:nth-child(2){display:none}#complexity-filter-panel[data-lang=en] .panel-lang .panel-icon:nth-child(1){display:none}#complexity-filter-panel[data-lang=ru] .panel-lang .panel-icon:nth-child(2){display:none}#complexity-filter-panel .difficulty-bar{display:none;height:12px;margin:16px;border-radius:99px;overflow:hidden;flex-shrink:0}#complexity-filter-panel .header-score{display:none;font-size:18px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums;letter-spacing:-0.02em;margin-left:auto}#complexity-filter-panel .panel-summary{display:contents}#complexity-filter-panel .panel-detail{display:flex;flex-wrap:wrap;align-items:flex-start;align-content:flex-start;padding:0 16px}#complexity-filter-panel[data-view=summary] .difficulty-bar{display:block}#complexity-filter-panel[data-view=summary] .panel-detail{display:none}#complexity-filter-panel[data-view=summary] .panel-text{display:none}#complexity-filter-panel[data-view=minimal] .difficulty-bar{display:block}#complexity-filter-panel[data-view=minimal] .panel-summary{display:none}#complexity-filter-panel[data-view=minimal] .panel-detail{display:none}#complexity-filter-panel[data-view=minimal] .panel-text{display:none}#complexity-filter-panel[data-view=minimal] .header-score{display:block}#complexity-filter-panel[data-view=minimal] .panel-title{flex:unset}#complexity-filter-panel[data-view=full] .panel-view .panel-icon:nth-child(2),#complexity-filter-panel[data-view=full] .panel-view .panel-icon:nth-child(3){display:none}#complexity-filter-panel[data-view=summary] .panel-view .panel-icon:nth-child(1),#complexity-filter-panel[data-view=summary] .panel-view .panel-icon:nth-child(3){display:none}#complexity-filter-panel[data-view=minimal] .panel-view .panel-icon:nth-child(1),#complexity-filter-panel[data-view=minimal] .panel-view .panel-icon:nth-child(2){display:none}#complexity-filter-panel .stats{display:flex;align-items:stretch;padding:16px;border-bottom:1px solid var(--border);flex-shrink:0}#complexity-filter-panel .score-summary{display:flex;flex-direction:column;align-items:center;justify-content:center;padding-right:20px;border-right:1px solid var(--border);margin-right:20px;min-width:80px}#complexity-filter-panel .score-value{font-size:38px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums;letter-spacing:-0.02em}#complexity-filter-panel .score-label{font-size:10px;text-transform:uppercase;letter-spacing:.1em;color:var(--txt-dim);margin-top:4px}#complexity-filter-panel .meta-info{display:grid;grid-template-columns:1fr 1fr;column-gap:20px;row-gap:4px;align-content:center;flex:1}#complexity-filter-panel .meta-row{display:flex;justify-content:space-between;font-size:12px}#complexity-filter-panel .meta-key{color:var(--txt-dim)}#complexity-filter-panel .meta-value{display:inline-flex;align-items:center;gap:4px;font-family:var(--font-mono);color:var(--txt)}#complexity-filter-panel .meta-value-btn{cursor:pointer;border-radius:4px;padding:0 4px;border:1px solid var(--border);transition:background .15s,border-color .15s}#complexity-filter-panel .meta-value-btn:hover{background:var(--bg-hover);border-color:var(--txt-dim)}#complexity-filter-panel .progress-track{height:5px;background:var(--border);border-radius:99px;overflow:hidden;margin:8px 16px;flex-shrink:0}#complexity-filter-panel .progress-fill{height:100%;border-radius:99px;transition:width .6s cubic-bezier(0.16, 1, 0.3, 1)}#complexity-filter-panel .score-legend{display:flex;gap:16px;padding:0 16px 8px;flex-shrink:0}#complexity-filter-panel .legend-item{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--txt-dim)}#complexity-filter-panel .legend-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}#complexity-filter-panel .section-wrap{flex:0 0 100%}#complexity-filter-panel .section-wrap[data-collapsed]{flex:0 0 auto;margin-right:16px}#complexity-filter-panel .section-wrap[data-collapsed]>:not(.section-header){display:none}#complexity-filter-panel .section-header{display:flex;align-items:center;padding:8px 0;cursor:pointer;user-select:none}#complexity-filter-panel .section-header:hover{color:var(--txt)}#complexity-filter-panel .hand-bar-wrap{padding:0 0 8px;flex-shrink:0}#complexity-filter-panel .hand-bar-label{display:flex;justify-content:space-between;align-items:center;font-size:11px;margin-bottom:4px}#complexity-filter-panel .hand-label{font-family:var(--font-mono);font-weight:600;color:var(--txt-dim)}#complexity-filter-panel .hand-l{color:var(--hand-l) !important}#complexity-filter-panel .hand-r{color:var(--hand-r) !important}#complexity-filter-panel .hand-imbalance{font-size:10px;color:var(--hard);letter-spacing:.04em}#complexity-filter-panel .hand-bar-track{position:relative;display:flex;height:5px;border-radius:99px;background:var(--border);cursor:default}#complexity-filter-panel .hand-bar-track::before{content:"";position:absolute;inset:-12px 0}#complexity-filter-panel .hand-seg{height:100%;transition:width .6s cubic-bezier(0.16, 1, 0.3, 1)}#complexity-filter-panel .hand-seg-l{background:var(--hand-l);border-radius:99px 0 0 99px}#complexity-filter-panel .hand-seg-r{background:var(--hand-r);border-radius:0 99px 99px 0}#complexity-filter-panel .penalty-wrap{padding:0 0 8px;flex-shrink:0}#complexity-filter-panel .penalty-track{display:flex;height:5px;border-radius:99px;overflow:hidden;background:var(--border);margin-bottom:8px}#complexity-filter-panel .penalty-seg{height:100%;transition:width .6s cubic-bezier(0.16, 1, 0.3, 1)}#complexity-filter-panel .penalty-legend{display:flex;flex-wrap:wrap;gap:4px}#complexity-filter-panel .penalty-row{display:flex;align-items:center;gap:4px;padding:4px 8px;background:var(--chip-bg);border-radius:5px;font-size:11px;cursor:default}#complexity-filter-panel .penalty-key{color:var(--txt-dim)}#complexity-filter-panel .penalty-pct{font-family:var(--font-mono);font-size:11px;font-weight:600}#complexity-filter-panel .penalty-count{font-family:var(--font-mono);font-size:10px;color:var(--txt-dim)}#complexity-filter-panel .penalty-count::before{content:"| "}#complexity-filter-panel .finger-load-wrap{padding:0 0 8px;flex-shrink:0}#complexity-filter-panel .finger-load-bars{display:flex;align-items:flex-end;gap:4px}#complexity-filter-panel .fl-item{display:flex;flex-direction:column;align-items:center;gap:2px;flex:1}#complexity-filter-panel .fl-bar-wrap{width:100%;height:32px;display:flex;align-items:flex-end;background:var(--chip-bg);border-radius:3px;overflow:hidden;cursor:default}#complexity-filter-panel .fl-bar-fill{width:100%;transition:height .5s cubic-bezier(0.16, 1, 0.3, 1);border-radius:2px 2px 0 0}#complexity-filter-panel .fl-label{font-size:8px;color:var(--txt-dim);font-family:var(--font-mono);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}#complexity-filter-panel[data-active-finger] .panel-text span,#complexity-filter-panel[data-active-hand] .panel-text span,#complexity-filter-panel[data-active-penalty] .panel-text span,#complexity-filter-panel[data-active-key] .panel-text span{opacity:.15;transition:opacity .12s}#complexity-filter-panel[data-active-penalty] .panel-text span:not([data-penalty]){opacity:1}#complexity-filter-panel[data-active-key] .panel-text span.kg-key-hl{opacity:1}#complexity-filter-panel[data-active-finger="0"] .panel-text span[data-finger="0"]{opacity:1}#complexity-filter-panel[data-active-finger="1"] .panel-text span[data-finger="1"]{opacity:1}#complexity-filter-panel[data-active-finger="2"] .panel-text span[data-finger="2"]{opacity:1}#complexity-filter-panel[data-active-finger="3"] .panel-text span[data-finger="3"]{opacity:1}#complexity-filter-panel[data-active-finger="4"] .panel-text span[data-finger="4"]{opacity:1}#complexity-filter-panel[data-active-finger="5"] .panel-text span[data-finger="5"]{opacity:1}#complexity-filter-panel[data-active-finger="6"] .panel-text span[data-finger="6"]{opacity:1}#complexity-filter-panel[data-active-finger="7"] .panel-text span[data-finger="7"]{opacity:1}#complexity-filter-panel[data-active-finger="8"] .panel-text span[data-finger="8"]{opacity:1}#complexity-filter-panel[data-active-finger="9"] .panel-text span[data-finger="9"]{opacity:1}#complexity-filter-panel[data-active-hand=L] .panel-text span[data-hand=L],#complexity-filter-panel[data-active-hand=R] .panel-text span[data-hand=R]{opacity:1}#complexity-filter-panel[data-active-penalty=sameFinger] .panel-text span[data-penalty~=sameFinger],#complexity-filter-panel[data-active-penalty=shiftHold] .panel-text span[data-penalty~=shiftHold],#complexity-filter-panel[data-active-penalty=outwardRoll] .panel-text span[data-penalty~=outwardRoll],#complexity-filter-panel[data-active-penalty=scissor] .panel-text span[data-penalty~=scissor],#complexity-filter-panel[data-active-penalty=rowJump] .panel-text span[data-penalty~=rowJump],#complexity-filter-panel[data-active-penalty=other] .panel-text span[data-penalty~=other]{opacity:1}#complexity-filter-panel .hotspot-section{padding:0 0 8px;flex-shrink:0}#complexity-filter-panel .hotspot-label{font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--txt-dim)}#complexity-filter-panel .hotspot-list{display:flex;gap:4px;flex-wrap:wrap;max-height:80px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb) rgba(0,0,0,0)}#complexity-filter-panel .hotspot-list::-webkit-scrollbar-track,#complexity-filter-panel .hotspot-list::-webkit-scrollbar-track-piece,#complexity-filter-panel .hotspot-list::-webkit-scrollbar-corner{background:rgba(0,0,0,0)}#complexity-filter-panel .hotspot-list::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:99px}#complexity-filter-panel .hotspot-list::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover)}#complexity-filter-panel .hotspot-chip{display:flex;align-items:baseline;gap:4px;padding:4px 8px;background:var(--chip-bg);border-radius:5px;font-family:var(--font-mono)}#complexity-filter-panel .hotspot-ch{font-size:13px;font-weight:600;color:var(--hard)}#complexity-filter-panel .hotspot-cost{font-size:10px;color:var(--txt-dim)}#complexity-filter-panel .panel-text{overflow-y:auto;padding:0 16px 16px;flex:1;min-height:0;font-family:var(--font-mono);font-size:12.5px;line-height:1.75;word-break:break-word;white-space:pre-wrap;scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb) rgba(0,0,0,0)}#complexity-filter-panel .panel-text::-webkit-scrollbar-track,#complexity-filter-panel .panel-text::-webkit-scrollbar-track-piece,#complexity-filter-panel .panel-text::-webkit-scrollbar-corner{background:rgba(0,0,0,0)}#complexity-filter-panel .panel-text::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:99px}#complexity-filter-panel .panel-text::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover)}#complexity-filter-panel .panel-text .easy{color:var(--easy)}#complexity-filter-panel .panel-text .medium{color:var(--medium)}#complexity-filter-panel .panel-text .hard{color:var(--hard)}#complexity-filter-panel .panel-text .worst-zone{text-decoration:underline solid;text-underline-offset:3px;text-decoration-thickness:2px}#complexity-filter-panel .panel-text .worst-zone.easy{text-decoration-color:var(--easy)}#complexity-filter-panel .panel-text .worst-zone.medium{text-decoration-color:var(--medium)}#complexity-filter-panel .panel-text .worst-zone.hard{text-decoration-color:var(--hard)}#complexity-filter-panel .panel-text .long-word{text-decoration:underline dotted;text-underline-offset:3px}#complexity-filter-panel .panel-text .long-word.easy{text-decoration-color:var(--easy)}#complexity-filter-panel .panel-text .long-word.medium{text-decoration-color:var(--medium)}#complexity-filter-panel .panel-text .long-word.hard{text-decoration-color:var(--hard)}#complexity-filter-panel .panel-text .same-finger-l{box-shadow:inset 0 2px 0 0 var(--hand-l) !important}#complexity-filter-panel .panel-text .same-finger-r{box-shadow:inset 0 2px 0 0 var(--hand-r) !important}#complexity-filter-panel .panel-text .shifted-char{font-style:italic}.custom-tooltip-popup{position:fixed;background:#161616;color:#dedede;padding:.5em;z-index:2010 !important;font-size:.9em;font-family:"Montserrat","Noto Color Emoji",sans-serif !important;pointer-events:none;white-space:nowrap;opacity:0;transition:opacity .1s;display:none;flex-direction:column;left:0;top:0;border:1px solid #3c3c3c !important;border-radius:4px !important;box-shadow:0 2px 5px rgba(0,0,0,.3) !important}.custom-tooltip-popup .tooltip-item{display:inline-flex !important;align-items:center !important}.custom-tooltip-popup .tooltip-header{font-weight:500 !important;color:gray !important;margin:.5em !important}.custom-tooltip-popup .tooltip-action{font-weight:500 !important;color:#add8e6 !important}.kg-notification-stack{position:absolute;top:16px;right:16px;display:flex;flex-direction:column;gap:8px;z-index:10;pointer-events:none}.kg-notification-stack .kg-notification{font-size:12px;font-family:var(--font-mono);color:var(--notification-color);background:color-mix(in srgb, var(--notification-color) 10%, var(--bg));font-weight:600;border:1px solid var(--notification-color);border-radius:4px;padding:4px 8px;opacity:0}.kg-notification-stack .kg-notification.in{animation:fade-in .35s cubic-bezier(0.16, 1, 0.3, 1) forwards}.kg-notification-stack .kg-notification.out{animation:fade-out .35s cubic-bezier(0.16, 1, 0.3, 1) forwards}',""]);const i=r},937:(e,t,a)=>{"use strict";a.r(t),a.d(t,{layout:()=>o,layoutLang:()=>l,layoutName:()=>r,shiftMap:()=>n});const o={"`":[0,0,0,"L"],1:[0,0,1,"L"],2:[1,0,2,"L"],3:[2,0,3,"L"],4:[3,0,4,"L"],5:[4,0,5,"L"],6:[5,0,6,"R"],7:[6,0,7,"R"],8:[7,0,8,"R"],9:[8,0,9,"R"],0:[9,0,10,"R"],"-":[9,0,11,"R"],"=":[9,0,12,"R"],q:[0,1,0,"L"],w:[1,1,1,"L"],e:[2,1,2,"L"],r:[3,1,3,"L"],t:[4,1,4,"L"],y:[5,1,5,"R"],u:[6,1,6,"R"],i:[7,1,7,"R"],o:[8,1,8,"R"],p:[9,1,9,"R"],"[":[9,1,10,"R"],"]":[9,1,11,"R"],"\\":[9,1,12,"R"],a:[0,2,0,"L"],s:[1,2,1,"L"],d:[2,2,2,"L"],f:[3,2,3,"L"],g:[4,2,4,"L"],h:[5,2,5,"R"],j:[6,2,6,"R"],k:[7,2,7,"R"],l:[8,2,8,"R"],";":[9,2,9,"R"],"'":[9,2,10,"R"],z:[0,3,0,"L"],x:[1,3,1,"L"],c:[2,3,2,"L"],v:[3,3,3,"L"],b:[4,3,4,"L"],n:[5,3,5,"R"],m:[6,3,6,"R"],",":[7,3,7,"R"],".":[8,3,8,"R"],"/":[9,3,9,"R"]},n={"~":"`","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=","{":"[","}":"]","|":"\\",":":";",'"':"'","<":",",">":".","?":"/"},l="EN",r="QWERTY"},961:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>o});const o='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M11.9997 10.5865L16.9495 5.63672L18.3637 7.05093L13.4139 12.0007L18.3637 16.9504L16.9495 18.3646L11.9997 13.4149L7.04996 18.3646L5.63574 16.9504L10.5855 12.0007L5.63574 7.05093L7.04996 5.63672L11.9997 10.5865Z"></path></svg>'},980:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>o});const o='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M10.1305 15.8421L9.34268 18.7821L7.41083 18.2645L8.1983 15.3256C7.00919 14.8876 5.91661 14.2501 4.96116 13.4536L2.80783 15.6069L1.39362 14.1927L3.54695 12.0394C2.35581 10.6105 1.52014 8.8749 1.17578 6.96843L2.07634 6.80469C4.86882 8.81573 8.29618 10.0003 12.0002 10.0003C15.7043 10.0003 19.1316 8.81573 21.9241 6.80469L22.8247 6.96843C22.4803 8.8749 21.6446 10.6105 20.4535 12.0394L22.6068 14.1927L21.1926 15.6069L19.0393 13.4536C18.0838 14.2501 16.9912 14.8876 15.8021 15.3256L16.5896 18.2645L14.6578 18.7821L13.87 15.8421C13.2623 15.9461 12.6376 16.0003 12.0002 16.0003C11.3629 16.0003 10.7381 15.9461 10.1305 15.8421Z"></path></svg>'}},t={};function a(o){var n=t[o];if(void 0!==n)return n.exports;var l=t[o]={id:o,exports:{}};return e[o](l,l.exports,a),l.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var o in t)a.o(t,o)&&!a.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.nc=void 0,(()=>{"use strict";const e={row:{2:0,1:1,3:1.5,0:2.5},finger:[2,1.5,1,.5,.7,.7,.5,1,1.5,2],freqMax:1,digit:1.5,unknown:3.5,shiftHold:3,rhythmBreak:1.5,sameFinger:3,sameHand:.8,rowJump:.6,outwardRoll:.5,colJump:.15,scissor:.8,handRunBase:4,handRunStep:.12,handImbalance:.6,capsLockAt:4,wordLengthBase:8,wordLengthStep:.1,wordLengthMax:2,redirect:.6,shiftAltBonus:.3,shiftAltPenalty:.4,punctClusterStep:.3,fatigueBase:12,fatigueStep:.08},t=a(504),o={};for(const e of t.keys()){const a=t(e);o[a.layoutLang]={frequency:a.frequency,freqNorm:a.freqNorm}}const n=a(172),l=n.keys().map((t=>{const a=n(t);return{weights:e,scoreMax:9,varWeight:.25,segEasy:3,segMedium:5.5,...o[a.layoutLang],...a}})),r=e=>{const t=[...e].filter((e=>!/[\p{N} \n\r]/u.test(e)));if(0===t.length)return l[0];const a=e=>t.filter((t=>t.toLowerCase()in e.layout||t in e.shiftMap)).length;return l.reduce(((e,t)=>a(t)>=a(e)?t:e))},i=new Set("1234567890"),s=({layout:e,shiftMap:t,frequency:a,freqNorm:o=11,weights:n})=>{const l=/[\p{L}\p{N} \n\r]/u,r=e=>t[e]??e.toLowerCase(),s=e=>e in t||e!==e.toLowerCase(),p=t=>e[r(t)],c=(e,t)=>{const a=p(e),o=p(t);if(!a||!o)return null;if(r(e)===r(t))return{total:0,sameFinger:0,outwardRoll:0,scissor:0,rowJump:0,shiftAlt:0,isOutward:!1};const[l,i,,c]=a,[d,f,,m]=o;let g=0,u=0,y=0,h=0,b=!1,x=0;s(e);if(s(t)){x=("L"===m?"R":"L")===c?-(n.shiftAltBonus??.3):n.shiftAltPenalty??.4}l===d?g=n.sameFinger:c===m&&(u+=n.sameHand+Math.abs(l-d)*n.colJump,1===Math.abs(l-d)&&Math.abs(i-f)>=2&&(y=n.scissor),"L"===c&&d<l&&(u+=n.outwardRoll,b=!0),"R"===c&&d>l&&(u+=n.outwardRoll,b=!0)),h=Math.abs(i-f)*n.rowJump;return{total:g+u+y+h+x,sameFinger:g,outwardRoll:u,scissor:y,rowJump:h,shiftAlt:x,isOutward:b}};return{isShifted:s,keyOf:p,baseOf:r,charCost:(t,p=0)=>{if(" "===t||"\n"===t||"\r"===t)return.5;const c=r(t),d=e[c],f=(e=>!l.test(e))(t)?n.rhythmBreak:0,m=s(t)&&p<n.capsLockAt?n.shiftHold:0;if(!d)return n.unknown+f+m;const[g,u]=d,y=i.has(c)?n.digit:0,h=a?.[c],b=n.freqMax??1,x=void 0!==h?b*(1-h/o):b;return n.row[u]+n.finger[g]+x+f+m+y},bigramCost:(e,t)=>c(e,t)?.total??0,bigramBreak:c,trigramPenalty:(e,t,a)=>{const o=p(e),l=p(t),r=p(a);if(!o||!l||!r)return 0;const[i,,,s]=o,[c,,,d]=l,[f,,,m]=r;if(s!==d||d!==m)return 0;if(i===c||c===f)return 0;return(c>i?f<c:f>c)?n.redirect??.6:0}}},p=(e,t=null,a=null)=>{if(!e?.length)return null;const o=(t&&((e,t=null)=>l.find((a=>a.layoutLang===e&&(!t||a.layoutName===t)))??l.find((t=>t.layoutLang===e))??null)(t,a))??r(e),{layout:n,weights:p,scoreMax:c,varWeight:d,segEasy:f,segMedium:m}=o,{isShifted:g,keyOf:u,baseOf:y,charCost:h,bigramCost:b,bigramBreak:x,trigramPenalty:k}=s(o),v=[...e],w=v.length,L=new Float32Array(w);let C=0,R=0,S=0,M=0,H="",E=0,z=0,T=-1,F=0,O=0,N=0;const I=new Set,A=new Map,B=new Set,$=new Set,_=new Set,j=new Set,K=[...Array(10)].map((()=>[])),Z=new Array(10).fill(0),P=new Int8Array(w).fill(-1),V=new Array(w).fill(null);let W=0;const J={sameFinger:0,shiftHold:0,outwardRoll:0,scissor:0,rowJump:0,other:0},q=e=>!/[\p{L}\p{N} \n\r]/u.test(e),D=e=>{const t=e-T,a=Math.min(p.wordLengthMax,1+Math.max(0,t-p.wordLengthBase)*p.wordLengthStep);if(a>1){for(let t=T;t<e;t++)L[t]*=a;for(let t=T+p.wordLengthBase;t<e;t++)I.add(t);O++}F++,T=-1};for(let e=0;e<w;e++){const t=v[e],a=u(t);if(g(t)?R++:R=0,a||" "===t||"\n"===t||"\r"===t||y(t)in n||S++,a){const e=a[3];e===H?M++:(M=1,H=e),"L"===e?E++:z++}else M=0,H="";const o=M>p.handRunBase?(M-p.handRunBase)*p.handRunStep:0;q(t)?N++:N=0;const l=N>1?(N-1)*(p.punctClusterStep??.3):0;let r=0;if(a){const t=a[0],o=p.fatigueBase??12,n=p.fatigueStep??.08,l=3*o,i=K[t];for(;i.length>0&&e-i[0]>l;)i.shift();i.push(e);const s=i.length;s>o&&(r=(s-o)*n)}const s=h(t,R),c=e>0?x(v[e-1],t):null,d=c?.total??0,f=e>1?k(v[e-2],v[e-1],t):0;if(L[e]=s+d+f+o+l+r,c?.sameFinger>0){const t=a?.[3]??"L";A.set(e-1,u(v[e-1])?.[3]??t),A.set(e,t)}a&&0===a[1]&&W++,g(t)&&B.add(e),a&&(Z[a[0]]+=L[e],P[e]=a[0],V[e]=y(t));!!a&&!i.has(y(t))?-1===T&&(T=e):-1!==T&&D(e),c&&(J.sameFinger+=c.sameFinger,J.outwardRoll+=c.outwardRoll,J.scissor+=c.scissor,J.rowJump+=c.rowJump,c.isOutward&&($.add(e-1),$.add(e)),c.scissor>0&&(_.add(e-1),_.add(e)),c.rowJump>=2*p.rowJump&&(j.add(e-1),j.add(e)));const m=g(t)&&R<p.capsLockAt?p.shiftHold:0;J.shiftHold+=m,J.other+=s-m+o+l+r+f}if(-1!==T&&D(w),S/w>.1)return null;C=L.reduce(((e,t)=>e+t),0);const U=C/w,Y=L.reduce(((e,t)=>e+(t-U)**2),0)/w,X=U+d*Math.sqrt(Y),G=E+z,Q=G>0?Math.abs(E-z)/G:0,ee=Q*p.handImbalance,te=Math.min(100,Math.round((X+ee)/c*100)),ae=[];let oe=null;for(let e=0;e<w;e++){let t=0,a=0;for(let o=Math.max(0,e-4);o<=Math.min(w-1,e+4);o++)t+=L[o],a++;const o=t/a,n=o<f?"easy":o<m?"medium":"hard";oe&&oe.level===n?oe.end=e:(oe={start:e,end:e,level:n},ae.push(oe))}const ne=(()=>{const e=ae.filter((e=>"hard"===e.level&&e.end-e.start+1>=4)),t=e.length?e:ae.filter((e=>"medium"===e.level&&e.end-e.start+1>=4));if(!t.length)return null;const a=e=>{let t=0;for(let a=e.start;a<=e.end;a++)t+=L[a];return t};return t.reduce(((e,t)=>a(t)>a(e)?t:e))})(),le={};for(let e=1;e<w;e++){const t=b(v[e-1],v[e]);if(t>0){const a=y(v[e-1])+y(v[e]);le[a]||(le[a]={pair:v[e-1]+v[e],cost:0}),le[a].cost+=t}}const re=Object.values(le).filter((({cost:e})=>e>=f)).sort(((e,t)=>t.cost-e.cost)),ie=.8*re.reduce(((e,{cost:t})=>e+t),0);let se=0;const pe=[];for(const{pair:e,cost:t}of re)if(pe.push({pair:e,cost:+t.toFixed(1)}),se+=t,se>=ie)break;const ce=new Map;{let e=-1;for(let t=0;t<=w;t++){const a=t<w?v[t]:null;if(!!(a?u(a):null)&&/\p{L}/u.test(a??""))-1===e&&(e=t);else if(-1!==e){const a=v.slice(e,t).join(""),o=L.slice(e,t).reduce(((e,t)=>e+t),0);if(o/(t-e)>=f){const e=a.toLowerCase(),t=ce.get(e);(!t||o>t.cost)&&ce.set(e,{word:a,cost:+o.toFixed(1)})}e=-1}}}const de=[...ce.values()].sort(((e,t)=>t.cost-e.cost)),fe=ae.filter((e=>"hard"===e.level)).reduce(((e,t)=>e+(t.end-t.start+1)),0),me=Math.round(fe/w*100),ge=Object.values(J).reduce(((e,t)=>e+t),0),ue={sameFinger:Math.round(A.size/2),shiftHold:B.size,outwardRoll:Math.round($.size/2),scissor:Math.round(_.size/2),rowJump:Math.round(j.size/2),other:null},ye=ge>0?Object.fromEntries(Object.entries(J).map((([e,t])=>[e,{pct:Math.round(t/ge*100),count:ue[e]}]))):null,he=Z.reduce(((e,t)=>e+t),0),be=Z.map((e=>he>0?Math.round(e/he*100):0)),xe=new Map;for(let e=0;e<w;e++){const t=y(v[e]);t in n&&xe.set(t,(xe.get(t)??0)+1)}const ke=Math.round(W/w*100);return{score:te,avg:+U.toFixed(3),length:w,chars:v,segments:ae,hardPct:me,longWordPct:F>0?Math.round(O/F*100):0,longWordChars:I,sameFingerChars:A,shiftedChars:B,outwardRollChars:$,scissorChars:_,rowJumpChars:j,hardestBigrams:pe,hardestWords:de,worstZone:ne,penaltyBreakdown:ye,handBalance:{left:E,right:z,imbalance:+Q.toFixed(3)},fingerLoad:be,digitRowPct:ke,charFingers:P,charBases:V,keyCounts:xe,layoutLang:o.layoutLang,layoutName:o.layoutName}};var c=a(72),d=a.n(c),f=a(825),m=a.n(f),g=a(659),u=a.n(g),y=a(56),h=a.n(y),b=a(540),x=a.n(b),k=a(113),v=a.n(k),w=a(911),L={};L.styleTagTransform=v(),L.setAttributes=h(),L.insert=u().bind(null,"head"),L.domAPI=m(),L.insertStyleElement=x();d()(w.A,L);w.A&&w.A.locals&&w.A.locals;const C=a(30),R=C.keys().reduce(((e,t)=>(e[t.replace(/^\.\//,"").replace(/\.svg$/i,"")]=C(t).default||C(t),e)),{}),S=(e,t={})=>{const a=R[e];if(!a)throw new Error(`Icon not found: ${e}`);const o=(e=>(new DOMParser).parseFromString(e,"image/svg+xml").documentElement)(a);o.classList.add("panel-icon");const{class:n,...l}=t;return n&&o.classList.add(...n.split(/\s+/).filter(Boolean)),Object.entries(l).forEach((([e,t])=>o.setAttribute(e,t))),o},M=e=>{const t=e.getBoundingClientRect(),a=window.innerWidth-t.width,o=window.innerHeight-t.height;t.left<0&&(e.style.left="0px"),t.top<0&&(e.style.top="0px"),t.left>a&&(e.style.left=a+"px"),t.top>o&&(e.style.top=o+"px")},H="complexityFilterPosition",E=(e,t=e,a)=>{let o=!1,n=0,l=0,r=null,i=null;const s=(t,a)=>{r=t,i=a,e.style.left=t+"px",e.style.top=a+"px",M(e)};try{const t=JSON.parse(window.localStorage.getItem(H)||"null"),o=t?.[a];o&&Number.isFinite(o.left)&&Number.isFinite(o.top)?s(o.left,o.top):requestAnimationFrame((()=>s((window.innerWidth-e.offsetWidth)/2,(window.innerHeight-e.offsetHeight)/2)))}catch{}const p=()=>{null!==r&&(e.style.left=r+"px"),null!==i&&(e.style.top=i+"px"),M(e)},c=e=>{o&&(e.preventDefault(),s(e.clientX-n,e.clientY-l))},d=()=>{o=!1,(()=>{try{const t=JSON.parse(window.localStorage.getItem(H)||"null")??{};t[a]={left:r??e.offsetLeft,top:i??e.offsetTop},window.localStorage.setItem(H,JSON.stringify(t))}catch{}})(),window.removeEventListener("pointermove",c)},f=t=>{if(t.button)return;if(t.target.closest('button, [role="button"], a, input, textarea, select'))return;t.preventDefault();const a=e.getBoundingClientRect();n=t.clientX-a.left,l=t.clientY-a.top,o=!0,s(a.left,a.top),window.addEventListener("pointermove",c),window.addEventListener("pointerup",d,{once:!0})};return t.addEventListener("pointerdown",f),window.addEventListener("resize",p),()=>{t.removeEventListener("pointerdown",f),window.removeEventListener("pointermove",c),window.removeEventListener("pointerup",d),window.removeEventListener("resize",p)}},z="complexityFilterTheme",T="dark",F="light",O=(e,t)=>{e.setAttribute("data-complexity-filter-theme",t),localStorage.setItem(z,t)},N=e=>O(e,localStorage.getItem(z)??T),I="complexityFilterView",A=["full","summary","minimal"],B=(e,t)=>{e.setAttribute("data-view",t),localStorage.setItem(I,t)},$=e=>B(e,localStorage.getItem(I)??"full"),_={title:"Typing Complexity",btnClose:"Close",tooltipView_full:"Switch to full view",tooltipView_summary:"Switch to summary view",tooltipView_minimal:"Switch to minimal view",tooltipThemeDark:"Switch to dark theme",tooltipThemeLight:"Switch to light theme",tierEasy:"Easy",tierMedium:"Moderate",tierHard:"Hard",metaAvg:"Avg cost",metaChars:"Characters",metaHardZones:"Hard zones",metaLongWords:"Long words",metaLayout:"Layout",metaDigitRow:"Digit row",handImbalanceHigh:"⚠ one-sided",handImbalanceMid:"⚠ dominant hand",handImbalanceLow:"⚠ lopsided",handImbalanceMinor:"uneven",penaltyBreakdown:"Penalty breakdown",penaltySameFinger:"Same finger",penaltyOutward:"Outward roll",penaltyScissor:"Scissor",penaltyRowJump:"Row jump",penaltyShift:"Shift hold",penaltyOther:"Base cost",hardestBigrams:"Hardest bigrams",worstZone:"Worst zone",fingerLoad:"Finger load",hardestWords:"Hardest words",handBalance:"Hand balance",fingers:["L pinky","L ring","L mid","L idx+","L idx","R idx","R idx+","R mid","R ring","R pinky"],tooltipAvg:"Average cost per character — lower means easier to type",tooltipChars:"Total number of characters in the text",tooltipHardZones:"Share of characters that fall in hard-difficulty segments",tooltipLongWords:"Share of words exceeding the base length threshold — longer words tire fingers faster",tooltipDigitRow:"Share of keystrokes on the number row — the most awkward row to reach",tooltipHandL:"Left hand share of total keystrokes",tooltipHandR:"Right hand share of total keystrokes",tooltipBigram:"Total weight of this key pair accumulated across the whole text",tooltipTopWord:"Total typing cost for this word — the higher, the harder to type",tooltipLongWordText:"Long word — extra fatigue penalty applied beyond 8 characters",tooltipEasyText:"Easy zone — comfortable to type",tooltipMediumText:"Medium zone — moderate typing difficulty",tooltipHardText:"Hard zone — requires more complex finger movements",tooltipWorstZone:"Worst zone — the most demanding stretch of text to type",tooltipSameFingerL:"This character is part of a same-finger bigram (left hand)",tooltipSameFingerR:"This character is part of a same-finger bigram (right hand)",tooltipShifted:"Requires holding Shift",tooltipPenalty_sameFinger:"Two consecutive keys pressed with the same finger",tooltipPenalty_outwardRoll:"Roll toward the pinky — less natural than rolling toward the index finger",tooltipPenalty_scissor:"Adjacent fingers spanning 2+ rows simultaneously",tooltipPenalty_rowJump:"Large vertical reach between keyboard rows",tooltipPenalty_shiftHold:"Shift held on the same side as the key being typed",tooltipPenalty_other:"Base key cost: position on keyboard, finger load, and character rarity",tooltipLang:"Switch keyboard language",tooltipLayout:"Switch keyboard layout",tooltipShowKeyboard:"Show keyboard layout",tooltipHideKeyboard:"Hide keyboard layout",tooltipKeyboardPin:"Pin — open automatically next time",tooltipKeyboardUnpin:"Unpin — open manually next time",alertLangIncompatible:"This text is not compatible with the selected language",tooltipKbModeHeat:"Switch to heat map",tooltipKbModeZones:"Switch to finger zones",tooltipKbCountOn:"Show key press counts",tooltipKbCountOff:"Hide key press counts",langIcon:"🇬🇧",langLabel:"Switch to Russian",tooltipClick:"Click",tooltipSectionExpand:"Expand",tooltipSectionCollapse:"Collapse",tooltipSectionSolo:"Collapse all others",tooltipSectionToggleAll:"Expand / collapse all"},j="complexityFilterLang",K={en:_,ru:{title:"Сложность набора",btnClose:"Закрыть",tooltipView_full:"Переключиться на полный вид",tooltipView_summary:"Переключиться на краткий вид",tooltipView_minimal:"Переключиться на минимальный вид",tooltipThemeDark:"Переключиться на тёмную тему",tooltipThemeLight:"Переключиться на светлую тему",tierEasy:"Легко",tierMedium:"Средне",tierHard:"Сложно",metaAvg:"Ср. стоимость",metaChars:"Символов",metaHardZones:"Сложные зоны",metaLongWords:"Длинные слова",metaLayout:"Раскладка",metaDigitRow:"Цифровой ряд",handImbalanceHigh:"⚠ одна рука",handImbalanceMid:"⚠ доминирует рука",handImbalanceLow:"⚠ перекос",handImbalanceMinor:"неравномерно",penaltyBreakdown:"Штрафы",penaltySameFinger:"Один палец",penaltyOutward:"Внешний перекат",penaltyScissor:"Ножницы",penaltyRowJump:"Прыжок по ряду",penaltyShift:"Удержание Shift",penaltyOther:"База",hardestBigrams:"Сложные биграммы",worstZone:"Худший участок",fingerLoad:"Нагрузка на пальцы",hardestWords:"Сложные слова",handBalance:"Баланс рук",fingers:["Мизинец Л","Безымян Л","Средний Л","Указ+ Л","Указат Л","Указат П","Указ+ П","Средний П","Безымян П","Мизинец П"],tooltipAvg:"Средняя стоимость одного символа — чем ниже, тем легче набирать",tooltipChars:"Общее количество символов в тексте",tooltipHardZones:"Доля символов в сегментах высокой сложности",tooltipLongWords:"Доля слов, превышающих базовую длину — длинные слова быстрее утомляют пальцы",tooltipDigitRow:"Доля нажатий на цифровом ряду — самом неудобном для достижения",tooltipHandL:"Доля нажатий левой рукой",tooltipHandR:"Доля нажатий правой рукой",tooltipBigram:"Суммарный вес этой пары клавиш по всему тексту",tooltipTopWord:"Суммарная сложность набора слова — чем выше, тем труднее",tooltipLongWordText:"Длинное слово — применяется штраф за усталость после 8 символов",tooltipEasyText:"Легкая зона — комфортно набирать",tooltipMediumText:"Средняя зона — умеренная сложность набора",tooltipHardText:"Сложная зона — требует более сложных движений пальцев",tooltipWorstZone:"Худший участок — самый сложный для набора фрагмент текста",tooltipSameFingerL:"Этот символ участвует в биграмме одним пальцем (левая рука)",tooltipSameFingerR:"Этот символ участвует в биграмме одним пальцем (правая рука)",tooltipShifted:"Требует удержания Shift",tooltipPenalty_sameFinger:"Два подряд идущих символа нажаты одним пальцем",tooltipPenalty_outwardRoll:"Перекат в сторону мизинца — менее естественное движение, чем к указательному",tooltipPenalty_scissor:"Соседние пальцы одновременно охватывают 2+ ряда",tooltipPenalty_rowJump:"Большой вертикальный прыжок между рядами клавиатуры",tooltipPenalty_shiftHold:"Shift зажат той же рукой, что и набираемый символ",tooltipPenalty_other:"Базовая стоимость: позиция клавиши, нагрузка на палец, редкость символа",tooltipLang:"Переключить язык",tooltipLayout:"Переключить раскладку",tooltipShowKeyboard:"Показать раскладку",tooltipHideKeyboard:"Скрыть раскладку",tooltipKeyboardPin:"Закрепить — открывать автоматически",tooltipKeyboardUnpin:"Открепить — открывать вручную",alertLangIncompatible:"Этот текст несовместим с выбранным языком",tooltipKbModeHeat:"Переключиться на тепловую карту",tooltipKbModeZones:"Переключиться на зоны пальцев",tooltipKbCountOn:"Показать счётчики нажатий",tooltipKbCountOff:"Скрыть счётчики нажатий",langIcon:"🇷🇺",langLabel:"Переключить на английский",tooltipClick:"Клик",tooltipSectionExpand:"Развернуть",tooltipSectionCollapse:"Свернуть",tooltipSectionSolo:"Свернуть остальные",tooltipSectionToggleAll:"Развернуть / свернуть все"}},Z=()=>localStorage.getItem(j)??"en",P=()=>K[Z()]??_,V=(e,t)=>{e.setAttribute("data-lang",t),localStorage.setItem(j,t)};let W=null,J=null,q=null,D=!1,U=!1,Y=null;const X=(e,t)=>{if(!W)return;const a=window.innerWidth,o=window.innerHeight,n=W.offsetWidth,l=Math.min(Math.max(e+10,10),a-n-10),r=o-(t+18)-10,i=t-18-10,s=W.scrollHeight;let p,c;s<=r||r>=i?(c=r,p=t+18):(c=i,p=t-18-Math.min(s,i)),W.style.left=`${l}px`,W.style.top=`${Math.max(10,p)}px`,W.style.maxHeight=`${Math.max(0,c)}px`,W.style.overflowY=c<s?"auto":""},G=e=>W&&X(e.clientX,e.clientY);function Q(){D=!1,Y=null,clearTimeout(q),clearTimeout(J),J=setTimeout((()=>{W&&(W.style.opacity="0",U=!1,setTimeout((()=>{!D&&W&&(W.style.display="none",W.textContent="",document.removeEventListener("mousemove",G))}),50))}),100)}function ee(e,t,a="info",o=null){null!=t&&(e._tooltipContent=t,e._tooltipType=a,null!==o&&(e._tooltipDelay=o),Y===e&&D&&W&&(clearTimeout(q),W.innerHTML=ae(t),W.style.display="flex",W.style.opacity="1",U=!0),e._tooltipInitialized||(e._tooltipInitialized=!0,W||=(()=>{const e=document.createElement("div");return e.classList.add("custom-tooltip-popup"),e.style.display="none",e.style.opacity="0",document.body.appendChild(e),e})(),e.addEventListener("mouseenter",(t=>{if(D=!0,Y=e,clearTimeout(J),clearTimeout(q),W.innerHTML=ae(e._tooltipContent),W.style.display="flex",X(t.clientX,t.clientY),document.addEventListener("mousemove",G),U)W.style.opacity="1";else{const t=e._tooltipDelay??150;W.style.opacity="0",W.offsetHeight,q=setTimeout((()=>{W.style.opacity="1",U=!0}),t)}})),e.addEventListener("mouseleave",(()=>{Q(),document.removeEventListener("mousemove",G)})),e.addEventListener("wheel",(e=>{W&&"none"!==W.style.display&&(W.scrollHeight<=W.clientHeight||(e.preventDefault(),W.scrollTop+=e.deltaY))}),{passive:!1})))}function te(e,t,a="info"){e._tooltipInitialized?(e._tooltipContent=t,e._tooltipType=a,Y===e&&D&&W&&(W.innerHTML=ae(t),U||"stats"!==a||(clearTimeout(q),W.style.opacity="1",U=!0))):ee(e,t,a)}function ae(e){let t="";const a=/\[([^\]]+)\]([^\[]*)(?:\[\]([^\[]*))?/g;return e.split(/(## [^[]*)/g).forEach((e=>{if(e.startsWith("## ")){const a=e.slice(3).trim();t+=`<div class="tooltip-header">${a}</div>`}else{a.lastIndex=0;const o=[...e.matchAll(a)];o.length?o.forEach((e=>{const a=e[1],[o,...n]=e[2].trim().split("||").map((e=>e.trim()));t+=`\n            <div class="tooltip-item">\n              <span class="tooltip-action">${a}&nbsp;</span>\n              <span class="tooltip-message">${o}</span>\n            </div>\n            ${n.map((e=>`<div>${e}</div>`)).join("")}`})):e.trim()&&(t+=`\n          <div class="tooltip-item">\n            <span class="tooltip-message">${e.trim()}</span>\n          </div>`)}})),t}new MutationObserver((()=>{Y&&!document.contains(Y)&&Q()})).observe(document,{childList:!0,subtree:!0});const oe="complexityFilterSections",ne={balance:!0,penalties:!0,fingers:!0,bigrams:!0,words:!0},le=()=>{try{return{...ne,...JSON.parse(localStorage.getItem(oe))}}catch{return{...ne}}},re=e=>localStorage.setItem(oe,JSON.stringify(e)),ie=(e,t)=>{for(const[a,o]of Object.entries(t))e.querySelector(`[data-section="${a}"]`)?.toggleAttribute("data-collapsed",!o)},se=(e,t,a,o)=>{const n=document.createElement("button");n.className=`panel-btn ${e}`;for(const e of t)n.appendChild(S(e));const l=()=>te(n,a());return n.addEventListener("click",(e=>{o(e),l()})),n.addEventListener("mouseenter",l),ee(n,a(),"stats",0),n},pe="complexityFilterVocLang",ce="complexityFilterLayout",de=()=>{try{return JSON.parse(localStorage.getItem(pe))??{}}catch{return{}}},fe=()=>{try{return JSON.parse(localStorage.getItem(ce))??{}}catch{return{}}},me=e=>fe()[e]??null,ge="complexityKbPrefs",ue={open:!1,mode:"zones",count:"off"},ye=()=>{try{return{...ue,...JSON.parse(localStorage.getItem(ge))}}catch{return{...ue}}},he=e=>ye()[e],be=(e,t)=>{const a=ye();a[e]=t,localStorage.setItem(ge,JSON.stringify(a))},xe="kg-keyboard-panel",ke={0:{left:null,right:{label:"⌫",cls:"backspace"}},1:{left:{label:"Tab",cls:"tab"},right:null},2:{left:{label:"Caps",cls:"caps"},right:{label:"Enter",cls:"enter"}},3:{left:{label:"Shift",cls:"shift-l"},right:{label:"Shift",cls:"shift-r"}},bottom:[{label:"Ctrl",cls:"ctrl"},{label:"Win",cls:"win"},{label:"Alt",cls:"alt"},{label:"Space",cls:"space"},{label:"Alt",cls:"alt"},{label:"Win",cls:"win"},{label:"Menu",cls:"menu"},{label:"Ctrl",cls:"ctrl"}]},ve=(e,t)=>{const a=document.createElement(e);return t&&(a.className=t),a},we=(e,t,a,o,n)=>{const l=ve("div",`kg-key kg-key--f${t}`);l.dataset.finger=t,l.dataset.baseKey=e;const r=ve("span","kg-key-count"),i=a[e];if(i){const e=ve("span","kg-key-shift");e.textContent=i,l.appendChild(e),l.dataset.hasShift=""}const s=ve("span","kg-key-main");if(s.textContent=e===e.toLowerCase()?e.toUpperCase():e,o){const t=o.get(e)??0;r.textContent=t>0?t:""}if(n){const t=n.get(e)??0;t>0&&l.style.setProperty("--key-heat",Math.max(.12,t).toFixed(3))}return l.appendChild(r),l.appendChild(s),l},Le=(e,t)=>{const a=ve("div",`kg-key kg-key--special kg-key--${t}`),o=ve("span","kg-key-special-label");return o.textContent=e,a.appendChild(o),a},Ce=(e,t,a)=>{const o=l.find((a=>a.layoutLang===e&&a.layoutName===t))??l.find((t=>t.layoutLang===e));if(!o)return null;const{layout:n,shiftMap:r}=o,i=(e=>{const t={};for(const[a,o]of Object.entries(e))t[o]||(t[o]=a);return t})(r),s=(e=>{const t={0:[],1:[],2:[],3:[]};for(const[a,[o,n,l]]of Object.entries(e))t[n].push({ch:a,finger:o,pos:l});for(const e of[0,1,2,3])t[e].sort(((e,t)=>e.pos-t.pos));return t})(n),p=a?Math.max(0,...a.values()):0,c=a&&p>0?new Map([...a].map((([e,t])=>[e,t/p]))):null,d=ve("div","kg-keyboard");for(const e of[0,1,2,3]){const t=ve("div",`kg-kb-row kg-kb-row--${e}`),{left:o,right:n}=ke[e];o&&t.appendChild(Le(o.label,o.cls));for(const{ch:o,finger:n}of s[e])t.appendChild(we(o,n,i,a,c));n&&t.appendChild(Le(n.label,n.cls)),d.appendChild(t)}const f=ve("div","kg-kb-row kg-kb-row--bottom");for(const{label:e,cls:t}of ke.bottom)f.appendChild(Le(e,t));return d.appendChild(f),d.addEventListener("mousemove",(e=>{const t=e.target.closest(".kg-key[data-has-shift]");if(!t)return;const a=e.clientY-t.getBoundingClientRect().top<t.offsetHeight/2;t.toggleAttribute("data-count-bottom",a)})),d.addEventListener("mouseleave",(e=>{e.target.closest(".kg-key[data-has-shift]")?.removeAttribute("data-count-bottom")})),d},Re=(e,t)=>{e.dataset.kbMode=t},Se=(e,t)=>{e.dataset.kbCount=t},Me=()=>document.getElementById(xe),He=()=>Me()?.remove(),Ee=(e,t,a,o)=>{He();const n=ve("div");n.id=xe,n.dataset.complexityFilterTheme=e.dataset.complexityFilterTheme??"dark",Re(n,he("mode")),Se(n,he("count"));const l=Ce(t,a,o);if(!l)return;const r=ve("div","kg-kb-header"),i=ve("span","kg-kb-title");i.textContent=`${t} · ${a}`;const s=se("kg-kb-close",["close-line"],(()=>P().btnClose),He),p=ve("div","panel-btn-group");p.appendChild((e=>{const t=se("kg-kb-count-btn",["hashtag"],(()=>{const t=P();return`[${t.tooltipClick}]${"on"===e.dataset.kbCount?t.tooltipKbCountOff:t.tooltipKbCountOn}`}),(()=>{const a="on"===e.dataset.kbCount?"off":"on";Se(e,a),t.classList.toggle("panel-btn--active","on"===a),be("count",a)}));return t.classList.toggle("panel-btn--active","on"===he("count")),t})(n)),p.appendChild((e=>se("kg-kb-mode-btn",["fire-fill","contrast-fill"],(()=>{const t=P();return`[${t.tooltipClick}]${"heat"===e.dataset.kbMode?t.tooltipKbModeZones:t.tooltipKbModeHeat}`}),(()=>{const t="zones"===e.dataset.kbMode?"heat":"zones";Re(e,t),be("mode",t)})))(n)),p.appendChild(s),r.appendChild(i),r.appendChild(p),n.appendChild(r),n.appendChild(l),document.body.appendChild(n),E(n,r,"keyboardPanel");const c=new Map;for(const t of e.querySelectorAll(".panel-text span[data-key]"))for(const e of t.dataset.key.split(" "))c.has(e)||c.set(e,[]),c.get(e).push(t);const d=e=>e.target.closest(".kg-key:not(.kg-key--special)");let f=[];n.addEventListener("mouseover",(t=>{const a=d(t);if(a?.dataset.baseKey&&("heat"===n.dataset.kbMode||"on"===n.dataset.kbCount)){for(const e of f)e.classList.remove("kg-key-hl");f=c.get(a.dataset.baseKey)??[];for(const e of f)e.classList.add("kg-key-hl");e.dataset.activeKey=a.dataset.baseKey}})),n.addEventListener("mouseout",(t=>{const a=d(t);if(a?.dataset.baseKey&&!a.contains(t.relatedTarget)){for(const e of f)e.classList.remove("kg-key-hl");f=[],delete e.dataset.activeKey}}))},ze=(e,t,a,o)=>{const n=Me();if(!n)return;n.dataset.complexityFilterTheme=e.dataset.complexityFilterTheme??"dark";const l=n.querySelector(".kg-keyboard"),r=Ce(t,a,o);r&&(l?n.replaceChild(r,l):n.appendChild(r),n.querySelector(".kg-kb-title").textContent=`${t} · ${a}`)},Te="complexity-filter-panel",Fe=(e,t)=>{const a=document.createElement(e);return t&&(a.className=t),a},Oe=(e,t,a)=>{const o=Fe(e,t);return o.appendChild(document.createTextNode(a)),o},Ne=(e,...t)=>{for(const a of t)a&&e.appendChild(a);return e},Ie=(e,t,...a)=>{const o=a.filter(Boolean);if(!o.length)return null;const n=Fe("div","section-wrap");n.dataset.section=e;const l=Oe("div","section-header hotspot-label",t);l.addEventListener("click",(t=>{const a=l.closest(`#${Te}`);t.altKey?(e=>{const t=le(),a=!Object.values(t).some((e=>e));for(const e of Object.keys(t))t[e]=a;re(t),ie(e,t)})(a):t.ctrlKey?((e,t)=>{const a=le();for(const e of Object.keys(a))a[e]=e===t;re(a),ie(e,a)})(a,e):((e,t)=>{const a=le();a[t]=!a[t],re(a),ie(e,a)})(a,e),M(a)})),l.addEventListener("mouseenter",(()=>{const e=n.hasAttribute("data-collapsed"),t=P(),a=t.tooltipClick,o=[[a,e?t.tooltipSectionExpand:t.tooltipSectionCollapse],[`Ctrl + ${a}`,e?t.tooltipSectionSolo:null],[`Alt + ${a}`,t.tooltipSectionToggleAll]];te(l,o.filter((([,e])=>e)).map((([e,t])=>`[${e}]${t}`)).join(" "))})),ee(l,"","stats",200),n.appendChild(l);for(const e of o)n.appendChild(e);return n},Ae=[{max:35,cls:"easy",key:"tierEasy"},{max:65,cls:"medium",key:"tierMedium"},{max:1/0,cls:"hard",key:"tierHard"}],Be=e=>Ae.find((t=>e<t.max)),$e=e=>`var(--${Be(e).cls})`,_e=(e,t)=>t[Be(e).key],je=[{key:"sameFinger",strKey:"penaltySameFinger",color:"var(--penalty-same-finger)"},{key:"outwardRoll",strKey:"penaltyOutward",color:"var(--penalty-outward)"},{key:"scissor",strKey:"penaltyScissor",color:"var(--penalty-scissor)"},{key:"rowJump",strKey:"penaltyRowJump",color:"var(--penalty-row-jump)"},{key:"shiftHold",strKey:"penaltyShift",color:"var(--penalty-shift)"},{key:"other",strKey:"penaltyOther",color:"var(--penalty-other)"}],Ke=e=>se("panel-view",["eye-fill","eye-off-fill","eye-close-fill"],(()=>{const t=P(),a={full:"summary",summary:"minimal",minimal:"full"}[e.dataset.view??"full"];return`[${t.tooltipClick}]${t["tooltipView_"+a]}`}),(()=>{(e=>{const t=e.getAttribute("data-view")??"full",a=A[(A.indexOf(t)+1)%A.length];B(e,a)})(e),M(e)})),Ze=e=>se("panel-theme",["sun-fill","moon-fill"],(()=>{const t=P(),a=e.dataset.complexityFilterTheme??"dark";return`[${t.tooltipClick}]${"dark"===a?t.tooltipThemeLight:t.tooltipThemeDark}`}),(()=>{(e=>{const t=e.getAttribute("data-complexity-filter-theme")===T?F:T;O(e,t);const a=e.querySelector(".panel-theme"),o=t===F?0:1,n=t===F?"spin":"swing",l=a.querySelectorAll(".panel-icon")[o];l.classList.remove("spin","swing"),l.offsetWidth,l.classList.add(n),l.addEventListener("animationend",(()=>l.classList.remove(n)),{once:!0})})(e);const{_kgResult:t}=e;ze(e,t?.layoutLang,t?.layoutName,t?.keyCounts)})),Pe=e=>se("panel-lang",["ruFlag","enFlag"],(()=>{const e=P();return`[${e.tooltipClick}]${e.langLabel}`}),(()=>{(e=>{const t="en"===Z()?"ru":"en";V(e,t)})(e);const{_kgResult:t,_kgVocId:a,_kgOnLang:o,_kgOnLayout:n}=e;t&&De(t,a,o,n)})),Ve=(e,t,a)=>{const o=Fe("div","panel-header"),n=Je("header-score");n.style.color=$e(a);const l=se("panel-close",["close-line"],(()=>P().btnClose),(()=>{He(),e.remove()})),r=Fe("div","panel-btn-group");return Ne(r,Ke(e),Ze(e),Pe(e),(e=>{const t=se("panel-keyboard",["keyboard-fill"],(()=>{const e=P();return[`[${e.tooltipClick}]${Me()?e.tooltipHideKeyboard:e.tooltipShowKeyboard}`,`[Shift + ${e.tooltipClick}]${he("open")?e.tooltipKeyboardUnpin:e.tooltipKeyboardPin}`].join(" ")}),(a=>{const{_kgResult:o}=e;o&&(Me()?(He(),a.shiftKey&&(be("open",!1),t.classList.remove("panel-btn--active"))):(Ee(e,o.layoutLang,o.layoutName,o.keyCounts),a.shiftKey&&(be("open",!0),t.classList.add("panel-btn--active"))))}));return t})(e),l),Ne(o,Oe("span","panel-logo","KG"),Oe("span","panel-title",t.title),n,r),{header:o,miniScore:n}},We={easy:"var(--easy)",medium:"var(--medium)",hard:"var(--hard)"},Je=e=>Fe("div",e),qe=(e,t)=>{const a=performance.now(),o=String(t).split(""),n=t=>{const l=Math.min(1,(t-a)/600),r=1-(1-l)*(1-l),i=o.map((e=>String(Math.round(r*Number(e))))).join("");e.textContent=i,l<1&&requestAnimationFrame(n)};requestAnimationFrame(n)},De=(e,t=null,a=null,o=null)=>{const n=document.getElementById(Te);n?.remove();const l=P(),{score:r,handBalance:i,penaltyBreakdown:s,fingerLoad:p,hardestBigrams:c,hardestWords:d}=e,f=Fe("div");f.id=Te,f._kgResult=e,f._kgVocId=t,f._kgOnLang=a,f._kgOnLayout=o;const{header:m,miniScore:g}=Ve(f,l,r);f.appendChild(m),f.appendChild((({chars:e,segments:t})=>{const a=e.length||1,o=[];for(const{level:e,start:n,end:l}of t){const t=We[e]??"var(--border)",r=(n/a*100).toFixed(2)+"%",i=((l+1)/a*100).toFixed(2)+"%";o.push(`${t} ${r}`,`${t} ${i}`)}const n=Fe("div","difficulty-bar");return n.style.background=`linear-gradient(to right, ${o.join(", ")})`,n})(e));const u=Fe("div","panel-summary");Ne(u,((e,t,a,o,n)=>{const{score:l,avg:r,length:i,hardPct:s,longWordPct:p,digitRowPct:c,layoutLang:d,layoutName:f}=t,m=$e(l),g=Fe("div","stats"),u=Fe("div","score-summary");for(const[e,t]of[["score-value",String(l)],["score-label",_e(l,a)]]){const a=Oe("div",e,t);a.style.color=m,u.appendChild(a)}const y={RU:"ruFlag",EN:"enFlag"},h=Fe("div","meta-info"),b=[[a.metaAvg,String(r),"avg",a.tooltipAvg],[a.metaChars,i.toLocaleString(),null,a.tooltipChars],[a.metaHardZones,s+"%","hard",a.tooltipHardZones],[a.metaLongWords,p+"%","longword",a.tooltipLongWords],[a.metaLayout,f,"layout",null],[a.metaDigitRow,c+"%","digitrow",a.tooltipDigitRow]];for(const[e,t,a,l]of b){const r=Fe("div","meta-row");r.appendChild(Oe("span","meta-key",e));const i=Oe("span","meta-value",t);if("avg"===a&&(i.style.color=m),"hard"===a&&s>0&&(i.style.color="var(--hard)"),"longword"===a&&p>0&&(i.style.color="var(--medium)"),"digitrow"===a&&c>10&&(i.style.color="var(--medium)"),"layout"===a){const e=y[d];e&&i.prepend(S(e)),(o||n)&&(i.classList.add("meta-value-btn"),i.addEventListener("click",(e=>{e.shiftKey?n?.(d,f):o?.(d,f)})),i.addEventListener("mouseenter",(()=>{const e=P(),t=[`[${d} | ${f}]`,`[${e.tooltipClick}]${e.tooltipLang}`,n?`[Shift + ${e.tooltipClick}]${e.tooltipLayout}`:null];te(i,t.filter(Boolean).join(" "))})),ee(i,"","stats",0))}r.appendChild(i),l&&ee(r,l,"stats",0),h.appendChild(r)}return Ne(g,u,h),g})(0,e,l,a,o),(e=>{const t=Fe("div","progress-track"),a=Fe("div","progress-fill");return a.style.width=e+"%",a.style.background=$e(e),t.appendChild(a),t})(r),(e=>{const t=Fe("div","score-legend");for(const{cls:a,key:o}of Ae){const n=Oe("span","legend-item",e[o]),l=Fe("span","legend-dot");l.style.background=`var(--${a})`,n.prepend(l),t.appendChild(n)}return t})(l)),f.appendChild(u);const y=Fe("div","panel-detail");Ne(y,Ie("balance",l.handBalance,(({left:e,right:t,imbalance:a},o)=>{const n=e+t,l=n>0?Math.round(e/n*100):50,r=100-l,i=Fe("div","hand-bar-wrap"),s=Fe("div","hand-bar-label"),p=Oe("span","hand-label hand-l",`L ${l}%`),c=Oe("span","hand-label hand-r",`${r}% R`),d=a>.85?o.handImbalanceHigh:a>.55?o.handImbalanceMid:a>.3?o.handImbalanceLow:a>.15?o.handImbalanceMinor:null;s.appendChild(p),d&&s.appendChild(Oe("span","hand-imbalance",d)),s.appendChild(c),i.appendChild(s);const f=Fe("div","hand-bar-track"),m=Fe("div","hand-seg hand-seg-l"),g=Fe("div","hand-seg hand-seg-r");m.style.width=l+"%",g.style.width=r+"%",ee(m,o.tooltipHandL,"stats",0),ee(g,o.tooltipHandR,"stats",0);const u=()=>f.closest("#complexity-filter-panel");return f.addEventListener("mousemove",(e=>{u().dataset.activeHand=e.offsetX/f.offsetWidth<l/100?"L":"R"})),f.addEventListener("mouseleave",(()=>{delete u().dataset.activeHand})),Ne(f,m,g),i.appendChild(f),i})(i,l)),Ie("penalties",l.penaltyBreakdown,((e,t)=>{if(!e)return null;const a=Fe("div","penalty-wrap"),o=Fe("div","penalty-track");for(const{key:t,color:a}of je){const{pct:n=0}=e[t]??{};if(0===n)continue;const l=Fe("div","penalty-seg");l.style.width=n+"%",l.style.background=a,o.appendChild(l)}a.appendChild(o);const n=Fe("div","penalty-legend");for(const{key:a,strKey:o,color:l}of je){const{pct:r=0,count:i}=e[a]??{};if(0===r)continue;const s=Fe("div","penalty-row"),p=Fe("span","legend-dot");p.style.background=l;const c=Oe("span","penalty-pct",r+"%");c.style.color=l;const d=null!=i&&i>0?Oe("span","penalty-count",i):null;Ne(s,p,c,d,Oe("span","penalty-key",t[o]));const f="tooltipPenalty_"+a;t[f]&&ee(s,t[f],"stats",0);const m=()=>s.closest("#complexity-filter-panel");s.addEventListener("mouseenter",(()=>{m().dataset.activePenalty=a})),s.addEventListener("mouseleave",(()=>{delete m().dataset.activePenalty})),n.appendChild(s)}return a.appendChild(n),a})(s,l)),Ie("fingers",l.fingerLoad,((e,t)=>{const a=Fe("div","finger-load-wrap"),o=Fe("div","finger-load-bars"),n=Math.max(...e,1);for(let a=0;a<e.length;a++){const l=e[a],r=a<5?"var(--hand-l)":"var(--hand-r)",i=Fe("div","fl-item"),s=Fe("div","fl-bar-wrap");s.dataset.finger=a,s.addEventListener("mouseenter",(()=>{o.classList.add("fl-active"),o.dataset.activeFinger=a,s.closest("#complexity-filter-panel").dataset.activeFinger=a})),s.addEventListener("mouseleave",(()=>{o.classList.remove("fl-active"),delete o.dataset.activeFinger,delete s.closest("#complexity-filter-panel").dataset.activeFinger}));const p=Fe("div","fl-bar-fill");p.style.height=Math.round(l/n*100)+"%",p.style.background=r,s.appendChild(p),ee(s,t.fingers[a]+": "+l+"%","stats",0),Ne(i,s,Oe("span","fl-label",t.fingers[a])),o.appendChild(i)}return a.appendChild(o),a})(p,l)),Ie("bigrams",l.hardestBigrams,((e,t)=>{if(!e?.length)return null;const a=Fe("div","hotspot-section"),o=Fe("div","hotspot-list");for(const{pair:a,cost:n}of e){const e=Fe("div","hotspot-chip");Ne(e,Oe("span","hotspot-ch",a),Oe("span","hotspot-cost",n)),ee(e,t.tooltipBigram,"stats",0),o.appendChild(e)}return a.appendChild(o),a})(c,l)),Ie("words",l.hardestWords,((e,t)=>{if(!e?.length)return null;const a=Fe("div","hotspot-section"),o=Fe("div","hotspot-list");for(const{word:a,cost:n}of e){const e=Fe("div","hotspot-chip");Ne(e,Oe("span","hotspot-ch",a),Oe("span","hotspot-cost",n)),ee(e,t.tooltipTopWord,"stats",0),o.appendChild(e)}return a.appendChild(o),a})(d,l))),f.appendChild(y),f.appendChild((({chars:e,segments:t,longWordChars:a,worstZone:o,sameFingerChars:n,shiftedChars:l,charFingers:r,charBases:i,outwardRollChars:s,scissorChars:p,rowJumpChars:c},d)=>{const f=Fe("div","panel-text"),m={sameFinger:n,shiftHold:l,outwardRoll:s,scissor:p,rowJump:c},g=["sameFinger","shiftHold","outwardRoll","scissor","rowJump"];for(const s of t){const{level:t,start:p,end:c}=s,u=o&&s===o;for(let o=p;o<=c;o++){const s=Oe("span",t,e[o]),p=a?.has(o)??!1,c=n?.get(o),y=r?.[o]??-1,h=l?.has(o)??!1;p&&s.classList.add("long-word"),u&&s.classList.add("worst-zone"),"L"===c&&s.classList.add("same-finger-l"),"R"===c&&s.classList.add("same-finger-r"),h&&s.classList.add("shifted-char"),y>=0&&(s.dataset.finger=y,s.dataset.hand=y<5?"L":"R");const b=i?.[o];null!=b&&(s.dataset.key=b);const x=g.filter((e=>m[e]?.has(o)));!x.length&&y>=0&&x.push("other"),s.dataset.penalty=x.join(" ");const k=p?d.tooltipLongWordText:u?d.tooltipWorstZone:"L"===c?d.tooltipSameFingerL:"R"===c?d.tooltipSameFingerR:{hard:d.tooltipHardText,medium:d.tooltipMediumText,easy:d.tooltipEasyText}[t];k&&!h&&ee(s,k,"stats",0),f.appendChild(s)}}return f})(e,l)),N(f),$(f),(e=>{V(e,Z())})(f),(e=>{ie(e,le())})(f),n?(f.classList.add("no-fade"),ze(f,e.layoutLang,e.layoutName,e.keyCounts)):he("open")&&(Ee(f,e.layoutLang,e.layoutName,e.keyCounts),f.querySelector(".panel-keyboard")?.classList.add("panel-btn--active")),document.body.appendChild(f),E(f,f.querySelector(".panel-header"),"complexityPanel");const h=f.querySelector(".score-value");h&&qe(h,r),qe(g,r)},Ue={error:"var(--clr-red)",warning:"var(--clr-yellow)",success:"var(--clr-green)",info:"var(--clr-blue)"},Ye=new URL(location.href).searchParams.get("gmid")??/\/g\/(?<id>\d+)/.exec(location.pathname)?.groups.id;Ye&&(async e=>{const t=new URLSearchParams({need_text:"1"}),a=await fetch(`${location.origin}/g/${e}.info`,{method:"POST",body:t}),o=await a.json();return{text:o.text?.text??null,vocId:o.params?.voc?.id??null}})(Ye).then((({text:e,vocId:t})=>{if(!e)return void console.warn("[KG] no text in response");const a=(a,l)=>{const r=p(e,a,l);r?(t&&((e,t)=>{const a=de();a[e]=t,localStorage.setItem(pe,JSON.stringify(a))})(t,r.layoutLang),((e,t)=>{const a=fe();a[e]=t,localStorage.setItem(ce,JSON.stringify(a))})(r.layoutLang,r.layoutName),De(r,t,o,n)):((e,t,a="info")=>{if(!t)return;const o=e??document.getElementById("complexity-filter-panel");if(!o)return;let n=o.querySelector(".kg-notification-stack");n||(n=document.createElement("div"),n.className="kg-notification-stack",o.appendChild(n));if(Array.from(n.children).some((e=>e.textContent===t)))return;const l=document.createElement("div");l.className="kg-notification",l.style.setProperty("--notification-color",Ue[a]??Ue.info),l.appendChild(document.createTextNode(t)),n.appendChild(l),requestAnimationFrame((()=>l.classList.add("in"))),setTimeout((()=>{l.classList.replace("in","out"),setTimeout((()=>l.remove()),350)}),3e3)})(null,P().alertLangIncompatible,"error")},o=e=>{const t=(e=>{const t=[...new Set(l.map((e=>e.layoutLang)))];return t[(t.indexOf(e)+1)%t.length]})(e);a(t,me(t))},n=(e,t)=>a(e,((e,t)=>{const a=l.filter((t=>t.layoutLang===e)),o=a.findIndex((e=>e.layoutName===t));return a[(o+1)%a.length].layoutName})(e,t)),i=t?(e=>de()[e]??null)(t):null,s=i??(e=>r(e).layoutLang)(e),c=me(s),d=p(e,s,c);d?De(d,t,o,n):console.warn("[KG] complexity analysis returned null")})).catch((e=>console.error("[KG] error ->",e.message)))})()})();