1const KaznaPage={state:{config:null,board:[],pillars:[],recent:[],mine:[],me:null,cosmetics:null,busy:!1,economy:null,economyTransactions:[],economyNext:null,economyError:null,monthLedgerLimited:!1,monthChervonetsLimited:!1},_cleanup:[],_n(v){return I18n.formatNumber(Number(v||0))},_moscowMonthStart(now=new Date){const parts=Object.fromEntries(new Intl.DateTimeFormat("en",{timeZone:"Europe/Moscow",year:"numeric",month:"numeric"}).formatToParts(now).filter(part=>part.type!=="literal").map(part=>[part.type,Number(part.value)]));return Math.floor(Date.UTC(parts.year,parts.month-1,1,-3)/1e3)},_timestampSeconds(value){const n=Number(value)||0;return n>1e12?Math.floor(n/1e3):Math.floor(n)},_monthRows(rows,field){const start=this._moscowMonthStart();return(Array.isArray(rows)?rows:[]).filter(row=>this._timestampSeconds(row[field])>=start)},async _loadEconomyMonth(ledger){const rows=Array.isArray(ledger?.transactions)?[...ledger.transactions]:[];let next=ledger?.next||null;const start=this._moscowMonthStart();let pages=0;for(;next&&pages<12;){const oldest2=rows.length?this._timestampSeconds(rows[rows.length-1].createdAt):0;if(oldest2&&oldest2<start)break;const page=await Api.economy.transactions({before:next}),seen=new Set(rows.map(row=>Number(row.id)));rows.push(...(page.transactions||[]).filter(row=>!seen.has(Number(row.id)))),next=page.next||null,pages++}const oldest=rows.length?this._timestampSeconds(rows[rows.length-1].createdAt):0;return this.state.monthLedgerLimited=!!next&&(!oldest||oldest>=start),{transactions:rows,next}},chervonets(count){const n=Math.abs(Math.trunc(Number(count)||0));return I18n.locale==="en"?I18n.t(n===1?"kazna.chervonets_one":"kazna.chervonets_many",n===1?"chervonet":"chervonets"):n%10===1&&n%100!==11?I18n.t("kazna.chervonets_one","\u0447\u0435\u0440\u0432\u043E\u043D\u0435\u0446"):n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?I18n.t("kazna.chervonets_few","\u0447\u0435\u0440\u0432\u043E\u043D\u0446\u0430"):I18n.t("kazna.chervonets_many","\u0447\u0435\u0440\u0432\u043E\u043D\u0446\u0435\u0432")},eballs(count){const n=Math.abs(Math.trunc(Number(count)||0));return I18n.locale==="en"?I18n.t("kazna.eballs_many","E-Points"):n%10===1&&n%100!==11?I18n.t("kazna.eballs_one","\u0415-\u0411\u0430\u043B\u043B"):n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?I18n.t("kazna.eballs_few","\u0415-\u0411\u0430\u043B\u043B\u0430"):I18n.t("kazna.eballs_many","\u0415-\u0411\u0430\u043B\u043B\u043E\u0432")},economyKind(kind){const item={donation:["kazna.economy_kind_donation","\u0412\u0437\u043D\u043E\u0441 \u0432 \u0433\u043E\u0440\u043E\u0434\u0441\u043A\u0443\u044E \u043A\u0430\u0437\u043D\u0443"],fine:["fines.ledger","\u041E\u043F\u043B\u0430\u0442\u0430 \u0448\u0442\u0440\u0430\u0444\u0430"],reward:["kazna.economy_kind_reward","\u041D\u0430\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u0435 \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u0430"],conversion:["kazna.economy_kind_conversion","\u041E\u0431\u043C\u0435\u043D \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u0435\u0432"],sale:["kazna.economy_kind_sale","\u041F\u043E\u043A\u0443\u043F\u043A\u0430 \u0438\u043B\u0438 \u043F\u0440\u043E\u0434\u0430\u0436\u0430"],payroll:["kazna.economy_kind_payroll","\u0417\u0430\u0440\u043F\u043B\u0430\u0442\u043D\u0430\u044F \u0432\u0435\u0434\u043E\u043C\u043E\u0441\u0442\u044C"],withdrawal:["kazna.economy_kind_withdrawal","\u0412\u044B\u0432\u043E\u0434 \u043F\u0440\u0435\u0434\u043F\u0440\u0438\u044F\u0442\u0438\u044F"],mayor_spend:["kazna.economy_kind_mayor_spend","\u0413\u043E\u0440\u043E\u0434\u0441\u043A\u043E\u0435 \u0434\u0435\u043B\u043E"],refund:["kazna.economy_kind_refund","\u0412\u043E\u0437\u0432\u0440\u0430\u0442"],admin_adjustment:["kazna.economy_kind_adjustment","\u0420\u0435\u0448\u0435\u043D\u0438\u0435 \u041A\u0430\u043D\u0446\u0435\u043B\u044F\u0440\u0438\u0438"],business_deposit:["kazna.economy_kind_deposit","\u0412\u0437\u043D\u043E\u0441 \u0432 \u043F\u0440\u0435\u0434\u043F\u0440\u0438\u044F\u0442\u0438\u0435"],hall_rent:["kazna.economy_kind_hall_rent","\u0410\u0440\u0435\u043D\u0434\u0430 \u043A\u0438\u043D\u043E\u0437\u0430\u043B\u0430"]}[kind];return item?I18n.t(item[0],item[1]):I18n.t("kazna.economy_kind_other","\u041E\u043F\u0435\u0440\u0430\u0446\u0438\u044F \u043F\u043E \u0441\u0447\u0451\u0442\u0443")},_economyKey(prefix){const suffix=window.crypto&&window.crypto.randomUUID?window.crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`;return`${prefix}-${suffix}`},tierLabel(tier,fallback=""){const code=tier&&typeof tier=="object"?tier.key||tier.tier:tier,label=tier&&typeof tier=="object"?tier.label||tier.tier_label:fallback,safeFallback=I18n.locale==="en"?code||fallback||"":label||fallback||code||"";return I18n.t(`kazna.tier_${code}`,safeFallback)},cosmeticText(item,field){if(!item)return"";const fallback=I18n.locale==="en"?item.code||"":item[field]||item.code||"";return I18n.t(`kazna.cosmetic_${item.code}_${field}`,fallback)},cosmeticOptionLabel(option){return option?I18n.t(`kazna.color_${option.code}`,I18n.locale==="en"?option.code||"":option.label||option.code||""):""},cosmeticSurface(surface){return surface?I18n.t(`kazna.surface_${surface.code}`,I18n.locale==="en"?surface.code||"":surface.title||surface.code||""):""},cosmeticReaction(reaction){return reaction?I18n.t(`kazna.reaction_${reaction.code}`,I18n.locale==="en"?reaction.code||"":reaction.title||reaction.code||""):""},errorText(error,key,fallback){return error&&error.data&&error.data.code&&I18n.has(`errors.${String(error.data.code).toLowerCase()}`)?I18n.error(error.data,key):I18n.locale!=="en"&&error&&error.message?error.message:I18n.t(key,fallback)},telegramStatus(status){const map={linked:["kazna.telegram_linked","Telegram \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043D \u0438 \u043F\u0440\u0438\u0432\u044F\u0437\u0430\u043D","success"],in_use:["kazna.telegram_in_use","\u042D\u0442\u043E\u0442 Telegram \u0443\u0436\u0435 \u043F\u0440\u0438\u0432\u044F\u0437\u0430\u043D \u043A \u0434\u0440\u0443\u0433\u043E\u043C\u0443 \u0430\u043A\u043A\u0430\u0443\u043D\u0442\u0443","error"],expired:["kazna.telegram_expired","\u0421\u0440\u043E\u043A \u043F\u0440\u0438\u0432\u044F\u0437\u043A\u0438 \u0438\u0441\u0442\u0451\u043A \u2014 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0451 \u0440\u0430\u0437","error"],error:["kazna.telegram_error","\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C Telegram","error"]},item=map[status]||map.error;return{text:I18n.t(item[0],item[1]),type:item[2]}},_kaznaVisible(){return App.feature("donations")?!0:!!(App.state.user&&typeof Utils.isStaff=="function"&&Utils.isStaff(App.state.user))},async renderWallet(){this.teardown();const content=document.getElementById("content"),userId=App.state.user?.id;Utils.setTitle(I18n.t("wallet.title","\u041C\u043E\u0439 \u043A\u043E\u0448\u0435\u043B\u0451\u043A"));const kaznaOn=this._kaznaVisible();content.innerHTML=`<div class="kazna-page wallet-page"> 2 <div class="page-head kazna-head"> 3 <div> 4 <div class="kicker">${I18n.t("wallet.kicker","\u041B\u0438\u0447\u043D\u044B\u0439 \u0440\u0430\u0441\u0447\u0451\u0442\u043D\u044B\u0439 \u0441\u0443\u043D\u0434\u0443\u043A")}</div> 5 <h1>${I18n.t("wallet.heading","\u041A\u043E\u0448\u0435\u043B\u0451\u043A")}</h1> 6 <p class="page-sub">${I18n.t("wallet.sub","\u0412\u0441\u0451, \u0447\u0442\u043E \u043F\u0440\u0438\u0448\u043B\u043E, \u0443\u0448\u043B\u043E \u0438 \u0431\u044B\u043B\u043E \u043F\u043E\u0442\u0440\u0430\u0447\u0435\u043D\u043E \u0441 \u0431\u043B\u0430\u0433\u043E\u0440\u043E\u0434\u043D\u044B\u043C \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u043C \u043B\u0438\u0446\u0430.")}</p> 7 </div> 8 <div class="page-head-actions"> 9 <a class="btn" href="#/map">${I18n.t("wallet.spend","\u0417\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u044F \u043D\u0430 \u041A\u0430\u0440\u0442\u0435")}</a> 10 ${kaznaOn?`<a class="btn" href="#/kazna">${I18n.t("wallet.open_kazna","\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u041A\u0430\u0437\u043D\u0443")}</a>`:""} 11 </div> 12 </div> 13 <div id="economy-wallet">${Utils.skeletonCards(2)}</div> 14 <div class="wallet-extra"> 15 <section class="card card-pad wallet-fines" id="wallet-fines"></section> 16 <section class="card card-pad wallet-court-pay" id="wallet-court-pay"></section> 17 </div> 18 </div>`,CourtPay.mount(document.getElementById("wallet-court-pay")),MayorFines.mount(document.getElementById("wallet-fines"),"mine",()=>this.renderWallet());const marker=document.getElementById("economy-wallet");this.state.economy=null,this.state.economyError=null,this.state.economyTransactions=[],this.state.economyNext=null,this.state.monthLedgerLimited=!1,this.state.monthChervonetsLimited=!1,this.state.me=null,this.state.mine=null,this._ledgerCurrency="eballs";try{const mineRequest=kaznaOn&&Api.donations&&Api.donations.mine?Api.donations.mine(100).then(r=>r&&Array.isArray(r.entries)?r.entries:[]).catch(()=>null):Promise.resolve(null),[wallet,ledger,mine]=await Promise.all([Api.economy.me(),Api.economy.transactions().then(first=>this._loadEconomyMonth(first)),mineRequest]);if(!marker.isConnected||App.state.user?.id!==userId)return;this.state.economy=wallet,this.state.me={chervonets_balance:wallet.chervonetsBalance},this.state.economyTransactions=ledger.transactions||[],this.state.economyNext=ledger.next||null,this.state.mine=mine;const oldestChervonets=mine?.length?this._timestampSeconds(mine[mine.length-1].created_at):0;this.state.monthChervonetsLimited=!!(mine&&mine.length>=100&&oldestChervonets>=this._moscowMonthStart())}catch(error){if(!marker.isConnected||App.state.user?.id!==userId)return;this.state.economyError=error}this.paintEconomy()},async render(walletOnly=!1){if(walletOnly)return this.renderWallet();Utils.setTitle(I18n.t("kazna.title","\u041A\u0430\u0437\u043D\u0430 \u0415\u0433\u043E\u0440\u043E\u0434\u0430")),this.teardown();const content=document.getElementById("content");content.innerHTML=`<div class="kazna-page treasury-page">${Utils.skeletonKazna()}</div>`;
18try{const economyRequest=App.state.user&&App.feature("economy")&&App.feature("economy_wallet")?Promise.all([Api.economy.me(),Api.economy.transactions()]).then(([wallet,ledger])=>({wallet,ledger})).catch(error=>({error})):Promise.resolve(null),[cfg,board,pillars,recent,me,mine,cosmetics,economyBundle]=await Promise.all([Api.donations.config(),Api.donations.board().then(r=>r.entries).catch(()=>[]),Api.donations.pillars().then(r=>r.pillars).catch(()=>[]),Api.donations.recent().then(r=>r.entries).catch(()=>[]),App.state.user?Api.donations.me().catch(()=>null):Promise.resolve(null),App.state.user?Api.donations.mine().then(r=>r.entries).catch(()=>[]):Promise.resolve([]),App.state.user?Api.donations.cosmetics().catch(()=>null):Promise.resolve(null),economyRequest]);this.state.config=cfg,this.state.board=board||[],this.state.pillars=pillars||[],this.state.recent=recent||[],this.state.me=me,this.state.mine=mine||[],this.state.cosmetics=cosmetics,this.state.economy=economyBundle&&economyBundle.wallet||null,this.state.economyTransactions=economyBundle&&economyBundle.ledger&&Array.isArray(economyBundle.ledger.transactions)?economyBundle.ledger.transactions:[],this.state.economyNext=economyBundle&&economyBundle.ledger?economyBundle.ledger.next:null,this.state.economyError=economyBundle&&economyBundle.error||null,this._cosmeticDraft=cosmetics?{...cosmetics.loadout}:null,this._cosmeticPreviewShimmer=!!(cosmetics&&cosmetics.loadout&&cosmetics.loadout.name_effect==="shimmer"),this._cosmeticDraft&&!this._cosmeticDraft.name_color&&(this._cosmeticDraft.name_color="gold"),this._cosmeticDraft&&!this._cosmeticDraft.profile_tone&&(this._cosmeticDraft.profile_tone="blue"),this._baseTotal=me&&me.donated_total||0,this._creditShown=!1,this.paint(),this._handleTelegramReturn(),this.subscribeLive(),App.state.user&&this.reconcile(!0)}catch(e){content.innerHTML=`<div class="empty-state" style="min-height:50vh"> 19 <div class="empty-state-icon">${Icons.render("info")}</div> 20 <div class="empty-state-title">${I18n.t("kazna.unavailable","\u041A\u0430\u0437\u043D\u0430 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430")}</div> 21 <div class="empty-state-text">${Utils.esc(this.errorText(e,"kazna.load_error","\u041A\u0430\u0437\u043D\u0430 \u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043F\u043E\u0437\u0436\u0435."))}</div> 22 </div>`}},_handleTelegramReturn(){let status=null,payMarker=!1;try{status=new URLSearchParams(location.search).get("telegram"),payMarker=/[?&]pay=tribute\b/.test(location.hash||"")}catch{return}if(!status&&!payMarker)return;const c=this.state.config,payLinked=payMarker&&status==="linked"&&c&&c.tribute_enabled;if(status&&!payLinked){const toast=this.telegramStatus(status);Utils.showToast(toast.text,toast.type,6e3)}try{history.replaceState(history.state,"",location.pathname+"#/kazna")}catch{}if(payMarker&&c&&c.tribute_enabled&&(this._payMethod="rub",this._activateMethod("rub"),status==="linked")){Utils.showToast(I18n.t("kazna.telegram_linked_pay","Telegram \u043F\u0440\u0438\u0432\u044F\u0437\u0430\u043D. \u041D\u0430\u0436\u043C\u0438\u0442\u0435 \xAB\u0412\u043D\u0435\u0441\u0442\u0438 \u0440\u0443\u0431\u043B\u044F\u043C\u0438 \u0447\u0435\u0440\u0435\u0437 Telegram\xBB \u2014 \u043F\u043E\u0441\u043B\u0435 \u043E\u043F\u043B\u0430\u0442\u044B \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u044B \u0437\u0430\u0447\u0442\u0443\u0442\u0441\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438."),"success",7e3);const btn=document.querySelector(".kazna-rub-btn"),reduce=Utils.reduceMotion();if(btn&&btn.scrollIntoView)try{btn.scrollIntoView({block:"center",behavior:reduce?"auto":"smooth"})}catch{}}},subscribeLive(){if(typeof SocketClient>"u")return;this._cleanup.push(SocketClient.on("treasury:update",t=>{if(!t||!this.state.config)return;this.state.config.treasury=t;const card=document.getElementById("kazna-treasury");card?card.outerHTML=this.thermometerHtml(t):this.teardown()}));const onHash=()=>{location.hash.startsWith("#/kazna")||(this.teardown(),window.removeEventListener("hashchange",onHash))};window.addEventListener("hashchange",onHash),this._cleanup.push(()=>window.removeEventListener("hashchange",onHash))},teardown(){this.stopPaymentPoll(),this._cleanup.forEach(fn=>
22{try{fn()}catch{}}),this._cleanup=[]},startPaymentPoll(){this.stopPaymentPoll();let attempts=0;this._pollTimer=setInterval(async()=>{if(attempts++,!location.hash.startsWith("#/kazna"))return this.stopPaymentPoll();if(attempts>10){this.stopPaymentPoll(),this._creditShown||Utils.showToast(I18n.t("kazna.payment_poll_timeout","\u041F\u043E\u043A\u0430 \u043D\u0435 \u0432\u0438\u0436\u0443 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F \u043E\u043F\u043B\u0430\u0442\u044B. \u0423\u0436\u0435 \u043E\u043F\u043B\u0430\u0442\u0438\u043B\u0438? \u041D\u0430\u0436\u043C\u0438\u0442\u0435 \xAB\u042F \u043E\u043F\u043B\u0430\u0442\u0438\u043B, \u043F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C\xBB."),"info",7e3);return}try{this._handleReconcile(await Api.donations.reconcile(),!0)}catch{}},12e3)},stopPaymentPoll(){this._pollTimer&&(clearInterval(this._pollTimer),this._pollTimer=null)},_handleReconcile(r,silent){if(!r)return!silent&&!this._creditShown&&Utils.showToast(I18n.t("kazna.cant_check_payment","\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u043E\u043F\u043B\u0430\u0442\u0443"),"error"),!1;if(r.credited>0||r.me&&(r.me.donated_total||0)>(this._baseTotal||0)){if(this.stopPaymentPoll(),!this._creditShown){this._creditShown=!0;const msg=r.chervonets>0?I18n.t("kazna.credited_amount","\u0417\u0430\u0447\u0438\u0441\u043B\u0435\u043D\u043E {amount} {unit}. \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u043E \u0431\u043B\u0430\u0433\u043E\u0434\u0430\u0440\u0438\u0442!",{amount:this._n(r.chervonets),unit:this.chervonets(r.chervonets)}):I18n.t("kazna.credited","\u041E\u043F\u043B\u0430\u0442\u0430 \u0437\u0430\u0447\u0438\u0441\u043B\u0435\u043D\u0430. \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u043E \u0431\u043B\u0430\u0433\u043E\u0434\u0430\u0440\u0438\u0442!");Utils.showToast(msg,"success",6e3)}return r.me&&(this.state.me=r.me),(location.hash.startsWith("#/kazna")||location.pathname.startsWith("/kazna"))&&this.render(),!0}return!silent&&!this._creditShown&&Utils.showToast(I18n.t("kazna.payment_not_found","\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043D\u043D\u043E\u0439 \u043E\u043F\u043B\u0430\u0442\u044B \u043F\u043E\u043A\u0430 \u043D\u0435 \u0432\u0438\u0436\u0443. \u0415\u0441\u043B\u0438 \u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u043E \u043E\u043F\u043B\u0430\u0442\u0438\u043B\u0438 \u2014 \u043F\u043E\u0434\u043E\u0436\u0434\u0438\u0442\u0435 \u043C\u0438\u043D\u0443\u0442\u0443 \u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435."),"info",6e3),!1},headActionHtml(){const c=this.state.config||{};return App.state.user?!c.tribute_enabled&&!c.pay_enabled?"":`<button type="button" class="btn btn-primary" id="kazna-head-donate">${I18n.t("kazna.city_donate","\u0412\u043D\u0435\u0441\u0442\u0438 \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u044B")}</button>`:`<a class="btn btn-primary" href="#/login">${I18n.t("kazna.login","\u0412\u043E\u0439\u0442\u0438")}</a>`},walletLinkHtml(){return!App.state.user||!App.feature("economy")||!App.feature("economy_wallet")?"":`<section class="card card-pad kazna-wallet-link"> 23 <div> 24 <h2>${I18n.t("wallet.heading","\u041A\u043E\u0448\u0435\u043B\u0451\u043A")}</h2> 25 <p class="page-sub">${I18n.t("kazna.wallet_link_text","\u0415-\u0411\u0430\u043B\u043B\u044B, \u043E\u0431\u043C\u0435\u043D \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u0435\u0432 \u0438 \u0438\u0441\u0442\u043E\u0440\u0438\u044F \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0439 \u2014 \u0432 \u043B\u0438\u0447\u043D\u043E\u043C \u041A\u043E\u0448\u0435\u043B\u044C\u043A\u0435. \u041A\u0430\u0437\u043D\u0430 \u0432\u0435\u0434\u0451\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u0437\u043D\u043E\u0441\u044B \u0438 \u0437\u0432\u0430\u043D\u0438\u044F.")}</p> 26 </div> 27 <a class="btn" href="#/kazna/wallet">${I18n.t("wallet.open","\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043A\u043E\u0448\u0435\u043B\u0451\u043A \u0415-\u0411\u0430\u043B\u043B\u043E\u0432")}</a> 28 </section>`},paint(){const c=this.state.config;document.getElementById("content").innerHTML=`<div class="kazna-page treasury-page"> 29 <div class="page-head kazna-head"> 30 <div> 31 <div class="kicker">${I18n.t("kazna.city_kicker","\u0414\u043E\u0431\u0440\u043E\u0432\u043E\u043B\u044C\u043D\u044B\u0435 \u0432\u0437\u043D\u043E\u0441\u044B \u0433\u0440\u0430\u0436\u0434\u0430\u043D")}</div> 32 <h1>${I18n.t("kazna.title","\u041A\u0430\u0437\u043D\u0430 \u0415\u0433\u043E\u0440\u043E\u0434\u0430")}</h1> 33 <p class="page-sub">${I18n.t("kazna.city_sub","\u041A\u0442\u043E \u0436\u0435\u0440\u0442\u0432\u0443\u0435\u0442 \u2014 \u0437\u0430\u043D\u043E\u0441\u0438\u0442\u0441\u044F \u0432 \u0417\u043E\u043B\u043E\u0442\u0443\u044
33E \u043A\u043D\u0438\u0433\u0443. \u041A\u0442\u043E \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u2014 \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u0442 \u0434\u0432\u0430\u0436\u0434\u044B \u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043D\u043E \u043D\u0435\u0440\u0432\u043D\u0438\u0447\u0430\u0435\u0442.")}</p> 34 </div> 35 <div class="page-head-actions">${this.headActionHtml()}</div> 36 </div> 37 ${this.thermometerHtml(c.treasury)} 38 ${this.aboutHtml()} 39 ${this.meHtml()} 40 ${this.walletLinkHtml()} 41 ${this.cosmeticsHtml()} 42 ${this.howHtml()} 43 ${this.tiersHtml(c.tiers)} 44 ${this.guildHtml(this.state.me)} 45 ${this.pillarsHtml()} 46 ${this.boardHtml()} 47 ${this.feedHtml()} 48 </div>`,Utils.appear(document.getElementById("content")),this.bind()},aboutHtml(){const items=[{icon:"award",title:I18n.t("kazna.about_currency_title","\u0427\u0435\u0440\u0432\u043E\u043D\u0435\u0446 \u2014 \u0447\u0435\u0441\u0442\u044C-\u0432\u0430\u043B\u044E\u0442\u0430"),text:I18n.t("kazna.about_currency_text","\u041F\u0440\u0438 \u0437\u0430\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u0438 \u0441\u0443\u043C\u043C\u0430 \u043E\u0434\u043D\u043E\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E \u043F\u043E\u043F\u0430\u0434\u0430\u0435\u0442 \u0432 \u043D\u0435\u0441\u0433\u043E\u0440\u0430\u0435\u043C\u044B\u0439 \u0432\u043A\u043B\u0430\u0434 \u0438 \u0432 \u0440\u0430\u0441\u0445\u043E\u0434\u0443\u0435\u043C\u044B\u0439 \u043A\u043E\u0448\u0435\u043B\u0451\u043A. \u041F\u043E\u043A\u0443\u043F\u043A\u0438 \u0443\u043C\u0435\u043D\u044C\u0448\u0430\u044E\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u043A\u043E\u0448\u0435\u043B\u0451\u043A: \u0432\u043A\u043B\u0430\u0434, \u0437\u0432\u0430\u043D\u0438\u0435 \u0438 \u043C\u0435\u0441\u0442\u043E \u0432 \u0417\u043E\u043B\u043E\u0442\u043E\u0439 \u043A\u043D\u0438\u0433\u0435 \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u044E\u0442\u0441\u044F.")},{icon:"landmark",title:I18n.t("kazna.about_spending_title","\u041D\u0430 \u0447\u0442\u043E \u0438\u0434\u0451\u0442"),text:I18n.t("kazna.donation_desc","\u0412\u0437\u043D\u043E\u0441\u044B \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442 \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u043E: \u0441\u0435\u0440\u0432\u0435\u0440, \u0434\u043E\u043C\u0435\u043D, \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0415\u0433\u043E\u0440\u043E\u0434\u0430. \u041D\u0435 \u043F\u0440\u0438\u0431\u044B\u043B\u044C \u2014 \u0440\u0430\u0441\u0445\u043E\u0434\u044B \u043D\u0430 \u043E\u0431\u0449\u0435\u0435 \u0434\u0435\u043B\u043E. \u041A\u0430\u0437\u043D\u0430 \u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u0430: \u0441\u043E\u0431\u0440\u0430\u043D\u043D\u043E\u0435 \u043D\u0430 \u0442\u0435\u0440\u043C\u043E\u043C\u0435\u0442\u0440\u0435.")},{icon:"shield",title:I18n.t("kazna.about_voluntary_title","\u0414\u043E\u0431\u0440\u043E\u0432\u043E\u043B\u044C\u043D\u043E \u0438 \u0447\u0435\u0441\u0442\u043D\u043E"),text:I18n.t("kazna.nonprofit","\u0415\u0433\u043E\u0440\u043E\u0434 \u2014 \u043F\u0430\u0440\u043E\u0434\u0438\u044F, \u043D\u0435 \u0433\u043E\u0441\u0441\u0435\u0440\u0432\u0438\u0441. \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u043E \u043D\u0435 \u043F\u0440\u043E\u0441\u0438\u0442 \u043A\u0430\u0440\u0442 \u0438 \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0445 \u043F\u043B\u0430\u0442\u0435\u0436\u0435\u0439. \u0416\u0435\u0440\u0442\u0432\u0443\u0435\u0442\u0435 \u043F\u043E \u0436\u0435\u043B\u0430\u043D\u0438\u044E; \u0432\u0441\u044F \u0436\u0438\u0437\u043D\u044C \u0415\u0433\u043E\u0440\u043E\u0434\u0430 \u0431\u0435\u0441\u043F\u043B\u0430\u0442\u043D\u0430 \u0438 \u0431\u0435\u0437 \u0432\u0437\u043D\u043E\u0441\u043E\u0432.")}];return` 49 <div class="wallet-grid kazna-about" aria-label="${I18n.t("kazna.about_title","\u041E \u041A\u0430\u0437\u043D\u0435")}"> 50 ${items.map(it=>` 51 <section class="card card-pad kazna-about-item"> 52 <h2 class="kazna-about-title">${it.title}</h2> 53 <p class="page-sub kazna-about-text">${it.text}</p> 54 </section>`).join("")} 55 </div>`}
55,howHtml(){const c=this.state.config,steps=[{n:"1",title:I18n.t("kazna.how_amount_title","\u0412\u044B\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u0441\u0443\u043C\u043C\u0443"),text:I18n.t("kazna.how_amount_text","\u041F\u0440\u0435\u0441\u0435\u0442 \u0438\u043B\u0438 \u0441\u0432\u043E\u044F \u0441\u0443\u043C\u043C\u0430 \u0432 {currency} \u2014 \u043A\u0443\u0440\u0441 \u0443\u043A\u0430\u0437\u0430\u043D \u043F\u0440\u044F\u043C\u043E \u0432 \u0444\u043E\u0440\u043C\u0435 \u0432\u0437\u043D\u043E\u0441\u0430.",{currency:Utils.esc(c.currency)})},{n:"2",title:I18n.t("kazna.how_payment_title","\u041E\u043F\u043B\u0430\u0442\u0430 \u0432 Telegram"),icon:"telegram",text:I18n.t("kazna.how_payment_text","\u0421\u0447\u0451\u0442 \u0432\u044B\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0447\u0435\u0440\u0435\u0437 xRocket Pay \u2014 \u043E\u043F\u043B\u0430\u0442\u0430 \u043A\u0440\u0438\u043F\u0442\u043E\u0439 \u043F\u0440\u044F\u043C\u043E \u0432 Telegram, \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E \u0438 \u0431\u0435\u0437 \u043A\u0430\u0440\u0442.")},{n:"3",title:I18n.t("kazna.how_reward_title","\u0427\u0435\u0440\u0432\u043E\u043D\u0446\u044B \u0438 \u0437\u0432\u0430\u043D\u0438\u0435"),text:I18n.t("kazna.how_reward_text","\u041F\u043E\u0441\u043B\u0435 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F \u043F\u043B\u0430\u0442\u0435\u0436\u0430 \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u044B \u0437\u0430\u0447\u0438\u0441\u043B\u044F\u0442\u0441\u044F, \u0430 \u0438\u043C\u044F \u0437\u0430\u0439\u043C\u0451\u0442 \u043C\u0435\u0441\u0442\u043E \u0432 \u0417\u043E\u043B\u043E\u0442\u043E\u0439 \u043A\u043D\u0438\u0433\u0435 \u2014 \u043F\u043E \u0447\u0438\u043D\u0443 \u0432\u0437\u043D\u043E\u0441\u0430.")}];return` 56 <section class="card kazna-how"> 57 <div class="kazna-eyebrow">${I18n.t("kazna.how_title","\u041A\u0430\u043A \u044D\u0442\u043E \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442")}</div> 58 <div class="kazna-how-steps"> 59 ${steps.map(s=>` 60 <div class="kazna-how-step"> 61 <div class="kazna-how-num" aria-hidden="true">${s.icon?Icons.render(s.icon,18):s.n}</div> 62 <div class="kazna-how-title">${s.title}</div> 63 <div class="kazna-how-text">${s.text}</div> 64 </div>`).join("")} 65 </div> 66 </section>`},thermometerHtml(t){const goal=t.goal||0,pct=goal>0?Math.min(100,Math.round(t.total/goal*100)):0,patrons=`<span class="kazna-num">${this._n(t.patrons)}</span> ${I18n.t("kazna.patrons","\u043C\u0435\u0446\u0435\u043D\u0430\u0442\u043E\u0432")} \xB7 <span class="kazna-num">${this._n(t.active)}</span> ${I18n.t("kazna.active_patrons","\u043F\u043E\u0441\u0442\u043E\u044F\u043D\u043D\u044B\u0445")}`;return` 67 <section class="card treasury-hero" id="kazna-treasury"> 68 <div class="kicker">${I18n.t("kazna.eyebrow","\u0413\u043E\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043D\u043D\u0430\u044F \u043A\u0430\u0437\u043D\u0430 \xB7 \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u043E \u0415\u0433\u043E\u0440\u043E\u0434\u0430")}</div> 69 <div class="treasury-total kazna-num">${this._n(t.total)} <span class="kazna-cherv">${this.chervonets(t.total)}</span></div> 70 <p class="treasury-plan">${goal>0?`${I18n.t("kazna.goal_from","\u0438\u0437")} <span class="kazna-num">${this._n(goal)}</span> \u2014 ${I18n.t("kazna.plan_label","\u043A\u0430\u0437\u0451\u043D\u043D\u044B\u0439 \u043F\u043B\u0430\u043D")}`:I18n.t("kazna.collected_for_department","\u0441\u043E\u0431\u0440\u0430\u043D\u043E \u043D\u0430 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435 \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u0430")}</p> 71 ${goal>0?`<div class="progress" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="${pct}" aria-label="${I18n.t("kazna.goal_aria","\u041A\u0430\u0437\u0451\u043D\u043D\u044B\u0439 \u043F\u043B\u0430\u043D \u0441\u043E\u0431\u0440\u0430\u043D \u043D\u0430 {pct}%",{pct})}"><span style="width:${pct}%"></span></div> 72 <div class="split-row"><span>${patrons}</span><b class="kazna-num">${pct}%</b></div>`:`<div class="split-row"><span>${patrons}</span></div>`} 73 </section>`},gramotaHtml(me){if(!me||!me.tier)return"";const who=Utils.localizedDisplayName(App.state.user&&(App.state.user.name||App.state.user.username),I18n.t("common.citizen","\u0413\u0440\u0430\u0436\u0434\u0430\u043D\u0438\u043D")),since=me.patron_since?I18n.formatDate(me.patron_since*1e3,{day:"numeric",month:"long",year:"numeric"}):null,devise=me.patron_quote?`<div class="kazna-gramota-devise">\xAB${Utils.esc(me.patron_quote)}\xBB</div>`:"",active=me.is_active_patron?`<span class="kazna-gramota-active">${Icons.render("award",13)} ${I18n.t("kazna.patron_badge","\u041F\u043E\u0441\u0442\u043E\u044F\u043D\u043D\u044B\u0439 \u043C\u0435\u0446\u0435\u043D\u0430\u0442")}</span>`:"";return` 74 <section class="card kazna-gramota patron-${me.tier}" aria-label="${I18n.t("kazna.gramota_title","\u0413\u0440\u0430\u043C\u043E\u0442\u0430 \u043C\u0435\u0446\u0435\u043D\u0430\u0442\u0430")}"> 75 <div class="kazna-gramota-seal" aria-hidden="true">${Icons.render("landmark",30)}</div> 76 <div class="kazna-gramota-eyebrow">${I18n.t("kazna.gramota_title","\u0413\u0440\u0430\u043C\u043E\u0442\u0430 \u043C\u0435\u0446\u0435\u043D\u0430\u0442\u0430")}</div> 77 <h3 class="kazna-gramota-title">${Utils.esc(this.tierLabel(me.tier,me.tier_label))}</h3> 78 <div class="kazna-gramota-body"> 79 ${I18n.t("kazna.gramota_body_before","\u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u043E \u041A\u0430\u0437\u043D\u044B \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043B\u044C\u0441\u0442\u0432\u0443\u0435\u0442: \u0433\u0440\u0430\u0436\u0434\u0430\u043D\u0438\u043D")} <b>${Utils.esc(who)}</b> 80 ${I18n.t("kazna.gramota_body_after","\u0432\u043D\u0451\u0441")} <b class="kazna-num">${this._n(me.donated_total)}</b> 81 ${I18n.t("kazna.gramota_body_end","{unit} toward strengthening Egorod.",{unit:this.chervonets(me.donated_total)})} 82 </div> 83 ${devise} 84 <div class="kazna-gramota-foot">
85 <span class="kazna-gramota-since">${since?I18n.t("kazna.tier_awarded_on","\u0417\u0432\u0430\u043D\u0438\u0435 \u043F\u0440\u0438\u0441\u0432\u043E\u0435\u043D\u043E {date}",{date:since}):I18n.t("kazna.tier_awarded","\u0417\u0432\u0430\u043D\u0438\u0435 \u043F\u0440\u0438\u0441\u0432\u043E\u0435\u043D\u043E")}</span> 86 ${active} 87 </div> 88 </section>`},meHtml(){if(!App.state.user)return`<div class="card kazna-cta"><div>${I18n.t("kazna.login_prompt","\u0412\u043E\u0439\u0434\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u0441\u0434\u0435\u043B\u0430\u0442\u044C \u0432\u0437\u043D\u043E\u0441 \u0438 \u043F\u043E\u043F\u0430\u0441\u0442\u044C \u0432 \u0417\u043E\u043B\u043E\u0442\u0443\u044E \u043A\u043D\u0438\u0433\u0443.")}</div> 89 <a class="btn btn-primary" href="#/login">${I18n.t("kazna.login","\u0412\u043E\u0439\u0442\u0438")}</a></div>`;const me=this.state.me||{donated_total:0,tier:null,tier_label:null,next:null,is_active_patron:!1},tierLine=me.tier?`<span class="patron-badge patron-${me.tier}${me.is_active_patron?" patron-active":""}">${Icons.render("landmark",12)}${Utils.esc(this.tierLabel(me.tier,me.tier_label))}</span>`:`<span class="kazna-muted">${I18n.t("kazna.not_yet_patron","\u043F\u043E\u043A\u0430 \u043D\u0435 \u043C\u0435\u0446\u0435\u043D\u0430\u0442")}</span>`,progress=me.next?`<div class="kazna-next">${I18n.t("kazna.to_next_tier","\u0414\u043E \u0437\u0432\u0430\u043D\u0438\u044F \xAB{tier}\xBB \u2014 \u0435\u0449\u0451",{tier:Utils.esc(this.tierLabel(me.next.key||me.next.tier,me.next.label))})} <b class="kazna-num">${this._n(me.next.remaining)}</b> ${this.chervonets(me.next.remaining)}</div>`:me.tier?`<div class="kazna-next">${I18n.t("kazna.highest_tier","\u0412\u044B\u0441\u0448\u0435\u0435 \u0437\u0432\u0430\u043D\u0438\u0435 \u0434\u043E\u0441\u0442\u0438\u0433\u043D\u0443\u0442\u043E. \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u043E \u0431\u043B\u0430\u0433\u043E\u0434\u0430\u0440\u0438\u0442.")}</div>`:"",quoteEditor=me.can_customize?` 90 <div class="kazna-devise"> 91 <div class="kazna-devise-label">${Icons.render("award",14)} ${I18n.t("kazna.devise_label","\u0418\u043C\u0435\u043D\u043D\u043E\u0439 \u0434\u0435\u0432\u0438\u0437 \u043C\u0435\u0446\u0435\u043D\u0430\u0442\u0430")}</div> 92 <div class="kazna-devise-row"> 93 <input type="text" id="kazna-devise" maxlength="120" placeholder="${I18n.t("kazna.devise_placeholder","\u0421\u0442\u0440\u043E\u043A\u0430 \u043F\u043E\u0434 \u0432\u0430\u0448\u0438\u043C \u0438\u043C\u0435\u043D\u0435\u043C \u2014 \u0434\u043E 120 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432")}" value="${Utils.esc(me.patron_quote||"")}" aria-label="${I18n.t("kazna.devise_label","\u0418\u043C\u0435\u043D\u043D\u043E\u0439 \u0434\u0435\u0432\u0438\u0437 \u043C\u0435\u0446\u0435\u043D\u0430\u0442\u0430")}"> 94 <button class="btn btn-sm" id="kazna-devise-save">${I18n.t("common.save","\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C")}</button> 95 </div> 96 <div class="kazna-hint">${I18n.t("kazna.devise_hint","\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043F\u043E\u0434 \u0438\u043C\u0435\u043D\u0435\u043C \u0432 \u0417\u043E\u043B\u043E\u0442\u043E\u0439 \u043A\u043D\u0438\u0433\u0435 \u0438 \u041F\u0430\u0441\u043F\u043E\u0440\u0442\u0435. \u041C\u043E\u0434\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044F. \u041F\u0443\u0441\u0442\u043E\u0435 \u043F\u043E\u043B\u0435 \u2014 \u0441\u043D\u044F\u0442\u044C \u0434\u0435\u0432\u0438\u0437.")}</div> 97 </div>`:"",shareBtn=me.tier?`<button class="btn btn-secondary btn-sm kazna-share-btn" id="kazna-share" title="${I18n.t("kazna.share_status","\u041F\u043E\u0434\u0435\u043B\u0438\u0442\u044C\u0441\u044F \u0441\u0442\u0430\u0442\u0443\u0441\u043E\u043C \u043C\u0435\u0446\u0435\u043D\u0430\u0442\u0430")}">${Icons.render("share",14)} ${I18n.t("common.share","\u041F\u043E\u0434\u0435\u043B\u0438\u0442\u044C\u0441\u044F")}</button>`:"",mine=this.state.mine||[],mineHtml=mine.length?` 98 <details class="kazna-mine"> 99 <summary>${I18n.t("kazna.my_contributions","\u041C\u043E\u0438 \u0432\u0437\u043D\u043E\u0441\u044B")} (${mine.length})</summary> 100 <div class="kazna-mine-list"> 101 ${mine.map(d=>` 102 <div class="kazna-mine-row">
103 <span class="kazna-mine-amt kazna-num">+${this._n(d.chervonets)}</span> 104 <span class="kazna-mine-meta">${this.chervonets(d.chervonets)}${d.manual?` \xB7 ${I18n.t("kazna.from_department","\u043E\u0442 \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u0430")}`:""} \xB7 ${Utils.timeAgo(d.created_at)||I18n.t("common.just_now","\u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u043E")}</span> 105 ${d.note?`<span class="kazna-mine-note">\xAB${Utils.esc(d.note)}\xBB</span>`:""} 106 </div>`).join("")} 107 </div> 108 </details>`:"";return` 109 ${this.gramotaHtml(me)} 110 <div class="card kazna-me"> 111 <div class="kazna-eyebrow">${I18n.t("kazna.your_contribution","\u0412\u0430\u0448 \u0432\u043A\u043B\u0430\u0434 \u0432 \u041A\u0430\u0437\u043D\u0443")}</div> 112 <div class="kazna-me-head"> 113 <div> 114 <div class="kazna-me-total"><span class="kazna-num">${this._n(me.donated_total)}</span> <span class="kazna-cherv">${I18n.t("kazna.chervonets_contributed","{unit} contributed",{unit:this.chervonets(me.donated_total)})}</span></div> 115 <div class="kazna-me-tier">${tierLine}</div> 116 </div> 117 ${shareBtn} 118 </div> 119 <div class="kazna-wallet"> 120 <span class="kazna-wallet-label">${Icons.render("landmark",14)} ${I18n.t("kazna.wallet","\u0412 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0435")}</span> 121 <span class="kazna-wallet-amt kazna-num" data-wallet-balance="chervonets">${this._n(me.chervonets_balance||0)}</span> 122 <span class="kazna-cherv">${this.chervonets(me.chervonets_balance||0)}</span> 123 </div> 124 <div class="kazna-hint">${I18n.t("kazna.wallet_hint","\u041A\u043E\u0448\u0435\u043B\u0451\u043A \u2014 \u0442\u0440\u0430\u0442\u043D\u044B\u0439 \u0431\u0430\u043B\u0430\u043D\u0441: \u043F\u043E\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u0432\u0437\u043D\u043E\u0441\u0430\u043C\u0438 \u0438 \u043D\u0430\u0433\u0440\u0430\u0434\u0430\u043C\u0438 \u0437\u0430 \u043F\u043E\u0440\u0443\u0447\u0438\u0442\u0435\u043B\u044C\u0441\u0442\u0432\u043E, \u0442\u0440\u0430\u0442\u0438\u0442\u0441\u044F \u043D\u0430 \u044D\u043D\u0435\u0440\u0433\u0438\u044E \u041E\u0431\u043E\u0440\u043E\u043D\u044B \u0438 \u043A\u043E\u0441\u043C\u0435\u0442\u0438\u043A\u0443 \u041F\u0430\u0441\u043F\u043E\u0440\u0442\u0430. \u0412\u0438\u0434\u0435\u043D \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u0430\u043C.")}</div> 125 ${progress} 126 ${quoteEditor} 127 ${this.donateSectionHtml()} 128 ${mineHtml} 129 </div>`},donateSectionHtml(){const c=this.state.config,methods=[];if(c.tribute_enabled&&methods.push("rub"),c.pay_enabled&&methods.push("crypto"),!methods.length)return`<div class="kazna-hint">${I18n.t("kazna.payments_not_configured","\u041F\u0440\u0438\u0451\u043C \u0432\u0437\u043D\u043E\u0441\u043E\u0432 \u0435\u0449\u0451 \u043D\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u043E\u043C.")}</div>`;const active=methods.includes(this._payMethod)?this._payMethod:methods[0];this._payMethod=active;const multi=methods.length>1,tab=(key,label)=>`<button type="button" class="kazna-paytab${active===key?" active":""}" role="tab" aria-selected="${active===key}" tabindex="${active===key?"0":"-1"}" id="kazna-paytab-${key}" aria-controls="kazna-paypanel-${key}" data-method="${key}">${label}</button>`,panel=(key,inner)=>multi?`<div class="kazna-paypanel" id="kazna-paypanel-${key}" role="tabpanel" aria-labelledby="kazna-paytab-${key}"${active===key?"":" hidden"}>${inner}</div>`:`<div class="kazna-paypanel">${inner}</div>`;return` 130 <div class="kazna-pay"> 131 <div class="kazna-donate-label">${I18n.t("kazna.contribute","\u0412\u043D\u0435\u0441\u0442\u0438 \u0432\u0437\u043D\u043E\u0441")}</div> 132 ${multi?` 133 <div class="kazna-paytabs" role="tablist" aria-label="${I18n.t("kazna.payment_method","\u0421\u043F\u043E\u0441\u043E\u0431 \u0432\u0437\u043D\u043E\u0441\u0430")}"> 134 ${c.tribute_enabled?tab("rub",I18n.t("kazna.method_rub","\u0420\u0443\u0431\u043B\u0438 \u043A\u0430\u0440\u0442\u043E\u0439")):""} 135 ${c.pay_enabled?tab("crypto",I18n.t("kazna.method_crypto","\u041A\u0440\u0438\u043F\u0442\u0430 USDT")):""} 136 </div>`:""} 137 ${c.tribute_enabled?panel("rub",this.rubPanelHtml()):""} 138 ${c.pay_enabled?panel("crypto",this.cryptoPanelHtml()):""} 139 </div>`},rubPanelHtml(){const c=this.state.config,tgOn=c.telegram_link_enabled,linked=c.telegram_linked,steps=[I18n.t("kazna.rub_step_open","\u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u043E \u043E\u0442\u043A\u0440\u043E\u0435\u0442 \u043E\u043F\u043B\u0430\u0442\u0443 \u043A\u0430\u0440\u0442\u043E\u0439 \u043F\u0440\u044F\u043C\u043E \u0432 Telegram (Tribute)."),linked?I18n.t("kazna.rub_step_linked","Telegram \u043F\u0440\u0438\u0432\u044F\u0437\u0430\u043D \u2014 \u043F\u043E\u0441\u043B\u0435 \u043E\u043F\u043B\u0430\u0442\u044B \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u044B \u0437\u0430\u0447\u0442\u0443\u0442\u0441\u044F \u0432 \u041F\u0430\u0441\u043F\u043E\u0440\u0442 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438."):tgOn?I18n.t("kazna.rub_step_link","\u041E\u0434\u0438\u043D \u0440\u0430\u0437 \u043F\u0440\u0438\u0432\u044F\u0436\u0435\u043C Telegram \u2014 \u0438 \u043F\u043E\u0441\u043B\u0435 \u043E\u043F\u043B\u0430\u0442\u044B \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u044B \u0437\u0430\u0447\u0438\u0441\u043B\u044F\u0442\u0441\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438, \u0431\u0435\u0437 \u0440\u0443\u0447\u043D\u043E\u0439 \u043F\u0440\u0438\u0432\u044F\u0437\u043A\u0438."):I18n.t("kazna.rub_step_email","\u041F\u043E\u0441\u043B\u0435 \u043E\u043F\u043B\u0430\u0442\u044B \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u043E \u043F\u0440\u0438\u0432\u044F\u0436\u0435\u0442 \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u044B \u043F\u043E email \u043F\u043B\u0430\u0442\u0435\u0436\u0430."),I18n.t("kazna.step_book","\u0418\u043C\u044F \u0437\u0430\u0439\u043C\u0451\u0442 \u043C\u0435\u0441\u0442\u043E \u0432 \u0417\u043E\u043B\u043E\u0442\u043E\u0439 \u043A\u043D\u0438\u0433\u0435 \u2014 \u043F\u043E \u0447\u0438\u043D\u0443 \u0432\u0437\u043D\u043E\u0441\u0430.")],linkFirst=tgOn&&!linked,payBtn=linkFirst?`<button type="button" class="btn btn-primary kazna-rub-btn" id="kazna-rub-link">${Icons.render("telegram",16)} ${I18n.t("kazna.link_telegram_pay_rub","\u041F\u0440\u0438\u0432\u044F\u0437\u0430\u0442\u044C Telegram \u0438 \u0432\u043D\u0435\u0441\u0442\u0438 \u0440\u0443\u0431\u043B\u044F\u043C\u0438")}</button>`:`<a class="btn btn-primary kazna-rub-btn" href="${Utils.safeUrl(c.tribute_link)||"#"}" target="_blank" rel="noopener noreferrer">${Icons.render("landmark",16)} ${I18n.t("kazna.pay_rub_telegram","\u0412\u043D\u0435\u0441\u0442\u0438 \u0440\u0443\u0431\u043B\u044F\u043C\u0438 \u0447\u0435\u0440\u0435\u0437 Telegram")}</a>`;return` 140 <div class="kazna-donate-sub">${I18n.t("kazna.rub_rate","\u0420\u0443\u0431\u043B\u0438 \u043A\u0430\u0440\u0442\u043E\u0439 \u2014 1 \u20BD \u2248 {rate} {unit}",{rate:this._n(c.tribute_rate_rub),unit:this.chervonets(c.tribute_rate_rub)}
140)}</div> 141 <ol class="kazna-route">${steps.map(s=>`<li>${s}</li>`).join("")}</ol> 142 ${payBtn} 143 ${linkFirst?`<a class="kazna-rub-skip" href="${Utils.safeUrl(c.tribute_link)||"#"}" target="_blank" rel="noopener noreferrer">${I18n.t("kazna.pay_without_link","\u0412\u043D\u0435\u0441\u0442\u0438 \u0431\u0435\u0437 \u043F\u0440\u0438\u0432\u044F\u0437\u043A\u0438 \u2014 \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u043E \u043F\u0440\u0438\u0432\u044F\u0436\u0435\u0442 \u0432\u0440\u0443\u0447\u043D\u0443\u044E")}</a>`:""}`},cryptoPanelHtml(){const c=this.state.config,me=this.state.me||{},presets=[...new Set([c.min,c.min*5,c.min*10,c.min*25].filter(a=>a<=c.max))],reachAmount=me.next?Math.ceil(me.next.remaining/c.rate):0,showReach=reachAmount>=c.min&&reachAmount<=c.max&&!presets.includes(reachAmount);return` 144 <div class="kazna-donate-sub">${I18n.t("kazna.crypto_rate","\u041A\u0440\u0438\u043F\u0442\u0430 ({currency}) \u2014 1 {currency} \u2248 {rate} {unit}",{currency:Utils.esc(c.currency),rate:this._n(c.rate),unit:this.chervonets(c.rate)})}</div> 145 <ol class="kazna-route"> 146 <li>${I18n.t("kazna.crypto_step_amount","\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0443\u043C\u043C\u0443 \u2014 \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u043E \u0432\u044B\u0441\u0442\u0430\u0432\u0438\u0442 \u0441\u0447\u0451\u0442 \u0432 Telegram (xRocket).")}</li> 147 <li>${I18n.t("kazna.crypto_step_pay","\u041E\u043F\u043B\u0430\u0442\u0438\u0442\u0435 \u043A\u0440\u0438\u043F\u0442\u043E\u0439 ({currency}) \u043F\u0440\u044F\u043C\u043E \u0432 Telegram, \u0431\u0435\u0437 \u043A\u0430\u0440\u0442.",{currency:Utils.esc(c.currency)})}</li> 148 <li>${I18n.t("kazna.crypto_step_credit","\u041F\u043E\u0441\u043B\u0435 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F \u043F\u043B\u0430\u0442\u0435\u0436\u0430 \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u044B \u0437\u0430\u0447\u0442\u0443\u0442\u0441\u044F, \u0430 \u0438\u043C\u044F \u2014 \u0432 \u0417\u043E\u043B\u043E\u0442\u0443\u044E \u043A\u043D\u0438\u0433\u0443.")}</li> 149 </ol> 150 <div class="kazna-presets"> 151 ${presets.map(a=>`<button type="button" class="btn kazna-preset" data-amount="${a}">${a} ${Utils.esc(c.currency)}</button>`).join("")} 152 ${showReach?`<button type="button" class="btn kazna-preset kazna-preset-tier" data-amount="${reachAmount}" title="${I18n.t("kazna.exactly_to_tier","\u0420\u043E\u0432\u043D\u043E \u0434\u043E \u0437\u0432\u0430\u043D\u0438\u044F \xAB{tier}\xBB",{tier:Utils.esc(this.tierLabel(me.next.key,me.next.label))})}">${I18n.t("kazna.to_tier_short","\u0434\u043E \xAB{tier}\xBB",{tier:Utils.esc(this.tierLabel(me.next.key,me.next.label))})} \xB7 ${reachAmount} ${Utils.esc(c.currency)}</button>`:""} 153 </div> 154 <div class="kazna-custom"> 155 <input type="number" id="kazna-amount" min="${c.min}" max="${c.max}" step="1" placeholder="${I18n.t("kazna.amount_placeholder_currency","\u0421\u0443\u043C\u043C\u0430, {currency}",{currency:Utils.esc(c.currency)})}" inputmode="decimal" aria-label="${I18n.t("kazna.amount_aria","\u0421\u0443\u043C\u043C\u0430 \u0432\u0437\u043D\u043E\u0441\u0430 \u0432 {currency}",{currency:Utils.esc(c.currency)})}"> 156 <button type="button" class="btn btn-primary" id="kazna-donate-btn">${I18n.t("kazna.contribute","\u0412\u043D\u0435\u0441\u0442\u0438 \u0432\u0437\u043D\u043E\u0441")}</button> 157 </div> 158 <input type="text" id="kazna-message" class="kazna-message" maxlength="200" placeholder="${I18n.t("kazna.message_placeholder_full","\u041D\u0430\u043F\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u0443 (\u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E)")}" aria-label="${I18n.t("kazna.message_aria","\u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 \u043A \u0432\u0437\u043D\u043E\u0441\u0443")}"> 159 <div id="kazna-invoice-link" class="kazna-invoice-link" aria-live="polite" hidden></div>`},_activateMethod(key,focus){this._payMethod=key,document.querySelectorAll(".kazna-paytab").forEach(t=>{const on=t.dataset.method===key;if(t.classList.toggle("active",on),t.setAttribute("aria-selected",on?"true":"false"),t.tabIndex=on?0:-1,on&&focus)try{t.focus()}catch{}}),document.querySelectorAll(".kazna-paypanel").forEach(p=>{p.hidden=p.id!==`kazna-paypanel-${key}`})},gameRewardsHtml(rewards){if(!rewards)return"";const t=(key,fallback,args)=>I18n.t(`kazna.${key}`,fallback,args);return`<section class="card card-pad economy-game-rewards"> 160 <h2>${t("game_rewards_title","\u0417\u0430\u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C \u0432 \u0438\u0433\u0440\u0430\u0445")}</h2> 161 ${rewards.enabled?rewards.eligible?` 162 <p class="page-sub">${t("game_rewards_limit","\u0423\u0447\u0442\u0435\u043D\u043E \u0432 \u043B\u0438\u043C\u0438\u0442\u0435 \u0437\u0430 \u043D\u0435\u0434\u0435\u043B\u044E: {earned} \u0438\u0437 {cap} \u0415-\u0411\u0430\u043B\u043B\u043E\u0432. \u041E\u0441\u0442\u0430\u043B\u043E\u0441\u044C: {remaining}.",{earned:this._n(rewards.earnedThisWeek),cap:this._n(rewards.weeklyCap),remaining:this._n(rewards.remainingThisWeek)})}</p> 163 <p class="page-sub">${t("game_rewards_reset","\u041D\u043E\u0432\u044B\u0439 \u043D\u0435\u0434\u0435\u043B\u044C\u043D\u044B\u0439 \u043F\u0440\u0435\u0434\u0435\u043B: {date}.",{date:Utils.esc(I18n.formatDateTime(rewards.resetsAt*1e3))})}</p> 164 ${!rewards.starterReceived&&rewards.starter>0?`<p class="page-sub">${t("game_rewards_starter","\u041F\u0435\u0440\u0432\u043E\u0435 \u043E\u043F\u043B\u0430\u0447\u0438\u0432\u0430\u0435\u043C\u043E\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435: \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0434\u043E {amount} \u0415-\u0411\u0430\u043B\u043B\u043E\u0432 \u043E\u0434\u0438\u043D \u0440\u0430\u0437, \u0432 \u043F\u0440\u0435\u0434\u0435\u043B\u0430\u0445 \u043D\u0435\u0434\u0435\u043B\u044C\u043D\u043E\u0433\u043E \u043B\u0438\u043C\u0438\u0442\u0430.",{amount:this._n(rewards.starter)})}</p>`:""} 165 ${rewards.gardenOrder>0?`<p class="page-sub">${t("game_rewards_garden_order","\u0413\u043E\u0440\u043E\u0434\u0441\u043A\u043E\u0439 \u0437\u0430\u043A\u0430\u0437 \u041E\u0433\u043E\u0440\u043E\u0434\u0430: \u0434\u043E {amount} \u0415-\u0411\u0430\u043B\u043B\u043E\u0432 \u0437\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0434\u043E \u0437\u0430\u043A\u0440\u044B\u0442\u0438\u044F. \u0417\u0430\u043A\u0430\u0437 \u0437\u0430\u043D\u0438\u043C\u0430\u0435\u0442 \u043E\u0434\u0438\u043D \u043E\u0431\u0449\u0438\u0439 \u043D\u0435\u0434\u0435\u043B\u044C\u043D\u044B\u0439 \u044D\u0442\u0430\u043F \u0441 \u041E\u0431\u043E\u0440\u043E\u043D\u043E\u0439.",{amount:rewards.gardenOrder})}</p>`:""} 166 ${rewards.tdWeeklyWork?.amount>0?`<p class="page-sub">${t("game_rewards_work","\u041D\u0435\u0434\u0435\u043B\u044C\u043D\u043E\u0435 \u0437\u0430\u0434\u0430\u043D\u0438\u0435 \u0411\u0435\u0441\u043A\u043E\u043D\u0435\u0447\u043D\u043E\u0441\u0442\u0438: \u043F\u043E {amount} \u0415-\u0411\u0430\u043B\u043B\u043E\u0432 \u0437\u0430 \u043A\u0430\u0436\u0434\u044B\u0435 {waves} \u0432\u043E\u043B\u043D, \u0434\u043E {steps} \u044D\u0442\u0430\u043F\u043E\u0432. \u0412\u043E\u043B\u043D\u044B \u0441\u043A\u043B\u0430\u0434\u044B\u0432\u0430\u044E\u0442\u0441\u044F \u043C\u0435\u0436\u0434\u0443 \u0437\u0430\u0431\u0435\u0433\u0430\u043C\u0438. \u
166041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441: {progress} \u0432\u043E\u043B\u043D; \u0443\u0447\u0442\u0435\u043D\u043E \u044D\u0442\u0430\u043F\u043E\u0432: {claimed}.",{amount:rewards.tdWeeklyWork.amount,waves:rewards.tdWeeklyWork.stepWaves,steps:rewards.tdWeeklyWork.steps,progress:rewards.tdWeeklyWork.waves,claimed:rewards.tdWeeklyWork.claimed})}</p>`:""} 167 <ul class="page-sub"> 168 ${rewards.gardenDaily>0?`<li><a href="#/garden">${t("game_rewards_garden","\u041E\u0433\u043E\u0440\u043E\u0434")}</a> \u2014 ${t("game_rewards_garden_rule","\u0434\u043E {amount} \u0415-\u0411\u0430\u043B\u043B\u043E\u0432 \u0437\u0430 \u043F\u0435\u0440\u0432\u044B\u0439 \u0443\u0440\u043E\u0436\u0430\u0439 \u0434\u043D\u044F \u0441 \u0432\u043A\u043B\u0430\u0434\u043E\u043C \u0432 \u043E\u0431\u0449\u0438\u0439 \u041F\u043B\u0430\u043D. \u0414\u0435\u043D\u044C \u043D\u0430\u0447\u0438\u043D\u0430\u0435\u0442\u0441\u044F \u0432 00:00 UTC.",{amount:this._n(rewards.gardenDaily)})}${rewards.gardenReceivedToday?` ${t("game_rewards_garden_done","\u0421\u0435\u0433\u043E\u0434\u043D\u044F \u0443\u0436\u0435 \u0443\u0447\u0442\u0435\u043D\u043E.")}`:""}</li>`:""} 169 ${rewards.tdFirstClear>0?`<li><a href="#/td">${t("game_rewards_td","\u041E\u0431\u043E\u0440\u043E\u043D\u0430")}</a> \u2014 ${t("game_rewards_td_rule","\u0434\u043E {amount} \u0415-\u0411\u0430\u043B\u043B\u043E\u0432 \u0437\u0430 \u043F\u0435\u0440\u0432\u043E\u0435 \u043F\u0440\u043E\u0445\u043E\u0436\u0434\u0435\u043D\u0438\u0435 \u0441\u044E\u0436\u0435\u0442\u043D\u043E\u0439 \u043A\u0430\u0440\u0442\u044B. \u041F\u043E\u0432\u0442\u043E\u0440\u043D\u044B\u0435 \u043F\u0440\u043E\u0445\u043E\u0436\u0434\u0435\u043D\u0438\u044F \u043D\u0435 \u043E\u043F\u043B\u0430\u0447\u0438\u0432\u0430\u044E\u0442\u0441\u044F.",{amount:this._n(rewards.tdFirstClear)})}</li>`:""} 170 </ul> 171 <p class="page-sub">${t("game_rewards_cap_note","\u041F\u0440\u0438 \u0434\u043E\u0441\u0442\u0438\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u0435\u043B\u0430 \u043D\u0430\u0433\u0440\u0430\u0434\u0430 \u0443\u043C\u0435\u043D\u044C\u0448\u0430\u0435\u0442\u0441\u044F \u0434\u043E \u043E\u0441\u0442\u0430\u0442\u043A\u0430. \u0414\u043E\u0441\u0442\u0438\u0436\u0435\u043D\u0438\u044F \u0441\u0432\u0435\u0440\u0445 \u043F\u0440\u0435\u0434\u0435\u043B\u0430 \u043D\u0435 \u043A\u043E\u043F\u044F\u0442\u0441\u044F \u043D\u0430 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0443\u044E \u043D\u0435\u0434\u0435\u043B\u044E. \u041F\u0440\u043E\u0434\u0430\u0436\u0438 \u0438 \u0437\u0430\u0440\u043F\u043B\u0430\u0442\u044B \u044D\u0442\u043E\u0442 \u043F\u0440\u0435\u0434\u0435\u043B \u043D\u0435 \u0440\u0430\u0441\u0445\u043E\u0434\u0443\u044E\u0442.")}</p>`:`<p class="page-sub">${t("game_rewards_ineligible","\u041D\u0430\u0433\u0440\u0430\u0434\u044B \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B \u043F\u043E\u0441\u0432\u044F\u0449\u0451\u043D\u043D\u044B\u043C \u0415\u0433\u043E\u0440\u0430\u043C \u0438 \u043F\u043E\u0447\u0451\u0442\u043D\u044B\u043C \u0415\u0433\u043E\u0440\u0430\u043C.")}</p>`:`<p class="page-sub">${t("game_rewards_closed","\u0415\u0436\u0435\u0434\u043D\u0435\u0432\u043D\u044B\u0435 \u0438 \u0441\u044E\u0436\u0435\u0442\u043D\u044B\u0435 \u0438\u0433\u0440\u043E\u0432\u044B\u0435 \u043D\u0430\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u044F \u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u044B.")}</p>`} 172 </section>`},_unitEb(){return I18n.t("wallet.unit","\u0415\u0411")},_unitCh(){return I18n.t("wallet.unit_ch","\u0427")},economyIcon(row){const src=row&&row.source&&row.source.type;return src==="court_salary"||src==="court_bonus"?"scales":{donation:"landmark",fine:"scales",reward:"award",conversion:"refresh",sale:"shop",payroll:"scroll",withdrawal:"download",mayor_spend:"landmark",refund:"reply",admin_adjustment:"shield",business_deposit:"shop",hall_rent:"media_video"}[row&&row.kind]||"scroll"},conversionHtml(wallet){const account=wallet.account||{},flags=wallet.flags||{},remaining=Math.max(0,Number(wallet.limits&&wallet.limits.conversionRemainingThisWeek)||0),chervonetsBalance=Math.max(0,Number(this.state.me&&this.state.me.chervonets_balance)||0),exchangeMax=Math.min(remaining,chervonetsBalance),active=account.status==="active",budgetEmpty=wallet.conversion&&wallet.conversion.remaining<=0,canExchange=active&&flags.conversion&&exchangeMax>0&&!budgetEmpty,conversionNote=active?flags.conversion?budgetEmpty?I18n.t("kazna.economy_budget_empty","\u041D\u0435\u0434\u0435\u043B\u044C\u043D\u044B\u0439 \u0431\u044E\u0434\u0436\u0435\u0442 \u043E\u0431\u043C\u0435\u043D\u0430 \u0438\u0441\u0447\u0435\u0440\u043F\u0430\u043D. \u041E\u0431\u043C\u0435\u043D \u043E\u0442\u043A\u0440\u043E\u0435\u0442\u0441\u044F \u043D\u0430 \u0441\u043B\u0435\u0434\u0443\u044
172E\u0449\u0435\u0439 \u043D\u0435\u0434\u0435\u043B\u0435."):remaining<=0?I18n.t("kazna.economy_conversion_limit","\u041D\u0435\u0434\u0435\u043B\u044C\u043D\u044B\u0439 \u043F\u0440\u0435\u0434\u0435\u043B \u043E\u0431\u043C\u0435\u043D\u0430 \u0438\u0441\u0447\u0435\u0440\u043F\u0430\u043D. \u041D\u043E\u0432\u044B\u0439 \u0441\u0440\u043E\u043A \u043E\u0442\u043A\u0440\u043E\u0435\u0442\u0441\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438."):chervonetsBalance<=0?I18n.t("kazna.economy_no_chervonets","\u0414\u043B\u044F \u043E\u0431\u043C\u0435\u043D\u0430 \u0432 \u0440\u0430\u0441\u0445\u043E\u0434\u0443\u0435\u043C\u043E\u043C \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0435 \u043F\u043E\u043A\u0430 \u043D\u0435\u0442 \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u0435\u0432."):I18n.t("kazna.economy_conversion_note","\u041E\u0431\u043C\u0435\u043D \u043E\u0434\u043D\u043E\u0441\u0442\u043E\u0440\u043E\u043D\u043D\u0438\u0439. \u041F\u0435\u0440\u0435\u0434 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u0435\u043C \u0431\u0443\u0434\u0435\u0442 \u043F\u043E\u043A\u0430\u0437\u0430\u043D\u0430 \u0442\u043E\u0447\u043D\u0430\u044F \u0441\u0443\u043C\u043C\u0430. \u041D\u0430\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u0435 \u043E\u043A\u0440\u0443\u0433\u043B\u044F\u0435\u0442\u0441\u044F \u0432\u043D\u0438\u0437 \u0434\u043E \u0446\u0435\u043B\u043E\u0433\u043E \u0415-\u0411\u0430\u043B\u043B\u0430."):I18n.t("kazna.economy_conversion_closed","\u041A\u0443\u0440\u0441 \u043E\u0431\u043C\u0435\u043D\u0430 \u043F\u043E\u043A\u0430 \u043D\u0435 \u0443\u0447\u0440\u0435\u0436\u0434\u0451\u043D. \u0427\u0435\u0440\u0432\u043E\u043D\u0446\u044B \u043E\u0441\u0442\u0430\u044E\u0442\u0441\u044F \u0432 \u0432\u0430\u0448\u0435\u043C \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0435."):I18n.t("kazna.economy_frozen_note","\u0421\u0447\u0451\u0442 \u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D. \u0418\u0441\u0442\u043E\u0440\u0438\u044F \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430, \u043D\u043E\u0432\u044B\u0435 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438 \u043D\u0435 \u043F\u0440\u043E\u0432\u043E\u0434\u044F\u0442\u0441\u044F.");return`<section class="card card-pad economy-conversion-card"> 173 <form class="economy-conversion" id="economy-conversion-form"> 174 <div><h2>${I18n.t("kazna.economy_conversion_title","\u041E\u0431\u043C\u0435\u043D\u044F\u0442\u044C \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u044B")}</h2> 175 <p class="page-sub">${I18n.t("kazna.economy_conversion_remaining","\u0414\u043E \u043A\u043E\u043D\u0446\u0430 \u043D\u0435\u0434\u0435\u043B\u0438 \u043C\u043E\u0436\u043D\u043E \u043F\u0440\u0435\u0434\u044A\u044F\u0432\u0438\u0442\u044C: {amount}",{amount:`${this._n(remaining)} ${this.chervonets(remaining)}`})}</p></div> 176 ${wallet.conversion?`<p class="economy-conversion-rate">${I18n.t("kazna.economy_weekly_rate","\u041A\u0443\u0440\u0441 \u043D\u0435\u0434\u0435\u043B\u0438: {rate} \u0437\u0430 \u0447\u0435\u0440\u0432\u043E\u043D\u0435\u0446. \u041E\u0441\u0442\u0430\u043B\u043E\u0441\u044C \u0432 \u043E\u0431\u0449\u0435\u043C \u0431\u044E\u0434\u0436\u0435\u0442\u0435: {remaining}.",{rate:`${I18n.formatNumber(wallet.conversion.rate,{maximumFractionDigits:4})} ${I18n.locale==="ru"&&!Number.isInteger(wallet.conversion.rate)?I18n.t("kazna.eballs_few","\u0415-\u0411\u0430\u043B\u043B\u0430"):this.eballs(wallet.conversion.rate)}`,remaining:`${this._n(wallet.conversion.remaining)} ${this.eballs(wallet.conversion.remaining)}`})}</p><p class="economy-conversion-note">${I18n.t("kazna.economy_rate_period","\u041A\u0443\u0440\u0441 \u043E\u0431\u043D\u043E\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043F\u043E \u043F\u043E\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0438\u043A\u0430\u043C \u0432 00:00 UTC, \u043D\u0435 \u0431\u043E\u043B\u0435\u0435 \u0447\u0435\u043C \u043D\u0430 5%. \u041F\u0440\u0438 \u043D\u0435\u0434\u043E\u0441\u0442\u0430\u0442\u043A\u0435 \u0434\u0430\u043D\u043D\u044B\u0445 \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u0435\u0442\u0441\u044F.")}</p>`:""} 177 <div class="economy-conversion-controls"> 178 <label><span>${I18n.t("kazna.economy_conversion_amount","\u0421\u043A\u043E\u043B\u044C\u043A\u043E \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u0435\u0432")}</span> 179 <input id="economy-conversion-amount" name="chervonets" type="number" inputmode="numeric" min="1" max="${exch
179angeMax}" step="1" ${canExchange?"":"disabled"} aria-describedby="economy-conversion-note"> 180 </label> 181 <button class="btn btn-primary" type="submit" ${canExchange?"":'disabled aria-describedby="economy-conversion-note"'}>${I18n.t("kazna.economy_convert","\u041E\u0431\u043C\u0435\u043D\u044F\u0442\u044C")}</button> 182 </div> 183 <p class="economy-conversion-note" id="economy-conversion-note">${conversionNote}</p> 184 </form> 185 </section>`},totalsHtml(wallet){const income=wallet.income||null,rewards=wallet.gameRewards||null,flags=wallet.flags||{},account=wallet.account||{},remaining=Math.max(0,Number(wallet.limits&&wallet.limits.conversionRemainingThisWeek)||0),row=(label,value)=>`<div class="split-row"><span>${label}</span><b class="kazna-num">${value}</b></div>`,rows=[];return income&&(rows.push(row(I18n.t("wallet.total_eb_in","\u041F\u043E\u043B\u0443\u0447\u0435\u043D\u043E \u0415-\u0411\u0430\u043B\u043B\u043E\u0432"),`+${this._n(income.eballs)} ${this._unitEb()}`)),rows.push(row(I18n.t("wallet.total_ch_in","\u041F\u043E\u043B\u0443\u0447\u0435\u043D\u043E \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u0435\u0432"),`+${this._n(income.chervonets)} ${this._unitCh()}`))),rewards&&rewards.enabled&&rewards.eligible&&rows.push(row(I18n.t("wallet.total_games_week","\u0412 \u0438\u0433\u0440\u0430\u0445 \u0437\u0430 \u043D\u0435\u0434\u0435\u043B\u044E"),`${this._n(rewards.earnedThisWeek)} / ${this._n(rewards.weeklyCap)} ${this._unitEb()}`)),wallet.limits&&rows.push(row(I18n.t("wallet.total_exchange_left","\u041E\u0431\u043C\u0435\u043D \u043D\u0430 \u044D\u0442\u043E\u0439 \u043D\u0435\u0434\u0435\u043B\u0435"),`${this._n(remaining)} ${this._unitCh()}`)),rows.push(row(I18n.t("wallet.total_purchases","\u041F\u043E\u043A\u0443\u043F\u043A\u0438"),flags.purchases?I18n.t("wallet.state_open","\u043E\u0442\u043A\u0440\u044B\u0442\u044B"):I18n.t("wallet.state_paused","\u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u044B"))),rows.push(row(I18n.t("wallet.total_rewards","\u041D\u0430\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u044F"),flags.rewards?I18n.t("wallet.state_open","\u043E\u0442\u043A\u0440\u044B\u0442\u044B"):I18n.t("wallet.state_paused","\u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u044B"))),account.status&&account.status!=="active"&&rows.push(row(I18n.t("wallet.total_account","\u0421\u0447\u0451\u0442"),I18n.t("wallet.state_account_paused","\u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D"))),`<section class="card card-pad wallet-totals"> 186 <h2>${I18n.t("wallet.totals","\u0417\u0430 \u0432\u0441\u0451 \u0432\u0440\u0435\u043C\u044F")}</h2> 187 ${rows.join("")} 188 </section>`},monthlyTotalsHtml(){const eballs=this._monthRows(this.state.economyTransactions,"createdAt"),ebIn=eballs.filter(row2=>row2.direction==="income").reduce((sum,row2)=>sum+Math.abs(Number(row2.amount)||0),0),ebOut=eballs.filter(row2=>row2.direction==="expense").reduce((sum,row2)=>sum+Math.abs(Number(row2.amount)||0),0),mine=Array.isArray(this.state.mine)?this._monthRows(this.state.mine,"created_at"):null,chIn=mine?mine.reduce((sum,row2)=>sum+Math.max(0,Number(row2.chervonets)||0),0):null,signed=(value,unit)=>`${value>=0?"+":"\u2212"}${this._n(Math.abs(value))} ${unit}`,row=(label,value)=>`<div class="split-row"><span>${label}</span><b class="kazna-num">${value}</b></div>`,loadedNote=this.state.monthLedgerLimited||this.state.monthChervonetsLimited?`<p class="page-sub wallet-month-note">${I18n.t("wallet.month_loaded","\u041F\u043E \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u043D\u044B\u043C \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044F\u043C: \u043C\u0435\u0441\u044F\u0447\u043D\u0430\u044F \u0432\u0435\u0434\u043E\u043C\u043E\u0441\u0442\u044C \u0434\u043E\u0441\u0442\u0438\u0433\u043B\u0430 \u043F\u0440\u0435\u0434\u0435\u043B\u0430 \u0432\u044B\u0434\u0430\u0447\u0438.")}</p>`:"";return`<section class="card card-pad wallet-month"> 189 <h2>${I18n.t("wallet.month","\u0417\u0430 \u043C\u0435\u0441\u044F\u0446")}</h2> 190 <h3>${I18n.t("wallet.month_eballs","\u0415-\u0411\u0430\u043B\u043B\u044B")}</h3> 191 ${row(I18n.t("wallet.month_received","\u041F\u043E\u0441\u0442\u0443\u043F\u0438\u043B\u043E"),signed(ebIn,this._unitEb()))} 192 ${row(I18n.t("wallet.month_spent","\u041F\u043E\u0442\u0440\u0430\u0447\u0435\u043D\u043E"),ebOut?`\u2212${this._n(ebOut)} ${this._unitEb()}`:`0 ${this._unitEb()}`)} 193 ${row(I18n.t("wallet.month_result","\u0418\u0442\u043E\u0433"),signed(ebIn-ebOut,this._unitEb()))} 194 <h3>${I18n.t("wallet.month_chervonets","\u0427\u0435\u0440\u0432\u043E\u043D\u0446\u044B")}</h3> 195 ${row(I18n.t("wallet.month_received","\u041F\u043E\u0441\u0442\u0443\u043F\u0438\u043B\u043E"),chIn==null?"\u2014":signed(chIn,this._unitCh()))} 196 <p class="page-sub wallet-month-note">${I18n.t("wallet.month_chervonets_note","\u0418\u0441\u0442\u043E\u0440\u0438\u044F \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u0435\u0432 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u0442 \u043F\u043E\u0441\u0442\u0443\u043F\u043B\u0435\u043D\u0438\u044F, \u043D\u043E \u043D\u0435 \u043F\u043E\u043C\u0435\u0441\u044F\u0447\u043D\u044B\u0435 \u0441\u043F\u0438\u0441\u0430\u043D\u0438\u044F. \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u043E \u043D\u0435 \u0432\u044B\u0432\u043E\u0434\u0438\u0442 \u0440\u0430\u0441\u0445\u043E\u0434 \u0438 \u0438\u0442\u043E\u0433 \u0431\u0435\u0437 \u0440\u0435\u0435\u0441\u0442\u0440\u0430 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0439.")}</p> 197 ${loadedNote} 198 </section>`},_eballsNote(wallet){const account=wallet.account||{};if(account.status&&account.status!=="active")return I18n.t("wallet.eb_paused","\u0441\u0447\u0451\u0442 \u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D");const rewards=wallet.gameRewards;return rewards&&rewards.enabled&&rewards.eligible?I18n.t("wallet.eb_week","+{amount} {unit} \u0432 \u0438\u0433\u0440\u0430\u0445 \u0437\u0430 \u044D\u0442\u0443 \u043D\u0435\u0434\u0435\u043B\u044E",{amount:this._n(rewards.earnedThisWeek),unit:this._unitEb()}):wallet.income?I18n.t("wallet.eb_income","\u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E \u0437\u0430 \u0432\u0441\u0451 \u0432\u0440\u0435\u043C\u044F: +{amount} {unit}",{amount:this._n(wallet.income.eballs),unit:this._unitEb()}):I18n.t("kazna.economy_available","\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u043E")},_chervonetsNote(wallet){const mine=Array.isArray(this.state.mine)?this.state.mine:null;return mine&&mine.length?I18n.t("wallet.ch_last","\u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0435 \u043F\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435: +{amount} {unit}",{amount:this._n(mine[0].chervonets),unit:this._unitCh()}):wallet.income?I18n.t("wallet.ch_income","\u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E \u0437\u0430 \u0432\u0441\u0451 \u0432\u0440\u0435\u043C\u044F: +{amount} {unit}",{amount:this._n(wallet.income.chervonets),unit:this._unitCh()}):I18n.t("wallet.ch_hint","\u043F\u043E\u043F\u043E\u043B\u043D\u044F\u044E\u0442\u0441\u044F \u0432\u0437\u043D\u043E\u0441\u0430\u043C\u0438 \u0432 \u041A\u0430\u0437\u043D\u0443")},economyHtml(){if(!App.state.user||!App.feature("economy")||!App.feature("economy_wallet"))return"";if(this.state.economyError||!this.state.economy){const detail=this.state.economyError?this.errorText(this.state.economyError,"kazna.economy_load_error","\u041B\u0438\u0447\u043D\u044B\u0439 \u0440\u0430\u0441\u0447\u0451\u0442\u043D\u044B\u0439 \u043B\u0438\u0441\u0442 \u043D\u0435 \u0434\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D. \u041F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u0441\u0432\u044F\u0437\u044C \u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u0437\u0430\u043F\u0440\u043E\u0441."):I18n.t("kazna.economy_load_error","\u041B\u0438\u0447\u043D\u044B\u0439 \u0440\u0430\u0441\u0447\u0451\u0442\u043D\u044B\u0439 \u043B\u0438\u0441\u0442 \u043D\u0435 \u0434\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D. \u041F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u0441\u0432\u044F\u0437\u044C \u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u0437\u0430\u043F\u0440\u043E\u0441.");return`<section class="card card-pad wallet-body economy-wallet-error" id="economy-wallet"> 199 <div class="economy-wallet-error-mark event-icon" aria-hidden="true">${Icons.render("scroll",20)}</div> 200 <div><h2>${I18n.t("kazna.economy_unavailable","\u0412\u0435\u0434\u043E\u043C\u043E\u0441\u0442\u044C \u0415-\u0411\u0430\u043B\u043B\u043E\u0432 \u043D\u0435 \u0432\u044B\u0434\u0430\u043D\u0430")}</h2><p class="page-sub">${Utils.esc(detail)}</p></div> 201 <button class="btn" type="button" id="economy-retry">${I18n.t("kazna.economy_retry","\u0417\u0430\u043F\u0440\u043E\u0441\u0438\u0442\u044C \u0441\u043D\u043E\u0432\u0430")}</button> 202 </section>`}const wallet=this.state.economy,account=wallet.account||{},chervonetsBalance=Math.max(0,Number(this.state.me&&this.state.me.chervonets_balance)||0),mine=Array.isArray(this.state.mine)?this.state.mine:null,currency=this._ledgerCurrency==="chervonets"&&mine?"chervonets":"eballs";this._ledgerCurrency=currency;const tab=(key,label)=>`<button type="button" class="tab-btn${currency===key?" active":""}" role="tab" aria-selected="${currency===key}" tabindex="${currency===key?"0":"-1"}" data-ledger="${key}">${label}</button>`;return`<div class="wallet-body" id="economy-wallet" aria-labelledby="economy-wallet-title"> 203 <div class="wallet-grid"> 204 <section class="card balance-card" aria-label="${I18n.t("kazna.economy_balance_aria","\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u043E {amount} {unit}",{amount:this._n(account.available),unit:this.eballs(account.available)})}"> 205 <small>${I18n.t("wallet.eb_card","\u0415-\u0411\u0430\u043B\u043B\u044B \xB7 \u0438\u0433\u0440\u043E\u0432\u0430\u044F \u0432\u0430\u043B\u044E\u0442\u0430")}</small> 206 <strong class="kazna-num">${this._n(account.available)} ${this._unitEb()}</strong>
207 <span>${this._eballsNote(wallet)}</span> 208 </section> 209 <section class="card balance-card gold" aria-label="${I18n.t("wallet.ch_card_aria","\u0412 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0435 {amount} {unit}",{amount:this._n(chervonetsBalance),unit:this.chervonets(chervonetsBalance)})}"> 210 <small>${I18n.t("wallet.ch_card","\u0427\u0435\u0440\u0432\u043E\u043D\u0446\u044B \xB7 \u0440\u0430\u0441\u0447\u0451\u0442\u043D\u0430\u044F \u0432\u0430\u043B\u044E\u0442\u0430")}</small> 211 <strong class="kazna-num"><span data-wallet-balance="chervonets">${this._n(chervonetsBalance)}</span> ${this._unitCh()}</strong> 212 <span>${this._chervonetsNote(wallet)}</span> 213 </section> 214 </div> 215 <div class="deeds-layout"> 216 <section class="card ledger economy-ledger"> 217 <div class="card-pad economy-ledger-head"> 218 <h2 id="economy-wallet-title">${I18n.t("wallet.history","\u0418\u0441\u0442\u043E\u0440\u0438\u044F \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0439")}</h2> 219 ${mine?`<div class="tabs ledger-tabs" role="tablist" aria-label="${I18n.t("wallet.history_currency","\u0412\u0430\u043B\u044E\u0442\u0430 \u0438\u0441\u0442\u043E\u0440\u0438\u0438")}"> 220 ${tab("eballs",I18n.t("wallet.tab_eballs","\u0415-\u0411\u0430\u043B\u043B\u044B"))}${tab("chervonets",I18n.t("wallet.tab_chervonets","\u0427\u0435\u0440\u0432\u043E\u043D\u0446\u044B"))} 221 </div>`:""} 222 </div> 223 <div id="wallet-ledger">${this.ledgerHtml(currency)}</div> 224 </section> 225 <aside class="stack"> 226 ${this.monthlyTotalsHtml()} 227 ${this.totalsHtml(wallet)} 228 ${this.conversionHtml(wallet)} 229 ${this.gameRewardsHtml(wallet.gameRewards)} 230 <section class="card card-pad wallet-important"> 231 <h2>${I18n.t("wallet.important","\u0412\u0430\u0436\u043D\u043E")}</h2> 232 <p class="page-sub">${I18n.t("wallet.important_text","\u0415-\u0411\u0430\u043B\u043B\u044B \u0436\u0438\u0432\u0443\u0442 \u0432\u043D\u0443\u0442\u0440\u0438 \u0438\u0433\u0440\u043E\u0432\u044B\u0445 \u043C\u0435\u0445\u0430\u043D\u0438\u043A. \u0427\u0435\u0440\u0432\u043E\u043D\u0446\u044B \u0443\u0447\u0438\u0442\u044B\u0432\u0430\u044E\u0442 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0443 \u0415\u0433\u043E\u0440\u043E\u0434\u0430 \u0438 \u043F\u043E\u043A\u0443\u043F\u043A\u0438. \u041E\u043D\u0438 \u0434\u0440\u0443\u0436\u0430\u0442, \u043D\u043E \u0432 \u043E\u0434\u043D\u0443 \u0432\u0430\u043B\u044E\u0442\u0443 \u043D\u0435 \u043F\u0440\u0438\u0442\u0432\u043E\u0440\u044F\u044E\u0442\u0441\u044F.")}</p> 233 <p class="page-sub">${I18n.t("wallet.intro","\u0415-\u0411\u0430\u043B\u043B\u044B \u2014 \u0434\u0435\u043D\u044C\u0433\u0438 \u0434\u043B\u044F \u043F\u043E\u043A\u0443\u043F\u043E\u043A \u0432 \u0415\u0433\u043E\u0440\u043E\u0434\u0435. \u041F\u043E\u043B\u0443\u0447\u0430\u0439\u0442\u0435 \u0438\u0445 \u0432 \u0438\u0433\u0440\u0430\u0445, \u043E\u0431\u043C\u0435\u043D\u0438\u0432\u0430\u0439\u0442\u0435 \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u044B \u0438 \u0442\u0440\u0430\u0442\u044C\u0442\u0435 \u0432 \u0437\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u044F\u0445 \u043D\u0430 \u041A\u0430\u0440\u0442\u0435.")}</p> 234 </section> 235 </aside> 236 </div> 237 </div>`},ledgerHtml(currency){if(currency==="chervonets"){const mine=Array.isArray(this.state.mine)?this.state.mine:[];return`<div class="chervonets-ledger" role="tabpanel"> 238 <p class="page-sub ledger-note">${I18n.t("wallet.ch_history_note","\u041F\u0440\u0438\u0445\u043E\u0434 \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u0435\u0432: \u0432\u0437\u043D\u043E\u0441\u044B \u0432 \u041A\u0430\u0437\u043D\u0443 \u0438 \u043D\u0430\u0433\u0440\u0430\u0434\u043D\u044B\u0435 \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u0430.")}</p> 239 ${mine.length?`<div class="chervonets-ledger-list">${mine.map(d=>this.chervonetsRowHtml(d)).join("")}</div>`:`<div class="economy-ledger-empty"> 240 ${Icons.render("landmark",22)}<strong>${I18n.t("wallet.ch_empty_title","\u0412\u0437\u043D\u043E\u0441\u043E\u0432 \u043F\u043E\u043A\u0430 \u043D\u0435 \u0431\u044B\u043B\u043E")}</strong>
241 <span>${I18n.t("wallet.ch_empty_text","\u041F\u0435\u0440\u0432\u044B\u0439 \u0432\u0437\u043D\u043E\u0441 \u0432 \u041A\u0430\u0437\u043D\u0443 \u0438\u043B\u0438 \u043D\u0430\u0433\u0440\u0430\u0434\u043D\u044B\u0435 \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u0430 \u043F\u043E\u044F\u0432\u044F\u0442\u0441\u044F \u0437\u0434\u0435\u0441\u044C.")}</span> 242 </div>`} 243 <div class="ledger-foot"><a class="btn" href="#/kazna">${I18n.t("wallet.open_kazna","\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u041A\u0430\u0437\u043D\u0443")}</a></div> 244 </div>`}const rows=this.state.economyTransactions||[];return`<div class="eballs-ledger" role="tabpanel"> 245 ${rows.length?`<div class="economy-ledger-list">${rows.map(row=>this.economyTransactionHtml(row)).join("")}</div>`:`<div class="economy-ledger-empty"> 246 ${Icons.render("scroll",22)}<strong>${I18n.t("kazna.economy_empty_title","\u0412\u0435\u0434\u043E\u043C\u043E\u0441\u0442\u044C \u043F\u043E\u043A\u0430 \u0447\u0438\u0441\u0442\u0430")}</strong> 247 <span>${I18n.t("kazna.economy_empty_text","\u041F\u0435\u0440\u0432\u0430\u044F \u0437\u0430\u0440\u043F\u043B\u0430\u0442\u0430, \u043D\u0430\u0433\u0440\u0430\u0434\u0430, \u043F\u043E\u043A\u0443\u043F\u043A\u0430 \u0438\u043B\u0438 \u043E\u0431\u043C\u0435\u043D \u043F\u043E\u044F\u0432\u044F\u0442\u0441\u044F \u0437\u0434\u0435\u0441\u044C \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438.")}</span> 248 </div>`} 249 ${this.state.economyNext?`<div class="ledger-foot"><button class="btn economy-ledger-more" type="button" id="economy-ledger-more">${I18n.t("kazna.economy_more","\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0440\u0430\u043D\u043D\u0438\u0435 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438")}</button></div>`:""} 250 </div>`},chervonetsRowHtml(d){const title=d.manual?I18n.t("wallet.ch_row_grant","\u041D\u0430\u0433\u0440\u0430\u0434\u043D\u044B\u0435 \u043E\u0442 \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u0430"):I18n.t("wallet.ch_row_donation","\u0412\u0437\u043D\u043E\u0441 \u0432 \u041A\u0430\u0437\u043D\u0443"),when=Utils.timeAgo(d.created_at)||I18n.t("common.just_now","\u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u043E");return`<div class="ledger-row chervonets-ledger-row"> 251 <span class="event-icon" aria-hidden="true">${Icons.render("landmark",20)}</span> 252 <div><b>${title}</b><p>${when}${d.note?` \xB7 \xAB${Utils.esc(d.note)}\xBB`:""}</p></div> 253 <span class="amount plus kazna-num">+${this._n(d.chervonets)} ${this._unitCh()}</span> 254 </div>`},economyTransactionHtml(row){const income=row.direction==="income",amount=Math.abs(Number(row.amount)||0),detail=row.source?.type==="court_salary"?I18n.t("court_pay.ledger_salary","\u0415\u0436\u0435\u043C\u0435\u0441\u044F\u0447\u043D\u043E\u0435 \u0436\u0430\u043B\u043E\u0432\u0430\u043D\u044C\u0435 \u0441\u0443\u0434\u0430"):row.source?.type==="court_bonus"?I18n.t("court_pay.ledger_bonus","\u041F\u0440\u0435\u043C\u0438\u044F \u0437\u0430 \u0432\u044B\u0438\u0433\u0440\u0430\u043D\u043D\u043E\u0435 \u0434\u0435\u043B\u043E"):row.reason?Utils.esc(row.reason):I18n.t("kazna.economy_no_reason","\u041E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u043E \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0435 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438.");return`<div class="ledger-row economy-ledger-row economy-ledger-${income?"income":"expense"}"> 255 <span class="event-icon" aria-hidden="true">${Icons.render(this.economyIcon(row),20)}</span> 256 <div><b>${Utils.esc(this.economyKind(row.kind))}</b> 257 <p><time>${Utils.timeAgo(row.createdAt)||I18n.t("common.just_now","\u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u043E")}</time> \xB7 ${detail}</p></div> 258 <span class="amount ${income?"plus":"minus"} economy-ledger-amount kazna-num">${income?"+":"\u2212"}${this._n(amount)} ${this._unitEb()}</span> 259 </div>`},bindEconomy(){const retry=document.getElementById("economy-retry");retry&&retry.addEventListener("click",()=>this.loadEconomy());const form=document.getElementById("economy-conversion-form");form&&form.addEventListener("submit",event=>{event.preventDefault(),this.convertEconomy(form)}),this.bindLedgerMore(),document.querySelectorAll(".ledger-tabs .tab-btn").forEach(btn=>btn.addEventListener("click",()=>this.switchLedger(btn.dataset.ledger)));const tablist=document.querySelector(".ledger-tabs");tablist&&tablist.addEventListener("keydown",e=>
259{if(!["ArrowLeft","ArrowRight","Home","End"].includes(e.key))return;const list=Array.from(tablist.querySelectorAll(".tab-btn")),cur=list.findIndex(t=>t.dataset.ledger===this._ledgerCurrency);if(cur<0)return;e.preventDefault();let next=cur;e.key==="ArrowLeft"?next=(cur-1+list.length)%list.length:e.key==="ArrowRight"?next=(cur+1)%list.length:e.key==="Home"?next=0:e.key==="End"&&(next=list.length-1),this.switchLedger(list[next].dataset.ledger,!0)})},bindLedgerMore(){const more=document.getElementById("economy-ledger-more");more&&more.addEventListener("click",()=>this.loadEconomyMore(more))},switchLedger(currency,focus){const key=currency==="chervonets"?"chervonets":"eballs";this._ledgerCurrency=key,document.querySelectorAll(".ledger-tabs .tab-btn").forEach(t=>{const on=t.dataset.ledger===key;if(t.classList.toggle("active",on),t.setAttribute("aria-selected",on?"true":"false"),t.tabIndex=on?0:-1,on&&focus)try{t.focus()}catch{}});const body=document.getElementById("wallet-ledger");body&&(body.innerHTML=this.ledgerHtml(key),this.bindLedgerMore())},paintEconomy(){const section=document.getElementById("economy-wallet");if(!section)return;section.outerHTML=this.economyHtml(),this.bindEconomy();const fresh=document.getElementById("economy-wallet");fresh&&Utils.appear(fresh,"fade")},async loadEconomy(){const retry=document.getElementById("economy-retry");retry&&(retry.disabled=!0,retry.setAttribute("aria-busy","true"));try{const[wallet,ledger]=await Promise.all([Api.economy.me(),Api.economy.transactions().then(first=>this._loadEconomyMonth(first))]);this.state.economy=wallet,this.state.me={...this.state.me,chervonets_balance:wallet.chervonetsBalance},this.state.economyTransactions=Array.isArray(ledger.transactions)?ledger.transactions:[],this.state.economyNext=ledger.next||null,this.state.economyError=null}catch(error){this.state.economyError=error}this.paintEconomy()},async loadEconomyMore(btn){if(!(!this.state.economyNext||!btn||btn.disabled)){btn.disabled=!0,btn.setAttribute("aria-busy","true");try{const ledger=await Api.economy.transactions({before:this.state.economyNext}),seen=new Set(this.state.economyTransactions.map(row=>Number(row.id))),added=(ledger.transactions||[]).filter(row=>!seen.has(Number(row.id)));this.state.economyTransactions.push(...added),this.state.economyNext=ledger.next||null;const container=btn.closest(".economy-ledger");let list=container?.querySelector(".economy-ledger-list");if(!list&&added.length&&(list=document.createElement("div"),list.className="economy-ledger-list",container.querySelector(".economy-ledger-empty")?.replaceWith(list)),list&&added.length&&list.insertAdjacentHTML("beforeend",added.map(row=>this.economyTransactionHtml(row)).join("")),this.state.economyNext)btn.disabled=!1,btn.removeAttribute("aria-busy"),btn.focus();else{const heading=container?.querySelector(".economy-ledger-head h2, .economy-ledger-head h3");btn.remove(),heading&&(heading.tabIndex=-1,heading.focus())}}catch(error){btn.disabled=!1,btn.removeAttribute("aria-busy"),Utils.showToast(this.errorText(error,"kazna.economy_more_error","\u0420\u0430\u043D\u043D\u0438\u0435 \u0441\u0442\u0440\u043E\u043A\u0438 \u043D\u0435 \u0434\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u044B. \u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u0437\u0430\u043F\u0440\u043E\u0441."),"error")}}},async convertEconomy(form){if(this._conversionBusy)return;const userId=App.state.user&&App.state.user.id;if(!userId)return;this._conversionAttempt&&this._conversionAttempt.userId!==userId&&(this._conversionAttempt=null);const input=form&&form.querySelector('[name="chervonets"]'),btn=form&&form.querySelector('button[type="submit"]'),amount=Number(input&&input.value),max=Number(input&&input.max);if(!Number.isSafeInteger(amount)||amount<=0||!Number.isSafeInteger(max)||amount>max){Utils.showToast(I18n.t("kazna.economy_invalid_amount","\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0446\u0435\u043B\u043E\u0435 \u0447\u0438\u0441\u043B\u043E \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u0435\u0432 \u0432 \u043F\u0440\u0435\u0434\u0435\u043B\u0430\u0445 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E\u0433\u043E \u043E\u0441\u0442\u0430\u0442\u043A\u0430."),"error"),input&&input.focus();return}if(this._conversionAttempt&&this._conversionAttempt.sent&&this._conversionAttempt.amount!==amount){input.value=this._conversionAttempt.amount,Utils.showToast(I18n.t("kazna.economy_retry_pending","\u0421\u043D\u0430\u0447\u0430\u043B\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0438\u0439 \u043E\u0431\u043C\u0435\u043D: \u0435\u0433\u043E \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u0435\u0449\u0451 \u043D\u0435 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043D."),"error");return}this._conversionBusy=!0,input.disabled=!0,btn&&(btn.disabled=!0,btn.setAttribute("aria-busy","true")),(!this._conversionAttempt||this._conversionAttempt.amount!==amount)&&(this._conversionAttempt={amount,key:this._economyKey("conversion"),userId});try{const attempt=this._conversionAttempt;if(!attempt.sent){const offered=await Api.economy.quote(amount);if(!App.state.user||App.state.user.id!==userId)return;if(attempt.quote=offered.quote,!await Modals.confirm({title:I18n.t("kazna.economy_conversion_title","\u041E\u0431\u043C\u0435\u043D\u044F\u0442\u044C \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u044B"),message:I18n.t("kazna.economy_confirm_exchange","\u0421\u043F\u0438\u0441\u0430\u0442\u044C {chervonets} \u0438 \u043D\u0430\u0447\u0438\u0441\u043B\u0438\u0442\u044C {eballs}? \u041E\u0431\u043C\u0435\u043D \u043E\u0434\u043D\u043E\u0441\u0442\u043E\u0440\u043E\u043D\u043D\u0438\u0439. \u0415\u0441\u043B\u0438 \u043A\u0443\u0440\u0441 \u0438\u0437\u043C\u0435\u043D\u0438\u0442\u0441\u044F \u0438\u043B\u0438 \u0431\u044E\u0434\u0436\u0435\u0442 \u0437\u0430\u043A\u043E\u043D\u0447\u0438\u0442\u0441\u044F, \u0441\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u043D\u0435 \u0431\u0443\u0434\u0435\u0442.",{chervonets:`${this._n(amount)} ${this.chervonets(amount)}`,eballs:`${this._n(attempt.quote.eballs)} ${this.eballs(attempt.quote.eballs)}`}),confirmText:I18n.t("kazna.economy_convert","\u041E\u0431\u043C\u0435\u043D\u044F\u0442\u044C"),danger:!0})){this._conversionAttempt=null;return}}if(!App.state.user||App.state.user.id!==userId)return;attempt.sent=!0;const result=await Api.economy.convert(amount,attempt.key,attempt.quote);if(!App.state.user||App.state.user.id!==userId)return;this.state.economy&&this.state.economy.account&&(this.state.economy.account.balance=Number(result.e
259conomyBalance)||0,this.state.economy.account.available=this.state.economy.account.status==="active"&&Number(result.economyBalance)||0,this.state.economy.limits.conversionRemainingThisWeek=Math.max(0,Number(this.state.economy.limits.conversionRemainingThisWeek)-amount)),this.state.me&&(this.state.me.chervonets_balance=Number(result.chervonetsBalance)||0),this.state.cosmetics&&(this.state.cosmetics.balance=Number(result.chervonetsBalance)||0),document.querySelectorAll('[data-wallet-balance="chervonets"]').forEach(node=>{node.textContent=this._n(result.chervonetsBalance)}),this._conversionAttempt=null,this.state.economy&&this.state.economy.conversion&&(this.state.economy.conversion.remaining=Math.max(0,this.state.economy.conversion.remaining-result.conversion.eballs));try{const refreshed=await Api.economy.me();if(!App.state.user||App.state.user.id!==userId)return;this.state.economy=refreshed}catch{}try{const ledger=await Api.economy.transactions();if(!App.state.user||App.state.user.id!==userId)return;this.state.economyTransactions=Array.isArray(ledger.transactions)?ledger.transactions:[],this.state.economyNext=ledger.next||null}catch{}this.paintEconomy(),Utils.showToast(I18n.t("kazna.economy_converted","\u041E\u0431\u043C\u0435\u043D \u043F\u0440\u043E\u0432\u0435\u0434\u0451\u043D: \u043D\u0430\u0447\u0438\u0441\u043B\u0435\u043D\u043E {amount} {unit}.",{amount:this._n(result.conversion&&result.conversion.eballs),unit:this.eballs(result.conversion&&result.conversion.eballs)}),"success")}catch(error){if(!App.state.user||App.state.user.id!==userId)return;error.data&&error.data.code&&(this._conversionAttempt=null),Utils.showToast(this.errorText(error,"kazna.economy_conversion_error","\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u043E\u0431\u043C\u0435\u043D\u0430 \u043D\u0435 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043D. \u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u0437\u0430\u043F\u0440\u043E\u0441 \u0441 \u0442\u043E\u0439 \u0436\u0435 \u0441\u0443\u043C\u043C\u043E\u0439."),"error")}finally{this._conversionBusy=!1,input.disabled=!1,btn&&(btn.disabled=!1,btn.removeAttribute("aria-busy"))}},cosmeticsHtml(){const shop=this.state.cosmetics;if(!App.state.user||!shop)return"";const owned=new Set((shop.owned||[]).map(x=>x.item_code)),serviceAccess=!!shop.service_access,serviceSource=shop.service_source||"staff",temporaryAccessLabel=serviceSource==="mayor"?I18n.t("kazna.access_mayor","\u0432\u044B\u0434\u0430\u043D\u043E \u043D\u0430 \u0441\u0440\u043E\u043A \u043F\u043E\u043B\u043D\u043E\u043C\u043E\u0447\u0438\u0439"):I18n.t("kazna.access_staff","\u0432\u044B\u0434\u0430\u043D\u043E \u043D\u0430 \u0432\u0440\u0435\u043C\u044F \u0441\u043B\u0443\u0436\u0431\u044B"),hasAccess=code=>serviceAccess||owned.has(code),accessLabel=code=>owned.has(code)?I18n.t("kazna.owned","\u043F\u0440\u0438\u043E\u0431\u0440\u0435\u0442\u0435\u043D\u043E"):serviceAccess?temporaryAccessLabel:null,draft=this._cosmeticDraft||shop.loadout||{},nameChoice=draft.name_color||"gold",toneChoice=draft.profile_tone||"blue",nameColor=Utils.cosmeticColor(nameChoice)||Utils.cosmeticColor("gold"),toneColor=Utils.cosmeticColor(toneChoice)||Utils.cosmeticColor("blue"),shimmerOn=draft.name_effect==="shimmer",previewShimmer=!!this._cosmeticPreviewShimmer,previewUser=App.state.user,previewName=Utils.localizedDisplayName(previewUser.name||previewUser.username,I18n.t("common.george","\u0415\u0433\u043E\u0440")),previewAvatar=Utils.safeUrl(previewUser.avatar_url)?`<img src="${Utils.safeUrl(previewUser.avatar_url)}" alt="" ${Utils.fbAvatar(previewName,previewUser.role,{font:22})}>`:`<span style="${Utils.avatarFill(previewUser)}">${Utils.esc(Utils.initials(previewName))}</span>`,byCode=Object.fromEntries((shop.catalog||[]).map(x=>[x.code,x])),palette=(item,slot,selected)=>`<div class="kazna-cosmetic-palette" role="group" aria-label="${Utils.esc(this.cosmeticText(item,"title"))}"> 260 ${(item.options||[]).map(o=>`<button type="button" class="kazna-cosmetic-swatch${o.code===selected?" selected":""}" 261 style="--swatch:${Utils.esc(o.color)}" data-cosmetic-slot="${slot}" data-cosmetic-color="${Utils.esc(o.code)}" 262 aria-label="${Utils.esc(this.cosmeticOptionLabel(o))}" aria-pressed="${o.code===selected}" title="${Utils.esc(this.cosmeticOptionLabel(o))}"></button>`).join("")} 263 </div>`,action=(item,slot,accessible,label)=>`<button type="button" class="btn ${accessible?"btn-secondary":"btn-primary"} btn-sm kazna-cosmetic-action" 264 data-cosmetic-item="${item.code}" data-cosmetic-slot="${slot}" data-owned="${accessible?"1":"0"}" 265 ${!accessible&&item.price>shop.balance?`disabled title="${I18n.t("kazna.insufficient","\u041D\u0435\u0434\u043E\u0441\u0442\u0430\u0442\u043E\u0447\u043D\u043E \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u0435\u0432")}"`:""}>${label}</button>`,nameItem=byCode.name_color,shimmerItem=byCode.name_shimmer,toneItem=byCode.profile_tone,reactionPack=byCode.reaction_pack_chancery;if(!nameItem||!shimmerItem||!toneItem||!reactionPack)return"";const packOwned=owned.has(reactionPack.code),packAccess=hasAccess(reactionPack.code),packFaces=(reactionPack.reactions||[]).map(r=>`<span class="kazna-reaction-face" title="${Utils.esc(this.cosmeticReaction(r))}"><span class="reaction-art reaction-art-${Utils.esc(r.code.replace(/_/g,"-"))}" aria-hidden="true"></span><small>${Utils.esc(this.cosmeticReaction(r))}</small></span>`).join(""),packSurfaces=(reactionPack.surfaces||[]).map(surface=>{const icon=surface.code==="feed"?"home":"comment";return`<span class="kazna-reaction-surface">${Icons.render(icon,12)} ${Utils.esc(this.cosmeticSurface(surface))}</span>`}).join("");return` 266 <section class="card kazna-cosmetics" id="kazna-cosmetics"> 267 <div class="kazna-cosmetics-head"> 268 <div> 269 <div class="kazna-eyebrow">${I18n.t("kazna.shop_eyebrow","\u041B\u0430\u0432\u043A\u0430 \u0432\u043D\u0435\u0448\u043D\u0435\u0433\u043E \u0432\u0438\u0434\u0430")}</div> 270 <h2 class="kazna-cosmetics-title">${I18n.t("kazna.shop_title","\u041A\u043E\u0441\u043C\u0435\u0442\u0438\u043A\u0430 \u0437\u0430 \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u044B")}</h2> 271 <div class="kazna-cosmetics-note">${I18n.t("kazna.shop_note","\u041F\u043E\u043A\u0443\u043F\u043A\u0438 \u0443\u043C\u0435\u043D\u044C\u0448\u0430\u044E\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0439 \u043A\u043E\u0448\u0435\u043B\u0451\u043A. \u0412\u043D\u0435\u0441\u0451\u043D\u043D\u0430\u044F \u0441\u0443\u043C\u043C\u0430 \u0438 \u0437\u0432\u0430\u043D\u0438\u0435 \u043C\u0435\u0446\u0435\u043D\u0430\u0442\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u044E\u0442\u0441\u044F. \u041E\u0431\u0440\u0430\u0437\u0435\u0446 \u043C\u043E\u0436\u043D\u043E \u0441\u0432\u043E\u0431\u043E\u0434\u043D\u043E \u043F\u0440\u0438\u043C\u0435\u0440\u044F\u0442\u044C \u0434\u043E \u043F\u043E\u043A\u0443\u043F\u043A\u0438.")}</div> 272 </div> 273 <div class="kazna-wallet"><span>${I18n.t("kazna.available","\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u043E")}</span><b class="kazna-num" data-wallet-balance="chervonets">${this._n(shop.balance)}</b><small>${this.chervonets(shop.balance)}</small></div> 274 </div> 275 ${serviceAccess?`<div class="kazna-cosmetics-service">${Icons.render(serviceSource==="mayor"?"landmark":"shield",15)} <span>${serviceSource==="mayor"?I18n.t("kazna.service_mayor","\u0414\u0435\u0439\u0441\u0442\u0432\u0443\u044
275E\u0449\u0435\u043C\u0443 \u0413\u043B\u0430\u0432\u0435 \u0432\u0435\u0441\u044C \u0430\u0441\u0441\u043E\u0440\u0442\u0438\u043C\u0435\u043D\u0442 \u0432\u044B\u0434\u0430\u043D \u043D\u0430 \u0441\u0440\u043E\u043A \u043F\u043E\u043B\u043D\u043E\u043C\u043E\u0447\u0438\u0439."):I18n.t("kazna.service_staff","\u041F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u0443 \u041A\u0430\u043D\u0446\u0435\u043B\u044F\u0440\u0438\u0438 \u0432\u0435\u0441\u044C \u0430\u0441\u0441\u043E\u0440\u0442\u0438\u043C\u0435\u043D\u0442 \u0432\u044B\u0434\u0430\u043D \u043D\u0430 \u0432\u0440\u0435\u043C\u044F \u0441\u043B\u0443\u0436\u0431\u044B.")} ${I18n.t("kazna.service_purchases","\u041B\u0438\u0447\u043D\u044B\u0435 \u043F\u043E\u043A\u0443\u043F\u043A\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u044E\u0442\u0441\u044F \u043F\u043E\u0441\u043B\u0435 \u0441\u043D\u044F\u0442\u0438\u044F \u0434\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u0438.")}</span></div>`:""} 276 <div class="kazna-cosmetic-preview" id="kazna-cosmetic-preview" style="--profile-tone:${toneColor};--cosmetic-name:${nameColor}" aria-label="${I18n.t("kazna.preview_aria","\u041F\u0440\u0438\u043C\u0435\u0440 \u0440\u0430\u0441\u043A\u0440\u0430\u0441\u043A\u0438 \u041F\u0430\u0441\u043F\u043E\u0440\u0442\u0430")}"> 277 <div class="kazna-cosmetic-preview-cover" aria-hidden="true"><span>${I18n.t("kazna.passport_preview","\u041F\u0430\u0441\u043F\u043E\u0440\u0442 \xB7 \u043F\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0432\u0438\u0434")}</span></div> 278 <div class="kazna-cosmetic-preview-body"> 279 <div class="kazna-cosmetic-preview-avatar" aria-hidden="true">${previewAvatar}</div> 280 <div class="kazna-cosmetic-preview-identity"> 281 <span class="profile-name cosmetic-user-name cosmetic-user-name-colored${previewShimmer?" cosmetic-user-name-shimmer":""} kazna-cosmetic-name" id="kazna-cosmetic-name">${Utils.esc(previewName)}</span> 282 <span class="kazna-cosmetic-handle">@${Utils.esc(previewUser.username)}</span> 283 </div> 284 <span class="kazna-cosmetic-preview-note">${I18n.t("kazna.color_preview","\u041D\u0430\u0436\u0438\u043C\u0430\u0439\u0442\u0435 \u0446\u0432\u0435\u0442\u0430 \u043D\u0438\u0436\u0435 \u2014 \u043E\u0431\u0440\u0430\u0437\u0435\u0446 \u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F \u0434\u043E \u043F\u043E\u043A\u0443\u043F\u043A\u0438")}</span> 285 </div> 286 </div> 287 <div class="kazna-cosmetic-list"> 288 <div class="kazna-cosmetic-row"> 289 <div class="kazna-cosmetic-copy"><b>${Utils.esc(this.cosmeticText(nameItem,"title"))}</b><span>${Utils.esc(this.cosmeticText(nameItem,"description"))}</span></div> 290 ${palette(nameItem,"name_color",nameChoice)} 291 <div class="kazna-cosmetic-buy"><span>${accessLabel("name_color")||I18n.t("kazna.price_short","{amount} cherv.",{amount:this._n(nameItem.price)})}</span>${action(nameItem,"name_color",hasAccess("name_color"),hasAccess("name_color")?I18n.t("kazna.apply_color","\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C \u0446\u0432\u0435\u0442"):I18n.t("kazna.open_palette","\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043F\u0430\u043B\u0438\u0442\u0440\u0443 \xB7 {amount}",{amount:this._n(nameItem.price)}))}</div> 292 </div> 293 <div class="kazna-cosmetic-row"> 294 <div class="kazna-cosmetic-copy"><b>${Utils.esc(this.cosmeticText(shimmerItem,"title"))}</b><span>${Utils.esc(this.cosmeticText(shimmerItem,"description"))}</span></div> 295 <div class="kazna-cosmetic-try"><button type="button" class="btn btn-ghost btn-sm kazna-cosmetic-preview-shimmer" 296 aria-pressed="${previewShimmer?"true":"false"}">${previewShimmer?I18n.t("kazna.remove_preview","\u0423\u0431\u0440\u0430\u0442\u044C \u0441 \u043E\u0431\u0440\u0430\u0437\u0446\u0430"):I18n.t("kazna.try_shimmer","\u041F\u0440\u0438\u043C\u0435\u0440\u0438\u0442\u044C \u043F\u0435\u0440\u0435\u043B\u0438\u0432\u0430\u043D\u0438\u0435")}</button></div> 297 <div class="kazna-cosmetic-buy"><span>${owned.has("name_shimmer")&&shimmerOn?I18n.t("common.enabled","\u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043E"):accessLabel("name_shimmer")||I18n.t("kazna.price_short","{amount} \u0447\u0435\u0440\u0432.",{amount:this._n(shimmerItem.price)})}</span>${action(shimmerItem,"name_effect",hasAccess("name_shimmer"),hasAccess("name_shimmer")?shimmerOn?I18n.t("common.disable","\u0412\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C"):I18n.t("common.enable","\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C"):I18n.t("kazna.buy_shimmer","\u041A\u0443\u043F\u0438\u0442\u044C \u043F\u043E\u0434\u0441\u0432\u0435\u0442\u043A\u0443 \xB7 {amount}",{amount:this._n(shimmerItem.price)}))}</div> 298 </div> 299 <div class="kazna-cosmetic-row"> 300 <div class="kazna-cosmetic-copy"><b>${Utils.esc(this.cosmeticText(toneItem,"title"))}</b><span>${Utils.esc(this.cosmeticText(toneItem,"description"))}</span></div> 301 ${palette(toneItem,"profile_tone",toneChoice)} 302 <div class="kazna-cosmetic-buy"><span>${accessLabel("profile_tone")||I18n.t("kazna.price_short","{amount} \u0447\u0435\u0440\u0432.",{amount:this._n(toneItem.price)})}</span>${action(toneItem,"profile_tone",hasAccess("profile_tone"),hasAccess("profile_tone")?I18n.t("kazna.apply_background","\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C \u0444\u043E\u043D"):I18n.t("kazna.open_background","\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0444\u043E\u043D \xB7 {amount}",{amount:this._n(toneItem.price)}))}</div> 303 </div> 304 <div class="kazna-cosmetic-row kazna-reaction-pack"> 305 <div class="kazna-cosmetic-copy"> 306 <b>${Utils.esc(this.cosmeticText(reactionPack,"title"))}</b>
307 <span>${Utils.esc(this.cosmeticText(reactionPack,"description"))}</span> 308 <div class="kazna-reaction-availability" aria-label="${I18n.t("kazna.works_in_sections","\u0420\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u0432 \u0440\u0430\u0437\u0434\u0435\u043B\u0430\u0445")}"> 309 <small>${I18n.t("kazna.works_in","\u0420\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u0432")}</small>${packSurfaces} 310 </div> 311 </div> 312 <div class="kazna-reaction-faces" role="img" aria-label="${I18n.t("kazna.reactions_pack_aria","\u0428\u0435\u0441\u0442\u044C \u0440\u0435\u0430\u043A\u0446\u0438\u0439 \u0438\u0437 \u043F\u0430\u043F\u043A\u0438")}">${packFaces}</div> 313 <div class="kazna-cosmetic-buy"><span>${packOwned?I18n.t("kazna.owned_forever","\u043F\u0440\u0438\u043E\u0431\u0440\u0435\u0442\u0435\u043D\u043E \u043D\u0430\u0432\u0441\u0435\u0433\u0434\u0430"):serviceAccess?temporaryAccessLabel:I18n.t("kazna.price_short","{amount} \u0447\u0435\u0440\u0432.",{amount:this._n(reactionPack.price)})}</span><button type="button" class="btn ${packAccess?"btn-secondary":"btn-primary"} btn-sm kazna-cosmetic-action" data-cosmetic-item="${reactionPack.code}" data-license-only="1" data-owned="${packAccess?"1":"0"}" ${packAccess?"disabled":reactionPack.price>shop.balance?`disabled title="${I18n.t("kazna.insufficient","\u041D\u0435\u0434\u043E\u0441\u0442\u0430\u0442\u043E\u0447\u043D\u043E \u0447\u0435\u0440\u0432\u043E\u043D\u0446\u0435\u0432")}"`:""}>${packAccess?I18n.t("kazna.pack_open","\u041F\u0430\u043F\u043A\u0430 \u043E\u0442\u043A\u0440\u044B\u0442\u0430"):I18n.t("kazna.buy_pack","\u041A\u0443\u043F\u0438\u0442\u044C \u043F\u0430\u043F\u043A\u0443 \xB7 {amount}",{amount:this._n(reactionPack.price)})}</button></div> 314 </div> 315 </div> 316 </section>`},bindCosmetics(){document.querySelectorAll(".kazna-cosmetic-swatch").forEach(btn=>{btn.addEventListener("click",()=>{const slot=btn.dataset.cosmeticSlot,value=btn.dataset.cosmeticColor;if(!Utils.cosmeticColor(value))return;this._cosmeticDraft||(this._cosmeticDraft={}),this._cosmeticDraft[slot]=value,document.querySelectorAll(`.kazna-cosmetic-swatch[data-cosmetic-slot="${slot}"]`).forEach(x=>{const on=x===btn;x.classList.toggle("selected",on),x.setAttribute("aria-pressed",on?"true":"false")});const preview=document.getElementById("kazna-cosmetic-preview");preview&&preview.style.setProperty(slot==="name_color"?"--cosmetic-name":"--profile-tone",Utils.cosmeticColor(value))})});const shimmerPreview=document.querySelector(".kazna-cosmetic-preview-shimmer");shimmerPreview&&shimmerPreview.addEventListener("click",()=>{this._cosmeticPreviewShimmer=!this._cosmeticPreviewShimmer;const on=!!this._cosmeticPreviewShimmer,name=document.getElementById("kazna-cosmetic-name");name&&name.classList.toggle("cosmetic-user-name-shimmer",on),shimmerPreview.setAttribute("aria-pressed",on?"true":"false"),shimmerPreview.textContent=on?I18n.t("kazna.remove_preview","\u0423\u0431\u0440\u0430\u0442\u044C \u0441 \u043E\u0431\u0440\u0430\u0437\u0446\u0430"):I18n.t("kazna.try_shimmer","\u041F\u0440\u0438\u043C\u0435\u0440\u0438\u0442\u044C \u043F\u0435\u0440\u0435\u043B\u0438\u0432\u0430\u043D\u0438\u0435")}),document.querySelectorAll(".kazna-cosmetic-action").forEach(btn=>{btn.addEventListener("click",()=>this.saveCosmetic(btn))})},async saveCosmetic(btn){if(!btn||btn.disabled||this._cosmeticBusy)return;const item=btn.dataset.cosmeticItem,slot=btn.dataset.cosmeticSlot,owned=btn.dataset.owned==="1",licenseOnly=btn.dataset.licenseOnly==="1";if(licenseOnly&&owned)return;const active=this.state.cosmetics&&this.state.cosmetics.loadout||{};let value=licenseOnly?null:slot==="name_effect"?"shimmer":this._cosmeticDraft&&this._cosmeticDraft[slot];this._cosmeticBusy=!0,btn.disabled=!0,btn.setAttribute("aria-busy","true");try{let r;owned?(slot==="name_effect"&&active.name_effect==="shimmer"&&(value=null),r=await Api.donations.applyCosmetic(slot,value)):r=await Api.donations.purchaseCosmetic(item,value),this.state.cosmetics=r.shop,this.state.me&&Number.isFinite(Number(r.shop?.balance))&&(this.state.me.chervonets_balance=Number(r.shop.balance)),this._cosmeticDraft={...r.shop.loadout},licenseOnly&&typeof ChatsPage<"u"&&(ChatsPage._reactionPackOwned=!0,ChatsPage.refreshReactionEntitlements()),this.paint(),Utils.showToast(licenseOnly?I18n.t("kazna.pack_registered","\u041F\u0430\u043F\u043A\u0430 \u0440\u0435\u0430\u043A\u0446\u0438\u0439 \u0432\u043D\u0435\u0441\u0435\u043D\u0430 \u0432 \u0440\u0435\u0435\u0441\u0442\u0440."):r.purchased?I18n.t("kazna.purchase_applied","\u041F\u043E\u043A\u0443\u043F\u043A\u0430 \u0432\u043D\u0435\u0441\u0435\u043D\u0430 \u0432 \u0440\u0435\u0435\u0441\u0442\u0440 \u0438 \u043F\u0440\u0438\u043C\u0435\u043D\u0435\u043D\u0430."):value?I18
316n.t("kazna.cosmetic_applied","\u041A\u043E\u0441\u043C\u0435\u0442\u0438\u043A\u0430 \u043F\u0440\u0438\u043C\u0435\u043D\u0435\u043D\u0430."):I18n.t("kazna.cosmetic_removed","\u041A\u043E\u0441\u043C\u0435\u0442\u0438\u043A\u0430 \u0441\u043D\u044F\u0442\u0430."),"success")}catch(e){Utils.showToast(this.errorText(e,"kazna.shop_unavailable","\u041B\u0430\u0432\u043A\u0430 \u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E \u043D\u0435 \u043F\u0440\u043E\u0432\u043E\u0434\u0438\u0442 \u043F\u043E\u043A\u0443\u043F\u043A\u0443"),"error")}finally{this._cosmeticBusy=!1,btn&&(btn.disabled=!1,btn.removeAttribute("aria-busy"))}},tiersHtml(tiers){const PERKS={bronze:I18n.t("kazna.bronze","\u0417\u043D\u0430\u0447\u043E\u043A \u043C\u0435\u0446\u0435\u043D\u0430\u0442\u0430 \u0443 \u0438\u043C\u0435\u043D\u0438 \u043F\u043E \u0432\u0441\u0435\u043C\u0443 \u0415\u0433\u043E\u0440\u043E\u0434\u0443, \u0431\u0440\u043E\u043D\u0437\u043E\u0432\u0430\u044F \u043E\u0431\u0432\u043E\u0434\u043A\u0430 \u041F\u0430\u0441\u043F\u043E\u0440\u0442\u0430, \u0438\u043C\u044F \u0432 \u0417\u043E\u043B\u043E\u0442\u043E\u0439 \u043A\u043D\u0438\u0433\u0435"),silver:I18n.t("kazna.silver","+ \u0441\u0435\u0440\u0435\u0431\u0440\u044F\u043D\u0430\u044F \u043E\u0431\u0432\u043E\u0434\u043A\u0430 \u041F\u0430\u0441\u043F\u043E\u0440\u0442\u0430 \u0438 \u043F\u0440\u0430\u0432\u043E \u043D\u0430 \u0430\u043D\u0438\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 GIF-\u0430\u0432\u0430\u0442\u0430\u0440"),gold:I18n.t("kazna.gold","+ \u0437\u043E\u043B\u043E\u0442\u0430\u044F \u043E\u0431\u0432\u043E\u0434\u043A\u0430 \u0438 \u0438\u043C\u0435\u043D\u043D\u043E\u0439 \u0434\u0435\u0432\u0438\u0437 \u2014 \u0441\u0442\u0440\u043E\u043A\u0430 \u043F\u043E\u0434 \u0432\u0430\u0448\u0438\u043C \u0438\u043C\u0435\u043D\u0435\u043C"),platinum:I18n.t("kazna.platinum","+ \u043F\u043B\u0430\u0442\u0438\u043D\u043E\u0432\u0430\u044F \u043E\u0431\u0432\u043E\u0434\u043A\u0430 \u0438 \u0432\u0435\u0447\u043D\u043E\u0435 \u043C\u0435\u0441\u0442\u043E \u043D\u0430 \u0414\u043E\u0441\u043A\u0435 \u043F\u043E\u0447\u0451\u0442\u0430 \xAB\u0421\u0442\u043E\u043B\u043F\u044B \u0415\u0433\u043E\u0440\u043E\u0434\u0430\xBB")};return` 317 <div class="kazna-tiers"> 318 ${tiers.map(t=>` 319 <div class="kazna-tier patron-${t.key}"> 320 <div class="kazna-tier-chip" aria-hidden="true">${Icons.render("landmark",20)}</div> 321 <div class="kazna-tier-name">${Utils.esc(this.tierLabel(t))}</div> 322 <div class="kazna-tier-min">${I18n.t("kazna.from","\u043E\u0442")} <span class="kazna-num">${this._n(t.min)}</span> ${this.chervonets(t.min)}</div> 323 <div class="kazna-tier-perk">${Utils.esc(PERKS[t.key]||"")}</div> 324 </div>`).join("")} 325 </div>`},pillarsHtml(){const p=this.state.pillars;return!p||!p.length?"":` 326 <section class="card kazna-pillars"> 327 <div class="kazna-eyebrow">${I18n.t("kazna.honor_roll","\u0414\u043E\u0441\u043A\u0430 \u043F\u043E\u0447\u0451\u0442\u0430 \xB7 \u0421\u0442\u043E\u043B\u043F\u044B \u0415\u0433\u043E\u0440\u043E\u0434\u0430")}</div> 328 <div class="kazna-pillars-sub">${I18n.t("kazna.pillars_subtitle","\u041F\u043B\u0430\u0442\u0438\u043D\u043E\u0432\u044B\u0435 \u043C\u0435\u0446\u0435\u043D\u0430\u0442\u044B \u2014 \u0432\u0435\u0447\u043D\u043E\u0435 \u043F\u0440\u0438\u0437\u043D\u0430\u043D\u0438\u0435 \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u0430. \u0418\u0445 \u0438\u043C\u0435\u043D\u0430 \u043D\u0435 \u043F\u043E\u043A\u0438\u0434\u0430\u044E\u0442 \u0414\u043E\u0441\u043A\u0443.")}</div> 329 <div class="kazna-pillars-grid"> 330 ${p.map(e=>` 331 <div class="kazna-pillar" data-id="${e.id}" ${Utils.clickable()} aria-label="${I18n.t("kazna.profile_aria","\u041F\u0440\u043E\u0444\u0438\u043B\u044C {name}",{name:Utils.esc(Utils.localizedDisplayName(Utils.compactDisplayName(e.name||e.username),""))})}"> 332 <div class="kazna-pillar-avatar">${Utils.getAvatar(e,56)}</div> 333 <div class="kazna-pillar-name">${Utils.userNameHtml(e,"",{compactDecorations:!0})} ${Utils.getVerifiedBadge(e.verified)}</div> 334 ${e.patron_quote?`<div class="kazna-pillar-devise">\xAB${Utils.esc(e.patron_quote)}\xBB</div>`:""} 335 <div class="kazna-pillar-since">${e.patron_since?I18n.t("kazna.pillar_since","\u0441\u0442\u043E\u043B\u043F \u0441 {date}",{date:I18n.formatDate(e.patron_since*1e3,{month:"long",year:"numeric"})}):I18n.t("kazna.platinum_pillar","\u043F\u043B\u0430\u0442\u0438\u043D\u043E\u0432\u044B\u0439 \u0441\u0442\u043E\u043B\u043F")}</div> 336 </div>`).join("")} 337 </div> 338 </section>`},feedHtml(){const r=this.state.recent;return!r||new Set(r.map(e=>e.user_id)).size<2?"":` 339 <div class="card kazna-panel"> 340 <h2 class="kazna-h2">${I18n.t("kazna.recent_contributions","\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0435 \u0432\u0437\u043D\u043E\u0441\u044B")}</h2> 341 <div class="kazna-feed"> 342 ${r.map(e=>` 343 <div class="kazna-feed-row" data-id="${e.user_id}" ${Utils.clickable()} aria-label="${I18n.t("kazna.profile_aria","\u041F\u0440\u043E\u0444\u0438\u043B\u044C {name}",{name:Utils.esc(Utils.localizedDisplayName(Utils.compactDisplayName(e.name||e.username),""))})}"> 344 ${Utils.getAvatar(e,36)} 345 <div class="kazna-feed-body"> 346 <div class="kazna-feed-head">
347 <span class="kazna-feed-name">${Utils.userNameHtml(e,"",{compactDecorations:!0})} ${Utils.getVerifiedBadge(e.verified)}${Utils.getPatronBadge(e,{compact:!0})}</span> 348 <span class="kazna-feed-amt">+${this._n(e.chervonets)} <span>${this.chervonets(e.chervonets)}</span></span> 349 </div> 350 ${e.note?`<div class="kazna-feed-note">\xAB${Utils.esc(e.note)}\xBB</div>`:""} 351 <div class="kazna-feed-time">${Utils.timeAgo(e.created_at)||I18n.t("common.just_now","\u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u043E")}</div> 352 </div> 353 </div>`).join("")} 354 </div> 355 </div>`},boardHtml(){const b=this.state.board;return b.length?` 356 <div class="card kazna-panel"> 357 <h2 class="kazna-h2">${I18n.t("kazna.golden_book","\u0417\u043E\u043B\u043E\u0442\u0430\u044F \u043A\u043D\u0438\u0433\u0430 \u043C\u0435\u0446\u0435\u043D\u0430\u0442\u043E\u0432")}</h2> 358 <div class="kazna-book"> 359 ${b.map(e=>` 360 <div class="kazna-book-row" data-id="${e.id}" ${Utils.clickable()} aria-label="${I18n.t("kazna.profile_aria","\u041F\u0440\u043E\u0444\u0438\u043B\u044C {name}",{name:Utils.esc(Utils.localizedDisplayName(Utils.compactDisplayName(e.name||e.username),""))})}"> 361 <div class="kazna-book-rank">${e.rank}</div> 362 ${Utils.getAvatar(e,40)} 363 <div class="kazna-book-who"> 364 <div class="kazna-book-name">${Utils.userNameHtml(e,"",{compactDecorations:!0})} ${Utils.getVerifiedBadge(e.verified)}</div> 365 <div class="kazna-book-tier">${e.patron_label?Utils.esc(this.tierLabel(e.patron_tier,e.patron_label)):""}${e.is_active_patron?` \xB7 ${I18n.t("kazna.active","\u043F\u043E\u0441\u0442\u043E\u044F\u043D\u043D\u044B\u0439")}`:""}</div> 366 ${e.patron_quote?`<div class="kazna-book-devise">\xAB${Utils.esc(e.patron_quote)}\xBB</div>`:""} 367 </div> 368 <div class="kazna-book-amt">${this._n(e.donated_total)} <span>${this.chervonets(e.donated_total)}</span></div> 369 </div>`).join("")} 370 </div> 371 </div>`:`<div class="card kazna-panel"><h2 class="kazna-h2">${I18n.t("kazna.golden_book","\u0417\u043E\u043B\u043E\u0442\u0430\u044F \u043A\u043D\u0438\u0433\u0430 \u043C\u0435\u0446\u0435\u043D\u0430\u0442\u043E\u0432")}</h2> 372 <div class="kazna-book-empty"> 373 <div class="kazna-book-empty-icon" aria-hidden="true">${Icons.render("book",34)}</div> 374 <div class="kazna-book-empty-title">${I18n.t("kazna.book_empty_title","\u041A\u043D\u0438\u0433\u0430 \u043F\u043E\u043A\u0430 \u0447\u0438\u0441\u0442\u0430")}</div> 375 <div class="kazna-book-empty-text">${I18n.t("kazna.book_empty_text","\u041D\u0438 \u043E\u0434\u043D\u043E\u0433\u043E \u043C\u0435\u0446\u0435\u043D\u0430\u0442\u0430 \u0435\u0449\u0451 \u043D\u0435 \u0432\u043F\u0438\u0441\u0430\u043D\u043E. \u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0417\u043E\u043B\u043E\u0442\u0443\u044E \u043A\u043D\u0438\u0433\u0443 \u043F\u0435\u0440\u0432\u044B\u043C \u2014 \u043E\u0441\u043E\u0431\u0430\u044F \u0447\u0435\u0441\u0442\u044C.")}</div> 376 </div></div>`},bind(){document.querySelectorAll(".kazna-book-row, .kazna-pillar, .kazna-feed-row").forEach(r=>{r.addEventListener("click",()=>App.navigate("#/profile/"+r.dataset.id))}),document.querySelectorAll(".kazna-preset").forEach(btn=>{btn.addEventListener("click",()=>{const inp=document.getElementById("kazna-amount");inp&&(inp.value=btn.dataset.amount)})});const donateBtn=document.getElementById("kazna-donate-btn");donateBtn&&donateBtn.addEventListener("click",()=>this.donate());const headDonate=document.getElementById("kazna-head-donate");headDonate&&headDonate.addEventListener("click",()=>{const pay=document.querySelector(".kazna-pay");if(!pay)return;const reduce=Utils.reduceMotion?Utils.reduceMotion():!0;try{pay.scrollIntoView({block:"start",behavior:reduce?"auto":"smooth"})}catch{}const first=pay.querySelector(".kazna-paytab.active, .kazna-rub-btn, .kazna-preset, #kazna-amount");if(first&&first.focus)try{first.focus({preventScroll:!0})}catch{}});const deviseBtn=document.getElementById("kazna-devise-save");deviseBtn&&deviseBtn.addEventListener("click",()=>this.saveQuote());const shareBtn=document.getElementById("kazna-share");shareBtn&&shareBtn.addEventListener("click",()=>this.shareStatus(shareBtn)),document.querySelectorAll(".kazna-paytab").forEach(t=>{t.addEventListener("click",()=>this._activateMethod(t.dataset.method))});const tablist=document.querySelector(".kazna-paytabs");tablist&&tablist.addEventListener("keydown",e=>
376{if(!["ArrowLeft","ArrowRight","Home","End"].includes(e.key))return;const tabs=Array.from(tablist.querySelectorAll(".kazna-paytab")),cur=tabs.findIndex(t=>t.dataset.method===this._payMethod);if(cur<0)return;e.preventDefault();let next=cur;e.key==="ArrowLeft"?next=(cur-1+tabs.length)%tabs.length:e.key==="ArrowRight"?next=(cur+1)%tabs.length:e.key==="Home"?next=0:e.key==="End"&&(next=tabs.length-1),this._activateMethod(tabs[next].dataset.method,!0)});const rubLink=document.getElementById("kazna-rub-link");rubLink&&rubLink.addEventListener("click",()=>this.linkAndPayRub(rubLink));const guildBtn=document.getElementById("kazna-guild-submit");guildBtn&&guildBtn.addEventListener("click",()=>this.submitGuild()),this._guildEligible(this.state.me)&&this.loadGuild(),this.bindEconomy(),this.bindCosmetics()},GUILD_TIER_ORDER:["bronze","silver","gold","platinum"],_guildVisible(){return App.feature("guild")||App.state.user&&Utils.isStaff(App.state.user)},_guildEligible(me){return App.state.user&&Utils.isStaff(App.state.user)?!0:!!me&&this.GUILD_TIER_ORDER.indexOf(me.tier)>=1},guildHtml(me){if(!this._guildVisible())return"";const disclaimer=I18n.t("kazna.guild_disclaimer","\u0417\u0430\u043A\u0440\u044B\u0442\u044B\u0439 \u0441\u043E\u0432\u0435\u0442 \u0431\u043B\u0430\u0433\u043E\u0442\u0432\u043E\u0440\u0438\u0442\u0435\u043B\u0435\u0439. \u041F\u0440\u043E\u0448\u0435\u043D\u0438\u044F \u0413\u0438\u043B\u044C\u0434\u0438\u0438 \u041A\u0430\u043D\u0446\u0435\u043B\u044F\u0440\u0438\u044F \u0440\u0430\u0441\u0441\u043C\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u0432 \u043F\u0435\u0440\u0432\u0443\u044E \u043E\u0447\u0435\u0440\u0435\u0434\u044C. \u0422\u043E\u043B\u044C\u043A\u043E \u043F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442 \u0438 \u0437\u043D\u0430\u043A \u043F\u043E\u0447\u0451\u0442\u0430 \u2014 \u043F\u0440\u0430\u0432 \u0432 \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u0435, \u043F\u0435\u0440\u0435\u0432\u0435\u0441\u0430 \u0432 \u0438\u0433\u0440\u0430\u0445 \u0438 \u043E\u0447\u043A\u043E\u0432 \u0415\u0433\u043E\u0440\u0438\u0437\u043C\u0430 \u043D\u0435 \u0434\u0430\u0451\u0442."),head=` 377 <div class="kazna-guild-head"> 378 <div class="kazna-guild-seal" aria-hidden="true">${Icons.render("landmark",24)}</div> 379 <div> 380 <h2 class="kazna-guild-title">${I18n.t("kazna.patron_guild_title","\u0413\u0438\u043B\u044C\u0434\u0438\u044F \u043C\u0435\u0446\u0435\u043D\u0430\u0442\u043E\u0432")}</h2> 381 <p class="kazna-guild-sub">${disclaimer}</p> 382 </div> 383 </div>`;if(!this._guildEligible(me))return`<section class="card kazna-guild kazna-guild-locked" aria-label="${I18n.t("kazna.patron_guild","\u0413\u0438\u043B\u044C\u0434\u0438\u044F \u043C\u0435\u0446\u0435\u043D\u0430\u0442\u043E\u0432")}"> 384 ${head} 385 <div class="kazna-guild-lock">${Icons.render("lock",16)} ${I18n.t("kazna.guild_locked","\u0413\u0438\u043B\u044C\u0434\u0438\u044F \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0441\u043E \u0437\u0432\u0430\u043D\u0438\u044F \xAB\u0421\u0435\u0440\u0435\u0431\u0440\u044F\u043D\u044B\u0439 \u0431\u043B\u0430\u0433\u043E\u0442\u0432\u043E\u0440\u0438\u0442\u0435\u043B\u044C\xBB. \u0412\u043D\u0435\u0441\u0438\u0442\u0435 \u0432\u043A\u043B\u0430\u0434 \u0432 \u041A\u0430\u0437\u043D\u0443 \u2014 \u0438 \u043C\u0435\u0441\u0442\u043E \u0432 \u0441\u043E\u0432\u0435\u0442\u0435 \u0432\u0430\u0448\u0435.")}</div> 386 </section>`;const composer=App.isMuted()?` 387 <div class="kazna-guild-lock">${Icons.render("lock",16)} ${I18n.t("kazna.guild_muted_notice","\u041F\u043E\u043A\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u043C\u0443\u0442, \u0413\u0438\u043B\u044C\u0434\u0438\u044F \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0442\u043E\u043B\u044C\u043A\u043E \u0434\u043B\u044F \u0447\u0442\u0435\u043D\u0438\u044F \u0438 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0438.")}</div>`:` 388 <div class="kazna-guild-composer"> 389 <input id="kazna-guild-title" class="form-input" type="text" maxlength="${App.limit("suggestion_title_max",120)}" placeholder="${I18n.t("kazna.suggestion_placeholder","\u041A\u043E\u0440\u043E\u0442\u043A\u043E: \u0447\u0442\u043E \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0438\u0442\u044C \u0415\u0433\u043E\u0440\u043E\u0434\u0443?")}" aria-label="${I18n.t("kazna.guild_title_aria","\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u043F\u0440\u043E\u0448\u0435\u043D\u0438\u044F \u0413\u0438\u043B\u044C\u0434\u0438\u0438")}"> 390 <textarea id="kazna-guild-body" class="form-textarea" rows="3" maxlength="${App.limit("suggestion_body_max",4e3)}" placeholder="${I18n.t("kazna.guild_details_placeholder","\u041F\u043E\u0434\u0440\u043E\u0431\u043D\u043E\u0441\u0442\u0438 (\u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E)")}" aria-label="${I18n.t("kazna.guild_body_aria","\u0422\u0435\u043A\u0441\u0442 \u043F\u0440\u043E\u0448\u0435\u043D\u0438\u044F \u0413\u0438\u043B\u044C\u0434\u0438\u0438")}"></textarea> 391 <button class="btn btn-primary btn-sm" id="kazna-guild-submit" type="button">${I18n.t("kazna.guild_submit","\u041F\u043E\u0434\u0430\u0442\u044C \u0432 \u0413\u0438\u043B\u044C\u0434\u0438\u044E")}</button> 392 </div>`;return`<section class="card kazna-guild" aria-label="${I18n.t("kazna.patron_guild","\u0413\u0438\u043B\u044C\u0434\u0438\u044F \u043C\u0435\u0446\u0435\u043D\u0430\u0442\u043E\u0432")}"> 393 ${head} 394 ${composer} 395 <div id="kazna-guild-list" class="kazna-guild-list">${Utils.skeletonCards?Utils.skeletonCards(2):""}</div> 396 </section>`},async loadGuild(){const list=document.getElementById("kazna-guild-list");if(list)try{const{suggestions}=await Api.suggestions.list({scope:"guild",sort:"top",limit:30});if(!suggestions||!suggestions.length){const hint=App.isMuted()?I18n.t("kazna.guild_muted_hint","\u041F\u043E\u043A\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u043C\u0443\u0442, \u0413\u0438\u043B\u044C\u0434\u0438\u044F \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0442\u043E\u043B\u044C\u043A\u043E \u0434\u043B\u044F \u0447\u0442\u0435\u043D\u0438\u044F \u0438 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0438."):I18n.t("kazna.guild_first_hint","\u041F\u043E\u0434\u0430\u0439\u0442\u0435 \u043F\u0435\u0440\u0432\u043E\u0435 \u043F\u0440\u043E\u0448\u0435\u043D\u0438\u0435 \u2014 \u0441\u043E\u0432\u0435\u0442 \u043C\u0435\u0446\u0435\u043D\u0430\u0442\u043E\u0432 \u0436\u0434\u0451\u0442 \u0438\u0434\u0435\u0439.");list.innerHTML=`<div class="empty-state"><div class="empty-state-icon">${Icons.render("scroll")}</div><div class="empty-state-title">${I18n.t("kazna.guild_empty_title","\u0412 \u0413\u0438\u043B\u044C\u0434\u0438\u0438 \u043F\u043E\u043A\u0430 \u0442\u0438\u0445\u043E")}</div><div class="empty-state-text">${hint}</div></div>`;return}list.innerHTML=suggestions.map(s=>SuggestionsPage.card(s)).join("")}catch{list.innerHTML=`<div class="empty-state"><div class="empty-state-icon">${Icons.render("alert")}</div><div class="empty-state-title">${I18n.t("kazna.guild_not_responding","\u0413\u0438\u043B\u044C\u0434\u0438\u044F \u043D\u0435 \u043E\u0442\u0432\u0435\u0447\u0430\u0435\u0442")}</div><div class="empty-state-text">
396${I18n.t("kazna.kanzellaria_working","\u041A\u0430\u043D\u0446\u0435\u043B\u044F\u0440\u0438\u044F \u0443\u0436\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044F \u2014 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443.")}</div></div>`}},async submitGuild(){if(!this._guildEligible(this.state.me)){Utils.showToast(I18n.t("kazna.guild_requires_silver","\u0413\u0438\u043B\u044C\u0434\u0438\u044F \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u043C\u0435\u0446\u0435\u043D\u0430\u0442\u0430\u043C \u043E\u0442 \u0421\u0435\u0440\u0435\u0431\u0440\u044F\u043D\u043E\u0433\u043E \u0442\u0438\u0440\u0430"),"error");return}if(App.isMuted()){Utils.showToast(I18n.t("kazna.guild_muted_notice","\u041F\u043E\u043A\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u043C\u0443\u0442, \u0413\u0438\u043B\u044C\u0434\u0438\u044F \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0442\u043E\u043B\u044C\u043A\u043E \u0434\u043B\u044F \u0447\u0442\u0435\u043D\u0438\u044F \u0438 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0438."),"error");return}const titleEl=document.getElementById("kazna-guild-title"),bodyEl=document.getElementById("kazna-guild-body"),btn=document.getElementById("kazna-guild-submit"),title=titleEl?titleEl.value.trim():"";if(title.length<3){Utils.showToast(I18n.t("kazna.guild_title_short","\u041E\u043F\u0438\u0448\u0438\u0442\u0435 \u0441\u0443\u0442\u044C \u043F\u0440\u043E\u0448\u0435\u043D\u0438\u044F (\u0445\u043E\u0442\u044F \u0431\u044B \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0441\u043B\u043E\u0432)"),"error");return}btn&&(btn.disabled=!0,btn.setAttribute("aria-busy","true"));try{const fd=new FormData;fd.append("title",title),fd.append("body",bodyEl?bodyEl.value.trim():""),fd.append("category","idea"),fd.append("scope","guild");const{suggestion}=await Api.suggestions.create(fd);titleEl&&(titleEl.value=""),bodyEl&&(bodyEl.value=""),Utils.showToast(I18n.t("kazna.guild_submitted","\u041F\u0440\u043E\u0448\u0435\u043D\u0438\u0435 \u043F\u043E\u0434\u0430\u043D\u043E \u0432 \u0413\u0438\u043B\u044C\u0434\u0438\u044E"),"success");const list=document.getElementById("kazna-guild-list");list&&(list.querySelector(".empty-state")&&(list.innerHTML=""),list.insertAdjacentHTML("afterbegin",SuggestionsPage.card(suggestion)))}catch(e){Utils.showToast(this.errorText(e,"kazna.guild_submit_failed","\u0413\u0438\u043B\u044C\u0434\u0438\u044F \u043D\u0435 \u043F\u0440\u0438\u043D\u044F\u043B\u0430 \u043F\u0440\u043E\u0448\u0435\u043D\u0438\u0435. \u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435."),"error")}finally{btn&&(btn.disabled=!1,btn.removeAttribute("aria-busy"))}},async linkAndPayRub(btn){btn.disabled=!0,btn.setAttribute("aria-busy","true");try{const r=await Api.auth.startTelegramLink("#/kazna?pay=tribute");location.href=r.url}catch(e){btn.disabled=!1,btn.removeAttribute("aria-busy"),Utils.showToast(this.errorText(e,"kazna.telegram_open_failed","\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0442\u043A\u0440\u044B\u0442\u044C Telegram"),"error")}},async shareStatus(btn=null){const me=this.state.me;if(!me||!me.tier)return;const url=location.origin+"/kazna",text=I18n.t("kazna.share_text","\u042F \u2014 {tier} \u0415\u0433\u043E\u0440\u043E\u0434\u0430: {amount} {unit} \u0432 \u041A\u0430\u0437\u043D\u0443 \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u0430.",{tier:this.tierLabel(me.tier,me.tier_label),amount:this._n(me.donated_total),unit:this.chervonets(me.donated_total)});return Utils.shareLink({btn,url,text,title:I18n.t("kazna.title","\u041A\u0430\u0437\u043D\u0430 \u0415\u0433\u043E\u0440\u043E\u0434\u0430"),copyMessage:I18n.t("kazna.share_copied","\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E \u2014 \u0434\u0435\u043B\u0438\u0442\u0435\u0441\u044C \u043D\u0430 \u0437\u0434\u043E\u0440\u043E\u0432\u044C\u0435")})},async saveQuote(){const inp=document.getElementById("kazna-devise");if(!inp)return;const btn=document.getElementById("kazna-devise-save");btn&&(btn.disabled=!0,btn.setAttribute("aria-busy","true"));try{const r=await Api.donations.setQuote(inp.value.trim());this.state.me&&(this.state.me.patron_quote=r.patron_quote);const uid=App.state.user&&App.state.user.id,patch=arr=>{const it=arr&&arr.find(x=>x.id===uid);it&&(it.patron_quote=r.patron_quote)};patch(this.state.board),patch(this.state.pillars),this.paint(),Utils.showToast(r.patron_quote?I18n.t("kazna.devise_saved","\u0414\u0435\u0432\u0438\u0437 \u0441\u043E\u0445\u0440\u0430\u043D\u0451\u043D. \u0412\u0435\u0434\u043E\u043C\u0441\u0442\u0432\u043E \u043E\u0442\u043C\u0435\u0442\u0438\u043B\u043E."):I18n.t("kazna.devise_removed","\u0414\u0435\u0432\u0438\u0437 \u0441\u043D\u044F\u0442."),"success")}catch(e){Utils.showToast(this.errorText(e,"kazna.cant_save_motto","\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0434\u0435\u0432\u0438\u0437"),"error")}finally{btn&&(btn.disabled=!1,btn.removeAttribute("aria-busy"))}},async donate(){if(this.state.busy)return;const inp=document.getElementById("kazna-amount"),msgEl=document.getElementById("kazna-message"),amount=Number(inp&&inp.value),
396c=this.state.config;if(!Number.isFinite(amount)||amount<c.min||amount>c.max)return Utils.showToast(I18n.t("kazna.amount_range","\u0421\u0443\u043C\u043C\u0430 \u2014 \u043E\u0442 {min} \u0434\u043E {max} {currency}",{min:c.min,max:c.max,currency:c.currency}),"error");this.state.busy=!0;const btn=document.getElementById("kazna-donate-btn");btn&&(btn.disabled=!0,btn.setAttribute("aria-busy","true"),btn.textContent=I18n.t("kazna.creating_invoice","\u0412\u044B\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u043C \u0441\u0447\u0451\u0442\u2026"));let payWin=window.open("about:blank","_blank");try{const r=await Api.donations.createInvoice(amount,msgEl?msgEl.value.trim():"");if(r.link&&payWin)try{payWin.location.href=Utils.safeUrl(r.link)}catch{payWin=null}else if(payWin)try{payWin.close()}catch{}if(r.link){const box=document.getElementById("kazna-invoice-link");if(box){box.hidden=!1,box.innerHTML=`${I18n.t("kazna.invoice_created","\u0421\u0447\u0451\u0442 \u0441\u043E\u0437\u0434\u0430\u043D. \u041D\u0435 \u043E\u0442\u043A\u0440\u044B\u043B\u043E\u0441\u044C?")} <a href="${Utils.safeUrl(r.link)}" target="_blank" rel="noopener">${I18n.t("kazna.open_payment","\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043E\u043F\u043B\u0430\u0442\u0443")}</a>. ${I18n.t("kazna.after_payment","\u041F\u043E\u0441\u043B\u0435 \u043E\u043F\u043B\u0430\u0442\u044B \u2014")} <button type="button" class="btn btn-sm" id="kazna-recheck">${I18n.t("kazna.recheck_payment","\u042F \u043E\u043F\u043B\u0430\u0442\u0438\u043B, \u043F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C")}</button>`;const rc=document.getElementById("kazna-recheck");rc&&rc.addEventListener("click",async()=>{if(!rc.disabled){rc.disabled=!0,rc.setAttribute("aria-busy","true");try{await this.reconcile(!1)}finally{rc.disabled=!1,rc.removeAttribute("aria-busy")}}})}}Utils.showToast(I18n.t("kazna.invoice_ready","\u0421\u0447\u0451\u0442 \u0441\u043E\u0437\u0434\u0430\u043D \u2014 \u043E\u043F\u043B\u0430\u0442\u0438\u0442\u0435 \u0432 Telegram. \u0417\u0430\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u0435 \u043F\u043E\u0434\u0445\u0432\u0430\u0442\u0438\u043C \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438."),"success",7e3),this.startPaymentPoll()}catch(e){if(payWin)try{payWin.close()}catch{}Utils.showToast(this.errorText(e,"kazna.cant_create_invoice","\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u0441\u0447\u0451\u0442"),"error")}finally{this.state.busy=!1,btn&&(btn.disabled=!1,btn.removeAttribute("aria-busy"),btn.textContent=I18n.t("kazna.contribute","\u0412\u043D\u0435\u0441\u0442\u0438 \u0432\u0437\u043D\u043E\u0441"))}},async reconcile(silent){try{this._handleReconcile(await Api.donations.reconcile(),silent)}catch(e){!silent&&!this._creditShown&&Utils.showToast(this.errorText(e,"kazna.cant_check_payment","\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u043E\u043F\u043B\u0430\u0442\u0443"),"error")}}};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.