// ==UserScript== // @name KG_Chat_Empowerment // @namespace klavogonki // @version 1.3.6 // @description Enhance the chat abilities // @author Patcher // @match *://klavogonki.ru/* // @icon https://www.google.com/s2/favicons?sz=64&domain=klavogonki.ru // @grant none // ==/UserScript== (()=>{"use strict";var e={11:(e,t,n)=>{n.d(t,{A:()=>i});var o=n(601),s=n.n(o),r=n(314),a=n.n(r)()(s());a.push([e.id,'.tracked-marker{display:inline-flex;width:2px;height:10px;border-radius:1px !important}.empowerment-button{display:flex;justify-content:center;align-items:center;width:48px;height:48px;cursor:pointer;background-color:#212226;border:1px solid #45474b}.previous-message,.focused-message{background-color:hsla(60,80%,60%,.05) !important;border:1px solid hsla(60,80%,60%,.1) !important;border-radius:.2em !important}.popup-panel .fetched-users,.popup-panel .messages-container,.popup-panel .chat-logs-container,.popup-panel .active-users,.popup-panel .settings-content-container{scrollbar-width:thin !important;scrollbar-color:#2f2f2f #1b1b1b}.popup-panel .fetched-users::-webkit-scrollbar,.popup-panel .messages-container::-webkit-scrollbar,.popup-panel .chat-logs-container::-webkit-scrollbar,.popup-panel .active-users::-webkit-scrollbar,.popup-panel .settings-content-container::-webkit-scrollbar{width:6px;background:#1b1b1b}.popup-panel .fetched-users::-webkit-scrollbar-thumb,.popup-panel .messages-container::-webkit-scrollbar-thumb,.popup-panel .chat-logs-container::-webkit-scrollbar-thumb,.popup-panel .active-users::-webkit-scrollbar-thumb,.popup-panel .settings-content-container::-webkit-scrollbar-thumb{background:#2f2f2f}.popup-panel .fetched-users::-webkit-scrollbar-thumb:hover,.popup-panel .messages-container::-webkit-scrollbar-thumb:hover,.popup-panel .chat-logs-container::-webkit-scrollbar-thumb:hover,.popup-panel .active-users::-webkit-scrollbar-thumb:hover,.popup-panel .settings-content-container::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.popup-panel .hidden-message,.popup-panel .hidden-date{display:none !important}.popup-panel .input-error{transition:background-color 300ms ease-in-out;background-color:hsl(0,40%,30%) !important;color:hsl(0,40%,80%) !important;border:1px solid hsl(0,40%,40%) !important}.popup-panel .input-warning{transition:background-color 300ms ease-in-out;background-color:hsl(60,40%,30%) !important;color:hsl(60,40%,80%) !important;border:1px solid hsl(60,40%,40%) !important}.popup-panel .date-item{position:relative;font:1em Montserrat,sans-serif;color:#deb887;background-color:rgba(222,184,135,.1);width:fit-content;margin:2em 1em 1em;padding:.4em .8em;text-align:center;border-radius:.4em !important;left:50%;transform:translateX(-50%)}.popup-panel .search-messages-info,.popup-panel .search-results-info,.popup-panel .search-messages-date,.popup-panel .no-messages-info,.popup-panel .error-message-info{padding:.5em;border-radius:.4em !important;width:fit-content;margin:.5em;grid-column:1/-1}.popup-panel .search-messages-info,.popup-panel .search-results-info{color:hsl(80,60%,70%);background:hsla(80,60%,70%,.1)}.popup-panel .search-messages-date{color:hsl(40,60%,70%);background:hsla(40,60%,70%,.1)}.popup-panel .no-messages-info,.popup-panel .error-message-info{color:hsl(0,60%,70%);background:hsla(0,60%,70%,.1)}.popup-panel .parse-match-message,.popup-panel .search-match-username,.popup-panel .search-match-message{text-decoration:underline}.popup-panel .parse-match-message{color:hsl(120,75%,75%)}.popup-panel .search-match-message{color:hsl(30,75%,75%)}.length-field-popup{position:absolute;font:bold 12px Montserrat;bottom:40px;transition:left 100ms ease-out;height:20px;display:flex;align-items:center;justify-content:center;padding:2px 4px;margin:2px;opacity:0;border:none !important}.bounce-in{animation:bounceIn 500ms forwards}@keyframes bounceIn{0%{transform:translateY(0);opacity:0}50%{transform:translateY(-10px);opacity:1}100%{transform:translateY(0);opacity:1}}.bounce-out{animation:bounceOut 500ms forwards}@keyframes bounceOut{0%{transform:translateY(0);opacity:1}50%{transform:translateY(-10px);opacity:1}100%{transform:translateY(0);opacity:0}}.userlist .avatar,.user-item .avatar{width:24px;height:24px;display:inline-flex}.userlist .avatar img,.user-item .avatar img{border-radius:.2em !important;transform-origin:left;transition:transform .15s}.userlist .avatar img:hover,.user-item .avatar img:hover{transform:scale(2);z-index:2}.chat-logs-panel .message-text a,.cached-messages-panel .message-text a{color:#deb887 !important;transition:color .15s ease-in-out}.chat-logs-panel .message-text a:hover,.cached-messages-panel .message-text a:hover{color:#fafad2 !important}.empowerment-panel{position:fixed;width:48px;top:200px;right:15px;display:flex;flex-direction:column;z-index:1000;gap:.2em;align-items:start}.empowerment-panel .empowerment-panel-move-handle{display:flex;justify-content:center;align-items:center;opacity:0;background-color:rgba(0,0,0,.2);border-radius:.2em !important;width:20px;height:20px;cursor:pointer;transition:opacity .2s,background-color .2s;pointer-events:auto}.empowerment-panel:hover .empowerment-panel-move-handle,.empowerment-panel .empowerment-panel-move-handle:focus,.empowerment-panel .empowerment-panel-move-handle:hover{opacity:1}.participant-count{filter:grayscale(100%);transition:.2s ease-in-out;font-family:"Orbitron",sans-serif;font-size:24px;color:#83cf40;background-color:#2b4317;width:48px;height:48px;display:flex;justify-content:center;align-items:center;border:1px solid #4b7328;cursor:default}.pulse-effect{animation:pulse 500ms ease-out}@keyframes pulse{0%{filter:brightness(1)}50%{filter:brightness(1.5)}100%{filter:brightness(1)}}.shake-effect{animation:shake 500ms cubic-bezier(0.36, 0.07, 0.19, 0.97) both}@keyframes shake{0%{transform:translateX(0)}10%{transform:translateX(-4px)}20%{transform:translateX(6px)}30%{transform:translateX(-8px)}40%{transform:translateX(8px)}50%{transform:translateX(-6px)}60%{transform:translateX(5px)}70%{transform:translateX(-3px)}80%{transform:translateX(2px)}90%{transform:translateX(-1px)}100%{transform:translateX(0)}}.custom-tooltip-popup{position:fixed;background:#161616;color:#dedede;padding:.5em;z-index:1200;font-size:.9em;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-action{font-weight:500 !important;color:hsl(100,50%,50%) !important}.static-chat-notification{cursor:default;white-space:nowrap;padding:8px;display:inline-flex;flex:0 auto;justify-content:center;margin:4px;font-size:1em;align-items:center;border-radius:4px !important}.static-chat-notification.dimmed{opacity:.3;filter:grayscale(0.5)}.dynamic-chat-notifications-container{z-index:1000;width:0;position:fixed;display:flex;flex-direction:column;top:0;bottom:0;left:0;right:0;padding-top:160px}.dynamic-chat-notification{cursor:default;white-space:nowrap;position:relative;align-items:center;width:fit-content;display:flex;margin-bottom:.2em;padding:8px 16px 8px 12px;border-radius:0 4px 4px 0 !important;left:0;transform:translateX(-100%);opacity:1;transition:transform .3s cubic-bezier(0.83, 0, 0.17, 1),opacity .3s cubic-bezier(0.83, 0, 0.17, 1)}.user-enter{color:hsl(100,50%,50%) !important;background-color:hsl(100,50%,10%) !important;border:1px solid hsl(100,50%,25%) !important}.user-left{color:hsl(0,50%,70%) !important;background-color:hsl(0,50%,15%) !important;border:1px solid #933 !important}.clickable-thumbnail{display:flex !important;opacity:1;transition:opacity .15s ease-in-out;border:none !important;max-width:150px;max-height:150px;cursor:pointer;background-color:rgba(0,0,0,0);margin:6px;overflow:hidden !important}.clickable-thumbnail img{max-height:100%;max-width:100%;background-color:rgba(0,0,0,0);object-fit:contain}.clickable-thumbnail:hover{opacity:.8}.scaled-thumbnail{top:50%;left:50%;transform-origin:center center;transform:translate(-50%, -50%) scale(1);position:fixed;opacity:0;z-index:1000;transform-origin:center center;max-height:90vh;max-width:90vw;cursor:pointer;border-radius:.6em !important;box-shadow:0 4px 6px rgba(0,0,0,.3),0 1px 3px rgba(0,0,0,.28) !important}.video-wrapper{display:flex;flex-direction:column}.video-wrapper .processed-video{margin-bottom:.2em !important}.video-wrapper .youtube-info{display:flex;flex-direction:column;margin-bottom:.2em;font-family:"Montserrat",sans-serift;font-size:.9em;color:#8ede87;font-weight:500;white-space:break-spaces}.video-container,.youtube-thumb{border-radius:.4em !important;display:flex;border:none;height:200px !important;width:356px !important}.youtube-thumb{cursor:pointer !important;object-fit:cover !important}.dimming-background{background:#000;top:0;left:0;right:0;bottom:0;position:fixed;opacity:0;z-index:998}.profile-iframe-container{opacity:0;border:none;display:flex;position:fixed;z-index:1001;width:1080px !important;min-width:1080px !important;height:80vh;top:48.5vh;left:50vw;transform:translate(-50%, -50%);box-shadow:0 4px 6px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.08) !important;border-radius:.6em !important}.scroll-buttons-container{display:flex;justify-content:center;grid-area:scroll;flex-direction:column;height:calc(100% - 1em);padding:1em}.scroll-buttons-container .scroll-button{margin:.25em 0;background-color:rgba(222,222,222,.1)}.large-button{width:48px;height:48px;display:flex;justify-content:center;align-items:center;cursor:pointer;border-radius:.2em !important;filter:brightness(1);transition:filter .3s ease,opacity .3s ease}.large-button:hover{filter:brightness(0.8)}.panel-control-buttons{display:flex}.panel-control-buttons>div:not(:last-child){margin-right:.5em}.panel-header-parse-button{background-color:hsl(150,40%,25%)}.panel-header-clear-button{background-color:brown}.panel-header-close-button{background-color:#556b2f}.panel-header-save-button{display:none;opacity:0;visibility:hidden;background-color:#2f6b63}.panel-header-import-button{background-color:#502f6b}.panel-header-export-button{background-color:#2f4c6b}.panel-header-copy-button,.panel-header-date-button{background-color:#4682b4}.panel-header-toggle-button{background-color:#144e9d}.panel-header-toggle-media-messages-button{background-color:#2f4f4f !important}.panel-header-toggle-media-messages-button svg{stroke:#71c4c4 !important}.panel-header-toggle-media-messages-button.active{background-color:#71c4c4 !important}.panel-header-toggle-media-messages-button.active svg{stroke:#2f4f4f !important}.panel-header-toggle-mention-messages-button{background-color:#8b4513 !important}.panel-header-toggle-mention-messages-button svg{stroke:#ffa07a !important}.panel-header-toggle-mention-messages-button.active{background-color:#ffa07a !important}.panel-header-toggle-mention-messages-button.active svg{stroke:#8b4513 !important}.panel-header-one-day-back-button,.panel-header-one-day-forward-button{background-color:#008b8b}.panel-header-shuffle-button{background-color:hsl(250,40%,40%)}.panel-header-shuffle-button.today{background-color:hsl(50,100%,15%)}#chat-general .userlist-content{opacity:0}#chat-general .smile-tab{position:relative;z-index:1}.chat-user-list{display:flex;flex-direction:column;position:absolute;top:20px;padding-top:8px;width:200px;height:calc(100% - 35px) !important;overflow-y:auto;overflow-x:hidden}.chat-user-list [class^=rank-group]{display:flex;flex-direction:column}.chat-user-list [class^=user]{display:inline-flex;margin:2px 0}.chat-user-list .name{text-decoration:none;display:inline-flex;width:auto;height:24px;line-height:24px;padding:0 8px;max-width:124px;overflow:hidden;text-overflow:ellipsis}.chat-user-list .name:hover{text-decoration:underline}.chat-user-list .profile,.chat-user-list .tracked,.chat-user-list .ignored,.chat-user-list .moderator{display:inline-flex;width:24px;height:24px;justify-content:center;align-items:center}.mention{display:inline-flex;color:#83cf40;font-family:Roboto Mono,monospace;font-weight:bold}.popup-messages-container{display:flex;flex-direction:column;justify-content:flex-end;align-items:start;user-select:none;pointer-events:none;position:fixed;left:0;right:0;top:50px;bottom:0}.popup-chat-message{display:flex;align-items:center;background-color:hsl(100,50%,10%);position:relative;max-width:70vw;border-radius:.2em !important;color:hsl(100,50%,50%);border:1px solid hsl(100,50%,25%);padding:4px;margin:6px 15vw;opacity:0;transform:translateY(20px);transition:opacity .3s ease-in-out,transform .3s ease-in-out;animation:fadeIn .3s ease-in-out forwards}.popup-chat-message>div{padding:2px;display:inline-flex;flex-wrap:wrap;font-family:"Montserrat",sans-serif}.popup-chat-message .time,.popup-chat-message .time-icon{opacity:.7}.popup-chat-message.fade-out{animation:fadeOut .3s ease-in-out forwards}@media(max-width: 1000px){.popup-chat-message{flex-wrap:wrap;align-items:flex-start}.popup-chat-message .message{flex-basis:100%;order:1}}@keyframes fadeIn{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeOut{from{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-20px)}}.voice-settings{position:absolute;top:65px;right:70px;opacity:0;transition:opacity .3s ease;font-family:Orbitron,sans-serif}.voice-settings .voice-value-info{display:flex;width:100%;justify-content:center;margin-bottom:6px}.voice-settings .voice-speed{color:hsl(100,50%,50%)}.voice-settings .voice-speed-progress{display:block;width:120px;height:12px;background-color:hsl(90,60%,30%)}.voice-settings .voice-speed-progress .voice-speed-progress-fill{display:block;height:100%;background-color:hsl(90,60%,50%)}.voice-settings .voice-pitch{color:#3cc}.voice-settings .voice-pitch-progress{display:block;width:120px;height:12px;background-color:hsl(180,60%,30%)}.voice-settings .voice-pitch-progress .voice-pitch-progress-fill{display:block;height:100%;background-color:#3cc}@media(max-width: 991px){.scroll-buttons-container{position:absolute !important;right:.5em !important;justify-content:end !important}}@media(max-width: 630px){.scroll-buttons-container{display:none !important}}',""]);const i=a},56:(e,t,n)=>{e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},72:e=>{var t=[];function n(e){for(var n=-1,o=0;o{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))}}},314:e=>{e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",o=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),o&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),o&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,o,s,r){"string"==typeof e&&(e=[[null,e,void 0]]);var a={};if(o)for(var i=0;i0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=r),n&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=n):d[2]=n),s&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=s):d[4]="".concat(s)),t.push(d))}},t}},324:(e,t,n)=>{n.d(t,{A:()=>i});var o=n(601),s=n.n(o),r=n(314),a=n.n(r)()(s());a.push([e.id,'.toggle-button-hidden{background-color:hsl(0,20%,10%);color:hsl(0,50%,50%);border:1px solid hsl(0,50%,50%)}.toggle-button-show{background-color:hsl(90,20%,10%);color:hsl(90,50%,50%);border:1px solid hsl(90,50%,50%)}.toggle-button-hide{background-color:hsl(50,20%,10%);color:hsl(50,50%,50%);border:1px solid hsl(50,50%,50%)}.delete-btn{z-index:999;padding:8px 16px;transition:all .3s;cursor:pointer;filter:brightness(1);border-radius:.2em !important}.delete-btn.message-mode{background-color:hsl(0,50%,20%);color:hsl(0,60%,70%);border:1px solid hsl(0,50%,35%)}.delete-btn.username-mode{background-color:hsl(145,50%,20%);color:hsl(145,60%,70%);border:1px solid hsl(145,50%,35%)}.delete-btn.time-mode{background-color:hsl(200,50%,20%);color:hsl(200,60%,70%);border:1px solid hsl(200,50%,35%)}.delete-btn:hover{filter:brightness(1.5)}.selected-message{background-clip:padding-box !important}.selected-message.message-mode{background-color:hsla(0,50%,50%,.2) !important;box-shadow:inset 0px 0px 0px 1px hsla(0,50%,50%,.4) !important}.selected-message.username-mode{background-color:hsla(145,50%,30%,.2) !important;box-shadow:inset 0px 0px 0px 1px hsla(145,50%,50%,.4) !important}.selected-message.time-mode{background-color:hsla(200,50%,30%,.2) !important;box-shadow:inset 0px 0px 0px 1px hsla(200,50%,50%,.4) !important}.shown-message{background-color:hsla(30,60%,30%,.2) !important;box-shadow:inset 0px 0px 0px 1px hsla(30,60%,50%,.4) !important;background-clip:padding-box !important}.hidden-message{display:none}.toggle-button{font:bold .9em "Montserrat",sans-serif;position:absolute;top:0;right:2em;padding:8px 16px;transition:filter .3s;border-radius:0 0 .2em .2em !important;border-top:none;min-width:4em}.toggle-button.toggle-hidden{background:linear-gradient(to top, hsl(0, 50%, 20%), hsl(0, 50%, 25%));color:hsl(0,60%,70%);border-left:1px solid hsl(0,50%,35%);border-right:1px solid hsl(0,50%,35%);border-bottom:1px solid hsl(0,50%,35%)}.toggle-button.toggle-shown{background:linear-gradient(to top, hsl(30, 50%, 20%), hsl(30, 50%, 25%));color:hsl(30,60%,70%);border-left:1px solid hsl(30,50%,35%);border-right:1px solid hsl(30,50%,35%);border-bottom:1px solid hsl(30,50%,35%)}.toggle-button:hover{filter:brightness(1.5)}',""]);const i=a},336:(e,t,n)=>{n.d(t,{A:()=>i});var o=n(601),s=n.n(o),r=n(314),a=n.n(r)()(s());a.push([e.id,'.messages-parser-date-indicator{transition:.2s ease-in-out;font-family:"Montserrat",sans-serif;font-size:1.5em;font-weight:500;font-variant-numeric:tabular-nums;padding:8px 12px;min-width:60px;display:flex;justify-content:center;align-items:center;cursor:default;border-radius:.2em !important}.messages-parser-progress-container{position:fixed;display:flex;flex-direction:column;top:50px;right:5px;gap:10px;user-select:none;pointer-events:none;z-index:3000;background:none;background-color:rgba(0,0,0,.5);padding:1em;border-radius:.5em !important}.messages-parser-date-indicator{color:hsl(88,50%,55%);background-color:hsl(88,40%,20%);border:1px solid hsl(88,45%,35%);min-width:120px;justify-content:flex-start}.messages-parser-progress-bar{height:18px;width:100%;background:hsl(50,0%,15%);border:1px solid hsl(50,0%,30%);border-radius:.2em !important;overflow:hidden;display:flex;align-items:center}.messages-parser-progress-bar-inner{height:100%;background:linear-gradient(90deg, hsl(88, 50%, 55%) 0%, hsl(208, 50%, 70%) 100%);transition:width .3s cubic-bezier(0.4, 0, 0.2, 1);border-radius:.2em !important}.messages-parser-progress-label{display:inline-flex;justify-content:center;color:hsl(88,50%,55%);font-size:1em;font-weight:400}',""]);const i=a},365:(e,t,n)=>{n.d(t,{A:()=>i});var o=n(601),s=n.n(o),r=n(314),a=n.n(r)()(s());a.push([e.id,'.cached-users-panel{opacity:0;background-color:#1b1b1b;border-radius:.6em !important;position:fixed;top:100px;left:50%;transform:translateX(-50%);width:80vw;height:80vh;z-index:1000;display:grid;grid-template-columns:1fr;grid-template-rows:auto auto 1fr;grid-template-areas:"header header" "sort sort" "cache scroll"}.cached-users-panel .panel-header{display:flex;flex-direction:row;justify-content:space-between;padding:.6em;grid-area:header}.cached-users-panel .drop-time{display:flex;justify-content:center;align-items:center;min-width:fit-content}.cached-users-panel .drop-time-threshold-description{padding:.6em;color:#c6b209}.cached-users-panel .drop-time-threshold{padding:.6em;color:#f08080;font-family:"Roboto Mono",monospace;font-size:1.1em;font-weight:bold;border-radius:.2em !important;border:1px solid rgba(240,128,128,.2);background-color:rgba(240,128,128,.05);transition:filter .3s;filter:sepia(0);cursor:pointer}.cached-users-panel .drop-time-threshold:hover{filter:sepia(1)}.cached-users-panel .drop-time-expiration-description{padding:.6em;color:#d0562c}.cached-users-panel .drop-time-expiration{padding:.6em;color:#faebd7;font-family:"Roboto Mono",monospace;font-size:1.1em}.cached-users-panel .search-for-cached-users{width:100%;margin:0 .5em;display:flex}.cached-users-panel .cached-users-search-input{outline:none;height:48px;width:100%;padding:10px;font-size:1em !important;font-family:"Montserrat" !important;color:bisque !important;border-radius:.2em !important;box-sizing:border-box;background-color:#111 !important;border:1px solid #222 !important}.cached-users-panel .sort-buttons-container{display:flex;gap:5px;margin:0 .6em .6em;height:fit-content;grid-area:sort}.cached-users-panel .sort-buttons-container .sort-button{padding:5px 10px;background-color:#333;border:none !important;cursor:pointer;border-radius:3px !important;height:fit-content}.cached-users-panel .sort-buttons-container .sort-button.active{background-color:#555}.cached-users-panel .fetched-users{display:grid;grid-template-rows:1fr 1fr;height:fit-content;max-height:calc(100% - .5em);overflow-y:auto;grid-area:cache}.cached-users-panel .users-container{display:grid;grid-template-columns:repeat(auto-fill, minmax(220px, 1fr));gap:12px;padding:1em;height:fit-content}.cached-users-panel .description{color:bisque;font-family:Montserrat;font-size:1em;margin:0;padding:.4em .2em;grid-column:1/-1;height:fit-content}.cached-users-panel .user-item{display:grid;grid-template-columns:auto 1fr;align-items:center;height:fit-content;gap:.6em;margin-bottom:1em}.cached-users-panel .visits{margin-left:8px;padding:4px 6px;border-radius:2px !important;cursor:pointer;white-space:pre}.cached-users-panel .visits.tracked{color:#adff2f;background-color:#003500;border:1px solid #006400;font-weight:bold}.cached-users-panel .visits.untracked{color:orange;background-color:#111;font-weight:normal}.cached-users-panel .action-log{position:fixed;opacity:0;padding:8px;gap:4px;top:50%;left:50%;transform:translate(-50%, -50%);max-height:85vh;overflow-y:auto;scrollbar-width:none;overflow-x:hidden;display:flex;flex-wrap:wrap;background-color:#111;justify-content:center;border:3px dashed #212121;box-shadow:0 4px 6px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.08) !important;border-radius:.2em !important}.cached-users-panel .rank{padding:2px 0}.cached-users-panel .registered{color:#5f9ea0;font-size:12px}.cached-users-panel .user-metrics{display:inline-flex;grid-column:span 2;white-space:nowrap}.cached-users-panel .user-metrics span{margin-right:.2em !important}.cached-users-panel .avatar{font-size:2rem}.cached-users-panel .avatar img{height:24px;width:24px}.cached-users-panel .present-marker{display:inline-flex;width:8px;height:8px;margin-right:4px;border-radius:50% !important;position:relative}.cached-users-panel .present-marker::before{content:"";position:absolute;top:0;left:40%;transform:translateX(-50%);width:6px;height:6px;border-radius:50% !important;background:radial-gradient(circle, hsla(0, 0%, 100%, 0.7) 20%, hsla(0, 0%, 100%, 0) 100%);pointer-events:none}.cached-users-panel .present-marker.waiting{background-color:hsl(0,0%,50%);box-shadow:0 1px 3px 0 hsla(0,0%,15%,.5),0 0 0 1px hsla(0,0%,15%,.1) inset,0 2px 6px 0 hsla(0,0%,15%,.25) !important}.cached-users-panel .present-marker.online{background-color:hsl(80,80%,50%);box-shadow:0 1px 3px 0 hsla(80,80%,15%,.5),0 0 0 1px hsla(80,80%,15%,.1) inset,0 2px 6px 0 hsla(80,80%,15%,.25) !important}.cached-users-panel .present-marker.offline{background-color:hsl(350,80%,50%);box-shadow:0 1px 3px 0 hsla(350,80%,15%,.5),0 0 0 1px hsla(350,80%,15%,.1) inset,0 2px 6px 0 hsla(350,80%,15%,.25) !important}.cached-users-panel .login{color:skyblue !important;text-decoration:none;font-family:"Montserrat",sans-serif;transition:color .3s ease}.cached-users-panel .login:hover{color:#fff8dc !important}@media(max-width: 1199px){.cached-users-panel{width:90vw;height:85vh;min-width:unset}}@media(max-width: 991px){.cached-users-panel{width:95vw;height:90vh;grid-template-columns:1fr;grid-template-rows:min-content auto;grid-template-areas:"header" "cache"}.cached-users-panel .panel-header{flex-wrap:wrap}.cached-users-panel .search-for-cached-users{margin:.5em 0;order:1}.cached-users-panel .users-container{grid-template-columns:repeat(auto-fill, minmax(180px, 1fr))}}@media(max-width: 576px){.cached-users-panel{width:100vw;height:100vh;top:0;left:0;transform:none;border-radius:0 !important}.cached-users-panel .panel-header{padding:.5em}.cached-users-panel .drop-time-threshold,.cached-users-panel .drop-time-expiration{padding:.4em}.cached-users-panel .users-container{grid-template-columns:repeat(auto-fill, minmax(140px, 1fr));gap:8px;padding:.5em}.cached-users-panel .user-item{gap:.4em;margin-bottom:1em}.cached-users-panel .avatar{font-size:1.4rem}.cached-users-panel .avatar img{height:20px;width:20px}.cached-users-panel .login{font-size:.9em}.cached-users-panel .visits{font-size:.8em;padding:2px 4px}.cached-users-panel .registered{font-size:10px}}@media(max-width: 576px)and (max-width: 520px){.cached-users-panel .drop-time-threshold-description,.cached-users-panel .drop-time-expiration-description{display:none !important}}@media(max-width: 576px)and (max-width: 320px){.cached-users-panel .drop-time{display:none !important}.cached-users-panel .panel-control-buttons{width:100% !important;justify-content:end !important}}.fetch-mode-button{background-color:#b2a4f9}.fetch-mode-button svg{stroke:#483d8b}.cache-mode-button{background-color:#483d8b}.cache-mode-button svg{stroke:#b2a4f9}.cache-user-count{display:flex;position:absolute;justify-content:center;align-items:center;left:0;bottom:0;transform:translate(-50%, 50%);z-index:1;height:20px;padding:0 4px;border-radius:2px !important;background-color:#9db380;color:#020202;font-size:12px;font-family:Roboto,sans-serif;font-weight:bold}',""]);const i=a},540:e=>{e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},601:e=>{e.exports=function(e){return e[1]}},629:(e,t,n)=>{n.d(t,{A:()=>i});var o=n(601),s=n.n(o),r=n(314),a=n.n(r)()(s());a.push([e.id,'.settings-panel{opacity:0;background-color:#1b1b1b;border-radius:.6em !important;position:fixed;top:100px;left:50%;transform:translateX(-50%);width:50vw;height:80vh;z-index:1000;min-width:1000px;display:grid;grid-template-columns:1fr;grid-template-rows:min-content;grid-template-areas:"header header" "settings scroll"}.settings-panel .panel-header{display:flex;flex-direction:row;justify-content:flex-end;padding:.6em;grid-area:header}.settings-panel .settings-content-container{overflow-y:auto;height:calc(100% - .5em);padding:1em;grid-area:settings}.settings-panel .settings-description{position:relative;font:1em Montserrat;color:#deb887;background-color:rgba(222,184,135,.1);width:fit-content;margin:0 0 1em;padding:.4em .8em;border-radius:.4em !important;left:50%;transform:translateX(-50%)}.settings-panel .settings-spoiler button{display:inline-flex !important;position:relative;font:1em Montserrat;color:#90ee90;background-color:rgba(222,184,135,.1);margin:0 0 3em 0;padding:.4em .8em;border-radius:.4em !important;left:50%;transform:translateX(-50%);cursor:pointer;transition:background-color .3s ease;border:none}.settings-panel .settings-spoiler button:hover{background-color:rgba(222,184,135,.25)}.settings-panel .replacement-item{background-color:#111 !important;padding:.5em !important;border-radius:.4em !important}.settings-panel .settings-field{height:30px;max-width:200px;min-width:150px;padding:.4em;font:1em Montserrat;font-family:Montserrat;color:bisque;border-radius:.2em !important;box-sizing:border-box;background-color:#111;border:1px solid #222}.settings-panel .settings-button{min-width:30px;width:30px;height:30px;display:flex;justify-content:center;align-items:center;border-radius:.2em !important;cursor:pointer;transition:filter .3s;filter:brightness(1)}.settings-panel .settings-button:hover{filter:brightness(0.8)}.settings-panel .settings-button.disabled{filter:grayscale(1);pointer-events:none;opacity:.5}.settings-panel select{height:30px;min-width:105px;max-width:120px;padding:.4em;font:1em Montserrat,sans-serif;color:bisque !important;border-radius:.2em !important;box-sizing:border-box;background-color:#111 !important;border:1px solid #222 !important}.settings-panel option{height:30px;background-color:#111 !important;color:bisque !important;font-family:"Montserrat",sans-serif}.settings-panel .confirm-settings-button{stroke:hsl(60,40%,80%);background-color:hsl(60,40%,30%);border:1px solid hsl(60,40%,40%)}.settings-panel .remove-settings-button{stroke:hsl(0,40%,80%);background-color:hsl(0,40%,30%);border:1px solid hsl(0,40%,40%)}.settings-panel .assigned-settings-button{stroke:hsl(215,40%,80%);background-color:hsl(215,40%,30%);border:1px solid hsl(215,40%,40%)}.settings-panel .add-settings-button{stroke:hsl(280,40%,80%);background-color:hsl(280,40%,30%);border:1px solid hsl(280,40%,40%)}.settings-panel .toggle-item{display:inline-flex;align-items:center;gap:1em}.settings-panel .toggle-description{cursor:pointer;color:#deb887;transition:color .15s ease-in-out}.settings-panel .toggle-description:hover{color:#fafad2}.settings-panel .settings-container{width:100%;gap:.4em;display:inline-flex;flex-wrap:wrap;align-items:center;margin-bottom:4em}.settings-panel .settings-userColors-container{display:flex;flex-direction:column;gap:.6em}.settings-panel .settings-userColors-container .userColors-search-container{display:flex;align-items:center;gap:.4em;width:100%}.settings-panel .settings-userColors-container .userColors-search-container .userColors-search-field{width:100%;max-width:100%;margin:0}.settings-panel .settings-userColors-container .settings-userColors-items-container{width:100%;max-width:100%;display:grid;grid-template-columns:repeat(auto-fit, minmax(255px, 1fr));gap:.6em;align-items:start}.settings-panel .settings-userColors-container .settings-userColors-items-container .userColors-item{display:flex !important;flex-direction:column;width:100%;background-color:#111 !important;padding:.8em !important;border-radius:.4em !important;gap:.6em}.settings-panel .settings-userColors-container .settings-userColors-items-container .userColors-item.userColors-hidden{display:none !important}.settings-panel .settings-userColors-container .settings-userColors-items-container .userColors-item .userColors-content-wrapper{display:flex;flex-direction:column;gap:.6em}.settings-panel .settings-userColors-container .settings-userColors-items-container .userColors-item .userColors-content-wrapper .userColors-username-display{font:1em Montserrat;color:#deb887;font-weight:500;transition:color .3s ease-in-out}.settings-panel .settings-userColors-container .settings-userColors-items-container .userColors-item .userColors-content-wrapper .userColors-username-display:hover{color:bisque}.settings-panel .settings-userColors-container .settings-userColors-items-container .userColors-item .userColors-controls-row{display:inline-flex;gap:.4em;align-items:center;flex-wrap:wrap}.settings-panel .settings-userColors-container .settings-userColors-items-container .userColors-item .userColors-header-row{display:flex;align-items:center;gap:.6em}.settings-panel .settings-userColors-container .settings-userColors-items-container .userColors-item .userColors-user-badge{margin-left:.2em;background:hsl(200,30%,20%);color:bisque;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border-radius:.2em}.settings-panel .settings-userColors-container .settings-userColors-items-container .userColors-item .userColors-user-badge svg{width:14px;height:14px;display:block}.settings-panel .settings-userColors-container .settings-userColors-items-container .userColors-item .userColors-avatar{width:24px;height:24px;border-radius:.2em !important;overflow:hidden;display:inline-flex;align-items:center;justify-content:center;background-color:rgba(0,0,0,0);transform-origin:left;transition:transform .15s}.settings-panel .settings-userColors-container .settings-userColors-items-container .userColors-item .userColors-avatar:has(img):hover{transform:scale(2);z-index:2}.settings-panel .settings-userColors-container .settings-userColors-items-container .userColors-item .userColors-avatar-img{width:100%;height:100%;display:block;object-fit:cover}.settings-panel .settings-userColors-container .settings-userColors-items-container .userColors-item .userColors-avatar-emoji{width:100%;height:100%;display:inline-flex;align-items:center;justify-content:center;font-size:2rem}.settings-panel .settings-userColors-container .settings-userColors-items-container .userColors-item .userColors-color-swatch{width:30px;height:30px;border-radius:.2em !important;cursor:pointer;transition:transform .08s ease}.settings-panel .settings-userColors-container .settings-userColors-items-container .userColors-item .userColors-color-swatch:hover{transform:scale(1.05)}.settings-panel .settings-toggle-container{align-items:start !important;flex-direction:column}.settings-panel [class$=item]{display:inline-flex;gap:.4em}@media(max-width: 1199px){.settings-panel{width:90vw;height:85vh;min-width:unset}.settings-panel .settings-field,.settings-panel select{max-width:180px}}@media(max-width: 991px){.settings-panel{width:95vw;height:90vh;grid-template-columns:1fr;grid-template-rows:min-content auto;grid-template-areas:"header" "settings"}.settings-panel .panel-header{flex-wrap:wrap}.settings-panel .settings-field,.settings-panel select{max-width:160px;min-width:120px}.settings-panel .settings-container{flex-direction:column;align-items:flex-start}}@media(max-width: 576px){.settings-panel{width:100vw;height:100vh;top:0;left:0;transform:none;border-radius:0 !important}.settings-panel .settings-description,.settings-panel .toggle-description{font-size:.9em}.settings-panel .settings-container{flex-direction:column;gap:.2em;margin-bottom:2em}.settings-panel .toggle-item{gap:.5em}.settings-panel [class$=item]{gap:.2em}}',""]);const i=a},659:e=>{var t={};e.exports=function(e,n){var o=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}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(n)}},805:(e,t,n)=>{n.d(t,{A:()=>i});var o=n(601),s=n.n(o),r=n(314),a=n.n(r)()(s());a.push([e.id,'.chat-logs-button{position:relative;z-index:1}.chat-logs-panel{opacity:0;background-color:#1b1b1b;border-radius:.6em !important;position:fixed;top:100px;left:50%;transform:translateX(-50%);width:80vw;height:80vh;z-index:1000;min-width:1000px;display:grid;grid-template-columns:1fr;grid-template-rows:min-content;grid-template-areas:"header header header" "messages scroll users"}.chat-logs-panel .panel-header{display:flex;flex-direction:row;grid-area:header;justify-content:flex-end;padding:.6em}.chat-logs-panel .panel-control-buttons{display:flex}.chat-logs-panel .search-for-chatlogs-messages{width:100%;margin:0 .5em 0 0;display:flex}.chat-logs-panel .chatlogs-search-input{outline:none;height:48px;width:100%;padding:10px;font-size:1em;font-family:Montserrat;color:bisque !important;border-radius:.2em !important;box-sizing:border-box;background-color:#111;border:1px solid #222 !important}.chat-logs-panel .chatlogs-date-input{background-color:#111;color:bisque;border:1px solid #222;width:fit-content;height:48px;padding:10px;font-size:1em;font-family:Montserrat;border-radius:.2em !important;box-sizing:border-box;margin-right:.5em}.chat-logs-panel .chat-logs-container{overflow-y:auto;overflow-x:hidden;height:calc(100% - .5em);padding:1em;display:flex;grid-area:messages;flex-direction:column}.chat-logs-panel .message-item{padding:.2em;display:inline-flex;cursor:pointer;align-items:start}.chat-logs-panel .message-time{color:#8fbc8f;margin:0 .4em;cursor:pointer;transition:color .2s ease;height:fit-content}.chat-logs-panel .message-time:hover{color:#90ee90}.chat-logs-panel .message-username{cursor:pointer;margin:0 .4em;height:fit-content}.chat-logs-panel .message-text{color:hsl(0,10%,70%);margin:0 .4em;overflow-wrap:anywhere;height:fit-content}.chat-logs-panel .active-users{padding:1em;height:calc(100% - 1em);width:fit-content;overflow-y:auto;overflow-x:hidden;grid-area:users;display:flex;flex-direction:column}.chat-logs-panel .active-users .active-user-item{display:flex;height:fit-content;align-items:center;justify-content:left;margin:.2em 0;cursor:pointer;transition:filter .15s}.chat-logs-panel .active-users .active-user-item:hover{filter:brightness(0.8)}.chat-logs-panel .active-users .active-user-item .active-user-name{padding:.4em}.chat-logs-panel .active-users .active-user-item .active-user-messages-count{padding:.4em;border-radius:.2em !important}.chat-logs-panel .saved-chatlog-url{color:#8fbc8f !important;text-decoration:none;display:inline-flex;padding:.5em}.chat-logs-panel .saved-chatlog-url-title{color:#b0c4de;padding:.5em}.chat-logs-panel .saved-chatlog-container{display:flex;flex-direction:column;overflow-y:auto;background-color:#1e282d;border:1px solid #3c4650 !important;border-radius:.2em !important;position:absolute;padding:.5em;height:fit-content;width:max-content;max-height:400px;top:calc(50px + 1em);right:0}@media(max-width: 1199px){.chat-logs-panel{width:90vw;height:85vh;min-width:unset}.chat-logs-panel .active-users{width:200px}}@media(max-width: 991px){.chat-logs-panel{width:95vw;height:90vh;grid-template-columns:1fr;grid-template-rows:min-content auto auto;grid-template-areas:"header" "messages" "users"}.chat-logs-panel .active-users{width:100%;height:auto;max-height:200px;overflow-y:auto}.chat-logs-panel .panel-header{flex-direction:column;align-items:flex-start}.chat-logs-panel .search-for-chatlogs-messages{width:100%;margin-bottom:.5em}.chat-logs-panel .panel-control-buttons{width:100%;justify-content:center}.chat-logs-panel .active-users,.chat-logs-panel .panel-header-toggle-button{display:none !important}}@media(max-width: 576px){.chat-logs-panel{width:100vw;height:100vh;top:0;left:0;transform:none;border-radius:0 !important}.chat-logs-panel .panel-header{padding:.5em}.chat-logs-panel .active-users{display:none}.chat-logs-panel .message-item{padding:.1em}.chat-logs-panel .message-time,.chat-logs-panel .message-username,.chat-logs-panel .message-text{margin:0 .2em;font-size:.9em}.chat-logs-panel .video-container,.chat-logs-panel .youtube-thumb{transform-origin:top left;transform:scale(0.8)}.chat-logs-panel .toggle-mention-messages-counter,.chat-logs-panel .toggle-media-messages-counter{font-size:10px}.chat-logs-panel .saved-chatlog-container{max-height:300px}}.toggle-mention-messages-counter,.toggle-media-messages-counter{display:flex;position:absolute;justify-content:center;align-items:center;padding:2px 4px;border-radius:2px !important;font-size:12px;font-family:Roboto;font-weight:bold;bottom:0px;left:0px;transform:translate(-50%, 50%);color:#020202;pointer-events:none;user-select:none}.toggle-mention-messages-counter{background-color:#ffa07a;box-shadow:0 0 4px rgba(0,0,0,.5) !important}.toggle-media-messages-counter{background-color:#71c4c4;box-shadow:0 0 4px rgba(0,0,0,.5) !important}',""]);const i=a},807:(e,t,n)=>{n.d(t,{A:()=>i});var o=n(601),s=n.n(o),r=n(314),a=n.n(r)()(s());a.push([e.id,'.personal-messages-button{position:relative;z-index:2}.personal-messages-button .message-count{display:flex;position:absolute;justify-content:center;align-items:center;height:20px;padding:0 4px;border-radius:2px !important;color:#020202;font-size:12px;font-family:Roboto,sans-serif;font-weight:bold;bottom:0}.personal-messages-button .total-message-count{left:0;transform:translate(-50%, 50%);background-color:salmon}.personal-messages-button .new-message-count{right:0;transform:translate(50%, 50%);background-color:gold}.cached-messages-panel{opacity:0;background-color:#1b1b1b;border-radius:.6em !important;position:fixed;top:100px;left:50%;transform:translateX(-50%);width:50vw;height:80vh;z-index:1000;min-width:1000px;display:grid;grid-template-columns:1fr;grid-template-rows:min-content;grid-template-areas:"header header" "messages scroll"}.cached-messages-panel .panel-header{display:flex;flex-direction:row;justify-content:flex-end;padding:.6em;grid-area:header}.cached-messages-panel .search-for-personal-messages{width:100%;margin:0 .5em 0 0;display:flex}.cached-messages-panel .personal-messages-search-input{outline:none;height:48px;width:100%;padding:10px;font-size:1em;font-family:Montserrat,sans-serif;color:bisque !important;border-radius:.2em !important;box-sizing:border-box;background-color:#111;border:1px solid #222 !important}.cached-messages-panel .messages-container{overflow-y:auto;height:calc(100% - .5em);padding:1em;grid-area:messages}.cached-messages-panel .message-item{padding:.2em}.cached-messages-panel .message-time{display:inline-flex;margin:0px .4em;height:fit-content;cursor:pointer;transition:color .2s ease}.cached-messages-panel .message-username{display:inline-flex;cursor:pointer;margin:0px .4em;height:fit-content}.cached-messages-panel .message-text{cursor:pointer;margin:0px .4em;height:fit-content}@media(max-width: 1199px){.cached-messages-panel{width:90vw;height:85vh;min-width:unset}}@media(max-width: 991px){.cached-messages-panel{width:95vw;height:90vh;grid-template-columns:1fr;grid-template-rows:min-content auto;grid-template-areas:"header" "messages"}.cached-messages-panel .panel-header{flex-direction:column;align-items:flex-start}.cached-messages-panel panel-control-buttons .search-for-personal-messages{width:100%;margin-right:0;margin-bottom:.5em}.cached-messages-panel .panel-control-buttons{width:100%;justify-content:center}}@media(max-width: 630px){.cached-messages-panel .panel-header-date-button,.cached-messages-panel .chatlogs-date-input{display:none !important}}@media(max-width: 576px){.cached-messages-panel{width:100vw;height:100vh;top:0;left:0;transform:none;border-radius:0 !important}.cached-messages-panel .panel-header{padding:.5em}.cached-messages-panel .message-item{padding:.1em}.cached-messages-panel .message-time,.cached-messages-panel .message-username,.cached-messages-panel .message-text{margin:0 .2em;font-size:.9em}.cached-messages-panel .video-container,.cached-messages-panel .youtube-thumb{transform-origin:top left;transform:scale(0.8)}.cached-messages-panel .message-count{font-size:10px;height:16px;padding:0 3px}}',""]);const i=a},825:e=>{e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var o="";n.supports&&(o+="@supports (".concat(n.supports,") {")),n.media&&(o+="@media ".concat(n.media," {"));var s=void 0!==n.layer;s&&(o+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),o+=n.css,s&&(o+="}"),n.media&&(o+="}"),n.supports&&(o+="}");var r=n.sourceMap;r&&"undefined"!=typeof btoa&&(o+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r))))," */")),t.styleTagTransform(o,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}}},t={};function n(o){var s=t[o];if(void 0!==s)return s.exports;var r=t[o]={id:o,exports:{}};return e[o](r,r.exports,n),r.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.nc=void 0;var o=n(72),s=n.n(o),r=n(825),a=n.n(r),i=n(659),l=n.n(i),c=n(56),d=n.n(c),u=n(540),m=n.n(u),p=n(113),g=n.n(p),h=n(11),f={};f.styleTagTransform=g(),f.setAttributes=d(),f.insert=l().bind(null,"head"),f.domAPI=a(),f.insertStyleElement=m();s()(h.A,f);h.A&&h.A.locals&&h.A.locals;const y="https://klavogonki.ru/u/#/",v=document.querySelector(".userpanel .user-block .user-dropdown .name span").textContent,b=document.querySelector("a.drop-btn.mail")?.href?.match(/\/u\/#\/(\d+)\/messages\//)?.[1],x=new Intl.DateTimeFormat("en-CA").format(new Date),w="2012-12-02",C="userData",S=2.5,k=["😀","😁","😂","🤣","😃","😄","😅","😆","😉","😊","😋","😎","😏","😐","😑","😒","😓","😔","😕","😖","😗","😘","😙","😚","😜","😝","😛","🤑","🤗","🤔","🤐","🤨","😣","😥","😮","🤯","😳","😱","😨","😰","😢","🤪","😵","😲","🤤","😷","🤒","🤕","🤢","🤧","😇","🥳","🥺","😬","😴","😌","🤥","🥴","🥵","🥶","🤧","🤭","🤫","😠","😡","😳","😞","😟","😕","🐱","😺","😸","😹","😻","😼","😽","🙀","😿","😾","🐶","🐭","🐹","🐰","🦊","🐻","🐼","🐨","🐯","🦁","🐮","🐷","🐸","🐵","🙈","🙉","🙊","🐔","🦄"];let E={bigImageEvents:{},panelsEvents:{},fetchedUsers:JSON.parse(localStorage.getItem("fetchedUsers"))||{},isInitializedChat:!1};const $=function(e){const[t,n=0,o=0]=e.split(":").map(Number);return t+n/60+o/3600}(localStorage.getItem("cacheRefreshThresholdHours")||(localStorage.setItem("cacheRefreshThresholdHours",24),24)),L=["klavogonki.ru","youtube.com","youtu.be","imgur.com","pikabu.ru","userapi.com","ibb.co","yaplakal.com","freepik.com","fastpic.org"],T={Экстракибер:1,Кибергонщик:2,Супермен:3,Маньяк:4,Гонщик:5,Профи:6,Таксист:7,Любитель:8,Новичок:9},M={Экстракибер:"#06B4E9",Кибергонщик:"#5681ff",Супермен:"#B543F5",Маньяк:"#DA0543",Гонщик:"#FF8C00",Профи:"#C1AA00",Таксист:"#2DAB4F",Любитель:"#61B5B3",Новичок:"#AFAFAF"},N={private:"coral",mention:"darkseagreen"},I={private:"coral",mention:"hsl(0, 10%, 70%)",default:"slategray"};function A(e){if("string"!=typeof e)return null;const t=e.match(/^#([0-9a-fA-F]{6})\b/);return t?`#${t[1]}`:null}function q(e){if(!e||!e.sec)return null;return new Date(1e3*e.sec).toISOString().split("T")[0]}function D(e,t){return null!=e&&null!=t?e.toString()+Math.floor(t/1e3).toString():null}async function j(e){const t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch ${e}`);return t.json()}async function O(e){try{const t=`https://klavogonki.ru/api/profile/search-users?query=${e}`,n=await j(t);if(!n.all?.length)return null;const o=n.all.find((t=>t.login===e));return o?o.id:null}catch(e){return console.error("Error getting user ID:",e),null}}const B=new Set(["bio","bioText","bioOldText","bioEditedDate","stats","registered","achievesCount","totalRaces","bestSpeed","ratingLevel","friendsCount","vocsCount","carsCount","achieves","allIndexData"]),H=new Set(["usernamesHistory","currentLogin","userId","level","status","title","car","carColor","isOnline","avatar","blocked","isFriend","publicPrefs","allUserData"]);async function P(e,t){try{const n=await O(e);if(!n)throw new Error(`User with username "${e}" not found`);return await F(n,t)}catch(n){return console.error(`Error getting ${t} for user ${e}:`,n),null}}async function F(e,t){try{if(B.has(t)){const n=await async function(e){try{const t=`https://klavogonki.ru/api/profile/get-index-data?userId=${e}`;return await j(t)}catch(e){throw console.error("Error getting user index data:",e),e}}(e);return _(n,t,"index")}if(H.has(t)){const n=await async function(e){try{const t=`https://klavogonki.ru/api/profile/get-summary?id=${e}`;return await j(t)}catch(e){throw console.error("Error getting user summary:",e),e}}(e);return _(n,t,"summary")}throw new Error(`Unknown data type: ${t}`)}catch(n){return console.error(`Error getting ${t} for user ID ${e}:`,n),null}}function _(e,t,n){if(!e)return null;if("summary"===n){const n={...e.user||{},...e};switch(t){case"usernamesHistory":return Array.isArray(n.history)?n.history.map((e=>e.login)):[];case"currentLogin":return n.login||null;case"userId":return n.id||null;case"level":return n.level||null;case"status":return n.status||null;case"title":return n.title||(n.status?.title??null);case"car":return n.car||null;case"carColor":return n.car?A(n.car.color):null;case"isOnline":return n.is_online??!1;case"avatar":return n.avatar||null;case"avatarTimestamp":{const e=n.avatar;return e&&"number"==typeof e.sec&&"number"==typeof e.usec?D(e.sec,e.usec):null}case"blocked":return n.blocked??null;case"isFriend":return n.is_friend??!1;case"publicPrefs":return n.public_prefs||null;case"allUserData":return n;default:return null}}if("index"===n)switch(t){case"bio":return e.bio||null;case"bioText":return e.bio?.text||null;case"bioOldText":return e.bio?.old_text||null;case"bioEditedDate":return e.bio?.edited_date||null;case"stats":return e.stats||null;case"registered":return q(e.stats?.registered);case"achievesCount":return e.stats?.achieves_cnt||null;case"totalRaces":return e.stats?.total_num_races||null;case"bestSpeed":return e.stats?.best_speed||null;case"ratingLevel":return e.stats?.rating_level||null;case"friendsCount":return e.stats?.friends_cnt||null;case"vocsCount":return e.stats?.vocs_cnt||null;case"carsCount":return e.stats?.cars_cnt||null;case"achieves":return e.achieves||null;case"allIndexData":return e;default:return null}return null}function z(e,t,n){e/=255,t/=255,n/=255;const o=Math.max(e,t,n),s=Math.min(e,t,n);let r,a,i=(o+s)/2;if(o===s)r=a=0;else{const l=o-s;a=i<.5?l/(o+s):l/(2-o-s),r=(o===e?(t-n)/l+(t215&&r<280&&(r=r<255?215:280),{h:r,s:a,l:i}}function R(e){if(!e||"string"!=typeof e)return"#808080";const t=e.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/i);if(!t)return"#808080";const[,n,o,s]=t.map(Number);return`#${((1<<24)+(Math.max(0,Math.min(255,n))<<16)+(Math.max(0,Math.min(255,o))<<8)+Math.max(0,Math.min(255,s))).toString(16).slice(1).padStart(6,"0")}`}function U(e,t="rgb",n=65){let o,s,r,a,i,l;if("hex"===t){const t=function(e){const t=e.replace(/^#/,"");if(!/^[0-9A-Fa-f]{6}$/.test(t))throw new Error(`Invalid hex color: "${e}"`);return{r:parseInt(t.slice(0,2),16),g:parseInt(t.slice(2,4),16),b:parseInt(t.slice(4,6),16)}}(e);o=t.r,s=t.g,r=t.b,({h:a,s:i,l}=z(o,s,r))}else if("rgb"===t)"string"==typeof e?[o,s,r]=e.match(/\d+/g).map(Number):"object"==typeof e&&void 0!==e.r&&(o=e.r,s=e.g,r=e.b),({h:a,s:i,l}=z(o,s,r));else{if("hsl"!==t)throw new Error("Unsupported inputType for normalizeUsernameColor: "+t);"string"==typeof e?[a,i,l]=e.match(/\d+/g).map(Number):"object"==typeof e&&void 0!==e.h&&(a=e.h,i=e.s,l=e.l)}const c=function(e,t,n){let o,s,r;if(n/=100,0==(t/=100))o=s=r=255*n;else{const a=n<.5?n*(1+t):n+t-n*t,i=2*n-a,l=(e,t,n)=>(n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e);o=Math.round(255*l(i,a,e/360+1/3)),s=Math.round(255*l(i,a,e/360)),r=Math.round(255*l(i,a,e/360-1/3))}return`rgb(${o}, ${s}, ${r})`}(a,i,l!(e in n)));if(o.length){const e=await Promise.all(o.map((e=>P(e,"allUserData"))));o.forEach(((t,o)=>{const s=e[o];if(s){const e=s.car?A(s.car.color):null;n[t]={id:s.id||null,color:e&&e.startsWith("#")?U(e,"hex"):"#808080",change:"auto"}}else n[t]={id:null,color:"#808080",change:"auto"}})),localStorage.setItem(t,JSON.stringify(n))}return n}function K(e,t=0,n=0){const o=[{transform:`translate(${t}%, calc(${n}%)) scale(1)`},{transform:`translate(${t}%, calc(${n}% - 60%)) scale(1.1)`},{transform:`translate(${t}%, calc(${n}% + 15%)) scale(1)`},{transform:`translate(${t}%, calc(${n}% - 20%)) scale(1.05)`},{transform:`translate(${t}%, calc(${n}% + 8%)) scale(1)`},{transform:`translate(${t}%, calc(${n}% - 10%)) scale(1.05)`},{transform:`translate(${t}%, calc(${n}% + 4%)) scale(1)`},{transform:`translate(${t}%, calc(${n}%)) scale(1)`}];return e.animate(o,{duration:500,easing:"ease",iterations:1}).finished}function Y(e){e.classList.add("shake-effect"),setTimeout((()=>{e.classList.remove("shake-effect")}),500)}function X(e){e.classList.add("pulse-effect"),setTimeout((()=>{e.classList.remove("pulse-effect")}),500)}let{panelsEvents:V,bigImageEvents:G,fetchedUsers:W}=E;const Z=e=>window.location.href.includes(e);function Q(){Object.entries(G).forEach((([e,t])=>{document.removeEventListener(e,t)}))}function ee(e=!1){Object.values(V).forEach((e=>{document.removeEventListener("keydown",e)})),Object.keys(V).forEach((e=>delete V[e]));const t=document.querySelector(".popup-panel");if(t&&t.remove(),e){const e=document.querySelector(".dimming-background");e&&e.remove()}}const te=(e,t=300)=>{let n;return function(...o){clearTimeout(n),n=setTimeout((()=>e.apply(this,o)),t)}};let ne=null;function oe(){let e;do{e=k[Math.floor(Math.random()*k.length)]}while(e===ne);return ne=e,e}function se(e,t){const n=(JSON.parse(localStorage.getItem("toggle"))||[]).find((n=>n.category===e&&n.type===t));return!n||"yes"===n.option}function re(){return(new Date).toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"})}const ae=e=>{try{const{hostname:t}=new URL(e),n=t.toLowerCase().split(".").slice(-2).join(".");return{isTrusted:L.includes(n),domain:n}}catch(t){return console.error("Error in isTrustedDomain:",t.message),{isTrusted:!1,domain:e}}};function ie(){const e=document.querySelector(".personal-messages-button .total-message-count"),t=document.querySelector(".personal-messages-button .new-message-count");if(!e||!t)return;const n=JSON.parse(localStorage.getItem("personalMessages"))||{},o=Object.keys(n).length;ie.previousTotalCount||(ie.previousTotalCount=o);let s=Number(localStorage.getItem("newMessagesCount"))||0;o>ie.previousTotalCount&&(s++,localStorage.setItem("newMessagesCount",s),X(t),K(t,50,50)),e.textContent=o,t.textContent=s,t.style.visibility=s>0?"visible":"hidden",o!==ie.previousTotalCount&&X(e),ie.previousTotalCount=o}function le(e){return!!e&&["Клавобот","Пользователь","заблокирован"].every((t=>e.includes(t)))}function ce(e,t){if(!e)return;const n=JSON.parse(localStorage.getItem("userData")||"{}"),o="one"===t?[e]:"all"===t?Array.from(e):(console.error("Invalid mode. Use 'one' or 'all'."),null);if(o)for(const e of o){const t=e?.querySelector("span[data-user]");if(!t)continue;const o=t.dataset.user,s=Object.values(n).find((e=>String(e.id)===o));let r;if(s?.color)r=s.color;else{r=U(getComputedStyle(e).color,"rgb");try{if(!Object.values(n).find((e=>String(e.id)===o))){const e=t.textContent.trim();if(e){n[e]=n[e]||{id:o,color:r};try{localStorage.setItem("userData",JSON.stringify(n))}catch(e){}}}}catch(e){}}e.style.setProperty("color",r,"important")}}function de(e,t,n){const o=`https://klavogonki.ru/chatlogs/${e}.html#${t}`;navigator.clipboard&&navigator.clipboard.writeText(o).then((()=>{Y(n),function(){if(window.getSelection){const e=window.getSelection();e&&e.removeAllRanges&&e.removeAllRanges()}}()}))}function ue(){return window.getSelection().toString().length>0}function me(e){let t="";for(const n of e.childNodes)if(n.nodeType===Node.TEXT_NODE)t+=n.textContent;else if(n.nodeType===Node.ELEMENT_NODE){if(n.classList&&n.classList.contains("video-wrapper")){n.querySelectorAll("a.media").forEach((e=>{e.href&&(t+=e.href+" ")}));continue}"IMG"===n.tagName?t+=n.title||n.alt||"":"A"===n.tagName?t+=n.href?n.href:n.textContent:t+=me(n)}return t.trim()}function pe(){try{const e=(JSON.parse(localStorage.getItem("toggle"))||[]).find((e=>"ui"===e.category&&"language"===e.type));return e?.option||"en"}catch{return"en"}}function ge(e,t="alert",...n){const o=e[pe()]||e.en;return"alert"===t?alert(o):"confirm"===t?confirm(o):"prompt"===t?prompt(o,...n):alert(o)}function he(e){let t,n,o;if(/^\d{4}[:\-]\d{2}[:\-]\d{2}$/.test(e))[t,n,o]=e.replace(/:/g,"-").split("-");else if(/^\d{8}$/.test(e))t=e.slice(0,4),n=e.slice(4,6),o=e.slice(6,8);else if(/^\d{6}$/.test(e))t="20"+e.slice(0,2),n=e.slice(2,4),o=e.slice(4,6);else{if(!/^\d{2}-\d{2}-\d{2}$/.test(e))return null;t="20"+e.slice(0,2),n=e.slice(3,5),o=e.slice(6,8)}return function(e,t,n){const o=(new Date).getFullYear();return e=parseInt(e,10),t=parseInt(t,10),n=parseInt(n,10),!(e>o||t<1||t>12||n<1||n>31)}(t,n,o)?`${t}-${n.padStart(2,"0")}-${o.padStart(2,"0")}`:null}var fe=n(629),ye={};ye.styleTagTransform=g(),ye.setAttributes=d(),ye.insert=l().bind(null,"head"),ye.domAPI=a(),ye.insertStyleElement=m();s()(fe.A,ye);fe.A&&fe.A.locals&&fe.A.locals;const ve="http://www.w3.org/2000/svg",be=`\n `,xe=`\n \n \n \n \n `,we=`\n \n \x3c!-- Define the gradient --\x3e\n \n \n \n \n \n \n \n `,Ce=`\n \n \x3c!-- Define the gradient for the fill --\x3e\n \n \n \n \n \n \n \x3c!-- Use the gradient for the fill --\x3e\n \n \n `,Se=`\n \n \n \n `,ke=`\n \n \n \n `,Ee=`\n \n \n `,$e=`\n \n \n \n `,Le=`\n \n \n \n \n `,Te=`\n \n \n \n \n `,Me=`\n \n \n \n \n `,Ne=`\n \n \n \n \n \n `,Ie=`\n \n \n \n `,Ae=`\n \n \n \n `,qe=`\n \n \n \n \n `,De=`\n \n \n \n `,je=`\n \n \n \n `,Oe=`\n \n \n \n \n \n \n \n \n \n `,Be=`\n \n \n \n `,He=`\n \n \n \n \n \n \n \n \n \n \n `,Pe=`\n \n \n \n `,Fe="rgb(211, 211, 211)",_e=`\n \n \n \n `,ze=`\n \n \n `,Re=`\n \n \n `,Ue=`\n \n \n \n `,Je=`\n \n \n \n `,Ke=`\n \n \n \n `,Ye=`\n \n \n \n \n \n `,Xe=`\n \n \n \n `,Ve=`\n \n \n `,Ge=`\n \n \n `,We=`\n \n \n \n \n \n \n `,Ze=`\n \n \n \n \n \n \n \n \n \n \n `,Qe=`\n \n \n \n \n \n `,et=`\n \n \n \n \n \n `,tt=`\n \n \n \n \n `,nt=`\n \n \n \n \n `,ot=`\n \n \n \n \n `,st=`\n \n \n \n `,rt=`\n \n \n \n \n `,at=`\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `,it=`\n \n \n \n `,lt=`\n \n \n `,ct=`\n \n \n \n `,dt=`\n \n \n \n \n \n \n `,ut=`\n \n \n `;let mt=null,pt=null,gt=null,ht=!1,ft=!1,yt=null;const vt=(e,t)=>{if(!mt)return;let n=e+10;const o=mt.offsetWidth,s=window.innerWidth;n=Math.min(Math.max(n,10),s-o-10),mt.style.left=`${n}px`,mt.style.top=`${t+18}px`},bt=e=>mt&&vt(e.clientX,e.clientY),xt=()=>{ht=!1,yt=null,clearTimeout(gt),clearTimeout(pt),pt=setTimeout((()=>{mt&&(mt.style.opacity="0",ft=!1,setTimeout((()=>{!ht&&mt&&(mt.style.display="none",mt.textContent="",document.removeEventListener("mousemove",bt))}),50))}),100)};new MutationObserver((()=>{yt&&!document.contains(yt)&&xt()})).observe(document,{childList:!0,subtree:!0});const wt=new WeakMap;function Ct(e){if("object"==typeof e&&null!==e&&!Array.isArray(e)){return e[pe()]||e.en||Object.values(e)[0]}return e}function St(e,t){return e.replace(/\$\{([^}]+)\}/g,((e,n)=>t.hasAttribute&&t.hasAttribute(n)?t.getAttribute(n):n in t?t[n]:"text"===n||"textContent"===n?t.textContent||"":e))}function kt(e,t,n=!1){if(null!=t&&""!==t)if(mt||=(()=>{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})(),n){const n=e,o=t,s=arguments[2];wt.has(o)||wt.set(o,new Set);const r=wt.get(o);if(!r.has(n)){r.add(n);const e=e=>{const t=e.target.closest(n);if(!t)return;ht=!0,yt=t,clearTimeout(pt),clearTimeout(gt);let o=s;"function"==typeof o&&(o=o(t)),o=Ct(o),"string"==typeof o&&(o=St(o,t)),mt.innerHTML=$t(o),mt.style.display="flex",mt.style.opacity="0",mt.offsetHeight,vt(e.clientX,e.clientY),document.addEventListener("mousemove",bt),gt=setTimeout((()=>{mt.style.opacity="1",ft=!0}),600)},t=e=>{e.target.closest(n)&&(xt(),document.removeEventListener("mousemove",bt))},a=e=>{e.target.closest(n)&&xt()};o.addEventListener("mouseenter",e,!0),o.addEventListener("mouseleave",t,!0),o.addEventListener("click",a,!0)}}else{let n=t;if("function"==typeof n&&(n=n(e)),n=Ct(n),"string"==typeof n&&(n=St(n,e)),!n)return void(e._tooltipContent="");e._tooltipContent=n,e._tooltipInitialized||(e._tooltipInitialized=!0,e.addEventListener("mouseenter",(t=>{e._tooltipContent&&(ht=!0,yt=e,clearTimeout(pt),clearTimeout(gt),mt.innerHTML=$t(e._tooltipContent),mt.style.display="flex",mt.style.opacity="0",mt.offsetHeight,vt(t.clientX,t.clientY),document.addEventListener("mousemove",bt),gt=setTimeout((()=>{mt.style.opacity="1",ft=!0}),600))})),e.addEventListener("mouseleave",(()=>{xt(),document.removeEventListener("mousemove",bt)})),e.addEventListener("click",xt))}}function Et(e){e&&(e._tooltipContent="")}function $t(e){if("string"!=typeof e)return"";const t=/\[([^\]]+)\]([^\[]*)/g;let n,o="",s=0;for(;null!==(n=t.exec(e));)n.index>s&&(o+=e.slice(s,n.index)),o+=`\n
\n ${n[1]} \n ${n[2].trim()}\n
`,s=t.lastIndex;return s{"0"===e.style.opacity&&e.remove()}),{once:!0}))}function Nt(e,t){e&&(Mt(e,t,1),e.addEventListener("dblclick",(t=>{const n=document.querySelector(".popup-panel");(t.target===e||t.target.parentElement===e||t.target.parentElement&&t.target.parentElement.parentElement===e)&&(n&&t.target.closest(".scaled-thumbnail")||It("hide"),Mt(e,"hide",1))})))}function It(e){const t=document.querySelector(".chat-logs-panel");"hide"===e&&t&&window.chatlogsParserState&&"function"==typeof window.chatlogsParserState.isRunning&&window.chatlogsParserState.isRunning()&&("function"==typeof window.stopChatlogsParser&&window.stopChatlogsParser(),delete window.chatlogsParserState,delete window.stopChatlogsParser);let n=document.querySelector(".dimming-background"),o=document.querySelector(".scaled-thumbnail");("hide"!==e||n)&&(n||(n=document.createElement("div"),n.classList.add("dimming-background"),document.body.appendChild(n),n.addEventListener("click",(function(){const e=document.querySelector(".popup-panel")||n.previousElementSibling;e&&Mt(e,"hide",0),It("hide"),o&&Q()}))),Mt(n,e,.5),"hide"===e&&o&&(Q(),Nt(o,"hide")))}function At({container:e,buttons:t}){const n=0===e.scrollTop,o=e.scrollTop+e.clientHeight>=e.scrollHeight-3;[t.fullScrollUpButton,t.partialScrollUpButton].forEach((e=>{e.style.opacity=n?"0.3":"1",e.style.pointerEvents=n?"none":"auto"})),[t.fullScrollDownButton,t.partialScrollDownButton].forEach((e=>{e.style.opacity=o?"0.3":"1",e.style.pointerEvents=o?"none":"auto"}))}function qt({container:e,scrollButtonsContainer:t}){e.scrollHeight>e.clientHeight?t.style.display="flex":t.style.display="none"}function Dt(e){const t=document.createElement("div");t.className="scroll-buttons-container";const n=document.createElement("div");n.innerHTML=_e,kt(n,{en:"Scroll Up (Full)",ru:"Прокрутить вверх (всё)"});const o=document.createElement("div");o.innerHTML=ze,kt(o,{en:"Scroll Up (Partial)",ru:"Прокрутить вверх (частично)"});const s=document.createElement("div");s.innerHTML=Re,kt(s,{en:"Scroll Down (Partial)",ru:"Прокрутить вниз (частично)"});const r=document.createElement("div");r.innerHTML=Ue,kt(r,{en:"Scroll Down (Full)",ru:"Прокрутить вниз (всё)"});const a={fullScrollUpButton:n,partialScrollUpButton:o,partialScrollDownButton:s,fullScrollDownButton:r};function i(t,n){const o=n?e.scrollHeight:e.clientHeight;e.scrollBy({top:"up"===t?-o:o,behavior:"smooth"}),At({container:e,buttons:a})}Object.values(a).forEach((e=>{e.classList.add("large-button","scroll-button"),t.appendChild(e)})),n.addEventListener("click",(()=>i("up",!0))),o.addEventListener("click",(()=>i("up",!1))),s.addEventListener("click",(()=>i("down",!1))),r.addEventListener("click",(()=>i("down",!0))),At({container:e,buttons:a}),qt({container:e,scrollButtonsContainer:t});const l=()=>{qt({container:e,scrollButtonsContainer:t}),At({container:e,buttons:a})};e.addEventListener("scroll",l);const c=new ResizeObserver(l);c.observe(e);const d=new MutationObserver(l);d.observe(e,{childList:!0,subtree:!0,characterData:!0,attributes:!0});return{scrollButtonsContainer:t,cleanup:()=>{c.disconnect(),d.disconnect(),e.removeEventListener("scroll",l)}}}["keydown","keyup"].forEach((e=>document.addEventListener(e,(t=>{return n=t.key,o="keydown"===e,"Control"===n&&(Lt=o),void("Alt"===n&&(Tt=o));var n,o})))),["blur","focus"].forEach((e=>document.addEventListener(e,(()=>{(Lt||Tt)&&(console.log(`${Lt?"Ctrl ":""}${Tt?"Alt ":""}key was true`),Lt=!1,Tt=!1)}))));const jt={spoilerTitles:{tracked:{en:{show:"Show tracked users",hide:"Hide tracked users"},ru:{show:"Показать отслеживаемых пользователей",hide:"Скрыть отслеживаемых пользователей"}},mention:{en:{show:"Show mention keywords",hide:"Hide mention keywords"},ru:{show:"Показать ключевые слова упоминаний",hide:"Скрыть ключевые слова упоминаний"}},replacement:{en:{show:"Show username replacements",hide:"Hide username replacements"},ru:{show:"Показать замены имен пользователей",hide:"Скрыть замены имен пользователей"}},moderator:{en:{show:"Show moderators",hide:"Hide moderators"},ru:{show:"Показать модераторов",hide:"Скрыть модераторов"}},ignored:{en:{show:"Show ignored users",hide:"Hide ignored users"},ru:{show:"Показать игнорируемых пользователей",hide:"Скрыть игнорируемых пользователей"}},userColors:{en:{show:"Show user colors",hide:"Hide user colors"},ru:{show:"Показать цвета пользователей",hide:"Скрыть цвета пользователей"}},toggle:{en:{show:"Show toggle options",hide:"Hide toggle options"},ru:{show:"Показать переключатели",hide:"Скрыть переключатели"}}},actionTitles:{userColors:{confirm:{en:"Remove unsaved user colors?",ru:"Удалить несохранённые цвета пользователей?"},confirmAll:{en:"Remove ALL user colors?",ru:"Удалить ВСЕ цвета пользователей?"}}},toggleTitles:{static:{en:"Show static chat notifications",ru:"Показывать статические уведомления чата"},dynamic:{en:"Show global dynamic notifications",ru:"Показывать глобальные динамические уведомления"},activity:{en:"Play sound and voice notifications, messages only when the tab is inactive",ru:"Воспроизводить звук и голосовые уведомления, сообщения только когда вкладка неактивна"},presence:{en:"Play sound and voice feedback when a user enters or leaves the chat",ru:"Воспроизводить звук и проговаривать, когда пользователь заходит или выходит из чата"},gTTS:{en:"Switch to Google TTS engine if available",ru:"Переключиться на Google TTS, если доступно"},counter:{en:"Create participants counter",ru:"Создать счетчик участников"},language:{en:"Interface language",ru:"Язык интерфейса"}},placeholderTitles:{tracked:{id:{en:"User ID",ru:"ID пользователя"},name:{en:"Username",ru:"Пользователь"},notFoundName:{en:"User not found",ru:"Пользователь не найден"},pronunciation:{en:"Pronunciation",ru:"Произношение"}},mention:{en:"Alias",ru:"Псевдоним"},replacement:{find:{en:"Original",ru:"Оригинал"},replace:{en:"Replacement",ru:"Замена"}},moderator:{en:"Moderator",ru:"Модератор"},ignored:{en:"Ignored",ru:"Игнорируемый"},userColors:{search:{en:"Search user",ru:"Поиск пользователя"},hex:{en:"Hex color",ru:"Цвет HEX"}}}},Ot=e=>{let t=document.querySelector(".profile-iframe-container");if(t)return void(t.src=e);t=document.createElement("iframe"),t.classList.add("profile-iframe-container"),t.src=e,document.body.appendChild(t),Mt(t,"show",1);const n=()=>{Mt(t,"hide",0),document.removeEventListener("keydown",o),document.removeEventListener("mousedown",o)},o=e=>{if("keydown"===e.type&&"Space"===e.code){if(window.lastFocusedIframeTextarea)return void e.stopPropagation();e.preventDefault(),n()}if("mousedown"===e.type&&!t.contains(e.target)){let t=e.target;for(;t&&t!==document.body;){if(t.classList&&(t.classList.contains("profile")||t.classList.contains("name")||t.classList.contains("login")))return;t=t.parentElement}n()}};document.addEventListener("keydown",o),document.addEventListener("mousedown",o),t.onload=()=>{try{const e=t.contentWindow,s=e.document;s.addEventListener("focusin",(e=>{"TEXTAREA"===e.target.tagName&&(window.lastFocusedIframeTextarea=e.target)})),s.addEventListener("focusout",(()=>{setTimeout((()=>{s.activeElement&&"TEXTAREA"===s.activeElement.tagName||(window.lastFocusedIframeTextarea=null)}),0)})),e.addEventListener("keydown",o),e.addEventListener("dblclick",n),new MutationObserver(((e,t)=>{e.some((e=>[...e.removedNodes].some((e=>1===e.nodeType&&(e.classList.contains("dimming-background")||e.classList.contains("cached-users-panel"))))))&&(n(),t.disconnect())})).observe(document.body,{childList:!0,subtree:!0})}catch(e){console.warn("Unable to access iframe contents:",e)}}};function Bt(e,t=null){const n=pe(),o=jt.placeholderTitles[e];return o?t&&"object"==typeof o&&o[t]?o[t][n]||o[t].en||"":"object"!=typeof o||t?"":o[n]||o.en||"":""}function Ht(e,t){e.addEventListener("click",(()=>{const n=e.classList.toggle("assigned-frozen-config");e.classList.toggle("assigned-thawed-config"),e.style.opacity=n?"1":"0.3",function(e,t){const n=localStorage.getItem("usersToTrack");if(n){const o=JSON.parse(n).map((n=>n.name===e?{...n,state:t}:n));localStorage.setItem("usersToTrack",JSON.stringify(o))}}(t,n?"frozen":"thawed"),kt(e,{en:n?"Unfreeze user":"Freeze user",ru:n?"Разморозить пользователя":"Заморозить пользователя"})}))}function Pt(e){const t=document.createElement("div");return t.className=`${e}-item`,t}function Ft(e,t="",n=""){const o=document.createElement("input");return o.className=`settings-field ${e}-field`,o.value=t,o.placeholder=n,o}function _t(e,t){const n=document.createElement("div");return n.className=`settings-button remove-settings-button remove-${e}-word`,n.innerHTML=st,function(e,t){e.addEventListener("click",(()=>{t.remove()}))}(n,t),kt(n,{en:"Remove user",ru:"Удалить пользователя"}),n}function zt(e){const t=Pt("tracked"),n=Ft("tracked-id",e.id||"",Bt("tracked","id")),o=Ft("tracked-username",e.name,Bt("tracked","name"));o.disabled=!0;const s=Ft("tracked-pronunciation",e.pronunciation,Bt("tracked","pronunciation")),r=_t("tracked",t),a=function(e="thawed",t){const n=document.createElement("div");return n.className=`settings-button assigned-settings-button assigned-${e}-config`,n.style.opacity="thawed"===e?"0.3":"1",n.innerHTML=at,Ht(n,t),kt(n,{en:"thawed"===e?"Freeze user":"Unfreeze user",ru:"thawed"===e?"Заморозить пользователя":"Разморозить пользователя"}),n}("frozen"===e.state?"frozen":"thawed",e.name),i={en:`Username has changed. Previous name: ${e.name}`,ru:`Имя пользователя изменилось. Прошлое имя: ${e.name}`};if(n.addEventListener("input",te((async function(e){const t=e.target.value.trim();if(t){const e=await F(t,"currentLogin");e?(o.value=e,o.placeholder=Bt("tracked","name")):(o.value="",o.placeholder=Bt("tracked","notFoundName"))}else o.value="",o.placeholder=Bt("tracked","name")}),500)),(!e.id||""===e.id)&&e.name&&""!==e.name.trim()){const e=o.value.trim();e&&P(e,"userId").then((e=>{e&&""===n.value.trim()&&(n.value=e,n.dispatchEvent(new Event("input",{bubbles:!0})))}))}e.id&&F(e.id,"currentLogin").then((t=>{const n=a.parentNode&&a.parentNode.querySelector(".confirm-settings-button");if(t&&t!==e.name){if(o.value=t,o.placeholder=Bt("tracked","name"),o.classList.add("input-warning"),kt(o,i[pe()]||i.en),!n){const t=function(e,t){const n=document.createElement("div");return n.className="settings-button confirm-settings-button",n.innerHTML=rt,kt(n,{en:"Confirm username change",ru:"Подтвердить изменение имени"}),n.addEventListener("click",(()=>{let o=[];try{o=JSON.parse(localStorage.getItem("usersToTrack"))||[]}catch{}const s=n.closest(".tracked-item"),r=s&&s.querySelector(".tracked-username-field"),a=r&&r.value,i=o.findIndex((t=>t.id===e.id));-1!==i&&a&&(o[i].name=a,localStorage.setItem("usersToTrack",JSON.stringify(o)),r.classList.remove("input-warning"),r&&Et(r)),n.remove(),"function"==typeof t&&t()})),n}(e);a.insertAdjacentElement("afterend",t)}}else o.classList.remove("input-warning"),Et(o),n&&n.remove()}));const l=document.createElement("select");l.className="tracked-gender-select";return[{value:"Male",emoji:"👨"},{value:"Female",emoji:"👩"}].forEach((({value:t,emoji:n})=>{const o=document.createElement("option");o.value=t,o.textContent=`${n} ${t}`,e.gender===t&&(o.selected=!0),l.appendChild(o)})),t.appendChild(n),t.appendChild(o),t.appendChild(l),t.appendChild(s),t.appendChild(r),t.appendChild(a),t}function Rt(e,t,n,o=!1){if(o)try{n[t]||(n[t]={}),n[t].change="user",n[t].changeDate=Date.now(),localStorage.setItem("userData",JSON.stringify(n));const o=e.closest(".settings-userColors-items-container");o&&o.firstChild!==e&&o.insertBefore(e,o.firstChild)}catch(e){}const s=e.querySelector(".userColors-header-row");if(s&&!s.querySelector(".userColors-user-badge")){const e=document.createElement("span");e.className="userColors-user-badge",e.innerHTML=ut,s.appendChild(e)}}const Ut=[{emoji:"👀",description:"Show chat static notifications",image:"https://i.imgur.com/oUPSi9I.jpeg",category:"notifications",type:"static"},{emoji:"👀",description:"Show global dynamic notifications",image:"https://i.imgur.com/8ffCdUG.jpeg",category:"notifications",type:"dynamic"},{emoji:"🔊",description:"Play sound and voice notifications, messages only when the tab is inactive",image:"https://i.imgur.com/6PXFIES.jpeg",category:"sound",type:"activity"},{emoji:"🔊",description:"Play a beep sound and speak feedback when the user enters or leaves the chat",image:"https://i.imgur.com/6PXFIES.jpeg",category:"sound",type:"presence"},{emoji:"🔊",description:"Switch to google TTS engine if available",image:"https://i.imgur.com/0H94LII.jpeg",category:"sound",type:"gTTS"},{emoji:"📦️",description:"Create participants counter",image:"https://i.imgur.com/rqIVAgH.jpeg",category:"elements",type:"counter"},{emoji:"🌐",description:"Interface language",image:"",category:"ui",type:"language",languages:[{value:"en",label:"🇬🇧 English"},{value:"ru",label:"🇷🇺 Русский"}]}],Jt=[{type:"tracked",emoji:"👀",key:"usersToTrack",selector:".settings-tracked-container",creator:zt},{type:"mention",emoji:"📢",key:"mentionKeywords",selector:".settings-mention-container",creator:function(e){const t=Pt("mention"),n=Ft("mention",e,Bt("mention")),o=_t("mention",t);return t.appendChild(n),t.appendChild(o),t}},{type:"replacement",emoji:"♻️",key:"usernameReplacements",selector:".settings-replacement-container",creator:function(e={original:"",replacement:""}){const t=Pt("replacement"),n=Ft("replacement-original",e.original,Bt("replacement","find")),o=Ft("replacement",e.replacement,Bt("replacement","replace")),s=_t("replacement",t);return t.appendChild(n),t.appendChild(o),t.appendChild(s),t}},{type:"moderator",emoji:"⚔️",key:"moderator",selector:".settings-moderator-container",creator:function(e){const t=Pt("moderator"),n=Ft("moderator",e,Bt("moderator")),o=_t("moderator",t);return t.appendChild(n),t.appendChild(o),t}},{type:"ignored",emoji:"🛑",key:"ignored",selector:".settings-ignored-container",creator:function(e){const t=Pt("ignored"),n=Ft("ignored",e,Bt("ignored")),o=_t("ignored",t);return t.appendChild(n),t.appendChild(o),t}},{type:"userColors",emoji:"🎨",key:"userData",selector:".settings-userColors-container",creator:function(e,t=null){const n=Pt("userColors");t||(t=JSON.parse(localStorage.getItem("userData")||"{}"));const o=t[e]||{id:"",color:"#808080"},s=n=>{t[e].color=n,localStorage.setItem("userData",JSON.stringify(t))},r=document.createElement("div");r.className="userColors-avatar";const a=o.id||"";let i="";if(a&&(i=E?.fetchedUsers?.[a]?.avatarTimestamp||"",!i))try{const e=JSON.parse(localStorage.getItem("fetchedUsers")||"{}");i=e?.[a]?.avatarTimestamp||""}catch{}if(a){const t=i&&"00"!==i?`/storage/avatars/${a}_big.png?updated=${i}`:`/storage/avatars/${a}_big.png`,n=document.createElement("img");n.alt=`${e}'s avatar`,n.className="userColors-avatar-img",n.onerror=()=>{r.innerHTML="";const e=document.createElement("div");e.className="userColors-avatar-emoji",e.textContent=oe(),r.appendChild(e)},n.src=t,r.appendChild(n)}else{r.innerHTML="";const e=document.createElement("div");e.className="userColors-avatar-emoji",e.textContent=oe(),r.appendChild(e)}const l=document.createElement("span");l.className="userColors-username-display",l.textContent=e,a&&(l.style.cursor="pointer",l.addEventListener("click",(()=>{Ot(`https://klavogonki.ru/u/#/${a}/`)})));const c=Ft("userColors",o.color,Bt("userColors","hex"));Object.assign(c,{pattern:"^#[0-9A-Fa-f]{6}$",maxLength:7}),c.addEventListener("input",(e=>{let t=e.target.value.toUpperCase();t&&!t.startsWith("#")&&(t="#"+t),e.target.value=t,c.classList.toggle("input-warning",!/^#[0-9A-Fa-f]{6}$/.test(t))})),c.addEventListener("change",(r=>{if(/^#[0-9A-Fa-f]{6}$/.test(r.target.value)){const a=r.target.value;if(a===(t[e]&&t[e].color||o.color))return void(u&&(u.style.backgroundColor=a));s(a),Rt(n,e,t,!0),u&&(u.style.backgroundColor=a)}}));const d=document.createElement("input");d.type="color",d.className="userColors-color-input-hidden",d.value=o.color,d.style.display="none";const u=document.createElement("div");u.className="userColors-color-swatch",u.style.backgroundColor=o.color,u.addEventListener("click",(()=>{d.click()})),d.addEventListener("change",(r=>{const a=r.target.value,i=t[e]&&t[e].color||o.color;c.value=a,c.classList.remove("input-warning"),u.style.backgroundColor=a,a!==i&&(s(a),Rt(n,e,t,!0))}));const m=document.createElement("div");m.className="settings-button remove-settings-button remove-userColors-item",m.innerHTML=st,m.addEventListener("click",(()=>{delete t[e],localStorage.setItem("userData",JSON.stringify(t)),n.remove()})),kt(m,{en:"Remove user color",ru:"Удалить цвет пользователя"});const p=document.createElement("div");p.className="userColors-content-wrapper";const g=document.createElement("div");g.className="userColors-controls-row",g.append(c,u,d,m);const h=document.createElement("div");return h.className="userColors-header-row",h.appendChild(r),h.appendChild(l),p.append(h,g),n.appendChild(p),"user"===t[e]?.change&&Rt(n,e,t),n}},{type:"toggle",emoji:"🔘",key:"toggle",selector:".settings-toggle-container",creator:function(e,t,n){const o=Pt("toggle");if("language"===e.type){const s=document.createElement("select");s.className="language-toggle-select",(e.languages||[]).forEach((e=>{const t=document.createElement("option");t.value=e.value,t.textContent=e.label,s.appendChild(t)})),s.value=t;const r=document.createElement("span");return r.className="toggle-description",r.textContent=`${e.emoji} ${n}`,o.appendChild(s),o.appendChild(r),o}const s=document.createElement("select");s.className="toggle-select";const r=document.createElement("span");return r.className="toggle-description",r.dataset.category=e.category,r.dataset.type=e.type,r.textContent=`${e.emoji} ${n}`,r.style.cursor="pointer",r.style.transition="color 0.15s ease-in-out",r.addEventListener("click",(()=>{e.image&&window.open(e.image,"_blank")})),[{value:"yes",emoji:"✔️"},{value:"no",emoji:"❌"}].forEach((({value:e,emoji:t})=>{const n=document.createElement("option");n.value=e,n.textContent=`${t} ${e}`,s.appendChild(n)})),s.value=t,o.appendChild(s),o.appendChild(r),o}}];async function Kt(e){const t=e.target.files[0];if(t){const e=new FileReader;return new Promise(((n,o)=>{e.onload=function(e){const t=e.target.result;try{Vt(JSON.parse(t)),n()}catch(e){console.error("Error parsing JSON data:",e.message),console.error("Invalid JSON:",t),ge({en:"Failed to parse JSON data. Please check the format and try again.",ru:"Не удалось разобрать данные JSON. Пожалуйста, проверьте формат и попробуйте снова."},"alert"),o(e)}},e.onerror=function(e){console.error("Error reading file:",e.target.error),o(e.target.error)},e.readAsText(t)}))}}function Yt(e){if(!e||"object"!=typeof e)return console.error("Invalid settings data for download."),void ge({en:"Cannot export settings. Please try again.",ru:"Не удалось экспортировать настройки. Пожалуйста, попробуйте снова."},"alert");try{const t=" ",n=" ";let o="{\n";Jt.forEach(((s,r)=>{const a=s.key;let i=e[a];if("userData"===a&&i&&"object"==typeof i){const e=Object.entries(i);0===e.length?o+=`${t}"userData": {}`:(o+=`${t}"userData": {\n`,e.forEach((([t,s],r)=>{const a=JSON.stringify(s),i=r{const s=t[e.key,JSON.parse(localStorage.getItem(e.key))||[]])));return e.userData&&(e.userData=Object.fromEntries(Object.entries(e.userData).filter((([e,t])=>"user"===t?.change)))),e}function Vt(e){Jt.forEach((t=>{const n=t.key;if(e.hasOwnProperty(n))if("userData"===n){const t={...JSON.parse(localStorage.getItem("userData")||"{}"),...e[n]};localStorage.setItem("userData",JSON.stringify(t)),void 0!==on[n]&&(on[n]=t)}else Array.isArray(e[n])&&(on[n]=e[n],localStorage.setItem(n,JSON.stringify(e[n])))})),console.log("Settings imported successfully")}let Gt=!1;function Wt(e){const t=document.querySelector(".settings-content-container");if(!t)return console.error("Container not found.");Gt=!1;const n=()=>{e.style.opacity="0",setTimeout((()=>{e.style.visibility="hidden",e.style.display="none"}),300)},o=Xt(),s=()=>{if(!Gt)return;const s={};Jt.forEach((e=>{s[e.key]=[]}));let r=!1;const a={en:"Duplicate: this ID is already used.",ru:"Дубликат: этот ID уже используется."},i=new Map;t.querySelectorAll(".settings-tracked-container .tracked-item").forEach((e=>{const t=e.querySelector(".tracked-id-field"),n=e.querySelector(".tracked-username-field"),o=e.querySelector(".tracked-gender-select"),l=e.querySelector(".tracked-pronunciation-field"),c=e.querySelector(".assigned-thawed-config, .assigned-frozen-config");let d=t?t.value:"";if(t&&d){let e=d.replace(/[^\d]/g,"");e=e.replace(/^\s+/,""),d!==e?(t.value=e,d=e,t.classList.add("input-error"),Y(t),kt(t,{en:"ID must contain digits only.",ru:"ID должен содержать только цифры."})):(t.classList.remove("input-error"),Et(t))}const u=n?n.value.trim():"",m=o?o.value.trim():"",p=l?l.value.trim():"",g=c.classList.contains("assigned-frozen-config")?"frozen":"thawed";if(d)if(i.has(d)){[i.get(d)[0],t].forEach((e=>{e&&(e.classList.add("input-error"),Y(e),e._customTooltipDuplicate||(kt(e,a),e._customTooltipDuplicate=!0))})),i.get(d).push(t),r=!0}else i.set(d,[t]),t.classList.remove("input-error"),Et(t);else t.classList.remove("input-error"),Et(t),t._customTooltipDuplicate&&delete t._customTooltipDuplicate;s.usersToTrack.push({id:d,name:u,gender:m,pronunciation:p,state:g})}));const l=new Set(s.usersToTrack.map((e=>e.name.toLowerCase())));t.querySelectorAll(".settings-mention-container .mention-item").forEach((e=>{const t=e.querySelector(".mention-field"),n=t?t.value.trim():"";if(n&&void 0!==v&&v&&n.toLowerCase()===v.toLowerCase())return t.classList.add("input-error"),Y(t),void kt(t,{en:"You cannot add your own nickname as a mention keyword.",ru:"Нельзя добавить свой собственный ник в ключевые слова упоминаний."});t.classList.remove("input-error"),Et(t),s.mentionKeywords.push(n)})),t.querySelectorAll(".settings-replacement-container .replacement-item").forEach((e=>{const t=e.querySelector(".replacement-original-field"),n=e.querySelector(".replacement-field"),o=t?t.value.trim():"",r=n?n.value.trim():"";if(l.has(o.toLowerCase()))return t.classList.add("input-error"),Y(t),void kt(t,{en:"You cannot create a replacement for a user you are already tracking.",ru:"Нельзя создать замену для пользователя, который уже отслеживается."});t.classList.remove("input-error"),Et(t),s.usernameReplacements.push({original:o,replacement:r})})),t.querySelectorAll(".settings-moderator-container .moderator-item").forEach((e=>{const t=e.querySelector(".moderator-field"),n=t?t.value.trim():"";s.moderator.push(n)})),t.querySelectorAll(".settings-ignored-container .ignored-item").forEach((e=>{const t=e.querySelector(".ignored-field"),n=t?t.value.trim():"";s.ignored.push(n)})),t.querySelectorAll(".settings-toggle-container .toggle-item").forEach((e=>{const t=e.querySelector("select");if(t.classList.contains("language-toggle-select"))s.toggle.push({category:"ui",type:"language",option:t.value});else if(t.classList.contains("toggle-select")){const n=e.querySelector(".toggle-description"),o=t.value.trim()||"no";s.toggle.push({category:n.dataset.category,type:n.dataset.type,option:o})}}));if(!s.toggle.some((e=>"language"===e.type))){const e=o.toggle?.find((e=>"language"===e.type));e&&s.toggle.push(e)}return JSON.stringify(o)!==JSON.stringify(s)&&!r?(e.style.visibility="visible",e.style.display="flex",setTimeout((()=>{e.style.opacity="1"}),10)):n(),s};e.addEventListener("click",(()=>{const e=s();Vt(e),Object.assign(o,e),n()})),t.querySelectorAll("input, select").forEach((e=>{e.addEventListener("input",s)}));let r;new MutationObserver(te((e=>{if(!Gt)return clearTimeout(r),void(r=setTimeout((()=>{Gt=!0}),300));e.forEach((e=>{"childList"===e.type&&(e.addedNodes.forEach((e=>{var t;e.nodeType===Node.ELEMENT_NODE&&("INPUT"===(t=e).tagName||"SELECT"===t.tagName?t.addEventListener("input",s):t.querySelectorAll("input, select").forEach((e=>{e.addEventListener("input",s)})))})),e.removedNodes.forEach((e=>{e.nodeType===Node.ELEMENT_NODE&&s()})))}))}),300)).observe(t,{childList:!0,subtree:!0})}function Zt(){Jt.forEach((e=>{const t=document.querySelector(e.selector);if(t){const e=t.querySelector(".add-settings-button");t.replaceChildren(),e&&t.appendChild(e)}}))}function Qt(){const e=Xt(),t=document.querySelector(".settings-content-container");t.innerHTML="",Jt.forEach((n=>{const{key:o,creator:s,type:r}=n;let a;if("userColors"===r){const e=JSON.parse(localStorage.getItem("userData")||"{}");if(!e||0===Object.keys(e).length)return;a=function(e,t){const n=document.createElement("div");n.className="settings-userColors-container",n.classList.add("settings-container");let o=Object.keys(e);o.sort(((t,n)=>{const o=e[t]&&"user"===e[t].change,s=e[n]&&"user"===e[n].change;if(o&&s){const o=e[t].changeDate||0,s=e[n].changeDate||0;return o!==s?s-o:t.localeCompare(n)}return o!==s?o?-1:1:t.localeCompare(n)}));const s=document.createElement("div");s.className="userColors-search-container";const r=document.createElement("input");r.type="search",r.className="settings-field userColors-search-field",r.placeholder=jt.placeholderTitles.userColors?.search?.[pe()]||"Search",s.appendChild(r);const a=document.createElement("div");a.className="settings-button remove-settings-button clear-userData-button",a.innerHTML=st,kt(a,{en:"\n [Click] Remove unsaved user colors\n [Ctrl + Click] Remove ALL user colors\n ",ru:"\n [Клик] Удалить несохранённые цвета пользователей\n [Ctrl + Клик] Удалить все цвета пользователей\n "}),s.appendChild(a),n.appendChild(s);const i=document.createElement("div");i.className="settings-userColors-items-container",o.forEach((n=>{const o=t(n,e);o&&o instanceof HTMLElement&&(o.dataset.username=n),i.appendChild(o)})),n.appendChild(i),a.addEventListener("click",(e=>{const t=pe(),n=e.ctrlKey||e.metaKey;if(!confirm(n?jt.actionTitles?.userColors?.confirmAll?.[t]:jt.actionTitles?.userColors?.confirm?.[t]))return;let o={};try{o=JSON.parse(localStorage.getItem("userData")||"{}")}catch(e){o={}}if(n){try{localStorage.removeItem("userData")}catch(e){}i.querySelectorAll(".userColors-item").forEach((e=>e.remove()))}else{try{Object.keys(o).forEach((e=>{o[e]&&"user"===o[e].change||delete o[e]})),localStorage.setItem("userData",JSON.stringify(o))}catch(e){}i.querySelectorAll(".userColors-item").forEach((e=>{const t=e.dataset.username;t&&(o[t]&&"user"===o[t].change||e.remove())}))}}));const l=te((e=>{const t=(e.target.value||"").trim().toLowerCase();i.querySelectorAll(".userColors-item").forEach((e=>{const n=(e.dataset.username||"").toLowerCase();""===t||n.includes(t)?e.classList.remove("userColors-hidden"):e.classList.add("userColors-hidden")}))}),150);return r.addEventListener("input",l),n}(e,s)}else if("toggle"!==r){a=document.createElement("div"),a.className=`settings-${r}-container`,a.classList.add("settings-container");(e[o]||[]).forEach((e=>a.appendChild(s(e))));const t=function(e,t){const n=e.split("-")[1],o=document.querySelector(`.add-${n}-item`);o&&o.remove();const s=document.createElement("div");return s.className=`settings-button add-settings-button add-${n}-item`,s.innerHTML=it,kt(s,{en:"Add new user",ru:"Добавить пользователя"}),s.addEventListener("click",(()=>{const o=document.querySelector(e),r=o.querySelectorAll(`.${n}-item`),a=r.length>0?r[r.length-1]:null,i=a?a.querySelectorAll("input"):[],l=Array.from(i).some((e=>0===e.value.trim().length));if(a&&l)ge({en:"Please fill in the previous field before adding a new one.",ru:"Пожалуйста, заполните предыдущее поле перед добавлением нового."},"alert");else{const e=t(t===zt?{name:"",pronunciation:""}:"");e instanceof HTMLElement?o.insertBefore(e,s):console.error("Invalid item created.")}})),s}(`.settings-${r}-container`,s);a.appendChild(t)}else{a=document.createElement("div"),a.className=`settings-${r}-container`,a.classList.add("settings-container");const e=JSON.parse(localStorage.getItem(o))||[],t=pe();Ut.forEach((n=>{let o="yes";if("language"===n.type){const t=e.find((e=>"ui"===e.category&&"language"===e.type));o=t?t.option:"en"}else{const t=e.find((e=>e.category===n.category&&e.type===n.type));o=t?t.option:"yes"}const r=jt.toggleTitles[n.type][t],i=s(n,o,r);a.appendChild(i)}))}const i=function(e,t={}){const n=document.createElement("div");n.classList.add("settings-spoiler");const o=document.createElement("button"),s=t.type,r=pe(),a=Jt.find((e=>e.type===s)),i=a&&a.emoji?a.emoji+" ":"",l=jt.spoilerTitles[s]||jt.spoilerTitles.toggle;return o.textContent=t.showText||i+l[r].show,e.style.display="none",o.addEventListener("click",(()=>{const n="none"===e.style.display;o.textContent=n?t.hideText||i+l[r].hide:t.showText||i+l[r].show,e.style.display=n?"flex":"none"})),n.appendChild(o),n.appendChild(e),n}(a,{type:r,showText:void 0,hideText:void 0});t.appendChild(i)}))}let{panelsEvents:en}=E;const tn=localStorage.getItem("KG_Chat_Empowerment"),nn=tn?JSON.parse(tn):{voiceSettings:{voiceSpeed:1.5,voicePitch:1},messageSettings:{}};tn||localStorage.setItem("KG_Chat_Empowerment",JSON.stringify(nn));const on=Object.fromEntries(Jt.map((e=>[e.key,[]])));Jt.forEach((e=>{const t=e.key,n=JSON.parse(localStorage.getItem(t))||[];n.length&&on[t].splice(0,on[t].length,...n)}));const sn=Jt.find((e=>"mention"===e.type));function rn(e){const t=document.createElement("div");t.classList.add("empowerment-button","settings-button"),kt(t,{en:"Open Settings",ru:"Открыть настройки"}),t.style.position="relative",t.innerHTML=He;const n=document.createElement("input");n.type="file",n.accept=".json",n.style.display="none",n.addEventListener("change",Kt),t.addEventListener("click",(e=>{X(t),Tt&&Yt(Xt()),Lt&&n.click(),Tt||Lt||function(){const e=document.querySelector(".settings-panel");if(e)return e.remove(),void It("hide");ee();const t=document.createElement("div");t.className="settings-panel popup-panel",en.handleSettingsKeydown=e=>{"Escape"===e.key&&(Nt(t,"hide"),It("hide"),document.removeEventListener("keydown",en.handleSettingsKeydown))},document.addEventListener("keydown",en.handleSettingsKeydown);const n=document.createElement("div");n.className="panel-header";const o=document.createElement("div");o.classList.add("panel-control-buttons");const s=document.createElement("div");s.className="large-button panel-header-close-button",s.innerHTML=Pe,kt(s,{en:"Close panel",ru:"Закрыть панель"}),s.addEventListener("click",(()=>{Nt(t,"hide"),It("hide")}));const r=document.createElement("div");r.className="large-button panel-header-clear-button",r.innerHTML=Qe,kt(r,{en:"Clear settings",ru:"Очистить настройки"}),r.addEventListener("click",(()=>{Zt()}));const a=document.createElement("div");a.className="large-button panel-header-import-button",a.innerHTML=tt,kt(a,{en:"Import settings",ru:"Импортировать настройки"});const i=document.createElement("div");i.className="large-button panel-header-save-button",i.innerHTML=ot,kt(i,{en:"Save settings",ru:"Сохранить настройки"});const l=document.createElement("input");l.type="file",l.accept=".json",l.style.display="none",l.addEventListener("change",(async e=>{await Kt(e),Zt(),Qt()})),a.addEventListener("click",(()=>{l.click()})),a.appendChild(l);const c=document.createElement("div");c.className="large-button panel-header-export-button",c.innerHTML=nt,kt(c,{en:"Export settings",ru:"Экспортировать настройки"}),c.addEventListener("click",(function(){Yt(Xt())})),o.append(i,a,c,r,s),n.appendChild(o),t.appendChild(n);const d=document.createElement("div");d.className="settings-content-container",Jt.forEach((({type:e})=>{const t=document.createElement("div");t.className=`settings-${e}-container`,d.appendChild(t)})),t.appendChild(d);const{scrollButtonsContainer:u}=Dt(d);t.appendChild(u),document.body.appendChild(t),Qt(),Wt(i),Nt(t,"show"),It("show")}()})),t.appendChild(n),e.appendChild(t)}void 0!==v&&v&&sn&&on[sn.key].push(v);const{ignored:an,mentionKeywords:ln,usernameReplacements:cn,usersToTrack:dn}=on;function un(e){const t=e.toLowerCase();return ln.some((e=>t.includes(e.toLowerCase())))}function mn(e){if(null===e)return e;const t=[...dn.map((e=>e.name)),...cn.map((e=>e.original))],n=new RegExp(`(${t.join("|")})`,"gu");return e.replace(n,(e=>{const t=cn.find((t=>t.original===e));if(t)return t.replacement;const n=dn.find((t=>t.name===e));return n?.pronunciation||e}))}function pn(e="generalMessages"){const t={generalMessages:{container:".messages-content div",messageElement:"p",exclude:[".time",".username"]},chatlogsMessages:{container:".chat-logs-container",messageElement:".message-text"},personalMessages:{container:".messages-container",messageElement:".message-text"}}[e];if(!t)return void console.error("Invalid container type");const n=document.querySelectorAll(t.container),o=new WeakSet;n.forEach((n=>{n.querySelectorAll(t.messageElement).forEach((n=>{[...n.querySelectorAll(".private"),...n.querySelectorAll(".system-message"),n].forEach((n=>{const s=document.createTreeWalker(n,NodeFilter.SHOW_TEXT,{acceptNode:n=>{if(o.has(n))return NodeFilter.FILTER_SKIP;const s=n.parentElement;return s.closest(".mention, .time, .username")||"generalMessages"===e&&s.closest(t.exclude.join(","))?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT}},!1),r=[];let a;for(;a=s.nextNode();)r.push(a);r.forEach((e=>{o.has(e)||(!function(e){const t=/[\s]+|[^\s\wа-яА-ЯёЁ]+|[\wа-яА-ЯёЁ]+/g,n=e.textContent.match(t);if(!n)return;const o=document.createDocumentFragment();n.forEach((e=>{if(ln.map((e=>e.toLowerCase())).includes(e.toLowerCase())){const t=document.createElement("span");t.className="mention",t.textContent=e,o.appendChild(t)}else o.appendChild(document.createTextNode(e))})),e.parentNode.replaceChild(o,e)}(e),o.add(e))}))}))}))}))}let gn=null;async function hn(){const e=document.querySelector(".messages-content div p:last-of-type");if(!e)return null;const t=async e=>Array.from(e.childNodes).map((e=>e.nodeType===Node.TEXT_NODE&&e.textContent.trim()?e.textContent.trim():"IMG"===e.nodeName&&e.getAttribute("title")?e.getAttribute("title"):"A"===e.nodeName&&e.getAttribute("href")?e.getAttribute("href"):"")).filter(Boolean);let n=(await t(e)).join(" ").trim(),o="common";const s=e.querySelector(".room.private");if(s&&s.textContent.includes("[шепчет ")){const s=e.querySelector("span.private");s&&(n=(await t(s)).join(" ").trim(),o="private")}const r=e.querySelector(".system-message");if(r){let e=(await t(r)).join(" ").trim();e=e.replace(/<Клавобот>\s*/g,""),n=e,o="system"}"common"===o&&un(n)&&(o="mention");const a=JSON.parse(localStorage.getItem("personalMessages"))||{},i=e.querySelector(".time")?.textContent||"N/A",l=e.querySelector(".username span[data-user]"),c=l?l.getAttribute("data-user"):null,d=l?l.textContent:"SYSTEM",u=U(l?l.parentElement.style.color:"rgb(180,180,180)","rgb"),m=`${i}_${d}_${x}`;if(("mention"===o||"private"===o)&&!an.includes(d)){a[m]={time:i,date:x,username:d,usernameColor:u,message:n,type:o,userId:c},localStorage.setItem("personalMessages",JSON.stringify(a));const e=`${x}|${i}|${d}`;localStorage.setItem("lastClickedMessage",e)}const p=e.querySelector(".username"),g=p?p.textContent.replace(/[<>]/g,""):"SYSTEM";pn();let h="mention"===o||"private"===o?`${mn(g)} обращается: `:g!==gn?`${mn(g)} пишет: `:"";gn=g;return{messageText:h+mn(n),usernameText:g}}function fn(e){return/^https?:\/\//.test(e)&&/%[0-9A-Fa-f]{2}/.test(e)}function yn(e){const[t]=e.split("#");return decodeURIComponent(t).replace(/ /g,"_")}function vn(e){document.querySelector({generalMessages:".messages-content div",chatlogsMessages:".chat-logs-container",personalMessages:".messages-container-wrapper"}[e])?.querySelectorAll("a:not(.media):not(.decoded)").forEach((e=>{try{if(fn(e.href)){let t=yn(e.href);e.href=e.textContent=t,e.classList.add("decoded")}}catch(t){console.error("Error decoding link:",t,e.href)}}))}var bn=n(365),xn={};xn.styleTagTransform=g(),xn.setAttributes=d(),xn.insert=l().bind(null,"head"),xn.domAPI=a(),xn.insertStyleElement=m();s()(bn.A,xn);bn.A&&bn.A.locals&&bn.A.locals;const wn={online:"✅",offline:"🛑",rankSpeed:"🚀",ratingLevel:"⭐",carsCount:"🚖",friendsCount:"🤝",visitsCount:"👁️",alpha:"🅰️",registered:"📅"};function Cn(e,t,n,o,s,r){let a="rankSpeed",i=null;const l=document.createElement("div");l.className="sort-buttons-container";function c(){var i;e.sort((i=a,(e,t)=>{if("online"===i){if(e.sortData.isOnline&&!t.sortData.isOnline)return-1;if(!e.sortData.isOnline&&t.sortData.isOnline)return 1}else if("offline"===i){if(!e.sortData.isOnline&&t.sortData.isOnline)return-1;if(e.sortData.isOnline&&!t.sortData.isOnline)return 1}else if("ratingLevel"===i){if(e.sortData.ratingLevel!==t.sortData.ratingLevel)return t.sortData.ratingLevel-e.sortData.ratingLevel}else if("carsCount"===i){if(e.sortData.cars!==t.sortData.cars)return t.sortData.cars-e.sortData.cars}else if("friendsCount"===i){if(e.sortData.friends!==t.sortData.friends)return t.sortData.friends-e.sortData.friends}else if("visitsCount"===i){if(e.sortData.visits!==t.sortData.visits)return t.sortData.visits-e.sortData.visits}else{if("alpha"===i){const n=e=>/^[\u0400-\u04FF]/.test(e)?0:/^[A-Za-z]/.test(e)?1:2,o=n(e.userElement.querySelector(".login")?.textContent||""),s=n(t.userElement.querySelector(".login")?.textContent||"");if(o!==s)return o-s;const r=(e.userElement.querySelector(".login")?.textContent||"").toLocaleLowerCase(),a=(t.userElement.querySelector(".login")?.textContent||"").toLocaleLowerCase();return r.localeCompare(a)}if("registered"===i)return new Date(e.registered)-new Date(t.registered)}return e.sortData.order!==t.sortData.order?e.sortData.order-t.sortData.order:t.sortData.bestSpeed-e.sortData.bestSpeed})),t.replaceChildren(),n.replaceChildren(),t.appendChild(s),n.appendChild(r),e.forEach((({userElement:e,registered:s})=>{(o(s)?n:t).appendChild(e)}))}return["online","offline","rankSpeed","ratingLevel","carsCount","friendsCount","visitsCount","alpha","registered"].forEach((t=>{const n=document.createElement("button");n.className=`sort-button ${t}`,n.textContent=wn[t],n.dataset.mode=t,n.addEventListener("click",(()=>{if("online"===t||"offline"===t){if(e.some((e=>e.userElement.querySelector(".present-marker.waiting"))))return void ge({en:"Some user statuses are still loading.",ru:"Статусы некоторых пользователей ещё загружаются."})}i&&i.classList.remove("active"),n.classList.add("active"),i=n,a=t,c()})),t===a&&(n.classList.add("active"),i=n),l.appendChild(n)})),c(),l}async function Sn(e,t=!0){let n=t&&JSON.parse(localStorage.getItem("fetchedUsers"))||{};const o=n[e];if(t&&function(e){return e&&"object"==typeof e&&["rank","login","registered","bestSpeed","ratingLevel","friends","cars","avatarTimestamp"].every((t=>void 0!==e?.[t]))}(o))return{rank:o.rank,login:o.login,registeredDate:o.registered,bestSpeed:o.bestSpeed,ratingLevel:o.ratingLevel,friends:o.friends,cars:o.cars,avatar:o.avatar,avatarTimestamp:o.avatarTimestamp};try{const[o,s]=await Promise.all([F(e,"allUserData"),F(e,"allIndexData")]);if(!o||!s)throw new Error("Invalid data format received from the API.");const r=o.title||(o.status?.title??null),a=o.login||null,i=q(s.stats?.registered),l=s.stats?.best_speed||0,c=s.stats?.rating_level||0,d=s.stats?.friends_cnt||0,u=s.stats?.cars_cnt||0,m=o.avatar||null,p=m?.sec||0,g=m?.usec||0,h=null!=p&&null!=g?D(p,g):null;if(a&&r&&i)return t&&(n[e]={rank:r,login:a,registered:i,bestSpeed:l,ratingLevel:c,friends:d,cars:u,avatar:m,avatarTimestamp:h},localStorage.setItem("fetchedUsers",JSON.stringify(n))),{rank:r,login:a,registeredDate:i,bestSpeed:l,ratingLevel:c,friends:d,cars:u,avatar:m,avatarTimestamp:h};throw new Error("Invalid data format received from the API.")}catch(t){throw console.error(`Error fetching user profile data for ${e}:`,t),t}}function kn(e,t){const n=document.createElement("div");n.className="user-item";const o=document.createElement("div");o.className="avatar";const s=t.avatarTimestamp,r=`/storage/avatars/${e}_big.png`;if(s&&"00"!==s||t.avatar&&Object.keys(t.avatar).length){const e=document.createElement("img");e.src=`${r}?updated=${s}`,e.alt=`${t.login}'s avatar`,e.style.objectFit="cover",o.appendChild(e)}else o.innerHTML=oe();const a=document.createElement("div");a.className="user-data";const i=document.createElement("div");i.className="login-container";const l=document.createElement("span");l.className="present-marker waiting";const c={isOnline:null,ratingLevel:t.ratingLevel,cars:t.cars,friends:t.friends,bestSpeed:t.bestSpeed||0,order:T[t.rank]||10,visits:void 0!==t.visits?t.visits:0};F(e,"isOnline").then((e=>{l.classList.remove("waiting"),l.className="present-marker "+(e?"online":"offline"),c.isOnline=e})).catch((()=>{console.error(`Failed to fetch online status for user ${e}`),l.classList.remove("waiting"),l.className="present-marker offline",c.isOnline=!1})),i.appendChild(l);const d=document.createElement("a");if(d.className="login",d.textContent=t.login,d.href=`https://klavogonki.ru/profile/${e}`,i.appendChild(d),void 0!==t.visits){const n=document.createElement("span");n.className="visits "+(t.tracked?"tracked":"untracked"),n.textContent=t.visits,n.dataset.userId=e,function(e){const t=Number(e.textContent);if(isNaN(t))return console.warn("Invalid visits count!");const n=t<=10?"💧":t<=20?"💦":t<=30?"🌊":"🔥";e.textContent=`${n} ${t}`}(n),i.appendChild(n)}a.appendChild(i);const u=document.createElement("div");u.className="rank",u.textContent=t.rank||"N/A",u.style.color=M[t.rank]||"white",a.appendChild(u);const m=document.createElement("div");m.className="registered",m.textContent=t.registered||"N/A",a.appendChild(m);const p=(e,t,n,o,s,r)=>{const a=document.createElement("span");return a.className=e,a.style.color=t,a.innerHTML=`${n}${o||0}`,a.style.cursor="pointer",a.dataset.url=r,a},g=document.createElement("div");return g.className="user-metrics",g.append(p("best-speed","cyan","🚀",t.bestSpeed,0,`https://klavogonki.ru/u/#/${e}/stats/normal/`),p("rating-level","gold","⭐",t.ratingLevel,0,`https://klavogonki.ru/top/rating/today?s=${t.login}`),p("cars-count","lightblue","🚖",t.cars,0,`https://klavogonki.ru/u/#/${e}/car/`),p("friends-count","lightgreen","🤝",t.friends,0,`https://klavogonki.ru/u/#/${e}/friends/list/`)),n.append(o,a,g),{userElement:n,sortData:c,registered:t.registered}}const En=pe();function $n(e){const t=document.createElement("div");return"old"===e?t.className="users-container old-users":"new"===e?t.className="users-container new-users":"search"===e&&(t.className="users-container search-results"),t}function Ln(e,t){const n=document.createElement("span");return n.className=`description ${t}`,n.textContent=e,n}async function Tn(e,t=kn){const n=document.querySelector(".old-users"),o=document.querySelector(".new-users"),s=document.querySelector(".fetched-users");if(e){n.style.display="none",o.style.display="none";let r=document.querySelector(".search-results")||$n("search");r.parentElement||s.appendChild(r),r.replaceChildren();const a=[];try{const n=await async function(e){try{const t=`https://klavogonki.ru/api/profile/search-users?query=${e}`,n=await j(t);return n.all?.length?n.all.map((e=>e.id)):[]}catch(e){return console.error("Error getting user IDs:",e),[]}}(e);await Promise.all(n.map((async e=>{const n=await Sn(e,!1),o={rank:n.rank,login:n.login,registered:n.registeredDate,bestSpeed:n.bestSpeed,ratingLevel:n.ratingLevel,friends:n.friends,cars:n.cars,avatarTimestamp:n.avatarTimestamp,avatar:n.avatar},s=t(e,o);s&&a.push(s)}))),a.sort(((e,t)=>e.sortData.order!==t.sortData.order?e.sortData.order-t.sortData.order:t.sortData.bestSpeed-e.sortData.bestSpeed));const o="ru"===En?"Результаты поиска для:":"Search Results for:";let s=document.querySelector(".search-results-info");s||(s=document.createElement("div"),s.className="search-results-info"),s.textContent=`${o} ${e}`,r.appendChild(s),a.forEach((({userElement:e})=>r.appendChild(e)))}catch(e){console.error("Error fetching user profile:",e);const t=document.createElement("div");t.className="error-message-info",t.textContent=`Error: ${e.message}`,r.appendChild(t)}}}let Mn=pe();const Nn="🙌",In="❌",An="✅",qn="🛑";function Dn(e,t){const n=Object.values(JSON.parse(localStorage.getItem("fetchedUsers")||"[]")).find((t=>t?.login===e));if(!n)return;const o=n.actionLog||[],s=o.find((e=>e.timestamp===t));if(!s)return;const r=o.indexOf(s);if(0===r)return"en"===Mn?`${Nn} ${e}'s first action`:`${Nn} ${e} первое действие`;const a=o.slice(0,r).reverse().find((e=>e.type!==s.type));if(!a)return"en"===Mn?`${In} No valid previous action found for ${t}`:`${In} Не найдено предыдущего действия для ${t}`;const i=function(e,t){const n=e=>e.split(":").reduce(((e,t,n)=>e+t*[3600,60,1][n]),0),o=Math.abs(n(t)-n(e));return[Math.floor(o/3600),Math.floor(o%3600/60),o%60].map((e=>e.toString().padStart(2,"0"))).join(":")}(a.timestamp,s.timestamp);return"leave"===s.type?"en"===Mn?`${qn} ${e} stayed in chat for ${i}`:`${qn} ${e} присутствовал в чате ${i}`:"en"===Mn?`${An} ${e} was absent from chat for ${i}`:`${An} ${e} отсутствовал в чате ${i}`}function jn(e,t){const n=t.getBoundingClientRect(),o=e.getBoundingClientRect();return o.top>=n.top&&o.bottom<=n.bottom}function On(e="generalMessages",t=600){const n={generalMessages:".messages-content",chatlogsMessages:".chat-logs-container",personalMessages:".messages-container-wrapper"}[e];if(!n)return;const o=document.querySelector(n);if(o)if(void 0===On.firstTime&&(On.firstTime=!0),On.firstTime)o.scrollTop=o.scrollHeight,On.firstTime=!1;else{o.scrollHeight-o.scrollTop-o.clientHeight<=t&&(o.scrollTop=o.scrollHeight)}}async function Bn(e,t){const{top:n,height:o}=t.getBoundingClientRect(),{top:s,height:r}=e.getBoundingClientRect(),a=n-(s+r/2)+o/2;e.scrollBy({top:a,behavior:"smooth"}),await new Promise((e=>setTimeout(e,500))),e.style.scrollBehavior="auto";const i=e.querySelector(".focused-message");i&&i.classList.remove("focused-message"),Y(t),t.classList.add("focused-message")}const{usersToTrack:Hn}=on,Pn=e=>new Promise((t=>setTimeout(t,e)));let Fn=null,_n=null,zn=null;function Rn(e){const t=document.createElement("span");return t.classList.add("action-icon"),t.style.margin="0 4px",t.style.setProperty("border","none","important"),t.innerHTML=e,t}function Un(e,t){if(Fn&&clearTimeout(Fn),!t)return _n&&clearTimeout(_n),void(_n=setTimeout((()=>{document.querySelectorAll(".static-chat-notification").forEach((e=>e.classList.toggle("dimmed",!1))),zn=null}),3e3));const n=e.dataset.username;zn!==n&&(Fn=setTimeout((()=>{_n&&clearTimeout(_n),zn=n,document.querySelectorAll(".static-chat-notification").forEach((e=>{e.classList.toggle("dimmed",e.dataset.username!==n)}))}),300))}function Jn(e,t,n,o,s){const r={generalChat:".messages-content div",cachePanel:".fetched-users .action-log"}[s];if(!r)return void console.error("Invalid or missing container. Please provide 'generalChat' or 'cachePanel'.");const a=document.querySelector(r);if(!a)return void console.error("Container not found in DOM.");a.classList.add("generalChat"===s?"static-chat-notifications-container":"static-cache-notifications-container");const i=document.createElement("span");i.classList.add("static-chat-notification"),"generalChat"===s&&i.addEventListener("dblclick",(()=>{!async function(e=40,t=600,n=140){const o=document.querySelector(".messages-content");if(!o)return;const s=o.style.scrollBehavior;o.style.scrollBehavior="smooth";const r=[...document.querySelectorAll(".static-chat-notification")].reverse();for(const s of r){!jn(s,o)&&(o.scrollTop=s.offsetTop-o.offsetTop-o.clientHeight/2,await Pn(t)),Object.assign(s.style,{transition:[`opacity ${n/1e3}s cubic-bezier(.3,.1,1,.1)`,`transform ${n/1e3}s cubic-bezier(0,.7,.3,0.95)`].join(","),opacity:0,transformOrigin:"left",transform:"translateX(8em) skewX(-20deg)"}),await Pn(n),s.remove(),await Pn(e)}o.scrollHeight-o.scrollTop<=o.clientHeight||(o.scrollTop=o.scrollHeight,await Pn(t));o.style.scrollBehavior=s}()}));const l=document.createElement("span");l.classList.add("action-user"),l.textContent=e;const c=Rn(t),d=document.createElement("span");d.classList.add("action-time"),d.textContent=n,i.appendChild(l),i.appendChild(c),i.appendChild(d),i.dataset.username=e,i.dataset.time=n,o?i.classList.add("user-enter"):i.classList.add("user-left"),a.appendChild(i),i.addEventListener("mouseenter",(()=>{Un(i,!0);const e=Dn(i.dataset.username,i.dataset.time);kt(i,e)})),i.addEventListener("mouseleave",(()=>{Un(i,!1)}))}const Kn=[];let Yn=!1;function Xn(){if(0===Kn.length)return void(Yn=!1);Yn=!0;const{user:e,iconType:t,time:n,presence:o}=Kn.shift();!function(e,t,n,o){let s=document.querySelector(".dynamic-chat-notifications-container");s||(s=document.createElement("div"),s.classList.add("dynamic-chat-notifications-container"),document.body.appendChild(s));const r=document.createElement("span");r.classList.add("dynamic-chat-notification");const a=document.createElement("span");a.classList.add("action-user"),a.textContent=e;const i=Rn(t),l=document.createElement("span");l.classList.add("action-time"),l.textContent=n,r.appendChild(a),r.appendChild(i),r.appendChild(l),r.dataset.username=e,r.dataset.time=n,o?r.classList.add("user-enter"):r.classList.add("user-left"),s.appendChild(r),r.addEventListener("mouseover",(()=>{const e=Dn(r.dataset.username,r.dataset.time);kt(r,e)})),setTimeout((()=>{r.style.transform="translateX(0)",setTimeout((()=>{r.style.transform="translateX(-100%)",setTimeout((()=>{s.removeChild(r)}),300)}),5e3)}),300)}(e,t,n,o),setTimeout(Xn,500)}function Vn(e,t,n){const o=Hn.some((t=>t.name===e&&"thawed"===t.state)),s=o&&se("notifications","static"),r=se("notifications","dynamic");if(!s&&!r)return;const a=re();s&&o&&(Jn(e,t,a,n,"generalChat"),On("generalMessages",350)),r&&function(e,t,n,o){Kn.push({user:e,iconType:t,time:n,presence:o}),Yn||Xn()}(e,t,a,n)}function Gn(e){e.addEventListener("click",(t=>{const n=t.target.closest(".best-speed, .rating-level, .cars-count, .friends-count");if(n){const e=n.dataset.url;return void(e&&Ot(e))}const o=t.target.closest(".login");if(o){t.preventDefault();const e=o.href.split("/").pop(),n=y+e,s=`${y}${b}/messages/${e}/`;if(t.ctrlKey&&t.shiftKey){const e=window.open(s,"_blank");e&&e.focus()}else t.ctrlKey?Ot(s):Ot(n);return}const s=t.target.closest(".visits");if(s){t.stopPropagation();let n=!0;const o=s.dataset.userId,r=(JSON.parse(localStorage.getItem("fetchedUsers"))||{})[o],a=r?.actionLog;if(r){let t=document.querySelector(".action-log");t?t.replaceChildren():(t=document.createElement("div"),t.className="action-log",e.appendChild(t),Mt(t,"show",1)),a&&n&&a.forEach(((e,t)=>{if(!n||"object"!=typeof e||!e)return;const{type:o,timestamp:r}=e,a=s.closest(".user-item").querySelector(".login").textContent||"Unknown User",i="enter"===o?be:xe,l="enter"===o;setTimeout((()=>{n&&Jn(a,i,r,l,"cachePanel")}),10*(t+1))}));const o=e=>{t.contains(e.target)&&"Space"!==e.code||("Space"===e.code&&e.preventDefault(),Mt(t,"hide",0),n=!1,["click","keydown"].forEach((e=>document.removeEventListener(e,o))))};["click","keydown"].forEach((e=>document.addEventListener(e,o)))}else console.error("User data not found")}})),e.addEventListener("mouseover",(t=>{const n=t.target.closest(".registered");n&&e.contains(n)&&(n._originalContent=n.textContent,n._hoverTimer=setTimeout((()=>{const e=n.closest(".user-item"),t=e?.querySelector(".login"),o=t?.href?.split("/").pop(),s=(JSON.parse(localStorage.getItem("fetchedUsers"))||{})[o]||{registered:n.textContent};n.textContent=function(e){const t=Math.floor((new Date-new Date(e))/1e3),n=Math.floor(t/31536e3),o=Math.floor(t%31536e3/(30.44*24*60*60)),s=Math.floor(t%(30.44*24*60*60)/86400),r=Math.floor(t%86400/3600),a=Math.floor(t%3600/60),i=t%60,l=[];n>0?(l.push(`${n} year${n>1?"s":""}`),o>0&&l.push(`${o} month${o>1?"s":""}`)):o>1||1===o&&s>0?(l.push(`${o} month${o>1?"s":""}`),s>0&&l.push(`${s} day${s>1?"s":""}`)):s>0?(l.push(`${s} day${s>1?"s":""}`),r>0&&l.push(`${r} hour${r>1?"s":""}`),a>0&&l.push(`${a} minute${a>1?"s":""}`)):r>0?(l.push(`${r} hour${r>1?"s":""}`),a>0&&l.push(`${a} minute${a>1?"s":""}`)):a>0?(l.push(`${a} minute${a>1?"s":""}`),i>0&&l.push(`${i} second${i>1?"s":""}`)):l.push(`${i} second${i>1?"s":""}`);return l.filter(Boolean).join(" ")}(s.registered)}),300))})),e.addEventListener("mouseout",(t=>{const n=t.target.closest(".registered");n&&e.contains(n)&&(clearTimeout(n._hoverTimer),n._originalContent&&(n.textContent=n._originalContent))}))}const Wn={icon:"🚧",en:"Threshold",ru:"Порог"},Zn={icon:"💣",en:"Countdown",ru:"Обратный отсчёт"},Qn=pe();function eo(){const e=document.querySelector(".cached-users-panel");if(e)return e.remove(),void It("hide");ee();let t=JSON.parse(localStorage.getItem("fetchedUsers"))||{};const n=document.createElement("div");n.className="cached-users-panel popup-panel",E.panelsEvents.handleCacheKeydown=e=>{"Escape"===e.key&&(Nt(n,"hide"),It("hide"),document.removeEventListener("keydown",E.panelsEvents.handleCacheKeydown))},document.addEventListener("keydown",E.panelsEvents.handleCacheKeydown);const o=document.createElement("div");o.className="panel-header";const s=document.createElement("div");s.className="drop-time";const r=document.createElement("span");r.className="drop-time-threshold-description",r.textContent=`${Wn.icon} ${Wn[Qn]}`;const a=document.createElement("span");a.className="drop-time-threshold";const i=localStorage.getItem("cacheRefreshThresholdHours");a.innerHTML=i||"00:00:00",a.addEventListener("click",so),kt(a,{en:"Click to set cache refresh time",ru:"Нажмите, чтобы установить время обновления кэша"});const l=document.createElement("span");l.className="drop-time-expiration-description",l.textContent=`${Zn.icon} ${Zn[Qn]}`;const c=document.createElement("span");c.className="drop-time-expiration",kt(c,{en:"Time until cache refresh",ru:"Время до обновления кэша"}),s.append(r,a,l,c),o.appendChild(s);const d=document.createElement("div");d.className="search-for-cached-users";const u=document.createElement("input");u.className="cached-users-search-input",u.type="text",kt(u,{en:"\n [Ctrl + Click] to clear the input and display all users\n [Enter] to activate user search mode on the site\n ",ru:" \n [Ctrl + Клик] очистить поле и показать всех пользователей\n [Enter] включить режим поиска пользователей на сайте\n "}),d.appendChild(u),u.addEventListener("click",(e=>{e.ctrlKey&&(u.value="",u.dispatchEvent(new Event("input",{bubbles:!0})))})),u.addEventListener("input",(()=>{const e=document.querySelector(".old-users"),t=document.querySelector(".new-users"),n=document.querySelector(".fetched-users");if(!u.value.trim()){e.style.display="grid",t.style.display="grid";const o=document.querySelector(".search-results");o&&n&&n.removeChild(o)}})),u.addEventListener("keydown",(e=>{"Enter"!==e.key||e.target.value.trim()||(e.preventDefault(),e.target.value="user ")})),u.addEventListener("input",te((e=>{const t=e.target.value.trim(),n=localStorage.getItem("cachePanelSearchMode"),o=t.startsWith("user ")?t.substring(5).trim():"fetch"===n?t:"";o&&Tn(o,kn)}),300)),o.appendChild(d);const m=new MutationObserver((e=>{if(e.some((e=>"childList"===e.type&&e.addedNodes.length))){const e=document.querySelector(".cached-users-search-input"),t=Array.from(document.querySelectorAll(".fetched-users .login")),n=(e,t)=>{let n=0,o=0;for(const s of t.toLowerCase())o{t.forEach((t=>{t.closest(".user-item").style.display=!e||n(e,t.textContent)>0?"grid":"none"}))};e.focus(),e.addEventListener("input",(()=>o(e.value.trim()))),m.disconnect()}}));m.observe(o,{childList:!0,subtree:!0});const p=document.createElement("div");p.className="panel-control-buttons",p.style.display="flex";const g=document.createElement("div");g.className="large-button user-mode-button",g.innerHTML=et;const h=localStorage.getItem("cachePanelSearchMode")||(localStorage.setItem("cachePanelSearchMode","cache"),"cache");var f;function y(e){g.classList.toggle("cache-mode-button","cache"===e),g.classList.toggle("fetch-mode-button","cache"!==e)}kt(g,{en:(f=h,`Current active mode: ${f}`),ru:(e=>"Текущий активный режим: "+("cache"===e?"кэш":"поиск"))(h)}),y(h),g.addEventListener("click",(()=>{const e="cache"===localStorage.getItem("cachePanelSearchMode")?"fetch":"cache";localStorage.setItem("cachePanelSearchMode",e),y(e),kt(g,{en:`Current active mode: ${e}`,ru:"Текущий активный режим: "+("cache"===e?"кэш":"поиск")});const t=document.querySelector(".old-users"),n=document.querySelector(".new-users");let o=document.querySelector(".search-results");"fetch"===e?(t.style.display="none",n.style.display="none",o||(o=document.createElement("div"),o.className="users-container search-results",x.appendChild(o)),o.style.display="grid"):(t.style.display="grid",n.style.display="grid",o&&(o.style.display="none"))})),p.appendChild(g);const v=document.createElement("div");v.className="large-button panel-header-clear-button",kt(v,{en:"Clear cache",ru:"Очистить кэш"}),v.innerHTML=Qe,v.addEventListener("click",(()=>{to(),ro(!0,$);const e=document.querySelector(".cache-panel-load-button .cache-user-count");e&&(e.textContent="0")}));const b=document.createElement("div");b.className="large-button panel-header-close-button",kt(b,{en:"Close panel",ru:"Закрыть панель"}),b.innerHTML=Pe,b.addEventListener("click",to),p.append(v,b),o.appendChild(p);const x=document.createElement("div");x.className="fetched-users";const w=$n("old"),C=$n("new"),S=Ln("en"===Qn?"Old Residents":"Постояльцы","old-users-description");w.appendChild(S);const k=Ln("en"===Qn?"New Residents":"Новобранцы","new-users-description");C.appendChild(k),x.append(w,C);const L=[],T=new Date,M=e=>T-new Date(e)<=864e5;"cache"===localStorage.getItem("cachePanelSearchMode")&&(Object.keys(t).forEach((e=>{const n=t[e];L.push(kn(e,n))})),L.sort(((e,t)=>e.sortData.order!==t.sortData.order?e.sortData.order-t.sortData.order:t.sortData.bestSpeed-e.sortData.bestSpeed)),L.forEach((({userElement:e,registered:t})=>{(M(t)?C:w).appendChild(e)})));const N=Cn(L,w,C,M,S,k);n.append(o,N,x);const{scrollButtonsContainer:I}=Dt(x);n.appendChild(I),document.body.appendChild(n),Nt(n,"show"),It("show"),setInterval(ao,1e3),ao(),function(e,t){kt(".sort-button",e,(e=>e.classList.contains("online")?{en:"Sort by online status",ru:"Сортировать по статусу онлайн"}:e.classList.contains("offline")?{en:"Sort by offline status",ru:"Сортировать по статусу оффлайн"}:e.classList.contains("rankSpeed")?{en:"Sort by rank and speed",ru:"Сортировать по рангу и скорости"}:e.classList.contains("ratingLevel")?{en:"Sort by rating level",ru:"Сортировать по уровню рейтинга"}:e.classList.contains("carsCount")?{en:"Sort by cars count",ru:"Сортировать по количеству машин"}:e.classList.contains("friendsCount")?{en:"Sort by friends count",ru:"Сортировать по количеству друзей"}:e.classList.contains("visitsCount")?{en:"Sort by visits count",ru:"Сортировать по количеству посещений"}:e.classList.contains("alpha")?{en:"Sort alphabetically",ru:"Сортировать по алфавиту"}:e.classList.contains("registered")?{en:"Sort by registration date",ru:"Сортировать по дате регистрации"}:void 0)),kt(".waiting,.online,.offline,.login,.visits,.best-speed,.rating-level,.cars-count,.friends-count",t,(e=>{if(e.classList.contains("waiting"))return{en:"Waiting for presence status",ru:"Ожидание статуса присутствия"};if(e.classList.contains("online"))return{en:"Online",ru:"Онлайн"};if(e.classList.contains("offline"))return{en:"Offline",ru:"Оффлайн"};if(e.classList.contains("login"))return{en:" \n [Click] to open profile in iframe (summary)\n [Ctrl + Click] to open profile in iframe (messages)\n [Ctrl + Shift + Click] to open profile in a new tab (messages)\n ",ru:" \n [Клик] открыть профиль в iframe (сводка)\n [Ctrl + Клик] открыть профиль в iframe (сообщения)\n [Ctrl + Shift + Клик] открыть профиль в новой вкладке (сообщения)\n "};if(e.classList.contains("visits")){const t=e.closest(".user-item"),n=t?.querySelector(".login"),o=n?.textContent||"";return{en:`View action log for ${o}`,ru:`Посмотреть журнал действий для ${o}`}}return e.classList.contains("best-speed")?{en:"Best speed",ru:"Лучшая скорость"}:e.classList.contains("rating-level")?{en:"Rating level",ru:"Уровень рейтинга"}:e.classList.contains("cars-count")?{en:"Cars count",ru:"Количество машин"}:e.classList.contains("friends-count")?{en:"Friends count",ru:"Количество друзей"}:{en:"",ru:""}}),!0)}(N,x),Gn(x)}function to(){const e=document.querySelector(".cached-users-panel");e&&(Nt(e,"hide"),It("hide"))}let{fetchedUsers:no}=E;const oo=pe();function so(){let e=!1;for(;!e;){const t=prompt("ru"===oo?"Введите время обновления кэша (например, HH, HH:mm или HH:mm:ss):":"Enter a cache refresh time (e.g., HH, HH:mm, or HH:mm:ss):"),n=document.querySelector(".drop-time-threshold");if(null===t)e=!0;else if(/^([0-9]+|[01][0-9]|2[0-4])(:([0-5]?[0-9])(:([0-5]?[0-9]))?)?$/.test(t)){const[o,s="00",r="00"]=t.split(":").map((e=>e.padStart(2,"0")));n.textContent=`${o}:${s}:${r}`,localStorage.setItem("cacheRefreshThresholdHours",`${o}:${s}:${r}`),localStorage.removeItem("fetchedUsers"),localStorage.removeItem("lastClearTime"),localStorage.removeItem("nextClearTime"),setTimeout((()=>location.reload()),1e3),e=!0}else alert("ru"===oo?"Неверный формат времени. Пожалуйста, используйте HH, HH:mm или HH:mm:ss.":"Invalid time format. Please use HH, HH:mm, or HH:mm:ss.")}}function ro(e=!1,t=24){const n=localStorage.getItem("lastClearTime"),o=n?((new Date).getTime()-n)/36e5:1/0;if(e||o>=t){localStorage.removeItem("fetchedUsers"),Object.keys(no).forEach((e=>delete no[e]));const e=(new Date).getTime()+60*t*60*1e3;localStorage.setItem("lastClearTime",(new Date).getTime().toString()),localStorage.setItem("nextClearTime",e.toString())}}function ao(){const e=localStorage.getItem("lastClearTime"),t=localStorage.getItem("nextClearTime"),n=document.querySelector(".drop-time-expiration");if(e&&t&&n){const e=t-Date.now();e<=0?ro(!0,cacheRefreshThresholdHours):function(e,t){const n=String(Math.floor(t/36e5)).padStart(2,"0"),o=String(Math.floor(t%36e5/6e4)).padStart(2,"0"),s=String(Math.floor(t%6e4/1e3)).padStart(2,"0"),r=5*Math.ceil(parseInt(s)/5);e.textContent=`${n}:${o}:${s} ${io[r]||io[0]}`}(n,e)}}const io={0:"🕛",5:"🕐",10:"🕑",15:"🕒",20:"🕓",25:"🕔",30:"🕕",35:"🕖",40:"🕗",45:"🕘",50:"🕙",55:"🕚"};const lo=()=>{const e=localStorage.getItem("activeChatTab")||"game",t=window.location.href.includes("gmid"),n=t&&"game"===e?'[id^="chat-game"] .text':"#chat-general .text",o=t&&"game"===e?'[id^="chat-game"] .send':"#chat-general .send",s=t&&"game"===e?'[id^="chat-game"] .messages':"#chat-general .messages",r={game:document.querySelector('[id^="chat-game"] .userlist-content'),general:document.querySelector("#chat-general .userlist-content")},a=document.querySelector(t?"game"===e?".game.c":".general.c":"general"===e?".general.c":".game.c"),i=document.querySelector(t?document.querySelector(".game.c.active")?".general.c":".game.c":document.querySelector(".general.c.active")?".game.c":".general.c"),l=document.querySelectorAll(".messages-content p"),c=l.length>0?l[l.length-1]:null,d=document.querySelector(s);return{chatField:document.querySelector(n),chatSend:document.querySelector(o),activeChatTab:a,nextChatTab:i,chatHidden:document.querySelector("#chat-wrapper.chat-hidden"),allMessages:l,latestMessage:c,messagesContainer:d,userList:r}},{ignored:co}=on;function uo(e){return function(e){const t={А:"A",Б:"B",В:"V",Г:"G",Д:"D",Е:"E",Ё:"Yo",Ж:"Zh",З:"Z",И:"I",Й:"Y",К:"K",Л:"L",М:"M",Н:"N",О:"O",П:"P",Р:"R",С:"S",Т:"T",У:"U",Ф:"F",Х:"Kh",Ц:"Ts",Ч:"Ch",Ш:"Sh",Щ:"Shch",Ъ:"y",Ы:"Y",Ь:"i",Э:"E",Ю:"Yu",Я:"Ya",а:"a",б:"b",в:"v",г:"g",д:"d",е:"e",ё:"yo",ж:"zh",з:"z",и:"i",й:"y",к:"k",л:"l",м:"m",н:"n",о:"o",п:"p",р:"r",с:"s",т:"t",у:"u",ф:"f",х:"kh",ц:"ts",ч:"ch",ш:"sh",щ:"shch",ъ:"y",ы:"y",ь:"i",э:"e",ю:"yu",я:"ya"};return e.split("").map((e=>t[e]||e)).join("")}(e)}const mo=new Set(on.usersToTrack.map((e=>String(e.id))));function po(e="all"){const{allMessages:t,latestMessage:n}=lo();function o(e){const t=e.querySelector(".username");if(!t)return;const n=t.querySelector("span[data-user]"),o=n?n.getAttribute("data-user"):null;if(!o||!mo.has(String(o)))return;if(t.parentElement&&t.parentElement.querySelector(".tracked-marker"))return;const s=document.createElement("span");s.className="tracked-marker";const r=window.getComputedStyle(t).color;s.style.backgroundColor=r,t.parentNode.insertBefore(s,t)}"latest"===e?n&&o(n):t.forEach(o)}var go=n(336),ho={};ho.styleTagTransform=g(),ho.setAttributes=d(),ho.insert=l().bind(null,"head"),ho.domAPI=a(),ho.insertStyleElement=m();s()(go.A,ho);go.A&&go.A.locals&&go.A.locals;const fo="chatlogs";function yo(){return new Promise(((e,t)=>{const n=indexedDB.open("chatlogsDB",1);n.onupgradeneeded=e=>{const t=e.target.result;t.objectStoreNames.contains(fo)||t.createObjectStore(fo,{keyPath:"date"})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)}))}async function vo(e){const t=await yo();return new Promise(((n,o)=>{const s=t.transaction(fo,"readwrite"),r=s.objectStore(fo),a=r.get(e.date);a.onsuccess=()=>{const t=a.result,i=t&&t.html?new Blob([t.html]).size:0,l=e.html?new Blob([e.html]).size:0;r.put(e),s.oncomplete=()=>{let e=xo();e+=(l-i)/1024,wo(e),n()},s.onerror=()=>o(s.error)},a.onerror=()=>o(a.error)}))}const bo="chatlogsTotalSizeKB";function xo(){return parseFloat(localStorage.getItem(bo)||"0")}function wo(e){localStorage.setItem(bo,Number(e).toFixed(2))}const Co=Math.floor(Math.random()*10**20);function So(e){const t=e.match(/(\d{4}-\d{2}-\d{2})/);return t?t[1]:null}const{ignored:ko}=on,Eo=1024e3,$o=pe(),Lo=async(e,t)=>{t&&(t.innerHTML="");const n=`https://klavogonki.ru/chatlogs/${e}.html`,o={chatlogs:[],url:n,size:0,error:null,info:"ru"===$o?"Пропущено: слишком большой лог.":"Skipped: chatlog too large.",placeholder:"ru"===$o?"Пропущено: слишком большой лог.":"Skipped: chatlog too large."},s=`${n}?rand=${Co}`;let r,a=!1;const i=await async function(e){const t=await yo();return new Promise(((n,o)=>{const s=t.transaction(fo,"readonly").objectStore(fo).get(e);s.onsuccess=()=>n(s.result),s.onerror=()=>o(s.error)}))}(e);if(i){if(i.skipped)return o;i.html&&(r=i.html,a=!0)}if(!r)try{const t=await fetch(s);if(!t.ok)throw new Error("Network response was not ok");const n=t.body.getReader();let a=0,i=[],l=!1;for(;!l;){const{value:t,done:s}=await n.read();if(t){if(a+=t.length,a>Eo)return n.cancel(),e!==x&&await vo({date:e,skipped:!0,reason:"too large"}),o;i.push(t)}l=s}let c=new Uint8Array(a),d=0;for(let e of i)c.set(e,d),d+=e.length;r=new TextDecoder("utf-8").decode(c),e!==x&&await vo({date:e,html:r})}catch(e){return{chatlogs:[],url:s,size:0,error:e.message,info:null,placeholder:"ru"===$o?"Ошибка при обработке логов.":"Error processing logs."}}const l=r.length>Eo?r.slice(0,Eo):r,c=(e=>[...(new DOMParser).parseFromString(e,"text/html").querySelectorAll(".ts")].map((e=>{const t=e.nextElementSibling,n=t?.nextSibling,o=e=>e?[...e.childNodes].reduce(((e,t)=>{if(t.nodeType===Node.TEXT_NODE)e+=t.textContent;else if(t.nodeType===Node.ELEMENT_NODE)if("A"===t.tagName)e+=t.getAttribute("href");else if("BR"===t.tagName)return e;return e}),"").trim():"";if(t?.classList.contains("mn")&&n){let s="";if(n.nodeType===Node.ELEMENT_NODE)s=o(n);else if(n.nodeType===Node.TEXT_NODE){const e=t.nextElementSibling;s=e&&"A"===e.tagName?`${n.textContent.trim()} ${e.getAttribute("href")}`:n.textContent.trim()}if(!s){s=o(t.nextSibling)}return{time:e.textContent.trim().replace(/[\[\]]/g,""),username:t.textContent.trim().replace(/<|>/g,""),message:s||null}}const s=e.nextElementSibling;if(s&&s.classList.contains("mne")){const t=s.textContent.trim();return{time:e.textContent.trim().replace(/[\[\]]/g,""),username:"SYSTEM",message:t||null}}return null})).filter(Boolean))(l),d=r.length>Eo,u=[];let m=null;for(const e of c){const t=e.message!==m?.message,n=e.username!==m?.username;(t||n)&&(u.push(e),m=e)}const p=u.filter((e=>!ko.includes(e.username))),g=(l.length/1024).toFixed(2),h=xo();let f="ru"===$o?`Размер: ${g} КБ`:`Size: ${g} KB`;if(f+=d?"ru"===$o?" (Достигнут лимит файла)":" (File limit reached)":a?"ru"===$o?" (Кэш)":" (Cache)":"",null!==h&&!isNaN(h)){const e=function(e){const t=parseFloat(e);return isNaN(t)?e:t>=1048576?(t/1048576).toFixed(2)+("ru"===$o?" ГБ":" GB"):t>=1024?(t/1024).toFixed(2)+("ru"===$o?" МБ":" MB"):t.toFixed(2)+("ru"===$o?" КБ":" KB")}(h);f+="ru"===$o?` | Кэш: ${e}`:` | Cache: ${e}`}return{chatlogs:p,url:n,size:l.length,info:d?"ru"===$o?"Достигнут лимит размера файла.":"File size limit reached.":a?"ru"===$o?"Загружено из кэша.":"Loaded from cache.":null,error:null,placeholder:f}};var To=n(807),Mo={};Mo.styleTagTransform=g(),Mo.setAttributes=d(),Mo.insert=l().bind(null,"head"),Mo.domAPI=a(),Mo.insertStyleElement=m();s()(To.A,Mo);To.A&&To.A.locals&&To.A.locals;const No=["jpg","jpeg","png","gif","webp"],Io="📸",Ao="🖥️",qo="💀️️",Do=.2,jo=10,Oo=.1;let Bo=0,Ho=!1,Po=[],Fo=null;const{bigImageEvents:_o}=E,zo=e=>{const t=(e=>{try{return e.match(/\.([^?#.]+)(?:[?#]|$)/i)?.[1]?.toLowerCase()||""}catch(e){return console.error("Error extracting extension:",e.message),""}})(e);return{allowed:No.includes(t),extension:t}},Ro=(e,t)=>{const n=document.createElement("img");n.src=e,n.classList.add("scaled-thumbnail"),document.body.appendChild(n),Bo=t;let o=1,s=!1,r=0,a=0,i=-50,l=-50;const c=e=>{Nt(e,"hide"),document.querySelector(".popup-panel")||It("hide"),Q()};return _o.unfocusedClick=e=>{n.contains(e.target)||(n.remove(),Q())},_o.keydown=e=>{"Escape"===e.code||"Space"===e.code?(e.preventDefault(),c(n)):"ArrowLeft"===e.code?Uo(-1):"ArrowRight"===e.code&&Uo(1)},_o.wheel=e=>{const t=e.deltaY<0?1:-1;o+=t*Oo*o,o=Math.max(Do,Math.min(o,jo)),n.style.transform=`translate(${i}%, ${l}%) scale(${o})`},_o.mousemove=e=>{if(s){if(e.ctrlKey){const t=e.clientY-a,n=t<0?1:-1,s=Math.abs(t)*Oo*.05;o+=n*s*o,o=Math.max(Do,Math.min(o,jo))}else{const t=(e.clientX-r)/o*5,s=(e.clientY-a)/o*5;i+=t/n.clientWidth*100,l+=s/n.clientHeight*100}n.style.transform=`translate(${i}%, ${l}%) scale(${o})`,r=e.clientX,a=e.clientY}},_o.mousedown=e=>{const{button:t,clientX:o,clientY:i,target:l,ctrlKey:d}=e;if((0===t||2===t)&&l!==n)return;const u=l.src;0===t?Uo(-1):2===t?(e.preventDefault(),d?(navigator.clipboard.writeText(u).catch(console.error),c(n)):Uo(1)):1===t&&(s=!0,r=o,a=i,e.preventDefault())},_o.mouseup=e=>{1===e.button&&(s=!1)},_o.contextmenu=e=>e.preventDefault(),Object.entries(G).forEach((([e,t])=>{document.addEventListener(e,t)})),n},Uo=e=>{const t=Bo+e;t>=0&&tHo=!1),50),Bo=t)};function Jo(e){const t=document.querySelector({generalMessages:".messages-content div",chatlogsMessages:".chat-logs-container",personalMessages:".messages-container"}[e]);if(!t)return;const n=t.querySelectorAll("a:not(.skipped):not(.processed-image)");function o(n,o){const s=document.createElement("div");s.classList.add("clickable-thumbnail"),s.dataset.sourceLink=n.href;const r=document.createElement("img");r.src=n.href,r.onload=()=>{s.appendChild(r),n.parentNode.insertBefore(s,n.nextSibling),On(e,600)},r.onerror=()=>{console.error("Failed to load image:",n.href),n.classList.add("skipped")},o?n.querySelector(".clickable-thumbnail")||n.addEventListener("click",(e=>{n.querySelector(".clickable-thumbnail")||(s.appendChild(r),n.parentNode.insertBefore(s,n.nextSibling))})):(s.appendChild(r),n.parentNode.insertBefore(s,n.nextSibling)),s.addEventListener("click",(e=>{e.stopPropagation(),Po=[],t.querySelectorAll(".clickable-thumbnail").forEach(((e,t)=>{const n=e.querySelector("img");n&&e.dataset.sourceLink&&Po.push({link:e.dataset.sourceLink,imgSrc:n.src,index:t})}));const o=Po.findIndex((e=>e.link===n.href||e.imgSrc===r.src));Fo=Ro(r.src,o>=0?o:0),Nt(Fo,"show"),It("show")}))}n.length&&n.forEach((e=>{if(!e.href||!e.href.startsWith("http"))return;const{allowed:t,extension:n}=zo(e.href);if(!t)return;e.classList.add("media");const{isTrusted:s,domain:r}=ae(e.href);kt(e,fn(e.href)?yn(e.href):e.href),s?function(e,t,n){e.textContent=`${Io} ${t.toUpperCase()} ${Ao} ${n}`,e.classList.add("processed-image"),o(e,!1)}(e,n,r):function(e,t,n){e.classList.add("skipped"),e.textContent=`${Io} ${t.toUpperCase()} ${Ao} ${n} ${qo} Untrusted`,e.addEventListener("click",(t=>{e.classList.contains("processed-image")||(t.preventDefault(),e.classList.remove("skipped"),e.classList.add("processed-image"),o(e,!0))}))}(e,n,r)}))}const Ko="📺",Yo="📹",Xo="🎬️",Vo="🖥️",Go="💀️️",Wo=["mp4","webm","ogg","mov","avi"];let Zo=null,Qo=null;async function es(e,t,n,o,s){e.innerHTML="",t.innerHTML="";const r=await async function(e){const t=`https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=${e}&format=json`;try{const e=await fetch(t),n=await e.json();return{title:n.title||"Title not found",channel:n.author_name||"Channel not found"}}catch(e){return console.error("Error fetching YouTube metadata:",e),{title:"Error",channel:"Error"}}}(n),a=document.createElement("span");a.classList.add("channel-name"),a.textContent=`${Ko} ${r.channel}`;const i=document.createElement("span");i.classList.add("video-title"),i.textContent=`${Yo} ${r.title}`,e.append(a,i);const l=document.createElement("img");l.src=`https://img.youtube.com/vi/${n}/hqdefault.jpg`,l.alt=o,l.classList.add("youtube-thumb"),t.appendChild(l),l.addEventListener("load",(()=>{On(s,600)}))}function ts(e){if(!e)return void console.warn("containerType parameter is required");const t={generalMessages:".messages-content div",chatlogsMessages:".chat-logs-container",personalMessages:".messages-container"};if(!t[e])return void console.warn(`Invalid containerType: ${e}`);const n=document.querySelector(t[e]);if(!n)return;const o=n.querySelectorAll("a:not(.skipped):not(.processed-video)");function s(e,t,n,o,s){const{youtubeMatch:r,videoType:a,videoId:i}=o,l=(e=>{const t=e.match(/\.([^?#.]+)(?:[?#]|$)/i)?.[1]?.toLowerCase()||"";return{allowed:Wo.includes(t),extension:t}})(t);if(!r&&!l.allowed)return;e.classList.add("processed-video");const c=document.createElement("div");if(c.classList.add("video-wrapper"),e.textContent=`${Xo} ${a} ${Vo} ${n}`,kt(e,fn(t)?yn(t):t),e.style.display="inline-flex",r){const t=document.createElement("div");t.classList.add("youtube-info");const n=document.createElement("div");n.classList.add("youtube-placeholder"),n.dataset.videoId=i,n.dataset.videoType=a,n.dataset.containerType=s,e.parentNode.insertBefore(c,e),c.append(e,t,n),es(t,n,i,a,s),n.addEventListener("click",(()=>{if(Qo&&Qo!==n){const e=Qo.dataset.videoId,t=Qo.dataset.videoType,n=Qo.dataset.containerType,o=Qo.previousElementSibling;o&&o.classList.contains("youtube-info")&&es(o,Qo,e,t,n)}Qo=n;const e=(Zo||(Zo=document.createElement("iframe"),Zo.classList.add("video-container"),Zo.allowFullscreen=!0,Zo.setAttribute("allow","fullscreen")),Zo);e.src=`https://www.youtube.com/embed/${i}?autoplay=1`,n.innerHTML="",n.appendChild(e)}))}else{const n=document.createElement("video");n.classList.add("video-container"),n.src=t,n.controls=!0,e.parentNode.insertBefore(c,e),c.append(e,n)}}o.length&&o.forEach((t=>{const n=t.href;if(!n)return;const o=function(e){const t=e.match(/(?:shorts\/|live\/|watch\?v=|youtu\.be\/)([a-zA-Z0-9_-]{11})/i);if(t)return{youtubeMatch:!0,videoId:t[1],videoType:e.includes("shorts/")?"Shorts":e.includes("live/")?"Live":e.includes("watch?v=")?"Watch":e.includes("youtu.be/")?"Share":"YouTube"};const n=e.split(".").pop().toLowerCase();return!!Wo.includes(n)&&{youtubeMatch:!1,videoType:`Video (${n.toUpperCase()})`}}(n);if(!o)return;t.classList.add("media");const{isTrusted:r,domain:a}=ae(n);if(!r)return t.classList.add("skipped"),t.textContent=`${Xo} ${o.videoType} ${Vo} ${a} ${Go} Untrusted`,void t.addEventListener("click",(r=>{t.classList.contains("processed-video")||(r.preventDefault(),t.classList.remove("skipped"),s(t,n,a,o,e))}));s(t,n,a,o,e)}))}function ns(e){return e.replace(/[_\-\s]/g,"").toLowerCase()}function os(e,t,n,o="search-match"){if(t.length){e.querySelectorAll(`.${o}`).forEach((e=>{e.replaceWith(document.createTextNode(e.textContent))})),e.normalize();for(const s of t)s.length<2||ss(e,s,n,o)}}function ss(e,t,n,o){const s=document.createTreeWalker(e,NodeFilter.SHOW_TEXT),r=[];let a,i="";for(;a=s.nextNode();)a.textContent.trim()&&(r.push({node:a,start:i.length,text:a.textContent}),i+=a.textContent);if(!i.trim())return;const l=[],c=n?i:i.toLowerCase(),d=n?t:t.toLowerCase();let u=0;for(;-1!==(u=c.indexOf(d,u));)l.push({start:u,end:u+d.length}),u++;if(!n){ns(i);const e=ns(t);for(let t=0;t<=i.length-e.length;t++)for(let n=e.length;n<=Math.min(i.length-t,2*e.length);n++)if(ns(i.substring(t,t+n))===e){l.push({start:t,end:t+n});break}}if(0===l.length)return;const m=l.sort(((e,t)=>e.start-t.start));m.filter(((e,t)=>!m.slice(0,t).some((t=>e.startt.start)))).reverse().forEach((e=>{!function(e,t,n){const o=e.filter((e=>{const n=e.start+e.text.length;return t.starte.start}));o.forEach((e=>{e.start,e.text.length;const o=Math.max(0,t.start-e.start),s=Math.min(e.text.length,t.end-e.start);if(o0&&r.appendChild(document.createTextNode(t.substring(0,o)));const a=document.createElement("span");a.className=n,a.textContent=t.substring(o,s),r.appendChild(a),s{const t=e.trim();return d?t.toLowerCase():ns(t)})).filter(Boolean),p=u.split(",").map((e=>e.trim())).filter(Boolean),g=!0;else if([".","|","\\","/"].some((e=>u.includes(e))))m=u.split(/[.|\\/]/).map((e=>{const t=e.trim();return d?t.toLowerCase():ns(t)})).filter(Boolean),p=u.split(/[.|\\/]/).map((e=>e.trim())).filter(Boolean),g=!0,c=!0;else{const e=u.trim();m=[d?e.toLowerCase():ns(e)].filter(Boolean),p=[e].filter(Boolean),g=!1}const h=".messages-search-container",f=Array.from(document.querySelectorAll(`${h} > .date-item, ${h} > .message-item`)),y=f.filter((e=>e.classList.contains("message-item"))),v=function(e){return e.map((e=>{const t=e.querySelector(".message-username"),n=t?t.textContent.toLowerCase().trim():"",o=e.querySelector(".message-text");return{username:n,messageText:o?me(o).toLowerCase().trim():"",usernameElement:t,messageTextElement:o,originalUsername:t?t.textContent.trim():"",originalMessageText:o?me(o).trim():""}}))}(y),b=!m.length;function x(e,t){return!(t.length<2)&&(!!e.includes(t)||(t.length>=3&&1===function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;const n=[];for(let e=0;e<=t.length;e++)n[e]=[e];for(let t=0;t<=e.length;t++)n[0][t]=t;for(let o=1;o<=t.length;o++)for(let s=1;s<=e.length;s++)t.charAt(o-1)===e.charAt(s-1)?n[o][s]=n[o-1][s-1]:n[o][s]=Math.min(n[o-1][s-1]+1,n[o][s-1]+1,n[o-1][s]+1);return n[t.length][e.length]}(e,t)||!!(t.length>=3&&function(e,t){let n=0,o=0;for(;n{const n=e.closest(".message-item"),o=v[t],s=ns(o.username),r=ns(o.messageText),a=b||function(e,t,n,o,s=!1){const r=o?(e,t)=>function(e,t,n=!1){const o=e.toLowerCase();return n?o===t:o.includes(t)}(e,t,s):x;return t[n?"some":"every"]((t=>e.some((e=>r(e,t)))))}(function(e,t,n,o){return d?l?[e]:c?[t]:[e,t]:l?[n]:c?[o]:[n,o]}(o.username,o.messageText,s,r),m,g,d,l);n.classList.toggle("hidden-message",!a),a&&!b?(!c&&o.usernameElement&&os(o.usernameElement,p,d,"search-match-username"),!l&&o.messageTextElement&&os(o.messageTextElement,p,d,"search-match-message")):a||(o.usernameElement&&o.usernameElement.querySelectorAll(".search-match-username").forEach((e=>{e.replaceWith(document.createTextNode(e.textContent))})),o.messageTextElement&&o.messageTextElement.querySelectorAll(".search-match-message").forEach((e=>{e.replaceWith(document.createTextNode(e.textContent))})))}));const w=f.filter((e=>e.classList.contains("date-item")));for(let e=0;e{e.replaceWith(document.createTextNode(e.textContent))}))}function is(e){let t=e.previousElementSibling;for(;t&&!t.classList.contains("date-item");)t=t.previousElementSibling;return t&&t.classList.contains("date-item")?t.dataset.date:null}async function ls(e,t,n){const o=document.querySelector(".messages-content");if(!o)return null;const s=e=>String(e||"").replace(/\s+/g,"").trim().toLowerCase(),r=s(t),a=s(e),i=Array.from(o.querySelectorAll("p")).find((e=>{const t=e.querySelector(".username span[data-user]");if(t){const n=s(t.textContent),o=s(function(e){const t=e.cloneNode(!0);return t.querySelectorAll(".time, .username, .room.private").forEach((e=>e.remove())),t.textContent.trim()}(e));if(n===r&&o===a)return!0}return!1}));return i&&n&&await Bn(o,i),i||!1}function cs(e){const t=180- -(new Date).getTimezoneOffset(),[n,o,s]=e.split(":").map(Number);let r=60*n+o+t;r=(r%1440+1440)%1440;const a=r%60;return`${Math.floor(r/60).toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}:${s.toString().padStart(2,"0")}`}function ds(e,t="single"){const n=e.querySelector(".message-time").textContent,o=e.querySelector(".message-username").textContent,s=is(e);let r=JSON.parse(localStorage.getItem("personalMessagesBackup"))||{};if(0===Object.keys(r).length){r={...JSON.parse(localStorage.getItem("personalMessages"))||{}},localStorage.setItem("personalMessagesBackup",JSON.stringify(r))}let a={...r};if("all"===t)document.querySelectorAll(".message-item").forEach((e=>{const t=e.querySelector(".message-username").textContent,n=is(e);if(t===o&&n){e.remove();const o=e.querySelector(".message-time").textContent;delete a[`[${o}]_${t}_${n}`]}}));else if("from"===t){const t=Array.from(document.querySelectorAll(".message-item"));for(let n=t.indexOf(e);n{const t=window.getComputedStyle(e);return"hidden"!==t.contentVisibility&&"none"!==t.display}));let d="",u=!0;"bbcode"===t&&(d+="[hide]\n");let m=null,p={};return s||(p=JSON.parse(localStorage.getItem(C)||"{}")),c.forEach((e=>{if(e.classList.contains("date-item")&&r){const n=e.querySelector(".date-text"),o=n?n.textContent:e.textContent.replace(/[📅⏳]+$/,"").trim();m=o,u||(d+="\n"),d+="bbcode"===t?`[b][color=gray]${o}[/color][/b]\n`:"markdown"===t?`**${o}**\n`:`${o}\n`,u=!1}else if(e.classList.contains("message-item")){const n=e.querySelector(".message-time")?.textContent?.trim()||"",r=e.querySelector(".message-username")?.textContent?.trim()||"",i=e.querySelector(".message-text"),c=i?function(e,t){if(!e)return"";let n=e.innerHTML.replace(/]*title=["']([^"']+)["'][^>]*>/gi,"$1");return n=n.replace(/([\s\S]*?)<\/span>/gi,((e,n)=>"bbcode"===t?`[color=#32cd32]${n}[/color]`:"markdown"===t?`*${n}*`:n)).replace(/([\s\S]*?)<\/span>/gi,((e,n)=>"bbcode"===t?`[color=#ffa500]${n}[/color]`:"markdown"===t?`*${n}*`:n)),n=n.replace(/<[^>]+>/g,""),"plain"===t?e.textContent:n}(i,t):"",g=o||m||(new Date).toISOString().slice(0,10),h=a?`https://klavogonki.ru/chatlogs/${g}.html#${n.replace(/[\[\]]/g,"")}`:"";let f;if(s){const e=l[`[${n}]_${r}`];f=e&&e.usernameColor?R(e.usernameColor):"#808080"}else f=p[r]?.color||"#808080";if("bbcode"===t){const e=c.replace(/(^|\s|\():(\w+):(?=\s|\.|,|!|\?|$)/g,((e,t,n)=>`${t}[img]https://klavogonki.ru/img/smilies/${n}.gif[/img]`));d+=h?`[url=${h}]${n}[/url] `:`${n} `,d+=`[color=${f}]${r}[/color] ${e}\n`}else"markdown"===t?(d+=h?`[${n}](${h}) `:`${n} `,d+=`**${r}** ${c}\n`):(d+=`[${n}] `,d+=`(${r}) ${c}\n`);u=!1}})),"bbcode"===t&&(d+="[/hide]\n"),d}(t,s,n);if(r)if(e.shiftKey){const e=new Blob([r],{type:"text/plain"}),t=document.createElement("a");t.href=URL.createObjectURL(e);const o=n.prefix,a=n.date?`_${n.date}`:"";t.download=`${o}_${a}_${s}.txt`,document.body.appendChild(t),t.click(),setTimeout((()=>document.body.removeChild(t)),100)}else navigator.clipboard.writeText(r).catch((()=>{alert("ru"===ps?"Не удалось скопировать сообщения":"Failed to copy messages")}))}var hs=n(805),fs={};fs.styleTagTransform=g(),fs.setAttributes=d(),fs.insert=l().bind(null,"head"),fs.domAPI=a(),fs.insertStyleElement=m();s()(hs.A,fs);hs.A&&hs.A.locals&&hs.A.locals;function ys(e,t,n,o,s=[],r=!1){const a=JSON.parse(localStorage.getItem(C)||"{}");let i=null;const l=new Map;if(n||(t.innerHTML=""),o){const e=document.createElement("div");e.className="date-item";const n=document.createElement("span");n.className="date-text",n.textContent=o;const s=document.createElement("span");s.className="date-emoji",s.textContent=" 📅",e.appendChild(n),e.appendChild(s),t.appendChild(e)}const c=document.createDocumentFragment();return e.forEach((({time:e,username:t,message:n})=>{l.set(t,(l.get(t)||0)+1);const o=document.createElement("div");o.classList.add("message-item");const d=document.createElement("span");d.className="message-time",d.textContent=e;const u=document.createElement("span");u.className="message-username",u.textContent=t,u.style.color=a[t]?.color||"#808080";const m=document.createElement("span");m.className="message-text";let p="";"string"==typeof n&&n.length>0&&(p=n.replace(/:(?=\w*[a-zA-Z])(\w+):/g,((e,t)=>`:${t}:`)).replace(/(https?:\/\/[^\s]+)/gi,(e=>`${e}`)),r&&s&&s.length>0&&(p=function(e,t){if(!(r&&t&&t.length&&e))return e;const n=t.map((e=>e.replace(/[.*+?^${}()|[\\]\\]/g,"\\$&"))),o=new RegExp(`(${n.join("|")})`,"gi");return e.replace(o,'$1')}(p,s))),m.innerHTML=p,o.style.marginTop=i!==t?"0.6em":"",i=t,o.appendChild(d),o.appendChild(u),o.appendChild(m),c.appendChild(o)})),t.appendChild(c),l}function vs(e,t){if("shown"===localStorage.getItem("shouldShowActiveUsers")){let n=t.querySelector(".active-users");n||(n=document.createElement("div"),n.className="active-users",t.appendChild(n));const o=Array.from(e.entries()).sort((([,e],[,t])=>t-e));n.innerHTML="";const s=JSON.parse(localStorage.getItem(C)||"{}"),r=document.createDocumentFragment();o.forEach((([e,t])=>{const n=document.createElement("div");n.className="active-user-item";const o=document.createElement("span");o.className="active-user-name",o.textContent=e;const a=s[e]?.color||"#808080";o.style.color=a;const i=document.createElement("span");i.className="active-user-messages-count",i.textContent=t,i.style.color=a,i.style.backgroundColor=a+"20",n.appendChild(i),n.appendChild(o),r.appendChild(n)})),n.appendChild(r)}}const bs="📌️",xs="✏️",ws="⚠️",Cs="🔍",Ss="👤",ks="📄",Es="📜",$s="📋",Ls="📅",Ts={selectParseMode:{en:[`${bs} Select parse mode`,"1. Single date","2. From date","3. Date range","4. From start","5. From registered date","6. Personal mentions"].join("\n"),ru:[`${bs} Выберите режим парсинга`,"1. Одна дата","2. С даты","3. Диапазон дат","4. С самого начала","5. С даты регистрации","6. Личные упоминания"].join("\n")},invalidSelection:{en:`${ws} Invalid selection.`,ru:`${ws} Неверный выбор.`},enterDateRange:{en:[`${xs} Enter ${Ls} date range`,`${$s} Examples:`,"2024-01-01 - 2024-01-07","20240101 - 20240107","2024:01:01 - 2024:01:07","240101 - 240107","24-02-02 - 24-03-03"].join("\n"),ru:[`${xs} Введите диапазон ${Ls} дат`,`${$s} Примеры:`,"2024-01-01 - 2024-01-07","20240101 - 20240107","2024:01:01 - 2024:01:07","240101 - 240107","24-02-02 - 24-03-03"].join("\n")},invalidRange:{en:`${ws} Invalid range format or one/both ${Ls} dates out of bounds. Please try again.`,ru:`${ws} Неверный формат диапазона или одна/обе ${Ls} даты вне допустимого диапазона. Пожалуйста, попробуйте снова.`},enterFromDate:{en:[`${xs} Enter FROM ${Ls} date`,`${$s} Examples:`,"2024-01-01","20240101","2024:01:01","240101",`${bs} Range will be FROM this ${Ls} date to today.`].join("\n"),ru:[`${xs} Введите начальную ${Ls} дату`,`${$s} Примеры:`,"2024-01-01","20240101","2024:01:01","240101",`${bs} Диапазон будет с этой ${Ls} даты до сегодня.`].join("\n")},invalidFromDate:{en:`${ws} Invalid FROM ${Ls} date format or date out of bounds. Please try again.`,ru:`${ws} Неверный формат начальной ${Ls} даты или дата вне допустимого диапазона. Пожалуйста, попробуйте снова.`},enterSingleDate:{en:[`${xs} Enter a ${Ls} date`,`${$s} Examples:`,"2024-01-01","20240101","2024:01:01","240101"].join("\n"),ru:[`${xs} Введите ${Ls} дату`,`${$s} Примеры:`,"2024-01-01","20240101","2024:01:01","240101"].join("\n")},invalidDate:{en:`${ws} Invalid ${Ls} date format or date out of bounds. Please try again.`,ru:`${ws} Неверный формат ${Ls} даты или дата вне допустимого диапазона. Пожалуйста, попробуйте снова.`},enterUsernames:{en:[`${Ss} Enter ${Ss} username(s) to parse (comma-separated):`,`${bs} Leave empty to search ${ks} messages from all ${Ss} users.`].join("\n"),ru:[`${Ss} Введите имя или имена пользователей для парсинга (через запятую):`,`${bs} Оставьте пустым, чтобы искать ${ks} сообщения всех ${Ss} пользователей.`].join("\n")},userPossiblyBanned:{en:e=>`${ws} User ${Ss} ${e} not found. The user may be banned or deleted. Continue anyway?`,ru:e=>`${ws} Пользователь ${Ss} ${e} не найден. Возможно, пользователь забанен или удалён. Продолжить в любом случае?`},retrieveHistoryPrompt:{en:`${bs} Do you want to retrieve all previous ${Ss} history usernames for this user? (1 - yes, 2 - no)`,ru:`${bs} Хотите получить все предыдущие ${Ss} имена пользователей для этого пользователя? (1 - да, 2 - нет)`},confirmUsernames:{en:`${xs} Confirm or edit the list of ${Ss} usernames to parse (comma-separated):`,ru:`${xs} Подтвердите или отредактируйте список ${Ss} имён для парсинга (через запятую):`},noUsersSelected:{en:`${ws} No ${Ss} users selected.`,ru:`${ws} Не выбраны ${Ss} пользователи.`},unableToGetRegDate:{en:`${ws} Could not get registration ${Ls} date.`,ru:`${ws} Не удалось получить ${Ls} дату регистрации.`},editStartDate:{en:e=>`${xs} From which ${Ls} to start parsing? (registration date: ${e})`,ru:e=>`${xs} С какой ${Ls} начать парсинг? (дата регистрации: ${e})`},invalidEditedDate:{en:`${ws} Invalid ${Ls} date format.`,ru:`${ws} Неверный формат ${Ls} даты.`},dateBeforeMinimal:{en:e=>`${ws} ${Es} Chat logs are only available from ${e}. Using this ${Ls} date.`,ru:e=>`${ws} ${Es} Логи чата доступны только с ${e}. Используется эта ${Ls} дата.`},enterSearchTerms:{en:e=>[`${Cs} Enter search terms to filter ${ks} messages (comma-separated):`,e?`${bs} Leave empty to show ALL ${ks} messages from all ${Ss} users.`:`${bs} Leave empty to show all ${ks} messages from selected ${Ss} users.`,`${$s} Examples:`,"hello, dude","creature, spammer, troll",`${bs} Note: Search is case-insensitive and will find ${ks} messages containing ANY of the terms.`].join("\n"),ru:e=>[`${Cs} Введите поисковое слово или слова для фильтрации ${ks} сообщений (через запятую):`,e?`${bs} Оставьте пустым, чтобы показать ВСЕ ${ks} сообщения от всех ${Ss} пользователей.`:`${bs} Оставьте пустым, для поиска всех ${ks} сообщений выбранных ${Ss} пользователей.`,`${$s} Примеры:`,"привет, чувак","чучело, спамер, тролль",`${bs} Примечание: поиск не чувствителен к регистру и найдёт ${ks} сообщения, содержащие ЛЮБОЕ из слов.`].join("\n")},searchInfoAllUsers:{en:e=>`${Cs} Searching all ${Ss} users for ${ks} messages containing: ${e.join(", ")}`,ru:e=>`${Cs} Поиск по всем ${Ss} пользователям сообщений ${ks}, содержащих: ${e.join(", ")}`},searchInfoAllUsersNoTerms:{en:`${Cs} Showing all ${ks} messages from all ${Ss} users`,ru:`${Cs} Показаны все ${ks} сообщения от всех ${Ss} пользователей`},searchInfoSomeUsers:{en:(e,t)=>`${Cs} Searching for ${ks} messages from: ${Ss} ${e.join(", ")}, containing: ${t.join(", ")}`,ru:(e,t)=>`${Cs} Поиск ${ks} сообщений от: ${Ss} ${e.join(", ")}, содержащих: ${t.join(", ")}`},searchInfoAllFromUsers:{en:e=>`${Cs} Showing all ${ks} messages from: ${Ss} ${e.join(", ")}`,ru:e=>`${Cs} Показаны все ${ks} сообщения от: ${Ss} ${e.join(", ")}`},dateProgressInfo:{en:(e,t,n)=>`${Ls} Start: ${e} | Current: ${t} | Progress: ${n}%`,ru:(e,t,n)=>`${Ls} Начало: ${e} | Текущая: ${t} | Прогресс: ${n}%`},noMessagesFoundAll:{en:e=>`${ws} No ${ks} messages found containing the search terms: ${e.join(", ")}`,ru:e=>`${ws} ${ks} Сообщения, содержащие слова: ${e.join(", ")}, не найдены.`},noMessagesFoundAllNoTerms:{en:`${ws} No ${ks} messages found.`,ru:`${ws} ${ks} Сообщения не найдены.`},noMessagesFoundSome:{en:e=>`${ws} No ${ks} messages found for the selected ${Ss} user(s) containing the search terms: ${e.join(", ")}`,ru:e=>`${ws} ${ks} Сообщения выбранных ${Ss} пользователей, содержащие слова: ${e.join(", ")}, не найдены.`},noMessagesFound:{en:`${ws} No ${ks} messages found for the selected ${Ss} user(s).`,ru:`${ws} ${ks} Сообщения для выбранных ${Ss} пользователей не найдены.`},deleteConfirm:{en:`${ws} Are you sure you want to delete all saved ${Es} chatlogs?`,ru:`${ws} Вы уверены, что хотите удалить все сохранённые ${Es} чатлоги?`},deleteSuccess:{en:`${bs} All ${Es} chatlogs deleted and cache size reset.`,ru:`${bs} Все ${Es} чатлоги удалены, размер кэша сброшен.`},selectPersonalMentionsDateMode:{en:[`${bs} Select date mode for personal mentions`,"1. Single date","2. From date","3. Date range","4. From start","5. Last (N) days"].join("\n"),ru:[`${bs} Выберите режим дат для личных упоминаний`,"1. Одна дата","2. С даты","3. Диапазон дат","4. С самого начала","5. За последние (N) дней"].join("\n")},enterMentionKeywords:{en:`${xs} Enter mention keywords to search (comma-separated):`,ru:`${xs} Введите ключевые слова для поиска упоминаний (через запятую):`},noMentionKeywords:{en:`${ws} No mention keywords provided. Please enter at least one keyword.`,ru:`${ws} Не указаны ключевые слова для поиска упоминаний. Введите хотя бы одно слово.`},enterLatestDays:{en:`${xs} Enter the number of latest days:`,ru:`${xs} Введите количество последних дней:`},invalidDaysNumber:{en:`${ws} Please enter a valid number of days.`,ru:`${ws} Введите корректное число дней.`}};function Ms(e){const t=new Date,n=new Date(t);return n.setDate(t.getDate()-e+1),{from:n.toISOString().slice(0,10),to:t.toISOString().slice(0,10)}}function Ns(e,t){let n=!1,o=!1,s=null;const r=pe();async function a(){let e;for(;;){if(e=prompt(Ts.selectParseMode[r],"1"),null===e)return null;if(["1","2","3","4","5","6"].includes(e))break;alert(Ts.invalidSelection[r])}const t={};async function n(e){if("4"===e)t.from=w,t.to=(new Date).toISOString().slice(0,10);else if("3"===e){let e,n,o;for(;;){if(e=prompt(Ts.enterDateRange[r],""),null===e)return null;if(!e.trim())continue;const s=e.match(/([\d:\-]{6,10})\s*-\s*([\d:\-]{6,10})/);if(s&&(n=he(s[1]),o=he(s[2]),n&&o)){t.from=n,t.to=o;break}alert(Ts.invalidRange[r])}}else if("2"===e){let e,n;for(;;){if(e=prompt(Ts.enterFromDate[r],""),null===e)return null;if(e.trim()){if(n=he(e.trim()),n){t.from=n,t.to=(new Date).toISOString().slice(0,10);break}alert(Ts.invalidFromDate[r])}}}else if("1"===e){let e,n;for(;;){if(e=prompt(Ts.enterSingleDate[r],""),null===e)return null;if(e.trim()){if(n=he(e.trim()),n){t.from=n,t.to=n;break}alert(Ts.invalidDate[r])}}}}if("6"===e){let e;for(;;){if(e=prompt(Ts.selectPersonalMentionsDateMode[r],"1"),null===e)return null;if(["1","2","3","4","5"].includes(e))break;alert(Ts.invalidSelection[r])}if("5"===e){let e;for(;;){if(e=prompt(Ts.enterLatestDays[r],"7"),null===e)return null;const n=parseInt(e.trim());if(isNaN(n)||n<=0||n>365){alert(Ts.invalidDaysNumber[r]);continue}const o=Ms(n);t.from=o.from,t.to=o.to;break}}else{if(null===await n(e))return null}const o=await async function(){let e=[];if(v&&e.push(v),v)try{const t=await P(v,"usernamesHistory");Array.isArray(t)&&t.length>0&&t.forEach((t=>{t&&!e.includes(t)&&e.push(t)}))}catch(e){console.warn("Could not fetch username history for",v,":",e)}let t=[];try{const e=localStorage.getItem("mentionKeywords");e&&(t=JSON.parse(e))}catch(e){console.warn("Could not parse mention keywords from localStorage:",e)}return Array.isArray(t)||(t=[]),t.forEach((t=>{t&&!e.includes(t)&&e.push(t)})),e}();let s=prompt(Ts.enterMentionKeywords[r],o.join(", "));if(null===s)return null;let a=[];if(s&&s.trim()){const e=s.split(",");if(Array.isArray(e)){a=e.map((e=>e?e.trim():"")).filter(Boolean);const t=[];a.forEach((e=>{e&&!t.includes(e)&&t.push(e)})),a=t}}return 0===a.length?(alert(Ts.noMentionKeywords[r]),null):(t.mode="personalmentions",t.mentionKeywords=a,t)}if("5"===e)return t.mode="fromregistered",t;if(["4","3","2","1"].includes(e)){return null===await n(e)?null:(t.mode="1"===e?"single":"2"===e?"fromdate":"3"===e?"range":"fromstart",t)}}async function i(){let e="";for(;;){if(e=prompt(Ts.enterUsernames[r],e||""),null===e)return null;if(!e||!e.trim())return[];let t=[];if(e&&e.trim()){const n=e.split(",");Array.isArray(n)&&(t=n.map((e=>e?e.trim():"")).filter(Boolean))}if(0===t.length)return[];const n=[];for(const e of t){(await O(e)||confirm(Ts.userPossiblyBanned[r](e)))&&n.push(e)}if(0!==n.length){if(1===n.length){if("1"===prompt(Ts.retrieveHistoryPrompt[r],"2")){const e=await P(n[0],"usernamesHistory");if(Array.isArray(e)&&e.length>0){const t=[n[0],...e.filter((e=>e!==n[0]))],o=prompt(Ts.confirmUsernames[r],t.join(", "));if(!o)return null;let s=[];if(o&&o.trim()){const e=o.split(",");Array.isArray(e)&&(s=e.map((e=>e?e.trim():"")).filter(Boolean))}return s}}}return n}}}function l(e,t){if(!t||0===t.length)return!0;if(!e)return!1;const n=e.toLowerCase();return t.some((e=>n.includes(e)))}function c(){const e=t.querySelector(".panel-header-shuffle-button");e&&(e.dataset.mode="loadToday",e.classList.add("today"),e.innerHTML=Ze,kt(e,{en:"Load Today's Chat Logs",ru:"Загрузить сегодняшние логи чата"}))}function d(e,t,n){const o=n-t,s=e-t;return o<=0?100:Math.min(100,Math.max(0,Math.round(s/o*100)))}async function u(){window.chatlogsParserState||(window.chatlogsParserState={isRunning:()=>n,stop:m}),window.stopChatlogsParser||(window.stopChatlogsParser=m),n=!0,o=!1,s=new AbortController,e.innerHTML=ct,function(){const e=t.querySelector(".panel-header-shuffle-button");e&&(e.dataset.mode="",e.classList.remove("today"),e.innerHTML=We,kt(e,{en:"Random Date",ru:"Случайная дата"}))}();const u=await a();if(!u)return void p();let g,h;if("personalmentions"===u.mode){let e=u.mentionKeywords||[];if(!Array.isArray(e)||0===e.length)return alert("No mention keywords provided. Please enter at least one keyword."),void p();h=e.map((e=>e?e.toLowerCase():"")).filter(Boolean),g=[]}else if("fromregistered"===u.mode){let e=await i();if(null===e||0===e.length)return alert(Ts.noUsersSelected[r]),void p();let t=[];for(const n of e){let e=await P(n,"registered"),o=null;"string"==typeof e?o=e:"number"==typeof e&&(o=new Date(1e3*e).toISOString().slice(0,10)),o&&t.push(o)}if(!t.length)return alert(Ts.unableToGetRegDate[r]),void p();let n=t.sort()[0],o=prompt(Ts.editStartDate[r](n),n);if(!o)return void p();if(o=he(o.trim()),!o)return alert(Ts.invalidEditedDate[r]),void p();let s=w;oe?e.trim().toLowerCase():"")).filter(Boolean))}return n}(f),null===h))return void p();let y=u.from,v=u.to,b=[];const x=new Map,C=(S=t)?S.classList.contains("chat-logs-container")?S:S.querySelector(".chat-logs-container"):null;var S;C&&(C.innerHTML="");let k=null;if(C){const e=document.createElement("div");e.className="search-messages-info",f?h.length>0?e.textContent=Ts.searchInfoAllUsers[r](h):e.textContent=Ts.searchInfoAllUsersNoTerms[r]:h.length>0?e.textContent=Ts.searchInfoSomeUsers[r](g,h):e.textContent=Ts.searchInfoAllFromUsers[r](g),C.appendChild(e),k=document.createElement("div"),k.className="search-messages-date",k.textContent="",e.insertAdjacentElement("afterend",k)}const E=new Date(y),$=new Date(v);let L=new Date(E);for(;L<=$&&!o;){const e=L.toISOString().slice(0,10);if(k){const t=d(L,E,$);k.textContent=Ts.dateProgressInfo[r](y,e,t)}try{const{chatlogs:t}=await Lo(e,null,s.signal);if(o)break;let n;if(f?n=t.filter((e=>e&&e.message&&l(e.message,h))):(n=t.filter((e=>e&&e.message&&g.includes(e.username))),h.length>0&&(n=n.filter((e=>l(e.message,h))))),o)break;if(b=b.concat(n),n.forEach((({username:e})=>{x.set(e,(x.get(e)||0)+1)})),o)break;if(C&&n.length>0){if(ys(n,C,!0,e,h,h&&h.length>0),o)break;vs(x,C.closest(".chat-logs-panel"))}if(o)break;if(await new Promise((e=>setTimeout(e,60))),o)break;L.setDate(L.getDate()+1)}catch(e){if("AbortError"===e.name){console.log("Parsing was aborted");break}console.error("Error during parsing:",e);break}}if(C&&0===b.length){let e;e=f?h.length>0?Ts.noMessagesFoundAll[r](h):Ts.noMessagesFoundAllNoTerms[r]:h.length>0?Ts.noMessagesFoundSome[r](h):Ts.noMessagesFound[r],C.innerHTML=`
${e}
`;const t=C.closest(".chat-logs-panel");if(t){const e=t.querySelector(".active-users");e&&(e.innerHTML="")}}p(),C&&vs(x,C.closest(".chat-logs-panel")),c()}function m(){o=!0,s&&s.abort(),n=!1,p(),c()}function p(){e.innerHTML=lt,n=!1,o=!1,s=null}e.addEventListener("click",(async e=>{e.ctrlKey?confirm(Ts.deleteConfirm[r])&&(await async function(){const e=await yo();return new Promise(((t,n)=>{const o=e.transaction(fo,"readwrite").objectStore(fo).clear();o.onsuccess=()=>{wo(0),t()},o.onerror=()=>n(o.error)}))}(),alert(Ts.deleteSuccess[r])):n?m():await u()}))}let{panelsEvents:Is}=E;async function As(e){const t=document.querySelector(".chat-logs-panel");if(t)return t.remove(),void It("hide");ee();const n=document.createElement("div");n.className="chat-logs-panel popup-panel";const o=document.createElement("div");o.className="panel-header";const s=document.createElement("div");s.className="panel-control-buttons";const r=document.createElement("div");r.className="search-for-chatlogs-messages";const a=document.createElement("input");function i(){requestAnimationFrame((function(){a.focus()}))}a.className="chatlogs-search-input",a.type="text",kt(a,{en:" \n [Ctrl + Click] clear input and reset filtered items\n [Valid date + Enter] load chat logs for the date in input field (e.g. 2023-10-01, 2023:10:01, 231001, 2310, 2310:01)\n [Search by name]: name(, name2…); prefix: name (partial) or prefix:: name (exact), e.g. name: iv / name:: Ivan. Prefixes: user, username, nick, name, nickname.\n [Search by word]: word(, or(\\/|) word2…); prefix: word (partial) or prefix:: word (exact), e.g. word: priv / word:: privet. Prefixes: msg, message, text, word, content.\n ",ru:" \n [Ctrl + Click] очистить поле и сбросить фильтр\n [Корректная дата + Enter] загрузить чат-логи за выбранную дату (например, 2023-10-01, 2023:10:01, 231001, 2310, 2310:01)\n [Поиск по имени]: имя(, имя2…); приставка: имя (неполное) или приставка:: имя (точное), напр. имя: ив / имя:: Иван. Приставки: пользователь, ник, имя, никнейм.\n [Поиск по слову]: слово(. или(\\/|) слово2…); приставка: слово (неполное) или приставка:: слово (точное), напр. слово: прив / слово:: привет. Приставки: сообщение, текст, слово, контент.\n "}),r.appendChild(a),o.appendChild(r),a.addEventListener("input",(()=>rs(a.value))),a.addEventListener("click",(e=>{e.ctrlKey&&(a.value="",rs(a.value))})),a.addEventListener("keydown",(async e=>{const t=a.value;if("Enter"===e.key){let e=t;/^\d{8}$/.test(t)?(e=6===t.length?"20"+t:t,e=e.replace(/(\d{4})(\d{2})(\d{2})/,"$1-$2-$3")):/^\d{6}$/.test(t)&&(e="20"+t.replace(/(\d{2})(\d{2})(\d{2})/,"$1-$2-$3"));if(/^\d{2,4}[:\-]\d{2}[:\-]\d{2}$/.test(e.replace(/:/g,"-"))&&!isNaN(new Date(e.replace(/:/g,"-")).getTime()))await D(e),d(u);else{const e="ru"===pe()?["Пожалуйста, введите корректную дату.","","Допустимые форматы:","1. гггг-мм-дд","2. гггг:мм:дд","3. гг-мм-дд","4. гг:мм:дд","5. ггггммдд","6. ггммдд",""].join("\n"):["Please enter a valid date.","","Valid formats include:","1. yyyy-mm-dd","2. yyyy:mm:dd","3. yy-mm-dd","4. yy:mm:dd","5. yyyymmdd","6. yymmdd",""].join("\n");alert(e)}a.value=""}})),i();const l=document.createElement("div");l.className="large-button panel-header-parse-button",l.innerHTML=lt,kt(l,{en:"\n [Click] to parse Chat Logs\n [Ctrl + Click] to delete stored Chat Logs from IndexedDB\n ",ru:"\n [Клик] спарсить логи чата\n [Ctrl + Клик] удалить сохранённые логи из IndexedDB\n "}),Ns(l,n),s.appendChild(l);const c=document.createElement("div");function d(e){"none"===e.style.display&&(e.style.display="flex")}c.className="large-button panel-header-date-button",c.innerHTML=Ye,c.addEventListener("click",(()=>{var e;(e=u).style.display="none"===e.style.display?"flex":"none"}));const u=document.createElement("input");u.type="date",u.className="chatlogs-date-input",u.style.display="none",s.appendChild(c),s.appendChild(u);const m=document.createElement("div");m.className="large-button panel-header-toggle-mention-messages-button",m.innerHTML=De,kt(m,{en:"Toggle Mention Messages",ru:"Показать только упоминания"}),m.addEventListener("click",(async()=>{B("mention")}));const p=document.createElement("div");p.className="toggle-mention-messages-counter",p.textContent="0",m.appendChild(p),s.appendChild(m);const g=document.createElement("div");g.className="large-button panel-header-toggle-media-messages-button",g.innerHTML=Oe,kt(g,{en:"Toggle Media Messages",ru:"Показать только медиа контент"}),g.addEventListener("click",(async()=>{B("media")}));const h=document.createElement("div");h.className="toggle-media-messages-counter",h.textContent="0",g.appendChild(h),s.appendChild(g);const f=document.createElement("div");function y(e,t){t&&(t.replaceChildren(),e.forEach((({url:e,title:n})=>{const o=So(e),s=document.createElement("div");s.classList.add("saved-chatlog-url-wrapper");const r=document.createElement("a");r.classList.add("saved-chatlog-url"),r.textContent=o,r.href=e;const a=document.createElement("span");a.classList.add("saved-chatlog-url-title"),a.textContent=n||"➕",s.appendChild(r),s.appendChild(a),t.appendChild(s)})))}f.className="large-button panel-header-copy-button",f.innerHTML=Xe,kt(f,{en:" \n [Click] to copy Chat Logs Url\n [Ctrl + Click] to save Chat Logs with title\n [Shift + Click] to show/hide saved Chat Logs\n [Alt + Click] to copy Chat Logs in BBCode, Markdown, or Plain format\n [Alt + Shift + Click] to save Chat Logs in BBCode, Markdown, or Plain format\n ",ru:" \n [Клик] скопировать ссылку на чат-логи\n [Ctrl + Клик] сохранить чат-логи с заголовком\n [Shift + Клик] показать/скрыть сохранённые чат-логи\n [Alt + Клик] скопировать чат-логи в BBCode, Markdown или Plain\n [Alt + Shift + Клик] сохранить чат-логи в BBCode, Markdown или Plain\n "}),f.addEventListener("click",(e=>{let t=document.querySelector(".saved-chatlog-container");!t&&!e.shiftKey&&K(f,0,0),!t||e.ctrlKey||t.contains(e.target)||t.remove();let n=JSON.parse(localStorage.getItem("savedChatlogs"))||[];const o=document.querySelectorAll(".chat-logs-container .message-item");if((e.altKey||e.altKey&&e.shiftKey)&&0===o.length)ge({en:"No chat logs to copy or save.",ru:"Нет чатлогов для копирования или сохранения."},"alert");else if(e.altKey)gs(e,N,{date:u.value||x,isMessagesPanel:!1,includeDateHeaders:!0,includeMessageLinks:!0,prefix:"chatlogs"});else if(e.ctrlKey&&!e.target.closest(".saved-chatlog-url")){const e=So(q);if(!e)return;const o=prompt("Enter a title for this chat log:","➕");n.some((t=>So(t.url)===e))||(n.push({url:q,title:o||"➕"}),n.sort(((e,t)=>{const n=So(e.url),o=So(t.url);return new Date(n)-new Date(o)})),localStorage.setItem("savedChatlogs",JSON.stringify(n))),y(n,t)}else e.shiftKey?n.length>0&&!t&&(t=document.createElement("div"),t.classList.add("saved-chatlog-container"),y(n,t),f.appendChild(t)):navigator.clipboard.writeText(q).catch((e=>console.error("Failed to copy: ",e)))})),s.appendChild(f);const v=localStorage.getItem("shouldShowActiveUsers")||(localStorage.setItem("shouldShowActiveUsers","shown"),"shown"),b=document.createElement("div");function S(e){b.innerHTML="shown"===e?Ke:Je,kt(b,"shown"===e?{en:"Hide User List",ru:"Скрыть список пользователей"}:{en:"Show User List",ru:"Показать список пользователей"})}b.className="large-button panel-header-toggle-button",S(v),b.addEventListener("click",(function(){const e="shown"===localStorage.getItem("shouldShowActiveUsers")?"hidden":"shown";if(localStorage.setItem("shouldShowActiveUsers",e),S(e),"shown"===e)vs(A,n);else{const e=n.querySelector(".active-users");e&&n.removeChild(e)}})),s.appendChild(b);const k=document.createElement("div");k.className="large-button panel-header-one-day-back-button",k.innerHTML=Ve,kt(k,{en:"Previous Day",ru:"Предыдущий день"});const E=document.createElement("div");E.className="large-button panel-header-one-day-forward-button",E.innerHTML=Ge,kt(E,{en:"Next Day",ru:"Следующий день"});const $=document.createElement("div");function L(){return u.value?new Date(u.value):new Date}$.className="large-button panel-header-shuffle-button",$.innerHTML=We,kt($,{en:"Random Date",ru:"Случайная дата"});function T(){a.value&&a.value.trim().length>0&&rs(a.value),d(u),i()}k.addEventListener("click",(async()=>{const e=L();e.setDate(e.getDate()-1),await D(e,T)})),E.addEventListener("click",(async()=>{const e=L();e.setDate(e.getDate()+1),await D(e,T)})),$.addEventListener("click",(async()=>{if("loadToday"===$.dataset.mode)await D(x,(()=>{T(),$.dataset.mode="",$.classList.remove("today"),$.innerHTML=We,kt($,{en:"Random Date",ru:"Случайная дата"})}));else{const e=function(){const e=new Date(w),t=new Date-e,n=Math.floor(Math.random()*t),o=new Date(e.getTime()+n);return new Intl.DateTimeFormat("en-CA").format(o)}();await D(e,(()=>{T()}))}})),s.appendChild(k),s.appendChild(E),s.appendChild($);const M=document.createElement("div");M.className="large-button panel-header-close-button",M.innerHTML=Pe,kt(M,{en:"Close panel",ru:"Закрыть панель"}),M.addEventListener("click",(()=>{Nt(n,"hide"),It("hide")})),s.appendChild(M),o.appendChild(s);const N=document.createElement("div");N.className="chat-logs-container messages-search-container",n.appendChild(o),n.appendChild(N),document.body.appendChild(n);const{scrollButtonsContainer:I}=Dt(N);n.appendChild(I),Nt(n,"show"),It("show");const A=new Map;let q="";const D=async(e,t)=>{const o=new Intl.DateTimeFormat("en-CA").format(new Date((e=>/^\d{4}:\d{2}:\d{2}$/.test(e)?e.replace(/:/g,"-"):e)(e)));if(ox){const e=pe();return void alert(o{u.value=e;const t={en:`Current date: ${e}`,ru:`Текущая дата: ${e}`};kt(u,t),kt(c,t)})(o);const{chatlogs:s,url:r,placeholder:i}=await Lo(o,N);a.placeholder=i,q=`${r}?rand=${Co}`,A.clear();const l=[...new Set(s.map((e=>e.username)).filter((e=>e&&"SYSTEM"!==e)))];await J(l);const d=ys(s,N);A.clear();for(const[e,t]of d.entries())A.set(e,t);vs(A,n),requestAnimationFrame((()=>{Jo("chatlogsMessages"),ts("chatlogsMessages"),vn("chatlogsMessages"),pn("chatlogsMessages"),h.textContent=document.querySelectorAll(".chat-logs-container .media").length,p.textContent=document.querySelectorAll(".chat-logs-container .mention").length,function(){if(N.childElementCount>0){const e="ru"===pe()?"Всего сообщений":"Total messages";a.placeholder+=` | ${e}: ${N.childElementCount}`}}(),B(null,!1),"function"==typeof t&&t(),N.scrollTop=N.scrollHeight}))},j=e||x;await D(j),e&&d(u),u.max=x,u.min=w,u.value=j,kt(c,{en:`Current date: ${j}`,ru:`Текущая дата: ${j}`}),u.addEventListener("change",(async e=>{const t=e.target.value;await D(t),kt(c,{en:`Current date: ${t}`,ru:`Текущая дата: ${t}`})})),Is.handleChatLogsKeydown=e=>{"Escape"===e.key&&(Nt(n,"hide"),It("hide"),document.removeEventListener("keydown",Is.handleChatLogsKeydown))},document.addEventListener("keydown",Is.handleChatLogsKeydown),n.addEventListener("click",(async e=>{if(e.target.closest("a"))return;const t=e.target.closest(".message-item"),n=e.target.closest(".message-time"),o=e.target.closest(".message-username"),s=e.target.closest(".message-text");if(t||s){if(e.ctrlKey&&t)return void function(e,t){const n=e.querySelector(".message-username")?.textContent?.trim(),o=e.querySelector(".message-text"),s=o?me(o):"",r=e.querySelector(".message-time")?.textContent?.trim();let a=t.value,i=e.previousElementSibling;for(;i&&!i.classList.contains("date-item");)i=i.previousElementSibling;if(i&&i.classList.contains("date-item")){const e=i.querySelector(".date-text");a=e?e.textContent.trim():i.textContent.trim()}const l=JSON.parse(localStorage.getItem(js))||{},c=JSON.parse(localStorage.getItem(C)||"{}");l[`[${r}]_${n}_${a}`]={time:`[${r}]`,date:a||x,username:n,usernameColor:c[n]?.color||"#808080",message:s,type:"mention",userId:c[n]?.id||""};const d=Object.keys(l);d.sort(((e,t)=>{const n=e=>{const t=l[e],n=t.date||"",o=(t.time||"").replace(/\[|\]/g,"");return new Date(`${n}T${o||"00:00:00"}`)};return n(e)-n(t)}));const u={};for(const e of d)u[e]=l[e];localStorage.setItem(js,JSON.stringify(u)),K(e,0,0)}(t,u);if(O={media:!1,mention:!1},m.classList.remove("active"),g.classList.remove("active"),a.value="",rs(""),n){let t=u.value;const o=n.textContent;if(n.closest(".chat-logs-container")){let e=n.parentElement;for(;e&&!e.classList.contains("date-item");)e=e.previousElementSibling;if(e&&e.classList.contains("date-item")){const n=e.querySelector(".date-text");t=n?n.textContent.trim():e.textContent.trim()}}if(e.shiftKey)return e.preventDefault(),e.stopPropagation(),void de(t,o,n);const s=`https://klavogonki.ru/chatlogs/${t}.html#${o}`;return void window.open(s,"_blank","noopener,noreferrer")}if(o){const e=o.textContent,t=await async function(e){const t=JSON.parse(localStorage.getItem(C)||"{}");if(t[e]?.id)return t[e].id}(e);if(t){const e=`https://klavogonki.ru/u/#/${t}/`;window.open(e,"_blank","noopener,noreferrer")}else Y(o);return}requestAnimationFrame((async()=>{await Bn(N,t)}))}})),kt(".message-time",n,(e=>({en:` \n [Click] Open chatlog at ${e.textContent}\n [Shift + Click] Copy chatlogs URL to clipboard\n `,ru:` \n [Клик] открыть чатлог на ${e.textContent}\n [Shift + Клик] скопировать ссылку на чатлог\n `})),!0),kt(".message-username",n,(e=>({en:`[Click] Open ${e.textContent} profile`,ru:`[Клик] открыть профиль ${e.textContent}`})),!0),kt(".message-text",n,(e=>({en:"\n [Click] Scroll message to the middle of the chat logs\n [Ctrl + Click] add message to the messages panel \n ",ru:"\n [Клик] прокрутить сообщение к центру чатлога\n [Ctrl + Клик] добавить сообщение в панель сообщений\n "})),!0),n.addEventListener("click",(e=>{const t=e.target.closest(".active-user-item");if(t){const n=t.querySelector(".active-user-name"),o=n?.textContent;if(!o)return;const s=a.value.trim(),r=e.ctrlKey?`, ${o}`:o;a.value=s===o?"":e.ctrlKey&&!s.includes(o)?s+r:o,rs(a.value)}})),kt(".active-user-name",n,(e=>({en:`\n [Click] to filter messages by ${e.textContent}\n [Repeat Click] to clear ${e.textContent} from the search input\n [Ctrl + Click] to add additional username to the search input\n `,ru:` \n [Клик] фильтровать сообщения по ${e.textContent}\n [Повторный клик] убрать ${e.textContent} из поиска\n [Ctrl + Клик] добавить пользователя к поиску\n `})),!0),kt(".saved-chatlog-url",n,(e=>({en:`\n [Click] Load chat logs for ${e.textContent}\n [Ctrl + Click] Remove this saved chat log\n [Middle Click]Open in new tab\n `,ru:`\n [Клик] загрузить чат - логи за ${e.textContent}\n [Ctrl + Клик] удалить сохранённый чатлог\n [Средний клик] открыть в новой вкладке\n `})),!0),kt(".saved-chatlog-url-title",n,(e=>({en:"[Click] Edit title for this chat log",ru:"[Клик] изменить заголовок для этого чатлога"})),!0),n.addEventListener("click",(async e=>{const t=e.target.closest(".saved-chatlog-url");if(t){e.preventDefault();let n=JSON.parse(localStorage.getItem("savedChatlogs"))||[];if(e.ctrlKey){const e=t.href,o=n.filter((t=>t.url!==e));if(o.length!==n.length){n=o,localStorage.setItem("savedChatlogs",JSON.stringify(n));const e=t.closest(".saved-chatlog-url-wrapper");e&&e.remove()}}else if(1===e.button)window.open(t.href,"_blank","noopener,noreferrer");else{const e=t.textContent;await D(e)}return}const n=e.target.closest(".saved-chatlog-url-title");if(n){let e=JSON.parse(localStorage.getItem("savedChatlogs"))||[];const t=n.closest(".saved-chatlog-url-wrapper"),o=t&&t.querySelector(".saved-chatlog-url");if(!o)return;const s=o.href,r=prompt("Enter a new title for this chat log:",n.textContent);if(null!==r&&r!==n.textContent){n.textContent=r;const t=e.findIndex((e=>e.url===s));-1!==t&&(e[t].title=r,localStorage.setItem("savedChatlogs",JSON.stringify(e)))}}else;}));let O={media:!1,mention:!1};function B(e,t=!0){if(t&&e){const t="mention"===e;O={media:!!("media"===e)&&!O.media,mention:!!t&&!O.mention}}N.querySelectorAll(".message-item").forEach((e=>{const t=e.querySelector(".media"),n=e.querySelector(".mention");O.media?e.classList.toggle("hidden-message",!t):O.mention?e.classList.toggle("hidden-message",!n):e.classList.remove("hidden-message")})),m.classList.toggle("active",O.mention),g.classList.toggle("active",O.media)}}function qs(e,t){function n(){Nt(e.closest(".cached-messages-panel"),"hide"),It("hide")}e.addEventListener("mouseover",(function(t){const n=t.target.closest(".message-time");if(n&&e.contains(n)){const e=n.closest(".message-item");if(!e)return;const t=e.dataset.type;"mention"!==t&&"private"!==t||(n.style.color="mention"===t?"lightgreen":"peachpuff")}})),e.addEventListener("mouseout",(function(t){const n=t.target.closest(".message-time");if(n&&e.contains(n)){const e=n.closest(".message-item");if(!e)return;const t=e.dataset.type;"mention"!==t&&"private"!==t||(n.style.color=N[t]||"slategray")}})),e.addEventListener("click",(async function(e){const o=e.target.closest(".message-time"),s=e.target.closest(".message-username"),r=e.target.closest(".message-text"),a=e.target.closest(".message-item");if(a){if(o&&a.contains(o)){const t=a.dataset.type;let n,s=a.previousElementSibling;for(;s&&!s.classList.contains("date-item");)s=s.previousElementSibling;if(s&&(n=s.dataset.date),"mention"===t||"private"===t){if(e.shiftKey)return e.preventDefault(),e.stopPropagation(),void("mention"===t&&de(n,cs(o.textContent),o));if(e.ctrlKey)return void ds(a,"from");if("mention"===t){const e=`https://klavogonki.ru/chatlogs/${n}.html#${cs(o.textContent)}`;window.open(e,"_blank","noopener,noreferrer")}}}if(s&&a.contains(s)){if(e.ctrlKey)return void ds(a,"all");const t=s.dataset.userId;if(t){const e=`https://klavogonki.ru/u/#/${t}/`;window.open(e,"_blank","noopener,noreferrer")}else Y(s)}if(r&&a.contains(r)){if(e.ctrlKey)return e.target.closest("a")&&(e.preventDefault(),e.stopPropagation()),void ds(a,"single");const o=a.querySelector(".message-username")?.textContent;a.querySelector(".message-time");if("private"===a.dataset.type)return void requestAnimationFrame((async()=>{await ls(r.textContent,o,!0)?n():Y(a)}));if(await ls(r.textContent,o,!0))n();else{Y(a);let e=r.parentElement.previousElementSibling;for(;e&&!e.classList.contains("date-item");)e=e.previousElementSibling;if(e){await As(e.dataset.date);const n=r.textContent;requestAnimationFrame((()=>{let e=0;const s=setInterval((async()=>{const r=await async function(e,t,n){const o=document.querySelector(".chat-logs-container");if(!o)return null;const s=e=>String(e||"").replace(/\s+/g,"").trim().toLowerCase(),r=s(t),a=s(e),i=Array.from(o.querySelectorAll(".message-item")).find((e=>{const t=e.querySelector(".message-username"),n=e.querySelector(".message-text");if(t&&n){const e=s(t.textContent),o=s(n.textContent);if(e===r&&o===a)return!0}return!1}));return i&&n&&await Bn(o,i),i||!1}(n,o,!0);if(r)clearInterval(s);else if(++e>=10){clearInterval(s);Nt(document.querySelector(".chat-logs-panel"),"hide"),t()}}),200)}))}}}}}))}let{panelsEvents:Ds}=E;const js="personalMessages",Os="newMessagesCount",Bs="personalMessagesBackup",Hs="absentMentionsLastFetch";async function Ps(){const e=document.querySelector(".cached-messages-panel");if(e)return e.remove(),void It("hide");let t=!0,n=!1,o=!1;us(),localStorage.getItem(Bs)&&localStorage.removeItem(Bs),ee();const s=document.querySelector(".personal-messages-button .new-message-count");s&&(s.textContent="0"),s.style.visibility="hidden",localStorage.removeItem(Os);let r=ms();const a=document.createElement("div");a.className="cached-messages-panel popup-panel";const i=document.createElement("div");i.className="panel-header";const l=document.createElement("div");l.className="search-for-personal-messages";const c=document.createElement("input");c.className="personal-messages-search-input",c.type="search",kt(c,{en:"\n [Ctrl + Click] to clear search input and display all personal messages\n [Search by name]: name(, name2…); prefix: name (partial) or prefix:: name (exact), e.g. name: iv / name:: Ivan. Prefixes: user, username, nick, name, nickname.\n [Search by word]: word(, or(\\/|) word2…); prefix: word (partial) or prefix:: word (exact), e.g. word: priv / word:: privet. Prefixes: msg, message, text, word, content.\n ",ru:"\n [Ctrl + Click] чтобы очистить поиск и показать все личные сообщения\n [Поиск по имени]: имя(, имя2…); приставка: имя (неполное) или приставка:: имя (точное), напр. имя: ив / имя:: Иван. Приставки: пользователь, ник, имя, никнейм.\n [Поиск по слову]: слово(. или(\\/|) слово2…); приставка: слово (неполное) или приставка:: слово (точное), напр. слово: прив / слово:: привет. Приставки: сообщение, текст, слово, контент. \n "}),l.appendChild(c);const d=document.createElement("div");d.className="panel-control-buttons";const u=document.createElement("div");u.className="large-button panel-header-save-button",u.innerHTML=ot,kt(u,{en:"Save messages",ru:"Сохранить сообщения"}),u.style.opacity="0",u.addEventListener("click",(()=>{const e=localStorage.getItem(Bs),n=localStorage.getItem(js),o=e&&n;if(o&&o&&n!==e&&!t){ge({en:"Do you want to apply changes?",ru:"Вы хотите применить изменения?"},"confirm")&&(localStorage.setItem(js,e),localStorage.removeItem(Bs),u.style.setProperty("display","none","important"),u.style.opacity="0",u.addEventListener("transitionend",(function(){u.style.display="none"})))}}));const m=document.createElement("div");m.className="large-button panel-header-parse-button",m.innerHTML=lt,kt(m,{en:"[Click] to start parsing mentions",ru:"[Клик] начать парсинг упоминаний"}),m.addEventListener("click",(()=>{const e={en:"Enter a date for parsing start (formats: yyyy-mm-dd, yyyy:mm:dd, yyyymmdd, yymmdd, yy-mm-dd, yy:mm:dd):",ru:"Введите дату начала парсинга (форматы: гггг-мм-дд, гггг:мм:дд, ггггммдд, ггммдд, гг-мм-дд, гг:мм:дд):"};let t=null;for(;;){let n=ge(e,"prompt","");if(!n)return;if(t=he(n.trim()),t)break;ge({en:"Invalid date format or value. Please try again.",ru:"Некорректный формат или значение даты. Попробуйте еще раз."},"alert")}localStorage.setItem("lastParseDate",t),ge({en:`Start date for parsing set to: ${t}`,ru:`Дата начала парсинга установлена: ${t}`},"alert"),Rs(x),ee(!0)}));const p=document.createElement("div");p.className="large-button panel-header-import-button",p.innerHTML=tt,kt(p,{en:"Import messages",ru:"Импортировать сообщения"}),p.addEventListener("click",(()=>{n=!0;const e=document.createElement("input");e.type="file",e.accept=".json",e.addEventListener("change",(e=>{const t=e.target.files[0];if(t){const e=new FileReader;e.onload=async()=>{try{const t=JSON.parse(e.result),n={...JSON.parse(localStorage.getItem(js)||"{}"),...t},o=Object.fromEntries(Object.entries(n).sort((([,e],[,t])=>{const n=e.time.replace(/[[\]]/g,""),o=t.time.replace(/[[\]]/g,""),s=`${e.date} ${n}`,r=`${t.date} ${o}`;return new Date(s)-new Date(r)})));localStorage.setItem(js,JSON.stringify(o)),us();const s=ms();await E(s)}catch(e){ge({en:"Failed to import messages. The file may be corrupted.",ru:"Не удалось импортировать сообщения. Возможно, файл поврежден."},"alert")}},e.readAsText(t)}})),e.click()}));const g=document.createElement("div");g.className="large-button panel-header-export-button",g.innerHTML=nt,kt(g,{en:"Export messages",ru:"Экспортировать сообщения"}),g.addEventListener("click",(()=>{const e=localStorage.getItem(js);if(e&&"{}"!==e){const t=new Intl.DateTimeFormat("en-CA").format(new Date),n=JSON.parse(e),o=JSON.stringify(n,null,2),s=new Blob([o],{type:"application/json"}),r=document.createElement("a");r.href=URL.createObjectURL(s),r.download=`Personal_Messages_${t}.json`,r.click()}else ge({en:"No messages to export.",ru:"Нет сообщений для экспорта."},"alert")}));const h=document.createElement("div");h.className="large-button panel-header-copy-button",h.innerHTML=Xe,kt(h,{en:"\n [Click] copy messages in BBCode, Markdown, or Plain format\n [Shift + Click] save messages in BBCode, Markdown, or Plain format\n ",ru:"\n [Клик] скопировать сообщения в BBCode, Markdown или Plain формате\n [Shift + Клик] сохранить сообщения в BBCode, Markdown или Plain формате\n "}),h.addEventListener("click",(e=>{const t=localStorage.getItem(js);if(!t||"{}"===t||0===Object.keys(JSON.parse(t)).length)return void ge({en:"No messages to copy or save.",ru:"Нет сообщений для копирования или сохранения."},"alert");gs(new MouseEvent("click",{altKey:!0,shiftKey:e.shiftKey,bubbles:!0,cancelable:!0}),v,{date:x,isMessagesPanel:!0,includeDateHeaders:!0,includeMessageLinks:!0,prefix:"messages",messages:r}),K(h)}));const f=document.createElement("div");f.className="large-button panel-header-clear-button",kt(f,{en:"Clear personal messages",ru:"Очистить личные сообщения"}),f.innerHTML=Qe,f.addEventListener("click",(()=>{n=!0;const e=JSON.parse(localStorage.getItem(js)||"{}");if(0===Object.keys(e).length)return ge({en:"No messages to delete.",ru:"Нет сообщений для удаления."},"alert"),void localStorage.setItem("lastParseDate",x);v.innerHTML=null,localStorage.setItem(js,JSON.stringify({})),localStorage.setItem("lastParseDate",x),Nt(a,"hide"),It("hide");const t=document.querySelector(".personal-messages-button .total-message-count");t&&(t.textContent="0")}));const y=document.createElement("div");y.className="large-button panel-header-close-button",kt(y,{en:"Close panel",ru:"Закрыть панель"}),y.innerHTML=Pe,y.addEventListener("click",(()=>{Nt(a,"hide"),It("hide")})),i.appendChild(l),d.append(u,m,p,g,h,f,y),i.appendChild(d),a.appendChild(i);const v=document.createElement("div");v.className="messages-container messages-search-container",a.appendChild(v);let b=null,w=null,C=0,S=100;const k=[];async function E(e){v.children.length&&v.replaceChildren();const s=document.createDocumentFragment();Object.entries(e).forEach((([,{time:e,date:t,username:n,usernameColor:o,message:r,type:a,userId:i}])=>{if(b!==t){const e=document.createElement("div");e.className="date-item";const n=document.createElement("span");n.className="date-text",n.textContent=t===x?"Today":t;const o=document.createElement("span");o.className="date-emoji",o.textContent=t===x?" ⏳":" 📅",e.appendChild(n),e.appendChild(o),e.dataset.date=t,s.appendChild(e),b=t}const l=document.createElement("div");l.className="message-item",l.dataset.type=a;const c=`${t}|${e}|${n}`;l.setAttribute("data-message-key",c),n!==w&&(l.style.marginTop="0.6em",w=n);const d=e.replace(/[\[\]]/g,"").trim(),u=document.createElement("span");u.className="message-time",u.textContent=d,u.style.color=N[a]||"slategray";const m=document.createElement("span");m.className="message-username",m.textContent=n,m.style.color=o,m.dataset.userId=i;const p=document.createElement("span");p.className="message-text",p.innerHTML=r.replace(/:(?=\w*[a-zA-Z])(\w+):/g,((e,t)=>`:${t}:`)).replace(/(https?:\/\/[^\s]+)/gi,(e=>`${e}`));const g={messageTextElement:p,time:e,username:n,type:a};k.push(g),l.appendChild(u),l.appendChild(m),l.appendChild(p),l.addEventListener("click",(function(e){localStorage.setItem("lastClickedMessage",c)})),s.appendChild(l)})),v.appendChild(s),requestAnimationFrame((()=>{o=!0,Jo("personalMessages"),ts("personalMessages"),vn("personalMessages"),pn("personalMessages"),setTimeout((()=>{o=!1,n=!1,new MutationObserver((e=>{n||e.find((e=>"childList"===e.type&&e.removedNodes.length>0))&&"0"===u.style.opacity&&(t=!1,u.style.visibility="visible",u.style.display="flex",u.offsetHeight,u.style.opacity="1",u.style.transition="opacity 0.5s ease")})).observe(v,{childList:!0,subtree:!0});const e=localStorage.getItem("lastClickedMessage");if(e){const t=v.querySelector(`[data-message-key="${e}"]`);t&&(t.classList.add("previous-message"),t.scrollIntoView({block:"center",behavior:"smooth"}))}}),500)})),k.reverse().forEach((async({messageTextElement:e,username:t,type:n})=>{let o=!1;if(C=S&&console.log("Reached maximum ping checks limit.")}catch(e){console.error("Error checking for pingable message:",e),o=!1}}e.style.color=o&&"mention"===n?"lightgreen":o&&"private"===n?"lemonchiffon":I[n]||I.default}))}await E(r),document.body.appendChild(a);const{scrollButtonsContainer:$}=Dt(v);a.appendChild($),Nt(a,"show"),It("show"),c.addEventListener("click",(e=>{e.ctrlKey&&(c.value="",c.dispatchEvent(new Event("input",{bubbles:!0})))})),c.addEventListener("input",(()=>{rs(c.value)})),requestAnimationFrame((function(){c.focus()})),Ds.handlePersonalMessagesKeydown=e=>{"Escape"===e.key&&(Nt(a,"hide"),It("hide"),document.removeEventListener("keydown",Ds.handlePersonalMessagesKeydown))},document.addEventListener("keydown",Ds.handlePersonalMessagesKeydown),function(e){kt(".message-time",e,(e=>{const t=e.closest(".message-item")?.dataset.type,n=`[Ctrl + Click] Remove all messages starting from ${cs(e.textContent)}`,o=`[Ctrl + Клик] Удалить все сообщения начиная с ${cs(e.textContent)}`;return"private"===t?{en:n,ru:o}:{en:`\n [Click] Open chatlog at ${cs(e.textContent)}\n [Shift + Click] Copy chatlogs URL to clipboard\n ${n}\n `,ru:`\n [Клик] Открыть чатлог в ${cs(e.textContent)}\n [Shift + Клик] Скопировать ссылку на чатлог\n ${o}\n `}}),!0),kt(".message-username",e,(e=>({en:`\n [Click] Open ${e.textContent} profile\n [Ctrl + Click] Remove all messages from ${e.textContent} user\n `,ru:`\n [Клик] Открыть профиль ${e.textContent}\n [Ctrl + Клик] Удалить все сообщения пользователя ${e.textContent}\n `})),!0),kt(".message-text",e,(e=>{const t=e.closest(".message-item")?.dataset.type,n={private:{en:"[Click] Find this message in general chat",ru:"[Клик] Найти это сообщение в общем чате"},mention:{en:"[Click] Find this message in general chat or chatlog",ru:"[Клик] Найти это сообщение в общем чате или чатлоге"}};if("private"===t||"mention"===t)return{en:`${n[t].en} [Ctrl + Click] Remove only this message`,ru:`${n[t].ru} [Ctrl + Клик] Удалить только это сообщение`}}),!0)}(a),qs(v,Ps)}const Fs="lastParseDate";function _s(e,t={}){try{return e?JSON.parse(e):t}catch{return t}}function zs(e,t){const n={},o={};for(const s of e){const e=t[s];n[s]=e?.color||"#808080",o[s]=e?.id||"",e||console.debug(`No cached data found for username: ${s}`)}return{usernameColorCache:n,usernameIdCache:o}}async function Rs(e=x){const t=Date.now(),n=Number(localStorage.getItem(Hs))||0;if(t-n<6e4)return void localStorage.setItem(Hs,String(t));localStorage.setItem(Hs,String(t));const o=_s(localStorage.getItem(js)),s=localStorage.getItem(Fs)||e,r=[];if(s===e)r.push(e);else{new Date(s)>new Date(e)?r.push(e):r.push(...function(e,t){const n=[],o=new Date(e),s=new Date(t);for(;o<=s;)n.push(o.toISOString().split("T")[0]),o.setDate(o.getDate()+1);return n}(s,e))}const a=Math.floor((t-n)/864e5);if(r.length>1&&a>1){if(!ge({en:`You've been absent for ${a} days. Do you want to load personal mentions for the last ${r.length} days? This may take a while.`,ru:`Вы отсутствовали ${a} дней. Желаете загрузить сообщения с упоминаниями о вас за последние ${r.length} дней? Это может занять некоторое время.`},"confirm"))return}console.log(`Parsing messages for dates: ${r.join(", ")}`);const i=new Set(Object.values(o).map((e=>`${e.date}|${e.message}`))),l=_s(localStorage.getItem(C));let c,d,u,m,p,g={},h={},f=0;r.length>1&&a>1&&(c=document.createElement("div"),c.className="messages-parser-progress-container",d=document.createElement("div"),d.className="messages-parser-date-indicator",u=document.createElement("div"),u.className="messages-parser-progress-bar",m=document.createElement("div"),m.className="messages-parser-progress-bar-inner",m.style.width="0%",u.appendChild(m),p=document.createElement("div"),p.className="messages-parser-progress-label",p.textContent="",c.append(d,u,p),document.body.appendChild(c));let y=0;for(const e of r){let t=0;try{if(c){d.textContent=e;const t=Math.round(y/r.length*100);m.style.width=t+"%",p.textContent=`${y+1} / ${r.length}`}const n=await Lo(e);if(!n?.chatlogs?.length)continue;const s=n.chatlogs,a=[...new Set(s.filter((e=>e.username&&"SYSTEM"!==e.username.trim())).map((e=>e.username)))],u=a.filter((e=>!l[e]));if(u.length>0){console.log(`Fetching data for ${u.length} uncached users for date ${e}`);try{const e=await J(u);Object.assign(l,e),localStorage.setItem(C,JSON.stringify(l))}catch(e){console.error("Failed to fetch user data for uncached users:",e)}}const{usernameColorCache:v,usernameIdCache:b}=zs(a,l);Object.assign(g,v),Object.assign(h,b);for(const n of s)if(n.username&&"SYSTEM"!==n.username&&n.message&&un(n.message)){const s=`${e}|${n.message}`;if(!i.has(s)){o[`[${n.time}]_${n.username}_${e}`]={time:`[${n.time}]`,date:e,username:n.username,usernameColor:g[n.username]||"#808080",message:n.message,type:"mention",userId:h[n.username]||""},i.add(s),t++,f++}}console.log(`Found ${t} new mentions for ${e}`),r.indexOf(e)setTimeout(e,100)))}catch(t){console.error(`Error parsing messages for date ${e}:`,t)}y++}if(c&&(m.style.width="100%",c.remove()),f>0){localStorage.setItem(js,JSON.stringify(o));let e=Number(localStorage.getItem("newMessagesCount"))||0;e+=f,localStorage.setItem("newMessagesCount",String(e));const t=document.querySelector(".personal-messages-button .new-message-count");t&&(t.textContent=e,t.style.visibility=e>0?"visible":"hidden",K(t,50,50)),r.length>1&&a>1&&ge({en:`Added ${f} new personal mentions across ${r.length} days!`,ru:`Добавлено ${f} новых личных упоминаний за ${r.length} дней!`},"alert"),console.log(`Added ${f} total new mentions across ${r.length} days`)}localStorage.setItem(Fs,e)}var Us=n(324),Js={};Js.styleTagTransform=g(),Js.setAttributes=d(),Js.insert=l().bind(null,"head"),Js.domAPI=a(),Js.insertStyleElement=m();s()(Us.A,Js);Us.A&&Us.A.locals&&Us.A.locals;class Ks{constructor(){this.selected=new Set,this.isDragging=!1,this.toggleBtn=null,this.init()}init(){this.attachEvents(),this.updateDeletedMessages(),this.renderToggle()}attachEvents(){document.addEventListener("mousedown",(e=>{const t=e.target.closest(".messages-content p");if((2!==e.button||!e.target.closest("a")||!t)&&t&&2===e.button&&t){if(e.target.closest(".time")){const n=Array.from(document.querySelectorAll(".messages-content p")),o=n.indexOf(t);if(-1!==o)if(e.ctrlKey)n.slice(o).forEach((e=>{this.toggleSelect(e,!0,"time-mode"),e.classList.add("time-mode")}));else{const e=t.querySelector(".username");if(e){const t=e.textContent.trim();n.slice(o).forEach((e=>{const n=e.querySelector(".username");n&&n.textContent.trim()===t&&(this.toggleSelect(e,!0,"time-mode"),e.classList.add("time-mode"))}))}}}else if(e.target.closest(".username")){const t=e.target.closest(".username").textContent.trim();document.querySelectorAll(".messages-content p").forEach((e=>{const n=e.querySelector(".username");n&&n.textContent.trim()===t&&(this.toggleSelect(e,!0,"username-mode"),e.classList.add("username-mode"))}))}else this.isDragging=!0,this.toggleSelect(t,!0,"message-mode")}})),document.addEventListener("mouseup",(()=>this.isDragging=!1)),document.addEventListener("mousemove",(e=>{if(!this.isDragging)return;const t=e.target.closest(".messages-content p");t&&this.toggleSelect(t,!0,"message-mode")})),document.addEventListener("contextmenu",(e=>{const t=e.target.closest(".messages-content p");t&&!e.target.closest("a")&&(ue()||(e.preventDefault(),this.showDeleteButton(e,t)))}))}toggleSelect(e,t,n="message-mode"){if(!e)return;if(ue())return;e.classList.toggle("selected-message",t),t?"message-mode"===n&&e.classList.add("message-mode"):e.classList.remove("username-mode","time-mode","message-mode");const o=Ys(e);t?this.selected.add(o):this.selected.delete(o)}showDeleteButton(e,t){if(ue())return;const n=document.querySelector(".delete-btn");n&&n.remove();let o="message-mode";t.classList.contains("username-mode")?o="username-mode":t.classList.contains("time-mode")&&(o="time-mode");const s=document.createElement("button");s.className=`delete-btn ${o}`,s.textContent="Delete",document.body.append(s);const{offsetWidth:r,offsetHeight:a}=s;let i;s.remove(),Object.assign(s.style,{position:"fixed",top:e.clientY-a/2+"px",left:e.clientX-r/2+"px"}),s.onclick=()=>{document.querySelectorAll(".selected-message").forEach((e=>{e&&(e.classList.remove("selected-message","username-mode","time-mode","message-mode"),0===e.classList.length&&e.removeAttribute("class"))})),this.storeDeleted([...this.selected]),s.remove(),this.selected.clear(),this.updateDeletedMessages(),this.renderToggle()},s.addEventListener("mouseenter",(()=>{i&&clearTimeout(i)})),s.addEventListener("mouseleave",(()=>{i=setTimeout((()=>{s.remove(),this.clearSelection()}),1e3)})),document.body.append(s)}clearSelection(){document.querySelectorAll(".selected-message").forEach((e=>{e&&(e.classList.remove("selected-message","username-mode","time-mode","message-mode"),0===e.classList.length&&e.removeAttribute("class"))})),this.selected.clear()}storeDeleted(e){const t=new Set(JSON.parse(localStorage.getItem("deletedChatMessagesContent")||"[]"));e.forEach((e=>t.add(e))),localStorage.setItem("deletedChatMessagesContent",JSON.stringify([...t]))}updateDeletedMessages(){const e=new Set(JSON.parse(localStorage.getItem("deletedChatMessagesContent")||"[]")),t=document.querySelectorAll(".messages-content p");0!==t.length&&(t.forEach((t=>{if(!t)return;const n=Ys(t);t.classList.remove("shown-message"),t.classList.toggle("hidden-message",e.has(n))})),localStorage.setItem("deletedChatMessagesContent",JSON.stringify([...e])))}renderToggle(){if(!(JSON.parse(localStorage.getItem("deletedChatMessagesContent")||"[]").length>0))return void(this.toggleBtn&&(this.toggleBtn.remove(),this.toggleBtn=null));const e=document.querySelector(".messages-content");e&&(this.toggleBtn||(this.toggleBtn=document.createElement("button"),this.toggleBtn.className="toggle-button toggle-hidden",this.toggleBtn.textContent="Show",this.toggleBtn.onclick=e=>{if(e.ctrlKey)return document.querySelectorAll(".messages-content p").forEach((e=>{e&&e.classList.remove("hidden-message","shown-message")})),localStorage.setItem("deletedChatMessagesContent",JSON.stringify([])),this.selected.clear(),this.updateDeletedMessages(),void this.renderToggle();const t="Show"===this.toggleBtn.textContent,n=JSON.parse(localStorage.getItem("deletedChatMessagesContent")||"[]");document.querySelectorAll(".messages-content p").forEach((e=>{if(!e)return;const o=Ys(e);n.includes(o)&&(e.classList.toggle("hidden-message",!t),e.classList.toggle("shown-message",t))})),t?(this.toggleBtn.textContent="Hide",this.toggleBtn.classList.remove("toggle-hidden"),this.toggleBtn.classList.add("toggle-shown")):(this.toggleBtn.textContent="Show",this.toggleBtn.classList.remove("toggle-shown"),this.toggleBtn.classList.add("toggle-hidden"))},e.append(this.toggleBtn)))}}function Ys(e){if(!e)return"";const t=e.cloneNode(!0);Array.from(t.querySelectorAll(".time")).forEach((e=>e.remove()));return[t.textContent,[...Array.from(e.querySelectorAll("a")).map((e=>e.href)),...Array.from(e.querySelectorAll("img")).map((e=>e.title.trim())),...Array.from(e.querySelectorAll("iframe")).map((e=>e.src.trim()))].filter(Boolean).join(" ")].filter(Boolean).join(" ")}function Xs(){const e=document.querySelectorAll(".messages-content p");if(0===e.length)return;const t=new Set(Array.from(e).map((e=>Ys(e)))),n=new Set(JSON.parse(localStorage.getItem("deletedChatMessagesContent")||"[]"));localStorage.setItem("deletedChatMessagesContent",JSON.stringify([...n].filter((e=>t.has(e)))))}const Vs="Вы не можете отправлять сообщения",Gs="Связь с сервером потеряна";function Ws(e){if(!e)return null;const t=e.value;return t.includes(Vs)?Vs:t.includes(Gs)?Gs:null}function Zs(){const e=document.getElementById("chat-content").querySelectorAll(".messages-content div p"),t="14px",n=Array.from(e).map((e=>({element:e,isSystem:!!e.querySelector(".system-message"),username:(()=>{const t=e.querySelector("span.username span[data-user]");return t?t.textContent.replace(/[<>]/g,""):null})()})));let o=null,s=!1;n.forEach(((e,r)=>{const{element:a,isSystem:i,username:l}=e;if(a.style.marginTop="",a.style.marginBottom="",i)return a.style.marginTop=t,void(a.style.marginBottom=t);if(!l)return;s&&l!==o&&(a.style.marginTop=t);const c=n[r+1];c&&!c.isSystem&&c.username!==l&&(a.style.marginBottom=t),o=l,s=!0}))}if(Z("gamelist")){function ua(e,t,n){if(t.disabled){const o=Ws(t);o===Vs?(t.disabled=n.disabled=!1,n.style.setProperty("background-color","rgb(160, 35, 35)","important"),n.style.setProperty("background-image",`url("data:image/svg+xml,${encodeURIComponent(Be)}")`,"important"),n.style.setProperty("background-repeat","no-repeat","important"),n.style.setProperty("background-position","center","important"),n.style.setProperty("color","transparent","important"),t.value=null,console.log("Chat field was blocked, re-enabled.")):o===Gs&&(console.log("Lost connection, reloading..."),setTimeout((()=>{window.location.reload()}),e))}}const ma=new MutationObserver((()=>{const{chatField:e,chatSend:t}=lo();ua(5e3,e,t)})),{chatField:pa}=lo();pa&&ma.observe(pa,{attributes:!0,attributeFilter:["disabled"]}),document.addEventListener("visibilitychange",(()=>{if("visible"===document.visibilityState){const{chatField:e,chatSend:t}=lo();ua(1e3,e,t)}}))}function Qs(e){const t=document.querySelector(".chat .messages .text");t&&(Qs._privateInputHandler||(Qs._privateInputHandler=function(e){""===e.target.value&&Qs(!1)}),e?(t.style.setProperty("background-color","hsl(0, 50%, 20%)","important"),t.style.setProperty("color","hsl(0, 50%, 80%)","important"),t.addEventListener("input",Qs._privateInputHandler)):(t.style.removeProperty("background-color"),t.style.removeProperty("color"),t.removeEventListener("input",Qs._privateInputHandler)))}function er(e){er._lastUserId=er._lastUserId??null,er._privateMode=er._privateMode??!0,er._lastUserId!==e?(er._privateMode=!0,er._lastUserId=e):er._privateMode=!er._privateMode;const t=document.querySelector(`.name[data-user="${e}"]`).textContent,n=document.querySelector(".messages .text");n.value=er._privateMode?`<${t}>`:`${t}, `,n.focus(),n.selectionEnd=n.value.length,Qs(er._privateMode)}function tr(){const{chatHidden:e,chatField:t}=lo();!e&&t&&t.focus()}function nr(e){console.log("Clicked element:",e.target);const t=e.target.classList.contains("general")?"general":"game";localStorage.setItem("activeChatTab",t)}function or(){const{chatField:e}=lo();e.setAttribute("maxlength","1000"),e.addEventListener("paste",(t=>{t.preventDefault();const n=t.clipboardData.getData("text");let o=n;fn(n)&&(o=yn(n));const s=e.selectionStart,r=e.selectionEnd;e.value=e.value.slice(0,s)+o+e.value.slice(r),e.setSelectionRange(s+o.length,s+o.length)})),e.addEventListener("keydown",(t=>{const n=e.value;"Enter"===t.key&&(n.length>300?(t.preventDefault(),async function(e){const t=e.split(" ").reduce(((e,t)=>{const n=e[e.length-1];return(n+" "+t).trim().length>300?[...e,t]:[...e.slice(0,-1),(n+" "+t).trim()]}),[""]),{chatField:n,chatSend:o}=lo(),s=e.length>300;s&&(n.disabled=!0);for(let e=0;esetTimeout(t,e)))}}s&&(n.disabled=!1)}(n),console.log(`Long message processed: "${n}"`),e.value=""):console.log(`Short message processed: "${n}"`))}))}[...document.querySelectorAll(".general.c, .game.c")].forEach((e=>e.addEventListener("click",nr))),document.addEventListener("keydown",(e=>{"Tab"===e.key&&(!function(){const{nextChatTab:e,chatField:t,chatHidden:n}=lo();!n&&e&&(e.click(),t?.focus())}(),e.preventDefault())})),(Z("gmid")||Z("gamelist"))&&document.querySelector(".mostright")?.addEventListener("click",(()=>{setTimeout((()=>{document.querySelector("#chat-wrapper.chat-hidden")?(localStorage.setItem("shouldShowPopupMessage","true"),E.isInitializedChat=!1):(requestAnimationFrame((()=>Xs())),tr(),setTimeout((()=>E.isInitializedChat=!0),3e3),localStorage.setItem("shouldShowPopupMessage","false"))}),300)})),(Z("gmid")||Z("gamelist"))&&document.addEventListener("keydown",(e=>{if(e.ctrlKey&&"Space"===e.code){const e=document.querySelector("#chat-fixed-placeholder"),t="none"===e.style.display;e.style.display=t?"unset":"none",localStorage.setItem("shouldShowPopupMessage",!t),t||(document.querySelector(".popup-messages-container")?.remove(),lo().chatField?.focus())}}));const sr=[{family:"Montserrat",weights:["100","200","300","400","500","600","700","800","900"]},{family:"Orbitron",weights:["400","500","600","700","800","900"]},{family:"Roboto Mono",weights:["100","200","300","400","500","600","700"]}];async function rr(){try{sr.forEach((e=>{!function(e,t){if(!document.querySelector(`.font-${e.replace(/\s/g,"-")}`)){const n=document.createElement("link");n.rel="stylesheet",n.href=`https://fonts.googleapis.com/css2?family=${e.replace(/\s/g,"+")}:wght@${t.join(";")}&display=swap`,n.classList.add(`font-${e.replace(/\s/g,"-")}`),document.head.appendChild(n)}}(e.family,e.weights)}))}catch(e){console.error("Font loading failed:",e)}}function ar(){const e=document.createElement("div");e.classList.add("empowerment-panel");const t=45,n=15,o=15,s=15;let r={x:null,y:null},a=1;const i=document.createElement("div");i.classList.add("empowerment-panel-move-handle"),i.innerHTML=dt,e.appendChild(i);const l=pe?pe():"en";kt(i,"ru"===l?"[Удерживайте] и перетаскивайте панель. [S] — масштаб, [R] — сброс.":"[Hold] and drag to move panel. [S] — scale, [R] — reset.");try{const t=JSON.parse(localStorage.getItem("empowermentPanelState")||"{}");void 0!==t.x&&void 0!==t.y&&(r.x=t.x,r.y=t.y,e.style.left=t.x+"px",e.style.top=t.y+"px"),void 0!==t.scale&&(a=t.scale,e.style.transform=`scale(${t.scale})`,e.style.transformOrigin="0 0")}catch{}document.body.appendChild(e);const c=()=>{if(null===r.x||null===r.y)return;const a=e.getBoundingClientRect(),i=window.innerWidth-a.width-n,l=window.innerHeight-a.height-o,c=Math.max(s,Math.min(r.x,i)),d=Math.max(t,Math.min(r.y,l));c!==r.x||d!==r.y?(e.style.left=c+"px",e.style.top=d+"px"):(e.style.left=r.x+"px",e.style.top=r.y+"px")},d=()=>{r.x=null,r.y=null,a=1,e.style.left="",e.style.top="",e.style.transform="",e.style.transformOrigin="",localStorage.removeItem("empowermentPanelState"),requestAnimationFrame((()=>c()))};requestAnimationFrame((()=>c())),window.addEventListener("resize",c);let u,m,p,g,h=!1,f=!1,y=!1,v=new Set;return document.addEventListener("keydown",(t=>{if(v.add(t.code),!h||f||y)if(h&&f&&"KeyS"===t.code){f=!1,y=!0,p=a,g=window.lastMouseY||0;const t=e.getBoundingClientRect(),n=i.getBoundingClientRect();e.style.transformOrigin=`${n.left+n.width/2-t.left}px ${n.top+n.height/2-t.top}px`}else(h&&y&&"KeyR"===t.code||h&&"KeyR"===t.code)&&d();else{const n=e.getBoundingClientRect(),o=i.getBoundingClientRect();"KeyS"===t.code?(y=!0,p=a,g=window.lastMouseY||0,e.style.transformOrigin=`${o.left+o.width/2-n.left}px ${o.top+o.height/2-n.top}px`):"KeyR"===t.code&&d()}})),document.addEventListener("keyup",(e=>{v.delete(e.code)})),document.addEventListener("mousemove",(e=>{window.lastMouseY=e.clientY})),i.addEventListener("mousedown",(t=>{if(0!==t.button)return;h=!0;const n=e.getBoundingClientRect(),o=i.getBoundingClientRect();if(v.has("KeyS"))y=!0,p=a,g=t.clientY,e.style.transformOrigin=`${o.left+o.width/2-n.left}px ${o.top+o.height/2-n.top}px`;else{if(v.has("KeyR"))return d(),void(h=!1);f=!0,u=t.clientX-n.left,m=t.clientY-n.top}document.body.style.userSelect="none",t.preventDefault()})),document.addEventListener("mousemove",(i=>{if(f){const a=Math.max(s,Math.min(i.clientX-u,window.innerWidth-e.offsetWidth-n)),l=Math.max(t,Math.min(i.clientY-m,window.innerHeight-e.offsetHeight-o));e.style.left=a+"px",e.style.top=l+"px",r.x=a,r.y=l}else if(y){const t=g-i.clientY,n=Math.max(.1,Math.min(3,p+.01*t));a=n,e.style.transform=`scale(${n})`}})),document.addEventListener("mouseup",(e=>{h&&(v.has("KeyR")||!f&&!y||localStorage.setItem("empowermentPanelState",JSON.stringify({x:r.x,y:r.y,scale:a})),h=!1,f=!1,y=!1,document.body.style.userSelect="")})),e}let{fetchedUsers:ir}=E;const{usersToTrack:lr,ignored:cr,moderator:dr}=on;function ur(e){const t={class:"unknown",icon:"❓",color:"#000000"},n={Экстракибер:{class:"extra",icon:"🚀",color:"#06B4E9"},Кибергонщик:{class:"cyber",icon:"🤖",color:"#5681ff"},Супермен:{class:"superman",icon:"👊",color:"#B543F5"},Маньяк:{class:"maniac",icon:"🔪",color:"#DA0543"},Гонщик:{class:"racer",icon:"⚡️️",color:"#FF8C00"},Профи:{class:"profi",icon:"️💼️",color:"#C1AA00"},Таксист:{class:"driver",icon:"🚖️",color:"#2DAB4F"},Любитель:{class:"amateur",icon:"🍆️",color:"#61B5B3"},Новичок:{class:"newbie",icon:"🐥",color:"#AFAFAF"}}[e]||t;return n.class===t.class&&console.log(`Class not found for status title: ${e}. Using default class: ${t.class}`),n}function mr(e,t,n,o,s){const r=ir?.[e]?.avatarTimestamp,a="00"!==r?`/storage/avatars/${e}_big.png?updated=${r}`:"",i=document.createElement("div"),l=ur(t),c=l.class,d=l.color,u=l.icon;i.classList.add(`user${e}`,c);const m=document.createElement("div");if(m.classList.add("avatar"),"00"!==r){const e=document.createElement("img");e.src=a,m.appendChild(e)}else m.style.fontSize="1.8rem",m.innerHTML=oe();const p=document.createElement("a");p.classList.add("name"),p.dataset.user=e,p.textContent=n,p.style.setProperty("color",d,"important");const g=document.createElement("a");g.classList.add("profile");const h=`${u} ${t} - ${o}`;g.setAttribute("data-title",h),g.target="_blank",g.href=`/profile/${e}/`;let f=function(e,t,n){const o="http://www.w3.org/2000/svg",s=20,r=10,a=Math.random().toString(36).substring(2,22),i=n||0!==e?1:.6,l=document.createElementNS(o,"svg");if(Object.entries({width:s,height:s,viewBox:"0 0 20 20",xmlns:o}).forEach((([e,t])=>l.setAttribute(e,t))),l.classList.add("circularProgress"),l.style.pointerEvents="none",n||0===e){if(!n){const e=document.createElementNS(o,"circle");Object.entries({cx:r,cy:r,r:8,fill:"none",stroke:t,"stroke-width":2}).forEach((([t,n])=>e.setAttribute(t,n))),e.classList.add("outerCircle"),l.appendChild(e)}const e=s/24*i,a=r-12*e,c=document.createElementNS(o,"g");c.setAttribute("transform",`translate(${a}, ${a}) scale(${e})`),c.classList.add("closeIconGroup");const d=document.createElementNS(o,"path");Object.entries({d:"M18.364 5.636a1 1 0 0 1 0 1.414L13.414 12l4.95 4.95a1 1 0 0 1-1.414 1.414L12 13.414l-4.95 4.95a1 1 0 0 1-1.414-1.414L10.586 12l-4.95-4.95a1 1 0 0 1 1.414-1.414L12 10.586l4.95-4.95a1 1 0 0 1 1.414 0z",fill:t}).forEach((([e,t])=>d.setAttribute(e,t))),c.appendChild(d),l.appendChild(c)}else{const n=document.createElementNS(o,"defs");n.classList.add("defs");const s=document.createElementNS(o,"clipPath");s.setAttribute("id",`clipInner-${a}`),s.classList.add("clipPath");const i=document.createElementNS(o,"rect");Object.entries({x:2,y:2,width:16,height:0,transform:"rotate(180, 10, 10)"}).forEach((([e,t])=>i.setAttribute(e,t))),i.classList.add("clipRect");const c=document.createElementNS(o,"animate");Object.entries({attributeName:"height",from:0,to:e/100*16,begin:"indefinite",dur:"1s",fill:"freeze",calcMode:"spline",keySplines:"0.4 0 0.2 1",keyTimes:"0;1"}).forEach((([e,t])=>c.setAttribute(e,t))),c.classList.add("animateProfileProgress"),i.appendChild(c),s.appendChild(i),n.appendChild(s),l.appendChild(n);const d=document.createElementNS(o,"circle");Object.entries({cx:r,cy:r,r:8,fill:"none",stroke:t,"stroke-width":2}).forEach((([e,t])=>d.setAttribute(e,t))),d.classList.add("outerCircle"),l.appendChild(d);const u=document.createElementNS(o,"circle");Object.entries({cx:r,cy:r,r:8,fill:t,"clip-path":`url(#clipInner-${a})`}).forEach((([e,t])=>u.setAttribute(e,t))),u.classList.add("innerCircle"),l.appendChild(u)}return l.outerHTML}(function(e){const t=100*Math.floor(e/100);return(e-t)/(t+100-t)*100}(o),d,s);g.innerHTML=f,setTimeout((()=>{const e=g.querySelector(".animateProfileProgress");e&&e.beginElement()}),10),i.appendChild(m),i.appendChild(p),i.appendChild(g);if(lr.find((t=>t.id===e&&"thawed"===t.state))){const e=document.createElement("div");e.classList.add("tracked"),e.innerHTML=Ce,i.appendChild(e)}if(cr.includes(n)){const e=document.createElement("div");e.classList.add("ignored"),e.innerHTML=Se,i.appendChild(e)}const y=document.querySelector(`.userlist-content ins.user${e} img[src*="moderator"]`),v=dr.includes(n);if(y||v){const e=document.createElement("div");e.classList.add("moderator"),e.innerHTML=we,i.appendChild(e)}return i}async function pr(e,t){try{const n=document.querySelector(".userlist-content");let o=document.querySelector(".chat-user-list");if(!o){o=document.createElement("div"),o.classList.add("chat-user-list");const e=document.querySelector(".userlist");e&&e.appendChild(o)}const s={};["extra","cyber","superman","maniac","racer","profi","driver","amateur","newbie"].forEach((e=>{const t=o.querySelector(`.rank-group-${e}`);t?s[e]=t:(s[e]=document.createElement("div"),s[e].classList.add(`rank-group-${e}`),o.appendChild(s[e]))}));const r=new Set;for(const o of n.querySelectorAll("ins")){const n=o.querySelector(".name"),a=n.getAttribute("data-user"),i=n.textContent;if(!r.has(a))try{const{rank:n,login:l,registeredDate:c,bestSpeed:d,ratingLevel:u,friends:m,cars:p,avatarTimestamp:g}=await Sn(a);ir[a]?(ir[a].rank=n,ir[a].login=l,ir[a].registered=c,ir[a].bestSpeed=d,ir[a].ratingLevel=u,ir[a].friends=m,ir[a].cars=p,ir[a].avatarTimestamp=g):ir[a]={rank:n,login:l,registered:c,bestSpeed:d,ratingLevel:u,friends:m,cars:p,avatarTimestamp:g},e===i&&"enter"===t&&(ir[a].visits=(ir[a].visits||0)+1,ir[a].tracked=lr.some((e=>e.id===a)));const{class:h}=ur(n);if(!s[h].querySelector(`.user${a}`)){const e=mr(a,n,i,d,o.classList.contains("revoked"));s[h].appendChild(e),E.isInitializedChat&&Y(e)}r.add(a)}catch(e){console.error(`Error fetching profile summary for user ${a}:`,e)}}o.querySelectorAll('.chat-user-list [class^="user"]').forEach((e=>{const t=e.querySelector(".name").getAttribute("data-user");r.has(t)||e.remove()})),Object.values(s).forEach((e=>[...e.children].sort(((e,t)=>(ir[t.querySelector(".name")?.getAttribute("data-user")]?.bestSpeed||0)-(ir[e.querySelector(".name")?.getAttribute("data-user")]?.bestSpeed||0))).forEach((t=>e.appendChild(t))))),localStorage.setItem("fetchedUsers",JSON.stringify(ir)),function(){const e=document.querySelector(".cache-panel-load-button .cache-user-count");if(!e)return;const t=Object.keys(JSON.parse(localStorage.getItem("fetchedUsers"))||{}).length.toString();t!==e.textContent&&(e.textContent=t,X(e))}(),function(){const e=document.querySelector(".chat-user-list");if(kt(".name,.profile,.tracked,.ignored,.moderator",e,(e=>{if(e.classList.contains("name")){const t=e.textContent||"";return{en:`\n [Click] Private chat message ${t?`for ${t}`:""}\n [Repeat Click] General chat message ${t?`for ${t}`:""}\n `,ru:`\n [Клик] Приватное сообщение ${t?`для ${t}`:""}\n [Повторный клик] Сообщение в общем чате ${t?`для ${t}`:""}\n `}}if(e.classList.contains("profile")){const t=e.getAttribute("data-title");return{en:`\n ${t}\n [Click] to open profile in iframe (summary)\n [Ctrl + Click] to open profile in iframe (messages)\n [Ctrl + Shift + Click] to open profile in a new tab (messages)\n `,ru:`\n ${t}\n [Клик] открыть профиль в iframe (сводка)\n [Ctrl + Клик] открыть профиль в iframe (сообщения)\n [Ctrl + Shift + Клик] открыть профиль в новой вкладке (сообщения)\n `}}return e.classList.contains("tracked")?{en:"Tracked user",ru:"Отслеживаемый пользователь"}:e.classList.contains("ignored")?{en:"Ignored user",ru:"Игнорируемый пользователь"}:e.classList.contains("moderator")?{en:"Moderator",ru:"Модератор"}:{en:"",ru:""}}),!0),!e)return void console.warn("Userlist element not found for event delegation");if(e.dataset.delegatedEvents)return;e.addEventListener("click",(function(e){if(e.target.closest(".profile")){e.preventDefault();const t=e.target.closest(".profile").parentElement.querySelector(".name").dataset.user;if(e.ctrlKey&&e.shiftKey){const e=`${y}${b}/messages/${t}/`,n=window.open(e,"_blank");return void(n&&n.focus())}if(e.ctrlKey){return void Ot(`${y}${b}/messages/${t}/`)}Ot(y+t)}else if(e.target.closest(".name")){er(e.target.closest(".name").getAttribute("data-user"))}else;})),e.dataset.delegatedEvents="true"}()}catch(e){console.error("Error refreshing user list:",e)}}const gr={extra:{emoji:"🚀",name:"Экстракиберы"},cyber:{emoji:"🤖",name:"Кибергонщики"},superman:{emoji:"👊",name:"Супермэны"},maniac:{emoji:"🔪",name:"Маньяки"},racer:{emoji:"⚡️",name:"Гонщики"},profi:{emoji:"💼",name:"Профи"},driver:{emoji:"🚖",name:"Таксисты"},amateur:{emoji:"🍆",name:"Любители"},newbie:{emoji:"🐥",name:"Новички"}};function hr(e,t=0){const n=document.createElement("div");n.classList.add("participant-count"),n.innerHTML=t.toString(),e&&e.appendChild(n),n.addEventListener("mouseover",(function(){const e=Object.keys(gr).reduce(((e,t)=>{const n=document.getElementsByClassName(t).length;return n>0&&e.push(`[${gr[t].emoji}] ${gr[t].name} ${n}`),e}),[]).join(" ");kt(n,e)}))}let fr,yr,vr=nn.voiceSettings.voiceSpeed??1.5,br=nn.voiceSettings.voicePitch??1;function xr(){yr.innerHTML="silence"===fr.id?Le:"beep"===fr.id?Te:Me}function wr(){return{speed:(vr-0)/2.5*100+"%",pitch:(br-0)/2*100+"%"}}let Cr=null,Sr=null;function kr(e){e.preventDefault();const t=function(e){const t=0===e.button,n=e.ctrlKey||e.metaKey,o=e.altKey;if(!n&&!o)return null;const s=n?"voiceSpeed":"voicePitch",r=t?-.1:.1,a=nn.voiceSettings[s],[i,l]="voiceSpeed"===s?[0,S]:[0,2];return r<0&&a<=i||r>0&&a>=l?null:{prop:s,step:r}}(e);if(!t)return;const{prop:n,step:o}=t;Er(n,o),Cr=setTimeout((()=>{Sr=setInterval((()=>{Er(n,o)||clearInterval(Sr)}),100)}),500);const s=()=>{clearTimeout(Cr),clearInterval(Sr),fr.removeEventListener("mouseup",s),fr.removeEventListener("mouseleave",s)};fr.addEventListener("mouseup",s),fr.addEventListener("mouseleave",s)}function Er(e,t){const n=parseFloat(nn.voiceSettings[e]),[o,s]="voiceSpeed"===e?[0,S]:[0,2],r=Math.min(s,Math.max(o,n+t));return n!==r&&(function(e,t){const n=parseFloat(t.toFixed(1));nn.voiceSettings[e]=n,"voiceSpeed"===e?vr=n:"voicePitch"===e&&(br=n);localStorage.setItem("KG_Chat_Empowerment",JSON.stringify(nn)),function(){let e=document.querySelector(".voice-settings"),t=document.querySelector(".current-voice-speed"),n=document.querySelector(".current-voice-pitch");if(Lt){e||(e=document.createElement("div"),e.classList.add("voice-settings"),fr.appendChild(e),e.offsetWidth,e.style.opacity="1"),n?.remove(),t||(t=document.createElement("span"),t.classList.add("current-voice-speed"),e.appendChild(t));let o=t.querySelector(".voice-value-info")||document.createElement("span");t.querySelector(".voice-value-info")||(o.classList.add("voice-speed","voice-value-info"),t.appendChild(o)),o.innerHTML=vr<=0||vr>=S?Ae:`SPEED ${Number(vr).toFixed(1)}`;let s=t.querySelector(".voice-speed-progress")||document.createElement("span");if(!t.querySelector(".voice-speed-progress")){s.classList.add("voice-speed-progress");const e=document.createElement("span");e.classList.add("voice-speed-progress-fill"),s.appendChild(e),t.appendChild(s)}t.querySelector(".voice-speed-progress-fill").style.width=wr().speed,e.timeoutId&&clearTimeout(e.timeoutId),e.timeoutId=setTimeout((()=>{e.style.opacity="0",setTimeout((()=>e.remove()),500)}),2e3)}else if(Tt){e||(e=document.createElement("div"),e.classList.add("voice-settings"),fr.appendChild(e),e.offsetWidth,e.style.opacity="1"),t?.remove(),n||(n=document.createElement("span"),n.classList.add("current-voice-pitch"),e.appendChild(n));let o=n.querySelector(".voice-value-info")||document.createElement("span");n.querySelector(".voice-value-info")||(o.classList.add("voice-pitch","voice-value-info"),n.appendChild(o)),o.innerHTML=br<=0||br>=2?Ae:`PITCH ${br.toFixed(1)}`;let s=n.querySelector(".voice-pitch-progress")||document.createElement("span");if(!n.querySelector(".voice-pitch-progress")){s.classList.add("voice-pitch-progress");const e=document.createElement("span");e.classList.add("voice-pitch-progress-fill"),s.appendChild(e),n.appendChild(s)}n.querySelector(".voice-pitch-progress-fill").style.width=wr().pitch,e.timeoutId&&clearTimeout(e.timeoutId),e.timeoutId=setTimeout((()=>{e.style.opacity="0",setTimeout((()=>e.remove()),500)}),2e3)}else e?.remove()}()}(e,r),t>0?ro)}const $r=new Promise((e=>{const t=window.speechSynthesis;let n=t.getVoices();const o="Microsoft Pavel - Russian (Russia)",s="Microsoft Irina - Russian (Russia)";let r=n.find((e=>e.name===o)),a=n.find((e=>e.name===s));if(r&&a&&0!==n.length){const o=new SpeechSynthesisUtterance;o.lang="ru-RU",o.voice=a,e({synth:t,utterance:o,voices:n,pavelVoice:r,irinaVoice:a})}else t.addEventListener("voiceschanged",(()=>{if(n=t.getVoices(),r=n.find((e=>e.name===o)),a=n.find((e=>e.name===s)),r&&a){const o=new SpeechSynthesisUtterance;o.lang="ru-RU",o.voice=a,e({synth:t,utterance:o,voices:n,pavelVoice:r,irinaVoice:a})}}))}));async function Lr(e,t=t){const n=se("sound","gTTS"),o=await async function(e){return e.replace(/[-−_]/g," ").replace(/https?:\/\/(?:www\.)?([a-zA-Z0-9.-]+)(\/.*)?/g,((e,t)=>t)).replace(/\s(?=[?!,.:;@])/g,"").replace(/["#$%&'()*+\/<=>[\\\]^`{|}~]/g,"").split(" ").filter(Boolean).join(" ").trim()}(e);if(n){const e=(e=>e.split(/\s+/).reduce(((e,t)=>{const n=/[А-Яа-яЁё0-9]/.test(t)?"ru":"en";return e.length&&e[e.length-1].lang===n?e[e.length-1].text+=" "+t:e.push({lang:n,text:t}),e}),[]))(o);try{for(const{lang:t,text:n}of e)await new Promise(((e,o)=>{fetch(`http://127.0.0.1:5000/speak?text=${encodeURIComponent(n)}&lang=${t}`).then((e=>{if(!e.ok)throw new Error(`HTTP ${e.status}`);return e.arrayBuffer()})).then((t=>{const n=new(window.AudioContext||window.webkitAudioContext),s=new Audio(URL.createObjectURL(new Blob([t],{type:"audio/mp3"}))),r=n.createMediaElementSource(s),a=n.createGain();a.gain.value=1.5,r.connect(a),a.connect(n.destination),s.onended=e,s.onerror=o,s.play()})).catch(o)}))}catch(e){console.error("Server TTS failed:",e)}}else await async function(e,t=t){const{synth:n,utterance:o,voice:s}=await $r;return Object.assign(o,{text:e,rate:t,volume:1,pitch:br,voice:s}),new Promise((e=>{o.onend=e,n.speak(o)}))}(e,t)}const{usersToTrack:Tr}=on,Mr={userEntered:"https://raw.githubusercontent.com/VimiummuimiV/KG_Chat_Empowerment_NPM_Main/main/src/sounds/user-entered.mp3",userLeft:"https://raw.githubusercontent.com/VimiummuimiV/KG_Chat_Empowerment_NPM_Main/main/src/sounds/user-left.mp3",message:"https://raw.githubusercontent.com/VimiummuimiV/KG_Chat_Empowerment_NPM_Main/main/src/sounds/message.mp3",mention:"https://raw.githubusercontent.com/VimiummuimiV/KG_Chat_Empowerment_NPM_Main/main/src/sounds/mention.mp3"},Nr=new Map;function Ir(){Object.entries(Mr).forEach((([e,t])=>{const n=new Audio(t);n.preload="auto",n.volume=1,Nr.set(e,n),n.onerror=()=>{console.warn(`Failed to load audio file: ${t}`)}}))}function Ar(e,t=1){const n=Nr.get(e);if(!n)return void console.warn(`Audio file not found for key: ${e}`);const o=n.cloneNode();o.volume=t,o.play().catch((e=>{console.warn(`Failed to play audio: ${e.message}`)})),o.onended=()=>{o.remove()}}Ir();const qr={Male:{enter:"зашёл",leave:"вышел"},Female:{enter:"зашла",leave:"вышла"}};const{usersToTrack:Dr}=on,jr=lo().userList.general;let Or=new Map,Br=0,Hr=!1;function Pr(e,t){if(!e)return;const n=t.toString().length;e.textContent=t,e.style.fontSize=Math.max(24-2*(n-1),12)+"px"}const Fr=new MutationObserver(te((e=>{e.forEach((e=>{if("childList"===e.type){const t=document.querySelector("#voice, #beep, #silence"),n=t&&"silence"===t.id,o=document.querySelector("#chat-wrapper.chat-hidden"),s=document.querySelector(".participant-count");if(o)return void(s&&(s.style.filter="grayscale(100%)",s.textContent="0"));const r=new Map(Array.from(jr.children).map((e=>{const t=e.querySelector(".name"),n=t?.getAttribute("data-user"),o=t?.textContent?.trim();return n?[n,{userName:o}]:null})).filter(Boolean));if(!E.isInitializedChat)return;if(!Hr)return s&&0===Number(s.textContent)&&function(e,t){let n=0;const o=()=>{if(n<=e){const s=Math.min(n/(e||1),1);Pr(t,n++),t.style.filter=`grayscale(${100-100*s}%)`,setTimeout(o,20)}else X(t),K(t),Hr=!0};setTimeout(o,20)}(r.size,s),r.forEach(((e,t)=>Or.set(t,e))),void setTimeout((()=>{Hr=!0}),2e3);let a=[...r].filter((([e])=>!Or.has(e))).map((([e,t])=>({userId:e,...t}))),i=[...Or].filter((([e])=>!r.has(e))).map((([e,t])=>({userId:e,userName:t.userName})));Or=new Map(r);const l=Or.size;function c(e,t){const{userName:o,userId:s}=e,r=function(e){const t=Dr.find((t=>t.id===e));return t?t.gender:null}(s),a=Dr.some((e=>e.id===s&&"thawed"===e.state));Vn(o,"enter"===t?be:xe,"enter"===t),pr(o,t),function(e,t){e&&t?(W[e]=W[e]||{},W[e].actionLog=W[e].actionLog||[],W[e].actionLog.push({type:t,timestamp:re()})):console.error("Missing userId or actionType")}(s,t),!n&&a&&function(e,t,n){if(!se("sound","presence"))return;const o=n||"Male",s=Tr.find((t=>t.name===e)),r="enter"===t?qr[o].enter:qr[o].leave;Ar("enter"===t?"userEntered":"userLeft",1),setTimeout((()=>Lr(`${s.pronunciation} ${r}`,vr)),300)}(o,t,r)}l!==Br&&Hr&&s&&(Pr(s,l),s.style.filter=l>0?"none":"grayscale(100%)",X(s)),a.forEach((e=>c(e,"enter"))),i.forEach((e=>c(e,"leave"))),Br=l}}))}),300));let _r=!1;const zr=new Set;function Rr(e){zr.has(e)||(zr.add(e),_r||(_r=!0,async function(){for(const e of zr)await Lr(e,vr),zr.delete(e);_r=!1}()))}const Ur={};function Jr(){if("true"!==localStorage.getItem("shouldShowPopupMessage"))return;const e=document.querySelector(".messages-content p:last-of-type");if(e){const t=e.querySelector(".time"),n=e.querySelector(".username"),o=Array.from(e.childNodes).map((e=>{if(e.nodeType===Node.TEXT_NODE)return{type:"text",value:e.nodeValue};if(e.nodeType===Node.ELEMENT_NODE){if("a"===e.tagName.toLowerCase()&&e.classList.contains("private"))return{type:"text",value:"📢 "};if("span"===e.tagName.toLowerCase()&&e.classList.contains("private"))return{type:"text",value:e.textContent};if("img"===e.tagName.toLowerCase())return{type:"img",title:e.getAttribute("title")};if("a"===e.tagName.toLowerCase())return{type:"anchor",href:e.getAttribute("href")}}})).filter(Boolean),s=t.textContent.replace(/[\[\]]/g,""),r=n.textContent.replace(/[<>]/g,"");let a=Ur[r];a||(a=15*Math.floor(24*Math.random()),Ur[r]=a);let i=document.querySelector(".popup-messages-container");if(i||(i=document.createElement("div"),i.classList.add("popup-messages-container"),document.body.appendChild(i)),i.childElementCount>=10){const e=i.firstChild;e.classList.add("fade-out"),setTimeout((()=>{i.removeChild(e)}),300)}const l=document.createElement("div");l.classList.add("popup-chat-message"),l.style.filter=`hue-rotate(${a}deg)`;const c=document.createElement("div");c.classList.add("time-icon"),c.innerHTML=ke;const d=document.createElement("div");d.classList.add("time"),d.textContent=s;const u=document.createElement("div");u.classList.add("user-icon"),u.innerHTML=$e;const m=document.createElement("div");m.classList.add("username"),m.textContent=r;const p=document.createElement("div");p.classList.add("action-icon"),p.innerHTML=Ee;const g=document.createElement("div");g.classList.add("message"),l.appendChild(c),l.appendChild(d),l.appendChild(u),l.appendChild(m),l.appendChild(p),l.appendChild(g),o.forEach((e=>{if("text"===e.type){const t=document.createTextNode(e.value);g.appendChild(t)}else if("img"===e.type){const t=document.createElement("span");t.innerHTML=` ${e.title} `,g.appendChild(t)}else if("anchor"===e.type){const t=document.createElement("span");t.innerHTML=` ${e.href} `,g.appendChild(t)}})),i.appendChild(l)}}const{ignored:Kr}=on;let Yr=[];function Xr(e){if(!e)return!1;const t=e.toLowerCase();return Yr.some((e=>t.includes(e.toLowerCase())))}!function(){const e=localStorage.getItem("mentionKeywords"),t=e?JSON.parse(e):[];Yr=[v,...t]}();let Vr=!1;const Gr=new MutationObserver((async e=>{if(ce(document.querySelectorAll(".username"),"all"),E.isInitializedChat)for(let t of e)if("childList"===t.type)for(let e of t.addedNodes)if(e.nodeType===Node.ELEMENT_NODE&&"P"===e.tagName){const t=e.querySelector(".username");t&&ce(t,"one");const n=localStorage.getItem("previousMessageText"),o=await hn(),s=o?.messageText||null,r=o?.usernameText||null,a="[шепчет вам]",i=e.querySelector(".room.private"),l=i&&i.textContent.includes(a);if(Vr=Xr(s)||l,le(s)&&(console.log("Ban message detected:",s),new Audio("https://github.com/VimiummuimiV/Sounds/raw/refs/heads/main/Mario_Game_Over.mp3").play()),r&&Kr.includes(r)){const t=`from-${uo(r)}`;e.classList.add("ignored-user",t),e.style.display="none";continue}if(s){let t=null;if(/^[^\s,]+,/.test(s)?t=s.split(",")[0].trim():/^[^\s]+ /.test(s)&&(t=s.split(" ")[0].trim()),t&&Kr.includes(t)){const n=`to-${uo(t)}`;e.classList.add("ignored-user",n),e.style.display="none";continue}}const c=document.querySelector("#voice, #beep, #silence"),d=c&&"voice"===c.id,u=c&&"beep"===c.id,m=document.querySelector("#every-message, #mention-message"),p=m&&"every-message"===m.id,g=m&&"mention-message"===m.id,h=!se("sound","activity")||"visible"!==document.visibilityState;if(h&&d&&E.isInitializedChat&&s&&s!==n&&(localStorage.setItem("previousMessageText",s),r&&!r.includes(v))){(p||g&&Vr)&&Rr(s)}if(h&&u&&E.isInitializedChat&&s&&s!==n&&(localStorage.setItem("previousMessageText",s),r&&!r.includes(v))){if(p||g&&Vr){Ar(!p||Vr?"mention":"message"),Vr&&(Vr=!1)}}E.isInitializedChat&&(Jo("generalMessages"),ts("generalMessages"),vn("generalMessages"),Zs(),On("generalMessages",350),Jr(),ie(),po("latest"))}}));const{chatField:Wr,messagesContainer:Zr}=lo();let Qr=null;(Z("gmid")||Z("gamelist"))&&(Qr=document.createElement("div"),Qr.className="length-field-popup",Zr.appendChild(Qr));const ea=document.createElement("canvas").getContext("2d");let ta,na,oa,sa=!1,ra=0;function aa(e){let t;t=e>ra?`${e} 🡆`:e=1&&e<=90)t="hsl(120, 100%, 40%)";else if(e>90&&e<=100){const n=(e-90)/10;t=`hsl(${Math.round(120+-60*n)}, 100%, 40%)`}else if(e>100&&e<=190)t="hsl(60, 100%, 50%)";else if(e>190&&e<=200){const n=(e-190)/10;t=`hsl(${Math.round(60+-30*n)}, 100%, 50%)`}else if(e>200&&e<=250)t="hsl(40, 100%, 50%)";else if(e>250&&e<=300){const n=(e-250)/50;t=`hsl(${Math.round(40+-40*n)}, 100%, 70%)`}else t="hsl(0, 100%, 70%)";Qr.style.color=t}(e),ra=e}function ia(e){sa!==e&&(Qr.classList.toggle("bounce-in",e),Qr.classList.toggle("bounce-out",!e),sa=e,e||setTimeout((()=>Qr.classList.remove("bounce-out")),500))}function la(){clearTimeout(ta),aa(Wr.value.length),function(e){const t=getComputedStyle(Wr);ea.font=`${t.fontWeight} ${t.fontSize} ${t.fontFamily}`;const n=ea.measureText(e).width,o=Wr.offsetLeft+n+5,s=Wr.offsetLeft+Wr.offsetWidth-Qr.offsetWidth;Qr.style.left=`${Math.min(o,s)}px`}(Wr.value),ia(!0),ta=setTimeout((()=>ia(!1)),1e3)}function ca(e){"Enter"===e.key&&(aa(0),Object.assign(Qr.style,{left:"0px",color:"hsl(200, 20%, 50%)"}),ia(!0),ta=setTimeout((()=>ia(!1)),1e3))}function da(){oa.innerHTML="every-message"===na.id?Ne:Ie}(()=>{if(window.self!==window.top)return;rr();const e=ar();if(Z("gmid")||Z("gamelist")){se("elements","counter")&&hr(e),function(){const e=getComputedStyle(document.querySelector(".chat .messages")).backgroundColor,t=document.createElement("style");t.innerHTML=`\n #chat-general .smile-tab, .chat-user-list {\n background-color: ${e};\n }\n `,document.head.appendChild(t)}()}if((Z("gmid")||Z("gamelist"))&&(function(e){const t={silence:{en:"Do not disturb",ru:"Не беспокоить"},beep:{en:"Notify with beep signal",ru:"Уведомлять звуковым сигналом"},voice:{en:"Notify with voice API",ru:"Уведомлять голосом"}};fr=document.createElement("div");const n=nn.messageSettings.messageNotificationState||"silence";fr.classList.add("empowerment-button","sound-switcher-button"),fr.id=n,kt(fr,t[n]),yr=document.createElement("span"),yr.classList.add("sound-switcher-icon"),fr.appendChild(yr),e.appendChild(fr),fr.addEventListener("click",(function(){if(!Lt&&!Tt){switch(document.querySelector(".current-voice-speed")?.remove(),document.querySelector(".current-voice-pitch")?.remove(),X(this),this.id){case"silence":this.id="beep",kt(this,t.beep),nn.messageSettings.messageNotificationState="beep",nn.messageSettings.messageNotificationTitle=t.beep.en;break;case"beep":this.id="voice",kt(this,t.voice),nn.messageSettings.messageNotificationState="voice",nn.messageSettings.messageNotificationTitle=t.voice.en;break;case"voice":this.id="silence",kt(this,t.silence),nn.messageSettings.messageNotificationState="silence",nn.messageSettings.messageNotificationTitle=t.silence.en}localStorage.setItem("KG_Chat_Empowerment",JSON.stringify(nn)),xr()}})),fr.addEventListener("mousedown",kr),fr.addEventListener("contextmenu",(e=>e.preventDefault())),xr()}(e),function(e){const t={"every-message":{en:"Notify about every message",ru:"Уведомлять о каждом сообщении"},"mention-message":{en:"Notify about mention message",ru:"Уведомлять только о сообщениях с упоминанием"}};na=document.createElement("div");const n=nn.messageSettings.messageModeState||"every-message";na.classList.add("empowerment-button","message-mode-button"),na.id=n,kt(na,t[n]),oa=document.createElement("span"),oa.classList.add("message-mode-icon"),na.appendChild(oa),e.appendChild(na),na.addEventListener("click",(function(){Lt||Tt||(X(this),"every-message"===this.id?(this.id="mention-message",kt(this,t["mention-message"]),nn.messageSettings.messageModeState="mention-message",nn.messageSettings.messageModeTitle=t["mention-message"].en):(this.id="every-message",kt(this,t["every-message"]),nn.messageSettings.messageModeState="every-message",nn.messageSettings.messageModeTitle=t["every-message"].en),localStorage.setItem("KG_Chat_Empowerment",JSON.stringify(nn)),da())})),da()}(e)),function(e){const t=document.createElement("div");t.classList.add("empowerment-button","cache-panel-load-button"),t.style.position="relative",t.style.zIndex="3",t.innerHTML=qe;const n=document.createElement("div");n.className="cache-user-count",n.textContent=Object.keys(JSON.parse(localStorage.getItem("fetchedUsers"))||{}).length,t.appendChild(n),kt(t,{en:"Open Cache",ru:"Открыть кэш"}),t.addEventListener("click",(()=>{X(t),eo()})),e.appendChild(t)}(e),function(e){const t=document.createElement("div");t.classList.add("empowerment-button","personal-messages-button"),t.innerHTML=De;const n=document.createElement("div");n.classList.add("message-count","total-message-count");const o=JSON.parse(localStorage.getItem(js))||{};n.textContent=Object.keys(o).length,t.appendChild(n);const s=document.createElement("div");s.classList.add("message-count","new-message-count");let r=Number(localStorage.getItem(Os))||(localStorage.setItem(Os,"0"),0);s.textContent=r,s.style.visibility=r>0?"visible":"hidden",t.appendChild(s),kt(t,{en:"Open Messages",ru:"Открыть сообщения"}),t.addEventListener("click",(function(){X(t),Ps(),Object.keys(JSON.parse(localStorage.getItem(js))||{}).length>0&&(localStorage.setItem(Os,"0"),r=0,s.textContent=r)})),e.appendChild(t)}(e),function(e){const t=document.createElement("div");t.classList.add("empowerment-button","chat-logs-button"),t.style.position="relative",t.style.zIndex="1",t.innerHTML=je,kt(t,{en:"Open Chat Logs",ru:"Открыть логи чата"}),t.addEventListener("click",(async function(){X(t),await As()})),e.appendChild(t)}(e),rn(e),function(){const e=document.querySelector(".messages-content div");e?Gr.observe(e,{childList:!0,subtree:!0}):console.warn("Messages container not found!")}(),jr?Fr.observe(jr,{childList:!0}):console.warn("User list not found!"),!Z("gmid")&&!Z("gamelist"))return;const t=new Ks;let n=new MutationObserver((()=>{const e=document.querySelector(".messages-content div"),o=document.querySelectorAll(".messages-content div p");document.contains(e)&&(!function(){const e=document.querySelector("#chat-fixed-placeholder");null===localStorage.getItem("shouldShowPopupMessage")&&localStorage.setItem("shouldShowPopupMessage","false");const t=JSON.parse(localStorage.getItem("shouldShowPopupMessage"));e.style.display=t?"none":"unset"}(),o.length>=20&&(n.disconnect(),function(){const{allMessages:e}=lo();e.forEach((e=>{const t=e.querySelector(".username"),n=t?.textContent?.replace(/[<>]/g,"")||null,o=e.textContent||"";if(n&&co.includes(n)){const t=`from-${uo(n)}`;return e.classList.add("ignored-user",t),void(e.style.display="none")}let s=null;if(/^[^\s,]+,/.test(o)?s=o.split(",")[0].trim():/^[^\s]+ /.test(o)&&(s=o.split(" ")[0].trim()),s&&co.includes(s)){const t=`to-${uo(s)}`;return e.classList.add("ignored-user",t),void(e.style.display="none")}co.some((e=>o.includes(e)))&&(co.forEach((t=>{if(o.includes(t)){const n=`to-${uo(t)}`;e.classList.add("ignored-user",n)}})),e.style.display="none")}))}(),po(),Jo("generalMessages"),ts("generalMessages"),vn("generalMessages"),window.location.href.includes("gmid")&&function(){const{activeChatTab:e,chatField:t}=lo();e?.click(),t?.focus()}(),function(){const{chatField:e}=lo();e&&(e.value=localStorage.getItem("inputBackup")||"",e.addEventListener("input",te((()=>{Ws(e)||localStorage.setItem("inputBackup",e.value)}),250)),e.addEventListener("keydown",(e=>{"Enter"===e.key&&localStorage.removeItem("inputBackup")})))}(),pn(),Zs(),On("generalMessages",350),ro(!1,$),pr(),tr(),t.updateDeletedMessages(),or(),Xs(),setTimeout((()=>{Qr&&(Wr.addEventListener("input",la),Wr.addEventListener("keydown",ca))}),600),setTimeout((()=>E.isInitializedChat=!0),600),Rs(x)))}));n.observe(document,{childList:!0,subtree:!0})})()})();